@imgly/plugin-ai-generation-web 0.1.7 → 0.1.9
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 +15 -0
- package/README.md +94 -8
- package/dist/__tests__/getProperties.test.d.ts +1 -0
- package/dist/common/renderStyleTransferProperty.d.ts +47 -0
- package/dist/generation/openapi/types.d.ts +1 -1
- package/dist/generation/provider.d.ts +8 -0
- package/dist/generation/types.d.ts +23 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +4 -4
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
function Dt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i18n.setTranslations({en:{[`panel.${i}`]:"Select Image To Change"}}),Rt(e,r),{[n]:(a,s)=>{let{builder:l,experimental:{global:u},payload:d}=a,c=d?.url??t.defaultUrl,p=u(`${e}.${s.id}`,c);return l.MediaPreview(s.id,{preview:{type:"image",uri:p.value},action:{label:"Select Image",onClick:()=>{r?.ui.openPanel(i,{payload:{onSelect:g=>{g.meta?.uri!=null&&p.setValue(g.meta?.uri)}}})}}}),()=>({id:s.id,type:"string",value:p.value})}}}function Rt(e,t){t?.ui.registerPanel(fe(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:"SVG images are not supported. Please choose a different image."}):a.startsWith("image/")?(n?.onSelect(i),t?.ui.closePanel(fe(e))):t.ui.showNotification({type:"warning",message:`Only images are supported. Found '${a}'. Please choose a different image.`})}})})}function fe(e){return`ly.img.ai/${e}.imageSelection`}var je=Dt;function ye(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 Q(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=ye(e,t.$ref),o={...Q(e,n,r)};for(let a in t)Object.prototype.hasOwnProperty.call(t,a)&&a!=="$ref"&&(o[a]=Q(e,t[a],r));return o}if(Array.isArray(t))return t.map(n=>Q(e,n,r));if(typeof t=="object"){let n={};for(let i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=Q(e,t[i],r));return n}return t}function be(e){return Q(e,{...e})}function Be(e,t=!1){let r=s=>(t&&console.log(`OpenAPI Schema validation failed: ${s}`),!1);if(typeof e!="object"||e===null)return r(`Input is ${e===null?"null":typeof e}, not an object`);let n=e;if(!(typeof n.type=="string"||Array.isArray(n.enum)||typeof n.properties=="object"||typeof n.items=="object"||typeof n.allOf=="object"||typeof n.anyOf=="object"||typeof n.oneOf=="object"||typeof n.not=="object"))return r("Missing required schema-defining properties (type, enum, properties, items, allOf, anyOf, oneOf, not)");if(n.type!==void 0){let s=["string","number","integer","boolean","array","object","null"];if(typeof n.type=="string"){if(!s.includes(n.type))return r(`Invalid type: ${n.type}. Must be one of ${s.join(", ")}`)}else if(Array.isArray(n.type)){for(let l of n.type)if(typeof l!="string"||!s.includes(l))return r(`Array of types contains invalid value: ${l}. Must be one of ${s.join(", ")}`)}else return r(`Type must be a string or array of strings, got ${typeof n.type}`)}if(n.items!==void 0&&(typeof n.items!="object"||n.items===null))return r(`Items must be an object, got ${n.items===null?"null":typeof n.items}`);if(n.properties!==void 0&&(typeof n.properties!="object"||n.properties===null))return r(`Properties must be an object, got ${n.properties===null?"null":typeof n.properties}`);let o=["allOf","anyOf","oneOf"];for(let s of o)if(n[s]!==void 0){if(!Array.isArray(n[s]))return r(`${s} must be an array, got ${typeof n[s]}`);for(let l=0;l<n[s].length;l++){let u=n[s][l];if(typeof u!="object"||u===null)return r(`Item ${l} in ${s} must be an object, got ${u===null?"null":typeof u}`)}}if(n.not!==void 0&&(typeof n.not!="object"||n.not===null))return r(`'not' must be an object, got ${n.not===null?"null":typeof n.not}`);if(n.additionalProperties!==void 0&&typeof n.additionalProperties!="boolean"&&(typeof n.additionalProperties!="object"||n.additionalProperties===null))return r(`additionalProperties must be a boolean or an object, got ${n.additionalProperties===null?"null":typeof n.additionalProperties}`);if(n.format!==void 0&&typeof n.format!="string")return r(`format must be a string, got ${typeof n.format}`);let a=["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"];for(let s of a)if(n[s]!==void 0&&typeof n[s]!="number")return r(`${s} must be a number, got ${typeof n[s]}`);if(n.minLength!==void 0&&(typeof n.minLength!="number"||n.minLength<0))return r(`minLength must be a non-negative number, got ${typeof n.minLength=="number"?n.minLength:typeof n.minLength}`);if(n.maxLength!==void 0&&(typeof n.maxLength!="number"||n.maxLength<0))return r(`maxLength must be a non-negative number, got ${typeof n.maxLength=="number"?n.maxLength:typeof n.maxLength}`);if(n.pattern!==void 0&&typeof n.pattern!="string")return r(`pattern must be a string, got ${typeof n.pattern}`);if(n.minItems!==void 0&&(typeof n.minItems!="number"||n.minItems<0))return r(`minItems must be a non-negative number, got ${typeof n.minItems=="number"?n.minItems:typeof n.minItems}`);if(n.maxItems!==void 0&&(typeof n.maxItems!="number"||n.maxItems<0))return r(`maxItems must be a non-negative number, got ${typeof n.maxItems=="number"?n.maxItems:typeof n.maxItems}`);if(n.uniqueItems!==void 0&&typeof n.uniqueItems!="boolean")return r(`uniqueItems must be a boolean, got ${typeof n.uniqueItems}`);if(n.minProperties!==void 0&&(typeof n.minProperties!="number"||n.minProperties<0))return r(`minProperties must be a non-negative number, got ${typeof n.minProperties=="number"?n.minProperties:typeof n.minProperties}`);if(n.maxProperties!==void 0&&(typeof n.maxProperties!="number"||n.maxProperties<0))return r(`maxProperties must be a non-negative number, got ${typeof n.maxProperties=="number"?n.maxProperties:typeof n.maxProperties}`);if(n.required!==void 0){if(!Array.isArray(n.required))return r(`required must be an array, got ${typeof n.required}`);for(let s=0;s<n.required.length;s++){let l=n.required[s];if(typeof l!="string")return r(`Item ${s} in required array must be a string, got ${typeof l}`)}}return!0}function $t(e,t){if(e.properties==null)throw new Error("Input schema must have properties");let r=[],n=Lt(e,t);return n??(Object.entries(e.properties).forEach(i=>{let o=i[0],a=i[1];r.push({id:o,schema:a})}),r)}function Lt(e,t){if(t.orderExtensionKeyword==null)return;let r=[];if(typeof t.orderExtensionKeyword!="string"&&!Array.isArray(t.orderExtensionKeyword))throw new Error("orderExtensionKeyword must be a string or an array of strings");let n=typeof t.orderExtensionKeyword=="string"?[t.orderExtensionKeyword]:t.orderExtensionKeyword,i=n.find(a=>a in e);if(i==null)return;let o=e[i];if(o==null||Array.isArray(o)===!1)throw new Error(`Extension keyword ${i} must be an array of strings`);if([...new Set(o)].forEach(a=>{let s=e.properties?.[a];s!=null&&r.push({id:a,schema:s})}),r.length===0)throw new Error(`Could not find any properties with order extension keyword(s) ${n.join(", ")}`);return r}var te=$t;var Nt="ly.img.ai",he="ly.img.ai/temp";async function Fe(e,t){return e.engine.asset.findAllSources().includes(he)||e.engine.asset.addLocalSource(he),e.engine.asset.apply(he,t)}function _(e){return`${Nt}/${e}`}function Ve(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 Ge(){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 Tt(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 Ie(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 l=s.getContext("2d");if(!l){document.body.removeChild(a),o(new Error("Failed to create canvas context"));return}l.drawImage(a,0,0,s.width,s.height);try{let u=s.toDataURL(r,n);document.body.removeChild(a),i(u)}catch(u){document.body.removeChild(a),o(new Error(`Failed to create thumbnail: ${u instanceof Error?u.message:String(u)}`))}},{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 ne(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 D(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 E(e){return e instanceof Error&&e.name==="AbortError"}function Ke(e,t,r,n,i,o){let a=t.schema.type;if(n.renderCustomProperty!=null&&n.renderCustomProperty[t.id]!=null)return n.renderCustomProperty[t.id](e,t);switch(a){case"string":return t.schema.enum!=null?jt(e,t,r,n,i,o):_e(e,t,r,n,i,o);case"boolean":return Ue(e,t,r,n,i,o);case"number":case"integer":return ze(e,t,r,n,i,o);case"object":return Qe(e,t,r,n,i,o);case"array":break;case void 0:{if(t.schema.anyOf!=null&&Array.isArray(t.schema.anyOf))return Bt(e,t,r,n,i,o);break}default:console.error(`Unsupported property type: ${a}`)}}function Qe(e,t,r,n,i,o){let s=te(t.schema??{},n).reduce((l,u)=>{let d=Ke(e,u,r,n,i,o);return d!=null&&(l[u.id]=d()),l},{});return()=>({id:t.id,type:"object",value:s})}function _e(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,u=`${r.id}.${l}`,d=t.schema.title??u,c=s(u,t.schema.default??""),p=Ft(t.schema),g=p?.component!=null&&p?.component==="TextArea"?"TextArea":"TextInput";return a[g](u,{inputLabel:d,placeholder:i.i18n?.prompt,...c}),()=>({id:t.id,type:"string",value:c.value})}function jt(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,u=`${r.id}.${l}`,d=t.schema.title??u,c=t.schema.enum!=null&&"x-imgly-enum-labels"in t.schema.enum&&typeof t.schema.enum["x-imgly-enum-labels"]=="object"?t.schema.enum["x-imgly-enum-labels"]:"x-imgly-enum-labels"in t.schema&&typeof t.schema["x-imgly-enum-labels"]=="object"?t.schema["x-imgly-enum-labels"]:{},p="x-imgly-enum-icons"in t.schema&&typeof t.schema["x-imgly-enum-icons"]=="object"?t.schema["x-imgly-enum-icons"]:{},g=(t.schema.enum??[]).map(y=>({id:y,label:c[y]??ne(y),icon:p[y]})),h=t.schema.default!=null?g.find(y=>y.id===t.schema.default)??g[0]:g[0],k=s(u,h);return a.Select(u,{inputLabel:d,values:g,...k}),()=>({id:t.id,type:"string",value:k.value.id})}function Ue(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,u=`${r.id}.${l}`,d=t.schema.title??u,c=!!t.schema.default,p=s(u,c);return a.Checkbox(u,{inputLabel:d,...p}),()=>({id:t.id,type:"boolean",value:p.value})}function ze(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,u=`${r.id}.${l}`,d=t.schema.title??u,c=t.schema.minimum,p=t.schema.maximum,g=t.schema.default;g==null&&(c!=null?g=c:p!=null?g=p:g=0);let h=s(u,g);if(c!=null&&p!=null){let k=t.schema.type==="number"?.1:1;"x-imgly-step"in t.schema&&typeof t.schema["x-imgly-step"]=="number"&&(k=t.schema["x-imgly-step"]),a.Slider(u,{inputLabel:d,min:c,max:p,step:k,...h})}else a.NumberInput(u,{inputLabel:d,min:c,max:p,...h});return()=>({id:t.id,type:"integer",value:h.value})}function Bt(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,u=`${r.id}.${l}`,d=t.schema.title??u,c=t.schema.anyOf??[],p=[],g={},h={};c.forEach((m,f)=>{let b=m.title??"common.custom",I=`${r.id}.${l}.anyOf[${f}]`,A="x-imgly-enum-labels"in t.schema&&typeof t.schema["x-imgly-enum-labels"]=="object"?t.schema["x-imgly-enum-labels"]:{},O="x-imgly-enum-icons"in t.schema&&typeof t.schema["x-imgly-enum-icons"]=="object"?t.schema["x-imgly-enum-icons"]:{};m.type==="string"?m.enum!=null?m.enum.forEach(w=>{p.push({id:w,label:A[w]??ne(w),icon:O[w]})}):(g[I]=()=>_e(e,{id:I,schema:{...m,title:b}},r,n,i,o),p.push({id:I,label:A[b]??b,icon:O[b]})):m.type==="boolean"?(g[I]=()=>Ue(e,{id:I,schema:{...m,title:b}},r,n,i,o),p.push({id:I,label:A[b]??b,icon:O[b]})):m.type==="integer"?(g[I]=()=>ze(e,{id:I,schema:{...m,title:b}},r,n,i,o),p.push({id:I,label:A[b]??b,icon:O[b]})):m.type==="array"||m.type==="object"&&(g[I]=()=>Qe(e,{id:I,schema:{...m,title:b}},r,n,i,o),p.push({id:I,label:A[b]??b,icon:O[b]}))});let k=t.schema.default!=null?p.find(m=>m.id===t.schema.default)??p[0]:p[0],y=s(u,k);if(a.Select(u,{inputLabel:d,values:p,...y}),y.value.id in g){let m=g[y.value.id]();h[y.value.id]=m}return()=>{let m=h[y.value.id];return m!=null?{...m(),id:t.id}:{id:t.id,type:"string",value:y.value.id}}}function Ft(e){if("x-imgly-builder"in e)return e["x-imgly-builder"]}var qe=Ke;var Vt="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjMyMyIgdmlld0JveD0iMCAwIDMyMyAzMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjMiIGhlaWdodD0iMzIzIiBmaWxsPSIjRTlFQkVEIi8+CjxnIG9wYWNpdHk9IjAuMyI+CjxwYXRoIGQ9Ik0xMTYgMTg0VjE5MS41QzExNiAxOTkuNzg0IDEyMi43MTYgMjA2LjUgMTMxIDIwNi41SDE5MUMxOTkuMjg0IDIwNi41IDIwNiAxOTkuNzg0IDIwNiAxOTEuNVYxMzEuNUMyMDYgMTIzLjIxNiAxOTkuMjg0IDExNi41IDE5MSAxMTYuNUwxOTAuOTk1IDEyNi41QzE5My43NTcgMTI2LjUgMTk2IDEyOC43MzkgMTk2IDEzMS41VjE5MS41QzE5NiAxOTQuMjYxIDE5My43NjEgMTk2LjUgMTkxIDE5Ni41SDEzMUMxMjguMjM5IDE5Ni41IDEyNiAxOTQuMjYxIDEyNiAxOTEuNVYxODRIMTE2WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTY2LjQ5NCAxMDUuOTI0QzE2NS44NjkgMTA0LjM0MiAxNjMuNjI5IDEwNC4zNDIgMTYzLjAwNSAxMDUuOTI0TDE1OS43NDUgMTE0LjE5MUMxNTkuNTU0IDExNC42NzQgMTU5LjE3MiAxMTUuMDU3IDE1OC42ODggMTE1LjI0N0wxNTAuNDIyIDExOC41MDhDMTQ4LjgzOSAxMTkuMTMyIDE0OC44MzkgMTIxLjM3MiAxNTAuNDIyIDEyMS45OTZMMTU4LjY4OCAxMjUuMjU2QzE1OS4xNzIgMTI1LjQ0NyAxNTkuNTU0IDEyNS44MjkgMTU5Ljc0NSAxMjYuMzEzTDE2My4wMDUgMTM0LjU3OUMxNjMuNjI5IDEzNi4xNjIgMTY1Ljg2OSAxMzYuMTYyIDE2Ni40OTQgMTM0LjU3OUwxNjkuNzU0IDEyNi4zMTNDMTY5Ljk0NCAxMjUuODI5IDE3MC4zMjcgMTI1LjQ0NyAxNzAuODEgMTI1LjI1NkwxNzkuMDc3IDEyMS45OTZDMTgwLjY2IDEyMS4zNzIgMTgwLjY2IDExOS4xMzIgMTc5LjA3NyAxMTguNTA4TDE3MC44MSAxMTUuMjQ3QzE3MC4zMjcgMTE1LjA1NyAxNjkuOTQ0IDExNC42NzQgMTY5Ljc1NCAxMTQuMTkxTDE2Ni40OTQgMTA1LjkyNFoiIGZpbGw9IiM4RjhGOEYiLz4KPHBhdGggZD0iTTEzMy4wMDUgMTI4LjQyNEMxMzMuNjI5IDEyNi44NDIgMTM1Ljg2OSAxMjYuODQyIDEzNi40OTQgMTI4LjQyNEwxNDEuODc1IDE0Mi4wN0MxNDIuMDY2IDE0Mi41NTMgMTQyLjQ0OCAxNDIuOTM1IDE0Mi45MzIgMTQzLjEyNkwxNTYuNTc3IDE0OC41MDhDMTU4LjE2IDE0OS4xMzIgMTU4LjE2IDE1MS4zNzIgMTU2LjU3NyAxNTEuOTk2TDE0Mi45MzIgMTU3LjM3OEMxNDIuNDQ4IDE1Ny41NjggMTQyLjA2NiAxNTcuOTUxIDE0MS44NzUgMTU4LjQzNEwxMzYuNDk0IDE3Mi4wNzlDMTM1Ljg2OSAxNzMuNjYyIDEzMy42MjkgMTczLjY2MiAxMzMuMDA1IDE3Mi4wNzlMMTI3LjYyMyAxNTguNDM0QzEyNy40MzMgMTU3Ljk1MSAxMjcuMDUgMTU3LjU2OCAxMjYuNTY3IDE1Ny4zNzhMMTEyLjkyMiAxNTEuOTk2QzExMS4zMzkgMTUxLjM3MiAxMTEuMzM5IDE0OS4xMzIgMTEyLjkyMiAxNDguNTA4TDEyNi41NjcgMTQzLjEyNkMxMjcuMDUgMTQyLjkzNSAxMjcuNDMzIDE0Mi41NTMgMTI3LjYyMyAxNDIuMDdMMTMzLjAwNSAxMjguNDI0WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTk1Ljk5OSAxODQuMDA0VjE5MS41MDJDMTk1Ljk5OSAxOTQuMjYzIDE5My43NjEgMTk2LjUwMiAxOTAuOTk5IDE5Ni41MDJIMTQ3LjY2OEwxNzIuODc5IDE1OC42ODRDMTc0LjM2MyAxNTYuNDU4IDE3Ny42MzUgMTU2LjQ1OCAxNzkuMTIgMTU4LjY4NEwxOTUuOTk5IDE4NC4wMDRaIiBmaWxsPSIjOEY4RjhGIi8+CjwvZz4KPC9zdmc+Cg==",ke=Vt;function Gt(e,t,r){switch(t){case"image":return Kt(e,r[t]);case"video":return Qt(e,r[t]);default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function Kt(e,t){let r=t.width,n=t.height;return{id:e,meta:{previewUri:ke,fillType:"//ly.img.ubq/fill/image",kind:"image",width:r,height:n}}}function Qt(e,t){let r=t.width,n=t.height;return{id:e,label:t.label,meta:{previewUri:ke,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:r,height:n}}}var He=Gt;async function _t(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 Ut(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 zt(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 qt(e,r[t],n)}default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function Ut(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 zt(e,t,r){let n=t.width,i=t.height,o=await Ie(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 qt(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()}}}var Ae=_t;function U(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 h=t[c],k=async(m,f)=>s(c+1,m,f),y={...g,addDisposer:a};return h(p,y,k)},l={...i,addDisposer:a};return{result:await s(0,n,l),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 Ht(){return async(t,r,n)=>{console.group("[GENERATION]"),console.log("Generating with input:",JSON.stringify(t,null,2));let i,o=Date.now();try{return i=await n(t,r),i}finally{i!=null&&(console.log(`Generation took ${Date.now()-o}ms`),console.log("Generation result:",JSON.stringify(i,null,2))),console.groupEnd()}}}var z=Ht;var ut=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((l,u)=>{let d=e.locale??"en",c="",p=[];u.label!=null&&typeof u.label=="object"&&u.label[d]&&(c=u.label[d]),u.tags!=null&&typeof u.tags=="object"&&u.tags[d]&&(p=u.tags[d]);let g={...u,label:c,tags:p};return this.filterAsset(g,e)&&l.push(g),l},[]);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;T(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=()=>{T(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(),l=a.meta?.insertedAt||a._insertedAt||Date.now();return e==="asc"?s-l:l-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 T(e,n=>{r.add(n)}),await Promise.all([...r].map(async n=>{let i=await this.createBlobUrlFromStore(n);t[n]=i})),T(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()??"",l=e.tags?.map(u=>u.toLowerCase())??[];if(!a.every(u=>s.includes(u)||l.some(d=>d.includes(u))))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 l,u;return n==="id"?(l=a.id,u=s.id):(l=a.meta?.[n]??null,u=s.meta?.[n]??null),l==null?r==="Ascending"?-1:1:u==null?r==="Ascending"?1:-1:typeof l=="string"&&typeof u=="string"?r==="Ascending"?l.localeCompare(u):u.localeCompare(l):r==="Ascending"?l<u?-1:l>u?1:0:l>u?-1:l<u?1:0}):r==="Descending"&&o.reverse(),i&&o.sort((a,s)=>a.active&&!s.active?-1:!a.active&&s.active?1:0)),o}};function T(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]=T(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]=T(i,t,o)}return e}var Yt=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)}},re=Yt,Zt=typeof global=="object"&&global&&global.Object===Object&&global,ct=Zt,Wt=typeof self=="object"&&self&&self.Object===Object&&self,Xt=ct||Wt||Function("return this")(),P=Xt,Jt=P.Symbol,j=Jt,dt=Object.prototype,en=dt.hasOwnProperty,tn=dt.toString,q=j?j.toStringTag:void 0;function nn(e){var t=en.call(e,q),r=e[q];try{e[q]=void 0;var n=!0}catch{}var i=tn.call(e);return n&&(t?e[q]=r:delete e[q]),i}var rn=nn,on=Object.prototype,an=on.toString;function sn(e){return an.call(e)}var ln=sn,un="[object Null]",cn="[object Undefined]",Ye=j?j.toStringTag:void 0;function dn(e){return e==null?e===void 0?cn:un:Ye&&Ye in Object(e)?rn(e):ln(e)}var W=dn;function pn(e){return e!=null&&typeof e=="object"}var Me=pn,ya=Array.isArray;function mn(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var pt=mn,gn="[object AsyncFunction]",fn="[object Function]",yn="[object GeneratorFunction]",bn="[object Proxy]";function hn(e){if(!pt(e))return!1;var t=W(e);return t==fn||t==yn||t==gn||t==bn}var In=hn,kn=P["__core-js_shared__"],Oe=kn,Ze=function(){var e=/[^.]+$/.exec(Oe&&Oe.keys&&Oe.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function An(e){return!!Ze&&Ze in e}var On=An,vn=Function.prototype,Cn=vn.toString;function wn(e){if(e!=null){try{return Cn.call(e)}catch{}try{return e+""}catch{}}return""}var R=wn,xn=/[\\^$.*+?()[\]{}|]/g,En=/^\[object .+?Constructor\]$/,Sn=Function.prototype,Mn=Object.prototype,Pn=Sn.toString,Dn=Mn.hasOwnProperty,Rn=RegExp("^"+Pn.call(Dn).replace(xn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function $n(e){if(!pt(e)||On(e))return!1;var t=In(e)?Rn:En;return t.test(R(e))}var Ln=$n;function Nn(e,t){return e?.[t]}var Tn=Nn;function jn(e,t){var r=Tn(e,t);return Ln(r)?r:void 0}var B=jn,Bn=B(P,"WeakMap"),Ce=Bn;function Fn(e,t){return e===t||e!==e&&t!==t}var Vn=Fn,Gn=9007199254740991;function Kn(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Gn}var Qn=Kn;var ba=Object.prototype;var _n="[object Arguments]";function Un(e){return Me(e)&&W(e)==_n}var We=Un,mt=Object.prototype,zn=mt.hasOwnProperty,qn=mt.propertyIsEnumerable,ha=We(function(){return arguments}())?We:function(e){return Me(e)&&zn.call(e,"callee")&&!qn.call(e,"callee")};var gt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Xe=gt&&typeof module=="object"&&module&&!module.nodeType&&module,Hn=Xe&&Xe.exports===gt,Je=Hn?P.Buffer:void 0,Ia=Je?Je.isBuffer:void 0;var Yn="[object Arguments]",Zn="[object Array]",Wn="[object Boolean]",Xn="[object Date]",Jn="[object Error]",er="[object Function]",tr="[object Map]",nr="[object Number]",rr="[object Object]",ir="[object RegExp]",or="[object Set]",ar="[object String]",sr="[object WeakMap]",lr="[object ArrayBuffer]",ur="[object DataView]",cr="[object Float32Array]",dr="[object Float64Array]",pr="[object Int8Array]",mr="[object Int16Array]",gr="[object Int32Array]",fr="[object Uint8Array]",yr="[object Uint8ClampedArray]",br="[object Uint16Array]",hr="[object Uint32Array]",v={};v[cr]=v[dr]=v[pr]=v[mr]=v[gr]=v[fr]=v[yr]=v[br]=v[hr]=!0;v[Yn]=v[Zn]=v[lr]=v[Wn]=v[ur]=v[Xn]=v[Jn]=v[er]=v[tr]=v[nr]=v[rr]=v[ir]=v[or]=v[ar]=v[sr]=!1;function Ir(e){return Me(e)&&Qn(e.length)&&!!v[W(e)]}var kr=Ir;function Ar(e){return function(t){return e(t)}}var Or=Ar,ft=typeof exports=="object"&&exports&&!exports.nodeType&&exports,H=ft&&typeof module=="object"&&module&&!module.nodeType&&module,vr=H&&H.exports===ft,ve=vr&&ct.process,Cr=function(){try{var e=H&&H.require&&H.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch{}}(),et=Cr,tt=et&&et.isTypedArray,ka=tt?Or(tt):kr;var wr=Object.prototype,Aa=wr.hasOwnProperty;function xr(e,t){return function(r){return e(t(r))}}var Er=xr,Oa=Er(Object.keys,Object);var Sr=Object.prototype,va=Sr.hasOwnProperty;var Mr=B(Object,"create"),Y=Mr;function Pr(){this.__data__=Y?Y(null):{},this.size=0}var Dr=Pr;function Rr(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var $r=Rr,Lr="__lodash_hash_undefined__",Nr=Object.prototype,Tr=Nr.hasOwnProperty;function jr(e){var t=this.__data__;if(Y){var r=t[e];return r===Lr?void 0:r}return Tr.call(t,e)?t[e]:void 0}var Br=jr,Fr=Object.prototype,Vr=Fr.hasOwnProperty;function Gr(e){var t=this.__data__;return Y?t[e]!==void 0:Vr.call(t,e)}var Kr=Gr,Qr="__lodash_hash_undefined__";function _r(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Y&&t===void 0?Qr:t,this}var Ur=_r;function F(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])}}F.prototype.clear=Dr;F.prototype.delete=$r;F.prototype.get=Br;F.prototype.has=Kr;F.prototype.set=Ur;var nt=F;function zr(){this.__data__=[],this.size=0}var qr=zr;function Hr(e,t){for(var r=e.length;r--;)if(Vn(e[r][0],t))return r;return-1}var ie=Hr,Yr=Array.prototype,Zr=Yr.splice;function Wr(e){var t=this.__data__,r=ie(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():Zr.call(t,r,1),--this.size,!0}var Xr=Wr;function Jr(e){var t=this.__data__,r=ie(t,e);return r<0?void 0:t[r][1]}var ei=Jr;function ti(e){return ie(this.__data__,e)>-1}var ni=ti;function ri(e,t){var r=this.__data__,n=ie(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var ii=ri;function V(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])}}V.prototype.clear=qr;V.prototype.delete=Xr;V.prototype.get=ei;V.prototype.has=ni;V.prototype.set=ii;var oe=V,oi=B(P,"Map"),Z=oi;function ai(){this.size=0,this.__data__={hash:new nt,map:new(Z||oe),string:new nt}}var si=ai;function li(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var ui=li;function ci(e,t){var r=e.__data__;return ui(t)?r[typeof t=="string"?"string":"hash"]:r.map}var ae=ci;function di(e){var t=ae(this,e).delete(e);return this.size-=t?1:0,t}var pi=di;function mi(e){return ae(this,e).get(e)}var gi=mi;function fi(e){return ae(this,e).has(e)}var yi=fi;function bi(e,t){var r=ae(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var hi=bi;function G(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])}}G.prototype.clear=si;G.prototype.delete=pi;G.prototype.get=gi;G.prototype.has=yi;G.prototype.set=hi;var yt=G;function Ii(){this.__data__=new oe,this.size=0}var ki=Ii;function Ai(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var Oi=Ai;function vi(e){return this.__data__.get(e)}var Ci=vi;function wi(e){return this.__data__.has(e)}var xi=wi,Ei=200;function Si(e,t){var r=this.__data__;if(r instanceof oe){var n=r.__data__;if(!Z||n.length<Ei-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new yt(n)}return r.set(e,t),this.size=r.size,this}var Mi=Si;function X(e){var t=this.__data__=new oe(e);this.size=t.size}X.prototype.clear=ki;X.prototype.delete=Oi;X.prototype.get=Ci;X.prototype.has=xi;X.prototype.set=Mi;var Pi=Object.prototype,Ca=Pi.propertyIsEnumerable;var Di=B(P,"DataView"),we=Di,Ri=B(P,"Promise"),xe=Ri,$i=B(P,"Set"),Ee=$i,rt="[object Map]",Li="[object Object]",it="[object Promise]",ot="[object Set]",at="[object WeakMap]",st="[object DataView]",Ni=R(we),Ti=R(Z),ji=R(xe),Bi=R(Ee),Fi=R(Ce),N=W;(we&&N(new we(new ArrayBuffer(1)))!=st||Z&&N(new Z)!=rt||xe&&N(xe.resolve())!=it||Ee&&N(new Ee)!=ot||Ce&&N(new Ce)!=at)&&(N=function(e){var t=W(e),r=t==Li?e.constructor:void 0,n=r?R(r):"";if(n)switch(n){case Ni:return st;case Ti:return rt;case ji:return it;case Bi:return ot;case Fi:return at}return t});var wa=P.Uint8Array;var Vi="__lodash_hash_undefined__";function Gi(e){return this.__data__.set(e,Vi),this}var Ki=Gi;function Qi(e){return this.__data__.has(e)}var _i=Qi;function Se(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new yt;++t<r;)this.add(e[t])}Se.prototype.add=Se.prototype.push=Ki;Se.prototype.has=_i;var lt=j?j.prototype:void 0,xa=lt?lt.valueOf:void 0;var Ui=Object.prototype,Ea=Ui.hasOwnProperty;var zi=Object.prototype,Sa=zi.hasOwnProperty;var Ma=new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,"i"),Pa=new RegExp(/[A-Fa-f0-9]{1}/,"g"),Da=new RegExp(/[A-Fa-f0-9]{2}/,"g");function bt(e){return{"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg"}[e]??"png"}async function ht(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 Blob([i],{type:r});return URL.createObjectURL(o)}else return e}async function J(e,t){let r=await ht(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 C(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 ht(n,t)}function qi(e){return async(r,n)=>(console.log(`[DRY RUN]: Requesting dummy AI generation for kind '${e.kind}' with inputs: `,JSON.stringify(r,void 0,2)),await Wi(2e3),await Hi(r,e,n))}async function Hi(e,t,r){switch(t.kind){case"image":return Yi(e,t,r);case"video":return Zi(e,t,r);default:throw new Error(`Unsupported output kind for creating dry run output: ${t.kind}`)}}async function Yi(e,t,{engine:r}){let n,i,o=e!=null&&typeof e=="object"&&"prompt"in e&&typeof e.prompt=="string"?e.prompt:"AI Generated Image",a=o.match(/(\d+)x(\d+)/);if(a!=null)n=parseInt(a[1],10),i=parseInt(a[2],10);else if(t.blockInputs!=null&&(n=t.blockInputs.image.width,i=t.blockInputs.image.height),t.blockIds!=null&&Array.isArray(t.blockIds)&&t.blockIds.length>0){let[l]=t.blockIds,u=await C(l,r),d=await J(u,r);n=d.width,i=d.height}else n=512,i=512;return{kind:"image",url:`https://placehold.co/${n}x${i}/000000/FFF?text=${o.replace(" ","+").replace(`
|
|
2
|
-
`,"+")}`}}async function
|
|
1
|
+
function Lt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i18n.setTranslations({en:{[`panel.${i}`]:"Select Image To Change"}}),Nt(e,r),{[n]:(a,s)=>{let{builder:l,experimental:{global:c},payload:d}=a,u=d?.url??t.defaultUrl,m=c(`${e}.${s.id}`,u);return l.MediaPreview(s.id,{preview:{type:"image",uri:m.value},action:{label:"Select Image",onClick:()=>{r?.ui.openPanel(i,{payload:{onSelect:g=>{g.meta?.uri!=null&&m.setValue(g.meta?.uri)}}})}}}),()=>({id:s.id,type:"string",value:m.value})}}}function Nt(e,t){t?.ui.registerPanel(fe(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:"SVG images are not supported. Please choose a different image."}):a.startsWith("image/")?(n?.onSelect(i),t?.ui.closePanel(fe(e))):t.ui.showNotification({type:"warning",message:`Only images are supported. Found '${a}'. Please choose a different image.`})}})})}function fe(e){return`ly.img.ai/${e}.imageSelection`}var je=Lt;var Xe=class{constructor(e,t=[]){this.id=e,this.assets=t.map(r=>{if(typeof r.label=="string"&&!(r.label&&typeof r.label=="object")){let n=r;return{id:n.id,label:{en:n.label},meta:n.thumbUri?{...n.meta??{},thumbUri:n.thumbUri}:n.meta}}return r}),this.activeAssetIds=new Set}async findAssets(e){let{page:t,perPage:r,locale:n="en",sortActiveFirst:i,query:o,tags:a,groups:s,excludeGroups:l,sortingOrder:c,sortKey:d}=e,u=[...this.assets];if(s&&s.length>0&&(u=u.filter(p=>p.groups&&s.some(f=>p.groups?.includes(f)))),l&&l.length>0&&(u=u.filter(p=>!p.groups||!l.some(f=>p.groups?.includes(f)))),o){let p=o.toLowerCase();u=u.filter(f=>{let y=f.label?.[n]?.toLowerCase(),b=f.tags?.[n]||[];return y&&y.includes(p)||b.some(A=>A.toLowerCase().includes(p))})}if(a&&a.length>0){let p=Array.isArray(a)?a:[a];u=u.filter(f=>{let y=f.tags?.[n]||[];return p.some(b=>y.includes(b))})}i&&u.sort((p,f)=>{let y=this.activeAssetIds.has(p.id),b=this.activeAssetIds.has(f.id);return y&&!b?-1:!y&&b?1:0}),d&&d!=="id"?u.sort((p,f)=>{let y=p.meta?.[d],b=f.meta?.[d];return y===void 0?1:b===void 0?-1:typeof y=="string"&&typeof b=="string"?c==="Descending"?b.localeCompare(y):y.localeCompare(b):typeof y=="number"&&typeof b=="number"?c==="Descending"?b-y:y-b:0}):d==="id"&&u.sort((p,f)=>c==="Descending"?f.id.localeCompare(p.id):p.id.localeCompare(f.id));let m=u.length,g=t*r,I=g+r,k=u.slice(g,I).map(p=>({id:p.id,groups:p.groups,meta:p.meta,payload:p.payload,locale:n,label:p.label?.[n],tags:p.tags?.[n],active:this.activeAssetIds.has(p.id)})),h=I<m?t+1:void 0;return{assets:k,currentPage:t,nextPage:h,total:m}}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)return{id:t.id,label:t.label?.en||"",thumbUri:t.meta?.thumbUri}}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"]}},Je=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((l,c)=>{let d=e.locale??"en",u="",m=[];c.label!=null&&typeof c.label=="object"&&c.label[d]&&(u=c.label[d]),c.tags!=null&&typeof c.tags=="object"&&c.tags[d]&&(m=c.tags[d]);let g={...c,label:u,tags:m};return this.filterAsset(g,e)&&l.push(g),l},[]);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;T(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=()=>{T(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(),l=a.meta?.insertedAt||a._insertedAt||Date.now();return e==="asc"?s-l:l-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 T(e,n=>{r.add(n)}),await Promise.all([...r].map(async n=>{let i=await this.createBlobUrlFromStore(n);t[n]=i})),T(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()??"",l=e.tags?.map(c=>c.toLowerCase())??[];if(!a.every(c=>s.includes(c)||l.some(d=>d.includes(c))))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 l,c;return n==="id"?(l=a.id,c=s.id):(l=a.meta?.[n]??null,c=s.meta?.[n]??null),l==null?r==="Ascending"?-1:1:c==null?r==="Ascending"?1:-1:typeof l=="string"&&typeof c=="string"?r==="Ascending"?l.localeCompare(c):c.localeCompare(l):r==="Ascending"?l<c?-1:l>c?1:0:l>c?-1:l<c?1:0}):r==="Descending"&&o.reverse(),i&&o.sort((a,s)=>a.active&&!s.active?-1:!a.active&&s.active?1:0)),o}};function T(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]=T(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]=T(i,t,o)}return e}var Tt=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)}},te=Tt,jt=typeof global=="object"&&global&&global.Object===Object&&global,et=jt,Bt=typeof self=="object"&&self&&self.Object===Object&&self,Ft=et||Bt||Function("return this")(),P=Ft,Kt=P.Symbol,j=Kt,tt=Object.prototype,Vt=tt.hasOwnProperty,Gt=tt.toString,Q=j?j.toStringTag:void 0;function Qt(e){var t=Vt.call(e,Q),r=e[Q];try{e[Q]=void 0;var n=!0}catch{}var i=Gt.call(e);return n&&(t?e[Q]=r:delete e[Q]),i}var _t=Qt,Ut=Object.prototype,zt=Ut.toString;function qt(e){return zt.call(e)}var Ht=qt,Yt="[object Null]",Zt="[object Undefined]",Be=j?j.toStringTag:void 0;function Wt(e){return e==null?e===void 0?Zt:Yt:Be&&Be in Object(e)?_t(e):Ht(e)}var q=Wt;function Xt(e){return e!=null&&typeof e=="object"}var Oe=Xt,ga=Array.isArray;function Jt(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var nt=Jt,en="[object AsyncFunction]",tn="[object Function]",nn="[object GeneratorFunction]",rn="[object Proxy]";function on(e){if(!nt(e))return!1;var t=q(e);return t==tn||t==nn||t==en||t==rn}var an=on,sn=P["__core-js_shared__"],ye=sn,Fe=function(){var e=/[^.]+$/.exec(ye&&ye.keys&&ye.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function ln(e){return!!Fe&&Fe in e}var un=ln,cn=Function.prototype,dn=cn.toString;function pn(e){if(e!=null){try{return dn.call(e)}catch{}try{return e+""}catch{}}return""}var R=pn,mn=/[\\^$.*+?()[\]{}|]/g,gn=/^\[object .+?Constructor\]$/,fn=Function.prototype,yn=Object.prototype,bn=fn.toString,hn=yn.hasOwnProperty,In=RegExp("^"+bn.call(hn).replace(mn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function kn(e){if(!nt(e)||un(e))return!1;var t=an(e)?In:gn;return t.test(R(e))}var An=kn;function vn(e,t){return e?.[t]}var On=vn;function Cn(e,t){var r=On(e,t);return An(r)?r:void 0}var B=Cn,wn=B(P,"WeakMap"),he=wn;function xn(e,t){return e===t||e!==e&&t!==t}var Sn=xn,En=9007199254740991;function Mn(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=En}var Pn=Mn;var fa=Object.prototype;var Dn="[object Arguments]";function Rn(e){return Oe(e)&&q(e)==Dn}var Ke=Rn,rt=Object.prototype,$n=rt.hasOwnProperty,Ln=rt.propertyIsEnumerable,ya=Ke(function(){return arguments}())?Ke:function(e){return Oe(e)&&$n.call(e,"callee")&&!Ln.call(e,"callee")};var it=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ve=it&&typeof module=="object"&&module&&!module.nodeType&&module,Nn=Ve&&Ve.exports===it,Ge=Nn?P.Buffer:void 0,ba=Ge?Ge.isBuffer:void 0;var Tn="[object Arguments]",jn="[object Array]",Bn="[object Boolean]",Fn="[object Date]",Kn="[object Error]",Vn="[object Function]",Gn="[object Map]",Qn="[object Number]",_n="[object Object]",Un="[object RegExp]",zn="[object Set]",qn="[object String]",Hn="[object WeakMap]",Yn="[object ArrayBuffer]",Zn="[object DataView]",Wn="[object Float32Array]",Xn="[object Float64Array]",Jn="[object Int8Array]",er="[object Int16Array]",tr="[object Int32Array]",nr="[object Uint8Array]",rr="[object Uint8ClampedArray]",ir="[object Uint16Array]",or="[object Uint32Array]",O={};O[Wn]=O[Xn]=O[Jn]=O[er]=O[tr]=O[nr]=O[rr]=O[ir]=O[or]=!0;O[Tn]=O[jn]=O[Yn]=O[Bn]=O[Zn]=O[Fn]=O[Kn]=O[Vn]=O[Gn]=O[Qn]=O[_n]=O[Un]=O[zn]=O[qn]=O[Hn]=!1;function ar(e){return Oe(e)&&Pn(e.length)&&!!O[q(e)]}var sr=ar;function lr(e){return function(t){return e(t)}}var ur=lr,ot=typeof exports=="object"&&exports&&!exports.nodeType&&exports,_=ot&&typeof module=="object"&&module&&!module.nodeType&&module,cr=_&&_.exports===ot,be=cr&&et.process,dr=function(){try{var e=_&&_.require&&_.require("util").types;return e||be&&be.binding&&be.binding("util")}catch{}}(),Qe=dr,_e=Qe&&Qe.isTypedArray,ha=_e?ur(_e):sr;var pr=Object.prototype,Ia=pr.hasOwnProperty;function mr(e,t){return function(r){return e(t(r))}}var gr=mr,ka=gr(Object.keys,Object);var fr=Object.prototype,Aa=fr.hasOwnProperty;var yr=B(Object,"create"),U=yr;function br(){this.__data__=U?U(null):{},this.size=0}var hr=br;function Ir(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var kr=Ir,Ar="__lodash_hash_undefined__",vr=Object.prototype,Or=vr.hasOwnProperty;function Cr(e){var t=this.__data__;if(U){var r=t[e];return r===Ar?void 0:r}return Or.call(t,e)?t[e]:void 0}var wr=Cr,xr=Object.prototype,Sr=xr.hasOwnProperty;function Er(e){var t=this.__data__;return U?t[e]!==void 0:Sr.call(t,e)}var Mr=Er,Pr="__lodash_hash_undefined__";function Dr(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=U&&t===void 0?Pr:t,this}var Rr=Dr;function F(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])}}F.prototype.clear=hr;F.prototype.delete=kr;F.prototype.get=wr;F.prototype.has=Mr;F.prototype.set=Rr;var Ue=F;function $r(){this.__data__=[],this.size=0}var Lr=$r;function Nr(e,t){for(var r=e.length;r--;)if(Sn(e[r][0],t))return r;return-1}var ne=Nr,Tr=Array.prototype,jr=Tr.splice;function Br(e){var t=this.__data__,r=ne(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():jr.call(t,r,1),--this.size,!0}var Fr=Br;function Kr(e){var t=this.__data__,r=ne(t,e);return r<0?void 0:t[r][1]}var Vr=Kr;function Gr(e){return ne(this.__data__,e)>-1}var Qr=Gr;function _r(e,t){var r=this.__data__,n=ne(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Ur=_r;function K(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])}}K.prototype.clear=Lr;K.prototype.delete=Fr;K.prototype.get=Vr;K.prototype.has=Qr;K.prototype.set=Ur;var re=K,zr=B(P,"Map"),z=zr;function qr(){this.size=0,this.__data__={hash:new Ue,map:new(z||re),string:new Ue}}var Hr=qr;function Yr(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Zr=Yr;function Wr(e,t){var r=e.__data__;return Zr(t)?r[typeof t=="string"?"string":"hash"]:r.map}var ie=Wr;function Xr(e){var t=ie(this,e).delete(e);return this.size-=t?1:0,t}var Jr=Xr;function ei(e){return ie(this,e).get(e)}var ti=ei;function ni(e){return ie(this,e).has(e)}var ri=ni;function ii(e,t){var r=ie(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var oi=ii;function V(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])}}V.prototype.clear=Hr;V.prototype.delete=Jr;V.prototype.get=ti;V.prototype.has=ri;V.prototype.set=oi;var at=V;function ai(){this.__data__=new re,this.size=0}var si=ai;function li(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var ui=li;function ci(e){return this.__data__.get(e)}var di=ci;function pi(e){return this.__data__.has(e)}var mi=pi,gi=200;function fi(e,t){var r=this.__data__;if(r instanceof re){var n=r.__data__;if(!z||n.length<gi-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new at(n)}return r.set(e,t),this.size=r.size,this}var yi=fi;function H(e){var t=this.__data__=new re(e);this.size=t.size}H.prototype.clear=si;H.prototype.delete=ui;H.prototype.get=di;H.prototype.has=mi;H.prototype.set=yi;var bi=Object.prototype,va=bi.propertyIsEnumerable;var hi=B(P,"DataView"),Ie=hi,Ii=B(P,"Promise"),ke=Ii,ki=B(P,"Set"),Ae=ki,ze="[object Map]",Ai="[object Object]",qe="[object Promise]",He="[object Set]",Ye="[object WeakMap]",Ze="[object DataView]",vi=R(Ie),Oi=R(z),Ci=R(ke),wi=R(Ae),xi=R(he),N=q;(Ie&&N(new Ie(new ArrayBuffer(1)))!=Ze||z&&N(new z)!=ze||ke&&N(ke.resolve())!=qe||Ae&&N(new Ae)!=He||he&&N(new he)!=Ye)&&(N=function(e){var t=q(e),r=t==Ai?e.constructor:void 0,n=r?R(r):"";if(n)switch(n){case vi:return Ze;case Oi:return ze;case Ci:return qe;case wi:return He;case xi:return Ye}return t});var Oa=P.Uint8Array;var Si="__lodash_hash_undefined__";function Ei(e){return this.__data__.set(e,Si),this}var Mi=Ei;function Pi(e){return this.__data__.has(e)}var Di=Pi;function ve(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new at;++t<r;)this.add(e[t])}ve.prototype.add=ve.prototype.push=Mi;ve.prototype.has=Di;var We=j?j.prototype:void 0,Ca=We?We.valueOf:void 0;var Ri=Object.prototype,wa=Ri.hasOwnProperty;var $i=Object.prototype,xa=$i.hasOwnProperty;var Sa=new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,"i"),Ea=new RegExp(/[A-Fa-f0-9]{1}/,"g"),Ma=new RegExp(/[A-Fa-f0-9]{2}/,"g");function st(e){return{"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg"}[e]??"png"}async function lt(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 Blob([i],{type:r});return URL.createObjectURL(o)}else return e}async function Y(e,t){let r=await lt(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 C(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 lt(n,t)}function Li(e){return e!==void 0}var ut=Li;function Ni(e,t){let{cesdk:r}=t;if(r==null)return{};let n=t.propertyKey??"style",i=ji(e);r.i18n.setTranslations({en:{[`panel.${i}`]:"Select Style",[`${e}.${n}`]:"Style"}});let o=Fi({baseURL:t.baseURL??"https://cdn.img.ly/assets/plugins/plugin-ai-image-generation-web/v1/gpt-image-1/",includeNone:!0}),a=o;t.styles!=null&&(Array.isArray(t.styles)?a=t.styles:typeof t.styles=="function"&&(a=t.styles(o)));let s=Ki({cesdk:r,providerId:e,styles:a}),l=s.id;return Vi(s,{cesdk:r}),Ti({providerId:e,cesdk:r,panelId:i,entryId:l}),{[t.propertyKeyForPrompt??"prompt"]:(d,u)=>{let m=d.state("prompt","");return d.builder.TextArea(`${u.id}`,{inputLabel:t.i18n?.prompt?.inputLabel??t.propertyKeyForPrompt??"prompt",placeholder:t.i18n?.prompt?.placeholder,...m}),()=>{let[g]=s.getActiveAssetIds(),I=s.getAsset(g);return{id:u.id,type:"string",value:I?.meta?.prompt==null?m.value:`${m.value}; ${I.meta.prompt}`}}},[n]:(d,u)=>{let{builder:m,state:g}=d;if(a.length>0){let I=g("style",a[0]);return m.Button(`${u.id}`,{inputLabel:`${e}.${u.id}`,icon:"@imgly/Appearance",isDisabled:a.length===0,trailingIcon:"@imgly/ChevronRight",label:I.value.label,labelAlignment:"left",onClick:()=>{let k={onSelect:async h=>{s.clearActiveAssets(),s.setAssetActive(h.id),I.setValue({id:h.id,label:h.label??h.id}),r.ui.closePanel(i)}};r.ui.openPanel(i,{payload:k})}}),()=>({id:u.id,type:"string",value:I.value.id})}return()=>({id:u.id,type:"string",value:"none"})}}}function Ti(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 ji(e){return`ly.img.ai/${e}.styleSelection`}var Bi=[{id:"none",label:"None",prompt:""},{id:"anime-celshaded",label:"Anime",prompt:"anime cel\u2011shaded, bright pastel palette, expressive eyes, clean line art "},{id:"cyberpunk-neon",label:"Cyberpunk",prompt:"cyberpunk cityscape, glowing neon signage, reflective puddles, dark atmosphere"},{id:"kodak-portra-400",label:"Kodak 400",prompt:"shot on Kodak Portra 400, soft grain, golden\u2011hour warmth, 35 mm photo"},{id:"watercolor-storybook",label:"Watercolor",prompt:"loose watercolor washes, gentle gradients, dreamy storybook feel"},{id:"dark-fantasy-realism",label:"Dark Fantasy",prompt:"dark fantasy realm, moody chiaroscuro lighting, hyper\u2011real textures"},{id:"vaporwave-retrofuturism",label:"Vaporwave",prompt:"retro\u2011futuristic vaporwave, pastel sunset gradient, chrome text, VHS scanlines"},{id:"minimal-vector-flat",label:"Vector Flat",prompt:"minimalist flat vector illustration, bold geometry, two\u2011tone palette"},{id:"pixarstyle-3d-render",label:"3D Animation",prompt:"Pixar\u2011style 3D render, oversized eyes, subtle subsurface scattering, cinematic lighting"},{id:"ukiyoe-woodblock",label:"Ukiyo\u2011e",prompt:"ukiyo\u2011e woodblock print, Edo\u2011period style, visible washi texture, limited color ink"},{id:"surreal-dreamscape",label:"Surreal",prompt:"surreal dreamscape, floating objects, impossible architecture, vivid clouds"},{id:"steampunk-victorian",label:"Steampunk",prompt:"Victorian steampunk world, ornate brass gears, leather attire, atmospheric fog"},{id:"nightstreet-photo-bokeh",label:"Night Bokeh",prompt:"night\u2011time street shot, large aperture bokeh lights, candid urban mood"},{id:"comicbook-pop-art",label:"Pop Art",prompt:"classic comic\u2011book panel, halftone shading, exaggerated action lines, CMYK pop colors"}];function Fi(e){return Bi.map(t=>t.id==="none"?e.includeNone?{...t,thumbUri:`${e.baseURL}/thumbnails/None.svg`}:void 0:{...t,thumbUri:`${e.baseURL}/thumbnails/${t.id}.jpeg`}).filter(ut)}var Ki=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 Xe(n,t),o=e.styles[0];return i.setAssetActive(o.id),i},Vi=(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"})},ct=Ni;function Ce(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 Z(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=Ce(e,t.$ref),o={...Z(e,n,r)};for(let a in t)Object.prototype.hasOwnProperty.call(t,a)&&a!=="$ref"&&(o[a]=Z(e,t[a],r));return o}if(Array.isArray(t))return t.map(n=>Z(e,n,r));if(typeof t=="object"){let n={};for(let i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[i]=Z(e,t[i],r));return n}return t}function we(e){return Z(e,{...e})}function dt(e,t=!1){let r=s=>(t&&console.log(`OpenAPI Schema validation failed: ${s}`),!1);if(typeof e!="object"||e===null)return r(`Input is ${e===null?"null":typeof e}, not an object`);let n=e;if(!(typeof n.type=="string"||Array.isArray(n.enum)||typeof n.properties=="object"||typeof n.items=="object"||typeof n.allOf=="object"||typeof n.anyOf=="object"||typeof n.oneOf=="object"||typeof n.not=="object"))return r("Missing required schema-defining properties (type, enum, properties, items, allOf, anyOf, oneOf, not)");if(n.type!==void 0){let s=["string","number","integer","boolean","array","object","null"];if(typeof n.type=="string"){if(!s.includes(n.type))return r(`Invalid type: ${n.type}. Must be one of ${s.join(", ")}`)}else if(Array.isArray(n.type)){for(let l of n.type)if(typeof l!="string"||!s.includes(l))return r(`Array of types contains invalid value: ${l}. Must be one of ${s.join(", ")}`)}else return r(`Type must be a string or array of strings, got ${typeof n.type}`)}if(n.items!==void 0&&(typeof n.items!="object"||n.items===null))return r(`Items must be an object, got ${n.items===null?"null":typeof n.items}`);if(n.properties!==void 0&&(typeof n.properties!="object"||n.properties===null))return r(`Properties must be an object, got ${n.properties===null?"null":typeof n.properties}`);let o=["allOf","anyOf","oneOf"];for(let s of o)if(n[s]!==void 0){if(!Array.isArray(n[s]))return r(`${s} must be an array, got ${typeof n[s]}`);for(let l=0;l<n[s].length;l++){let c=n[s][l];if(typeof c!="object"||c===null)return r(`Item ${l} in ${s} must be an object, got ${c===null?"null":typeof c}`)}}if(n.not!==void 0&&(typeof n.not!="object"||n.not===null))return r(`'not' must be an object, got ${n.not===null?"null":typeof n.not}`);if(n.additionalProperties!==void 0&&typeof n.additionalProperties!="boolean"&&(typeof n.additionalProperties!="object"||n.additionalProperties===null))return r(`additionalProperties must be a boolean or an object, got ${n.additionalProperties===null?"null":typeof n.additionalProperties}`);if(n.format!==void 0&&typeof n.format!="string")return r(`format must be a string, got ${typeof n.format}`);let a=["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"];for(let s of a)if(n[s]!==void 0&&typeof n[s]!="number")return r(`${s} must be a number, got ${typeof n[s]}`);if(n.minLength!==void 0&&(typeof n.minLength!="number"||n.minLength<0))return r(`minLength must be a non-negative number, got ${typeof n.minLength=="number"?n.minLength:typeof n.minLength}`);if(n.maxLength!==void 0&&(typeof n.maxLength!="number"||n.maxLength<0))return r(`maxLength must be a non-negative number, got ${typeof n.maxLength=="number"?n.maxLength:typeof n.maxLength}`);if(n.pattern!==void 0&&typeof n.pattern!="string")return r(`pattern must be a string, got ${typeof n.pattern}`);if(n.minItems!==void 0&&(typeof n.minItems!="number"||n.minItems<0))return r(`minItems must be a non-negative number, got ${typeof n.minItems=="number"?n.minItems:typeof n.minItems}`);if(n.maxItems!==void 0&&(typeof n.maxItems!="number"||n.maxItems<0))return r(`maxItems must be a non-negative number, got ${typeof n.maxItems=="number"?n.maxItems:typeof n.maxItems}`);if(n.uniqueItems!==void 0&&typeof n.uniqueItems!="boolean")return r(`uniqueItems must be a boolean, got ${typeof n.uniqueItems}`);if(n.minProperties!==void 0&&(typeof n.minProperties!="number"||n.minProperties<0))return r(`minProperties must be a non-negative number, got ${typeof n.minProperties=="number"?n.minProperties:typeof n.minProperties}`);if(n.maxProperties!==void 0&&(typeof n.maxProperties!="number"||n.maxProperties<0))return r(`maxProperties must be a non-negative number, got ${typeof n.maxProperties=="number"?n.maxProperties:typeof n.maxProperties}`);if(n.required!==void 0){if(!Array.isArray(n.required))return r(`required must be an array, got ${typeof n.required}`);for(let s=0;s<n.required.length;s++){let l=n.required[s];if(typeof l!="string")return r(`Item ${s} in required array must be a string, got ${typeof l}`)}}return!0}function Gi(e,t){if(e.properties==null)throw new Error("Input schema must have properties");let r=e.properties,n=[];return Qi(e,t).forEach(o=>{let a=o,s=r[o]??void 0;n.push({id:a,schema:s})}),n}function Qi(e,t){let r=t.order;if(r!=null&&Array.isArray(r))return r;if(e.properties==null)throw new Error("Input schema must have properties");let n=e.properties,i=Object.keys(n),a=_i(e,t)??i;return r!=null&&typeof r=="function"&&(a=r(a)),[...new Set(a)]}function _i(e,t){if(t.orderExtensionKeyword==null)return;if(typeof t.orderExtensionKeyword!="string"&&!Array.isArray(t.orderExtensionKeyword))throw new Error("orderExtensionKeyword must be a string or an array of strings");let n=(typeof t.orderExtensionKeyword=="string"?[t.orderExtensionKeyword]:t.orderExtensionKeyword).find(o=>o in e);return n==null?void 0:e[n]}var oe=Gi;var Ui="ly.img.ai",xe="ly.img.ai/temp";async function pt(e,t){return e.engine.asset.findAllSources().includes(xe)||e.engine.asset.addLocalSource(xe),e.engine.asset.apply(xe,t)}function W(e){return`${Ui}/${e}`}function mt(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 gt(){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 zi(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 Se(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 l=s.getContext("2d");if(!l){document.body.removeChild(a),o(new Error("Failed to create canvas context"));return}l.drawImage(a,0,0,s.width,s.height);try{let c=s.toDataURL(r,n);document.body.removeChild(a),i(c)}catch(c){document.body.removeChild(a),o(new Error(`Failed to create thumbnail: ${c instanceof Error?c.message:String(c)}`))}},{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 ae(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 D(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 S(e){return e instanceof Error&&e.name==="AbortError"}function ft(e,t,r,n,i,o){if(t.schema==null)return n.renderCustomProperty!=null&&n.renderCustomProperty[t.id]!=null?n.renderCustomProperty[t.id](e,t):void 0;let a=t,s=t.schema.type;if(n.renderCustomProperty!=null&&n.renderCustomProperty[t.id]!=null)return n.renderCustomProperty[t.id](e,t);switch(s){case"string":return t.schema.enum!=null?qi(e,a,r,n,i,o):bt(e,a,r,n,i,o);case"boolean":return ht(e,a,r,n,i,o);case"number":case"integer":return It(e,a,r,n,i,o);case"object":return yt(e,a,r,n,i,o);case"array":break;case void 0:{if(t.schema.anyOf!=null&&Array.isArray(t.schema.anyOf))return Hi(e,a,r,n,i,o);break}default:console.error(`Unsupported property type: ${s}`)}}function yt(e,t,r,n,i,o){let s=oe(t.schema??{},n).reduce((l,c)=>{let d=ft(e,c,r,n,i,o);return d!=null&&(l[c.id]=d()),l},{});return()=>({id:t.id,type:"object",value:s})}function bt(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,c=`${r.id}.${l}`,d=t.schema.title??c,u=s(c,t.schema.default??""),m=Yi(t.schema),g=m?.component!=null&&m?.component==="TextArea"?"TextArea":"TextInput";return a[g](c,{inputLabel:d,placeholder:i.i18n?.prompt,...u}),()=>({id:t.id,type:"string",value:u.value})}function qi(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,c=`${r.id}.${l}`,d=t.schema.title??c,u=t.schema.enum!=null&&"x-imgly-enum-labels"in t.schema.enum&&typeof t.schema.enum["x-imgly-enum-labels"]=="object"?t.schema.enum["x-imgly-enum-labels"]:"x-imgly-enum-labels"in t.schema&&typeof t.schema["x-imgly-enum-labels"]=="object"?t.schema["x-imgly-enum-labels"]:{},m="x-imgly-enum-icons"in t.schema&&typeof t.schema["x-imgly-enum-icons"]=="object"?t.schema["x-imgly-enum-icons"]:{},g=(t.schema.enum??[]).map(h=>({id:h,label:u[h]??ae(h),icon:m[h]})),I=t.schema.default!=null?g.find(h=>h.id===t.schema.default)??g[0]:g[0],k=s(c,I);return a.Select(c,{inputLabel:d,values:g,...k}),()=>({id:t.id,type:"string",value:k.value.id})}function ht(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,c=`${r.id}.${l}`,d=t.schema.title??c,u=!!t.schema.default,m=s(c,u);return a.Checkbox(c,{inputLabel:d,...m}),()=>({id:t.id,type:"boolean",value:m.value})}function It(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,c=`${r.id}.${l}`,d=t.schema.title??c,u=t.schema.minimum,m=t.schema.maximum,g=t.schema.default;g==null&&(u!=null?g=u:m!=null?g=m:g=0);let I=s(c,g);if(u!=null&&m!=null){let k=t.schema.type==="number"?.1:1;"x-imgly-step"in t.schema&&typeof t.schema["x-imgly-step"]=="number"&&(k=t.schema["x-imgly-step"]),a.Slider(c,{inputLabel:d,min:u,max:m,step:k,...I})}else a.NumberInput(c,{inputLabel:d,min:u,max:m,...I});return()=>({id:t.id,type:"integer",value:I.value})}function Hi(e,t,r,n,i,o){let{builder:a,experimental:{global:s}}=e,{id:l}=t,c=`${r.id}.${l}`,d=t.schema.title??c,u=t.schema.anyOf??[],m=[],g={},I={};u.forEach((p,f)=>{let y=p.title??"common.custom",b=`${r.id}.${l}.anyOf[${f}]`,A="x-imgly-enum-labels"in t.schema&&typeof t.schema["x-imgly-enum-labels"]=="object"?t.schema["x-imgly-enum-labels"]:{},v="x-imgly-enum-icons"in t.schema&&typeof t.schema["x-imgly-enum-icons"]=="object"?t.schema["x-imgly-enum-icons"]:{};p.type==="string"?p.enum!=null?p.enum.forEach(w=>{m.push({id:w,label:A[w]??ae(w),icon:v[w]})}):(g[b]=()=>bt(e,{id:b,schema:{...p,title:y}},r,n,i,o),m.push({id:b,label:A[y]??y,icon:v[y]})):p.type==="boolean"?(g[b]=()=>ht(e,{id:b,schema:{...p,title:y}},r,n,i,o),m.push({id:b,label:A[y]??y,icon:v[y]})):p.type==="integer"?(g[b]=()=>It(e,{id:b,schema:{...p,title:y}},r,n,i,o),m.push({id:b,label:A[y]??y,icon:v[y]})):p.type==="array"||p.type==="object"&&(g[b]=()=>yt(e,{id:b,schema:{...p,title:y}},r,n,i,o),m.push({id:b,label:A[y]??y,icon:v[y]}))});let k=t.schema.default!=null?m.find(p=>p.id===t.schema.default)??m[0]:m[0],h=s(c,k);if(a.Select(c,{inputLabel:d,values:m,...h}),h.value.id in g){let p=g[h.value.id]();I[h.value.id]=p}return()=>{let p=I[h.value.id];return p!=null?{...p(),id:t.id}:{id:t.id,type:"string",value:h.value.id}}}function Yi(e){if("x-imgly-builder"in e)return e["x-imgly-builder"]}var kt=ft;var Zi="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjMyMyIgdmlld0JveD0iMCAwIDMyMyAzMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjMiIGhlaWdodD0iMzIzIiBmaWxsPSIjRTlFQkVEIi8+CjxnIG9wYWNpdHk9IjAuMyI+CjxwYXRoIGQ9Ik0xMTYgMTg0VjE5MS41QzExNiAxOTkuNzg0IDEyMi43MTYgMjA2LjUgMTMxIDIwNi41SDE5MUMxOTkuMjg0IDIwNi41IDIwNiAxOTkuNzg0IDIwNiAxOTEuNVYxMzEuNUMyMDYgMTIzLjIxNiAxOTkuMjg0IDExNi41IDE5MSAxMTYuNUwxOTAuOTk1IDEyNi41QzE5My43NTcgMTI2LjUgMTk2IDEyOC43MzkgMTk2IDEzMS41VjE5MS41QzE5NiAxOTQuMjYxIDE5My43NjEgMTk2LjUgMTkxIDE5Ni41SDEzMUMxMjguMjM5IDE5Ni41IDEyNiAxOTQuMjYxIDEyNiAxOTEuNVYxODRIMTE2WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTY2LjQ5NCAxMDUuOTI0QzE2NS44NjkgMTA0LjM0MiAxNjMuNjI5IDEwNC4zNDIgMTYzLjAwNSAxMDUuOTI0TDE1OS43NDUgMTE0LjE5MUMxNTkuNTU0IDExNC42NzQgMTU5LjE3MiAxMTUuMDU3IDE1OC42ODggMTE1LjI0N0wxNTAuNDIyIDExOC41MDhDMTQ4LjgzOSAxMTkuMTMyIDE0OC44MzkgMTIxLjM3MiAxNTAuNDIyIDEyMS45OTZMMTU4LjY4OCAxMjUuMjU2QzE1OS4xNzIgMTI1LjQ0NyAxNTkuNTU0IDEyNS44MjkgMTU5Ljc0NSAxMjYuMzEzTDE2My4wMDUgMTM0LjU3OUMxNjMuNjI5IDEzNi4xNjIgMTY1Ljg2OSAxMzYuMTYyIDE2Ni40OTQgMTM0LjU3OUwxNjkuNzU0IDEyNi4zMTNDMTY5Ljk0NCAxMjUuODI5IDE3MC4zMjcgMTI1LjQ0NyAxNzAuODEgMTI1LjI1NkwxNzkuMDc3IDEyMS45OTZDMTgwLjY2IDEyMS4zNzIgMTgwLjY2IDExOS4xMzIgMTc5LjA3NyAxMTguNTA4TDE3MC44MSAxMTUuMjQ3QzE3MC4zMjcgMTE1LjA1NyAxNjkuOTQ0IDExNC42NzQgMTY5Ljc1NCAxMTQuMTkxTDE2Ni40OTQgMTA1LjkyNFoiIGZpbGw9IiM4RjhGOEYiLz4KPHBhdGggZD0iTTEzMy4wMDUgMTI4LjQyNEMxMzMuNjI5IDEyNi44NDIgMTM1Ljg2OSAxMjYuODQyIDEzNi40OTQgMTI4LjQyNEwxNDEuODc1IDE0Mi4wN0MxNDIuMDY2IDE0Mi41NTMgMTQyLjQ0OCAxNDIuOTM1IDE0Mi45MzIgMTQzLjEyNkwxNTYuNTc3IDE0OC41MDhDMTU4LjE2IDE0OS4xMzIgMTU4LjE2IDE1MS4zNzIgMTU2LjU3NyAxNTEuOTk2TDE0Mi45MzIgMTU3LjM3OEMxNDIuNDQ4IDE1Ny41NjggMTQyLjA2NiAxNTcuOTUxIDE0MS44NzUgMTU4LjQzNEwxMzYuNDk0IDE3Mi4wNzlDMTM1Ljg2OSAxNzMuNjYyIDEzMy42MjkgMTczLjY2MiAxMzMuMDA1IDE3Mi4wNzlMMTI3LjYyMyAxNTguNDM0QzEyNy40MzMgMTU3Ljk1MSAxMjcuMDUgMTU3LjU2OCAxMjYuNTY3IDE1Ny4zNzhMMTEyLjkyMiAxNTEuOTk2QzExMS4zMzkgMTUxLjM3MiAxMTEuMzM5IDE0OS4xMzIgMTEyLjkyMiAxNDguNTA4TDEyNi41NjcgMTQzLjEyNkMxMjcuMDUgMTQyLjkzNSAxMjcuNDMzIDE0Mi41NTMgMTI3LjYyMyAxNDIuMDdMMTMzLjAwNSAxMjguNDI0WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTk1Ljk5OSAxODQuMDA0VjE5MS41MDJDMTk1Ljk5OSAxOTQuMjYzIDE5My43NjEgMTk2LjUwMiAxOTAuOTk5IDE5Ni41MDJIMTQ3LjY2OEwxNzIuODc5IDE1OC42ODRDMTc0LjM2MyAxNTYuNDU4IDE3Ny42MzUgMTU2LjQ1OCAxNzkuMTIgMTU4LjY4NEwxOTUuOTk5IDE4NC4wMDRaIiBmaWxsPSIjOEY4RjhGIi8+CjwvZz4KPC9zdmc+Cg==",Ee=Zi;function Wi(e,t,r){switch(t){case"image":return Xi(e,r[t]);case"video":return Ji(e,r[t]);default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function Xi(e,t){let r=t.width,n=t.height;return{id:e,meta:{previewUri:Ee,fillType:"//ly.img.ubq/fill/image",kind:"image",width:r,height:n}}}function Ji(e,t){let r=t.width,n=t.height;return{id:e,label:t.label,meta:{previewUri:Ee,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:r,height:n}}}var At=Wi;async function eo(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 to(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 no(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 ro(e,r[t],n)}default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function to(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 no(e,t,r){let n=t.width,i=t.height,o=await Se(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 ro(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()}}}var Me=eo;function X(e){let t=e.filter(r=>!!r);return r=>async(n,i)=>{let o=[],a=u=>{o.push(u)},s=async(u,m,g)=>{if(u>=t.length)return r(m,g);let I=t[u],k=async(p,f)=>s(u+1,p,f),h={...g,addDisposer:a};return I(m,h,k)},l={...i,addDisposer:a};return{result:await s(0,n,l),dispose:async()=>{for(let u=o.length-1;u>=0;u--)try{await o[u]()}catch(m){console.error("Error in disposer:",m)}o.length=0}}}}function io(){return async(t,r,n)=>{console.group("[GENERATION]"),console.log("Generating with input:",JSON.stringify(t,null,2));let i,o=Date.now();try{return i=await n(t,r),i}finally{i!=null&&(console.log(`Generation took ${Date.now()-o}ms`),console.log("Generation result:",JSON.stringify(i,null,2))),console.groupEnd()}}}var J=io;function oo(e){return async(r,n)=>(console.log(`[DRY RUN]: Requesting dummy AI generation for kind '${e.kind}' with inputs: `,JSON.stringify(r,void 0,2)),await uo(2e3),await ao(r,e,n))}async function ao(e,t,r){switch(t.kind){case"image":return so(e,t,r);case"video":return lo(e,t,r);default:throw new Error(`Unsupported output kind for creating dry run output: ${t.kind}`)}}async function so(e,t,{engine:r}){let n,i,o=e!=null&&typeof e=="object"&&"prompt"in e&&typeof e.prompt=="string"?e.prompt:"AI Generated Image",a=o.match(/(\d+)x(\d+)/);if(a!=null)n=parseInt(a[1],10),i=parseInt(a[2],10);else if(t.blockInputs!=null&&(n=t.blockInputs.image.width,i=t.blockInputs.image.height),t.blockIds!=null&&Array.isArray(t.blockIds)&&t.blockIds.length>0){let[l]=t.blockIds,c=await C(l,r),d=await Y(c,r);n=d.width,i=d.height}else n=512,i=512;return{kind:"image",url:`https://placehold.co/${n}x${i}/000000/FFF?text=${o.replace(" ","+").replace(`
|
|
2
|
+
`,"+")}`}}async function lo(e,t,r){return Promise.resolve({kind:"video",url:"https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"})}async function uo(e){return new Promise(t=>{setTimeout(t,e)})}var se=oo;async function co(e,t,r,n,i,o,a){let{cesdk:s,createPlaceholderBlock:l,historyAssetSourceId:c}=i,d;try{o.debug&&console.group(`Starting Generation for '${e}'`);let u=t(),m=await r(u.input),g=gt(),I;if(l){if(I=At(g,e,m),o.debug&&console.log("Adding as asset to scene:",JSON.stringify(I,void 0,2)),d=await pt(s,I),d!=null&&n.kind==="video"){let f=s.engine.block.getPositionX(d),y=s.engine.block.getPositionY(d),b=s.engine.block.duplicate(d);s.engine.block.setPositionX(b,f),s.engine.block.setPositionY(b,y),s.engine.block.destroy(d),d=b}if(le(s,a,d))return{status:"aborted"};if(d==null)throw new Error("Could not create placeholder block");s.engine.block.setState(d,{type:"Pending",progress:0})}let k=X([...n.output.middleware??[],o.debug?J():void 0,o.dryRun?se({kind:n.kind,blockInputs:m}):void 0]),{result:h}=await k(n.output.generate)(u.input,{abortSignal:a,engine:i.engine,cesdk:s});if(D(h))throw new Error("Streaming generation is not supported yet from a panel");if(le(s,a,d))return{status:"aborted"};if(h==null)throw new Error("Generation failed");o.debug&&console.log("Generated output:",JSON.stringify(h,void 0,2));let p;if(d!=null&&s.engine.block.isValid(d)&&(p=await Me(g,e,m,h),o.debug&&console.log("Updating asset in scene:",JSON.stringify(p,void 0,2)),await s.engine.asset.defaultApplyAssetToBlock(p,d)),le(s,a,d))return{status:"aborted"};if(c!=null){if(p==null&&(p=await Me(g,e,m,h),le(s,a,d)))return{status:"aborted"};let f={...p,id:`${Date.now()}-${p.id}`,label:p.label!=null?{en:p.label}:{},tags:{}};s.engine.asset.addAssetToSource(c,f)}return d!=null&&s.engine.block.isValid(d)&&s.engine.block.setState(d,{type:"Ready"}),{status:"success",output:h}}catch(u){throw d!=null&&s.engine.block.isValid(d)&&(S(u)?s.engine.block.destroy(d):s.engine.block.setState(d,{type:"Error",error:"Unknown"})),u}finally{o.debug&&console.groupEnd()}}function le(e,t,r){return t.aborted?(r!=null&&e.engine.block.isValid(r)&&e.engine.block.destroy(r),!0):!1}var vt=co;function po(e,t,r){let{cesdk:n,provider:i,getInput:o}=t;r.onError!=null&&typeof r.onError=="function"?r.onError(e):(console.error("Generation failed:",e),mo(n,i.output.notification,()=>({input:o?.().input,error:e}))||n.ui.showNotification({type:"error",message:mt(e)}))}function mo(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 $=po;function ue(e){return`${e}.generating`}function Ot(e){return`${e}.abort`}function go(e,t,r,n,i,o){let{builder:a,experimental:s}=e,{cesdk:l,includeHistoryLibrary:c=!0}=i,{id:d,output:{abortable:u}}=t,m=s.global(Ot(d),()=>{}),g=s.global(ue(d),!1),I,k=g.value&&u,h=()=>{k&&(m.value(),g.setValue(!1),m.setValue(()=>{}))},p;if(i.requiredInputs!=null&&i.requiredInputs.length>0){let y=r();p=i.requiredInputs.every(b=>!y.input[b])}let f=s.global(`${d}.confirmationDialogId`,void 0);a.Section(`${d}.generate.section`,{children:()=>{a.Button(`${d}.generate`,{label:["common.ai-generation.generate",`panel.${d}.generate`],isLoading:g.value,color:"accent",isDisabled:p,suffix:k?{icon:"@imgly/Cross",color:"danger",tooltip:[`panel.${d}.abort`,"common.cancel"],onClick:()=>{let y=l.ui.showDialog({type:"warning",content:"panel.ly.img.ai.generation.confirmCancel.content",cancel:{label:"common.close",onClick:({id:b})=>{l.ui.closeDialog(b),f.setValue(void 0)}},actions:{label:"panel.ly.img.ai.generation.confirmCancel.confirm",color:"danger",onClick:({id:b})=>{h(),l.ui.closeDialog(b),f.setValue(void 0)}}});f.setValue(y)}}:void 0,onClick:async()=>{I=new AbortController;let y=I.signal,b=async()=>{try{g.setValue(!0),m.setValue(()=>{o.debug&&console.log("Aborting generation"),I?.abort()});let A=await vt(t.kind,r,n,t,i,o,y);if(A.status==="aborted")return;let v=t.output.notification;fo(l,v,()=>({input:r().input,output:A.output}))}catch(A){if(S(A))return;$(A,{cesdk:l,provider:t,getInput:r},o)}finally{I=void 0,g.setValue(!1),m.setValue(()=>{}),f.value!=null&&(l.ui.closeDialog(f.value),f.setValue(void 0))}};o.middleware!=null?await o.middleware(b,{provider:t,abort:h}):await b()}}),t.output.generationHintText!=null&&a.Text(`${d}.generation-hint`,{align:"center",content:t.output.generationHintText})}}),c&&i.historyAssetLibraryEntryId!=null&&a.Library(`${d}.history.library`,{entries:[i.historyAssetLibraryEntryId]})}function fo(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 ce=go;async function yo(e,t,r,n){let{cesdk:i}=r,{id:o}=e;n.debug&&console.log(`Registering schema-based panel input for provider ${o}`);let a=we(t.document),s=Ce(a,t.inputReference);if(!dt(s,n.debug))throw new Error(`Input reference '${t.inputReference}' does not resolve to a valid OpenAPI schema`);let l=s,c=oe(l,t),d=u=>{let{builder:m}=u,g=[];m.Section(`${o}.schema.section`,{children:()=>{c.forEach(p=>{let f=kt(u,p,e,t,r,n);f!=null&&(Array.isArray(f)?g.push(...f):g.push(f))})}});let I=g.map(p=>p()),k=p=>p.type==="object"?Object.entries(p.value).reduce((f,[y,b])=>(f[y]=k(b),f),{}):p.value,h=I.reduce((p,f)=>(p[f.id]=k(f),p),{});ce(u,e,()=>({input:h}),()=>t.getBlockInput(h),{...r,requiredInputs:l.required,createPlaceholderBlock:t.userFlow==="placeholder"},n)};return i.ui.registerPanel(W(o),d),d}var Ct=yo;async function bo(e,t,r,n){let{cesdk:i}=r,{id:o}=e,a=t.render,s=l=>{let{state:c}=l,d=c(ue(o),{isGenerating:!1,abort:()=>{}}).value.isGenerating,{getInput:u,getBlockInput:m}=a(l,{cesdk:i,isGenerating:d});return ce(l,e,u,m,{...r,includeHistoryLibrary:t.includeHistoryLibrary??!0,createPlaceholderBlock:t.userFlow==="placeholder"},n),u};return i.ui.registerPanel(W(o),s),s}var wt=bo;var Pe="@imgly/plugin-ai-generation",ho=`
|
|
3
3
|
<svg>
|
|
4
4
|
<symbol
|
|
5
5
|
fill="none"
|
|
@@ -60,7 +60,7 @@ function Dt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i1
|
|
|
60
60
|
|
|
61
61
|
</symbol>
|
|
62
62
|
</svg>
|
|
63
|
-
`,vt=oo;var Ct="ly.img.ai.quickAction.order",ee="ly.img.ai.quickAction.actions";function ao(e,t){return{id:t,setQuickActionMenuOrder:n=>{e.ui.experimental.setGlobalStateValue(`${Ct}.${t}`,n)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${Ct}.${t}`,[]),registerQuickAction:n=>{if(!e.ui.experimental.hasGlobalStateValue(`${ee}.${t}`))e.ui.experimental.setGlobalStateValue(`${ee}.${t}`,{[n.id]:n});else{let i=e.ui.experimental.getGlobalStateValue(`${ee}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${ee}.${t}`,{...i,[n.id]:n})}},getQuickAction:n=>e.ui.experimental.getGlobalStateValue(`${ee}.${t}`,{})[n]}}var De=ao;var de="ly.img.ai.inference.editMode",pe="ly.img.ai.inference.metadata";function me(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function wt(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((r,n)=>(n==="ly.img.separator"&&r.length>0&&r[r.length-1]==="ly.img.separator"||r.push(n),r),[])}function so({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(n,i,o)=>{let a={},s={},l=e||t?i.blockIds??i.engine.block.findAllSelected():[];return l.forEach(d=>{if(i.engine.block.isValid(d)&&e&&(a[d]=i.engine.block.isAlwaysOnTop(d),i.engine.block.setAlwaysOnTop(d,!0)),t){let c=i.engine.block.getParent(d);c!=null&&i.engine.block.getType(c)!=="//ly.img.ubq/scene"&&(s[c]=i.engine.block.isClipped(c),i.engine.block.setClipped(c,!1))}}),i.addDisposer(async()=>{l.forEach(d=>{if(i.engine.block.isValid(d)&&e&&i.engine.block.setAlwaysOnTop(d,a[d]),t){let c=i.engine.block.getParent(d);c!=null&&i.engine.block.getType(c)!=="//ly.img.ubq/scene"&&s[c]!=null&&i.engine.block.setClipped(c,s[c])}})}),await o(n,i)}}var xt=so;function lo({pending:e=!0}){return async(r,n,i)=>{let o=e?n.blockIds??n.engine.block.findAllSelected():[];try{return o.forEach(s=>{n.engine.block.isValid(s)&&n.engine.block.setState(s,{type:"Pending",progress:0})}),await i(r,n)}finally{o.forEach(a=>{n.engine.block.isValid(a)&&n.engine.block.setState(a,{type:"Ready"})})}}}var Et=lo;function uo({editMode:e,automaticallyUnlock:t=!1}){return async(n,i,o)=>{let a=i.blockIds??i.engine.block.findAllSelected(),s=()=>{};t||i.addDisposer(async()=>{s?.()});try{return s=co(i.engine,a,e),await o(n,i)}catch(l){throw E(l)&&s(),l}finally{t&&s()}}}function co(e,t,r){let n=e.editor.getGlobalScope("editor/select"),i=e.editor.getEditMode();s(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(r);let o=e.editor.createHistory(),a=e.editor.getActiveHistory();e.editor.setActiveHistory(o);function s(){e.block.findAllSelected().forEach(c=>{t.includes(c)||e.block.setSelected(c,!1)}),t.forEach(c=>{e.block.setSelected(c,!0)})}let l=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==r&&e.editor.setEditMode(r)}),u=e.block.onSelectionChanged(s);return()=>{n!=null&&e.editor.setGlobalScope("editor/select",n),e.editor.setEditMode(i),e.editor.setActiveHistory(a),e.editor.destroyHistory(o),u(),l()}}var St=uo;function po(e,t){switch(t.kind){case"text":return mo(e,t);case"image":return go(e,t);case"video":return fo(e,t);case"audio":return yo(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function mo(e,t){let{cesdk:r,blockIds:n,abortSignal:i}=t,o=n.map(c=>r.engine.block.getString(c,"text/text")),a;if(D(e)){let c="";for await(let p of e){if(i.aborted)break;typeof p=="string"?c=p:p.kind==="text"&&(c=p.text),n.forEach(h=>{r.engine.block.setString(h,"text/text",c)}),a={kind:"text",text:c}}}else a=e;if(a==null||a.kind!=="text")throw new Error("Output kind from generation is not text");let s=()=>{t.blockIds.forEach(c=>{t.cesdk.engine.block.setString(c,"text/text",a.text)})},l=()=>{t.blockIds.forEach((c,p)=>{t.cesdk.engine.block.setString(c,"text/text",o[p])})};return{consumedGenerationResult:a,applyCallbacks:{onBefore:l,onAfter:s,onCancel:l,onApply:()=>{s(),t.cesdk.engine.editor.addUndoStep()}}}}async function go(e,t){let{cesdk:r,blockIds:n,abortSignal:i}=t;if(n.length!==1)throw new Error("Only one block is supported for image generation");let[o]=n,a=r.engine.block.getFill(o),s=r.engine.block.getSourceSet(a,"fill/image/sourceSet"),[l]=s,u;l==null&&(u=r.engine.block.getString(a,"fill/image/imageFileURI"));let d=await r.engine.editor.getMimeType(l?.uri??u),c=await J(l?.uri??u,t.cesdk.engine),p=c.width/c.height;if(i.throwIfAborted(),d==="image/svg+xml")throw new Error("SVG images are not supported");let g=r.engine.block.getCropScaleX(o),h=r.engine.block.getCropScaleY(o),k=r.engine.block.getCropTranslationX(o),y=r.engine.block.getCropTranslationY(o),m=r.engine.block.getCropRotation(o),f=()=>{r.engine.block.setCropScaleX(o,g),r.engine.block.setCropScaleY(o,h),r.engine.block.setCropTranslationX(o,k),r.engine.block.setCropTranslationY(o,y),r.engine.block.setCropRotation(o,m)};if(D(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 b=e.url,I=await r.engine.editor.getMimeType(b),A=await bo(r,b,I),O=await J(A,t.cesdk.engine),w=O.width/O.height,x=Math.abs(p-w)>.001,M=l?[{uri:A,width:O.width,height:O.height}]:void 0,K=A;M==null?r.engine.block.setString(a,"fill/image/imageFileURI",K):(r.engine.block.setString(a,"fill/image/imageFileURI",""),r.engine.block.setSourceSet(a,"fill/image/sourceSet",M)),x?r.engine.block.setContentFillMode(o,"Cover"):f();let Ne=()=>{if(s==null||s.length===0){if(u==null)throw new Error("No image URI found");r.engine.block.setString(a,"fill/image/imageFileURI",u)}else r.engine.block.setSourceSet(a,"fill/image/sourceSet",s);f()},Te=()=>{if(M==null){if(K==null)throw new Error("No image URI found");r.engine.block.setString(a,"fill/image/imageFileURI",K)}else r.engine.block.setSourceSet(a,"fill/image/sourceSet",M);x?r.engine.block.setContentFillMode(o,"Cover"):f()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:Ne,onAfter:Te,onCancel:()=>{Ne()},onApply:()=>{Te(),t.cesdk.engine.editor.addUndoStep()}}}}async function fo(e,t){throw new Error("Function not implemented.")}async function yo(e,t){throw new Error("Function not implemented.")}async function bo(e,t,r){let i=await(await fetch(t)).blob(),o=new File([i],`image.${bt(r)}`,{type:r}),a=await e.unstable_upload(o,()=>{}),s=a?.meta?.uri;return s??(console.warn("Failed to upload image:",a),t)}var Mt=po;function ho({editMode:e,automaticallyUnlock:t=!1,showNotification:r=!0}){return async(i,o,a)=>{let s=o.blockIds??o.engine.block.findAllSelected(),l=()=>{};t||o.addDisposer(async()=>{l?.()});try{l=Io(o.engine,s,e);let u=await a(i,o);if(r){let d=o.engine.block.findAllSelected();s.some(p=>d.includes(p))||o.cesdk?.ui.showNotification({type:"success",message:"AI generation complete",action:{label:"Select",onClick:()=>{s.forEach(p=>{o.engine.block.select(p)})}}})}return u}catch(u){throw E(u)&&l(),u}finally{t&&l()}}}function Io(e,t,r){function n(){let s=e.block.findAllSelected();return t.some(l=>s.includes(l))}let i=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==r&&n()&&e.editor.setEditMode(r)}),o=e.block.onSelectionChanged(()=>{n()?e.editor.setEditMode(r):e.editor.setEditMode("Transform")});return n()&&e.editor.setEditMode(r),()=>{o(),i(),e.editor.setEditMode("Transform")}}var Pt=ho;async function ko(e,t){let{cesdk:r,input:n,blockIds:i,provider:o,quickAction:a,confirmationComponentId:s,abortSignal:l}=e;a.confirmation&&r.ui.setCanvasMenuOrder([s],{editMode:de});let u=new re(r.engine,pe);i.forEach(m=>{u.set(m,{status:"processing",quickActionId:a.id})});let d={cesdk:r,engine:r.engine,abortSignal:l},c=U([...o.output.middleware??[],t.debug?z():void 0,Et({}),...a.confirmation?[a.lockDuringConfirmation?St({editMode:de}):Pt({editMode:de}),a.confirmation&&xt({})]:[],t.dryRun?se({kind:o.kind,blockIds:i}):void 0]),{result:p,dispose:g}=await c(o.output.generate)(n,d),{consumedGenerationResult:h,applyCallbacks:k}=await Mt(p,{abortSignal:l,kind:o.kind,blockIds:i,cesdk:r});a.confirmation?i.forEach(m=>{u.set(m,{status:"confirmation",quickActionId:a.id})}):(k.onApply(),i.forEach(m=>{u.clear(m)}));let y=()=>{g(),i.forEach(m=>{u.clear(m)})};return l.addEventListener("abort",y),{dispose:y,returnValue:h,applyCallbacks:k}}var Re=ko;function Ao(e,t){let{cesdk:r,quickActionMenu:n,provider:i}=e,o=`ly.img.ai.${n.id}`,a=`${o}.confirmation`;r.setTranslations({en:{[`${a}.apply`]:"Apply",[`${a}.before`]:"Before",[`${a}.after`]:"After",[`${o}.cancel`]:"Cancel",[`${o}.processing`]:"Generating..."}});let s=`${a}.canvasnMenu`,l={unlock:()=>{},abort:()=>{},applyCallbacks:void 0},u=()=>{let c=new AbortController,p=c.signal;return l.abort=()=>{c.abort()},p};r.ui.registerComponent(s,({builder:c,engine:p,state:g})=>{let h=p.block.findAllSelected();if(h.length===0)return null;let k=new re(r.engine,pe),y=k.get(h[0]);if(y==null)return null;let m=()=>{h.forEach(f=>{k.clear(f)})};switch(y.status){case"processing":{c.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${y.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),c.Separator(`${o}.separator`),c.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{l.abort(),m()}});break}case"confirmation":{let f=g(`${a}.comparing`,"after"),b=l.applyCallbacks?.onCancel;b!=null&&c.Button(`${a}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{l.unlock(),b(),m()}});let I=l.applyCallbacks?.onBefore,A=l.applyCallbacks?.onAfter;I!=null&&A!=null&&c.ButtonGroup(`${a}.compare`,{children:()=>{c.Button(`${a}.compare.before`,{label:`${a}.before`,variant:"regular",isActive:f.value==="before",onClick:()=>{I(),f.setValue("before")}}),c.Button(`${a}.compare.after`,{label:`${a}.after`,variant:"regular",isActive:f.value==="after",onClick:()=>{A(),f.setValue("after")}})}});let O=l.applyCallbacks?.onApply;O!=null&&c.Button(`${a}.apply`,{icon:"@imgly/Checkmark",tooltip:`${a}.apply`,color:"accent",isDisabled:f.value!=="after",onClick:()=>{l.unlock(),m(),r.engine.editor._update(),O()}});break}default:}});let d=`${o}.canvasMenu`;return r.ui.registerComponent(d,c=>{let p=c.engine.block.findAllSelected(),g=p.every(b=>c.engine.block.getState(b).type==="Ready"),h=n.getQuickActionMenuOrder().map(b=>{if(b==="ly.img.separator")return b;let I=n.getQuickAction(b);if(I==null||!r.feature.isEnabled(me({quickActionId:b,quickActionMenuId:n.id}),{engine:c.engine}))return null;let O=I.scopes;return O!=null&&O.length>0&&!p.every(x=>O.every(M=>c.engine.block.isAllowedByScope(x,M)))?null:I}).filter(b=>b!=null);if(h=wt(h),h.length===0||h.every(b=>b==="ly.img.separator"))return null;let{builder:k,experimental:y,state:m}=c,f=m(`${o}.toggleExpandedState`,void 0);y.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!g,trailingIcon:null,children:({close:b})=>{k.Section(`${o}.popover.section`,{children:()=>{if(f.value!=null){let I=f.value,A=n.getQuickAction(I);if(A!=null&&A.renderExpanded!=null){A.renderExpanded(c,{blockIds:p,closeMenu:b,toggleExpand:()=>{f.setValue(void 0)},handleGenerationError:O=>{$(O,{cesdk:r,provider:i},t)},generate:async(O,w)=>{try{let{returnValue:x,applyCallbacks:M,dispose:K}=await Re({input:O,quickAction:A,quickActionMenu:n,provider:i,cesdk:r,abortSignal:u(),blockIds:w?.blockIds??p,confirmationComponentId:s},t);return l.unlock=K,l.applyCallbacks=M,x}catch(x){throw E(x)||$(x,{cesdk:r,provider:i},t),x}}});return}}y.builder.Menu(`${o}.menu`,{children:()=>{h.forEach(I=>{I==="ly.img.separator"?k.Separator(`${o}.separator.${Math.random().toString()}`):I.render(c,{blockIds:p,closeMenu:b,handleGenerationError:A=>{$(A,{cesdk:r,provider:i},t)},toggleExpand:()=>{f.setValue(I.id)},generate:async(A,O)=>{try{let{returnValue:w,applyCallbacks:x,dispose:M}=await Re({input:A,quickAction:I,quickActionMenu:n,provider:i,cesdk:r,abortSignal:u(),blockIds:O?.blockIds??p,confirmationComponentId:s},t);return l.unlock=M,l.applyCallbacks=x,w}catch(w){throw E(w)||$(w,{cesdk:r,provider:i},t),w}}})})}})}})}})}),{canvasMenuComponentId:d}}var $e=Ao;async function Oo(e,t,r){await e.initialize?.(t);let n=await Co(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let i=n?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:n,historyAssetLibraryEntryId:i,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};i!=null&&n!=null&&t.cesdk.ui.addAssetLibraryEntry({id:i,sourceIds:[n],sortBy:{sortKey:"insertedAt",sortingOrder:"Descending"},canRemove:!0,gridItemHeight:"square",gridBackgroundType:"cover"}),t.cesdk.i18n.setTranslations({en:{"common.ai-generation.success":"Generation Successful","common.ai-generation.failed":"Generation Failed","common.ai-generation.generate":"Generate","common.ai-generation.prompt.placeholder":"Describe what you want to create...",[`panel.${e.id}`]:vo(e)}});let a="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(a)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",vt),t.cesdk.ui.experimental.setGlobalStateValue(a,!0)),{renderBuilderFunctions:await wo(e,o,r)}}function vo(e){if(e.name!=null)return e.name;switch(e.kind){case"image":return"Generate Image";case"video":return"Generate Video";case"audio":return"Generate Audio";default:return"Generate Asset"}}async function Co(e,t,r){if(!(r==null||r===!1)){if(r==="@imgly/local"){let n=`${t}.history`;return e.asset.addLocalSource(n),n}if(r==="@imgly/indexedDB"){let n=`${t}.history`;return e.asset.addSource(new ut(n,e)),n}return r}}async function wo(e,t,r){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await xo(e,e.input.panel,t,r)),e.input?.quickActions!=null&&(r.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Eo(e,e.input.quickActions,t,r)),n}async function xo(e,t,r,n){switch(t.type){case"custom":return Ot(e,t,r,n);case"schema":return At(e,t,r,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Eo(e,t,r,n){let{cesdk:i}=r,o={};t.actions.forEach(a=>{let s=a.kind??e.kind;o[s]==null&&(o[s]=De(i,s));let l=o[s],u=a.enable??!0;i.feature.enable(me({quickActionId:a.id,quickActionMenuId:s}),u),l.registerQuickAction(a),n.debug&&console.log(`Registered quick action: '${a.id}' (v${a.version}) to menu '${s}'`)}),Object.values(o).forEach(a=>{let{canvasMenuComponentId:s}=$e({cesdk:i,quickActionMenu:a,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${s}`)})}var So=Oo;function Mo(e){return async(r,n,i)=>{let o=await i(r,n);return D(o)?o:await e(o)}}var Po=Mo;var Le=new Map,ge=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 l=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).get(n);l.onsuccess=()=>{l.result?i(l.result.data):i(null)},l.onerror=()=>{console.error(`Failed to get tracker for key ${n}:`,l.error),o(l.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 Do(e){let{maxRequests:t,timeWindowMs:r,keyFn:n=()=>"global",onRateLimitExceeded:i,dbName:o}=e,s=`rate-limit-middleware-${t}-${r}`,l=ge.isAvailable(),u=l?new ge(s,o):null;Le.has(s)||Le.set(s,{});let d=Le.get(s);return async(p,g,h)=>{if(typeof e.disable=="function"?e.disable():e.disable)return h(p,g);let k=typeof n=="string"?n:n(p,g),y=Date.now(),m;if(l&&u)try{let f=await u.getTracker(k);f?m=f:m={timestamps:[],lastCleanup:y}}catch(f){console.error("IndexedDB access failed, using in-memory fallback:",f),d[k]||(d[k]={timestamps:[],lastCleanup:y}),m=d[k]}else d[k]||(d[k]={timestamps:[],lastCleanup:y}),m=d[k];if(y-m.lastCleanup>r&&(m.timestamps=m.timestamps.filter(f=>y-f<r),m.lastCleanup=y),m.timestamps.length>=t){let f=Math.min(...m.timestamps),b=Math.max(0,r-(y-f));if(i){let I={key:k,currentCount:m.timestamps.length,maxRequests:t,timeWindowMs:r,remainingTimeMs:b};if(!await i(p,g,I))throw new DOMException("Operation aborted: Rate limit exceeded","AbortError")}else throw new Error("Rate limit exceeded. Please try again later.")}if(m.timestamps.push(y),l&&u)try{await u.saveTracker(k,m)}catch(f){console.error("Failed to save tracker to IndexedDB:",f),d[k]=m}else d[k]=m;return h(p,g)}}var Ro=Do;function $o(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 Lo=$o;function No(e){let t=e.quickAction.id;return{confirmation:!0,lockDuringConfirmation:!1,...e.quickAction,render:({builder:r},{toggleExpand:n})=>{r.Button(`${t}.button`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Sparkle",labelAlignment:"left",variant:"plain",...e.buttonOptions,onClick:n})},renderExpanded:({builder:r,state:n,experimental:i},o)=>{let a=n(`${t}.prompt`,"");r.TextArea(`${t}.textarea`,{inputLabel:`ly.img.ai.quickAction.${t}.prompt.inputLabel`,placeholder:`ly.img.ai.quickAction.${t}.prompt.placeholder`,...e.textAreaOptions,...a}),r.Separator(`${t}.separator`),i.builder.ButtonRow(`${t}.footer`,{justifyContent:"space-between",children:()=>{r.Button(`${t}.footer.cancel`,{label:"common.back",icon:"@imgly/ChevronLeft",onClick:o.toggleExpand}),r.Button(`${t}.footer.apply`,{label:`ly.img.ai.quickAction.${t}.apply`,icon:"@imgly/MagicWand",color:"accent",isDisabled:a.value.length===0,onClick:async()=>{try{let s=a.value;if(!s)return;e.onApply(s,o),o.toggleExpand(),o.closeMenu()}catch(s){o.handleGenerationError(s)}}})}})}}}var S=No;function To(e){let t=e.quickAction.id;return{confirmation:!0,lockDuringConfirmation:!1,...e.quickAction,render:({builder:r},n)=>{r.Button(`${t}.button`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Sparkle",labelAlignment:"left",variant:"plain",...e.buttonOptions,onClick:async()=>{try{e.onClick(n),n.closeMenu()}catch(i){n.handleGenerationError(i)}}})}}}var jo=To;function Bo(e){let t=e.quickAction.id;if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return{...e.quickAction,render:({builder:r,experimental:n},i)=>{n.builder.Popover(`${t}.popover`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Appearance",labelAlignment:"left",variant:"plain",trailingIcon:"@imgly/ChevronRight",placement:"right",...e.buttonOptions,children:()=>{r.Section(`${t}.popover.section`,{children:()=>{n.builder.Menu(`${t}.popover.menu`,{children:()=>{e.items.forEach(o=>{r.Button(`${t}.popover.menu.${o.id}`,{label:o.label,labelAlignment:"left",variant:"plain",icon:o.icon,onClick:async()=>{let{generate:a,closeMenu:s,handleGenerationError:l}=i;try{s();let[u]=e.cesdk.engine.block.findAllSelected(),d=await C(u,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let c=e.mapInput({item:o,uri:d,blockId:u});return await a(c)}else{if(e.onApply)return await e.onApply({item:o,uri:d,blockId:u},i);throw new Error("Please provide either mapInput or onApply")}}catch(u){l(u)}}})})}})}})}})}}}var Fo=Bo;function Vo(e){let t=e.quickAction.id;if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return{...e.quickAction,render:({builder:r,experimental:n},i)=>{n.builder.Popover(`${t}.popover`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Appearance",labelAlignment:"left",variant:"plain",trailingIcon:"@imgly/ChevronRight",placement:"right",...e.buttonOptions,children:()=>{r.Library(`${t}.popover.library`,{entries:e.entries,onSelect:async o=>{let{generate:a,closeMenu:s,handleGenerationError:l}=i;try{s();let[u]=e.cesdk.engine.block.findAllSelected(),d=await C(u,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let c=e.mapInput({assetResult:o,uri:d,blockId:u});await a(c)}else if(e.onApply)await e.onApply({assetResult:o,uri:d,blockId:u},i);else throw new Error("Please provide either mapInput or onApply")}catch(u){l(u)}}})}})}}}var Go=Vo;function Ko(e){let t=e.id??"changeToImage";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Change Text Style...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change Text Style...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g. add a 3d texture with wires..."}}),S({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{kind:"text",id:t,version:"1",confirmation:!1,enable:({engine:r})=>{let n=r.block.findAllSelected();if(n==null||n.length!==1)return!1;let[i]=n;return r.block.getType(i)==="//ly.img.ubq/text"}},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=e.cesdk.engine.block.getParent(i);if(o==null)throw new Error("Parent block not found");let a=await e.cesdk.engine.block.export(i),s=URL.createObjectURL(a),l=e.cesdk.engine.block.getFrameWidth(i),u=e.cesdk.engine.block.getFrameHeight(i),d=e.cesdk.engine.block.getPositionX(i),c=e.cesdk.engine.block.getPositionY(i),p=e.cesdk.engine.block.createShape("rect"),g=e.cesdk.engine.block.create("graphic");e.cesdk.engine.block.setShape(g,p),e.cesdk.engine.block.appendChild(o,g),e.cesdk.engine.block.setWidth(g,l),e.cesdk.engine.block.setHeight(g,u),e.cesdk.engine.block.setPositionX(g,d),e.cesdk.engine.block.setPositionY(g,c);let h=e.cesdk.engine.block.createFill("image");e.cesdk.engine.block.setString(h,"fill/image/imageFileURI",s),e.cesdk.engine.block.setFill(g,h),e.cesdk.engine.block.destroy(i),e.cesdk.engine.block.setSelected(g,!0);let k=await C(g,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let y=e.mapInput({prompt:r,uri:k,duplicatedBlockId:g});return n.generate(y)}else{if(e.onApply)return e.onApply({prompt:r,uri:k,duplicatedBlockId:g},n);throw new Error("Please provide either mapInput or onApply")}}})}var Qo=Ko;function _o(){return({engine:e})=>{let t=e.block.findAllSelected();if(t==null||t.length!==1)return!1;let[r]=t;if(!e.block.supportsFill(r)||!["//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 L=_o;function Uo(e){let t=e.id??"changeImage";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Edit Image...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change image...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"Describe what you want to change..."}}),S({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{id:t,version:"1",confirmation:!0,lockDuringConfirmation:!1,scopes:["fill/change"],enable:L()},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=await C(i,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let a=e.mapInput({prompt:r,uri:o,blockId:i});return n.generate(a)}else{if(e.onApply)return e.onApply({prompt:r,uri:o,blockId:i},n);throw new Error("Please provide either mapInput or onApply")}}})}var zo=Uo;function qo(e){let t=e.id??"createVariant";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Create",[`ly.img.ai.quickAction.${t}`]:"Create Variant...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Describe Your Variant...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g., same character with arms raised"}}),S({buttonOptions:{icon:"@imgly/ImageVariation"},quickAction:{id:t,version:"1",confirmation:!1,lockDuringConfirmation:!1,scopes:["lifecycle/duplicate","fill/change"],enable:r=>{if(!L()(r))return!1;let[n]=r.engine.block.findAllSelected();return!(!e.cesdk.feature.isEnabled("ly.img.duplicate",{engine:r.engine})||!r.engine.block.isAllowedByScope(n,"lifecycle/duplicate"))}},onApply:async(r,n)=>{let i=e.cesdk.engine,[o]=i.block.findAllSelected(),a=i.block.getType(o),s=i.block.duplicate(o);a==="//ly.img.ubq/page"&&i.block.getChildren(s).forEach(c=>{i.block.destroy(c)}),i.block.setSelected(o,!1),i.block.setSelected(s,!0);let l=i.block.getParent(s);if(l==null)throw new Error("Parent not found");if(!(l!=null&&i.block.getType(l)==="//ly.img.ubq/track"&&i.block.isPageDurationSource(l))&&a!=="//ly.img.ubq/page"){let p=i.block.getWidth(l),g=i.block.getHeight(l),h=.02*Math.min(p,g)*1;i.block.setPositionX(s,i.block.getPositionX(s)+h),i.block.setPositionY(s,i.block.getPositionY(s)+h)}let d=await C(s,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let c=e.mapInput({prompt:r,uri:d,duplicatedBlockId:s});return n.generate(c)}else{if(e.onApply)return e.onApply({prompt:r,uri:d,duplicatedBlockId:s},n);throw new Error("Please provide either mapInput or onApply")}}})}var Ho=qo;function Yo(e){let t=e.id??"combineImages";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Combine",[`ly.img.ai.quickAction.${t}`]:"Combine Images...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Image Combination Instructions",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g., add character to the left of the mountain scene"}}),S({buttonOptions:{icon:"@imgly/ImageVariation"},quickAction:{id:t,version:"1",confirmation:!1,lockDuringConfirmation:!1,scopes:["lifecycle/duplicate","fill/change"],enable:r=>{let n=r.engine.block.findAllSelected();return n==null||n.length<2?!1:n.every(i=>{if(r.engine.block.getType(i)!=="//ly.img.ubq/graphic"&&!r.engine.block.supportsFill(i))return!1;let o=r.engine.block.getFill(i);if(r.engine.block.getType(o)!=="//ly.img.ubq/fill/image"||!e.cesdk.feature.isEnabled("ly.img.duplicate",{engine:r.engine})||!r.engine.block.isAllowedByScope(i,"lifecycle/duplicate"))return!1;let a=r.engine.block.getParent(i);return!(a!=null&&r.engine.block.getType(a)==="//ly.img.ubq/track"&&r.engine.block.isPageDurationSource(a)||r.engine.block.getType(i)==="//ly.img.ubq/page")})}},onApply:async(r,n)=>{let i=e.cesdk.engine,o=i.block.findAllSelected(),a=i.block.duplicate(o[0]);o.forEach(g=>{i.block.setSelected(g,!1)}),i.block.setSelected(a,!0);let s=i.block.getParent(a);if(s==null)throw new Error("Parent not found");let l=1,u=i.block.getWidth(s),d=i.block.getHeight(s),c=.02*Math.min(u,d)*l;i.block.setPositionX(a,i.block.getPositionX(a)+c),i.block.setPositionY(a,i.block.getPositionY(a)+c);let p=await Promise.all(o.map(g=>C(g,e.cesdk.engine,{throwErrorIfSvg:!0})));if(e.mapInput){let g=e.mapInput({prompt:r,uris:p,duplicatedBlockId:a});return n.generate(g)}else{if(e.onApply)return e.onApply({prompt:r,uris:p,duplicatedBlockId:a},n);throw new Error("Please provide either mapInput or onApply")}}})}var Zo=Yo;function Wo(e){let t=e.id??"swapBackground";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Change Background...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change background...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"Describe the background you want..."}}),S({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{id:t,version:"1",confirmation:!0,lockDuringConfirmation:!1,scopes:["fill/change"],enable:L()},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=await C(i,e.cesdk.engine,{throwErrorIfSvg:!0}),a=`Swap the background to ${r}`;if(e.mapInput){let s=e.mapInput({prompt:a,uri:o,blockId:i});return n.generate(s)}else{if(e.onApply)return e.onApply({prompt:a,uri:o,blockId:i},n);throw new Error("Please provide either mapInput or onApply")}}})}var Xo=Wo;var Il={ImageUrl:je};export{Il as CommonProperties,jo as QuickActionBaseButton,Go as QuickActionBaseLibrary,S as QuickActionBasePrompt,Fo as QuickActionBaseSelect,zo as QuickActionChangeImage,Zo as QuickActionCombineImages,Qo as QuickActionEditTextStyle,Ho as QuickActionImageVariant,Xo as QuickActionSwapImageBackground,kt as abortGenerationStateKey,U as composeMiddlewares,L as enableQuickActionForImageFill,Tt as getDurationForVideo,ne as getLabelFromId,_ as getPanelId,De as getQuickActionMenu,Ie as getThumbnailForVideo,So as initProvider,ue as isGeneratingStateKey,z as loggingMiddleware,Ro as rateLimitMiddleware,Lo as registerDockComponent,$e as registerQuickActionMenuComponent,Po as uploadMiddleware};
|
|
63
|
+
`,xt=ho;var St="ly.img.ai.quickAction.order",ee="ly.img.ai.quickAction.actions";function Io(e,t){return{id:t,setQuickActionMenuOrder:n=>{e.ui.experimental.setGlobalStateValue(`${St}.${t}`,n)},getQuickActionMenuOrder:()=>e.ui.experimental.getGlobalStateValue(`${St}.${t}`,[]),registerQuickAction:n=>{if(!e.ui.experimental.hasGlobalStateValue(`${ee}.${t}`))e.ui.experimental.setGlobalStateValue(`${ee}.${t}`,{[n.id]:n});else{let i=e.ui.experimental.getGlobalStateValue(`${ee}.${t}`,{});e.ui.experimental.setGlobalStateValue(`${ee}.${t}`,{...i,[n.id]:n})}},getQuickAction:n=>e.ui.experimental.getGlobalStateValue(`${ee}.${t}`,{})[n]}}var De=Io;var de="ly.img.ai.inference.editMode",pe="ly.img.ai.inference.metadata";function me(e){return`ly.img.ai.quickAction.${e.quickActionMenuId}.${e.quickActionId}`}function Et(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((r,n)=>(n==="ly.img.separator"&&r.length>0&&r[r.length-1]==="ly.img.separator"||r.push(n),r),[])}function ko({alwaysOnTop:e=!0,disableClipping:t=!0}){return async(n,i,o)=>{let a={},s={},l=e||t?i.blockIds??i.engine.block.findAllSelected():[];return l.forEach(d=>{if(i.engine.block.isValid(d)&&e&&(a[d]=i.engine.block.isAlwaysOnTop(d),i.engine.block.setAlwaysOnTop(d,!0)),t){let u=i.engine.block.getParent(d);u!=null&&i.engine.block.getType(u)!=="//ly.img.ubq/scene"&&(s[u]=i.engine.block.isClipped(u),i.engine.block.setClipped(u,!1))}}),i.addDisposer(async()=>{l.forEach(d=>{if(i.engine.block.isValid(d)&&e&&i.engine.block.setAlwaysOnTop(d,a[d]),t){let u=i.engine.block.getParent(d);u!=null&&i.engine.block.getType(u)!=="//ly.img.ubq/scene"&&s[u]!=null&&i.engine.block.setClipped(u,s[u])}})}),await o(n,i)}}var Mt=ko;function Ao({pending:e=!0}){return async(r,n,i)=>{let o=e?n.blockIds??n.engine.block.findAllSelected():[];try{return o.forEach(s=>{n.engine.block.isValid(s)&&n.engine.block.setState(s,{type:"Pending",progress:0})}),await i(r,n)}finally{o.forEach(a=>{n.engine.block.isValid(a)&&n.engine.block.setState(a,{type:"Ready"})})}}}var Pt=Ao;function vo({editMode:e,automaticallyUnlock:t=!1}){return async(n,i,o)=>{let a=i.blockIds??i.engine.block.findAllSelected(),s=()=>{};t||i.addDisposer(async()=>{s?.()});try{return s=Oo(i.engine,a,e),await o(n,i)}catch(l){throw S(l)&&s(),l}finally{t&&s()}}}function Oo(e,t,r){let n=e.editor.getGlobalScope("editor/select"),i=e.editor.getEditMode();s(),e.editor.setGlobalScope("editor/select","Deny"),e.editor.setEditMode(r);let o=e.editor.createHistory(),a=e.editor.getActiveHistory();e.editor.setActiveHistory(o);function s(){e.block.findAllSelected().forEach(u=>{t.includes(u)||e.block.setSelected(u,!1)}),t.forEach(u=>{e.block.setSelected(u,!0)})}let l=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==r&&e.editor.setEditMode(r)}),c=e.block.onSelectionChanged(s);return()=>{n!=null&&e.editor.setGlobalScope("editor/select",n),e.editor.setEditMode(i),e.editor.setActiveHistory(a),e.editor.destroyHistory(o),c(),l()}}var Dt=vo;function Co(e,t){switch(t.kind){case"text":return wo(e,t);case"image":return xo(e,t);case"video":return So(e,t);case"audio":return Eo(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function wo(e,t){let{cesdk:r,blockIds:n,abortSignal:i}=t,o=n.map(u=>r.engine.block.getString(u,"text/text")),a;if(D(e)){let u="";for await(let m of e){if(i.aborted)break;typeof m=="string"?u=m:m.kind==="text"&&(u=m.text),n.forEach(I=>{r.engine.block.setString(I,"text/text",u)}),a={kind:"text",text:u}}}else a=e;if(a==null||a.kind!=="text")throw new Error("Output kind from generation is not text");let s=()=>{t.blockIds.forEach(u=>{t.cesdk.engine.block.setString(u,"text/text",a.text)})},l=()=>{t.blockIds.forEach((u,m)=>{t.cesdk.engine.block.setString(u,"text/text",o[m])})};return{consumedGenerationResult:a,applyCallbacks:{onBefore:l,onAfter:s,onCancel:l,onApply:()=>{s(),t.cesdk.engine.editor.addUndoStep()}}}}async function xo(e,t){let{cesdk:r,blockIds:n,abortSignal:i}=t;if(n.length!==1)throw new Error("Only one block is supported for image generation");let[o]=n,a=r.engine.block.getFill(o),s=r.engine.block.getSourceSet(a,"fill/image/sourceSet"),[l]=s,c;l==null&&(c=r.engine.block.getString(a,"fill/image/imageFileURI"));let d=await r.engine.editor.getMimeType(l?.uri??c),u=await Y(l?.uri??c,t.cesdk.engine),m=u.width/u.height;if(i.throwIfAborted(),d==="image/svg+xml")throw new Error("SVG images are not supported");let g=r.engine.block.getCropScaleX(o),I=r.engine.block.getCropScaleY(o),k=r.engine.block.getCropTranslationX(o),h=r.engine.block.getCropTranslationY(o),p=r.engine.block.getCropRotation(o),f=()=>{r.engine.block.setCropScaleX(o,g),r.engine.block.setCropScaleY(o,I),r.engine.block.setCropTranslationX(o,k),r.engine.block.setCropTranslationY(o,h),r.engine.block.setCropRotation(o,p)};if(D(e))throw new Error("Streaming generation is not supported yet from a panel");if(e.kind!=="image"||typeof e.url!="string")throw new Error("Output kind from generation is not an image");let y=e.url,b=await r.engine.editor.getMimeType(y),A=await Mo(r,y,b),v=await Y(A,t.cesdk.engine),w=v.width/v.height,x=Math.abs(m-w)>.001,M=l?[{uri:A,width:v.width,height:v.height}]:void 0,G=A;M==null?r.engine.block.setString(a,"fill/image/imageFileURI",G):(r.engine.block.setString(a,"fill/image/imageFileURI",""),r.engine.block.setSourceSet(a,"fill/image/sourceSet",M)),x?r.engine.block.setContentFillMode(o,"Cover"):f();let Ne=()=>{if(s==null||s.length===0){if(c==null)throw new Error("No image URI found");r.engine.block.setString(a,"fill/image/imageFileURI",c)}else r.engine.block.setSourceSet(a,"fill/image/sourceSet",s);f()},Te=()=>{if(M==null){if(G==null)throw new Error("No image URI found");r.engine.block.setString(a,"fill/image/imageFileURI",G)}else r.engine.block.setSourceSet(a,"fill/image/sourceSet",M);x?r.engine.block.setContentFillMode(o,"Cover"):f()};return{consumedGenerationResult:e,applyCallbacks:{onBefore:Ne,onAfter:Te,onCancel:()=>{Ne()},onApply:()=>{Te(),t.cesdk.engine.editor.addUndoStep()}}}}async function So(e,t){throw new Error("Function not implemented.")}async function Eo(e,t){throw new Error("Function not implemented.")}async function Mo(e,t,r){let i=await(await fetch(t)).blob(),o=new File([i],`image.${st(r)}`,{type:r}),a=await e.unstable_upload(o,()=>{}),s=a?.meta?.uri;return s??(console.warn("Failed to upload image:",a),t)}var Rt=Co;function Po({editMode:e,automaticallyUnlock:t=!1,showNotification:r=!0}){return async(i,o,a)=>{let s=o.blockIds??o.engine.block.findAllSelected(),l=()=>{};t||o.addDisposer(async()=>{l?.()});try{l=Do(o.engine,s,e);let c=await a(i,o);if(r){let d=o.engine.block.findAllSelected();s.some(m=>d.includes(m))||o.cesdk?.ui.showNotification({type:"success",message:"AI generation complete",action:{label:"Select",onClick:()=>{s.forEach(m=>{o.engine.block.select(m)})}}})}return c}catch(c){throw S(c)&&l(),c}finally{t&&l()}}}function Do(e,t,r){function n(){let s=e.block.findAllSelected();return t.some(l=>s.includes(l))}let i=e.editor.onStateChanged(()=>{e.editor.getEditMode()!==r&&n()&&e.editor.setEditMode(r)}),o=e.block.onSelectionChanged(()=>{n()?e.editor.setEditMode(r):e.editor.setEditMode("Transform")});return n()&&e.editor.setEditMode(r),()=>{o(),i(),e.editor.setEditMode("Transform")}}var $t=Po;async function Ro(e,t){let{cesdk:r,input:n,blockIds:i,provider:o,quickAction:a,confirmationComponentId:s,abortSignal:l}=e;a.confirmation&&r.ui.setCanvasMenuOrder([s],{editMode:de});let c=new te(r.engine,pe);i.forEach(p=>{c.set(p,{status:"processing",quickActionId:a.id})});let d={cesdk:r,engine:r.engine,abortSignal:l},u=X([...o.output.middleware??[],t.debug?J():void 0,Pt({}),...a.confirmation?[a.lockDuringConfirmation?Dt({editMode:de}):$t({editMode:de}),a.confirmation&&Mt({})]:[],t.dryRun?se({kind:o.kind,blockIds:i}):void 0]),{result:m,dispose:g}=await u(o.output.generate)(n,d),{consumedGenerationResult:I,applyCallbacks:k}=await Rt(m,{abortSignal:l,kind:o.kind,blockIds:i,cesdk:r});a.confirmation?i.forEach(p=>{c.set(p,{status:"confirmation",quickActionId:a.id})}):(k.onApply(),i.forEach(p=>{c.clear(p)}));let h=()=>{g(),i.forEach(p=>{c.clear(p)})};return l.addEventListener("abort",h),{dispose:h,returnValue:I,applyCallbacks:k}}var Re=Ro;function $o(e,t){let{cesdk:r,quickActionMenu:n,provider:i}=e,o=`ly.img.ai.${n.id}`,a=`${o}.confirmation`;r.setTranslations({en:{[`${a}.apply`]:"Apply",[`${a}.before`]:"Before",[`${a}.after`]:"After",[`${o}.cancel`]:"Cancel",[`${o}.processing`]:"Generating..."}});let s=`${a}.canvasnMenu`,l={unlock:()=>{},abort:()=>{},applyCallbacks:void 0},c=()=>{let u=new AbortController,m=u.signal;return l.abort=()=>{u.abort()},m};r.ui.registerComponent(s,({builder:u,engine:m,state:g})=>{let I=m.block.findAllSelected();if(I.length===0)return null;let k=new te(r.engine,pe),h=k.get(I[0]);if(h==null)return null;let p=()=>{I.forEach(f=>{k.clear(f)})};switch(h.status){case"processing":{u.Button(`${o}.spinner`,{label:[`ly.img.ai.inference.${h.quickActionId}.processing`,`${o}.cancel`],isLoading:!0}),u.Separator(`${o}.separator`),u.Button(`${o}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{l.abort(),p()}});break}case"confirmation":{let f=g(`${a}.comparing`,"after"),y=l.applyCallbacks?.onCancel;y!=null&&u.Button(`${a}.cancel`,{icon:"@imgly/Cross",tooltip:`${o}.cancel`,onClick:()=>{l.unlock(),y(),p()}});let b=l.applyCallbacks?.onBefore,A=l.applyCallbacks?.onAfter;b!=null&&A!=null&&u.ButtonGroup(`${a}.compare`,{children:()=>{u.Button(`${a}.compare.before`,{label:`${a}.before`,variant:"regular",isActive:f.value==="before",onClick:()=>{b(),f.setValue("before")}}),u.Button(`${a}.compare.after`,{label:`${a}.after`,variant:"regular",isActive:f.value==="after",onClick:()=>{A(),f.setValue("after")}})}});let v=l.applyCallbacks?.onApply;v!=null&&u.Button(`${a}.apply`,{icon:"@imgly/Checkmark",tooltip:`${a}.apply`,color:"accent",isDisabled:f.value!=="after",onClick:()=>{l.unlock(),p(),r.engine.editor._update(),v()}});break}default:}});let d=`${o}.canvasMenu`;return r.ui.registerComponent(d,u=>{let m=u.engine.block.findAllSelected(),g=m.every(y=>u.engine.block.getState(y).type==="Ready"),I=n.getQuickActionMenuOrder().map(y=>{if(y==="ly.img.separator")return y;let b=n.getQuickAction(y);if(b==null||!r.feature.isEnabled(me({quickActionId:y,quickActionMenuId:n.id}),{engine:u.engine}))return null;let v=b.scopes;return v!=null&&v.length>0&&!m.every(x=>v.every(M=>u.engine.block.isAllowedByScope(x,M)))?null:b}).filter(y=>y!=null);if(I=Et(I),I.length===0||I.every(y=>y==="ly.img.separator"))return null;let{builder:k,experimental:h,state:p}=u,f=p(`${o}.toggleExpandedState`,void 0);h.builder.Popover(`${o}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!g,trailingIcon:null,children:({close:y})=>{k.Section(`${o}.popover.section`,{children:()=>{if(f.value!=null){let b=f.value,A=n.getQuickAction(b);if(A!=null&&A.renderExpanded!=null){A.renderExpanded(u,{blockIds:m,closeMenu:y,toggleExpand:()=>{f.setValue(void 0)},handleGenerationError:v=>{$(v,{cesdk:r,provider:i},t)},generate:async(v,w)=>{try{let{returnValue:x,applyCallbacks:M,dispose:G}=await Re({input:v,quickAction:A,quickActionMenu:n,provider:i,cesdk:r,abortSignal:c(),blockIds:w?.blockIds??m,confirmationComponentId:s},t);return l.unlock=G,l.applyCallbacks=M,x}catch(x){throw S(x)||$(x,{cesdk:r,provider:i},t),x}}});return}}h.builder.Menu(`${o}.menu`,{children:()=>{I.forEach(b=>{b==="ly.img.separator"?k.Separator(`${o}.separator.${Math.random().toString()}`):b.render(u,{blockIds:m,closeMenu:y,handleGenerationError:A=>{$(A,{cesdk:r,provider:i},t)},toggleExpand:()=>{f.setValue(b.id)},generate:async(A,v)=>{try{let{returnValue:w,applyCallbacks:x,dispose:M}=await Re({input:A,quickAction:b,quickActionMenu:n,provider:i,cesdk:r,abortSignal:c(),blockIds:v?.blockIds??m,confirmationComponentId:s},t);return l.unlock=M,l.applyCallbacks=x,w}catch(w){throw S(w)||$(w,{cesdk:r,provider:i},t),w}}})})}})}})}})}),{canvasMenuComponentId:d}}var $e=$o;async function Lo(e,t,r){await e.initialize?.(t);let n=await To(t.engine,e.id,e.output.history??"@imgly/local");if(t.cesdk==null)return{};let i=n?`${e.id}.history.entry`:void 0,o={...t,cesdk:t.cesdk,historyAssetSourceId:n,historyAssetLibraryEntryId:i,i18n:{prompt:"common.ai-generation.prompt.placeholder"}};i!=null&&n!=null&&t.cesdk.ui.addAssetLibraryEntry({id:i,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}`]:No(e)}});let a="@imgly/plugin-ai-generation.iconSetAdded";return t.cesdk.ui.experimental.hasGlobalStateValue(a)||(t.cesdk.ui.addIconSet("@imgly/plugin-ai-generation",xt),t.cesdk.ui.experimental.setGlobalStateValue(a,!0)),{renderBuilderFunctions:await jo(e,o,r)}}function No(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 To(e,t,r){if(!(r==null||r===!1)){if(r==="@imgly/local"){let n=`${t}.history`;return e.asset.addLocalSource(n),n}if(r==="@imgly/indexedDB"){let n=`${t}.history`;return e.asset.addSource(new Je(n,e)),n}return r}}async function jo(e,t,r){let n={panel:void 0};return e.input?.panel!=null&&(n.panel=await Bo(e,e.input.panel,t,r)),e.input?.quickActions!=null&&(r.debug&&console.log(`Initializing quick actions for provider '${e.kind}' (${e.id})`),Fo(e,e.input.quickActions,t,r)),n}async function Bo(e,t,r,n){switch(t.type){case"custom":return wt(e,t,r,n);case"schema":return Ct(e,t,r,n);default:n.debug&&console.warn(`Invalid panel input type '${t.type}' - skipping`)}}async function Fo(e,t,r,n){let{cesdk:i}=r,o={};t.actions.forEach(a=>{let s=a.kind??e.kind;o[s]==null&&(o[s]=De(i,s));let l=o[s],c=a.enable??!0;i.feature.enable(me({quickActionId:a.id,quickActionMenuId:s}),c),l.registerQuickAction(a),n.debug&&console.log(`Registered quick action: '${a.id}' (v${a.version}) to menu '${s}'`)}),Object.values(o).forEach(a=>{let{canvasMenuComponentId:s}=$e({cesdk:i,quickActionMenu:a,provider:e},n);n.debug&&console.log(`Registered quick action menu component: ${s}`)})}var Ko=Lo;function Vo(e){return async(r,n,i)=>{let o=await i(r,n);return D(o)?o:await e(o)}}var Go=Vo;var Le=new Map,ge=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 l=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).get(n);l.onsuccess=()=>{l.result?i(l.result.data):i(null)},l.onerror=()=>{console.error(`Failed to get tracker for key ${n}:`,l.error),o(l.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 Qo(e){let{maxRequests:t,timeWindowMs:r,keyFn:n=()=>"global",onRateLimitExceeded:i,dbName:o}=e,s=`rate-limit-middleware-${t}-${r}`,l=ge.isAvailable(),c=l?new ge(s,o):null;Le.has(s)||Le.set(s,{});let d=Le.get(s);return async(m,g,I)=>{if(typeof e.disable=="function"?e.disable():e.disable)return I(m,g);let k=typeof n=="string"?n:n(m,g),h=Date.now(),p;if(l&&c)try{let f=await c.getTracker(k);f?p=f:p={timestamps:[],lastCleanup:h}}catch(f){console.error("IndexedDB access failed, using in-memory fallback:",f),d[k]||(d[k]={timestamps:[],lastCleanup:h}),p=d[k]}else d[k]||(d[k]={timestamps:[],lastCleanup:h}),p=d[k];if(h-p.lastCleanup>r&&(p.timestamps=p.timestamps.filter(f=>h-f<r),p.lastCleanup=h),p.timestamps.length>=t){let f=Math.min(...p.timestamps),y=Math.max(0,r-(h-f));if(i){let b={key:k,currentCount:p.timestamps.length,maxRequests:t,timeWindowMs:r,remainingTimeMs:y};if(!await i(m,g,b))throw new DOMException("Operation aborted: Rate limit exceeded","AbortError")}else throw new Error("Rate limit exceeded. Please try again later.")}if(p.timestamps.push(h),l&&c)try{await c.saveTracker(k,p)}catch(f){console.error("Failed to save tracker to IndexedDB:",f),d[k]=p}else d[k]=p;return I(m,g)}}var _o=Qo;function Uo(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 zo=Uo;function qo(e){let t=e.quickAction.id;return{confirmation:!0,lockDuringConfirmation:!1,...e.quickAction,render:({builder:r},{toggleExpand:n})=>{r.Button(`${t}.button`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Sparkle",labelAlignment:"left",variant:"plain",...e.buttonOptions,onClick:n})},renderExpanded:({builder:r,state:n,experimental:i},o)=>{let a=n(`${t}.prompt`,"");r.TextArea(`${t}.textarea`,{inputLabel:`ly.img.ai.quickAction.${t}.prompt.inputLabel`,placeholder:`ly.img.ai.quickAction.${t}.prompt.placeholder`,...e.textAreaOptions,...a}),r.Separator(`${t}.separator`),i.builder.ButtonRow(`${t}.footer`,{justifyContent:"space-between",children:()=>{r.Button(`${t}.footer.cancel`,{label:"common.back",icon:"@imgly/ChevronLeft",onClick:o.toggleExpand}),r.Button(`${t}.footer.apply`,{label:`ly.img.ai.quickAction.${t}.apply`,icon:"@imgly/MagicWand",color:"accent",isDisabled:a.value.length===0,onClick:async()=>{try{let s=a.value;if(!s)return;e.onApply(s,o),o.toggleExpand(),o.closeMenu()}catch(s){o.handleGenerationError(s)}}})}})}}}var E=qo;function Ho(e){let t=e.quickAction.id;return{confirmation:!0,lockDuringConfirmation:!1,...e.quickAction,render:({builder:r},n)=>{r.Button(`${t}.button`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Sparkle",labelAlignment:"left",variant:"plain",...e.buttonOptions,onClick:async()=>{try{e.onClick(n),n.closeMenu()}catch(i){n.handleGenerationError(i)}}})}}}var Yo=Ho;function Zo(e){let t=e.quickAction.id;if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return{...e.quickAction,render:({builder:r,experimental:n},i)=>{n.builder.Popover(`${t}.popover`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Appearance",labelAlignment:"left",variant:"plain",trailingIcon:"@imgly/ChevronRight",placement:"right",...e.buttonOptions,children:()=>{r.Section(`${t}.popover.section`,{children:()=>{n.builder.Menu(`${t}.popover.menu`,{children:()=>{e.items.forEach(o=>{r.Button(`${t}.popover.menu.${o.id}`,{label:o.label,labelAlignment:"left",variant:"plain",icon:o.icon,onClick:async()=>{let{generate:a,closeMenu:s,handleGenerationError:l}=i;try{s();let[c]=e.cesdk.engine.block.findAllSelected(),d=await C(c,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let u=e.mapInput({item:o,uri:d,blockId:c});return await a(u)}else{if(e.onApply)return await e.onApply({item:o,uri:d,blockId:c},i);throw new Error("Please provide either mapInput or onApply")}}catch(c){l(c)}}})})}})}})}})}}}var Wo=Zo;function Xo(e){let t=e.quickAction.id;if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return{...e.quickAction,render:({builder:r,experimental:n},i)=>{n.builder.Popover(`${t}.popover`,{label:`ly.img.ai.quickAction.${t}`,icon:"@imgly/Appearance",labelAlignment:"left",variant:"plain",trailingIcon:"@imgly/ChevronRight",placement:"right",...e.buttonOptions,children:()=>{r.Library(`${t}.popover.library`,{entries:e.entries,onSelect:async o=>{let{generate:a,closeMenu:s,handleGenerationError:l}=i;try{s();let[c]=e.cesdk.engine.block.findAllSelected(),d=await C(c,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let u=e.mapInput({assetResult:o,uri:d,blockId:c});await a(u)}else if(e.onApply)await e.onApply({assetResult:o,uri:d,blockId:c},i);else throw new Error("Please provide either mapInput or onApply")}catch(c){l(c)}}})}})}}}var Jo=Xo;function ea(e){let t=e.id??"changeToImage";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Change Text Style...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change Text Style...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g. add a 3d texture with wires..."}}),E({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{kind:"text",id:t,version:"1",confirmation:!1,enable:({engine:r})=>{let n=r.block.findAllSelected();if(n==null||n.length!==1)return!1;let[i]=n;return r.block.getType(i)==="//ly.img.ubq/text"}},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=e.cesdk.engine.block.getParent(i);if(o==null)throw new Error("Parent block not found");let a=await e.cesdk.engine.block.export(i),s=URL.createObjectURL(a),l=e.cesdk.engine.block.getFrameWidth(i),c=e.cesdk.engine.block.getFrameHeight(i),d=e.cesdk.engine.block.getPositionX(i),u=e.cesdk.engine.block.getPositionY(i),m=e.cesdk.engine.block.createShape("rect"),g=e.cesdk.engine.block.create("graphic");e.cesdk.engine.block.setShape(g,m),e.cesdk.engine.block.appendChild(o,g),e.cesdk.engine.block.setWidth(g,l),e.cesdk.engine.block.setHeight(g,c),e.cesdk.engine.block.setPositionX(g,d),e.cesdk.engine.block.setPositionY(g,u);let I=e.cesdk.engine.block.createFill("image");e.cesdk.engine.block.setString(I,"fill/image/imageFileURI",s),e.cesdk.engine.block.setFill(g,I),e.cesdk.engine.block.destroy(i),e.cesdk.engine.block.setSelected(g,!0);let k=await C(g,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let h=e.mapInput({prompt:r,uri:k,duplicatedBlockId:g});return n.generate(h)}else{if(e.onApply)return e.onApply({prompt:r,uri:k,duplicatedBlockId:g},n);throw new Error("Please provide either mapInput or onApply")}}})}var ta=ea;function na(){return({engine:e})=>{let t=e.block.findAllSelected();if(t==null||t.length!==1)return!1;let[r]=t;if(!e.block.supportsFill(r)||!["//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 L=na;function ra(e){let t=e.id??"changeImage";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Edit Image...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change image...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"Describe what you want to change..."}}),E({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{id:t,version:"1",confirmation:!0,lockDuringConfirmation:!1,scopes:["fill/change"],enable:L()},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=await C(i,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let a=e.mapInput({prompt:r,uri:o,blockId:i});return n.generate(a)}else{if(e.onApply)return e.onApply({prompt:r,uri:o,blockId:i},n);throw new Error("Please provide either mapInput or onApply")}}})}var ia=ra;function oa(e){let t=e.id??"createVariant";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Create",[`ly.img.ai.quickAction.${t}`]:"Create Variant...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Describe Your Variant...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g., same character with arms raised"}}),E({buttonOptions:{icon:"@imgly/ImageVariation"},quickAction:{id:t,version:"1",confirmation:!1,lockDuringConfirmation:!1,scopes:["lifecycle/duplicate","fill/change"],enable:r=>{if(!L()(r))return!1;let[n]=r.engine.block.findAllSelected();return!(!e.cesdk.feature.isEnabled("ly.img.duplicate",{engine:r.engine})||!r.engine.block.isAllowedByScope(n,"lifecycle/duplicate"))}},onApply:async(r,n)=>{let i=e.cesdk.engine,[o]=i.block.findAllSelected(),a=i.block.getType(o),s=i.block.duplicate(o);a==="//ly.img.ubq/page"&&i.block.getChildren(s).forEach(u=>{i.block.destroy(u)}),i.block.setSelected(o,!1),i.block.setSelected(s,!0);let l=i.block.getParent(s);if(l==null)throw new Error("Parent not found");if(!(l!=null&&i.block.getType(l)==="//ly.img.ubq/track"&&i.block.isPageDurationSource(l))&&a!=="//ly.img.ubq/page"){let m=i.block.getWidth(l),g=i.block.getHeight(l),I=.02*Math.min(m,g)*1;i.block.setPositionX(s,i.block.getPositionX(s)+I),i.block.setPositionY(s,i.block.getPositionY(s)+I)}let d=await C(s,e.cesdk.engine,{throwErrorIfSvg:!0});if(e.mapInput){let u=e.mapInput({prompt:r,uri:d,duplicatedBlockId:s});return n.generate(u)}else{if(e.onApply)return e.onApply({prompt:r,uri:d,duplicatedBlockId:s},n);throw new Error("Please provide either mapInput or onApply")}}})}var aa=oa;function sa(e){let t=e.id??"combineImages";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Combine",[`ly.img.ai.quickAction.${t}`]:"Combine Images...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Image Combination Instructions",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"e.g., add character to the left of the mountain scene"}}),E({buttonOptions:{icon:"@imgly/ImageVariation"},quickAction:{id:t,version:"1",confirmation:!1,lockDuringConfirmation:!1,scopes:["lifecycle/duplicate","fill/change"],enable:r=>{let n=r.engine.block.findAllSelected();return n==null||n.length<2?!1:n.every(i=>{if(r.engine.block.getType(i)!=="//ly.img.ubq/graphic"&&!r.engine.block.supportsFill(i))return!1;let o=r.engine.block.getFill(i);if(r.engine.block.getType(o)!=="//ly.img.ubq/fill/image"||!e.cesdk.feature.isEnabled("ly.img.duplicate",{engine:r.engine})||!r.engine.block.isAllowedByScope(i,"lifecycle/duplicate"))return!1;let a=r.engine.block.getParent(i);return!(a!=null&&r.engine.block.getType(a)==="//ly.img.ubq/track"&&r.engine.block.isPageDurationSource(a)||r.engine.block.getType(i)==="//ly.img.ubq/page")})}},onApply:async(r,n)=>{let i=e.cesdk.engine,o=i.block.findAllSelected(),a=i.block.duplicate(o[0]);o.forEach(g=>{i.block.setSelected(g,!1)}),i.block.setSelected(a,!0);let s=i.block.getParent(a);if(s==null)throw new Error("Parent not found");let l=1,c=i.block.getWidth(s),d=i.block.getHeight(s),u=.02*Math.min(c,d)*l;i.block.setPositionX(a,i.block.getPositionX(a)+u),i.block.setPositionY(a,i.block.getPositionY(a)+u);let m=await Promise.all(o.map(g=>C(g,e.cesdk.engine,{throwErrorIfSvg:!0})));if(e.mapInput){let g=e.mapInput({prompt:r,uris:m,duplicatedBlockId:a});return n.generate(g)}else{if(e.onApply)return e.onApply({prompt:r,uris:m,duplicatedBlockId:a},n);throw new Error("Please provide either mapInput or onApply")}}})}var la=sa;function ua(e){let t=e.id??"swapBackground";if(e.mapInput==null&&e.onApply==null)throw new Error(`QuickAction '${t}': Either mapInput or onApply must be provided to QuickActionChangeImage`);if(e.mapInput!=null&&e.onApply!=null)throw new Error(`QuickAction '${t}': Only one of mapInput or onApply can be provided to QuickActionChangeImage, not both`);return e.cesdk.i18n.setTranslations({en:{[`ly.img.ai.quickAction.${t}.apply`]:"Change",[`ly.img.ai.quickAction.${t}`]:"Change Background...",[`ly.img.ai.quickAction.${t}.prompt.inputLabel`]:"Change background...",[`ly.img.ai.quickAction.${t}.prompt.placeholder`]:"Describe the background you want..."}}),E({buttonOptions:{icon:"@imgly/plugin-ai-generation/image"},quickAction:{id:t,version:"1",confirmation:!0,lockDuringConfirmation:!1,scopes:["fill/change"],enable:L()},onApply:async(r,n)=>{let[i]=e.cesdk.engine.block.findAllSelected(),o=await C(i,e.cesdk.engine,{throwErrorIfSvg:!0}),a=`Swap the background to ${r}`;if(e.mapInput){let s=e.mapInput({prompt:a,uri:o,blockId:i});return n.generate(s)}else{if(e.onApply)return e.onApply({prompt:a,uri:o,blockId:i},n);throw new Error("Please provide either mapInput or onApply")}}})}var ca=ua;var Nl={ImageUrl:je,StyleTransfer:ct};export{Nl as CommonProperties,Yo as QuickActionBaseButton,Jo as QuickActionBaseLibrary,E as QuickActionBasePrompt,Wo as QuickActionBaseSelect,ia as QuickActionChangeImage,la as QuickActionCombineImages,ta as QuickActionEditTextStyle,aa as QuickActionImageVariant,ca as QuickActionSwapImageBackground,Ot as abortGenerationStateKey,X as composeMiddlewares,L as enableQuickActionForImageFill,zi as getDurationForVideo,ae as getLabelFromId,W as getPanelId,De as getQuickActionMenu,Se as getThumbnailForVideo,Ko as initProvider,D as isAsyncGenerator,ue as isGeneratingStateKey,J as loggingMiddleware,_o as rateLimitMiddleware,zo as registerDockComponent,$e as registerQuickActionMenuComponent,Go as uploadMiddleware};
|
|
64
64
|
/*! Bundled license information:
|
|
65
65
|
|
|
66
66
|
@imgly/plugin-utils/dist/index.mjs:
|