@imgly/plugin-ai-video-generation-web 0.1.6 → 0.1.7
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 De(e,t){if(!t.startsWith("#/"))throw new Error(`External references are
|
|
|
60
60
|
|
|
61
61
|
</symbol>
|
|
62
62
|
</svg>
|
|
63
|
-
`,Hr=Yr,Le="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Zr(e,t){return{id:t,setQuickActionMenuOrder:i=>{e.ui.experimental.setGlobalStateValue(`${Le}.${t}`,i)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${Le}.${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 Wr=Zr,ie="ly.img.ai.inference.editMode",it="ly.img.ai.inference.metadata";function rt(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 L(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(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 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),p=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),y=i.engine.block.getCropScaleY(o),v=i.engine.block.getCropTranslationX(o),h=i.engine.block.getCropTranslationY(o),g=i.engine.block.getCropRotation(o),k=()=>{i.engine.block.setCropScaleX(o,m),i.engine.block.setCropScaleY(o,y),i.engine.block.setCropTranslationX(o,v),i.engine.block.setCropTranslationY(o,h),i.engine.block.setCropRotation(o,g)};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 f=e.url,b=await i.engine.editor.getMimeType(f),w=await uo(i,f,b),A=await ce(w,t.cesdk.engine),C=A.width/A.height,x=Math.abs(p-C)>.001,S=c?[{uri:w,width:A.width,height:A.height}]:void 0,z=w;S==null?i.engine.block.setString(r,"fill/image/imageFileURI",z):(i.engine.block.setString(r,"fill/image/imageFileURI",""),i.engine.block.setSourceSet(r,"fill/image/sourceSet",S)),x?i.engine.block.setContentFillMode(o,"Cover"):k();let fe=()=>{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);k()},ye=()=>{if(S==null){if(z==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",z)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",S);x?i.engine.block.setContentFillMode(o,"Cover"):k()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:fe,onAfter:ye,onCancel:()=>{fe()},onApply:()=>{ye(),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.${jr(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 L(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 fo=go;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,it);a.forEach(g=>{s.set(g,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Fe([...o.output.middleware??[],t.debug?Ge():void 0,to({}),...r.confirmation?[r.lockDuringConfirmation?ro({editMode:ie}):fo({editMode:ie}),r.confirmation&&Xr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:p,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:y,applyCallbacks:v}=await po(p,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(g=>{s.set(g,{status:"confirmation",quickActionId:r.id})}):(v.onApply(),a.forEach(g=>{s.clear(g)}));let h=()=>{m(),a.forEach(g=>{s.clear(g)})};return c.addEventListener("abort",h),{dispose:h,returnValue:y,applyCallbacks:v}}var Ne=yo;function bo(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,p=d.signal;return c.abort=()=>{d.abort()},p};i.ui.registerComponent(l,({builder:d,engine:p,state:m})=>{let y=p.block.findAllSelected();if(y.length===0)return null;let v=new Re(i.engine,it),h=v.get(y[0]);if(h==null)return null;let g=()=>{y.forEach(k=>{v.clear(k)})};switch(h.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${h.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),d.Separator(`${o}.separator`),d.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.abort(),g()}});break}case"confirmation":{let k=m(`${r}.comparing`,"after"),f=c.applyCallbacks?.onCancel;f!=null&&d.Button(`${r}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.unlock(),f(),g()}});let b=c.applyCallbacks?.onBefore,w=c.applyCallbacks?.onAfter;b!=null&&w!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:k.value==="before",onClick:()=>{b(),k.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:k.value==="after",onClick:()=>{w(),k.setValue("after")}})}});let A=c.applyCallbacks?.onApply;A!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:k.value!=="after",onClick:()=>{c.unlock(),g(),i.engine.editor._update(),A()}});break}default:}});let u=`${o}.canvasMenu`;return i.ui.registerComponent(u,d=>{let p=d.engine.block.findAllSelected(),m=p.every(f=>d.engine.block.getState(f).type==="Ready"),y=n.getQuickActionMenuOrder().map(f=>{if(f==="ly.img.separator")return f;let b=n.getQuickAction(f);if(b==null||!i.feature.isEnabled(rt({quickActionId:f,quickActionMenuId:n.id}),{engine:d.engine}))return null;let w=b.scopes;return w!=null&&w.length>0&&!p.every(A=>w.every(C=>d.engine.block.isAllowedByScope(A,C)))?null:b}).filter(f=>f!=null);if(y=Kr(y),y.length===0||y.every(f=>f==="ly.img.separator"))return null;let{builder:v,experimental:h,state:g}=d,k=g(`${o}.toggleExpandedState`,void 0);h.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:f})=>{v.Section(`${o}.popover.section`,{children:()=>{if(k.value!=null){let b=k.value,w=n.getQuickAction(b);if(w!=null&&w.renderExpanded!=null){w.renderExpanded(d,{blockIds:p,closeMenu:f,toggleExpand:()=>{k.setValue(void 0)},handleGenerationError:A=>{V(A,{cesdk:i,provider:a},t)},generate:async(A,C)=>{try{let{returnValue:x,applyCallbacks:S,dispose:z}=await Ne({input:A,quickAction:w,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??p,confirmationComponentId:l},t);return c.unlock=z,c.applyCallbacks=S,x}catch(x){throw L(x)||V(x,{cesdk:i,provider:a},t),x}}});return}}h.builder.Menu(`${o}.menu`,{children:()=>{y.forEach(b=>{b==="ly.img.separator"?v.Separator(`${o}.separator.${Math.random().toString()}`):b.render(d,{blockIds:p,closeMenu:f,handleGenerationError:w=>{V(w,{cesdk:i,provider:a},t)},toggleExpand:()=>{k.setValue(b.id)},generate:async(w,A)=>{try{let{returnValue:C,applyCallbacks:x,dispose:S}=await Ne({input:w,quickAction:b,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:A?.blockIds??p,confirmationComponentId:l},t);return c.unlock=S,c.applyCallbacks=x,C}catch(C){throw L(C)||V(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var ho=bo;async function ko(e,t,i){await e.initialize?.(t);let n=await vo(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}`]:wo(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 Io(e,o,i)}}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 vo(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 Io(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})`),Co(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 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]=Wr(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(rt({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 pe=ko;function Mo(e){let{cesdk:t,panelId:i}=e;i.startsWith("ly.img.ai/")&&console.warn(`Dock components for AI generation should open a panel with an id starting with "ly.img.ai/" \u2013 "${i}" was provided.`);let n=`${i}.dock`;t.ui.registerComponent(n,({builder:a})=>{let o=t.ui.isPanelOpen(i);a.Button(`${i}.dock.button`,{label:`${i}.dock.label`,isSelected:o,icon:"@imgly/Sparkle",onClick:()=>{t.ui.findAllPanels().forEach(r=>{r.startsWith("ly.img.ai/")&&t.ui.closePanel(r),!o&&r==="//ly.img.panel/assetLibrary"&&t.ui.closePanel(r)}),o?t.ui.closePanel(i):t.ui.openPanel(i)}})})}var ot=Mo;var ge="@imgly/plugin-ai-video-generation-web";var M="ly.img.ai/video-generation",me="ly.img.ai.video-generation.fromType";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.${M}`]:"Video Generation","ly.img.ai.video-generation.success":"Video Generation Successful","ly.img.ai.video-generation.success.action":"Show"}});let n=e?.text2video,a=e?.image2video,o=await n?.({cesdk:t}),r=await a?.({cesdk:t});function l(d){if(t!=null)return{success:{show:()=>{let p=t?.ui.isPanelOpen(M),m=t.ui.experimental.getGlobalStateValue(me)===d;return!p||!m},message:"ly.img.ai.video-generation.success",action:{label:"ly.img.ai.video-generation.success.action",onClick:()=>{t.ui.experimental.setGlobalStateValue(me,d),t.ui.openPanel(M)}},duration:"long"}}}o!=null&&(o.output.notification=l("fromText")),r!=null&&(r.output.notification=l("fromImage"));let c=o!=null?await pe(o,{cesdk:t,engine:t.engine},i):void 0,s=r!=null?await pe(r,{cesdk:t,engine:t.engine},i):void 0;if(c?.renderBuilderFunctions?.panel==null&&s?.renderBuilderFunctions?.panel==null){i.debug&&console.log("No providers are initialized \u2013 doing nothing");return}if(c?.renderBuilderFunctions?.panel!=null&&s?.renderBuilderFunctions?.panel!=null)t.ui.registerPanel(M,d=>{let{builder:p,experimental:m}=d,y=m.global(me,"fromText");switch(p.Section(`${M}.fromType.section`,{children:()=>{p.ButtonGroup(`${M}.fromType.buttonGroup`,{inputLabel:"Input",children:()=>{p.Button(`${M}.fromType.buttonGroup.fromText`,{label:"Text",icon:y.value!=="fromText"&&o!=null&&m.global(H(o.id),!1).value?"@imgly/LoadingSpinner":void 0,isActive:y.value==="fromText",onClick:()=>{y.setValue("fromText")}}),p.Button(`${M}.fromType.buttonGroup.fromImage`,{label:"Image",icon:y.value!=="fromImage"&&r!=null&&m.global(H(r.id),!1).value?"@imgly/LoadingSpinner":void 0,isActive:y.value==="fromImage",onClick:()=>{y.setValue("fromImage")}})}})}}),y.value){case"fromText":{c?.renderBuilderFunctions?.panel?.(d);break}case"fromImage":{s?.renderBuilderFunctions?.panel?.(d);break}default:}});else{let d=c?.renderBuilderFunctions?.panel??s?.renderBuilderFunctions?.panel;if(d==null)return;t.ui.registerPanel(M,d),t.i18n.setTranslations({en:{[`${M}.dock.label`]:"AI Video"}}),ot({cesdk:t,panelId:M})}}}}var at=xo;var Eo=e=>({name:ge,version:"0.1.6",...at(e)}),Jo=Eo;export{Jo as default};
|
|
63
|
+
`,Hr=Yr,Le="ly.img.ai.quickAction.order",U="ly.img.ai.quickAction.actions";function Zr(e,t){return{id:t,setQuickActionMenuOrder:i=>{e.ui.experimental.setGlobalStateValue(`${Le}.${t}`,i)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${Le}.${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 Wr=Zr,ie="ly.img.ai.inference.editMode",it="ly.img.ai.inference.metadata";function rt(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 L(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(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 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),p=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),y=i.engine.block.getCropScaleY(o),v=i.engine.block.getCropTranslationX(o),h=i.engine.block.getCropTranslationY(o),g=i.engine.block.getCropRotation(o),k=()=>{i.engine.block.setCropScaleX(o,m),i.engine.block.setCropScaleY(o,y),i.engine.block.setCropTranslationX(o,v),i.engine.block.setCropTranslationY(o,h),i.engine.block.setCropRotation(o,g)};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 f=e.url,b=await i.engine.editor.getMimeType(f),w=await uo(i,f,b),A=await ce(w,t.cesdk.engine),C=A.width/A.height,x=Math.abs(p-C)>.001,S=c?[{uri:w,width:A.width,height:A.height}]:void 0,z=w;S==null?i.engine.block.setString(r,"fill/image/imageFileURI",z):(i.engine.block.setString(r,"fill/image/imageFileURI",""),i.engine.block.setSourceSet(r,"fill/image/sourceSet",S)),x?i.engine.block.setContentFillMode(o,"Cover"):k();let fe=()=>{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);k()},ye=()=>{if(S==null){if(z==null)throw new Error("No image URI found");i.engine.block.setString(r,"fill/image/imageFileURI",z)}else i.engine.block.setSourceSet(r,"fill/image/sourceSet",S);x?i.engine.block.setContentFillMode(o,"Cover"):k()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:fe,onAfter:ye,onCancel:()=>{fe()},onApply:()=>{ye(),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.${jr(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 L(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 fo=go;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,it);a.forEach(g=>{s.set(g,{status:"processing",quickActionId:r.id})});let u={cesdk:i,engine:i.engine,abortSignal:c},d=Fe([...o.output.middleware??[],t.debug?Ge():void 0,to({}),...r.confirmation?[r.lockDuringConfirmation?ro({editMode:ie}):fo({editMode:ie}),r.confirmation&&Xr({})]:[],t.dryRun?tt({kind:o.kind,blockIds:a}):void 0]),{result:p,dispose:m}=await d(o.output.generate)(n,u),{consumedGenerationResult:y,applyCallbacks:v}=await po(p,{abortSignal:c,kind:o.kind,blockIds:a,cesdk:i});r.confirmation?a.forEach(g=>{s.set(g,{status:"confirmation",quickActionId:r.id})}):(v.onApply(),a.forEach(g=>{s.clear(g)}));let h=()=>{m(),a.forEach(g=>{s.clear(g)})};return c.addEventListener("abort",h),{dispose:h,returnValue:y,applyCallbacks:v}}var Ne=yo;function bo(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,p=d.signal;return c.abort=()=>{d.abort()},p};i.ui.registerComponent(l,({builder:d,engine:p,state:m})=>{let y=p.block.findAllSelected();if(y.length===0)return null;let v=new Re(i.engine,it),h=v.get(y[0]);if(h==null)return null;let g=()=>{y.forEach(k=>{v.clear(k)})};switch(h.status){case"processing":{d.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${h.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),d.Separator(`${o}.separator`),d.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.abort(),g()}});break}case"confirmation":{let k=m(`${r}.comparing`,"after"),f=c.applyCallbacks?.onCancel;f!=null&&d.Button(`${r}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{c.unlock(),f(),g()}});let b=c.applyCallbacks?.onBefore,w=c.applyCallbacks?.onAfter;b!=null&&w!=null&&d.ButtonGroup(`${r}.compare`,{children:()=>{d.Button(`${r}.compare.before`,{label:`${r}.before`,variant:"regular",isActive:k.value==="before",onClick:()=>{b(),k.setValue("before")}}),d.Button(`${r}.compare.after`,{label:`${r}.after`,variant:"regular",isActive:k.value==="after",onClick:()=>{w(),k.setValue("after")}})}});let A=c.applyCallbacks?.onApply;A!=null&&d.Button(`${r}.apply`,{icon:"@imgly/Checkmark",tooltip:`${r}.apply`,color:"accent",isDisabled:k.value!=="after",onClick:()=>{c.unlock(),g(),i.engine.editor._update(),A()}});break}default:}});let u=`${o}.canvasMenu`;return i.ui.registerComponent(u,d=>{let p=d.engine.block.findAllSelected(),m=p.every(f=>d.engine.block.getState(f).type==="Ready"),y=n.getQuickActionMenuOrder().map(f=>{if(f==="ly.img.separator")return f;let b=n.getQuickAction(f);if(b==null||!i.feature.isEnabled(rt({quickActionId:f,quickActionMenuId:n.id}),{engine:d.engine}))return null;let w=b.scopes;return w!=null&&w.length>0&&!p.every(A=>w.every(C=>d.engine.block.isAllowedByScope(A,C)))?null:b}).filter(f=>f!=null);if(y=Kr(y),y.length===0||y.every(f=>f==="ly.img.separator"))return null;let{builder:v,experimental:h,state:g}=d,k=g(`${o}.toggleExpandedState`,void 0);h.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!m,trailingIcon:null,children:({close:f})=>{v.Section(`${o}.popover.section`,{children:()=>{if(k.value!=null){let b=k.value,w=n.getQuickAction(b);if(w!=null&&w.renderExpanded!=null){w.renderExpanded(d,{blockIds:p,closeMenu:f,toggleExpand:()=>{k.setValue(void 0)},handleGenerationError:A=>{V(A,{cesdk:i,provider:a},t)},generate:async(A,C)=>{try{let{returnValue:x,applyCallbacks:S,dispose:z}=await Ne({input:A,quickAction:w,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:C?.blockIds??p,confirmationComponentId:l},t);return c.unlock=z,c.applyCallbacks=S,x}catch(x){throw L(x)||V(x,{cesdk:i,provider:a},t),x}}});return}}h.builder.Menu(`${o}.menu`,{children:()=>{y.forEach(b=>{b==="ly.img.separator"?v.Separator(`${o}.separator.${Math.random().toString()}`):b.render(d,{blockIds:p,closeMenu:f,handleGenerationError:w=>{V(w,{cesdk:i,provider:a},t)},toggleExpand:()=>{k.setValue(b.id)},generate:async(w,A)=>{try{let{returnValue:C,applyCallbacks:x,dispose:S}=await Ne({input:w,quickAction:b,quickActionMenu:n,provider:a,cesdk:i,abortSignal:s(),blockIds:A?.blockIds??p,confirmationComponentId:l},t);return c.unlock=S,c.applyCallbacks=x,C}catch(C){throw L(C)||V(C,{cesdk:i,provider:a},t),C}}})})}})}})}})}),{canvasMenuComponentId:u}}var ho=bo;async function ko(e,t,i){await e.initialize?.(t);let n=await vo(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}`]:wo(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 Io(e,o,i)}}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 vo(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 Io(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})`),Co(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 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]=Wr(a,l));let c=o[l],s=r.enable??!0;a.feature.enable(rt({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 pe=ko;function Mo(e){let{cesdk:t,panelId:i}=e;i.startsWith("ly.img.ai/")&&console.warn(`Dock components for AI generation should open a panel with an id starting with "ly.img.ai/" \u2013 "${i}" was provided.`);let n=`${i}.dock`;t.ui.registerComponent(n,({builder:a})=>{let o=t.ui.isPanelOpen(i);a.Button(`${i}.dock.button`,{label:`${i}.dock.label`,isSelected:o,icon:"@imgly/Sparkle",onClick:()=>{t.ui.findAllPanels().forEach(r=>{r.startsWith("ly.img.ai/")&&t.ui.closePanel(r),!o&&r==="//ly.img.panel/assetLibrary"&&t.ui.closePanel(r)}),o?t.ui.closePanel(i):t.ui.openPanel(i)}})})}var ot=Mo;var ge="@imgly/plugin-ai-video-generation-web";var M="ly.img.ai/video-generation",me="ly.img.ai.video-generation.fromType";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.${M}`]:"Video Generation","ly.img.ai.video-generation.success":"Video Generation Successful","ly.img.ai.video-generation.success.action":"Show"}});let n=e?.text2video,a=e?.image2video,o=await n?.({cesdk:t}),r=await a?.({cesdk:t});function l(d){if(t!=null)return{success:{show:()=>{let p=t?.ui.isPanelOpen(M),m=t.ui.experimental.getGlobalStateValue(me)===d;return!p||!m},message:"ly.img.ai.video-generation.success",action:{label:"ly.img.ai.video-generation.success.action",onClick:()=>{t.ui.experimental.setGlobalStateValue(me,d),t.ui.openPanel(M)}},duration:"long"}}}o!=null&&(o.output.notification=l("fromText")),r!=null&&(r.output.notification=l("fromImage"));let c=o!=null?await pe(o,{cesdk:t,engine:t.engine},i):void 0,s=r!=null?await pe(r,{cesdk:t,engine:t.engine},i):void 0;if(c?.renderBuilderFunctions?.panel==null&&s?.renderBuilderFunctions?.panel==null){i.debug&&console.log("No providers are initialized \u2013 doing nothing");return}if(c?.renderBuilderFunctions?.panel!=null&&s?.renderBuilderFunctions?.panel!=null)t.ui.registerPanel(M,d=>{let{builder:p,experimental:m}=d,y=m.global(me,"fromText");switch(p.Section(`${M}.fromType.section`,{children:()=>{p.ButtonGroup(`${M}.fromType.buttonGroup`,{inputLabel:"Input",children:()=>{p.Button(`${M}.fromType.buttonGroup.fromText`,{label:"Text",icon:y.value!=="fromText"&&o!=null&&m.global(H(o.id),!1).value?"@imgly/LoadingSpinner":void 0,isActive:y.value==="fromText",onClick:()=>{y.setValue("fromText")}}),p.Button(`${M}.fromType.buttonGroup.fromImage`,{label:"Image",icon:y.value!=="fromImage"&&r!=null&&m.global(H(r.id),!1).value?"@imgly/LoadingSpinner":void 0,isActive:y.value==="fromImage",onClick:()=>{y.setValue("fromImage")}})}})}}),y.value){case"fromText":{c?.renderBuilderFunctions?.panel?.(d);break}case"fromImage":{s?.renderBuilderFunctions?.panel?.(d);break}default:}});else{let d=c?.renderBuilderFunctions?.panel??s?.renderBuilderFunctions?.panel;if(d==null)return;t.ui.registerPanel(M,d),t.i18n.setTranslations({en:{[`${M}.dock.label`]:"AI Video"}}),ot({cesdk:t,panelId:M})}}}}var at=xo;var Eo=e=>({name:ge,version:"0.1.7",...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:
|
package/package.json
CHANGED