@@ -37,13 +37,16 @@ type DataContext = {
3737 } [ ] ;
3838} ;
3939
40- const createWandEl = < R extends HTMLElement > ( onClick : ( ) => void | Promise < void > ) => {
40+ const createWandEl = < R extends HTMLElement > (
41+ onClick : ( ) => void | Promise < void > ,
42+ config ?: { iconSize ?: number } ,
43+ ) => {
4144 const { shadow, shadowRoot } = createModAIShadow < R > ( true ) ;
4245
4346 const generate = createElement (
4447 'div' ,
4548 'modai--root generate' ,
46- button ( icon ( 14 , sparkle ) , onClick , 'btn' , {
49+ button ( icon ( config ?. iconSize || 14 , sparkle ) , onClick , 'btn' , {
4750 type : 'button' ,
4851 title : lng ( 'modai.ui.generate_using_ai' ) ,
4952 } ) ,
@@ -112,16 +115,20 @@ const createHistoryNav = (cache: ReturnType<typeof history.init<DataContext>>) =
112115
113116type Target = {
114117 targetEl : HTMLElement ;
118+ iconSize ?: number ;
115119} ;
116120
117121const createLocalChat = ( config : LocalChatConfig & Target ) => {
118122 if ( ! ui . localChat . verifyPermissions ( config ) ) {
119123 return ;
120124 }
121125
122- const { shadow } = createWandEl ( ( ) => {
123- ui . localChat . createModal ( config ) ;
124- } ) ;
126+ const { shadow } = createWandEl (
127+ ( ) => {
128+ ui . localChat . createModal ( config ) ;
129+ } ,
130+ { iconSize : config . iconSize } ,
131+ ) ;
125132
126133 config . targetEl . appendChild ( shadow ) ;
127134
@@ -137,6 +144,7 @@ type ForcedTextConfig = {
137144 Target ;
138145const createForcedTextPrompt = ( {
139146 targetEl,
147+ iconSize,
140148 input,
141149 onChange,
142150 initialValue,
@@ -147,34 +155,37 @@ const createForcedTextPrompt = ({
147155 return ;
148156 }
149157
150- const { shadow, generate } = createWandEl < HistoryElement > ( async ( ) => {
151- const done = createLoadingOverlay ( input ) ;
152-
153- try {
154- const result = await executor . prompt . text (
155- {
156- field,
157- ...rest ,
158- } ,
159- ( data ) => {
160- cache . insert ( data . content , true ) ;
161- } ,
162- ) ;
163- cache . insert ( result . content ) ;
164- done ( ) ;
165- } catch ( err ) {
166- done ( ) ;
167- confirmDialog ( {
168- title : 'Failed' ,
169- content : lng ( 'modai.error.failed_try_again' , {
170- msg : err instanceof Error ? err . message : '' ,
171- } ) ,
172- confirmText : 'Close' ,
173- showCancel : false ,
174- onConfirm : ( ) => { } ,
175- } ) ;
176- }
177- } ) ;
158+ const { shadow, generate } = createWandEl < HistoryElement > (
159+ async ( ) => {
160+ const done = createLoadingOverlay ( input ) ;
161+
162+ try {
163+ const result = await executor . prompt . text (
164+ {
165+ field,
166+ ...rest ,
167+ } ,
168+ ( data ) => {
169+ cache . insert ( data . content , true ) ;
170+ } ,
171+ ) ;
172+ cache . insert ( result . content ) ;
173+ done ( ) ;
174+ } catch ( err ) {
175+ done ( ) ;
176+ confirmDialog ( {
177+ title : 'Failed' ,
178+ content : lng ( 'modai.error.failed_try_again' , {
179+ msg : err instanceof Error ? err . message : '' ,
180+ } ) ,
181+ confirmText : 'Close' ,
182+ showCancel : false ,
183+ onConfirm : ( ) => { } ,
184+ } ) ;
185+ }
186+ } ,
187+ { iconSize : iconSize } ,
188+ ) ;
178189
179190 const cache = history . init < DataContext > (
180191 field ,
@@ -245,54 +256,58 @@ const createVisionPrompt = (config: VisionConfig & Target) => {
245256 return ;
246257 }
247258
248- const { shadow } = createWandEl ( async ( ) => {
249- const canvas = document . createElement ( 'canvas' ) ;
250- const ctx = canvas . getContext ( '2d' ) ;
251- if ( ! ctx ) return ;
252-
253- canvas . width = config . image . width ;
254- canvas . height = config . image . height ;
255-
256- ctx . drawImage ( config . image , 0 , 0 ) ;
257-
258- const base64Data = canvas . toDataURL ( 'image/png' ) ;
259-
260- const done = createLoadingOverlay ( config . input ) ;
261-
262- try {
263- const result = await executor . prompt . vision (
264- {
265- image : base64Data ,
266- field : config . field ,
267- namespace : config . namespace ,
268- } ,
269- ( data ) => {
270- config . onUpdate ( data ) ;
271- } ,
272- ) ;
273-
274- config . onUpdate ( result ) ;
275- done ( ) ;
276- } catch ( err ) {
277- done ( ) ;
278- confirmDialog ( {
279- title : lng ( 'modai.error.failed' ) ,
280- content : lng ( 'modai.error.failed_try_again' , {
281- msg : err instanceof Error ? err . message : '' ,
282- } ) ,
283- confirmText : lng ( 'modai.ui.close' ) ,
284- showCancel : false ,
285- onConfirm : ( ) => { } ,
286- } ) ;
287- }
288- } ) ;
259+ const { shadow } = createWandEl (
260+ async ( ) => {
261+ const canvas = document . createElement ( 'canvas' ) ;
262+ const ctx = canvas . getContext ( '2d' ) ;
263+ if ( ! ctx ) return ;
264+
265+ canvas . width = config . image . width ;
266+ canvas . height = config . image . height ;
267+
268+ ctx . drawImage ( config . image , 0 , 0 ) ;
269+
270+ const base64Data = canvas . toDataURL ( 'image/png' ) ;
271+
272+ const done = createLoadingOverlay ( config . input ) ;
273+
274+ try {
275+ const result = await executor . prompt . vision (
276+ {
277+ image : base64Data ,
278+ field : config . field ,
279+ namespace : config . namespace ,
280+ } ,
281+ ( data ) => {
282+ config . onUpdate ( data ) ;
283+ } ,
284+ ) ;
285+
286+ config . onUpdate ( result ) ;
287+ done ( ) ;
288+ } catch ( err ) {
289+ done ( ) ;
290+ confirmDialog ( {
291+ title : lng ( 'modai.error.failed' ) ,
292+ content : lng ( 'modai.error.failed_try_again' , {
293+ msg : err instanceof Error ? err . message : '' ,
294+ } ) ,
295+ confirmText : lng ( 'modai.ui.close' ) ,
296+ showCancel : false ,
297+ onConfirm : ( ) => { } ,
298+ } ) ;
299+ }
300+ } ,
301+ { iconSize : config . iconSize } ,
302+ ) ;
289303
290304 config . targetEl . appendChild ( shadow ) ;
291305
292306 return shadow ;
293307} ;
294308
295309export const createGenerateButton = {
310+ rawButton : createWandEl ,
296311 localChat : createLocalChat ,
297312 forcedText : createForcedTextPrompt ,
298313 vision : createVisionPrompt ,
0 commit comments