@@ -39,6 +39,8 @@ export class GenerateToolbar extends BaseToolbar {
3939 private generateBtn : HTMLButtonElement | null = null ;
4040 private generateError : HTMLElement | null = null ;
4141 private generateNote : HTMLElement | null = null ;
42+ private generateNoteAction : HTMLButtonElement | null = null ;
43+ private generateGroup : HTMLElement | null = null ;
4244 private modelBtn : HTMLButtonElement | null = null ;
4345 private modelLabel : HTMLElement | null = null ;
4446 private modelPopup : HTMLElement | null = null ;
@@ -92,10 +94,13 @@ export class GenerateToolbar extends BaseToolbar {
9294 <button class="ss-media-toolbar-btn ss-ai-picker" data-options-picker type="button" aria-haspopup="dialog">Options</button>
9395 <div class="ss-media-toolbar-popup ss-ai-options-popup" data-options-popup></div>
9496 </div>
95- <button class="ss-media-toolbar-btn ss-ai-generate-btn" data-action="generate">
96- <span data-generate-label>Generate</span>
97- </button>
98- <span class="ss-ai-note" data-generate-note hidden>Generates on render</span>
97+ <div class="ss-ai-generate-group" data-generate-group>
98+ <button class="ss-media-toolbar-btn ss-ai-generate-btn" data-action="generate">
99+ <span data-generate-label>Generate</span>
100+ </button>
101+ <span class="ss-ai-note" data-generate-note hidden>Generates on render</span>
102+ <button type="button" class="ss-ai-note ss-ai-note--action" data-generate-note-action hidden></button>
103+ </div>
99104 <span class="ss-ai-error" data-generate-error hidden></span>
100105 ` ;
101106
@@ -105,6 +110,8 @@ export class GenerateToolbar extends BaseToolbar {
105110 this . generateBtn = this . container . querySelector ( "[data-action='generate']" ) ;
106111 this . generateError = this . container . querySelector ( "[data-generate-error]" ) ;
107112 this . generateNote = this . container . querySelector ( "[data-generate-note]" ) ;
113+ this . generateNoteAction = this . container . querySelector ( "[data-generate-note-action]" ) ;
114+ this . generateGroup = this . container . querySelector ( "[data-generate-group]" ) ;
108115 this . modelBtn = this . container . querySelector ( "[data-model-picker]" ) ;
109116 this . modelLabel = this . container . querySelector ( "[data-model-label]" ) ;
110117 this . modelPopup = this . container . querySelector ( "[data-model-popup]" ) ;
@@ -163,6 +170,11 @@ export class GenerateToolbar extends BaseToolbar {
163170 e . stopPropagation ( ) ;
164171 this . togglePopup ( this . optionsPopup ) ;
165172 } , { signal } ) ;
173+ this . generateNoteAction ?. addEventListener ( "click" , e => {
174+ e . stopPropagation ( ) ;
175+ const clipId = this . getSelectedClipId ( ) ;
176+ if ( clipId ) this . edit . getGenerationStatus ( clipId ) ?. onActivate ?.( ) ;
177+ } , { signal } ) ;
166178 }
167179
168180 private requestGeneration ( ) : void {
@@ -417,22 +429,29 @@ export class GenerateToolbar extends BaseToolbar {
417429 const hasGenerator = this . edit . hasAssetGenerator ( ) ;
418430 this . generateBtn . hidden = ! hasGenerator ;
419431 const status = hasGenerator ? this . edit . getGenerationStatus ( this . getSelectedClipId ( ) ?? "" ) : undefined ;
420- if ( this . generateNote ) {
432+ this . generateGroup ?. classList . toggle ( "has-status" , status !== undefined ) ;
433+ if ( this . generateNote && this . generateNoteAction ) {
434+ const actionable = status ?. onActivate !== undefined ;
421435 if ( ! hasGenerator ) {
422436 this . generateNote . textContent = "Generates on render" ;
423437 this . generateNote . title = "Rendering generates this from the prompt. Register an asset generator to preview it here." ;
424438 delete this . generateNote . dataset [ "tone" ] ;
425- this . generateNote . hidden = false ;
426439 } else if ( status ) {
427- this . generateNote . textContent = status . text ;
428- this . generateNote . dataset [ "tone" ] = status . tone ?? "neutral" ;
429- this . generateNote . removeAttribute ( "title" ) ;
430- this . generateNote . hidden = false ;
431- } else {
432- this . generateNote . textContent = "" ;
433- delete this . generateNote . dataset [ "tone" ] ;
434- this . generateNote . removeAttribute ( "title" ) ;
435- this . generateNote . hidden = true ;
440+ const target = actionable ? this . generateNoteAction : this . generateNote ;
441+ target . textContent = status . text ;
442+ target . dataset [ "tone" ] = status . tone ?? "neutral" ;
443+ target . removeAttribute ( "title" ) ;
444+ }
445+ for ( const [ element , shown ] of [
446+ [ this . generateNote , ! hasGenerator || ( status !== undefined && ! actionable ) ] ,
447+ [ this . generateNoteAction , actionable ]
448+ ] as const ) {
449+ if ( ! shown ) {
450+ element . textContent = "" ;
451+ delete element . dataset [ "tone" ] ;
452+ element . removeAttribute ( "title" ) ;
453+ }
454+ element . hidden = ! shown ;
436455 }
437456 }
438457 if ( ! hasGenerator ) {
@@ -480,6 +499,8 @@ export class GenerateToolbar extends BaseToolbar {
480499 this . generateBtn = null ;
481500 this . generateError = null ;
482501 this . generateNote = null ;
502+ this . generateNoteAction = null ;
503+ this . generateGroup = null ;
483504 this . modelBtn = null ;
484505 this . modelLabel = null ;
485506 this . modelPopup = null ;
0 commit comments