@imgly/plugin-ai-audio-generation-web 0.1.7 → 0.1.8
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/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -60,7 +60,7 @@ function Oe(e,t){if(!t.startsWith("#/"))throw new Error(`External references are
|
|
|
60
60
|
|
|
61
61
|
</symbol>
|
|
62
62
|
</svg>
|
|
63
|
-
`,Hr=Yr,Te="ly.img.ai.quickAction.order",q="ly.img.ai.quickAction.actions";function Zr(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(`${q}.${t}`))e.ui.experimental.setGlobalStateValue(`${q}.${t}`,{[i.id]:i});else{let n=e.ui.experimental.getGlobalStateValue(`${q}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${q}.${t}`,{...n,[i.id]:i})}},getQuickAction:i=>e.ui.experimental.getGlobalStateValue(`${q}.${t}`,{})[i]}}var pe=Zr,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 Wr(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 Kr({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 Jr=Kr;function Xr({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 eo=Xr;function to({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=no(n.engine,o,e),await a(i,n)}catch(l){throw L(l)&&r(),l}finally{t&&r()}}}function no(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 io=to;function ro(e,t){switch(t.kind){case"text":return oo(e,t);case"image":return ao(e,t);case"video":return lo(e,t);case"audio":return so(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function oo(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t,o=n.map(s=>i.engine.block.getString(s,"text/text")),r;if(ue(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 ao(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),v=i.engine.block.getCropTranslationX(o),b=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,v),i.engine.block.setCropTranslationY(o,b),i.engine.block.setCropRotation(o,p)};if(ue(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,f=await i.engine.editor.getMimeType(y),w=await co(i,y,f),I=await ce(w,t.cesdk.engine),C=I.width/I.height,M=Math.abs(g-C)>.001,E=c?[{uri:w,width:I.width,height:I.height}]:void 0,_=w;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)),M?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()},fe=()=>{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);M?i.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:ye,onAfter:fe,onCancel:()=>{ye()},onApply:()=>{fe(),t.cesdk.engine.editor.addUndoStep()}}}}async function lo(e,t){throw new Error("Function not implemented.")}async function so(e,t){throw new Error("Function not implemented.")}async function co(e,t,i){let n=await(await fetch(t)).blob(),a=new File([n],`image.${jr(i)}`,{type:i}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var uo=ro;function po({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=go(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 L(c)&&l(),c}finally{t&&l()}}}function go(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 mo=po;async function yo(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 Re(i.engine,rt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Fe([...o.output.middleware??[],t.debug?Ge():void 0,eo({}),...r.confirmation?[r.lockDuringConfirmation?io({editMode:ie}):mo({editMode:ie}),r.confirmation&&Jr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:k,applyCallbacks:v}=await uo(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(v.onApply(),a.forEach(p=>{s.clear(p)}));let b=()=>{m(),a.forEach(p=>{s.clear(p)})};return c.addEventListener("abort",b),{dispose:b,returnValue:k,applyCallbacks:v}}var Ne=yo;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 v=new Re(i.engine,rt),b=v.get(k[0]);if(b==null)return null;let p=()=>{k.forEach(h=>{v.clear(h)})};switch(b.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${b.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 f=c.applyCallbacks?.onBefore,w=c.applyCallbacks?.onAfter;f!=null&&w!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:h.value==="before",onClick:()=>{f(),h.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:h.value==="after",onClick:()=>{w(),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 f=n.getQuickAction(y);if(f==null||!i.feature.isEnabled(ot({quickActionId:y,quickActionMenuId:n.id}),{engine:d.engine}))return null;let w=f.scopes;return w!=null&&w.length>0&&!g.every(I=>w.every(C=>d.engine.block.isAllowedByScope(I,C)))?null:f}).filter(y=>y!=null);if(k=Wr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:v,experimental:b,state:p}=d,h=p(`${o}.toggleExpandedState`,void 0);b.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:y})=>{v.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let f=h.value,w=n.getQuickAction(f);if(w!=null&&w.renderExpanded!=null){w.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:M,applyCallbacks:E,dispose:_}=await Ne({input:I,quickAction:w,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=E,M}catch(M){throw L(M)||B(M,{cesdk:i,provider:a},t),M}}});return}}b.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(f=>{f==="ly.img.separator"?v.Separator(`${o}.separator.${Math.random().toString()}`):f.render(d,{blockIds:g,closeMenu:y,handleGenerationError:w=>{B(w,{cesdk:i,provider:a},t)},toggleExpand:()=>{h.setValue(f.id)},generate:async(w,I)=>{try{let{returnValue:C,applyCallbacks:M,dispose:E}=await Ne({input:w,quickAction:f,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=E,c.applyCallbacks=M,C}catch(C){throw L(C)||B(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var bo=fo;async function ho(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}`]:ko(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Hr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await vo(e,o,i)}}function ko(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 $t(n,e)),n}return i}}async function vo(e,t,i){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await Ao(e,e.input.panel,t,i)),e.input?.quickActions!=null&&(i.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Io(e,e.input.quickActions,t,i)),n}async function Ao(e,t,i,n){switch(t.type){case"custom":return Rr(e,t,i,n);case"schema":return Fr(e,t,i,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Io(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}=bo({cesdk:a,quickActionMenu:r,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ge=ho;var me="@imgly/plugin-ai-audio-generation-web";var Y="ly.img.ai/audio-generation/speech",J="ly.img.ai/audio-generation/sound";function Co(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=Co;var xo=e=>({name:me,version:"0.1.7",...at(e)}),Ko=xo;export{Ko as default};
|
|
63
|
+
`,Hr=Yr,Te="ly.img.ai.quickAction.order",q="ly.img.ai.quickAction.actions";function Zr(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(`${q}.${t}`))e.ui.experimental.setGlobalStateValue(`${q}.${t}`,{[i.id]:i});else{let n=e.ui.experimental.getGlobalStateValue(`${q}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${q}.${t}`,{...n,[i.id]:i})}},getQuickAction:i=>e.ui.experimental.getGlobalStateValue(`${q}.${t}`,{})[i]}}var pe=Zr,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 Wr(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 Kr({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 Jr=Kr;function Xr({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 eo=Xr;function to({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=no(n.engine,o,e),await a(i,n)}catch(l){throw L(l)&&r(),l}finally{t&&r()}}}function no(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 io=to;function ro(e,t){switch(t.kind){case"text":return oo(e,t);case"image":return ao(e,t);case"video":return lo(e,t);case"audio":return so(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function oo(e,t){let{cesdk:i,blockIds:n,abortSignal:a}=t,o=n.map(s=>i.engine.block.getString(s,"text/text")),r;if(ue(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 ao(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),v=i.engine.block.getCropTranslationX(o),b=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,v),i.engine.block.setCropTranslationY(o,b),i.engine.block.setCropRotation(o,p)};if(ue(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,f=await i.engine.editor.getMimeType(y),w=await co(i,y,f),I=await ce(w,t.cesdk.engine),C=I.width/I.height,M=Math.abs(g-C)>.001,E=c?[{uri:w,width:I.width,height:I.height}]:void 0,_=w;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)),M?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()},fe=()=>{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);M?i.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:ye,onAfter:fe,onCancel:()=>{ye()},onApply:()=>{fe(),t.cesdk.engine.editor.addUndoStep()}}}}async function lo(e,t){throw new Error("Function not implemented.")}async function so(e,t){throw new Error("Function not implemented.")}async function co(e,t,i){let n=await(await fetch(t)).blob(),a=new File([n],`image.${jr(i)}`,{type:i}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var uo=ro;function po({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=go(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 L(c)&&l(),c}finally{t&&l()}}}function go(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 mo=po;async function yo(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 Re(i.engine,rt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Fe([...o.output.middleware??[],t.debug?Ge():void 0,eo({}),...r.confirmation?[r.lockDuringConfirmation?io({editMode:ie}):mo({editMode:ie}),r.confirmation&&Jr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:k,applyCallbacks:v}=await uo(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(v.onApply(),a.forEach(p=>{s.clear(p)}));let b=()=>{m(),a.forEach(p=>{s.clear(p)})};return c.addEventListener("abort",b),{dispose:b,returnValue:k,applyCallbacks:v}}var Ne=yo;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 v=new Re(i.engine,rt),b=v.get(k[0]);if(b==null)return null;let p=()=>{k.forEach(h=>{v.clear(h)})};switch(b.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${b.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 f=c.applyCallbacks?.onBefore,w=c.applyCallbacks?.onAfter;f!=null&&w!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:h.value==="before",onClick:()=>{f(),h.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:h.value==="after",onClick:()=>{w(),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 f=n.getQuickAction(y);if(f==null||!i.feature.isEnabled(ot({quickActionId:y,quickActionMenuId:n.id}),{engine:d.engine}))return null;let w=f.scopes;return w!=null&&w.length>0&&!g.every(I=>w.every(C=>d.engine.block.isAllowedByScope(I,C)))?null:f}).filter(y=>y!=null);if(k=Wr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:v,experimental:b,state:p}=d,h=p(`${o}.toggleExpandedState`,void 0);b.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:y})=>{v.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let f=h.value,w=n.getQuickAction(f);if(w!=null&&w.renderExpanded!=null){w.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:M,applyCallbacks:E,dispose:_}=await Ne({input:I,quickAction:w,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=E,M}catch(M){throw L(M)||B(M,{cesdk:i,provider:a},t),M}}});return}}b.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(f=>{f==="ly.img.separator"?v.Separator(`${o}.separator.${Math.random().toString()}`):f.render(d,{blockIds:g,closeMenu:y,handleGenerationError:w=>{B(w,{cesdk:i,provider:a},t)},toggleExpand:()=>{h.setValue(f.id)},generate:async(w,I)=>{try{let{returnValue:C,applyCallbacks:M,dispose:E}=await Ne({input:w,quickAction:f,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=E,c.applyCallbacks=M,C}catch(C){throw L(C)||B(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var bo=fo;async function ho(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}`]:ko(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Hr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await vo(e,o,i)}}function ko(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 $t(n,e)),n}return i}}async function vo(e,t,i){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await Ao(e,e.input.panel,t,i)),e.input?.quickActions!=null&&(i.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Io(e,e.input.quickActions,t,i)),n}async function Ao(e,t,i,n){switch(t.type){case"custom":return Rr(e,t,i,n);case"schema":return Fr(e,t,i,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Io(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}=bo({cesdk:a,quickActionMenu:r,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ge=ho;var me="@imgly/plugin-ai-audio-generation-web";var Y="ly.img.ai/audio-generation/speech",J="ly.img.ai/audio-generation/sound";function Co(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=Co;var xo=e=>({name:me,version:"0.1.8",...at(e)}),Ko=xo;export{Ko as default};
|
|
64
64
|
/*! Bundled license information:
|
|
65
65
|
|
|
66
66
|
@imgly/plugin-ai-generation-web/dist/index.mjs:
|
package/package.json
CHANGED