@imgly/plugin-ai-generation-web
Version:
AI generation plugin for the CE.SDK editor
4 lines • 103 kB
JavaScript
function or(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=Oe(e);return r.i18n.setTranslations({en:{[`panel.${i}`]:"Select Image To Change","ly.img.ai.imageSelection.selectImage.label":"Select Image","ly.img.ai.imageSelection.error.svg":"SVG images are not supported. Please choose a different image.","ly.img.ai.imageSelection.error.invalidType":"Only images are supported. Found '{mimeType}'. Please choose a different image."}}),ar(e,r),{[n]:(a,s)=>{let{builder:d,experimental:{global:l},payload:u}=a,c,p=a.providerConfig,g=a.config,b=p?.properties?.[s.id]??g?.properties?.[s.id];b?.default&&(typeof b.default=="function"?c=b.default({}):c=b.default);let v=c??u?.url??t.defaultUrl,m=l(`${e}.${s.id}`,v);return d.MediaPreview(s.id,{preview:{type:"image",uri:m.value},action:{label:"ly.img.ai.imageSelection.selectImage.label",onClick:()=>{r?.ui.openPanel(i,{payload:{onSelect:f=>{f.meta?.uri!=null&&m.setValue(f.meta?.uri)}}})}}}),()=>({id:s.id,type:"string",value:m.value})}}}function ar(e,t){t?.ui.registerPanel(Oe(e),({builder:r,payload:n})=>{r.Library(`${e}.library.image`,{entries:["ly.img.image"],onSelect:async i=>{let o=i?.meta?.uri;if(o==null)return;let a=await t.engine.editor.getMimeType(o);a==="image/svg+xml"?t.ui.showNotification({type:"warning",message:"ly.img.ai.imageSelection.error.svg"}):a.startsWith("image/")?(n?.onSelect(i),t?.ui.closePanel(Oe(e))):t.ui.showNotification({type:"warning",message:"ly.img.ai.imageSelection.error.invalidType"})}})})}function Oe(e){return`ly.img.ai.${e}.imageSelection`}var We=or;var pt=class{constructor(e,t=[],r){this.id=e,this.translateLabel=r?.translateLabel,this.assets=t.map(n=>{if(typeof n.label=="string"&&!(n.label&&typeof n.label=="object")){let i=n;return{id:i.id,label:{en:i.label},meta:i.thumbUri?{...i.meta??{},thumbUri:i.thumbUri}:i.meta}}return n}),this.activeAssetIds=new Set,this.assets.length>0&&this.activeAssetIds.add(this.assets[0].id)}async findAssets(e){let{page:t,perPage:r,locale:n="en",sortActiveFirst:i,query:o,tags:a,groups:s,excludeGroups:d,sortingOrder:l,sortKey:u}=e,c=[...this.assets];if(s&&s.length>0&&(c=c.filter(f=>f.groups&&s.some(y=>f.groups?.includes(y)))),d&&d.length>0&&(c=c.filter(f=>!f.groups||!d.some(y=>f.groups?.includes(y)))),o){let f=o.toLowerCase();c=c.filter(y=>{let h=y.label?.[n]?.toLowerCase(),k=y.tags?.[n]||[];return h&&h.includes(f)||k.some(C=>C.toLowerCase().includes(f))})}if(a&&a.length>0){let f=Array.isArray(a)?a:[a];c=c.filter(y=>{let h=y.tags?.[n]||[];return f.some(k=>h.includes(k))})}i&&c.sort((f,y)=>{let h=this.activeAssetIds.has(f.id),k=this.activeAssetIds.has(y.id);return h&&!k?-1:!h&&k?1:0}),u&&u!=="id"?c.sort((f,y)=>{let h=f.meta?.[u],k=y.meta?.[u];return h===void 0?1:k===void 0?-1:typeof h=="string"&&typeof k=="string"?l==="Descending"?k.localeCompare(h):h.localeCompare(k):typeof h=="number"&&typeof k=="number"?l==="Descending"?k-h:h-k:0}):u==="id"&&c.sort((f,y)=>l==="Descending"?y.id.localeCompare(f.id):f.id.localeCompare(y.id));let p=c.length,g=t*r,b=g+r,v=c.slice(g,b).map(f=>{let y=f.label?.[n]||"",h=this.translateLabel?this.translateLabel(f.id,y,n):y;return{id:f.id,groups:f.groups,meta:f.meta,payload:f.payload,locale:n,label:h,tags:f.tags?.[n],active:this.activeAssetIds.has(f.id)}}),m=b<p?t+1:void 0;return{assets:v,currentPage:t,nextPage:m,total:p}}updateLabel(e,t,r){this.assets.forEach(n=>{n.id===e&&(n.label=n.label||{},n.label[r]=t)})}getAssetSelectValue(e){let t=this.assets.find(({id:r})=>r===e);if(t){let r=this.translateLabel?this.translateLabel(t.id,t.label?.en||"",""):t.label?.en||"";return{id:t.id,label:r,thumbUri:t.meta?.thumbUri}}}getActiveSelectValue(){let e=this.getActiveAssetIds();if(e.length>0){let t=this.assets.find(({id:r})=>r===e[0]);if(t){let r=this.translateLabel?this.translateLabel(t.id,t.label?.en||"",""):t.label?.en||"";return{id:t.id,label:r,thumbUri:t.meta?.thumbUri}}}}getTranslatedLabel(e){let t=this.assets.find(({id:r})=>r===e);if(t)return this.translateLabel?this.translateLabel(t.id,t.label?.en||"",""):t.label?.en||""}getAsset(e){return this.assets.find(t=>t.id===e)}setAssetActive(e){this.activeAssetIds.add(e)}getActiveAssetIds(){return Array.from(this.activeAssetIds)}setAssetsActive(e){e.forEach(t=>this.activeAssetIds.add(t))}setAssetInactive(e){this.activeAssetIds.delete(e)}clearActiveAssets(){this.activeAssetIds.clear()}isAssetActive(e){return this.activeAssetIds.has(e)}addAsset(e){let t=this.assets.findIndex(r=>r.id===e.id);t>=0?this.assets[t]=e:this.assets.push(e)}removeAsset(e){let t=this.assets.findIndex(r=>r.id===e);t!==-1&&(this.assets.splice(t,1),this.activeAssetIds.delete(e))}async getGroups(){let e=new Set;return this.assets.forEach(t=>{t.groups&&t.groups.forEach(r=>e.add(r))}),Array.from(e)}getSupportedMimeTypes(){return["image/jpeg","image/png","image/svg+xml","image/webp","video/mp4","audio/mpeg"]}},gt=class{constructor(e,t,r){this.assetStoreName="assets",this.blobStoreName="blobs",this.db=null,this.id=e,this.engine=t,this.dbName=r?.dbName??`ly.img.assetSource/${e}`,this.dbVersion=r?.dbVersion??1}async initialize(){if(!this.db)return new Promise((e,t)=>{let r=indexedDB.open(this.dbName,this.dbVersion);r.onerror=n=>{t(new Error(`Failed to open IndexedDB: ${n.target.error}`))},r.onupgradeneeded=n=>{let i=n.target.result;i.objectStoreNames.contains(this.assetStoreName)||i.createObjectStore(this.assetStoreName,{keyPath:"id"}),i.objectStoreNames.contains(this.blobStoreName)||i.createObjectStore(this.blobStoreName,{keyPath:"id"})},r.onsuccess=n=>{this.db=n.target.result,e()}})}close(){this.db&&(this.db.close(),this.db=null)}async findAssets(e){if(await this.initialize(),!this.db)throw new Error("Database not initialized");try{let t=(await this.getAllAssets("asc")).reduce((d,l)=>{let u=e.locale??"en",c="",p=[];l.label!=null&&typeof l.label=="object"&&l.label[u]&&(c=l.label[u]),l.tags!=null&&typeof l.tags=="object"&&l.tags[u]&&(p=l.tags[u]);let g={...l,label:c,tags:p};return this.filterAsset(g,e)&&d.push(g),d},[]);t=await this.restoreBlobUrls(t),t=this.sortAssets(t,e);let{page:r,perPage:n}=e,i=r*n,o=i+n,a=t.slice(i,o),s=o<t.length?r+1:void 0;return{assets:a,currentPage:r,nextPage:s,total:t.length}}catch(t){console.error("Error finding assets:",t);return}}async getGroups(){if(await this.initialize(),!this.db)throw new Error("Database not initialized");return new Promise((e,t)=>{let r=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).getAll();r.onsuccess=()=>{let n=new Set;r.result.forEach(o=>{o.groups&&Array.isArray(o.groups)&&o.groups.forEach(a=>n.add(a))});let i=[...n];e(i)},r.onerror=()=>{t(new Error(`Failed to get groups: ${r.error}`))}})}addAsset(e){this.initialize().then(async()=>{if(!this.db)throw new Error("Database not initialized");let t=this.db.transaction(this.assetStoreName,"readwrite"),r=t.objectStore(this.assetStoreName),n=new Set;H(e,o=>{n.add(o)}),setTimeout(()=>{this.storeBlobUrls([...n])});let i={...e,meta:{...e.meta,insertedAt:e.meta?.insertedAt||Date.now()}};r.put(i),t.onerror=()=>{console.error(`Failed to add asset: ${t.error}`)}}).catch(t=>{console.error("Error initializing database:",t)})}async removeAsset(e){let t=await this.getAsset(e);return this.initialize().then(()=>{if(!this.db)throw new Error("Database not initialized");let r=this.db.transaction(this.assetStoreName,"readwrite");r.objectStore(this.assetStoreName).delete(e),r.oncomplete=()=>{H(t,n=>{this.removeBlob(n)}),this.engine.asset.assetSourceContentsChanged(this.id)},r.onerror=()=>{console.error(`Failed to remove asset: ${r.error}`)}}).catch(r=>{console.error("Error initializing database:",r)})}async removeBlob(e){return this.initialize().then(()=>{if(!this.db)throw new Error("Database not initialized");let t=this.db.transaction(this.blobStoreName,"readwrite");t.objectStore(this.blobStoreName).delete(e),t.onerror=()=>{console.error(`Failed to remove blob: ${t.error}`)}}).catch(t=>{console.error("Error initializing database:",t)})}async getAllAssets(e="desc"){return new Promise((t,r)=>{let n=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).getAll();n.onsuccess=()=>{let i=n.result;i.sort((o,a)=>{let s=o.meta?.insertedAt||o._insertedAt||Date.now(),d=a.meta?.insertedAt||a._insertedAt||Date.now();return e==="asc"?s-d:d-s}),t(i)},n.onerror=()=>{r(new Error(`Failed to get assets: ${n.error}`))}})}async getAsset(e){return new Promise((t,r)=>{let n=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).get(e);n.onsuccess=()=>{t(n.result)},n.onerror=()=>{r(new Error(`Failed to get blob: ${n.error}`))}})}async getBlob(e){return new Promise((t,r)=>{let n=this.db.transaction(this.blobStoreName,"readonly").objectStore(this.blobStoreName).get(e);n.onsuccess=()=>{t(n.result)},n.onerror=()=>{r(new Error(`Failed to get blob: ${n.error}`))}})}async createBlobUrlFromStore(e){let t=await this.getBlob(e);return t!=null?URL.createObjectURL(t.blob):e}async storeBlobUrls(e){let t={};return await Promise.all(e.map(async r=>{let n=await(await fetch(r)).blob();t[r]=n})),this.initialize().then(async()=>{if(!this.db)throw new Error("Database not initialized");let r=this.db.transaction(this.blobStoreName,"readwrite"),n=r.objectStore(this.blobStoreName);Object.entries(t).forEach(([i,o])=>{let a={id:i,blob:o};n.put(a)}),r.onerror=()=>{console.error(`Failed to add blobs: ${r.error}`)}}).catch(r=>{console.error("Error initializing database:",r)})}async restoreBlobUrls(e){let t={},r=new Set;return H(e,n=>{r.add(n)}),await Promise.all([...r].map(async n=>{let i=await this.createBlobUrlFromStore(n);t[n]=i})),H(e,n=>t[n]??n)}filterAsset(e,t){let{query:r,tags:n,groups:i,excludeGroups:o}=t;if(r&&r.trim()!==""){let a=r.trim().toLowerCase().split(" "),s=e.label?.toLowerCase()??"",d=e.tags?.map(l=>l.toLowerCase())??[];if(!a.every(l=>s.includes(l)||d.some(u=>u.includes(l))))return!1}if(n){let a=Array.isArray(n)?n:[n];if(a.length>0&&(!e.tags||!a.every(s=>e.tags?.includes(s))))return!1}return!(i&&i.length>0&&(!e.groups||!i.some(a=>e.groups?.includes(a)))||o&&o.length>0&&e.groups&&e.groups.some(a=>o.includes(a)))}sortAssets(e,t){let{sortingOrder:r,sortKey:n,sortActiveFirst:i}=t,o=[...e];return!r||r==="None"||(n?o.sort((a,s)=>{let d,l;return n==="id"?(d=a.id,l=s.id):(d=a.meta?.[n]??null,l=s.meta?.[n]??null),d==null?r==="Ascending"?-1:1:l==null?r==="Ascending"?1:-1:typeof d=="string"&&typeof l=="string"?r==="Ascending"?d.localeCompare(l):l.localeCompare(d):r==="Ascending"?d<l?-1:d>l?1:0:d>l?-1:d<l?1:0}):r==="Descending"&&o.reverse(),i&&o.sort((a,s)=>a.active&&!s.active?-1:!a.active&&s.active?1:0)),o}};function H(e,t,r=""){if(e===null||typeof e!="object")return e;if(Array.isArray(e)){for(let n=0;n<e.length;n++){let i=r?`${r}[${n}]`:`[${n}]`;if(typeof e[n]=="string"&&e[n].startsWith("blob:")){let o=t(e[n],i);typeof o=="string"&&(e[n]=o)}else e[n]=H(e[n],t,i)}return e}for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=r?`${r}.${n}`:n;if(typeof i=="string"&&i.startsWith("blob:")){let a=t(i,o);typeof a=="string"&&(e[n]=a)}else e[n]=H(i,t,o)}return e}var ft=class{constructor(e,t,r){this.id=e,this.cesdk=t,this.assetSourceIds=r}async findAssets(e){try{let t=this.assetSourceIds.map(u=>this.cesdk.engine.asset.findAssets(u,{...e,perPage:9999,page:0})),r=await Promise.all(t),n=[];r.forEach(u=>{u?.assets&&(n=n.concat(u.assets))}),n.sort((u,c)=>{let p=u.meta?.insertedAt||0;return(c.meta?.insertedAt||0)-p});let{page:i,perPage:o}=e,a=i*o,s=a+o,d=n.slice(a,s),l=s<n.length?i+1:void 0;return{assets:d,currentPage:i,nextPage:l,total:n.length}}catch(t){console.error("Error finding assets:",t);return}}async getGroups(){let e=this.assetSourceIds.map(n=>this.cesdk.engine.asset.getGroups(n)),t=await Promise.all(e),r=new Set;return t.forEach(n=>{n.forEach(i=>r.add(i))}),Array.from(r)}addAsset(e){throw new Error("AggregatedAssetSource does not support adding assets")}removeAsset(e){throw new Error("AggregatedAssetSource does not support removing assets")}},sr=class{constructor(e,t){this.engine=e,this.key=t}hasData(e){return this.engine.block.isValid(e)&&this.engine.block.hasMetadata(e,this.key)}get(e){if(this.hasData(e))return JSON.parse(this.engine.block.getMetadata(e,this.key))}set(e,t){this.engine.block.setMetadata(e,this.key,JSON.stringify(t))}clear(e){this.engine.block.hasMetadata(e,this.key)&&this.engine.block.removeMetadata(e,this.key)}},ge=sr,lr=typeof global=="object"&&global&&global.Object===Object&&global,mt=lr,ur=typeof self=="object"&&self&&self.Object===Object&&self,dr=mt||ur||Function("return this")(),K=dr,cr=K.Symbol,Q=cr,yt=Object.prototype,pr=yt.hasOwnProperty,gr=yt.toString,ee=Q?Q.toStringTag:void 0;function fr(e){var t=pr.call(e,ee),r=e[ee];try{e[ee]=void 0;var n=!0}catch{}var i=gr.call(e);return n&&(t?e[ee]=r:delete e[ee]),i}var mr=fr,yr=Object.prototype,br=yr.toString;function hr(e){return br.call(e)}var Ir=hr,vr="[object Null]",kr="[object Undefined]",Je=Q?Q.toStringTag:void 0;function Or(e){return e==null?e===void 0?kr:vr:Je&&Je in Object(e)?mr(e):Ir(e)}var ie=Or;function wr(e){return e!=null&&typeof e=="object"}var Re=wr,Ga=Array.isArray;function Cr(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var bt=Cr,Sr="[object AsyncFunction]",xr="[object Function]",Ar="[object GeneratorFunction]",Er="[object Proxy]";function Pr(e){if(!bt(e))return!1;var t=ie(e);return t==xr||t==Ar||t==Sr||t==Er}var Rr=Pr,Mr=K["__core-js_shared__"],we=Mr,Xe=function(){var e=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Dr(e){return!!Xe&&Xe in e}var Tr=Dr,Kr=Function.prototype,Lr=Kr.toString;function Fr(e){if(e!=null){try{return Lr.call(e)}catch{}try{return e+""}catch{}}return""}var V=Fr,$r=/[\\^$.*+?()[\]{}|]/g,Nr=/^\[object .+?Constructor\]$/,jr=Function.prototype,Br=Object.prototype,Vr=jr.toString,Gr=Br.hasOwnProperty,_r=RegExp("^"+Vr.call(Gr).replace($r,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function zr(e){if(!bt(e)||Tr(e))return!1;var t=Rr(e)?_r:Nr;return t.test(V(e))}var Ur=zr;function Hr(e,t){return e?.[t]}var Qr=Hr;function qr(e,t){var r=Qr(e,t);return Ur(r)?r:void 0}var q=qr,Yr=q(K,"WeakMap"),Se=Yr;function Zr(e,t){return e===t||e!==e&&t!==t}var Wr=Zr,Jr=9007199254740991;function Xr(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Jr}var en=Xr;var _a=Object.prototype;var tn="[object Arguments]";function rn(e){return Re(e)&&ie(e)==tn}var et=rn,ht=Object.prototype,nn=ht.hasOwnProperty,on=ht.propertyIsEnumerable,za=et(function(){return arguments}())?et:function(e){return Re(e)&&nn.call(e,"callee")&&!on.call(e,"callee")};var It=typeof exports=="object"&&exports&&!exports.nodeType&&exports,tt=It&&typeof module=="object"&&module&&!module.nodeType&&module,an=tt&&tt.exports===It,rt=an?K.Buffer:void 0,Ua=rt?rt.isBuffer:void 0;var sn="[object Arguments]",ln="[object Array]",un="[object Boolean]",dn="[object Date]",cn="[object Error]",pn="[object Function]",gn="[object Map]",fn="[object Number]",mn="[object Object]",yn="[object RegExp]",bn="[object Set]",hn="[object String]",In="[object WeakMap]",vn="[object ArrayBuffer]",kn="[object DataView]",On="[object Float32Array]",wn="[object Float64Array]",Cn="[object Int8Array]",Sn="[object Int16Array]",xn="[object Int32Array]",An="[object Uint8Array]",En="[object Uint8ClampedArray]",Pn="[object Uint16Array]",Rn="[object Uint32Array]",P={};P[On]=P[wn]=P[Cn]=P[Sn]=P[xn]=P[An]=P[En]=P[Pn]=P[Rn]=!0;P[sn]=P[ln]=P[vn]=P[un]=P[kn]=P[dn]=P[cn]=P[pn]=P[gn]=P[fn]=P[mn]=P[yn]=P[bn]=P[hn]=P[In]=!1;function Mn(e){return Re(e)&&en(e.length)&&!!P[ie(e)]}var Dn=Mn;function Tn(e){return function(t){return e(t)}}var Kn=Tn,vt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,te=vt&&typeof module=="object"&&module&&!module.nodeType&&module,Ln=te&&te.exports===vt,Ce=Ln&&mt.process,Fn=function(){try{var e=te&&te.require&&te.require("util").types;return e||Ce&&Ce.binding&&Ce.binding("util")}catch{}}(),nt=Fn,it=nt&&nt.isTypedArray,Ha=it?Kn(it):Dn;var $n=Object.prototype,Qa=$n.hasOwnProperty;function Nn(e,t){return function(r){return e(t(r))}}var jn=Nn,qa=jn(Object.keys,Object);var Bn=Object.prototype,Ya=Bn.hasOwnProperty;var Vn=q(Object,"create"),re=Vn;function Gn(){this.__data__=re?re(null):{},this.size=0}var _n=Gn;function zn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Un=zn,Hn="__lodash_hash_undefined__",Qn=Object.prototype,qn=Qn.hasOwnProperty;function Yn(e){var t=this.__data__;if(re){var r=t[e];return r===Hn?void 0:r}return qn.call(t,e)?t[e]:void 0}var Zn=Yn,Wn=Object.prototype,Jn=Wn.hasOwnProperty;function Xn(e){var t=this.__data__;return re?t[e]!==void 0:Jn.call(t,e)}var ei=Xn,ti="__lodash_hash_undefined__";function ri(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=re&&t===void 0?ti:t,this}var ni=ri;function Y(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Y.prototype.clear=_n;Y.prototype.delete=Un;Y.prototype.get=Zn;Y.prototype.has=ei;Y.prototype.set=ni;var ot=Y;function ii(){this.__data__=[],this.size=0}var oi=ii;function ai(e,t){for(var r=e.length;r--;)if(Wr(e[r][0],t))return r;return-1}var fe=ai,si=Array.prototype,li=si.splice;function ui(e){var t=this.__data__,r=fe(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():li.call(t,r,1),--this.size,!0}var di=ui;function ci(e){var t=this.__data__,r=fe(t,e);return r<0?void 0:t[r][1]}var pi=ci;function gi(e){return fe(this.__data__,e)>-1}var fi=gi;function mi(e,t){var r=this.__data__,n=fe(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var yi=mi;function Z(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Z.prototype.clear=oi;Z.prototype.delete=di;Z.prototype.get=pi;Z.prototype.has=fi;Z.prototype.set=yi;var me=Z,bi=q(K,"Map"),ne=bi;function hi(){this.size=0,this.__data__={hash:new ot,map:new(ne||me),string:new ot}}var Ii=hi;function vi(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var ki=vi;function Oi(e,t){var r=e.__data__;return ki(t)?r[typeof t=="string"?"string":"hash"]:r.map}var ye=Oi;function wi(e){var t=ye(this,e).delete(e);return this.size-=t?1:0,t}var Ci=wi;function Si(e){return ye(this,e).get(e)}var xi=Si;function Ai(e){return ye(this,e).has(e)}var Ei=Ai;function Pi(e,t){var r=ye(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var Ri=Pi;function W(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}W.prototype.clear=Ii;W.prototype.delete=Ci;W.prototype.get=xi;W.prototype.has=Ei;W.prototype.set=Ri;var kt=W;function Mi(){this.__data__=new me,this.size=0}var Di=Mi;function Ti(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var Ki=Ti;function Li(e){return this.__data__.get(e)}var Fi=Li;function $i(e){return this.__data__.has(e)}var Ni=$i,ji=200;function Bi(e,t){var r=this.__data__;if(r instanceof me){var n=r.__data__;if(!ne||n.length<ji-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new kt(n)}return r.set(e,t),this.size=r.size,this}var Vi=Bi;function oe(e){var t=this.__data__=new me(e);this.size=t.size}oe.prototype.clear=Di;oe.prototype.delete=Ki;oe.prototype.get=Fi;oe.prototype.has=Ni;oe.prototype.set=Vi;var Gi=Object.prototype,Za=Gi.propertyIsEnumerable;var _i=q(K,"DataView"),xe=_i,zi=q(K,"Promise"),Ae=zi,Ui=q(K,"Set"),Ee=Ui,at="[object Map]",Hi="[object Object]",st="[object Promise]",lt="[object Set]",ut="[object WeakMap]",dt="[object DataView]",Qi=V(xe),qi=V(ne),Yi=V(Ae),Zi=V(Ee),Wi=V(Se),U=ie;(xe&&U(new xe(new ArrayBuffer(1)))!=dt||ne&&U(new ne)!=at||Ae&&U(Ae.resolve())!=st||Ee&&U(new Ee)!=lt||Se&&U(new Se)!=ut)&&(U=function(e){var t=ie(e),r=t==Hi?e.constructor:void 0,n=r?V(r):"";if(n)switch(n){case Qi:return dt;case qi:return at;case Yi:return st;case Zi:return lt;case Wi:return ut}return t});var Wa=K.Uint8Array;var Ji="__lodash_hash_undefined__";function Xi(e){return this.__data__.set(e,Ji),this}var eo=Xi;function to(e){return this.__data__.has(e)}var ro=to;function Pe(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new kt;++t<r;)this.add(e[t])}Pe.prototype.add=Pe.prototype.push=eo;Pe.prototype.has=ro;var ct=Q?Q.prototype:void 0,Ja=ct?ct.valueOf:void 0;var no=Object.prototype,Xa=no.hasOwnProperty;var io=Object.prototype,es=io.hasOwnProperty;var ts=new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,"i"),rs=new RegExp(/[A-Fa-f0-9]{1}/,"g"),ns=new RegExp(/[A-Fa-f0-9]{2}/,"g");function Ot(e){return{"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg"}[e]??"png"}async function wt(e,t){if(e.startsWith("buffer:")){let r=await t.editor.getMimeType(e),n=t.editor.getBufferLength(e),i=t.editor.getBufferData(e,0,n),o=new Uint8Array(i),a=new Blob([o],{type:r});return URL.createObjectURL(a)}else return e}async function ae(e,t){let r=await wt(e,t);return new Promise((n,i)=>{let o=new Image;o.onload=()=>{n({width:o.width,height:o.height})},o.onerror=i,o.src=r})}async function Ct(e,t,r){let n,i=t.block.getFill(e),o=t.block.getSourceSet(i,"fill/image/sourceSet"),[a]=o;if(a==null){if(n=t.block.getString(i,"fill/image/imageFileURI"),n==null)throw new Error("No image source/uri found")}else n=a.uri;if(r?.throwErrorIfSvg&&await t.editor.getMimeType(n)==="image/svg+xml")throw new Error("SVG images are not supported");return wt(n,t)}function oo(e){return e!==void 0}var L=oo;function Me(e){return e?.version?e.version.localeCompare("1.59.0",void 0,{numeric:!0,sensitivity:"base"})>=0&&typeof e.i18n?.translate=="function":!1}function De(e){return typeof e?.translate=="function"}function Te(e,t,r){return e&&Me(e)&&De(e.i18n)?e.i18n.translate(t):r}function ao(e,t){let{cesdk:r}=t;if(r==null)return{};let n=t.propertyKey??"style",i=lo(e);r.i18n.setTranslations({en:{[`panel.${i}`]:"Select Style",[`${e}.${n}`]:"Style","ly.img.ai.styleTransfer.none":"None","ly.img.ai.styleTransfer.anime":"Anime","ly.img.ai.styleTransfer.cyberpunk":"Cyberpunk","ly.img.ai.styleTransfer.kodak400":"Kodak 400","ly.img.ai.styleTransfer.watercolor":"Watercolor","ly.img.ai.styleTransfer.darkFantasy":"Dark Fantasy","ly.img.ai.styleTransfer.vaporwave":"Vaporwave","ly.img.ai.styleTransfer.vectorFlat":"Vector Flat","ly.img.ai.styleTransfer.3dAnimation":"3D Animation","ly.img.ai.styleTransfer.ukiyoe":"Ukiyo\u2011e","ly.img.ai.styleTransfer.surreal":"Surreal","ly.img.ai.styleTransfer.steampunk":"Steampunk","ly.img.ai.styleTransfer.nightBokeh":"Night Bokeh","ly.img.ai.styleTransfer.popArt":"Pop Art"}});let o=co({baseURL:t.baseURL??"https://cdn.img.ly/assets/plugins/plugin-ai-image-generation-web/v1/gpt-image-1/",includeNone:!0,cesdk:r}),a=o;t.styles!=null&&(Array.isArray(t.styles)?a=t.styles:typeof t.styles=="function"&&(a=t.styles(o)));let s=po({cesdk:r,providerId:e,styles:a}),d=s.id;return go(s,{cesdk:r}),so({providerId:e,cesdk:r,panelId:i,entryId:d}),{[t.propertyKeyForPrompt??"prompt"]:(u,c)=>{let p=u.state("prompt","");return u.builder.TextArea(`${c.id}`,{inputLabel:t.i18n?.prompt?.inputLabel??t.propertyKeyForPrompt??"prompt",placeholder:t.i18n?.prompt?.placeholder,...p}),()=>{let[g]=s.getActiveAssetIds(),b=s.getAsset(g);return{id:c.id,type:"string",value:b?.meta?.prompt==null?p.value:`${p.value}; ${b.meta.prompt}`}}},[n]:(u,c)=>{let{builder:p,state:g}=u;if(a.length>0){let b=g("style",a[0]);return p.Button(`${c.id}`,{inputLabel:`${e}.${c.id}`,icon:"@imgly/Appearance",isDisabled:a.length===0,trailingIcon:"@imgly/ChevronRight",label:b.value.label,labelAlignment:"left",onClick:()=>{let v={onSelect:async m=>{s.clearActiveAssets(),s.setAssetActive(m.id),b.setValue({id:m.id,label:m.label??m.id}),r.ui.closePanel(i)}};r.ui.openPanel(i,{payload:v})}}),()=>({id:c.id,type:"string",value:b.value.id})}return()=>({id:c.id,type:"string",value:"none"})}}}function so(e){let{providerId:t,cesdk:r,panelId:n,entryId:i}=e;r?.ui.registerPanel(n,({builder:o,payload:a})=>{a?.onSelect==null&&o.Section(`${t}.error`,{children:()=>{o.Text("error",{content:"No onSelect function provided for the style selection panel."})}}),o.Library(`${t}.library.image`,{entries:[i],onSelect:async s=>{a?.onSelect?.(s)}})})}function lo(e){return`ly.img.ai.${e}.styleSelection`}var uo=[{id:"none",labelKey:"ly.img.ai.styleTransfer.none",prompt:""},{id:"anime-celshaded",labelKey:"ly.img.ai.styleTransfer.anime",prompt:"anime cel\u2011shaded, bright pastel palette, expressive eyes, clean line art "},{id:"cyberpunk-neon",labelKey:"ly.img.ai.styleTransfer.cyberpunk",prompt:"cyberpunk cityscape, glowing neon signage, reflective puddles, dark atmosphere"},{id:"kodak-portra-400",labelKey:"ly.img.ai.styleTransfer.kodak400",prompt:"shot on Kodak Portra 400, soft grain, golden\u2011hour warmth, 35 mm photo"},{id:"watercolor-storybook",labelKey:"ly.img.ai.styleTransfer.watercolor",prompt:"loose watercolor washes, gentle gradients, dreamy storybook feel"},{id:"dark-fantasy-realism",labelKey:"ly.img.ai.styleTransfer.darkFantasy",prompt:"dark fantasy realm, moody chiaroscuro lighting, hyper\u2011real textures"},{id:"vaporwave-retrofuturism",labelKey:"ly.img.ai.styleTransfer.vaporwave",prompt:"retro\u2011futuristic vaporwave, pastel sunset gradient, chrome text, VHS scanlines"},{id:"minimal-vector-flat",labelKey:"ly.img.ai.styleTransfer.vectorFlat",prompt:"minimalist flat vector illustration, bold geometry, two\u2011tone palette"},{id:"pixarstyle-3d-render",labelKey:"ly.img.ai.styleTransfer.3dAnimation",prompt:"Pixar\u2011style 3D render, oversized eyes, subtle subsurface scattering, cinematic lighting"},{id:"ukiyoe-woodblock",labelKey:"ly.img.ai.styleTransfer.ukiyoe",prompt:"ukiyo\u2011e woodblock print, Edo\u2011period style, visible washi texture, limited color ink"},{id:"surreal-dreamscape",labelKey:"ly.img.ai.styleTransfer.surreal",prompt:"surreal dreamscape, floating objects, impossible architecture, vivid clouds"},{id:"steampunk-victorian",labelKey:"ly.img.ai.styleTransfer.steampunk",prompt:"Victorian steampunk world, ornate brass gears, leather attire, atmospheric fog"},{id:"nightstreet-photo-bokeh",labelKey:"ly.img.ai.styleTransfer.nightBokeh",prompt:"night\u2011time street shot, large aperture bokeh lights, candid urban mood"},{id:"comicbook-pop-art",labelKey:"ly.img.ai.styleTransfer.popArt",prompt:"classic comic\u2011book panel, halftone shading, exaggerated action lines, CMYK pop colors"}];function co(e){return uo.map(t=>t.id==="none"?e.includeNone?{id:t.id,label:Te(e.cesdk,t.labelKey,t.labelKey),prompt:t.prompt,thumbUri:`${e.baseURL}/thumbnails/None.svg`}:void 0:{id:t.id,label:Te(e.cesdk,t.labelKey,t.labelKey),prompt:t.prompt,thumbUri:`${e.baseURL}/thumbnails/${t.id}.jpeg`}).filter(L)}var po=e=>{let t=e.styles.map(a=>({...a,meta:{prompt:a.prompt}})),r=e.cesdk.engine.asset.findAllSources(),n=`${e.providerId}/styles`;for(;r.includes(n);)n+=`-${Math.random().toString(36).substring(2,5)}`;let i=new pt(n,t),o=e.styles[0];return i.setAssetActive(o.id),i},go=(e,t)=>{t.cesdk.engine.asset.addSource(e),t.cesdk.ui.addAssetLibraryEntry({id:e.id,sourceIds:[e.id],gridItemHeight:"square",gridBackgroundType:"cover",cardLabel:({label:r})=>r,cardLabelPosition:()=>"below"})},St=ao;function $(e,t){let r=t?.i18n?.getLocale?.()||"en";return{engine:e,cesdk:t,locale:r}}var Ke=class{constructor(){this.cache=null}getContext(t,r){return this.cache||(this.cache=$(t,r)),this.cache}clear(){this.cache=null}};function N(e,t,r,n,i){if(t?.default!==void 0){let o=t.default;return typeof o!="function"?o:o(r)}return n!==void 0?n:i}function fo(e,t){let r={};for(let n of e){let i=N(n.id,n.config,t,n.schemaDefault,n.fallback);i!==void 0&&(r[n.id]=i)}return r}function mo(e,t,r){let n=`ly.img.${e}`,i=r.ui.getAssetLibraryEntry(n);if(i!=null)return r.ui.updateAssetLibraryEntry(n,{sourceIds:[...i.sourceIds,...t]}),i.id}var yo=mo;var G=class e{constructor(){this.actions=new Map;this.subscribers=new Map}static get(){let t="__imgly_action_registry__",r=typeof window<"u"?window:globalThis;return r[t]||(r[t]=new e),r[t]}register(t){return this.actions.set(t.id,t),this.notifySubscribers(t,"registered"),()=>{this.actions.get(t.id)===t&&(this.actions.delete(t.id),this.notifySubscribers(t,"unregistered"))}}getAll(){return Array.from(this.actions.values())}getBy(t){return this.getAll().filter(n=>this.matchesFilters(n,t))}subscribe(t){return this.subscribers.set(t,null),()=>{this.subscribers.delete(t)}}subscribeBy(t,r){return this.subscribers.set(r,t),()=>{this.subscribers.delete(r)}}notifySubscribers(t,r){this.subscribers.forEach((n,i)=>{if(n===null){i(t,r);return}this.matchesFilters(t,n)&&i(t,r)})}matchesFilters(t,r){return!(r.type&&t.type!==r.type||r.pluginId&&t.type==="plugin"&&t.pluginId!==r.pluginId||r.id&&t.id!==r.id||r.kind&&(t.type!=="quick"||t.kind!==r.kind))}};var _=class e{constructor(){this.providers=new Map}static get(){let t="__imgly_provider_registry__",r=typeof window<"u"?window:globalThis;return r[t]||(r[t]=new e),r[t]}register(t){return this.providers.has(t.provider.id)&&console.warn(`Provider with ID "${t.provider.id}" is already registered`),this.providers.set(t.provider.id,t),()=>{this.providers.get(t.provider.id)===t&&this.providers.delete(t.provider.id)}}getAll(){return Array.from(this.providers.values())}getById(t){return this.providers.get(t)}getByKind(t){return this.getAll().filter(({provider:r})=>r.kind===t)}};function Le(e){let t=e.filter(r=>!!r);return r=>async(n,i)=>{let o=[],a=c=>{o.push(c)},s=async(c,p,g)=>{if(c>=t.length)return r(p,g);let b=t[c],v=async(f,y)=>s(c+1,f,y),m={...g,addDisposer:a};return b(p,m,v)},d={...i,addDisposer:a};return{result:await s(0,n,d),dispose:async()=>{for(let c=o.length-1;c>=0;c--)try{await o[c]()}catch(p){console.error("Error in disposer:",p)}o.length=0}}}}function bo({enable:e=!0}){return async(r,n,i)=>{if(!e)return i(r,n);console.group("[GENERATION]"),console.log("Generating with input:",JSON.stringify(r,null,2));let o,a=Date.now();try{return o=await i(r,n),o}finally{o!=null&&(console.log(`Generation took ${Date.now()-a}ms`),console.log("Generation result:",JSON.stringify(o,null,2))),console.groupEnd()}}}var Fe=bo;var ho="ly.img.ai",$e="ly.img.ai.temp";async function xt(e,t){return e.engine.asset.findAllSources().includes($e)||e.engine.asset.addLocalSource($e),e.engine.asset.apply($e,t)}function Io(e){return`${ho}.${e}`}function At(e,t="We encountered an unknown error while generating the asset. Please try again."){if(e===null)return t;if(e instanceof Error)return e.message;if(typeof e=="object"){let r=e;return"message"in r&&typeof r.message=="string"?r.message:"cause"in r&&typeof r.cause=="string"?r.cause:"detail"in r&&typeof r.detail=="object"&&r.detail!==null&&"message"in r.detail&&typeof r.detail.message=="string"?r.detail.message:"error"in r&&typeof r.error=="object"&&r.error!==null&&"message"in r.error&&typeof r.error.message=="string"?r.error.message:t}return typeof e=="string"?e:String(e)||t}function Ne(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function vo(e){return new Promise((t,r)=>{try{let n=document.createElement("video");n.style.display="none",n.addEventListener("loadedmetadata",()=>{n.duration===1/0?(n.currentTime=1e101,setTimeout(()=>{n.currentTime=0,t(n.duration),document.body.removeChild(n)},50)):(t(n.duration),document.body.removeChild(n))}),n.addEventListener("error",()=>{document.body.removeChild(n),r(new Error(`Failed to load video from ${e}`))}),n.src=e,document.body.appendChild(n)}catch(n){r(n)}})}function je(e,t=0,r="image/jpeg",n=.8){return new Promise((i,o)=>{try{let a=document.createElement("video");a.crossOrigin="anonymous",a.style.display="none",a.addEventListener("loadedmetadata",()=>{a.currentTime=Math.min(t,a.duration),a.addEventListener("seeked",()=>{let s=document.createElement("canvas");s.width=a.videoWidth,s.height=a.videoHeight;let d=s.getContext("2d");if(!d){document.body.removeChild(a),o(new Error("Failed to create canvas context"));return}d.drawImage(a,0,0,s.width,s.height);try{let l=s.toDataURL(r,n);document.body.removeChild(a),i(l)}catch(l){document.body.removeChild(a),o(new Error(`Failed to create thumbnail: ${l instanceof Error?l.message:String(l)}`))}},{once:!0})}),a.addEventListener("error",()=>{document.body.removeChild(a),o(new Error(`Failed to load video from ${e}`))}),a.src=e,document.body.appendChild(a)}catch(a){o(a)}})}function ko(e){return e?e.replace(/[_-]/g," ").replace(/([A-Z])/g," $1").trim().split(" ").filter(t=>t.length>0).map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join(" "):""}function se(e){return typeof e=="object"&&e!==null&&"next"in e&&"return"in e&&"throw"in e&&typeof e.next=="function"&&typeof e.return=="function"&&typeof e.throw=="function"&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]=="function"}function J(e){return e instanceof Error&&e.name==="AbortError"}function Be(e,t,r){let n=`${t}.iconSetAdded`;e.ui.experimental.hasGlobalStateValue(n)||(e.ui.addIconSet(t,r),e.ui.experimental.setGlobalStateValue(n,!0))}function Oo(e){return`${e.replace(/\/+$/,"")}/`}function wo(e){return async(r,n,i)=>{let o=await i(r,n);return se(o)?o:await e(o)}}var Co=wo;function So(e,t){let r={...e};if(!t)return r;for(let[n,i]of Object.entries(t))i===!1||i===null||i===void 0?delete r[n]:i===!0?n in e||(r[n]=!0):r[n]=i;return r}var Ve=new Map,be=class{constructor(t,r,n){this.db=null;this.dbVersion=1;this.isInitializing=!1;this.initPromise=null;this.instanceId=t,this.dbName=r??"ly.img.ai.rateLimit",this.storeName=n??"rateLimits"}async initialize(){if(!this.db)return this.isInitializing?this.initPromise:(this.isInitializing=!0,this.initPromise=new Promise((t,r)=>{try{let n=indexedDB.open(this.dbName,this.dbVersion);n.onerror=i=>{this.isInitializing=!1,console.error("Failed to open IndexedDB for rate limiting:",i),r(new Error("Failed to open IndexedDB for rate limiting"))},n.onupgradeneeded=i=>{let o=i.target.result;o.objectStoreNames.contains(this.storeName)||o.createObjectStore(this.storeName,{keyPath:"id"})},n.onsuccess=i=>{this.db=i.target.result,this.isInitializing=!1,t()}}catch(n){this.isInitializing=!1,console.error("Error initializing IndexedDB:",n),r(n)}}),this.initPromise)}async getTracker(t){try{await this.initialize();let n=`${typeof this.instanceId=="symbol"?this.instanceId.description||"":this.instanceId}_${t}`;return await new Promise((i,o)=>{let d=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).get(n);d.onsuccess=()=>{d.result?i(d.result.data):i(null)},d.onerror=()=>{console.error(`Failed to get tracker for key ${n}:`,d.error),o(d.error)}})}catch(r){return console.error("Error getting tracker from IndexedDB:",r),Promise.reject(r)}}async saveTracker(t,r){try{await this.initialize();let i=`${typeof this.instanceId=="symbol"?this.instanceId.description||"":this.instanceId}_${t}`;return await new Promise((o,a)=>{let s=this.db.transaction(this.storeName,"readwrite");s.objectStore(this.storeName).put({id:i,data:r}),s.oncomplete=()=>{o()},s.onerror=()=>{console.error(`Failed to save tracker for key ${i}:`,s.error),a(s.error)}})}catch(n){return console.error("Error saving tracker to IndexedDB:",n),Promise.reject(n)}}static isAvailable(){return typeof indexedDB<"u"}close(){this.db&&(this.db.close(),this.db=null)}};function xo(e){let{maxRequests:t,timeWindowMs:r,keyFn:n=()=>"global",onRateLimitExceeded:i,dbName:o}=e,s=`rate-limit-middleware-${t}-${r}`,d=be.isAvailable(),l=d?new be(s,o):null;Ve.has(s)||Ve.set(s,{});let u=Ve.get(s);return async(p,g,b)=>{if(typeof e.disable=="function"?e.disable():e.disable)return b(p,g);let v=typeof n=="string"?n:n(p,g),m=Date.now(),f;if(d&&l)try{let y=await l.getTracker(v);y?f=y:f={timestamps:[],lastCleanup:m}}catch(y){console.error("IndexedDB access failed, using in-memory fallback:",y),u[v]||(u[v]={timestamps:[],lastCleanup:m}),f=u[v]}else u[v]||(u[v]={timestamps:[],lastCleanup:m}),f=u[v];if(m-f.lastCleanup>r&&(f.timestamps=f.timestamps.filter(y=>m-y<r),f.lastCleanup=m),f.timestamps.length>=t){let y=Math.min(...f.timestamps),h=Math.max(0,r-(m-y));if(i){let k={key:v,currentCount:f.timestamps.length,maxRequests:t,timeWindowMs:r,remainingTimeMs:h};if(!await i(p,g,k))throw new DOMException("Operation aborted: Rate limit exceeded","AbortError")}else throw new Error("Rate limit exceeded. Please try again later.")}if(f.timestamps.push(m),d&&l)try{await l.saveTracker(v,f)}catch(y){console.error("Failed to save tracker to IndexedDB:",y),u[v]=f}else u[v]=f;return b(p,g)}}var Ao=xo;function Eo(e,t,r){let n="ai-plugin-version",i="ai-plugin-version-warning-shown";try{let o=e.ui.experimental.getGlobalStateValue(n);o?o!==r&&(e.ui.experimental.getGlobalStateValue(i,!1)||(console.warn(`[IMG.LY AI Plugins] Version mismatch detected!
Plugin "${t}" is using version ${r}, but other AI plugins are using version ${o}.
This may cause compatibility issues. Please ensure all AI plugins (@imgly/plugin-ai-*) use the same version.
Consider updating all AI plugins to the same version for optimal compatibility.`),e.ui.experimental.setGlobalStateValue(i,!0))):e.ui.experimental.setGlobalStateValue(n,r)}catch(o){console.debug("[IMG.LY AI Plugins] Could not check plugin version consistency:",o)}}function Po(e){let{cesdk:t,panelId:r}=e;r.startsWith("ly.img.ai.")||console.warn(`Dock components for AI generation should open a panel with an id starting with "ly.img.ai." \u2013 "${r}" was provided.`);let n=`${r}.dock`;t.ui.registerComponent(n,({builder:i})=>{let o=t.ui.isPanelOpen(r);i.Button(`${r}.dock.button`,{label:`${r}.dock.label`,isSelected:o,icon:"@imgly/Sparkle",onClick:()=>{t.ui.findAllPanels().forEach(a=>{a.startsWith("ly.img.ai.")&&t.ui.closePanel(a),!o&&a==="//ly.img.panel/assetLibrary"&&t.ui.closePanel(a)}),o?t.ui.closePanel(r):t.ui.openPanel(r)}})})}var Ro=Po;function Mo(){return({engine:e})=>{let t=e.block.findAllSelected();if(t==null||t.length!==1)return!1;let[r]=t;if(!e.block.supportsFill(r)||e.block.getKind(r)==="sticker"||!["//ly.img.ubq/graphic","//ly.img.ubq/page"].includes(e.block.getType(r)))return!1;let n=e.block.getFill(r);return e.block.getType(n)==="//ly.img.ubq/fill/image"}}var Do=Mo;function To(e,t){let{cesdk:r,provider:n,getInput:i,middlewareOptions:o}=t;if(o?.defaultPrevented())return;console.error("Generation failed:",e),Ko(r,n.output.notification,()=>({input:i?.().input,error:e}))||r.ui.showNotification({type:"error",message:At(e)})}function Ko(e,t,r){let n=t?.error;if(n==null||!(typeof n.show=="function"?n.show(r()):n.show))return!1;let o=typeof n.message=="function"?n.message(r()):n.message??"common.ai-generation.failed",a=n.action!=null?{label:typeof n.action.label=="function"?n.action.label(r()):n.action.label,onClick:()=>{n?.action?.onClick(r())}}:void 0;return e.ui.showNotification({type:"error",message:o,action:a}),!0}var Ge=To;var Lo="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjMyMyIgdmlld0JveD0iMCAwIDMyMyAzMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjMiIGhlaWdodD0iMzIzIiBmaWxsPSIjRTlFQkVEIi8+CjxnIG9wYWNpdHk9IjAuMyI+CjxwYXRoIGQ9Ik0xMTYgMTg0VjE5MS41QzExNiAxOTkuNzg0IDEyMi43MTYgMjA2LjUgMTMxIDIwNi41SDE5MUMxOTkuMjg0IDIwNi41IDIwNiAxOTkuNzg0IDIwNiAxOTEuNVYxMzEuNUMyMDYgMTIzLjIxNiAxOTkuMjg0IDExNi41IDE5MSAxMTYuNUwxOTAuOTk1IDEyNi41QzE5My43NTcgMTI2LjUgMTk2IDEyOC43MzkgMTk2IDEzMS41VjE5MS41QzE5NiAxOTQuMjYxIDE5My43NjEgMTk2LjUgMTkxIDE5Ni41SDEzMUMxMjguMjM5IDE5Ni41IDEyNiAxOTQuMjYxIDEyNiAxOTEuNVYxODRIMTE2WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTY2LjQ5NCAxMDUuOTI0QzE2NS44NjkgMTA0LjM0MiAxNjMuNjI5IDEwNC4zNDIgMTYzLjAwNSAxMDUuOTI0TDE1OS43NDUgMTE0LjE5MUMxNTkuNTU0IDExNC42NzQgMTU5LjE3MiAxMTUuMDU3IDE1OC42ODggMTE1LjI0N0wxNTAuNDIyIDExOC41MDhDMTQ4LjgzOSAxMTkuMTMyIDE0OC44MzkgMTIxLjM3MiAxNTAuNDIyIDEyMS45OTZMMTU4LjY4OCAxMjUuMjU2QzE1OS4xNzIgMTI1LjQ0NyAxNTkuNTU0IDEyNS44MjkgMTU5Ljc0NSAxMjYuMzEzTDE2My4wMDUgMTM0LjU3OUMxNjMuNjI5IDEzNi4xNjIgMTY1Ljg2OSAxMzYuMTYyIDE2Ni40OTQgMTM0LjU3OUwxNjkuNzU0IDEyNi4zMTNDMTY5Ljk0NCAxMjUuODI5IDE3MC4zMjcgMTI1LjQ0NyAxNzAuODEgMTI1LjI1NkwxNzkuMDc3IDEyMS45OTZDMTgwLjY2IDEyMS4zNzIgMTgwLjY2IDExOS4xMzIgMTc5LjA3NyAxMTguNTA4TDE3MC44MSAxMTUuMjQ3QzE3MC4zMjcgMTE1LjA1NyAxNjkuOTQ0IDExNC42NzQgMTY5Ljc1NCAxMTQuMTkxTDE2Ni40OTQgMTA1LjkyNFoiIGZpbGw9IiM4RjhGOEYiLz4KPHBhdGggZD0iTTEzMy4wMDUgMTI4LjQyNEMxMzMuNjI5IDEyNi44NDIgMTM1Ljg2OSAxMjYuODQyIDEzNi40OTQgMTI4LjQyNEwxNDEuODc1IDE0Mi4wN0MxNDIuMDY2IDE0Mi41NTMgMTQyLjQ0OCAxNDIuOTM1IDE0Mi45MzIgMTQzLjEyNkwxNTYuNTc3IDE0OC41MDhDMTU4LjE2IDE0OS4xMzIgMTU4LjE2IDE1MS4zNzIgMTU2LjU3NyAxNTEuOTk2TDE0Mi45MzIgMTU3LjM3OEMxNDIuNDQ4IDE1Ny41NjggMTQyLjA2NiAxNTcuOTUxIDE0MS44NzUgMTU4LjQzNEwxMzYuNDk0IDE3Mi4wNzlDMTM1Ljg2OSAxNzMuNjYyIDEzMy42MjkgMTczLjY2MiAxMzMuMDA1IDE3Mi4wNzlMMTI3LjYyMyAxNTguNDM0QzEyNy40MzMgMTU3Ljk1MSAxMjcuMDUgMTU3LjU2OCAxMjYuNTY3IDE1Ny4zNzhMMTEyLjkyMiAxNTEuOTk2QzExMS4zMzkgMTUxLjM3MiAxMTEuMzM5IDE0OS4xMzIgMTEyLjkyMiAxNDguNTA4TDEyNi41NjcgMTQzLjEyNkMxMjcuMDUgMTQyLjkzNSAxMjcuNDMzIDE0Mi41NTMgMTI3LjYyMyAxNDIuMDdMMTMzLjAwNSAxMjguNDI0WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTk1Ljk5OSAxODQuMDA0VjE5MS41MDJDMTk1Ljk5OSAxOTQuMjYzIDE5My43NjEgMTk2LjUwMiAxOTAuOTk5IDE5Ni41MDJIMTQ3LjY2OEwxNzIuODc5IDE1OC42ODRDMTc0LjM2MyAxNTYuNDU4IDE3Ny42MzUgMTU2LjQ1OCAxNzkuMTIgMTU4LjY4NEwxOTUuOTk5IDE4NC4wMDRaIiBmaWxsPSIjOEY4RjhGIi8+CjwvZz4KPC9zdmc+Cg==",he=Lo;function Fo(e,t,r){switch(t){case"image":return $o(e,r[t]);case"video":return No(e,r[t]);case"sticker":return jo(e,r[t]);default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function $o(e,t){let r=t.width,n=t.height;return{id:e,meta:{previewUri:he,fillType:"//ly.img.ubq/fill/image",kind:"image",width:r,height:n}}}function No(e,t){let r=t.width,n=t.height;return{id:e,label:t.label,meta:{previewUri:he,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:r,height:n}}}function jo(e,t){let r=t.width,n=t.height;return{id:e,meta:{previewUri:he,fillType:"//ly.img.ubq/fill/image",kind:"sticker",width:r,height:n}}}var Et=Fo;async function Bo(e,t,r,n){switch(t){case"image":{if(n.kind!=="image")throw new Error(`Output kind does not match the expected type: ${n.kind} (expected: image)`);return Vo(e,r[t],n)}case"video":{if(n.kind!=="video")throw new Error(`Output kind does not match the expected type: ${n.kind} (expected: video)`);return Go(e,r[t],n)}case"audio":{if(n.kind!=="audio")throw new Error(`Output kind does not match the expected type: ${n.kind} (expected: audio)`);return _o(e,r[t],n)}case"sticker":{if(n.kind!=="sticker")throw new Error(`Output kind does not match the expected type: ${n.kind} (expected: sticker)`);return zo(e,r[t],n)}default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function Vo(e,t,r){let n=t.width,i=t.height;return{id:e,label:t.label,meta:{uri:r.url,thumbUri:r.url,fillType:"//ly.img.ubq/fill/image",kind:"image",width:n,height:i},payload:{sourceSet:[{uri:r.url,width:n,height:i}]}}}async function Go(e,t,r){let n=t.width,i=t.height,o=await je(r.url,0);return{id:e,label:t.label,meta:{uri:r.url,thumbUri:o,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:n,height:i}}}function _o(e,t,r){return{id:e,label:t.label,meta:{uri:r.url,thumbUri:r.thumbnailUrl,blockType:"//ly.img.ubq/audio",mimeType:"audio/x-m4a",duration:r.duration.toString()}}}function zo(e,t,r){let n=t.width,i=t.height;return{id:e,label:t.label,meta:{uri:r.url,thumbUri:r.url,fillType:"//ly.img.ubq/fill/image",kind:"sticker",width:n,height:i},payload:{sourceSet:[{uri:r.url,width:n,height:i}]}}}var _e=Bo;function Uo(e){switch(e.userFlow){case"placeholder":return Qo(e);case"generation-only":return Ho(e);default:throw new Error(`Unknown user flow: ${e.userFlow}. Expected 'placeholder' or 'generation-only'.`)}}function Ho(e){let{cesdk:t,abortSignal:r}=e;return async n=>{try{let i=e.kind,o=await e.getBlockInput(n);if(j(t,r))return{status:"aborted"};let a=await e.generate(n,{middlewares:[...e.middlewares??[]],debug:e.debug,dryRun:e.dryRun,abortSignal:r});if(j(t,r))return{status:"aborted"};if(a.status!=="success")return a;if(a.type==="async")throw new Error("Async generation is not supported in this context yet.");if(j(t,r))return{status:"aborted"};if(e.historyAssetSourceId!=null){let s=Ne(),d=await _e(s,i,o,a.output),l={...d,id:`${Date.now()}-${d.id}`,label:d.label!=null?{en:d.label}:{},tags:{}};t.engine.asset.addAssetToSource(e.historyAssetSourceId,l)}else e.debug&&console.log("No asset source ID found in history and generation only was requested. Doing nothing. If no middleware is adding functionality this could be a bug.");return a}catch(i){return{status:"error",message:i instanceof Error?i.message:String(i)}}}}function Qo(e){let{cesdk:t,abortSignal:r}=e,n;return async i=>{try{let o=e.kind,a=await e.getBlockInput(i);if(j(t,r))return{status:"aborted"};let s=Ne(),d=Et(s,o,a);if(n=await xt(t,d),j(t,r,n))return{status:"aborted"};if(n!=null&&e.kind==="video"){let c=t.engine.block.getPositionX(n),p=t.engine.block.getPositionY(n),g=t.engine.block.duplicate(n);t.engine.block.setPositionX(g,c),t.engine.block.setPositionY(g,p),t.engine.block.destroy(n),n=g}if(n==null)throw new Error("Could not create placeholder block");t.engine.block.setState(n,{type:"Pending",progress:0});let l=await e.generate(i,{blockIds:[n],middlewares:[...e.middlewares??[]],debug:e.debug,dryRun:e.dryRun,abortSignal:r});if(j(t,r,n))return{status:"aborted"};if(l.status!=="success")return l.middlewareOptions?.defaultPrevented()||n!=null&&t.engine.block.isValid(n)&&(l.status==="aborted"?t.engine.block.destroy(n):t.engine.block.setState(n,{type:"Error",error:"Unknown"})),l;if(l.type==="async")throw new Error("Async generation is not supported in this context yet.");if(!t.engine.block.isValid(n))return{status:"aborted",message:"Placeholder block was destroyed before generation completed."};let u=await _e(s,o,a,l.output);if(j(t,r,n))return{status:"aborted"};if(e.debug&&console.log("Updating placeholder in scene:",JSON.stringify(u,void 0,2)),await t.engine.asset.defaultApplyAssetToBlock(u,n),j(t,r,n))return{status:"aborted"};if(e.historyAssetSourceId!=null){let c={...u,id:`${Date.now()}-${u.id}`,label:u.label!=null?{en:u.label}:{},tags:{}};t.engine.asset.addAssetToSource(e.historyAssetSourceId,c)}return t.engine.block.isValid(n)&&t.engine.block.setState(n,{type:"Ready"}),l}catch(o){return n!=null&&t.engine.block.isValid(n)&&(J(o)?t.engine.block.destroy(n):t.engine.block.setState(n,{type:"Error",error:"Unknown"})),{status:"error",message:o instanceof Error?o.message:String(o)}}}}function j(e,t,r){return t.aborted?(r!=null&&e.engine.block.isValid(r)&&e.engine.block.destroy(r),!0):!1}var Pt=Uo;function X(e){return`${e}.generating`}function Rt(e){return`${e}.abort`}function qo(e,t,r,n,i,o,a){let{builder:s,experimental:d}=e,{cesdk:l,includeHistoryLibrary:u=!0}=o,{id:c,output:{abortable:p}}=t,g=d.global(Rt(c),()=>{}),b=d.global(X(c),!1),v,m=b.value&&p,f=()=>{m&&(g.value(),b.setValue(!1),g.setValue(()=>{}))},y;if(o.requiredInputs!=null&&o.requiredInputs.length>0){let k=n();y=o.requiredInputs.every(C=>!k.input[C])}let h=d.global(`${c}.confirmationDialogId`,void 0);s.Section(`${c}.generate.section`,{children:()=>{s.Button(`${c}.generate`,{label:["common.generate",`panel.${c}.generate`],isLoading:b.value,color:"accent",isDisabled:y,suffix:m?{icon:"@imgly/Cross",color:"danger",tooltip:[`panel.${c}.abort`,"common.cancel"],onClick:()=>{let k=l.ui.showDialog({type:"warning",content:"panel.ly.img.ai.generation.confirmCancel.content",cancel:{label:"common.close",onClick:({id:C})=>{l.ui.closeDialog(C),h.setValue(void 0)}},actions:{label:"panel.ly.img.ai.generation.confirmCancel.confirm",color:"danger",onClick:({id:C})=>{f(),l.ui.closeDialog(C),h.setValue(void 0)}}});h.setValue(k)}}:void 0,onClick:async()=>{v=new AbortController;let k=v.signal;await(async()=>{try{b.setValue(!0),g.setValue(()=>{a.debug&&console.log("Aborting generation"),v?.abort()});let I=await Pt({kind:t.kind,generate:r,historyAssetSourceId:o.historyAssetSourceId,userFlow:o.createPlaceholderBlock?"placeholder":"generation-only",getBlockInput:i,abortSignal:k,cesdk:l,debug:a.debug,dryRun:a.dryRun})(n().input);if(I.status==="aborted")return;if(I.status==="error"){Ge(I.message,{cesdk:l,provider:t,getInput:n,middlewareOptions:I.middlewareOptions});return}if(I.status==="success"&&I.type==="sync"&&!I.middlewareOptions?.defaultPrevented()){let S=t.output.notification;Yo(l,S,()=>({input:n().input,output:I.output}))}}catch(I){if(J(I))return;Ge(I,{cesdk:l,provider:t,getInput:n})}finally{v=void 0,b.setValue(!1),g.setValue(()=>{}),h.value!=null&&(l.ui.closeDialog(h.value),h.setValue(void 0))}})()}}),t.output.generationHintText!=null&&s.Text(`${c}.generation-hint`,{align:"center",content:t.output.generationHintText})}}),u&&o.historyAssetLibraryEntryId!=null&&s.Library(`${c}.history.library`,{entries:[o.historyAssetLibraryEntryId]})}function Yo(e,t,r){let n=t?.success;if(n==null||!(typeof n.show=="function"?n.show(r()):n.show))return!1;let o=typeof n.message=="function"?n.message(r()):n.message??"common.ai-generation.success",a=n.action!=null?{label:typeof n.action.label=="function"?n.action.label(r()):n.action.label,onClick:()=>{n?.action?.onClick(r())}}:void 0;return e.ui.showNotification({type:"success",message:o,action:a,duration:n.duration}),!0}var Ie=qo;async function Zo({options:e,provider:t,panelInput:r,config:n},i){if(r==null)return;let{cesdk:o}=e,{id:a}=t;n.debug&&console.log(`Provider: ${a} (custom)`);let s=r.render;return l=>{let{state:u}=l,c=u(X(a),{isGenerating:!1,abort:()=>{}}).value.isGenerating,{getInput:p,getBlockInput:g}=s(l,{cesdk:o,isGenerating:c});return Ie(l,t,i,p,g,{...e,includeHistoryLibrary:r.includeHistoryLibrary??!0,createPlaceholderBlock:r.userFlow==="placeholder"},n),p}}var Mt=Zo;function ze(e,t){if(!t.startsWith("#/"))throw new Error(`External references are not supported: ${t}`);let r=t.substring(2).split("/"),n=e;for(let i of r){if(n==null)throw new Error(`Invalid reference path: ${t}`);n=n[i]}if(n===void 0)throw new Error(`Reference not found: ${t}`);return n}function le(e,t,r=new Set){if(t==null||r.has(t))return t;if(r.add(t),t.$ref&&typeof t.$ref=="string"){let n=ze(e,t.$ref),o={..