@imgly/plugin-ai-audio-generation-web 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.1.10] - 2025-06-20
6
+
7
+ - [all] Fix issue with GPT provider when using text provider
8
+
5
9
  ## [0.1.9] - 2025-06-05
6
10
 
7
11
  - [all] Add support for custom headers
package/dist/index.mjs CHANGED
@@ -60,7 +60,7 @@ var lt=class{constructor(e,t,i){this.assetStoreName="assets",this.blobStoreName=
60
60
 
61
61
  </symbol>
62
62
  </svg>
63
- `,Zr=Hr,Te="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Wr(e,t){return{id:t,setQuickActionMenuOrder:i=>{e.ui.experimental.setGlobalStateValue(`${Te}.${t}`,i)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${Te}.${t}`,[]),registerQuickAction:i=>{if(!e.ui.experimental.hasGlobalStateValue(`${U}.${t}`))e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{[i.id]:i});else{let n=e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{...n,[i.id]:i})}},getQuickAction:i=>e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{})[i]}}var pe=Wr,ie="ly.img.ai.inference.editMode",rt="ly.img.ai.inference.metadata";function ot(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function Kr(e){if(e.length===0)return[];let t=[...e];for(;t.length>0&&t[0]==="ly.img.separator";)t.shift();for(;t.length>0&&t[t.length-1]==="ly.img.separator";)t.pop();return t.reduce((i,n)=>(n==="ly.img.separator"&&i.length>0&&i[i.length-1]==="ly.img.separator"||i.push(n),i),[])}function Jr({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(i,n,a)=>{let o={},r={},l=e||t?n.blockIds??n.engine.block.findAllSelected():[];return l.forEach(c=>{if(n.engine.block.isValid(c)&&e&&(o[c]=n.engine.block.isAlwaysOnTop(c),n.engine.block.setAlwaysOnTop(c,!0)),t){let s=n.engine.block.getParent(c);s!=null&&n.engine.block.getType(s)!=="//ly.img.ubq/scene"&&(r[s]=n.engine.block.isClipped(s),n.engine.block.setClipped(s,!1))}}),n.addDisposer(async()=>{l.forEach(c=>{if(n.engine.block.isValid(c)&&e&&n.engine.block.setAlwaysOnTop(c,o[c]),t){let s=n.engine.block.getParent(c);s!=null&&n.engine.block.getType(s)!=="//ly.img.ubq/scene"&&r[s]!=null&&n.engine.block.setClipped(s,r[s])}})}),await a(i,n)}}var Xr=Jr;function eo({pending:e=!0}){return async(t,i,n)=>{let a=e?i.blockIds??i.engine.block.findAllSelected():[];try{return a.forEach(o=>{i.engine.block.isValid(o)&&i.engine.block.setState(o,{type:"Pending",progress:0})}),await n(t,i)}finally{a.forEach(o=>{i.engine.block.isValid(o)&&i.engine.block.setState(o,{type:"Ready"})})}}}var to=eo;function no({editMode:e,automaticallyUnlock:t=!1}){return async(i,n,a)=>{let o=n.blockIds??n.engine.block.findAllSelected(),r=()=>{};t||n.addDisposer(async()=>{r?.()});try{return r=io(n.engine,o,e),await a(i,n)}catch(l){throw T(l)&&r(),l}finally{t&&r()}}}function io(e,t,i){let n=e.editor.getGlobalScope("editor/select"),a=e.editor.getEditMode();l(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(i);let o=e.editor.createHistory(),r=e.editor.getActiveHistory();e.editor.setActiveHistory(o);function l(){e.block.findAllSelected().forEach(u=>{t.includes(u)||e.block.setSelected(u,!1)}),t.forEach(u=>{e.block.setSelected(u,!0)})}let c=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==i&&e.editor.setEditMode(i)}),s=e.block.onSelectionChanged(l);return()=>{n!=null&&e.editor.setGlobalScope("editor/select",n),e.editor.setEditMode(a),e.editor.setActiveHistory(r),e.editor.destroyHistory(o),s(),c()}}var ro=no;function oo(e,t){switch(t.kind){case"text":return ao(e,t);case"image":return lo(e,t);case"video":return so(e,t);case"audio":return co(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function ao(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t,o=n.map(s=>i.engine.block.getString(s,"text/text")),r;if(de(e)){let s="";for await(let u of e){if(a.aborted)break;typeof u=="string"?s=u:u.kind==="text"&&(s=u.text),n.forEach(d=>{i.engine.block.setString(d,"text/text",s)}),r={kind:"text",text:s}}}else r=e;if(r==null||r.kind!=="text")throw new Error("Output kind from generation is not text");let l=()=>{t.blockIds.forEach(s=>{t.cesdk.engine.block.setString(s,"text/text",r.text)})},c=()=>{t.blockIds.forEach((s,u)=>{t.cesdk.engine.block.setString(s,"text/text",o[u])})};return{consumedGenerationResult:r,applyCallbacks:{onBefore:c,onAfter:l,onCancel:c,onApply:()=>{l(),t.cesdk.engine.editor.addUndoStep()}}}}async function lo(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t;if(n.length!==1)throw new Error("Only one block is supported for image generation");let[o]=n,r=i.engine.block.getFill(o),l=i.engine.block.getSourceSet(r,"fill/image/sourceSet"),[c]=l,s;c==null&&(s=i.engine.block.getString(r,"fill/image/imageFileURI"));let u=await i.engine.editor.getMimeType(c?.uri??s),d=await ce(c?.uri??s,t.cesdk.engine),g=d.width/d.height;if(a.throwIfAborted(),u==="image/svg+xml")throw new Error("SVG images are not supported");let m=i.engine.block.getCropScaleX(o),k=i.engine.block.getCropScaleY(o),w=i.engine.block.getCropTranslationX(o),f=i.engine.block.getCropTranslationY(o),p=i.engine.block.getCropRotation(o),h=()=>{i.engine.block.setCropScaleX(o,m),i.engine.block.setCropScaleY(o,k),i.engine.block.setCropTranslationX(o,w),i.engine.block.setCropTranslationY(o,f),i.engine.block.setCropRotation(o,p)};if(de(e))throw new Error("Streaming generation is not supported yet from a panel");if(e.kind!=="image"||typeof e.url!="string")throw new Error("Output kind from generation is not an image");let y=e.url,b=await i.engine.editor.getMimeType(y),v=await uo(i,y,b),I=await ce(v,t.cesdk.engine),C=I.width/I.height,x=Math.abs(g-C)>.001,E=c?[{uri:v,width:I.width,height:I.height}]:void 0,_=v;E==null?i.engine.block.setString(r,"fill/image/imageFileURI",_):(i.engine.block.setString(r,"fill/image/imageFileURI",""),i.engine.block.setSourceSet(r,"fill/image/sourceSet",E)),x?i.engine.block.setContentFillMode(o,"Cover"):h();let ye=()=>{if(l==null||l.length===0){if(s==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",s)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",l);h()},be=()=>{if(E==null){if(_==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",_)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",E);x?i.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:ye,onAfter:be,onCancel:()=>{ye()},onApply:()=>{be(),t.cesdk.engine.editor.addUndoStep()}}}}async function so(e,t){throw new Error("Function not implemented.")}async function co(e,t){throw new Error("Function not implemented.")}async function uo(e,t,i){let n=await(await fetch(t)).blob(),a=new File([n],`image.${ar(i)}`,{type:i}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var po=oo;function go({editMode:e,automaticallyUnlock:t=!1,showNotification:i=!0}){return async(n,a,o)=>{let r=a.blockIds??a.engine.block.findAllSelected(),l=()=>{};t||a.addDisposer(async()=>{l?.()});try{l=mo(a.engine,r,e);let c=await o(n,a);if(i){let s=a.engine.block.findAllSelected();r.some(u=>s.includes(u))||a.cesdk?.ui.showNotification({type:"success",message:"AI generation complete",action:{label:"Select",onClick:()=>{r.forEach(u=>{a.engine.block.select(u)})}}})}return c}catch(c){throw T(c)&&l(),c}finally{t&&l()}}}function mo(e,t,i){function n(){let r=e.block.findAllSelected();return t.some(l=>r.includes(l))}let a=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==i&&n()&&e.editor.setEditMode(i)}),o=e.block.onSelectionChanged(()=>{n()?e.editor.setEditMode(i):e.editor.setEditMode("Transform")});return n()&&e.editor.setEditMode(i),()=>{o(),a(),e.editor.setEditMode("Transform")}}var yo=go;async function bo(e,t){let{cesdk:i,input:n,blockIds:a,provider:o,quickAction:r,confirmationComponentId:l,abortSignal:c}=e;r.confirmation&&i.ui.setCanvasMenuOrder([l],{editMode:ie});let s=new De(i.engine,rt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Xe([...o.output.middleware??[],t.debug?et():void 0,to({}),...r.confirmation?[r.lockDuringConfirmation?ro({editMode:ie}):yo({editMode:ie}),r.confirmation&&Xr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:k,applyCallbacks:w}=await po(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(w.onApply(),a.forEach(p=>{s.clear(p)}));let f=()=>{m(),a.forEach(p=>{s.clear(p)})};return c.addEventListener("abort",f),{dispose:f,returnValue:k,applyCallbacks:w}}var Ne=bo;function fo(e,t){let{cesdk:i,quickActionMenu:n,provider:a}=e,o=`ly.img.ai.${n.id}`,r=`${o}.confirmation`;i.setTranslations({en:{[`${r}.apply`]:"Apply",[`${r}.before`]:"Before",[`${r}.after`]:"After",[`${o}.cancel`]:"Cancel",[`${o}.processing`]:"Generating..."}});let l=`${r}.canvasnMenu`,c={unlock:()=>{},abort:()=>{},applyCallbacks:void 0},s=()=>{let d=new AbortController,g=d.signal;return c.abort=()=>{d.abort()},g};i.ui.registerComponent(l,({builder:d,engine:g,state:m})=>{let k=g.block.findAllSelected();if(k.length===0)return null;let w=new De(i.engine,rt),f=w.get(k[0]);if(f==null)return null;let p=()=>{k.forEach(h=>{w.clear(h)})};switch(f.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${f.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),d.Separator(`${o}.separator`),d.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.abort(),p()}});break}case"confirmation":{let h=m(`${r}.comparing`,"after"),y=c.applyCallbacks?.onCancel;y!=null&&d.Button(`${r}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.unlock(),y(),p()}});let b=c.applyCallbacks?.onBefore,v=c.applyCallbacks?.onAfter;b!=null&&v!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:h.value==="before",onClick:()=>{b(),h.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:h.value==="after",onClick:()=>{v(),h.setValue("after")}})}});let I=c.applyCallbacks?.onApply;I!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:h.value!=="after",onClick:()=>{c.unlock(),p(),i.engine.editor._update(),I()}});break}default:}});let u=`${o}.canvasMenu`;return i.ui.registerComponent(u,d=>{let g=d.engine.block.findAllSelected(),m=g.every(y=>d.engine.block.getState(y).type==="Ready"),k=n.getQuickActionMenuOrder().map(y=>{if(y==="ly.img.separator")return y;let b=n.getQuickAction(y);if(b==null||!i.feature.isEnabled(ot({quickActionId:y,quickActionMenuId:n.id}),{engine:d.engine}))return null;let v=b.scopes;return v!=null&&v.length>0&&!g.every(I=>v.every(C=>d.engine.block.isAllowedByScope(I,C)))?null:b}).filter(y=>y!=null);if(k=Kr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:w,experimental:f,state:p}=d,h=p(`${o}.toggleExpandedState`,void 0);f.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:y})=>{w.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let b=h.value,v=n.getQuickAction(b);if(v!=null&&v.renderExpanded!=null){v.renderExpanded(d,{blockIds:g,closeMenu:y,toggleExpand:()=>{h.setValue(void 0)},handleGenerationError:I=>{B(I,{cesdk:i,provider:a},t)},generate:async(I,C)=>{try{let{returnValue:x,applyCallbacks:E,dispose:_}=await Ne({input:I,quickAction:v,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=E,x}catch(x){throw T(x)||B(x,{cesdk:i,provider:a},t),x}}});return}}f.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(b=>{b==="ly.img.separator"?w.Separator(`${o}.separator.${Math.random().toString()}`):b.render(d,{blockIds:g,closeMenu:y,handleGenerationError:v=>{B(v,{cesdk:i,provider:a},t)},toggleExpand:()=>{h.setValue(b.id)},generate:async(v,I)=>{try{let{returnValue:C,applyCallbacks:x,dispose:E}=await Ne({input:v,quickAction:b,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=E,c.applyCallbacks=x,C}catch(C){throw T(C)||B(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var ho=fo;async function ko(e,t,i){await e.initialize?.(t);let n=await wo(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let a=n?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:n,historyAssetLibraryEntryId:a,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};a!=null&&n!=null&&t.cesdk.ui.addAssetLibraryEntry({id:a,sourceIds:[n],sortBy:{sortKey:"insertedAt",sortingOrder:"Descending"},canRemove:!0,gridItemHeight:"square",gridBackgroundType:"cover"}),t.cesdk.i18n.setTranslations({en:{"common.ai-generation.success":"Generation Successful","common.ai-generation.failed":"Generation Failed","common.ai-generation.generate":"Generate","common.ai-generation.prompt.placeholder":"Describe what you want to create...",[`panel.${e.id}`]:vo(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Zr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await Ao(e,o,i)}}function vo(e){if(e.name!=null)return e.name;switch(e.kind){case"image":return"Generate Image";case"video":return"Generate Video";case"audio":return"Generate Audio";default:return"Generate Asset"}}async function wo(e,t,i){if(!(i==null||i===!1)){if(i==="@imgly/local"){let n=`${t}.history`;return e.asset.addLocalSource(n),n}if(i==="@imgly/indexedDB"){let n=`${t}.history`;return e.asset.addSource(new lt(n,e)),n}return i}}async function Ao(e,t,i){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await Io(e,e.input.panel,t,i)),e.input?.quickActions!=null&&(i.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Co(e,e.input.quickActions,t,i)),n}async function Io(e,t,i,n){switch(t.type){case"custom":return Yr(e,t,i,n);case"schema":return Gr(e,t,i,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Co(e,t,i,n){let{cesdk:a}=i,o={};t.actions.forEach(r=>{let l=r.kind??e.kind;o[l]==null&&(o[l]=pe(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(ot({quickActionId:r.id,quickActionMenuId:l}),s),c.registerQuickAction(r),n.debug&&console.log(`Registered quick action: '${r.id}' (v${r.version}) to menu '${l}'`)}),Object.values(o).forEach(r=>{let{canvasMenuComponentId:l}=ho({cesdk:a,quickActionMenu:r,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ge=ko;var me="@imgly/plugin-ai-audio-generation-web";var Y="ly.img.ai/audio-generation/speech",J="ly.img.ai/audio-generation/sound";function xo(e){return{async initialize({cesdk:t}){if(t==null)return;let i={debug:e.debug??!1,dryRun:e.dryRun??!1,middleware:e.middleware};t.setTranslations({en:{[`panel.${Y}`]:"AI Voice",[`panel.${J}`]:"Sound Generation","ly.img.ai.audio-generation.speech.success":"Generation Successful","ly.img.ai.audio-generation.speech.success.action":"Show","ly.img.ai.audio-generation.sound.success":"Sound Generation Successful","ly.img.ai.audio-generation.sound.success.action":"Show"}});let n=e?.text2speech,a=e?.text2sound,o=await n?.({cesdk:t}),r=await a?.({cesdk:t});o!=null&&(o.output.notification={success:{show:()=>!t?.ui.isPanelOpen(Y),message:"ly.img.ai.audio-generation.speech.success",action:{label:"ly.img.ai.audio-generation.speech.success.action",onClick:()=>{t.ui.openPanel(Y)}},duration:"long"}}),r!=null&&(r.output.notification={success:{show:()=>!t?.ui.isPanelOpen(J),message:"ly.img.ai.audio-generation.sound.success",action:{label:"ly.img.ai.audio-generation.sound.success.action",onClick:()=>{t.ui.openPanel(J)}}}});let l=o!=null?await ge(o,{cesdk:t,engine:t.engine},i):void 0,c=r!=null?await ge(r,{cesdk:t,engine:t.engine},i):void 0;c?.renderBuilderFunctions?.panel!=null&&t.ui.registerPanel(J,c.renderBuilderFunctions.panel),l?.renderBuilderFunctions?.panel!=null&&(Mo(t,s=>{t.ui.openPanel(Y),t.ui.experimental.setGlobalStateValue(`${o?.id}.prompt`,s)}),t.ui.registerPanel(Y,l.renderBuilderFunctions.panel))}}}function Mo(e,t){let i=pe(e,"text"),n="generateSpeech";i.registerQuickAction({id:n,version:"1",confirmation:!1,enable:({engine:a})=>{let o=a.block.findAllSelected();if(o.length!==1)return!1;let[r]=o;return a.block.getType(r)==="//ly.img.ubq/text"},render:({builder:a},o)=>{a.Button(n,{icon:"@imgly/Audio",variant:"plain",labelAlignment:"left",label:"AI Voice...",onClick:()=>{let[r]=e.engine.block.findAllSelected(),l=e.engine.block.getString(r,"text/text");t(l),o.closeMenu()}})}}),i.setQuickActionMenuOrder([...i.getQuickActionMenuOrder(),"ly.img.separator",n])}var at=xo;var Eo=e=>({name:me,version:"0.1.9",...at(e)}),Jo=Eo;export{Jo as default};
63
+ `,Zr=Hr,Te="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Wr(e,t){return{id:t,setQuickActionMenuOrder:i=>{e.ui.experimental.setGlobalStateValue(`${Te}.${t}`,i)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${Te}.${t}`,[]),registerQuickAction:i=>{if(!e.ui.experimental.hasGlobalStateValue(`${U}.${t}`))e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{[i.id]:i});else{let n=e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{...n,[i.id]:i})}},getQuickAction:i=>e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{})[i]}}var pe=Wr,ie="ly.img.ai.inference.editMode",rt="ly.img.ai.inference.metadata";function ot(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function Kr(e){if(e.length===0)return[];let t=[...e];for(;t.length>0&&t[0]==="ly.img.separator";)t.shift();for(;t.length>0&&t[t.length-1]==="ly.img.separator";)t.pop();return t.reduce((i,n)=>(n==="ly.img.separator"&&i.length>0&&i[i.length-1]==="ly.img.separator"||i.push(n),i),[])}function Jr({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(i,n,a)=>{let o={},r={},l=e||t?n.blockIds??n.engine.block.findAllSelected():[];return l.forEach(c=>{if(n.engine.block.isValid(c)&&e&&(o[c]=n.engine.block.isAlwaysOnTop(c),n.engine.block.setAlwaysOnTop(c,!0)),t){let s=n.engine.block.getParent(c);s!=null&&n.engine.block.getType(s)!=="//ly.img.ubq/scene"&&(r[s]=n.engine.block.isClipped(s),n.engine.block.setClipped(s,!1))}}),n.addDisposer(async()=>{l.forEach(c=>{if(n.engine.block.isValid(c)&&e&&n.engine.block.setAlwaysOnTop(c,o[c]),t){let s=n.engine.block.getParent(c);s!=null&&n.engine.block.getType(s)!=="//ly.img.ubq/scene"&&r[s]!=null&&n.engine.block.setClipped(s,r[s])}})}),await a(i,n)}}var Xr=Jr;function eo({pending:e=!0}){return async(t,i,n)=>{let a=e?i.blockIds??i.engine.block.findAllSelected():[];try{return a.forEach(o=>{i.engine.block.isValid(o)&&i.engine.block.setState(o,{type:"Pending",progress:0})}),await n(t,i)}finally{a.forEach(o=>{i.engine.block.isValid(o)&&i.engine.block.setState(o,{type:"Ready"})})}}}var to=eo;function no({editMode:e,automaticallyUnlock:t=!1}){return async(i,n,a)=>{let o=n.blockIds??n.engine.block.findAllSelected(),r=()=>{};t||n.addDisposer(async()=>{r?.()});try{return r=io(n.engine,o,e),await a(i,n)}catch(l){throw T(l)&&r(),l}finally{t&&r()}}}function io(e,t,i){let n=e.editor.getGlobalScope("editor/select"),a=e.editor.getEditMode();l(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(i);let o=e.editor.createHistory(),r=e.editor.getActiveHistory();e.editor.setActiveHistory(o);function l(){e.block.findAllSelected().forEach(u=>{t.includes(u)||e.block.setSelected(u,!1)}),t.forEach(u=>{e.block.setSelected(u,!0)})}let c=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==i&&e.editor.setEditMode(i)}),s=e.block.onSelectionChanged(l);return()=>{n!=null&&e.editor.setGlobalScope("editor/select",n),e.editor.setEditMode(a),e.editor.setActiveHistory(r),e.editor.destroyHistory(o),s(),c()}}var ro=no;function oo(e,t){switch(t.kind){case"text":return ao(e,t);case"image":return lo(e,t);case"video":return so(e,t);case"audio":return co(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function ao(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t,o=n.map(s=>i.engine.block.getString(s,"text/text")),r;if(de(e)){let s="";for await(let u of e){if(a.aborted)break;typeof u=="string"?s=u:u.kind==="text"&&(s=u.text),n.forEach(d=>{i.engine.block.setString(d,"text/text",s)}),r={kind:"text",text:s}}}else r=e;if(r==null||r.kind!=="text")throw new Error("Output kind from generation is not text");let l=()=>{t.blockIds.forEach(s=>{t.cesdk.engine.block.setString(s,"text/text",r.text)})},c=()=>{t.blockIds.forEach((s,u)=>{t.cesdk.engine.block.setString(s,"text/text",o[u])})};return{consumedGenerationResult:r,applyCallbacks:{onBefore:c,onAfter:l,onCancel:c,onApply:()=>{l(),t.cesdk.engine.editor.addUndoStep()}}}}async function lo(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t;if(n.length!==1)throw new Error("Only one block is supported for image generation");let[o]=n,r=i.engine.block.getFill(o),l=i.engine.block.getSourceSet(r,"fill/image/sourceSet"),[c]=l,s;c==null&&(s=i.engine.block.getString(r,"fill/image/imageFileURI"));let u=await i.engine.editor.getMimeType(c?.uri??s),d=await ce(c?.uri??s,t.cesdk.engine),g=d.width/d.height;if(a.throwIfAborted(),u==="image/svg+xml")throw new Error("SVG images are not supported");let m=i.engine.block.getCropScaleX(o),k=i.engine.block.getCropScaleY(o),w=i.engine.block.getCropTranslationX(o),f=i.engine.block.getCropTranslationY(o),p=i.engine.block.getCropRotation(o),h=()=>{i.engine.block.setCropScaleX(o,m),i.engine.block.setCropScaleY(o,k),i.engine.block.setCropTranslationX(o,w),i.engine.block.setCropTranslationY(o,f),i.engine.block.setCropRotation(o,p)};if(de(e))throw new Error("Streaming generation is not supported yet from a panel");if(e.kind!=="image"||typeof e.url!="string")throw new Error("Output kind from generation is not an image");let y=e.url,b=await i.engine.editor.getMimeType(y),v=await uo(i,y,b),I=await ce(v,t.cesdk.engine),C=I.width/I.height,x=Math.abs(g-C)>.001,E=c?[{uri:v,width:I.width,height:I.height}]:void 0,_=v;E==null?i.engine.block.setString(r,"fill/image/imageFileURI",_):(i.engine.block.setString(r,"fill/image/imageFileURI",""),i.engine.block.setSourceSet(r,"fill/image/sourceSet",E)),x?i.engine.block.setContentFillMode(o,"Cover"):h();let ye=()=>{if(l==null||l.length===0){if(s==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",s)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",l);h()},be=()=>{if(E==null){if(_==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",_)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",E);x?i.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:ye,onAfter:be,onCancel:()=>{ye()},onApply:()=>{be(),t.cesdk.engine.editor.addUndoStep()}}}}async function so(e,t){throw new Error("Function not implemented.")}async function co(e,t){throw new Error("Function not implemented.")}async function uo(e,t,i){let n=await(await fetch(t)).blob(),a=new File([n],`image.${ar(i)}`,{type:i}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var po=oo;function go({editMode:e,automaticallyUnlock:t=!1,showNotification:i=!0}){return async(n,a,o)=>{let r=a.blockIds??a.engine.block.findAllSelected(),l=()=>{};t||a.addDisposer(async()=>{l?.()});try{l=mo(a.engine,r,e);let c=await o(n,a);if(i){let s=a.engine.block.findAllSelected();r.some(u=>s.includes(u))||a.cesdk?.ui.showNotification({type:"success",message:"AI generation complete",action:{label:"Select",onClick:()=>{r.forEach(u=>{a.engine.block.select(u)})}}})}return c}catch(c){throw T(c)&&l(),c}finally{t&&l()}}}function mo(e,t,i){function n(){let r=e.block.findAllSelected();return t.some(l=>r.includes(l))}let a=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==i&&n()&&e.editor.setEditMode(i)}),o=e.block.onSelectionChanged(()=>{n()?e.editor.setEditMode(i):e.editor.setEditMode("Transform")});return n()&&e.editor.setEditMode(i),()=>{o(),a(),e.editor.setEditMode("Transform")}}var yo=go;async function bo(e,t){let{cesdk:i,input:n,blockIds:a,provider:o,quickAction:r,confirmationComponentId:l,abortSignal:c}=e;r.confirmation&&i.ui.setCanvasMenuOrder([l],{editMode:ie});let s=new De(i.engine,rt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Xe([...o.output.middleware??[],t.debug?et():void 0,to({}),...r.confirmation?[r.lockDuringConfirmation?ro({editMode:ie}):yo({editMode:ie}),r.confirmation&&Xr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:k,applyCallbacks:w}=await po(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(w.onApply(),a.forEach(p=>{s.clear(p)}));let f=()=>{m(),a.forEach(p=>{s.clear(p)})};return c.addEventListener("abort",f),{dispose:f,returnValue:k,applyCallbacks:w}}var Ne=bo;function fo(e,t){let{cesdk:i,quickActionMenu:n,provider:a}=e,o=`ly.img.ai.${n.id}`,r=`${o}.confirmation`;i.setTranslations({en:{[`${r}.apply`]:"Apply",[`${r}.before`]:"Before",[`${r}.after`]:"After",[`${o}.cancel`]:"Cancel",[`${o}.processing`]:"Generating..."}});let l=`${r}.canvasnMenu`,c={unlock:()=>{},abort:()=>{},applyCallbacks:void 0},s=()=>{let d=new AbortController,g=d.signal;return c.abort=()=>{d.abort()},g};i.ui.registerComponent(l,({builder:d,engine:g,state:m})=>{let k=g.block.findAllSelected();if(k.length===0)return null;let w=new De(i.engine,rt),f=w.get(k[0]);if(f==null)return null;let p=()=>{k.forEach(h=>{w.clear(h)})};switch(f.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${f.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),d.Separator(`${o}.separator`),d.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.abort(),p()}});break}case"confirmation":{let h=m(`${r}.comparing`,"after"),y=c.applyCallbacks?.onCancel;y!=null&&d.Button(`${r}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.unlock(),y(),p()}});let b=c.applyCallbacks?.onBefore,v=c.applyCallbacks?.onAfter;b!=null&&v!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:h.value==="before",onClick:()=>{b(),h.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:h.value==="after",onClick:()=>{v(),h.setValue("after")}})}});let I=c.applyCallbacks?.onApply;I!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:h.value!=="after",onClick:()=>{c.unlock(),p(),i.engine.editor._update(),I()}});break}default:}});let u=`${o}.canvasMenu`;return i.ui.registerComponent(u,d=>{let g=d.engine.block.findAllSelected(),m=g.every(y=>d.engine.block.getState(y).type==="Ready"),k=n.getQuickActionMenuOrder().map(y=>{if(y==="ly.img.separator")return y;let b=n.getQuickAction(y);if(b==null||!i.feature.isEnabled(ot({quickActionId:y,quickActionMenuId:n.id}),{engine:d.engine}))return null;let v=b.scopes;return v!=null&&v.length>0&&!g.every(I=>v.every(C=>d.engine.block.isAllowedByScope(I,C)))?null:b}).filter(y=>y!=null);if(k=Kr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:w,experimental:f,state:p}=d,h=p(`${o}.toggleExpandedState`,void 0);f.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:y})=>{w.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let b=h.value,v=n.getQuickAction(b);if(v!=null&&v.renderExpanded!=null){v.renderExpanded(d,{blockIds:g,closeMenu:y,toggleExpand:()=>{h.setValue(void 0)},handleGenerationError:I=>{B(I,{cesdk:i,provider:a},t)},generate:async(I,C)=>{try{let{returnValue:x,applyCallbacks:E,dispose:_}=await Ne({input:I,quickAction:v,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=E,x}catch(x){throw T(x)||B(x,{cesdk:i,provider:a},t),x}}});return}}f.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(b=>{b==="ly.img.separator"?w.Separator(`${o}.separator.${Math.random().toString()}`):b.render(d,{blockIds:g,closeMenu:y,handleGenerationError:v=>{B(v,{cesdk:i,provider:a},t)},toggleExpand:()=>{h.setValue(b.id)},generate:async(v,I)=>{try{let{returnValue:C,applyCallbacks:x,dispose:E}=await Ne({input:v,quickAction:b,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=E,c.applyCallbacks=x,C}catch(C){throw T(C)||B(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var ho=fo;async function ko(e,t,i){await e.initialize?.(t);let n=await wo(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let a=n?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:n,historyAssetLibraryEntryId:a,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};a!=null&&n!=null&&t.cesdk.ui.addAssetLibraryEntry({id:a,sourceIds:[n],sortBy:{sortKey:"insertedAt",sortingOrder:"Descending"},canRemove:!0,gridItemHeight:"square",gridBackgroundType:"cover"}),t.cesdk.i18n.setTranslations({en:{"common.ai-generation.success":"Generation Successful","common.ai-generation.failed":"Generation Failed","common.ai-generation.generate":"Generate","common.ai-generation.prompt.placeholder":"Describe what you want to create...",[`panel.${e.id}`]:vo(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Zr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await Ao(e,o,i)}}function vo(e){if(e.name!=null)return e.name;switch(e.kind){case"image":return"Generate Image";case"video":return"Generate Video";case"audio":return"Generate Audio";default:return"Generate Asset"}}async function wo(e,t,i){if(!(i==null||i===!1)){if(i==="@imgly/local"){let n=`${t}.history`;return e.asset.addLocalSource(n),n}if(i==="@imgly/indexedDB"){let n=`${t}.history`;return e.asset.addSource(new lt(n,e)),n}return i}}async function Ao(e,t,i){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await Io(e,e.input.panel,t,i)),e.input?.quickActions!=null&&(i.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Co(e,e.input.quickActions,t,i)),n}async function Io(e,t,i,n){switch(t.type){case"custom":return Yr(e,t,i,n);case"schema":return Gr(e,t,i,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Co(e,t,i,n){let{cesdk:a}=i,o={};t.actions.forEach(r=>{let l=r.kind??e.kind;o[l]==null&&(o[l]=pe(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(ot({quickActionId:r.id,quickActionMenuId:l}),s),c.registerQuickAction(r),n.debug&&console.log(`Registered quick action: '${r.id}' (v${r.version}) to menu '${l}'`)}),Object.values(o).forEach(r=>{let{canvasMenuComponentId:l}=ho({cesdk:a,quickActionMenu:r,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ge=ko;var me="@imgly/plugin-ai-audio-generation-web";var Y="ly.img.ai/audio-generation/speech",J="ly.img.ai/audio-generation/sound";function xo(e){return{async initialize({cesdk:t}){if(t==null)return;let i={debug:e.debug??!1,dryRun:e.dryRun??!1,middleware:e.middleware};t.setTranslations({en:{[`panel.${Y}`]:"AI Voice",[`panel.${J}`]:"Sound Generation","ly.img.ai.audio-generation.speech.success":"Generation Successful","ly.img.ai.audio-generation.speech.success.action":"Show","ly.img.ai.audio-generation.sound.success":"Sound Generation Successful","ly.img.ai.audio-generation.sound.success.action":"Show"}});let n=e?.text2speech,a=e?.text2sound,o=await n?.({cesdk:t}),r=await a?.({cesdk:t});o!=null&&(o.output.notification={success:{show:()=>!t?.ui.isPanelOpen(Y),message:"ly.img.ai.audio-generation.speech.success",action:{label:"ly.img.ai.audio-generation.speech.success.action",onClick:()=>{t.ui.openPanel(Y)}},duration:"long"}}),r!=null&&(r.output.notification={success:{show:()=>!t?.ui.isPanelOpen(J),message:"ly.img.ai.audio-generation.sound.success",action:{label:"ly.img.ai.audio-generation.sound.success.action",onClick:()=>{t.ui.openPanel(J)}}}});let l=o!=null?await ge(o,{cesdk:t,engine:t.engine},i):void 0,c=r!=null?await ge(r,{cesdk:t,engine:t.engine},i):void 0;c?.renderBuilderFunctions?.panel!=null&&t.ui.registerPanel(J,c.renderBuilderFunctions.panel),l?.renderBuilderFunctions?.panel!=null&&(Mo(t,s=>{t.ui.openPanel(Y),t.ui.experimental.setGlobalStateValue(`${o?.id}.prompt`,s)}),t.ui.registerPanel(Y,l.renderBuilderFunctions.panel))}}}function Mo(e,t){let i=pe(e,"text"),n="generateSpeech";i.registerQuickAction({id:n,version:"1",confirmation:!1,enable:({engine:a})=>{let o=a.block.findAllSelected();if(o.length!==1)return!1;let[r]=o;return a.block.getType(r)==="//ly.img.ubq/text"},render:({builder:a},o)=>{a.Button(n,{icon:"@imgly/Audio",variant:"plain",labelAlignment:"left",label:"AI Voice...",onClick:()=>{let[r]=e.engine.block.findAllSelected(),l=e.engine.block.getString(r,"text/text");t(l),o.closeMenu()}})}}),i.setQuickActionMenuOrder([...i.getQuickActionMenuOrder(),"ly.img.separator",n])}var at=xo;var Eo=e=>({name:me,version:"0.1.10",...at(e)}),Jo=Eo;export{Jo as default};
64
64
  /*! Bundled license information:
65
65
 
66
66
  @imgly/plugin-ai-generation-web/dist/index.mjs: