@imgly/plugin-ai-text-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
@@ -136,7 +136,7 @@ var me="@imgly/plugin-ai-text-generation",lt=`
136
136
 
137
137
  </symbol>
138
138
  </svg>
139
- `,Wr=Yr,je="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Kr(e,t){return{id:t,setQuickActionMenuOrder:n=>{e.ui.experimental.setGlobalStateValue(`${je}.${t}`,n)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${je}.${t}`,[]),registerQuickAction:n=>{if(!e.ui.experimental.hasGlobalStateValue(`${U}.${t}`))e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{[n.id]:n});else{let i=e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{...i,[n.id]:n})}},getQuickAction:n=>e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{})[n]}}var ue=Kr,te="ly.img.ai.inference.editMode",nt="ly.img.ai.inference.metadata";function rt(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function Jr(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((n,i)=>(i==="ly.img.separator"&&n.length>0&&n[n.length-1]==="ly.img.separator"||n.push(i),n),[])}function Xr({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(n,i,a)=>{let o={},r={},l=e||t?i.blockIds??i.engine.block.findAllSelected():[];return l.forEach(c=>{if(i.engine.block.isValid(c)&&e&&(o[c]=i.engine.block.isAlwaysOnTop(c),i.engine.block.setAlwaysOnTop(c,!0)),t){let s=i.engine.block.getParent(c);s!=null&&i.engine.block.getType(s)!=="//ly.img.ubq/scene"&&(r[s]=i.engine.block.isClipped(s),i.engine.block.setClipped(s,!1))}}),i.addDisposer(async()=>{l.forEach(c=>{if(i.engine.block.isValid(c)&&e&&i.engine.block.setAlwaysOnTop(c,o[c]),t){let s=i.engine.block.getParent(c);s!=null&&i.engine.block.getType(s)!=="//ly.img.ubq/scene"&&r[s]!=null&&i.engine.block.setClipped(s,r[s])}})}),await a(n,i)}}var eo=Xr;function to({pending:e=!0}){return async(t,n,i)=>{let a=e?n.blockIds??n.engine.block.findAllSelected():[];try{return a.forEach(o=>{n.engine.block.isValid(o)&&n.engine.block.setState(o,{type:"Pending",progress:0})}),await i(t,n)}finally{a.forEach(o=>{n.engine.block.isValid(o)&&n.engine.block.setState(o,{type:"Ready"})})}}}var io=to;function no({editMode:e,automaticallyUnlock:t=!1}){return async(n,i,a)=>{let o=i.blockIds??i.engine.block.findAllSelected(),r=()=>{};t||i.addDisposer(async()=>{r?.()});try{return r=ro(i.engine,o,e),await a(n,i)}catch(l){throw T(l)&&r(),l}finally{t&&r()}}}function ro(e,t,n){let i=e.editor.getGlobalScope("editor/select"),a=e.editor.getEditMode();l(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(n);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()!==n&&e.editor.setEditMode(n)}),s=e.block.onSelectionChanged(l);return()=>{i!=null&&e.editor.setGlobalScope("editor/select",i),e.editor.setEditMode(a),e.editor.setActiveHistory(r),e.editor.destroyHistory(o),s(),c()}}var oo=no;function ao(e,t){switch(t.kind){case"text":return lo(e,t);case"image":return so(e,t);case"video":return co(e,t);case"audio":return uo(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function lo(e,t){let{cesdk:n,blockIds:i,abortSignal:a}=t,o=i.map(s=>n.engine.block.getString(s,"text/text")),r;if(ce(e)){let s="";for await(let u of e){if(a.aborted)break;typeof u=="string"?s=u:u.kind==="text"&&(s=u.text),i.forEach(d=>{n.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 so(e,t){let{cesdk:n,blockIds:i,abortSignal:a}=t;if(i.length!==1)throw new Error("Only one block is supported for image generation");let[o]=i,r=n.engine.block.getFill(o),l=n.engine.block.getSourceSet(r,"fill/image/sourceSet"),[c]=l,s;c==null&&(s=n.engine.block.getString(r,"fill/image/imageFileURI"));let u=await n.engine.editor.getMimeType(c?.uri??s),d=await le(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=n.engine.block.getCropScaleX(o),k=n.engine.block.getCropScaleY(o),w=n.engine.block.getCropTranslationX(o),b=n.engine.block.getCropTranslationY(o),p=n.engine.block.getCropRotation(o),h=()=>{n.engine.block.setCropScaleX(o,m),n.engine.block.setCropScaleY(o,k),n.engine.block.setCropTranslationX(o,w),n.engine.block.setCropTranslationY(o,b),n.engine.block.setCropRotation(o,p)};if(ce(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 n.engine.editor.getMimeType(y),v=await po(n,y,f),A=await le(v,t.cesdk.engine),I=A.width/A.height,M=Math.abs(g-I)>.001,L=c?[{uri:v,width:A.width,height:A.height}]:void 0,_=v;L==null?n.engine.block.setString(r,"fill/image/imageFileURI",_):(n.engine.block.setString(r,"fill/image/imageFileURI",""),n.engine.block.setSourceSet(r,"fill/image/sourceSet",L)),M?n.engine.block.setContentFillMode(o,"Cover"):h();let pe=()=>{if(l==null||l.length===0){if(s==null)throw new Error("No image URI found");n.engine.block.setString(r,"fill/image/imageFileURI",s)}else n.engine.block.setSourceSet(r,"fill/image/sourceSet",l);h()},ge=()=>{if(L==null){if(_==null)throw new Error("No image URI found");n.engine.block.setString(r,"fill/image/imageFileURI",_)}else n.engine.block.setSourceSet(r,"fill/image/sourceSet",L);M?n.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:pe,onAfter:ge,onCancel:()=>{pe()},onApply:()=>{ge(),t.cesdk.engine.editor.addUndoStep()}}}}async function co(e,t){throw new Error("Function not implemented.")}async function uo(e,t){throw new Error("Function not implemented.")}async function po(e,t,n){let i=await(await fetch(t)).blob(),a=new File([i],`image.${lr(n)}`,{type:n}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var go=ao;function mo({editMode:e,automaticallyUnlock:t=!1,showNotification:n=!0}){return async(i,a,o)=>{let r=a.blockIds??a.engine.block.findAllSelected(),l=()=>{};t||a.addDisposer(async()=>{l?.()});try{l=yo(a.engine,r,e);let c=await o(i,a);if(n){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 yo(e,t,n){function i(){let r=e.block.findAllSelected();return t.some(l=>r.includes(l))}let a=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==n&&i()&&e.editor.setEditMode(n)}),o=e.block.onSelectionChanged(()=>{i()?e.editor.setEditMode(n):e.editor.setEditMode("Transform")});return i()&&e.editor.setEditMode(n),()=>{o(),a(),e.editor.setEditMode("Transform")}}var fo=mo;async function bo(e,t){let{cesdk:n,input:i,blockIds:a,provider:o,quickAction:r,confirmationComponentId:l,abortSignal:c}=e;r.confirmation&&n.ui.setCanvasMenuOrder([l],{editMode:te});let s=new Ne(n.engine,nt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:n,engine:n.engine,abortSignal:c},d=Je([...o.output.middleware??[],t.debug?Xe():void 0,io({}),...r.confirmation?[r.lockDuringConfirmation?oo({editMode:te}):fo({editMode:te}),r.confirmation&&eo({})]:[],t.dryRun?et({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(i,u),{consumedGenerationResult:k,applyCallbacks:w}=await go(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:n});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(w.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:w}}var Te=bo;function ho(e,t){let{cesdk:n,quickActionMenu:i,provider:a}=e,o=`ly.img.ai.${i.id}`,r=`${o}.confirmation`;n.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};n.ui.registerComponent(l,({builder:d,engine:g,state:m})=>{let k=g.block.findAllSelected();if(k.length===0)return null;let w=new Ne(n.engine,nt),b=w.get(k[0]);if(b==null)return null;let p=()=>{k.forEach(h=>{w.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,v=c.applyCallbacks?.onAfter;f!=null&&v!=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:()=>{v(),h.setValue("after")}})}});let A=c.applyCallbacks?.onApply;A!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:h.value!=="after",onClick:()=>{c.unlock(),p(),n.engine.editor._update(),A()}});break}default:}});let u=`${o}.canvasMenu`;return n.ui.registerComponent(u,d=>{let g=d.engine.block.findAllSelected(),m=g.every(y=>d.engine.block.getState(y).type==="Ready"),k=i.getQuickActionMenuOrder().map(y=>{if(y==="ly.img.separator")return y;let f=i.getQuickAction(y);if(f==null||!n.feature.isEnabled(rt({quickActionId:y,quickActionMenuId:i.id}),{engine:d.engine}))return null;let v=f.scopes;return v!=null&&v.length>0&&!g.every(A=>v.every(I=>d.engine.block.isAllowedByScope(A,I)))?null:f}).filter(y=>y!=null);if(k=Jr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:w,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})=>{w.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let f=h.value,v=i.getQuickAction(f);if(v!=null&&v.renderExpanded!=null){v.renderExpanded(d,{blockIds:g,closeMenu:y,toggleExpand:()=>{h.setValue(void 0)},handleGenerationError:A=>{V(A,{cesdk:n,provider:a},t)},generate:async(A,I)=>{try{let{returnValue:M,applyCallbacks:L,dispose:_}=await Te({input:A,quickAction:v,quickActionMenu:i,provider:a,cesdk:n,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=L,M}catch(M){throw T(M)||V(M,{cesdk:n,provider:a},t),M}}});return}}b.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(f=>{f==="ly.img.separator"?w.Separator(`${o}.separator.${Math.random().toString()}`):f.render(d,{blockIds:g,closeMenu:y,handleGenerationError:v=>{V(v,{cesdk:n,provider:a},t)},toggleExpand:()=>{h.setValue(f.id)},generate:async(v,A)=>{try{let{returnValue:I,applyCallbacks:M,dispose:L}=await Te({input:v,quickAction:f,quickActionMenu:i,provider:a,cesdk:n,abortSignal:s(),blockIds:A?.blockIds??g,confirmationComponentId:l},t);return c.unlock=L,c.applyCallbacks=M,I}catch(I){throw T(I)||V(I,{cesdk:n,provider:a},t),I}}})})}})}})}})}),{canvasMenuComponentId:u}}var ko=ho;async function vo(e,t,n){await e.initialize?.(t);let i=await Co(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let a=i?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:i,historyAssetLibraryEntryId:a,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};a!=null&&i!=null&&t.cesdk.ui.addAssetLibraryEntry({id:a,sourceIds:[i],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}`]:wo(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Wr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await Ao(e,o,n)}}function wo(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 Co(e,t,n){if(!(n==null||n===!1)){if(n==="@imgly/local"){let i=`${t}.history`;return e.asset.addLocalSource(i),i}if(n==="@imgly/indexedDB"){let i=`${t}.history`;return e.asset.addSource(new st(i,e)),i}return n}}async function Ao(e,t,n){let i={panel:void 0};return e.input?.panel!=null&&(i.panel=await Io(e,e.input.panel,t,n)),e.input?.quickActions!=null&&(n.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Mo(e,e.input.quickActions,t,n)),i}async function Io(e,t,n,i){switch(t.type){case"custom":return Zr(e,t,n,i);case"schema":return Rr(e,t,n,i);default:i.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Mo(e,t,n,i){let{cesdk:a}=n,o={};t.actions.forEach(r=>{let l=r.kind??e.kind;o[l]==null&&(o[l]=ue(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(rt({quickActionId:r.id,quickActionMenuId:l}),s),c.registerQuickAction(r),i.debug&&console.log(`Registered quick action: '${r.id}' (v${r.version}) to menu '${l}'`)}),Object.values(o).forEach(r=>{let{canvasMenuComponentId:l}=ko({cesdk:a,quickActionMenu:r,provider:e},i);i.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ot=vo;var de="@imgly/plugin-ai-text-generation-web";var at=e=>({async initialize({cesdk:t}){if(t==null)return;let n=await e.provider?.({cesdk:t});ot(n,{cesdk:t,engine:t.engine},{debug:e.debug??!1,dryRun:!1});let i=ue(t,"text");i.setQuickActionMenuOrder(["improve","fix","shorter","longer","ly.img.separator","changeTone","translate","ly.img.separator","changeTextTo",...i.getQuickActionMenuOrder()]),t.ui.addIconSet(me,ye),t.setTranslations({en:{"ly.img.ai.inference.apply":"Apply","ly.img.ai.inference.cancel":"Cancel","ly.img.ai.inference.improve":"Improve Writing","ly.img.ai.inference.improve.processing":"Improving Writing...","ly.img.ai.inference.fix":"Fix Spelling & Grammar","ly.img.ai.inference.fix.processing":"Fixing spelling & grammar...","ly.img.ai.inference.longer":"Make Longer","ly.img.ai.inference.longer.processing":"Making longer...","ly.img.ai.inference.shorter":"Make Shorter","ly.img.ai.inference.shorter.processing":"Making shorter...","ly.img.ai.inference.changeTone":"Change Tone","ly.img.ai.inference.changeTone.processing":"Changing tone...","ly.img.ai.inference.changeTone.type.professional":"Professional","ly.img.ai.inference.changeTone.type.casual":"Casual","ly.img.ai.inference.changeTone.type.friendly":"Friendly","ly.img.ai.inference.changeTone.type.serious":"Serious","ly.img.ai.inference.changeTone.type.humorous":"Humorous","ly.img.ai.inference.changeTone.type.optimistic":"Optimistic","ly.img.ai.inference.translate":"Translate","ly.img.ai.inference.translate.processing":"Translating...","ly.img.ai.inference.changeTextTo":"Change Text to...","ly.img.ai.inference.changeTextTo.processing":"Changing text..."}})}});var xo=e=>({name:de,version:"0.1.9",...at(e)}),Xo=xo;export{Xo as default};
139
+ `,Wr=Yr,je="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Kr(e,t){return{id:t,setQuickActionMenuOrder:n=>{e.ui.experimental.setGlobalStateValue(`${je}.${t}`,n)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${je}.${t}`,[]),registerQuickAction:n=>{if(!e.ui.experimental.hasGlobalStateValue(`${U}.${t}`))e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{[n.id]:n});else{let i=e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${U}.${t}`,{...i,[n.id]:n})}},getQuickAction:n=>e.ui.experimental.getGlobalStateValue(`${U}.${t}`,{})[n]}}var ue=Kr,te="ly.img.ai.inference.editMode",nt="ly.img.ai.inference.metadata";function rt(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function Jr(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((n,i)=>(i==="ly.img.separator"&&n.length>0&&n[n.length-1]==="ly.img.separator"||n.push(i),n),[])}function Xr({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(n,i,a)=>{let o={},r={},l=e||t?i.blockIds??i.engine.block.findAllSelected():[];return l.forEach(c=>{if(i.engine.block.isValid(c)&&e&&(o[c]=i.engine.block.isAlwaysOnTop(c),i.engine.block.setAlwaysOnTop(c,!0)),t){let s=i.engine.block.getParent(c);s!=null&&i.engine.block.getType(s)!=="//ly.img.ubq/scene"&&(r[s]=i.engine.block.isClipped(s),i.engine.block.setClipped(s,!1))}}),i.addDisposer(async()=>{l.forEach(c=>{if(i.engine.block.isValid(c)&&e&&i.engine.block.setAlwaysOnTop(c,o[c]),t){let s=i.engine.block.getParent(c);s!=null&&i.engine.block.getType(s)!=="//ly.img.ubq/scene"&&r[s]!=null&&i.engine.block.setClipped(s,r[s])}})}),await a(n,i)}}var eo=Xr;function to({pending:e=!0}){return async(t,n,i)=>{let a=e?n.blockIds??n.engine.block.findAllSelected():[];try{return a.forEach(o=>{n.engine.block.isValid(o)&&n.engine.block.setState(o,{type:"Pending",progress:0})}),await i(t,n)}finally{a.forEach(o=>{n.engine.block.isValid(o)&&n.engine.block.setState(o,{type:"Ready"})})}}}var io=to;function no({editMode:e,automaticallyUnlock:t=!1}){return async(n,i,a)=>{let o=i.blockIds??i.engine.block.findAllSelected(),r=()=>{};t||i.addDisposer(async()=>{r?.()});try{return r=ro(i.engine,o,e),await a(n,i)}catch(l){throw T(l)&&r(),l}finally{t&&r()}}}function ro(e,t,n){let i=e.editor.getGlobalScope("editor/select"),a=e.editor.getEditMode();l(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(n);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()!==n&&e.editor.setEditMode(n)}),s=e.block.onSelectionChanged(l);return()=>{i!=null&&e.editor.setGlobalScope("editor/select",i),e.editor.setEditMode(a),e.editor.setActiveHistory(r),e.editor.destroyHistory(o),s(),c()}}var oo=no;function ao(e,t){switch(t.kind){case"text":return lo(e,t);case"image":return so(e,t);case"video":return co(e,t);case"audio":return uo(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function lo(e,t){let{cesdk:n,blockIds:i,abortSignal:a}=t,o=i.map(s=>n.engine.block.getString(s,"text/text")),r;if(ce(e)){let s="";for await(let u of e){if(a.aborted)break;typeof u=="string"?s=u:u.kind==="text"&&(s=u.text),i.forEach(d=>{n.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 so(e,t){let{cesdk:n,blockIds:i,abortSignal:a}=t;if(i.length!==1)throw new Error("Only one block is supported for image generation");let[o]=i,r=n.engine.block.getFill(o),l=n.engine.block.getSourceSet(r,"fill/image/sourceSet"),[c]=l,s;c==null&&(s=n.engine.block.getString(r,"fill/image/imageFileURI"));let u=await n.engine.editor.getMimeType(c?.uri??s),d=await le(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=n.engine.block.getCropScaleX(o),k=n.engine.block.getCropScaleY(o),w=n.engine.block.getCropTranslationX(o),b=n.engine.block.getCropTranslationY(o),p=n.engine.block.getCropRotation(o),h=()=>{n.engine.block.setCropScaleX(o,m),n.engine.block.setCropScaleY(o,k),n.engine.block.setCropTranslationX(o,w),n.engine.block.setCropTranslationY(o,b),n.engine.block.setCropRotation(o,p)};if(ce(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 n.engine.editor.getMimeType(y),v=await po(n,y,f),A=await le(v,t.cesdk.engine),I=A.width/A.height,M=Math.abs(g-I)>.001,L=c?[{uri:v,width:A.width,height:A.height}]:void 0,_=v;L==null?n.engine.block.setString(r,"fill/image/imageFileURI",_):(n.engine.block.setString(r,"fill/image/imageFileURI",""),n.engine.block.setSourceSet(r,"fill/image/sourceSet",L)),M?n.engine.block.setContentFillMode(o,"Cover"):h();let pe=()=>{if(l==null||l.length===0){if(s==null)throw new Error("No image URI found");n.engine.block.setString(r,"fill/image/imageFileURI",s)}else n.engine.block.setSourceSet(r,"fill/image/sourceSet",l);h()},ge=()=>{if(L==null){if(_==null)throw new Error("No image URI found");n.engine.block.setString(r,"fill/image/imageFileURI",_)}else n.engine.block.setSourceSet(r,"fill/image/sourceSet",L);M?n.engine.block.setContentFillMode(o,"Cover"):h()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:pe,onAfter:ge,onCancel:()=>{pe()},onApply:()=>{ge(),t.cesdk.engine.editor.addUndoStep()}}}}async function co(e,t){throw new Error("Function not implemented.")}async function uo(e,t){throw new Error("Function not implemented.")}async function po(e,t,n){let i=await(await fetch(t)).blob(),a=new File([i],`image.${lr(n)}`,{type:n}),o=await e.unstable_upload(a,()=>{});return o?.meta?.uri??(console.warn("Failed to upload image:",o),t)}var go=ao;function mo({editMode:e,automaticallyUnlock:t=!1,showNotification:n=!0}){return async(i,a,o)=>{let r=a.blockIds??a.engine.block.findAllSelected(),l=()=>{};t||a.addDisposer(async()=>{l?.()});try{l=yo(a.engine,r,e);let c=await o(i,a);if(n){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 yo(e,t,n){function i(){let r=e.block.findAllSelected();return t.some(l=>r.includes(l))}let a=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==n&&i()&&e.editor.setEditMode(n)}),o=e.block.onSelectionChanged(()=>{i()?e.editor.setEditMode(n):e.editor.setEditMode("Transform")});return i()&&e.editor.setEditMode(n),()=>{o(),a(),e.editor.setEditMode("Transform")}}var fo=mo;async function bo(e,t){let{cesdk:n,input:i,blockIds:a,provider:o,quickAction:r,confirmationComponentId:l,abortSignal:c}=e;r.confirmation&&n.ui.setCanvasMenuOrder([l],{editMode:te});let s=new Ne(n.engine,nt);a.forEach(p=>{s.set(p,{status:"processing",quickActionId:r.id})});let u={cesdk:n,engine:n.engine,abortSignal:c},d=Je([...o.output.middleware??[],t.debug?Xe():void 0,io({}),...r.confirmation?[r.lockDuringConfirmation?oo({editMode:te}):fo({editMode:te}),r.confirmation&&eo({})]:[],t.dryRun?et({kind:o.kind,blockIds:a}):void 0]),{result:g,dispose:m}=await d(o.output.generate)(i,u),{consumedGenerationResult:k,applyCallbacks:w}=await go(g,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:n});r.confirmation?a.forEach(p=>{s.set(p,{status:"confirmation",quickActionId:r.id})}):(w.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:w}}var Te=bo;function ho(e,t){let{cesdk:n,quickActionMenu:i,provider:a}=e,o=`ly.img.ai.${i.id}`,r=`${o}.confirmation`;n.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};n.ui.registerComponent(l,({builder:d,engine:g,state:m})=>{let k=g.block.findAllSelected();if(k.length===0)return null;let w=new Ne(n.engine,nt),b=w.get(k[0]);if(b==null)return null;let p=()=>{k.forEach(h=>{w.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,v=c.applyCallbacks?.onAfter;f!=null&&v!=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:()=>{v(),h.setValue("after")}})}});let A=c.applyCallbacks?.onApply;A!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:h.value!=="after",onClick:()=>{c.unlock(),p(),n.engine.editor._update(),A()}});break}default:}});let u=`${o}.canvasMenu`;return n.ui.registerComponent(u,d=>{let g=d.engine.block.findAllSelected(),m=g.every(y=>d.engine.block.getState(y).type==="Ready"),k=i.getQuickActionMenuOrder().map(y=>{if(y==="ly.img.separator")return y;let f=i.getQuickAction(y);if(f==null||!n.feature.isEnabled(rt({quickActionId:y,quickActionMenuId:i.id}),{engine:d.engine}))return null;let v=f.scopes;return v!=null&&v.length>0&&!g.every(A=>v.every(I=>d.engine.block.isAllowedByScope(A,I)))?null:f}).filter(y=>y!=null);if(k=Jr(k),k.length===0||k.every(y=>y==="ly.img.separator"))return null;let{builder:w,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})=>{w.Section(`${o}.popover.section`,{children:()=>{if(h.value!=null){let f=h.value,v=i.getQuickAction(f);if(v!=null&&v.renderExpanded!=null){v.renderExpanded(d,{blockIds:g,closeMenu:y,toggleExpand:()=>{h.setValue(void 0)},handleGenerationError:A=>{V(A,{cesdk:n,provider:a},t)},generate:async(A,I)=>{try{let{returnValue:M,applyCallbacks:L,dispose:_}=await Te({input:A,quickAction:v,quickActionMenu:i,provider:a,cesdk:n,abortSignal:s(),blockIds:I?.blockIds??g,confirmationComponentId:l},t);return c.unlock=_,c.applyCallbacks=L,M}catch(M){throw T(M)||V(M,{cesdk:n,provider:a},t),M}}});return}}b.builder.Menu(`${o}.menu`,{children:()=>{k.forEach(f=>{f==="ly.img.separator"?w.Separator(`${o}.separator.${Math.random().toString()}`):f.render(d,{blockIds:g,closeMenu:y,handleGenerationError:v=>{V(v,{cesdk:n,provider:a},t)},toggleExpand:()=>{h.setValue(f.id)},generate:async(v,A)=>{try{let{returnValue:I,applyCallbacks:M,dispose:L}=await Te({input:v,quickAction:f,quickActionMenu:i,provider:a,cesdk:n,abortSignal:s(),blockIds:A?.blockIds??g,confirmationComponentId:l},t);return c.unlock=L,c.applyCallbacks=M,I}catch(I){throw T(I)||V(I,{cesdk:n,provider:a},t),I}}})})}})}})}})}),{canvasMenuComponentId:u}}var ko=ho;async function vo(e,t,n){await e.initialize?.(t);let i=await Co(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let a=i?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:i,historyAssetLibraryEntryId:a,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};a!=null&&i!=null&&t.cesdk.ui.addAssetLibraryEntry({id:a,sourceIds:[i],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}`]:wo(e)}});let r="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(r)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",Wr),t.cesdk.ui.experimental.setGlobalStateValue(r,!0)),{renderBuilderFunctions:await Ao(e,o,n)}}function wo(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 Co(e,t,n){if(!(n==null||n===!1)){if(n==="@imgly/local"){let i=`${t}.history`;return e.asset.addLocalSource(i),i}if(n==="@imgly/indexedDB"){let i=`${t}.history`;return e.asset.addSource(new st(i,e)),i}return n}}async function Ao(e,t,n){let i={panel:void 0};return e.input?.panel!=null&&(i.panel=await Io(e,e.input.panel,t,n)),e.input?.quickActions!=null&&(n.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Mo(e,e.input.quickActions,t,n)),i}async function Io(e,t,n,i){switch(t.type){case"custom":return Zr(e,t,n,i);case"schema":return Rr(e,t,n,i);default:i.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Mo(e,t,n,i){let{cesdk:a}=n,o={};t.actions.forEach(r=>{let l=r.kind??e.kind;o[l]==null&&(o[l]=ue(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(rt({quickActionId:r.id,quickActionMenuId:l}),s),c.registerQuickAction(r),i.debug&&console.log(`Registered quick action: '${r.id}' (v${r.version}) to menu '${l}'`)}),Object.values(o).forEach(r=>{let{canvasMenuComponentId:l}=ko({cesdk:a,quickActionMenu:r,provider:e},i);i.debug&&console.log(`Registered quick action menu component: ${l}`)})}var ot=vo;var de="@imgly/plugin-ai-text-generation-web";var at=e=>({async initialize({cesdk:t}){if(t==null)return;let n=await e.provider?.({cesdk:t});ot(n,{cesdk:t,engine:t.engine},{debug:e.debug??!1,dryRun:!1});let i=ue(t,"text");i.setQuickActionMenuOrder(["improve","fix","shorter","longer","ly.img.separator","changeTone","translate","ly.img.separator","changeTextTo",...i.getQuickActionMenuOrder()]),t.ui.addIconSet(me,ye),t.setTranslations({en:{"ly.img.ai.inference.apply":"Apply","ly.img.ai.inference.cancel":"Cancel","ly.img.ai.inference.improve":"Improve Writing","ly.img.ai.inference.improve.processing":"Improving Writing...","ly.img.ai.inference.fix":"Fix Spelling & Grammar","ly.img.ai.inference.fix.processing":"Fixing spelling & grammar...","ly.img.ai.inference.longer":"Make Longer","ly.img.ai.inference.longer.processing":"Making longer...","ly.img.ai.inference.shorter":"Make Shorter","ly.img.ai.inference.shorter.processing":"Making shorter...","ly.img.ai.inference.changeTone":"Change Tone","ly.img.ai.inference.changeTone.processing":"Changing tone...","ly.img.ai.inference.changeTone.type.professional":"Professional","ly.img.ai.inference.changeTone.type.casual":"Casual","ly.img.ai.inference.changeTone.type.friendly":"Friendly","ly.img.ai.inference.changeTone.type.serious":"Serious","ly.img.ai.inference.changeTone.type.humorous":"Humorous","ly.img.ai.inference.changeTone.type.optimistic":"Optimistic","ly.img.ai.inference.translate":"Translate","ly.img.ai.inference.translate.processing":"Translating...","ly.img.ai.inference.changeTextTo":"Change Text to...","ly.img.ai.inference.changeTextTo.processing":"Changing text..."}})}});var xo=e=>({name:de,version:"0.1.10",...at(e)}),Xo=xo;export{Xo as default};
140
140
  /*! Bundled license information:
141
141
 
142
142
  @imgly/plugin-ai-generation-web/dist/index.mjs: