@imgly/plugin-ai-generation-web 0.1.9 → 0.2.0
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 +34 -0
- package/README.md +270 -426
- package/dist/__tests__/ActionRegistry.test.d.ts +1 -0
- package/dist/__tests__/compactSeparators.test.d.ts +1 -0
- package/dist/__tests__/createConfirmationRenderFunction.test.d.ts +1 -0
- package/dist/{generation → assets}/getAssetResultForGenerated.d.ts +1 -1
- package/dist/{generation → assets}/getAssetResultForPlaceholder.d.ts +1 -1
- package/dist/assets/initializeHistoryAssetLibraryEntry.d.ts +7 -0
- package/dist/assets/initializeHistoryAssetSource.d.ts +7 -0
- package/dist/assets/initializeHistoryCompositeAssetSource.d.ts +11 -0
- package/dist/assets/integrateIntoDefaultAssetLibraryEntry.d.ts +8 -0
- package/dist/core/ActionRegistry.d.ts +201 -0
- package/dist/core/ProviderRegistry.d.ts +40 -0
- package/dist/core/constants.d.ts +1 -0
- package/dist/{generation → core}/provider.d.ts +38 -58
- package/dist/generation/CallbacksRegistry.d.ts +34 -0
- package/dist/generation/createGenerateFunction.d.ts +30 -0
- package/dist/generation/handleGenerateFromPanel.d.ts +50 -0
- package/dist/generation/handleGenerateFromQuickAction.d.ts +56 -0
- package/dist/generation/handleGenerationError.d.ts +2 -3
- package/dist/index.d.ts +21 -25
- package/dist/index.mjs +9 -6
- package/dist/index.mjs.map +4 -4
- package/dist/{generation/middleware → middleware}/alwaysOnTopMiddleware.d.ts +1 -1
- package/dist/{generation/middleware → middleware}/dryRunMiddleware.d.ts +2 -1
- package/dist/{generation/middleware → middleware}/editModeMiddleware.d.ts +1 -1
- package/dist/{generation/middleware → middleware}/highlightBlocksMiddleware.d.ts +1 -1
- package/dist/middleware/lockEditModeMiddleware.d.ts +17 -0
- package/dist/{generation/middleware → middleware}/lockMiddleware.d.ts +1 -1
- package/dist/middleware/loggingMiddleware.d.ts +6 -0
- package/dist/{generation/middleware → middleware}/middleware.d.ts +1 -1
- package/dist/{generation/middleware → middleware}/pendingMiddleware.d.ts +3 -3
- package/dist/{generation/middleware → middleware}/rateLimitMiddleware.d.ts +1 -1
- package/dist/{generation/middleware → middleware}/uploadMiddleware.d.ts +1 -1
- package/dist/{generation/openapi → openapi}/getProperties.d.ts +1 -1
- package/dist/{generation/openapi → openapi}/renderProperty.d.ts +3 -3
- package/dist/{generation/quickAction/consumeGeneratedResult.d.ts → providers/getApplyCallbacks.d.ts} +13 -8
- package/dist/providers/getCanvasMenuComponentId.d.ts +3 -0
- package/dist/providers/initializeProvider.d.ts +22 -0
- package/dist/providers/initializeProviders.d.ts +38 -0
- package/dist/types.d.ts +101 -0
- package/dist/{common → ui/common}/renderImageUrlProperty.d.ts +1 -1
- package/dist/{common → ui/common}/renderStyleTransferProperty.d.ts +1 -1
- package/dist/{generation → ui/components}/renderGenerationComponents.d.ts +6 -5
- package/dist/ui/panels/createConfirmationRenderFunction.d.ts +16 -0
- package/dist/ui/panels/createPanelRenderFunction.d.ts +9 -0
- package/dist/ui/panels/createPanelRenderFunctionFromCustom.d.ts +6 -0
- package/dist/ui/panels/createPanelRenderFunctionFromSchema.d.ts +9 -0
- package/dist/ui/quickActions/createQuickActionMenuRenderFunction.d.ts +13 -0
- package/dist/ui/quickActions/getQuickActionOrder.d.ts +12 -0
- package/dist/ui/quickActions/initializeQuickActionComponents.d.ts +15 -0
- package/dist/ui/quickActions/types.d.ts +10 -0
- package/dist/ui/quickActions/utils.d.ts +7 -0
- package/dist/utils/checkAiPluginVersion.d.ts +10 -0
- package/dist/utils/compactSeparators.d.ts +7 -0
- package/dist/utils/lockSelectionToEditMode.d.ts +12 -0
- package/dist/{utils.d.ts → utils/utils.d.ts} +6 -1
- package/package.json +2 -2
- package/dist/generation/generate.d.ts +0 -16
- package/dist/generation/initProvider.d.ts +0 -20
- package/dist/generation/middleware/loggingMiddleware.d.ts +0 -4
- package/dist/generation/quickAction/common/QuickActionBaseButton.d.ts +0 -11
- package/dist/generation/quickAction/common/QuickActionBaseLibrary.d.ts +0 -23
- package/dist/generation/quickAction/common/QuickActionBasePrompt.d.ts +0 -13
- package/dist/generation/quickAction/common/QuickActionBaseSelect.d.ts +0 -28
- package/dist/generation/quickAction/common/QuickActionChangeImage.d.ts +0 -17
- package/dist/generation/quickAction/common/QuickActionCombineImages.d.ts +0 -17
- package/dist/generation/quickAction/common/QuickActionEditTextStyle.d.ts +0 -17
- package/dist/generation/quickAction/common/QuickActionImageVariant.d.ts +0 -17
- package/dist/generation/quickAction/common/QuickActionSwapImageBackground.d.ts +0 -17
- package/dist/generation/quickAction/generate.d.ts +0 -19
- package/dist/generation/quickAction/getQuickActionMenu.d.ts +0 -10
- package/dist/generation/quickAction/registerQuickActionMenuComponent.d.ts +0 -12
- package/dist/generation/quickAction/types.d.ts +0 -25
- package/dist/generation/quickAction/utils.d.ts +0 -13
- package/dist/generation/registerPanelInputCustom.d.ts +0 -6
- package/dist/generation/registerPanelInputSchema.d.ts +0 -9
- package/dist/generation/types.d.ts +0 -79
- /package/dist/{generation → assets}/previewUri.d.ts +0 -0
- /package/dist/{generation/openapi → openapi}/dereferenceDocument.d.ts +0 -0
- /package/dist/{generation/openapi → openapi}/isOpenAPISchema.d.ts +0 -0
- /package/dist/{generation/openapi → openapi}/types.d.ts +0 -0
- /package/dist/{registerDockComponent.d.ts → ui/components/registerDockComponent.d.ts} +0 -0
- /package/dist/{icons.d.ts → ui/icons.d.ts} +0 -0
- /package/dist/{generation/quickAction/common → ui/quickActions}/enableImageFill.d.ts +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
import renderImageUrlProperty from './common/renderImageUrlProperty';
|
|
2
|
-
import renderStyleTransferProperty from './common/renderStyleTransferProperty';
|
|
1
|
+
import renderImageUrlProperty from './ui/common/renderImageUrlProperty';
|
|
2
|
+
import renderStyleTransferProperty from './ui/common/renderStyleTransferProperty';
|
|
3
3
|
declare const CommonProperties: {
|
|
4
4
|
ImageUrl: typeof renderImageUrlProperty;
|
|
5
5
|
StyleTransfer: typeof renderStyleTransferProperty;
|
|
6
6
|
};
|
|
7
7
|
export { CommonProperties };
|
|
8
|
-
export { type default as Provider, type ImageOutput, type VideoOutput, type TextOutput, type AudioOutput, type Output, type OutputKind, type PanelInputSchema, type RenderCustomProperty, type GetBlockInput, type GetBlockInputResult, type GetInput
|
|
9
|
-
export { type GetPropertyInput, type Property } from './
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export { default as
|
|
16
|
-
export {
|
|
17
|
-
export { default as
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export { default as
|
|
21
|
-
export { default as
|
|
22
|
-
export {
|
|
23
|
-
export { default as
|
|
24
|
-
export { default as
|
|
25
|
-
export { default as
|
|
26
|
-
export {
|
|
27
|
-
export { default as QuickActionCombineImages } from './generation/quickAction/common/QuickActionCombineImages';
|
|
28
|
-
export { default as QuickActionSwapImageBackground } from './generation/quickAction/common/QuickActionSwapImageBackground';
|
|
29
|
-
export { default as enableQuickActionForImageFill } from './generation/quickAction/common/enableImageFill';
|
|
30
|
-
export { isGeneratingStateKey, abortGenerationStateKey } from './generation/renderGenerationComponents';
|
|
8
|
+
export { type default as Provider, type ImageOutput, type VideoOutput, type TextOutput, type AudioOutput, type StickerOutput, type Output, type OutputKind, type PanelInputSchema, type RenderCustomProperty, type GetBlockInput, type GetBlockInputResult, type GetInput } from './core/provider';
|
|
9
|
+
export { type GetPropertyInput, type Property } from './openapi/types';
|
|
10
|
+
export { type GetProvider, type CommonProviderConfiguration, type CommonPluginConfiguration, type CommonConfiguration, type InternalPluginConfiguration } from './types';
|
|
11
|
+
export { default as integrateIntoDefaultAssetLibraryEntry } from './assets/integrateIntoDefaultAssetLibraryEntry';
|
|
12
|
+
export { ActionRegistry, type PluginActionDefinition, type QuickActionDefinition, type ActionDefinition, type ActionRegistryEventType, type ActionRegistrySubscriberCallback, type ActionRegistryFilters } from './core/ActionRegistry';
|
|
13
|
+
export { ProviderRegistry } from './core/ProviderRegistry';
|
|
14
|
+
export { composeMiddlewares, type Middleware } from './middleware/middleware';
|
|
15
|
+
export { default as loggingMiddleware } from './middleware/loggingMiddleware';
|
|
16
|
+
export { default as uploadMiddleware } from './middleware/uploadMiddleware';
|
|
17
|
+
export { default as rateLimitMiddleware, type RateLimitOptions } from './middleware/rateLimitMiddleware';
|
|
18
|
+
export { getPanelId, getDurationForVideo, getThumbnailForVideo, getLabelFromId, isAsyncGenerator, addIconSetOnce } from './utils/utils';
|
|
19
|
+
export { checkAiPluginVersion } from './utils/checkAiPluginVersion';
|
|
20
|
+
export { default as registerDockComponent } from './ui/components/registerDockComponent';
|
|
21
|
+
export { default as enableQuickActionForImageFill } from './ui/quickActions/enableImageFill';
|
|
22
|
+
export { isGeneratingStateKey, abortGenerationStateKey } from './ui/components/renderGenerationComponents';
|
|
23
|
+
export { default as initializeProviders } from './providers/initializeProviders';
|
|
24
|
+
export { default as initializeProvider } from './providers/initializeProvider';
|
|
25
|
+
export { default as initializeQuickActionComponents } from './ui/quickActions/initializeQuickActionComponents';
|
|
26
|
+
export { AI_EDIT_MODE, AI_METADATA_KEY } from './ui/quickActions/utils';
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
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
|
-
|
|
1
|
+
function zt(e,t){let{cesdk:n}=t,r=t.propertyKey??"image_url",i=fe(e);return n.i18n.setTranslations({en:{[`panel.${i}`]:"Select Image To Change"}}),_t(e,n),{[r]:(s,a)=>{let{builder:u,experimental:{global:l},payload:c}=s,d=c?.url??t.defaultUrl,p=l(`${e}.${a.id}`,d);return u.MediaPreview(a.id,{preview:{type:"image",uri:p.value},action:{label:"Select Image",onClick:()=>{n?.ui.openPanel(i,{payload:{onSelect:g=>{g.meta?.uri!=null&&p.setValue(g.meta?.uri)}}})}}}),()=>({id:a.id,type:"string",value:p.value})}}}function _t(e,t){t?.ui.registerPanel(fe(e),({builder:n,payload:r})=>{n.Library(`${e}.library.image`,{entries:["ly.img.image"],onSelect:async i=>{let o=i?.meta?.uri;if(o==null)return;let s=await t.engine.editor.getMimeType(o);s==="image/svg+xml"?t.ui.showNotification({type:"warning",message:"SVG images are not supported. Please choose a different image."}):s.startsWith("image/")?(r?.onSelect(i),t?.ui.closePanel(fe(e))):t.ui.showNotification({type:"warning",message:`Only images are supported. Found '${s}'. Please choose a different image.`})}})})}function fe(e){return`ly.img.ai.${e}.imageSelection`}var je=zt;var Xe=class{constructor(e,t=[]){this.id=e,this.assets=t.map(n=>{if(typeof n.label=="string"&&!(n.label&&typeof n.label=="object")){let r=n;return{id:r.id,label:{en:r.label},meta:r.thumbUri?{...r.meta??{},thumbUri:r.thumbUri}:r.meta}}return n}),this.activeAssetIds=new Set}async findAssets(e){let{page:t,perPage:n,locale:r="en",sortActiveFirst:i,query:o,tags:s,groups:a,excludeGroups:u,sortingOrder:l,sortKey:c}=e,d=[...this.assets];if(a&&a.length>0&&(d=d.filter(f=>f.groups&&a.some(y=>f.groups?.includes(y)))),u&&u.length>0&&(d=d.filter(f=>!f.groups||!u.some(y=>f.groups?.includes(y)))),o){let f=o.toLowerCase();d=d.filter(y=>{let v=y.label?.[r]?.toLowerCase(),m=y.tags?.[r]||[];return v&&v.includes(f)||m.some(O=>O.toLowerCase().includes(f))})}if(s&&s.length>0){let f=Array.isArray(s)?s:[s];d=d.filter(y=>{let v=y.tags?.[r]||[];return f.some(m=>v.includes(m))})}i&&d.sort((f,y)=>{let v=this.activeAssetIds.has(f.id),m=this.activeAssetIds.has(y.id);return v&&!m?-1:!v&&m?1:0}),c&&c!=="id"?d.sort((f,y)=>{let v=f.meta?.[c],m=y.meta?.[c];return v===void 0?1:m===void 0?-1:typeof v=="string"&&typeof m=="string"?l==="Descending"?m.localeCompare(v):v.localeCompare(m):typeof v=="number"&&typeof m=="number"?l==="Descending"?m-v:v-m:0}):c==="id"&&d.sort((f,y)=>l==="Descending"?y.id.localeCompare(f.id):f.id.localeCompare(y.id));let p=d.length,g=t*n,I=g+n,h=d.slice(g,I).map(f=>({id:f.id,groups:f.groups,meta:f.meta,payload:f.payload,locale:r,label:f.label?.[r],tags:f.tags?.[r],active:this.activeAssetIds.has(f.id)})),b=I<p?t+1:void 0;return{assets:h,currentPage:t,nextPage:b,total:p}}updateLabel(e,t,n){this.assets.forEach(r=>{r.id===e&&(r.label=r.label||{},r.label[n]=t)})}getAssetSelectValue(e){let t=this.assets.find(({id:n})=>n===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(n=>n.id===e.id);t>=0?this.assets[t]=e:this.assets.push(e)}removeAsset(e){let t=this.assets.findIndex(n=>n.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(n=>e.add(n))}),Array.from(e)}getSupportedMimeTypes(){return["image/jpeg","image/png","image/svg+xml","image/webp","video/mp4","audio/mpeg"]}},et=class{constructor(e,t,n){this.assetStoreName="assets",this.blobStoreName="blobs",this.db=null,this.id=e,this.engine=t,this.dbName=n?.dbName??`ly.img.assetSource/${e}`,this.dbVersion=n?.dbVersion??1}async initialize(){if(!this.db)return new Promise((e,t)=>{let n=indexedDB.open(this.dbName,this.dbVersion);n.onerror=r=>{t(new Error(`Failed to open IndexedDB: ${r.target.error}`))},n.onupgradeneeded=r=>{let i=r.target.result;i.objectStoreNames.contains(this.assetStoreName)||i.createObjectStore(this.assetStoreName,{keyPath:"id"}),i.objectStoreNames.contains(this.blobStoreName)||i.createObjectStore(this.blobStoreName,{keyPath:"id"})},n.onsuccess=r=>{this.db=r.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((u,l)=>{let c=e.locale??"en",d="",p=[];l.label!=null&&typeof l.label=="object"&&l.label[c]&&(d=l.label[c]),l.tags!=null&&typeof l.tags=="object"&&l.tags[c]&&(p=l.tags[c]);let g={...l,label:d,tags:p};return this.filterAsset(g,e)&&u.push(g),u},[]);t=await this.restoreBlobUrls(t),t=this.sortAssets(t,e);let{page:n,perPage:r}=e,i=n*r,o=i+r,s=t.slice(i,o),a=o<t.length?n+1:void 0;return{assets:s,currentPage:n,nextPage:a,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 n=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).getAll();n.onsuccess=()=>{let r=new Set;n.result.forEach(o=>{o.groups&&Array.isArray(o.groups)&&o.groups.forEach(s=>r.add(s))});let i=[...r];e(i)},n.onerror=()=>{t(new Error(`Failed to get groups: ${n.error}`))}})}addAsset(e){this.initialize().then(async()=>{if(!this.db)throw new Error("Database not initialized");let t=this.db.transaction(this.assetStoreName,"readwrite"),n=t.objectStore(this.assetStoreName),r=new Set;L(e,o=>{r.add(o)}),setTimeout(()=>{this.storeBlobUrls([...r])});let i={...e,meta:{...e.meta,insertedAt:e.meta?.insertedAt||Date.now()}};n.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 n=this.db.transaction(this.assetStoreName,"readwrite");n.objectStore(this.assetStoreName).delete(e),n.oncomplete=()=>{L(t,r=>{this.removeBlob(r)}),this.engine.asset.assetSourceContentsChanged(this.id)},n.onerror=()=>{console.error(`Failed to remove asset: ${n.error}`)}}).catch(n=>{console.error("Error initializing database:",n)})}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,n)=>{let r=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).getAll();r.onsuccess=()=>{let i=r.result;i.sort((o,s)=>{let a=o.meta?.insertedAt||o._insertedAt||Date.now(),u=s.meta?.insertedAt||s._insertedAt||Date.now();return e==="asc"?a-u:u-a}),t(i)},r.onerror=()=>{n(new Error(`Failed to get assets: ${r.error}`))}})}async getAsset(e){return new Promise((t,n)=>{let r=this.db.transaction(this.assetStoreName,"readonly").objectStore(this.assetStoreName).get(e);r.onsuccess=()=>{t(r.result)},r.onerror=()=>{n(new Error(`Failed to get blob: ${r.error}`))}})}async getBlob(e){return new Promise((t,n)=>{let r=this.db.transaction(this.blobStoreName,"readonly").objectStore(this.blobStoreName).get(e);r.onsuccess=()=>{t(r.result)},r.onerror=()=>{n(new Error(`Failed to get blob: ${r.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 n=>{let r=await(await fetch(n)).blob();t[n]=r})),this.initialize().then(async()=>{if(!this.db)throw new Error("Database not initialized");let n=this.db.transaction(this.blobStoreName,"readwrite"),r=n.objectStore(this.blobStoreName);Object.entries(t).forEach(([i,o])=>{let s={id:i,blob:o};r.put(s)}),n.onerror=()=>{console.error(`Failed to add blobs: ${n.error}`)}}).catch(n=>{console.error("Error initializing database:",n)})}async restoreBlobUrls(e){let t={},n=new Set;return L(e,r=>{n.add(r)}),await Promise.all([...n].map(async r=>{let i=await this.createBlobUrlFromStore(r);t[r]=i})),L(e,r=>t[r]??r)}filterAsset(e,t){let{query:n,tags:r,groups:i,excludeGroups:o}=t;if(n&&n.trim()!==""){let s=n.trim().toLowerCase().split(" "),a=e.label?.toLowerCase()??"",u=e.tags?.map(l=>l.toLowerCase())??[];if(!s.every(l=>a.includes(l)||u.some(c=>c.includes(l))))return!1}if(r){let s=Array.isArray(r)?r:[r];if(s.length>0&&(!e.tags||!s.every(a=>e.tags?.includes(a))))return!1}return!(i&&i.length>0&&(!e.groups||!i.some(s=>e.groups?.includes(s)))||o&&o.length>0&&e.groups&&e.groups.some(s=>o.includes(s)))}sortAssets(e,t){let{sortingOrder:n,sortKey:r,sortActiveFirst:i}=t,o=[...e];return!n||n==="None"||(r?o.sort((s,a)=>{let u,l;return r==="id"?(u=s.id,l=a.id):(u=s.meta?.[r]??null,l=a.meta?.[r]??null),u==null?n==="Ascending"?-1:1:l==null?n==="Ascending"?1:-1:typeof u=="string"&&typeof l=="string"?n==="Ascending"?u.localeCompare(l):l.localeCompare(u):n==="Ascending"?u<l?-1:u>l?1:0:u>l?-1:u<l?1:0}):n==="Descending"&&o.reverse(),i&&o.sort((s,a)=>s.active&&!a.active?-1:!s.active&&a.active?1:0)),o}};function L(e,t,n=""){if(e===null||typeof e!="object")return e;if(Array.isArray(e)){for(let r=0;r<e.length;r++){let i=n?`${n}[${r}]`:`[${r}]`;if(typeof e[r]=="string"&&e[r].startsWith("blob:")){let o=t(e[r],i);typeof o=="string"&&(e[r]=o)}else e[r]=L(e[r],t,i)}return e}for(let r in e)if(Object.prototype.hasOwnProperty.call(e,r)){let i=e[r],o=n?`${n}.${r}`:r;if(typeof i=="string"&&i.startsWith("blob:")){let s=t(i,o);typeof s=="string"&&(e[r]=s)}else e[r]=L(i,t,o)}return e}var tt=class{constructor(e,t,n){this.id=e,this.cesdk=t,this.assetSourceIds=n}async findAssets(e){try{let t=this.assetSourceIds.map(c=>this.cesdk.engine.asset.findAssets(c,{...e,perPage:9999,page:0})),n=await Promise.all(t),r=[];n.forEach(c=>{c?.assets&&(r=r.concat(c.assets))}),r.sort((c,d)=>{let p=c.meta?.insertedAt||0;return(d.meta?.insertedAt||0)-p});let{page:i,perPage:o}=e,s=i*o,a=s+o,u=r.slice(s,a),l=a<r.length?i+1:void 0;return{assets:u,currentPage:i,nextPage:l,total:r.length}}catch(t){console.error("Error finding assets:",t);return}}async getGroups(){let e=this.assetSourceIds.map(r=>this.cesdk.engine.asset.getGroups(r)),t=await Promise.all(e),n=new Set;return t.forEach(r=>{r.forEach(i=>n.add(i))}),Array.from(n)}addAsset(e){throw new Error("AggregatedAssetSource does not support adding assets")}removeAsset(e){throw new Error("AggregatedAssetSource does not support removing assets")}},Ut=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=Ut,Ht=typeof global=="object"&&global&&global.Object===Object&&global,rt=Ht,Qt=typeof self=="object"&&self&&self.Object===Object&&self,qt=rt||Qt||Function("return this")(),w=qt,Yt=w.Symbol,F=Yt,nt=Object.prototype,Zt=nt.hasOwnProperty,Wt=nt.toString,z=F?F.toStringTag:void 0;function Jt(e){var t=Zt.call(e,z),n=e[z];try{e[z]=void 0;var r=!0}catch{}var i=Wt.call(e);return r&&(t?e[z]=n:delete e[z]),i}var Xt=Jt,er=Object.prototype,tr=er.toString;function rr(e){return tr.call(e)}var nr=rr,ir="[object Null]",or="[object Undefined]",Be=F?F.toStringTag:void 0;function sr(e){return e==null?e===void 0?or:ir:Be&&Be in Object(e)?Xt(e):nr(e)}var Q=sr;function ar(e){return e!=null&&typeof e=="object"}var Oe=ar,Cs=Array.isArray;function lr(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var it=lr,ur="[object AsyncFunction]",cr="[object Function]",dr="[object GeneratorFunction]",pr="[object Proxy]";function fr(e){if(!it(e))return!1;var t=Q(e);return t==cr||t==dr||t==ur||t==pr}var gr=fr,mr=w["__core-js_shared__"],ge=mr,$e=function(){var e=/[^.]+$/.exec(ge&&ge.keys&&ge.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function yr(e){return!!$e&&$e in e}var br=yr,hr=Function.prototype,Ir=hr.toString;function vr(e){if(e!=null){try{return Ir.call(e)}catch{}try{return e+""}catch{}}return""}var M=vr,Or=/[\\^$.*+?()[\]{}|]/g,kr=/^\[object .+?Constructor\]$/,Cr=Function.prototype,Sr=Object.prototype,xr=Cr.toString,wr=Sr.hasOwnProperty,Ar=RegExp("^"+xr.call(wr).replace(Or,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Rr(e){if(!it(e)||br(e))return!1;var t=gr(e)?Ar:kr;return t.test(M(e))}var Er=Rr;function Pr(e,t){return e?.[t]}var Mr=Pr;function Dr(e,t){var n=Mr(e,t);return Er(n)?n:void 0}var N=Dr,Kr=N(w,"WeakMap"),ye=Kr;function Tr(e,t){return e===t||e!==e&&t!==t}var Lr=Tr,Fr=9007199254740991;function Nr(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Fr}var jr=Nr;var Ss=Object.prototype;var Br="[object Arguments]";function $r(e){return Oe(e)&&Q(e)==Br}var Ve=$r,ot=Object.prototype,Vr=ot.hasOwnProperty,Gr=ot.propertyIsEnumerable,xs=Ve(function(){return arguments}())?Ve:function(e){return Oe(e)&&Vr.call(e,"callee")&&!Gr.call(e,"callee")};var st=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ge=st&&typeof module=="object"&&module&&!module.nodeType&&module,zr=Ge&&Ge.exports===st,ze=zr?w.Buffer:void 0,ws=ze?ze.isBuffer:void 0;var _r="[object Arguments]",Ur="[object Array]",Hr="[object Boolean]",Qr="[object Date]",qr="[object Error]",Yr="[object Function]",Zr="[object Map]",Wr="[object Number]",Jr="[object Object]",Xr="[object RegExp]",en="[object Set]",tn="[object String]",rn="[object WeakMap]",nn="[object ArrayBuffer]",on="[object DataView]",sn="[object Float32Array]",an="[object Float64Array]",ln="[object Int8Array]",un="[object Int16Array]",cn="[object Int32Array]",dn="[object Uint8Array]",pn="[object Uint8ClampedArray]",fn="[object Uint16Array]",gn="[object Uint32Array]",S={};S[sn]=S[an]=S[ln]=S[un]=S[cn]=S[dn]=S[pn]=S[fn]=S[gn]=!0;S[_r]=S[Ur]=S[nn]=S[Hr]=S[on]=S[Qr]=S[qr]=S[Yr]=S[Zr]=S[Wr]=S[Jr]=S[Xr]=S[en]=S[tn]=S[rn]=!1;function mn(e){return Oe(e)&&jr(e.length)&&!!S[Q(e)]}var yn=mn;function bn(e){return function(t){return e(t)}}var hn=bn,at=typeof exports=="object"&&exports&&!exports.nodeType&&exports,_=at&&typeof module=="object"&&module&&!module.nodeType&&module,In=_&&_.exports===at,me=In&&rt.process,vn=function(){try{var e=_&&_.require&&_.require("util").types;return e||me&&me.binding&&me.binding("util")}catch{}}(),_e=vn,Ue=_e&&_e.isTypedArray,As=Ue?hn(Ue):yn;var On=Object.prototype,Rs=On.hasOwnProperty;function kn(e,t){return function(n){return e(t(n))}}var Cn=kn,Es=Cn(Object.keys,Object);var Sn=Object.prototype,Ps=Sn.hasOwnProperty;var xn=N(Object,"create"),U=xn;function wn(){this.__data__=U?U(null):{},this.size=0}var An=wn;function Rn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var En=Rn,Pn="__lodash_hash_undefined__",Mn=Object.prototype,Dn=Mn.hasOwnProperty;function Kn(e){var t=this.__data__;if(U){var n=t[e];return n===Pn?void 0:n}return Dn.call(t,e)?t[e]:void 0}var Tn=Kn,Ln=Object.prototype,Fn=Ln.hasOwnProperty;function Nn(e){var t=this.__data__;return U?t[e]!==void 0:Fn.call(t,e)}var jn=Nn,Bn="__lodash_hash_undefined__";function $n(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=U&&t===void 0?Bn:t,this}var Vn=$n;function j(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}j.prototype.clear=An;j.prototype.delete=En;j.prototype.get=Tn;j.prototype.has=jn;j.prototype.set=Vn;var He=j;function Gn(){this.__data__=[],this.size=0}var zn=Gn;function _n(e,t){for(var n=e.length;n--;)if(Lr(e[n][0],t))return n;return-1}var ne=_n,Un=Array.prototype,Hn=Un.splice;function Qn(e){var t=this.__data__,n=ne(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():Hn.call(t,n,1),--this.size,!0}var qn=Qn;function Yn(e){var t=this.__data__,n=ne(t,e);return n<0?void 0:t[n][1]}var Zn=Yn;function Wn(e){return ne(this.__data__,e)>-1}var Jn=Wn;function Xn(e,t){var n=this.__data__,r=ne(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var ei=Xn;function B(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}B.prototype.clear=zn;B.prototype.delete=qn;B.prototype.get=Zn;B.prototype.has=Jn;B.prototype.set=ei;var ie=B,ti=N(w,"Map"),H=ti;function ri(){this.size=0,this.__data__={hash:new He,map:new(H||ie),string:new He}}var ni=ri;function ii(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var oi=ii;function si(e,t){var n=e.__data__;return oi(t)?n[typeof t=="string"?"string":"hash"]:n.map}var oe=si;function ai(e){var t=oe(this,e).delete(e);return this.size-=t?1:0,t}var li=ai;function ui(e){return oe(this,e).get(e)}var ci=ui;function di(e){return oe(this,e).has(e)}var pi=di;function fi(e,t){var n=oe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var gi=fi;function $(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}$.prototype.clear=ni;$.prototype.delete=li;$.prototype.get=ci;$.prototype.has=pi;$.prototype.set=gi;var lt=$;function mi(){this.__data__=new ie,this.size=0}var yi=mi;function bi(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var hi=bi;function Ii(e){return this.__data__.get(e)}var vi=Ii;function Oi(e){return this.__data__.has(e)}var ki=Oi,Ci=200;function Si(e,t){var n=this.__data__;if(n instanceof ie){var r=n.__data__;if(!H||r.length<Ci-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new lt(r)}return n.set(e,t),this.size=n.size,this}var xi=Si;function q(e){var t=this.__data__=new ie(e);this.size=t.size}q.prototype.clear=yi;q.prototype.delete=hi;q.prototype.get=vi;q.prototype.has=ki;q.prototype.set=xi;var wi=Object.prototype,Ms=wi.propertyIsEnumerable;var Ai=N(w,"DataView"),be=Ai,Ri=N(w,"Promise"),he=Ri,Ei=N(w,"Set"),Ie=Ei,Qe="[object Map]",Pi="[object Object]",qe="[object Promise]",Ye="[object Set]",Ze="[object WeakMap]",We="[object DataView]",Mi=M(be),Di=M(H),Ki=M(he),Ti=M(Ie),Li=M(ye),T=Q;(be&&T(new be(new ArrayBuffer(1)))!=We||H&&T(new H)!=Qe||he&&T(he.resolve())!=qe||Ie&&T(new Ie)!=Ye||ye&&T(new ye)!=Ze)&&(T=function(e){var t=Q(e),n=t==Pi?e.constructor:void 0,r=n?M(n):"";if(r)switch(r){case Mi:return We;case Di:return Qe;case Ki:return qe;case Ti:return Ye;case Li:return Ze}return t});var Ds=w.Uint8Array;var Fi="__lodash_hash_undefined__";function Ni(e){return this.__data__.set(e,Fi),this}var ji=Ni;function Bi(e){return this.__data__.has(e)}var $i=Bi;function ve(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new lt;++t<n;)this.add(e[t])}ve.prototype.add=ve.prototype.push=ji;ve.prototype.has=$i;var Je=F?F.prototype:void 0,Ks=Je?Je.valueOf:void 0;var Vi=Object.prototype,Ts=Vi.hasOwnProperty;var Gi=Object.prototype,Ls=Gi.hasOwnProperty;var Fs=new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,"i"),Ns=new RegExp(/[A-Fa-f0-9]{1}/,"g"),js=new RegExp(/[A-Fa-f0-9]{2}/,"g");function ut(e){return{"image/png":"png","image/jpeg":"jpg","image/webp":"webp","image/gif":"gif","image/svg+xml":"svg"}[e]??"png"}async function ct(e,t){if(e.startsWith("buffer:")){let n=await t.editor.getMimeType(e),r=t.editor.getBufferLength(e),i=t.editor.getBufferData(e,0,r),o=new Blob([i],{type:n});return URL.createObjectURL(o)}else return e}async function Y(e,t){let n=await ct(e,t);return new Promise((r,i)=>{let o=new Image;o.onload=()=>{r({width:o.width,height:o.height})},o.onerror=i,o.src=n})}async function dt(e,t,n){let r,i=t.block.getFill(e),o=t.block.getSourceSet(i,"fill/image/sourceSet"),[s]=o;if(s==null){if(r=t.block.getString(i,"fill/image/imageFileURI"),r==null)throw new Error("No image source/uri found")}else r=s.uri;if(n?.throwErrorIfSvg&&await t.editor.getMimeType(r)==="image/svg+xml")throw new Error("SVG images are not supported");return ct(r,t)}function zi(e){return e!==void 0}var A=zi;function _i(e,t){let{cesdk:n}=t;if(n==null)return{};let r=t.propertyKey??"style",i=Hi(e);n.i18n.setTranslations({en:{[`panel.${i}`]:"Select Style",[`${e}.${r}`]:"Style"}});let o=qi({baseURL:t.baseURL??"https://cdn.img.ly/assets/plugins/plugin-ai-image-generation-web/v1/gpt-image-1/",includeNone:!0}),s=o;t.styles!=null&&(Array.isArray(t.styles)?s=t.styles:typeof t.styles=="function"&&(s=t.styles(o)));let a=Yi({cesdk:n,providerId:e,styles:s}),u=a.id;return Zi(a,{cesdk:n}),Ui({providerId:e,cesdk:n,panelId:i,entryId:u}),{[t.propertyKeyForPrompt??"prompt"]:(c,d)=>{let p=c.state("prompt","");return c.builder.TextArea(`${d.id}`,{inputLabel:t.i18n?.prompt?.inputLabel??t.propertyKeyForPrompt??"prompt",placeholder:t.i18n?.prompt?.placeholder,...p}),()=>{let[g]=a.getActiveAssetIds(),I=a.getAsset(g);return{id:d.id,type:"string",value:I?.meta?.prompt==null?p.value:`${p.value}; ${I.meta.prompt}`}}},[r]:(c,d)=>{let{builder:p,state:g}=c;if(s.length>0){let I=g("style",s[0]);return p.Button(`${d.id}`,{inputLabel:`${e}.${d.id}`,icon:"@imgly/Appearance",isDisabled:s.length===0,trailingIcon:"@imgly/ChevronRight",label:I.value.label,labelAlignment:"left",onClick:()=>{let h={onSelect:async b=>{a.clearActiveAssets(),a.setAssetActive(b.id),I.setValue({id:b.id,label:b.label??b.id}),n.ui.closePanel(i)}};n.ui.openPanel(i,{payload:h})}}),()=>({id:d.id,type:"string",value:I.value.id})}return()=>({id:d.id,type:"string",value:"none"})}}}function Ui(e){let{providerId:t,cesdk:n,panelId:r,entryId:i}=e;n?.ui.registerPanel(r,({builder:o,payload:s})=>{s?.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 a=>{s?.onSelect?.(a)}})})}function Hi(e){return`ly.img.ai.${e}.styleSelection`}var Qi=[{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 qi(e){return Qi.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(A)}var Yi=e=>{let t=e.styles.map(s=>({...s,meta:{prompt:s.prompt}})),n=e.cesdk.engine.asset.findAllSources(),r=`${e.providerId}/styles`;for(;n.includes(r);)r+=`-${Math.random().toString(36).substring(2,5)}`;let i=new Xe(r,t),o=e.styles[0];return i.setAssetActive(o.id),i},Zi=(e,t)=>{t.cesdk.engine.asset.addSource(e),t.cesdk.ui.addAssetLibraryEntry({id:e.id,sourceIds:[e.id],gridItemHeight:"square",gridBackgroundType:"cover",cardLabel:({label:n})=>n,cardLabelPosition:()=>"below"})},pt=_i;function Wi(e,t,n){let r=`ly.img.${e}`,i=n.ui.getAssetLibraryEntry(r);if(i!=null)return n.ui.updateAssetLibraryEntry(r,{sourceIds:[...i.sourceIds,...t]}),i.id}var Ji=Wi;var Z=class e{constructor(){this.actions=new Map;this.subscribers=new Map}static get(){let t="__imgly_action_registry__",n=typeof window<"u"?window:globalThis;return n[t]||(n[t]=new e),n[t]}register(t){return this.actions.set(t.id,t),this.notifySubscribers(t,"registered"),()=>{this.actions.get(t.id)===t&&(this.actions.delete(t.id),this.notifySubscribers(t,"unregistered"))}}getAll(){return Array.from(this.actions.values())}getBy(t){return this.getAll().filter(r=>this.matchesFilters(r,t))}subscribe(t){return this.subscribers.set(t,null),()=>{this.subscribers.delete(t)}}subscribeBy(t,n){return this.subscribers.set(n,t),()=>{this.subscribers.delete(n)}}notifySubscribers(t,n){this.subscribers.forEach((r,i)=>{if(r===null){i(t,n);return}this.matchesFilters(t,r)&&i(t,n)})}matchesFilters(t,n){return!(n.type&&t.type!==n.type||n.pluginId&&t.type==="plugin"&&t.pluginId!==n.pluginId||n.id&&t.id!==n.id||n.kind&&(t.type!=="quick"||t.kind!==n.kind))}};var D=class e{constructor(){this.providers=new Map}static get(){let t="__imgly_provider_registry__",n=typeof window<"u"?window:globalThis;return n[t]||(n[t]=new e),n[t]}register(t){return this.providers.has(t.provider.id)&&console.warn(`Provider with ID "${t.provider.id}" is already registered`),this.providers.set(t.provider.id,t),()=>{this.providers.get(t.provider.id)===t&&this.providers.delete(t.provider.id)}}getAll(){return Array.from(this.providers.values())}getById(t){return this.providers.get(t)}getByKind(t){return this.getAll().filter(({provider:n})=>n.kind===t)}};function ke(e){let t=e.filter(n=>!!n);return n=>async(r,i)=>{let o=[],s=d=>{o.push(d)},a=async(d,p,g)=>{if(d>=t.length)return n(p,g);let I=t[d],h=async(f,y)=>a(d+1,f,y),b={...g,addDisposer:s};return I(p,b,h)},u={...i,addDisposer:s};return{result:await a(0,r,u),dispose:async()=>{for(let d=o.length-1;d>=0;d--)try{await o[d]()}catch(p){console.error("Error in disposer:",p)}o.length=0}}}}function Xi({enable:e=!0}){return async(n,r,i)=>{if(!e)return i(n,r);console.group("[GENERATION]"),console.log("Generating with input:",JSON.stringify(n,null,2));let o,s=Date.now();try{return o=await i(n,r),o}finally{o!=null&&(console.log(`Generation took ${Date.now()-s}ms`),console.log("Generation result:",JSON.stringify(o,null,2))),console.groupEnd()}}}var Ce=Xi;var eo="ly.img.ai",Se="ly.img.ai.temp";async function ft(e,t){return e.engine.asset.findAllSources().includes(Se)||e.engine.asset.addLocalSource(Se),e.engine.asset.apply(Se,t)}function to(e){return`${eo}.${e}`}function gt(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 n=e;return"message"in n&&typeof n.message=="string"?n.message:"cause"in n&&typeof n.cause=="string"?n.cause:"detail"in n&&typeof n.detail=="object"&&n.detail!==null&&"message"in n.detail&&typeof n.detail.message=="string"?n.detail.message:"error"in n&&typeof n.error=="object"&&n.error!==null&&"message"in n.error&&typeof n.error.message=="string"?n.error.message:t}return typeof e=="string"?e:String(e)||t}function xe(){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 ro(e){return new Promise((t,n)=>{try{let r=document.createElement("video");r.style.display="none",r.addEventListener("loadedmetadata",()=>{r.duration===1/0?(r.currentTime=1e101,setTimeout(()=>{r.currentTime=0,t(r.duration),document.body.removeChild(r)},50)):(t(r.duration),document.body.removeChild(r))}),r.addEventListener("error",()=>{document.body.removeChild(r),n(new Error(`Failed to load video from ${e}`))}),r.src=e,document.body.appendChild(r)}catch(r){n(r)}})}function we(e,t=0,n="image/jpeg",r=.8){return new Promise((i,o)=>{try{let s=document.createElement("video");s.crossOrigin="anonymous",s.style.display="none",s.addEventListener("loadedmetadata",()=>{s.currentTime=Math.min(t,s.duration),s.addEventListener("seeked",()=>{let a=document.createElement("canvas");a.width=s.videoWidth,a.height=s.videoHeight;let u=a.getContext("2d");if(!u){document.body.removeChild(s),o(new Error("Failed to create canvas context"));return}u.drawImage(s,0,0,a.width,a.height);try{let l=a.toDataURL(n,r);document.body.removeChild(s),i(l)}catch(l){document.body.removeChild(s),o(new Error(`Failed to create thumbnail: ${l instanceof Error?l.message:String(l)}`))}},{once:!0})}),s.addEventListener("error",()=>{document.body.removeChild(s),o(new Error(`Failed to load video from ${e}`))}),s.src=e,document.body.appendChild(s)}catch(s){o(s)}})}function se(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 W(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 V(e){return e instanceof Error&&e.name==="AbortError"}function Ae(e,t,n){let r=`${t}.iconSetAdded`;e.ui.experimental.hasGlobalStateValue(r)||(e.ui.addIconSet(t,n),e.ui.experimental.setGlobalStateValue(r,!0))}function no(e){return async(n,r,i)=>{let o=await i(n,r);return W(o)?o:await e(o)}}var io=no;var Re=new Map,ae=class{constructor(t,n,r){this.db=null;this.dbVersion=1;this.isInitializing=!1;this.initPromise=null;this.instanceId=t,this.dbName=n??"ly.img.ai.rateLimit",this.storeName=r??"rateLimits"}async initialize(){if(!this.db)return this.isInitializing?this.initPromise:(this.isInitializing=!0,this.initPromise=new Promise((t,n)=>{try{let r=indexedDB.open(this.dbName,this.dbVersion);r.onerror=i=>{this.isInitializing=!1,console.error("Failed to open IndexedDB for rate limiting:",i),n(new Error("Failed to open IndexedDB for rate limiting"))},r.onupgradeneeded=i=>{let o=i.target.result;o.objectStoreNames.contains(this.storeName)||o.createObjectStore(this.storeName,{keyPath:"id"})},r.onsuccess=i=>{this.db=i.target.result,this.isInitializing=!1,t()}}catch(r){this.isInitializing=!1,console.error("Error initializing IndexedDB:",r),n(r)}}),this.initPromise)}async getTracker(t){try{await this.initialize();let r=`${typeof this.instanceId=="symbol"?this.instanceId.description||"":this.instanceId}_${t}`;return await new Promise((i,o)=>{let u=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).get(r);u.onsuccess=()=>{u.result?i(u.result.data):i(null)},u.onerror=()=>{console.error(`Failed to get tracker for key ${r}:`,u.error),o(u.error)}})}catch(n){return console.error("Error getting tracker from IndexedDB:",n),Promise.reject(n)}}async saveTracker(t,n){try{await this.initialize();let i=`${typeof this.instanceId=="symbol"?this.instanceId.description||"":this.instanceId}_${t}`;return await new Promise((o,s)=>{let a=this.db.transaction(this.storeName,"readwrite");a.objectStore(this.storeName).put({id:i,data:n}),a.oncomplete=()=>{o()},a.onerror=()=>{console.error(`Failed to save tracker for key ${i}:`,a.error),s(a.error)}})}catch(r){return console.error("Error saving tracker to IndexedDB:",r),Promise.reject(r)}}static isAvailable(){return typeof indexedDB<"u"}close(){this.db&&(this.db.close(),this.db=null)}};function oo(e){let{maxRequests:t,timeWindowMs:n,keyFn:r=()=>"global",onRateLimitExceeded:i,dbName:o}=e,a=`rate-limit-middleware-${t}-${n}`,u=ae.isAvailable(),l=u?new ae(a,o):null;Re.has(a)||Re.set(a,{});let c=Re.get(a);return async(p,g,I)=>{if(typeof e.disable=="function"?e.disable():e.disable)return I(p,g);let h=typeof r=="string"?r:r(p,g),b=Date.now(),f;if(u&&l)try{let y=await l.getTracker(h);y?f=y:f={timestamps:[],lastCleanup:b}}catch(y){console.error("IndexedDB access failed, using in-memory fallback:",y),c[h]||(c[h]={timestamps:[],lastCleanup:b}),f=c[h]}else c[h]||(c[h]={timestamps:[],lastCleanup:b}),f=c[h];if(b-f.lastCleanup>n&&(f.timestamps=f.timestamps.filter(y=>b-y<n),f.lastCleanup=b),f.timestamps.length>=t){let y=Math.min(...f.timestamps),v=Math.max(0,n-(b-y));if(i){let m={key:h,currentCount:f.timestamps.length,maxRequests:t,timeWindowMs:n,remainingTimeMs:v};if(!await i(p,g,m))throw new DOMException("Operation aborted: Rate limit exceeded","AbortError")}else throw new Error("Rate limit exceeded. Please try again later.")}if(f.timestamps.push(b),u&&l)try{await l.saveTracker(h,f)}catch(y){console.error("Failed to save tracker to IndexedDB:",y),c[h]=f}else c[h]=f;return I(p,g)}}var so=oo;function ao(e,t,n){let r="ai-plugin-version",i="ai-plugin-version-warning-shown";try{let o=e.ui.experimental.getGlobalStateValue(r);o?o!==n&&(e.ui.experimental.getGlobalStateValue(i,!1)||(console.warn(`[IMG.LY AI Plugins] Version mismatch detected!
|
|
2
|
+
Plugin "${t}" is using version ${n}, but other AI plugins are using version ${o}.
|
|
3
|
+
This may cause compatibility issues. Please ensure all AI plugins (@imgly/plugin-ai-*) use the same version.
|
|
4
|
+
Consider updating all AI plugins to the same version for optimal compatibility.`),e.ui.experimental.setGlobalStateValue(i,!0))):e.ui.experimental.setGlobalStateValue(r,n)}catch(o){console.debug("[IMG.LY AI Plugins] Could not check plugin version consistency:",o)}}function lo(e){let{cesdk:t,panelId:n}=e;n.startsWith("ly.img.ai.")||console.warn(`Dock components for AI generation should open a panel with an id starting with "ly.img.ai." \u2013 "${n}" was provided.`);let r=`${n}.dock`;t.ui.registerComponent(r,({builder:i})=>{let o=t.ui.isPanelOpen(n);i.Button(`${n}.dock.button`,{label:`${n}.dock.label`,isSelected:o,icon:"@imgly/Sparkle",onClick:()=>{t.ui.findAllPanels().forEach(s=>{s.startsWith("ly.img.ai.")&&t.ui.closePanel(s),!o&&s==="//ly.img.panel/assetLibrary"&&t.ui.closePanel(s)}),o?t.ui.closePanel(n):t.ui.openPanel(n)}})})}var uo=lo;function co(){return({engine:e})=>{let t=e.block.findAllSelected();if(t==null||t.length!==1)return!1;let[n]=t;if(!e.block.supportsFill(n)||e.block.getKind(n)==="sticker"||!["//ly.img.ubq/graphic","//ly.img.ubq/page"].includes(e.block.getType(n)))return!1;let r=e.block.getFill(n);return e.block.getType(r)==="//ly.img.ubq/fill/image"}}var po=co;function fo(e,t){let{cesdk:n,provider:r,getInput:i}=t;console.error("Generation failed:",e),go(n,r.output.notification,()=>({input:i?.().input,error:e}))||n.ui.showNotification({type:"error",message:gt(e)})}function go(e,t,n){let r=t?.error;if(r==null||!(typeof r.show=="function"?r.show(n()):r.show))return!1;let o=typeof r.message=="function"?r.message(n()):r.message??"common.ai-generation.failed",s=r.action!=null?{label:typeof r.action.label=="function"?r.action.label(n()):r.action.label,onClick:()=>{r?.action?.onClick(n())}}:void 0;return e.ui.showNotification({type:"error",message:o,action:s}),!0}var Ee=fo;var mo="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjMyMyIgdmlld0JveD0iMCAwIDMyMyAzMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjMiIGhlaWdodD0iMzIzIiBmaWxsPSIjRTlFQkVEIi8+CjxnIG9wYWNpdHk9IjAuMyI+CjxwYXRoIGQ9Ik0xMTYgMTg0VjE5MS41QzExNiAxOTkuNzg0IDEyMi43MTYgMjA2LjUgMTMxIDIwNi41SDE5MUMxOTkuMjg0IDIwNi41IDIwNiAxOTkuNzg0IDIwNiAxOTEuNVYxMzEuNUMyMDYgMTIzLjIxNiAxOTkuMjg0IDExNi41IDE5MSAxMTYuNUwxOTAuOTk1IDEyNi41QzE5My43NTcgMTI2LjUgMTk2IDEyOC43MzkgMTk2IDEzMS41VjE5MS41QzE5NiAxOTQuMjYxIDE5My43NjEgMTk2LjUgMTkxIDE5Ni41SDEzMUMxMjguMjM5IDE5Ni41IDEyNiAxOTQuMjYxIDEyNiAxOTEuNVYxODRIMTE2WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTY2LjQ5NCAxMDUuOTI0QzE2NS44NjkgMTA0LjM0MiAxNjMuNjI5IDEwNC4zNDIgMTYzLjAwNSAxMDUuOTI0TDE1OS43NDUgMTE0LjE5MUMxNTkuNTU0IDExNC42NzQgMTU5LjE3MiAxMTUuMDU3IDE1OC42ODggMTE1LjI0N0wxNTAuNDIyIDExOC41MDhDMTQ4LjgzOSAxMTkuMTMyIDE0OC44MzkgMTIxLjM3MiAxNTAuNDIyIDEyMS45OTZMMTU4LjY4OCAxMjUuMjU2QzE1OS4xNzIgMTI1LjQ0NyAxNTkuNTU0IDEyNS44MjkgMTU5Ljc0NSAxMjYuMzEzTDE2My4wMDUgMTM0LjU3OUMxNjMuNjI5IDEzNi4xNjIgMTY1Ljg2OSAxMzYuMTYyIDE2Ni40OTQgMTM0LjU3OUwxNjkuNzU0IDEyNi4zMTNDMTY5Ljk0NCAxMjUuODI5IDE3MC4zMjcgMTI1LjQ0NyAxNzAuODEgMTI1LjI1NkwxNzkuMDc3IDEyMS45OTZDMTgwLjY2IDEyMS4zNzIgMTgwLjY2IDExOS4xMzIgMTc5LjA3NyAxMTguNTA4TDE3MC44MSAxMTUuMjQ3QzE3MC4zMjcgMTE1LjA1NyAxNjkuOTQ0IDExNC42NzQgMTY5Ljc1NCAxMTQuMTkxTDE2Ni40OTQgMTA1LjkyNFoiIGZpbGw9IiM4RjhGOEYiLz4KPHBhdGggZD0iTTEzMy4wMDUgMTI4LjQyNEMxMzMuNjI5IDEyNi44NDIgMTM1Ljg2OSAxMjYuODQyIDEzNi40OTQgMTI4LjQyNEwxNDEuODc1IDE0Mi4wN0MxNDIuMDY2IDE0Mi41NTMgMTQyLjQ0OCAxNDIuOTM1IDE0Mi45MzIgMTQzLjEyNkwxNTYuNTc3IDE0OC41MDhDMTU4LjE2IDE0OS4xMzIgMTU4LjE2IDE1MS4zNzIgMTU2LjU3NyAxNTEuOTk2TDE0Mi45MzIgMTU3LjM3OEMxNDIuNDQ4IDE1Ny41NjggMTQyLjA2NiAxNTcuOTUxIDE0MS44NzUgMTU4LjQzNEwxMzYuNDk0IDE3Mi4wNzlDMTM1Ljg2OSAxNzMuNjYyIDEzMy42MjkgMTczLjY2MiAxMzMuMDA1IDE3Mi4wNzlMMTI3LjYyMyAxNTguNDM0QzEyNy40MzMgMTU3Ljk1MSAxMjcuMDUgMTU3LjU2OCAxMjYuNTY3IDE1Ny4zNzhMMTEyLjkyMiAxNTEuOTk2QzExMS4zMzkgMTUxLjM3MiAxMTEuMzM5IDE0OS4xMzIgMTEyLjkyMiAxNDguNTA4TDEyNi41NjcgMTQzLjEyNkMxMjcuMDUgMTQyLjkzNSAxMjcuNDMzIDE0Mi41NTMgMTI3LjYyMyAxNDIuMDdMMTMzLjAwNSAxMjguNDI0WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTk1Ljk5OSAxODQuMDA0VjE5MS41MDJDMTk1Ljk5OSAxOTQuMjYzIDE5My43NjEgMTk2LjUwMiAxOTAuOTk5IDE5Ni41MDJIMTQ3LjY2OEwxNzIuODc5IDE1OC42ODRDMTc0LjM2MyAxNTYuNDU4IDE3Ny42MzUgMTU2LjQ1OCAxNzkuMTIgMTU4LjY4NEwxOTUuOTk5IDE4NC4wMDRaIiBmaWxsPSIjOEY4RjhGIi8+CjwvZz4KPC9zdmc+Cg==",le=mo;function yo(e,t,n){switch(t){case"image":return bo(e,n[t]);case"video":return ho(e,n[t]);case"sticker":return Io(e,n[t]);default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function bo(e,t){let n=t.width,r=t.height;return{id:e,meta:{previewUri:le,fillType:"//ly.img.ubq/fill/image",kind:"image",width:n,height:r}}}function ho(e,t){let n=t.width,r=t.height;return{id:e,label:t.label,meta:{previewUri:le,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:n,height:r}}}function Io(e,t){let n=t.width,r=t.height;return{id:e,meta:{previewUri:le,fillType:"//ly.img.ubq/fill/image",kind:"sticker",width:n,height:r}}}var mt=yo;async function vo(e,t,n,r){switch(t){case"image":{if(r.kind!=="image")throw new Error(`Output kind does not match the expected type: ${r.kind} (expected: image)`);return Oo(e,n[t],r)}case"video":{if(r.kind!=="video")throw new Error(`Output kind does not match the expected type: ${r.kind} (expected: video)`);return ko(e,n[t],r)}case"audio":{if(r.kind!=="audio")throw new Error(`Output kind does not match the expected type: ${r.kind} (expected: audio)`);return Co(e,n[t],r)}case"sticker":{if(r.kind!=="sticker")throw new Error(`Output kind does not match the expected type: ${r.kind} (expected: sticker)`);return So(e,n[t],r)}default:throw new Error(`Unsupported output kind for creating placeholder block: ${t}`)}}function Oo(e,t,n){let r=t.width,i=t.height;return{id:e,label:t.label,meta:{uri:n.url,thumbUri:n.url,fillType:"//ly.img.ubq/fill/image",kind:"image",width:r,height:i},payload:{sourceSet:[{uri:n.url,width:r,height:i}]}}}async function ko(e,t,n){let r=t.width,i=t.height,o=await we(n.url,0);return{id:e,label:t.label,meta:{uri:n.url,thumbUri:o,mimeType:"video/mp4",kind:"video",fillType:"//ly.img.ubq/fill/video",duration:t.duration.toString(),width:r,height:i}}}function Co(e,t,n){return{id:e,label:t.label,meta:{uri:n.url,thumbUri:n.thumbnailUrl,blockType:"//ly.img.ubq/audio",mimeType:"audio/x-m4a",duration:n.duration.toString()}}}function So(e,t,n){let r=t.width,i=t.height;return{id:e,label:t.label,meta:{uri:n.url,thumbUri:n.url,fillType:"//ly.img.ubq/fill/image",kind:"sticker",width:r,height:i},payload:{sourceSet:[{uri:n.url,width:r,height:i}]}}}var Pe=vo;function xo(e){switch(e.userFlow){case"placeholder":return Ao(e);case"generation-only":return wo(e);default:throw new Error(`Unknown user flow: ${e.userFlow}. Expected 'placeholder' or 'generation-only'.`)}}function wo(e){let{cesdk:t,abortSignal:n}=e;return async r=>{try{let i=e.kind,o=await e.getBlockInput(r);if(E(t,n))return{status:"aborted"};let s=await e.generate(r,{middlewares:[...e.middlewares??[]],debug:e.debug,dryRun:e.dryRun,abortSignal:n});if(E(t,n))return{status:"aborted"};if(s.status!=="success")return s;if(s.type==="async")throw new Error("Async generation is not supported in this context yet.");if(E(t,n))return{status:"aborted"};if(e.historyAssetSourceId!=null){let a=xe(),u=await Pe(a,i,o,s.output),l={...u,id:`${Date.now()}-${u.id}`,label:u.label!=null?{en:u.label}:{},tags:{}};t.engine.asset.addAssetToSource(e.historyAssetSourceId,l)}else e.debug&&console.log("No asset source ID found in history and generation only was requested. Doing nothing. If no middleware is adding functionality this could be a bug.");return s}catch(i){return{status:"error",message:i instanceof Error?i.message:String(i)}}}}function Ao(e){let{cesdk:t,abortSignal:n}=e,r;return async i=>{try{let o=e.kind,s=await e.getBlockInput(i);if(E(t,n))return{status:"aborted"};let a=xe(),u=mt(a,o,s);if(r=await ft(t,u),E(t,n,r))return{status:"aborted"};if(r!=null&&e.kind==="video"){let d=t.engine.block.getPositionX(r),p=t.engine.block.getPositionY(r),g=t.engine.block.duplicate(r);t.engine.block.setPositionX(g,d),t.engine.block.setPositionY(g,p),t.engine.block.destroy(r),r=g}if(r==null)throw new Error("Could not create placeholder block");t.engine.block.setState(r,{type:"Pending",progress:0});let l=await e.generate(i,{middlewares:[...e.middlewares??[]],debug:e.debug,dryRun:e.dryRun,abortSignal:n});if(E(t,n,r))return{status:"aborted"};if(l.status!=="success")return l;if(l.type==="async")throw new Error("Async generation is not supported in this context yet.");if(!t.engine.block.isValid(r))return{status:"aborted",message:"Placeholder block was destroyed before generation completed."};let c=await Pe(a,o,s,l.output);if(E(t,n,r))return{status:"aborted"};if(e.debug&&console.log("Updating placeholder in scene:",JSON.stringify(c,void 0,2)),await t.engine.asset.defaultApplyAssetToBlock(c,r),E(t,n,r))return{status:"aborted"};if(e.historyAssetSourceId!=null){let d={...c,id:`${Date.now()}-${c.id}`,label:c.label!=null?{en:c.label}:{},tags:{}};t.engine.asset.addAssetToSource(e.historyAssetSourceId,d)}return t.engine.block.isValid(r)&&t.engine.block.setState(r,{type:"Ready"}),l}catch(o){return r!=null&&t.engine.block.isValid(r)&&(V(o)?t.engine.block.destroy(r):t.engine.block.setState(r,{type:"Error",error:"Unknown"})),{status:"error",message:o instanceof Error?o.message:String(o)}}}}function E(e,t,n){return t.aborted?(n!=null&&e.engine.block.isValid(n)&&e.engine.block.destroy(n),!0):!1}var yt=xo;function G(e){return`${e}.generating`}function bt(e){return`${e}.abort`}function Ro(e,t,n,r,i,o,s){let{builder:a,experimental:u}=e,{cesdk:l,includeHistoryLibrary:c=!0}=o,{id:d,output:{abortable:p}}=t,g=u.global(bt(d),()=>{}),I=u.global(G(d),!1),h,b=I.value&&p,f=()=>{b&&(g.value(),I.setValue(!1),g.setValue(()=>{}))},y;if(o.requiredInputs!=null&&o.requiredInputs.length>0){let m=r();y=o.requiredInputs.every(O=>!m.input[O])}let v=u.global(`${d}.confirmationDialogId`,void 0);a.Section(`${d}.generate.section`,{children:()=>{a.Button(`${d}.generate`,{label:["common.generate",`panel.${d}.generate`],isLoading:I.value,color:"accent",isDisabled:y,suffix:b?{icon:"@imgly/Cross",color:"danger",tooltip:[`panel.${d}.abort`,"common.cancel"],onClick:()=>{let m=l.ui.showDialog({type:"warning",content:"panel.ly.img.ai.generation.confirmCancel.content",cancel:{label:"common.close",onClick:({id:O})=>{l.ui.closeDialog(O),v.setValue(void 0)}},actions:{label:"panel.ly.img.ai.generation.confirmCancel.confirm",color:"danger",onClick:({id:O})=>{f(),l.ui.closeDialog(O),v.setValue(void 0)}}});v.setValue(m)}}:void 0,onClick:async()=>{h=new AbortController;let m=h.signal;await(async()=>{try{I.setValue(!0),g.setValue(()=>{s.debug&&console.log("Aborting generation"),h?.abort()});let k=await yt({kind:t.kind,generate:n,historyAssetSourceId:o.historyAssetSourceId,userFlow:o.createPlaceholderBlock?"placeholder":"generation-only",getBlockInput:i,abortSignal:m,cesdk:l,debug:s.debug,dryRun:s.dryRun})(r().input);if(k.status==="aborted")return;if(k.status==="error"){Ee(k.message,{cesdk:l,provider:t,getInput:r});return}if(k.status==="success"&&k.type==="sync"){let C=t.output.notification;Eo(l,C,()=>({input:r().input,output:k.output}))}}catch(k){if(V(k))return;Ee(k,{cesdk:l,provider:t,getInput:r})}finally{h=void 0,I.setValue(!1),g.setValue(()=>{}),v.value!=null&&(l.ui.closeDialog(v.value),v.setValue(void 0))}})()}}),t.output.generationHintText!=null&&a.Text(`${d}.generation-hint`,{align:"center",content:t.output.generationHintText})}}),c&&o.historyAssetLibraryEntryId!=null&&a.Library(`${d}.history.library`,{entries:[o.historyAssetLibraryEntryId]})}function Eo(e,t,n){let r=t?.success;if(r==null||!(typeof r.show=="function"?r.show(n()):r.show))return!1;let o=typeof r.message=="function"?r.message(n()):r.message??"common.ai-generation.success",s=r.action!=null?{label:typeof r.action.label=="function"?r.action.label(n()):r.action.label,onClick:()=>{r?.action?.onClick(n())}}:void 0;return e.ui.showNotification({type:"success",message:o,action:s,duration:r.duration}),!0}var ue=Ro;async function Po({options:e,provider:t,panelInput:n,config:r},i){if(n==null)return;let{cesdk:o}=e,{id:s}=t,a=n.render;return l=>{let{state:c}=l,d=c(G(s),{isGenerating:!1,abort:()=>{}}).value.isGenerating,{getInput:p,getBlockInput:g}=a(l,{cesdk:o,isGenerating:d});return ue(l,t,i,p,g,{...e,includeHistoryLibrary:n.includeHistoryLibrary??!0,createPlaceholderBlock:n.userFlow==="placeholder"},r),p}}var ht=Po;function Me(e,t){if(!t.startsWith("#/"))throw new Error(`External references are not supported: ${t}`);let n=t.substring(2).split("/"),r=e;for(let i of n){if(r==null)throw new Error(`Invalid reference path: ${t}`);r=r[i]}if(r===void 0)throw new Error(`Reference not found: ${t}`);return r}function J(e,t,n=new Set){if(t==null||n.has(t))return t;if(n.add(t),t.$ref&&typeof t.$ref=="string"){let r=Me(e,t.$ref),o={...J(e,r,n)};for(let s in t)Object.prototype.hasOwnProperty.call(t,s)&&s!=="$ref"&&(o[s]=J(e,t[s],n));return o}if(Array.isArray(t))return t.map(r=>J(e,r,n));if(typeof t=="object"){let r={};for(let i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=J(e,t[i],n));return r}return t}function De(e){return J(e,{...e})}function It(e,t=!1){let n=a=>(t&&console.log(`OpenAPI Schema validation failed: ${a}`),!1);if(typeof e!="object"||e===null)return n(`Input is ${e===null?"null":typeof e}, not an object`);let r=e;if(!(typeof r.type=="string"||Array.isArray(r.enum)||typeof r.properties=="object"||typeof r.items=="object"||typeof r.allOf=="object"||typeof r.anyOf=="object"||typeof r.oneOf=="object"||typeof r.not=="object"))return n("Missing required schema-defining properties (type, enum, properties, items, allOf, anyOf, oneOf, not)");if(r.type!==void 0){let a=["string","number","integer","boolean","array","object","null"];if(typeof r.type=="string"){if(!a.includes(r.type))return n(`Invalid type: ${r.type}. Must be one of ${a.join(", ")}`)}else if(Array.isArray(r.type)){for(let u of r.type)if(typeof u!="string"||!a.includes(u))return n(`Array of types contains invalid value: ${u}. Must be one of ${a.join(", ")}`)}else return n(`Type must be a string or array of strings, got ${typeof r.type}`)}if(r.items!==void 0&&(typeof r.items!="object"||r.items===null))return n(`Items must be an object, got ${r.items===null?"null":typeof r.items}`);if(r.properties!==void 0&&(typeof r.properties!="object"||r.properties===null))return n(`Properties must be an object, got ${r.properties===null?"null":typeof r.properties}`);let o=["allOf","anyOf","oneOf"];for(let a of o)if(r[a]!==void 0){if(!Array.isArray(r[a]))return n(`${a} must be an array, got ${typeof r[a]}`);for(let u=0;u<r[a].length;u++){let l=r[a][u];if(typeof l!="object"||l===null)return n(`Item ${u} in ${a} must be an object, got ${l===null?"null":typeof l}`)}}if(r.not!==void 0&&(typeof r.not!="object"||r.not===null))return n(`'not' must be an object, got ${r.not===null?"null":typeof r.not}`);if(r.additionalProperties!==void 0&&typeof r.additionalProperties!="boolean"&&(typeof r.additionalProperties!="object"||r.additionalProperties===null))return n(`additionalProperties must be a boolean or an object, got ${r.additionalProperties===null?"null":typeof r.additionalProperties}`);if(r.format!==void 0&&typeof r.format!="string")return n(`format must be a string, got ${typeof r.format}`);let s=["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"];for(let a of s)if(r[a]!==void 0&&typeof r[a]!="number")return n(`${a} must be a number, got ${typeof r[a]}`);if(r.minLength!==void 0&&(typeof r.minLength!="number"||r.minLength<0))return n(`minLength must be a non-negative number, got ${typeof r.minLength=="number"?r.minLength:typeof r.minLength}`);if(r.maxLength!==void 0&&(typeof r.maxLength!="number"||r.maxLength<0))return n(`maxLength must be a non-negative number, got ${typeof r.maxLength=="number"?r.maxLength:typeof r.maxLength}`);if(r.pattern!==void 0&&typeof r.pattern!="string")return n(`pattern must be a string, got ${typeof r.pattern}`);if(r.minItems!==void 0&&(typeof r.minItems!="number"||r.minItems<0))return n(`minItems must be a non-negative number, got ${typeof r.minItems=="number"?r.minItems:typeof r.minItems}`);if(r.maxItems!==void 0&&(typeof r.maxItems!="number"||r.maxItems<0))return n(`maxItems must be a non-negative number, got ${typeof r.maxItems=="number"?r.maxItems:typeof r.maxItems}`);if(r.uniqueItems!==void 0&&typeof r.uniqueItems!="boolean")return n(`uniqueItems must be a boolean, got ${typeof r.uniqueItems}`);if(r.minProperties!==void 0&&(typeof r.minProperties!="number"||r.minProperties<0))return n(`minProperties must be a non-negative number, got ${typeof r.minProperties=="number"?r.minProperties:typeof r.minProperties}`);if(r.maxProperties!==void 0&&(typeof r.maxProperties!="number"||r.maxProperties<0))return n(`maxProperties must be a non-negative number, got ${typeof r.maxProperties=="number"?r.maxProperties:typeof r.maxProperties}`);if(r.required!==void 0){if(!Array.isArray(r.required))return n(`required must be an array, got ${typeof r.required}`);for(let a=0;a<r.required.length;a++){let u=r.required[a];if(typeof u!="string")return n(`Item ${a} in required array must be a string, got ${typeof u}`)}}return!0}function Mo(e,t){if(e.properties==null)throw new Error("Input schema must have properties");let n=e.properties,r=[];return Do(e,t).forEach(o=>{let s=o,a=n[o]??void 0;r.push({id:s,schema:a})}),r}function Do(e,t){let n=t.order;if(n!=null&&Array.isArray(n))return n;if(e.properties==null)throw new Error("Input schema must have properties");let r=e.properties,i=Object.keys(r),s=Ko(e,t)??i;return n!=null&&typeof n=="function"&&(s=n(s)),[...new Set(s)]}function Ko(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 r=(typeof t.orderExtensionKeyword=="string"?[t.orderExtensionKeyword]:t.orderExtensionKeyword).find(o=>o in e);return r==null?void 0:e[r]}var ce=Mo;function vt(e,t,n,r,i,o){if(t.schema==null)return r.renderCustomProperty!=null&&r.renderCustomProperty[t.id]!=null?r.renderCustomProperty[t.id](e,t):void 0;let s=t,a=t.schema.type;if(r.renderCustomProperty!=null&&r.renderCustomProperty[t.id]!=null)return r.renderCustomProperty[t.id](e,t);switch(a){case"string":return t.schema.enum!=null?To(e,s,n,r,i,o):kt(e,s,n,r,i,o);case"boolean":return Ct(e,s,n,r,i,o);case"number":case"integer":return St(e,s,n,r,i,o);case"object":return Ot(e,s,n,r,i,o);case"array":break;case void 0:{if(t.schema.anyOf!=null&&Array.isArray(t.schema.anyOf))return Lo(e,s,n,r,i,o);break}default:console.error(`Unsupported property type: ${a}`)}}function Ot(e,t,n,r,i,o){let a=ce(t.schema??{},r).reduce((u,l)=>{let c=vt(e,l,n,r,i,o);return c!=null&&(u[l.id]=c()),u},{});return()=>({id:t.id,type:"object",value:a})}function kt(e,t,n,r,i,o){let{builder:s,experimental:{global:a}}=e,{id:u}=t,l=`${n.id}.${u}`,c=t.schema.title??l,d=a(l,t.schema.default??""),p=Fo(t.schema),g=p?.component!=null&&p?.component==="TextArea"?"TextArea":"TextInput";return s[g](l,{inputLabel:c,placeholder:i.i18n?.prompt,...d}),()=>({id:t.id,type:"string",value:d.value})}function To(e,t,n,r,i,o){let{builder:s,experimental:{global:a}}=e,{id:u}=t,l=`${n.id}.${u}`,c=t.schema.title??l,d=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(b=>({id:b,label:d[b]??se(b),icon:p[b]})),I=t.schema.default!=null?g.find(b=>b.id===t.schema.default)??g[0]:g[0],h=a(l,I);return s.Select(l,{inputLabel:c,values:g,...h}),()=>({id:t.id,type:"string",value:h.value.id})}function Ct(e,t,n,r,i,o){let{builder:s,experimental:{global:a}}=e,{id:u}=t,l=`${n.id}.${u}`,c=t.schema.title??l,d=!!t.schema.default,p=a(l,d);return s.Checkbox(l,{inputLabel:c,...p}),()=>({id:t.id,type:"boolean",value:p.value})}function St(e,t,n,r,i,o){let{builder:s,experimental:{global:a}}=e,{id:u}=t,l=`${n.id}.${u}`,c=t.schema.title??l,d=t.schema.minimum,p=t.schema.maximum,g=t.schema.default;g==null&&(d!=null?g=d:p!=null?g=p:g=0);let I=a(l,g);if(d!=null&&p!=null){let h=t.schema.type==="number"?.1:1;"x-imgly-step"in t.schema&&typeof t.schema["x-imgly-step"]=="number"&&(h=t.schema["x-imgly-step"]),s.Slider(l,{inputLabel:c,min:d,max:p,step:h,...I})}else s.NumberInput(l,{inputLabel:c,min:d,max:p,...I});return()=>({id:t.id,type:"integer",value:I.value})}function Lo(e,t,n,r,i,o){let{builder:s,experimental:{global:a}}=e,{id:u}=t,l=`${n.id}.${u}`,c=t.schema.title??l,d=t.schema.anyOf??[],p=[],g={},I={};d.forEach((f,y)=>{let v=f.title??"common.custom",m=`${n.id}.${u}.anyOf[${y}]`,O="x-imgly-enum-labels"in t.schema&&typeof t.schema["x-imgly-enum-labels"]=="object"?t.schema["x-imgly-enum-labels"]:{},k="x-imgly-enum-icons"in t.schema&&typeof t.schema["x-imgly-enum-icons"]=="object"?t.schema["x-imgly-enum-icons"]:{};f.type==="string"?f.enum!=null?f.enum.forEach(C=>{p.push({id:C,label:O[C]??se(C),icon:k[C]})}):(g[m]=()=>kt(e,{id:m,schema:{...f,title:v}},n,r,i,o),p.push({id:m,label:O[v]??v,icon:k[v]})):f.type==="boolean"?(g[m]=()=>Ct(e,{id:m,schema:{...f,title:v}},n,r,i,o),p.push({id:m,label:O[v]??v,icon:k[v]})):f.type==="integer"?(g[m]=()=>St(e,{id:m,schema:{...f,title:v}},n,r,i,o),p.push({id:m,label:O[v]??v,icon:k[v]})):f.type==="array"||f.type==="object"&&(g[m]=()=>Ot(e,{id:m,schema:{...f,title:v}},n,r,i,o),p.push({id:m,label:O[v]??v,icon:k[v]}))});let h=t.schema.default!=null?p.find(f=>f.id===t.schema.default)??p[0]:p[0],b=a(l,h);if(s.Select(l,{inputLabel:c,values:p,...b}),b.value.id in g){let f=g[b.value.id]();I[b.value.id]=f}return()=>{let f=I[b.value.id];return f!=null?{...f(),id:t.id}:{id:t.id,type:"string",value:b.value.id}}}function Fo(e){if("x-imgly-builder"in e)return e["x-imgly-builder"]}var xt=vt;async function No({options:e,provider:t,panelInput:n,config:r},i){let{id:o}=t;if(n==null)return;r.debug&&console.log(`Registering schema-based panel input for provider ${o}`);let s=De(n.document),a=Me(s,n.inputReference);if(!It(a,r.debug))throw new Error(`Input reference '${n.inputReference}' does not resolve to a valid OpenAPI schema`);let u=a,l=ce(u,n);return d=>{let{builder:p}=d,g=[];p.Section(`${o}.schema.section`,{children:()=>{l.forEach(f=>{let y=xt(d,f,t,n,e,r);y!=null&&(Array.isArray(y)?g.push(...y):g.push(y))})}});let I=g.map(f=>f()),h=f=>f.type==="object"?Object.entries(f.value).reduce((y,[v,m])=>(y[v]=h(m),y),{}):f.value,b=I.reduce((f,y)=>(f[y.id]=h(y),f),{});ue(d,t,i,()=>({input:b}),()=>n.getBlockInput(b),{...e,requiredInputs:u.required,createPlaceholderBlock:n.userFlow==="placeholder"},r)}}var wt=No;async function jo(e,t){if(e.panelInput!=null)switch(e.panelInput.type){case"custom":return ht(e,t);case"schema":return wt(e,t);default:e.config.debug&&console.warn(`Invalid panel input type '${panelInput.type}' - skipping`)}}var At=jo;function Bo(e){let{provider:t,options:{engine:n}}=e,r=t.output.history??"@imgly/local";if(r==null||r===!1)return;let i=n.asset.findAllSources();function o(){let s=`${t.id}.history`;for(;i.includes(s);)s+=`-${Math.random().toString(36).substring(2,6)}`;return s}if(r==="@imgly/local"){let s=o();return n.asset.addLocalSource(s),s}if(r==="@imgly/indexedDB"){let s=o();return n.asset.addSource(new et(s,n)),s}return r}var Rt=Bo;function $o(e,t){if(t==null||!t)return;let n=`${e.provider.id}.history.entry`;return e.options.cesdk.ui.addAssetLibraryEntry({id:n,sourceIds:[t],sortBy:{sortKey:"insertedAt",sortingOrder:"Descending"},canRemove:!0,gridItemHeight:"square",gridBackgroundType:"cover"}),n}var Et=$o;var Ke="@imgly/plugin-ai-generation",Vo=`
|
|
3
5
|
<svg>
|
|
4
6
|
<symbol
|
|
5
7
|
fill="none"
|
|
@@ -17,7 +19,7 @@ function Lt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i1
|
|
|
17
19
|
fill="none"
|
|
18
20
|
xmlns="http://www.w3.org/2000/svg"
|
|
19
21
|
viewBox="0 0 24 24"
|
|
20
|
-
id="${
|
|
22
|
+
id="${Ke}/image"
|
|
21
23
|
>
|
|
22
24
|
<path d="M3 16.5V18C3 19.6569 4.34315 21 6 21H18C19.6569 21 21 19.6569 21 18V6C21 4.34315 19.6569 3 18 3L17.999 5C18.5513 5 19 5.44772 19 6V18C19 18.5523 18.5523 19 18 19H6C5.44772 19 5 18.5523 5 18V16.5H3Z" fill="currentColor"/>
|
|
23
25
|
<path d="M13.0982 0.884877C12.9734 0.568323 12.5254 0.568322 12.4005 0.884876L11.7485 2.53819C11.7104 2.63483 11.6339 2.71134 11.5372 2.74945L9.8839 3.40151C9.56735 3.52636 9.56734 3.97436 9.8839 4.09921L11.5372 4.75126C11.6339 4.78938 11.7104 4.86588 11.7485 4.96253L12.4005 6.61584C12.5254 6.93239 12.9734 6.9324 13.0982 6.61584L13.7503 4.96253C13.7884 4.86588 13.8649 4.78938 13.9616 4.75126L15.6149 4.09921C15.9314 3.97436 15.9314 3.52636 15.6149 3.40151L13.9616 2.74945C13.8649 2.71134 13.7884 2.63483 13.7503 2.53819L13.0982 0.884877Z" fill="currentColor"/>
|
|
@@ -29,7 +31,7 @@ function Lt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i1
|
|
|
29
31
|
fill="none"
|
|
30
32
|
xmlns="http://www.w3.org/2000/svg"
|
|
31
33
|
viewBox="0 0 24 24"
|
|
32
|
-
id="${
|
|
34
|
+
id="${Ke}/video"
|
|
33
35
|
>
|
|
34
36
|
<path d="M6 3C4.34315 3 3 4.34315 3 6V18C3 19.6569 4.34315 21 6 21H18C19.6569 21 21 19.6569 21 18V16.5H19V18C19 18.5523 18.5523 19 18 19H6C5.44772 19 5 18.5523 5 18V6C5 5.44772 5.44772 5 6 5V3Z" fill="currentColor"/>
|
|
35
37
|
<path d="M10.9025 0.8839C11.0273 0.567345 11.4753 0.567346 11.6002 0.883901L12.2522 2.53721C12.2904 2.63386 12.3669 2.71036 12.4635 2.74848L14.1168 3.40053C14.4334 3.52538 14.4334 3.97338 14.1168 4.09823L12.4635 4.75029C12.3669 4.7884 12.2904 4.86491 12.2522 4.96155L11.6002 6.61486C11.4753 6.93142 11.0273 6.93142 10.9025 6.61486L10.2504 4.96155C10.2123 4.86491 10.1358 4.7884 10.0392 4.75029L8.38585 4.09823C8.0693 3.97338 8.0693 3.52538 8.38585 3.40053L10.0392 2.74848C10.1358 2.71036 10.2123 2.63386 10.2504 2.53721L10.9025 0.8839Z" fill="currentColor"/>
|
|
@@ -40,7 +42,7 @@ function Lt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i1
|
|
|
40
42
|
fill="none"
|
|
41
43
|
xmlns="http://www.w3.org/2000/svg"
|
|
42
44
|
viewBox="0 0 24 24"
|
|
43
|
-
id="${
|
|
45
|
+
id="${Ke}/audio"
|
|
44
46
|
>
|
|
45
47
|
<path d="M6 3.80273C4.2066 4.84016 3 6.77919 3 9.00004V12.8153C3 15.931 5.39501 18.4873 8.44444 18.7436V20.9645C8.44444 22.2198 9.89427 22.9198 10.8773 22.1392L15.1265 18.7647H15.5C17.8285 18.7647 19.8472 17.4384 20.8417 15.5H18.4187C17.6889 16.2784 16.6512 16.7647 15.5 16.7647H14.9522C14.6134 16.7647 14.2846 16.8794 14.0193 17.0901L10.4444 19.929V18.2597C10.4444 17.4341 9.77513 16.7647 8.9495 16.7647C7.80494 16.7647 6.77409 16.2779 6.05276 15.5H6V15.4419C5.37798 14.7439 5 13.8237 5 12.8153V9.00004C5 7.98559 5.37764 7.05935 6 6.35422V3.80273Z" fill="currentColor"/>
|
|
46
48
|
<path d="M11.6002 1.8839C11.4753 1.56735 11.0273 1.56735 10.9025 1.8839L10.2504 3.53721C10.2123 3.63386 10.1358 3.71036 10.0392 3.74848L8.38585 4.40053C8.0693 4.52538 8.0693 4.97338 8.38585 5.09823L10.0392 5.75029C10.1358 5.7884 10.2123 5.86491 10.2504 5.96155L10.9025 7.61486C11.0273 7.93142 11.4753 7.93142 11.6002 7.61486L12.2522 5.96155C12.2904 5.86491 12.3669 5.7884 12.4635 5.75029L14.1168 5.09823C14.4334 4.97338 14.4334 4.52538 14.1168 4.40053L12.4635 3.74848C12.3669 3.71036 12.2904 3.63386 12.2522 3.53721L11.6002 1.8839Z" fill="currentColor"/>
|
|
@@ -60,7 +62,8 @@ function Lt(e,t){let{cesdk:r}=t,n=t.propertyKey??"image_url",i=fe(e);return r.i1
|
|
|
60
62
|
|
|
61
63
|
</symbol>
|
|
62
64
|
</svg>
|
|
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};
|
|
65
|
+
`,Pt=Vo;function Go(e){return async(n,r,i)=>e.enable?(console.log(`[DRY RUN]: Requesting dummy AI generation for kind '${e.kind}' with inputs: `,JSON.stringify(n,void 0,2)),await Mt(2e3),await zo(n,e,r)):i(n,r)}async function zo(e,t,n){switch(t.kind){case"image":return _o(e,t,n);case"video":return Uo(e,t,n);case"text":return Ho(e,t,n);case"audio":return qo(e,t,n);default:throw new Error(`Unsupported output kind for creating dry run output: ${t.kind}`)}}async function _o(e,t,{engine:n}){let r,i,o=e!=null&&typeof e=="object"&&"prompt"in e&&typeof e.prompt=="string"?e.prompt:"AI Generated Image",s=o.match(/(\d+)x(\d+)/);if(s!=null)r=parseInt(s[1],10),i=parseInt(s[2],10);else if(t.blockInputs!=null&&(r=t.blockInputs.image.width,i=t.blockInputs.image.height),t.blockIds!=null&&Array.isArray(t.blockIds)&&t.blockIds.length>0){let[u]=t.blockIds,l=await dt(u,n),c=await Y(l,n);r=c.width,i=c.height}else r=512,i=512;return{kind:"image",url:`https://placehold.co/${r}x${i}/000000/FFF?text=${o.replace(" ","+").replace(`
|
|
66
|
+
`,"+")}`}}async function Uo(e,t,n){return Promise.resolve({kind:"video",url:"https://storage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4"})}async function Ho(e,t,n){let r="";if(t.blockIds&&t.blockIds.length>0){let[s]=t.blockIds;n.engine.block.isValid(s)&&(r=n.engine.block.getString(s,"text/text"))}if(!r&&e!=null&&typeof e=="object"&&"prompt"in e&&typeof e.prompt=="string"){let s=e.prompt,a=s.match(/text:\s*"([^"]+)"/i)||s.match(/content:\s*"([^"]+)"/i)||s.match(/"([^"]+)"/);a&&a[1]&&(r=a[1])}let i=r.length||50,o="";if(e!=null&&typeof e=="object")if("language"in e&&typeof e.language=="string")o=X(i,"translation");else if("type"in e&&typeof e.type=="string"){let s=e.type;o=X(i,s)}else"customPrompt"in e?o=X(i,"custom"):o=X(i,"improved");else o=X(i,"generated");return Qo(o,n.abortSignal)}async function*Qo(e,t){let n=Math.max(1,Math.ceil(e.length/20)),r=0;for(;r<e.length;){if(t?.aborted)return;let i=Math.min(r+n,e.length);yield{kind:"text",text:e.substring(0,i)},r=i,r<e.length&&await Mt(100)}return{kind:"text",text:e}}function X(e,t){let n="[DRY RUN - Dummy Text] ",r=n.length;if(e<=r)return n.substring(0,e);let i=e-r,o={translation:"Ceci est un texte fictif traduit qui maintient la longueur approximative.",professional:"Enhanced professional content with improved clarity and structure.",casual:"Relaxed, friendly text that keeps things simple and approachable.",formal:"Refined formal documentation that preserves original structure.",humorous:"Amusing content that brings lighthearted fun to the text.",improved:"Enhanced text that demonstrates better clarity and readability.",custom:"Customized content reflecting the requested modifications.",generated:"AI-generated content maintaining original length and structure."},s=o[t]||o.generated,a="";if(i<=s.length)a=s.substring(0,i);else{a=s;let u=[" Additional content continues with similar phrasing."," Further elaboration maintains the established tone."," Extended content preserves the original style."," Continued text follows the same pattern."],l=0;for(;a.length<i;){let c=u[l%u.length];if(a.length+c.length<=i)a+=c;else{a+=c.substring(0,i-a.length);break}l++}}return n+a}async function qo(e,t,n){let r=3;if(e!=null&&typeof e=="object"){if("duration"in e&&typeof e.duration=="number")r=e.duration;else if("prompt"in e&&typeof e.prompt=="string"){let s=e.prompt.match(/(\d+)\s*(?:seconds?|secs?|s)\b/i);s&&(r=parseInt(s[1],10))}}return t.blockInputs?.audio?.duration&&(r=t.blockInputs.audio.duration),{kind:"audio",url:Yo(220,r),duration:r,thumbnailUrl:void 0}}function Yo(e,t){let r=Math.floor(44100*t),i=new Float32Array(r);for(let o=0;o<r;o++)i[o]=Math.sin(2*Math.PI*e*o/44100);return Zo(i,44100)}function Zo(e,t){let n=e.length,r=2,i=1,o=i*r,s=t*o,a=n*r,u=44+a,l=new ArrayBuffer(u),c=new DataView(l),d=(b,f)=>{for(let y=0;y<f.length;y++)c.setUint8(b+y,f.charCodeAt(y))};d(0,"RIFF"),c.setUint32(4,u-8,!0),d(8,"WAVE"),d(12,"fmt "),c.setUint32(16,16,!0),c.setUint16(20,1,!0),c.setUint16(22,i,!0),c.setUint32(24,t,!0),c.setUint32(28,s,!0),c.setUint16(32,o,!0),c.setUint16(34,16,!0),d(36,"data"),c.setUint32(40,a,!0);let p=44;for(let b=0;b<n;b++){let f=Math.max(-1,Math.min(1,e[b])),y=Math.round(f*32767);c.setInt16(p,y,!0),p+=2}let g=new Uint8Array(l),I="";for(let b=0;b<g.length;b++)I+=String.fromCharCode(g[b]);return`data:audio/wav;base64,${btoa(I)}`}async function Mt(e){return new Promise(t=>{setTimeout(t,e)})}var Dt=Go;var de="USER_CANCEL";function Wo(e){return async(t,n)=>{if(n?.abortSignal?.aborted)return{status:"aborted"};let r=ke([...e.provider.output.middleware??[],...n?.middlewares??[],Ce({enable:n?.debug}),Dt({enable:n?.dryRun,kind:e.provider.kind})]);try{let{result:i}=await r(e.provider.output.generate)(t,{abortSignal:n?.abortSignal,engine:e.engine,cesdk:e.cesdk});return n?.abortSignal?.aborted?{status:"aborted"}:i instanceof Error?{status:"error",message:i.message}:i==null?{status:"error",message:"No output generated"}:W(i)?{status:"success",type:"async",output:i}:{status:"success",type:"sync",output:i}}catch(i){return V(i)?{status:"aborted",message:i.message}:i===de?{status:"aborted",message:i}:{status:"error",message:i instanceof Error?i.message:String(i)}}}}var Kt=Wo;async function Jo(e,t,n,r){let i={...r,provider:t},o={provider:t,panelInput:t.input?.panel,options:{cesdk:n.cesdk,engine:n.cesdk.engine},config:i};await t.initialize?.({...n,engine:n.cesdk.engine});let s=Rt(o),a=Et(o,s);o.options.historyAssetSourceId=s,o.options.historyAssetLibraryEntryId=a;let u=Kt({provider:t,cesdk:n.cesdk,engine:n.cesdk.engine}),l=await At(o,u);Ae(n.cesdk,"@imgly/plugin-ai-generation",Pt);let c={provider:t,panel:{builderRenderFunction:l},history:{assetSourceId:s,assetLibraryEntryId:a},generate:u};return D.get().register(c),c}var ee=Jo;function Xo(e){let{kind:t,cesdk:n,historAssetSourceIds:r}=e,i=`ly.img.ai.${t}-generation.history`;if(n.engine.asset.findAllSources().includes(i))return i;let o=new tt(i,n,r);return n.engine.asset.addSource(o),o.id}var Tt=Xo;async function es(e,t,n,r){let i,o=[];if(Array.isArray(t)){let a=await Promise.all(t.map(u=>ee(e,u,n,r)));o.push(...a),i=rs({prefix:e,providerInitializationResults:o})}else{let a=await Promise.all(t.fromText.map(l=>ee(e,l,n,r)));o.push(...a);let u=await Promise.all(t.fromImage.map(l=>ee(e,l,n,r)));o.push(...u),i=ts({prefix:`ly.img.ai.${e}-generation`,initializedFromTextProviders:a,initializedFromImageProviders:u})}let s=Tt({kind:e,cesdk:n.cesdk,historAssetSourceIds:o.map(a=>a.history?.assetSourceId).filter(A)});return{panel:{builderRenderFunction:i},history:{assetSourceId:s},providerInitializationResults:o}}function ts({prefix:e,initializedFromTextProviders:t,initializedFromImageProviders:n}){let r=t.length>0&&n.length>0;return o=>{let{builder:s,experimental:a}=o,u=a.global(`${e}.fromType`,r?"fromText":void 0),l=[];u.value==="fromText"?l.push(...t):u.value==="fromImage"?l.push(...n):l.push(...t,...n);let c=t.map(({provider:h,panel:b})=>({id:h.id,label:h.name??h.id,builderRenderFunction:b?.builderRenderFunction})),d=n.map(({provider:h,panel:b})=>({id:h.id,label:h.name??h.id,builderRenderFunction:b?.builderRenderFunction})),p=o.experimental.global(`${e}.selectedProvider.fromText`,c[0]),g=o.experimental.global(`${e}.selectedProvider.fromImage`,d[0]),I=u.value==="fromText"?p:u.value==="fromImage"?g:void 0;if((r||l.length>1)&&s.Section(`${e}.providerSelection.section`,{children:()=>{if(r&&s.ButtonGroup(`${e}.fromType.buttonGroup`,{inputLabel:"Input",children:()=>{s.Button(`${e}.fromType.buttonGroup.fromText`,{label:"Text",icon:u.value!=="fromText"&&Lt(t,o)?"@imgly/LoadingSpinner":void 0,isActive:u.value==="fromText",onClick:()=>{u.setValue("fromText")}}),s.Button(`${e}.fromType.buttonGroup.fromImage`,{label:"Image",icon:u.value!=="fromImage"&&Lt(n,o)?"@imgly/LoadingSpinner":void 0,isActive:u.value==="fromImage",onClick:()=>{u.setValue("fromImage")}})}}),l.length>1){let h=u.value==="fromText"?c:u.value==="fromImage"?d:[...c,...d];I!=null&&s.Select(`${e}.providerSelect.select`,{inputLabel:"Provider",values:h,...I})}}}),l.length>1)I?.value.builderRenderFunction?.(o);else{let h=l[0];h&&h.panel?.builderRenderFunction?.(o)}}}function rs({prefix:e,providerInitializationResults:t}){return r=>{let{builder:i}=r;if(t.length===0)return;let o=t.map(({provider:a,panel:u})=>({id:a.id,label:a.name??a.id,builderRenderFunction:u?.builderRenderFunction})),s=r.state(`${e}.selectedProvider`,o[0]);t.length>1&&s!=null&&i.Section(`${e}.providerSelection.section`,{children:()=>{i.Select(`${e}.providerSelect.select`,{inputLabel:"Provider",values:o,...s})}}),s.value.builderRenderFunction?.(r)}}function Lt(e,t){return e.length===0?!1:e.some(({provider:n})=>n.id==null?!1:t.experimental.global(G(n.id),!1).value)}var ns=es;var K="ly.img.ai.editMode",te="ly.img.ai.metadata";async function is(e){let t=`ly.img.ai.${e.kind}.confirmation`;e.cesdk?.i18n.setTranslations({en:{"ly.img.ai.processing":"Generating...",[`${t}.cancel`]:"Cancel Generation",[`${t}.apply`]:"Apply Generation",[`${t}.before`]:"Before",[`${t}.after`]:"After"}});let n=r=>{let{engine:i,builder:o,state:s,payload:a}=r;if(a==null)return;let u=i.block.findAllSelected();if(u.length===0)return null;let l=new re(i,te),c=l.get(u[0]);if(c==null)return null;let d=()=>{u.forEach(p=>{l.clear(p)})};switch(c.status){case"processing":{o.Button(`${t}.spinner`,{label:[`ly.img.ai.${c.quickActionId}.processing`,"ly.img.ai.processing"],isLoading:!0}),o.Separator(`${t}.separator`),o.Button(`${t}.cancel`,{icon:"@imgly/Cross",tooltip:`${t}.cancel`,onClick:()=>{a.onCancelGeneration?.(),d()}});break}case"confirmation":{let p=s(`${t}.comparing`,"after"),g=a.applyCallbacks?.onCancel;g!=null&&o.Button(`${t}.cancel`,{icon:"@imgly/Cross",tooltip:`${t}.cancel`,onClick:()=>{g(),d()}});let I=a.applyCallbacks?.onBefore,h=a.applyCallbacks?.onAfter;I!=null&&h!=null&&o.ButtonGroup(`${t}.compare`,{children:()=>{o.Button(`${t}.compare.before`,{label:`${t}.before`,variant:"regular",isActive:p.value==="before",onClick:()=>{I(),p.setValue("before")}}),o.Button(`${t}.compare.after`,{label:`${t}.after`,variant:"regular",isActive:p.value==="after",onClick:()=>{h(),p.setValue("after")}})}});let b=a.applyCallbacks?.onApply;b!=null&&o.Button(`${t}.apply`,{icon:"@imgly/Checkmark",tooltip:`${t}.apply`,color:"accent",isDisabled:p.value!=="after",onClick:()=>{d(),cesdk?.engine.editor._update(),b()}});break}default:}};return Promise.resolve(n)}var Ft=is;function os(e){if(e.length===0)return[];let t=[...e];for(;t.length>0&&t[0]==="ly.img.separator";)t.shift();for(;t.length>0&&t[t.length-1]==="ly.img.separator";)t.pop();return t.reduce((n,r)=>(r==="ly.img.separator"&&n.length>0&&n[n.length-1]==="ly.img.separator"||n.push(r),n),[])}var Nt=os;function ss(e){return`ly.img.ai.${e}.canvasMenu`}var jt=ss;function as(e){let{kind:t,cesdk:n,payload:r,defaultOrder:i}=e,o=jt(t);if(r==null||!Array.isArray(r.children)){let a=n.ui.getCanvasMenuOrder().find(({id:u})=>u===o);return a!=null&&Array.isArray(a.children)?a.children:i??[]}return r.children.filter(s=>typeof s=="string")}var Bt=as;function ls(e,t){if(t.blockIds.some(n=>!t.cesdk.engine.block.isValid(n)))return Promise.resolve({applyCallbacks:{onBefore:()=>{},onAfter:()=>{},onCancel:()=>{},onApply:()=>{}}});switch(t.kind){case"text":return us(e,t);case"image":return cs(e,t);case"video":return ds(e,t);case"audio":return ps(e,t);default:throw new Error(`Unsupported output kind for quick actions: ${t.kind}`)}}async function us(e,t){let{cesdk:n,blockIds:r,abortSignal:i}=t,o=r.map(d=>n.engine.block.getString(d,"text/text")),s;if(e.type==="async"){let d="";for await(let p of e.output){if(i?.aborted)break;typeof p=="string"?d=p:p.kind==="text"&&(d=p.text),r.forEach(I=>{n.engine.block.setString(I,"text/text",d)}),s={kind:"text",text:d}}}else s=e.output;if(s==null||s.kind!=="text")throw new Error("Output kind from generation is not text");e.type==="sync"&&r.forEach(d=>{n.engine.block.setString(d,"text/text",s.text)});let a=()=>{t.blockIds.forEach(d=>{t.cesdk.engine.block.setString(d,"text/text",s.text)})},u=()=>{t.blockIds.forEach((d,p)=>{t.cesdk.engine.block.setString(d,"text/text",o[p])})};return{applyCallbacks:{onBefore:u,onAfter:a,onCancel:u,onApply:()=>{a(),t.cesdk.engine.editor.addUndoStep()}}}}async function cs(e,t){let{cesdk:n,blockIds:r,abortSignal:i}=t;if(r.length!==1)throw new Error("Only one block is supported for image generation");let[o]=r,s=n.engine.block.getFill(o),a=n.engine.block.getSourceSet(s,"fill/image/sourceSet"),[u]=a,l;u==null&&(l=n.engine.block.getString(s,"fill/image/imageFileURI"));let c=await n.engine.editor.getMimeType(u?.uri??l),d=await Y(u?.uri??l,t.cesdk.engine),p=d.width/d.height;if(i?.throwIfAborted(),c==="image/svg+xml")throw new Error("SVG images are not supported");let g=n.engine.block.getCropScaleX(o),I=n.engine.block.getCropScaleY(o),h=n.engine.block.getCropTranslationX(o),b=n.engine.block.getCropTranslationY(o),f=n.engine.block.getCropRotation(o),y=()=>{n.engine.block.setCropScaleX(o,g),n.engine.block.setCropScaleY(o,I),n.engine.block.setCropTranslationX(o,h),n.engine.block.setCropTranslationY(o,b),n.engine.block.setCropRotation(o,f)};if(e.type==="async")throw new Error("Streaming generation is not supported yet from a panel");if(e.output.kind!=="image"||typeof e.output.url!="string")throw new Error("Output kind from generation is not an image");let v=e.output.url,m=await n.engine.editor.getMimeType(v),O=await fs(n,v,m),k=await Y(O,t.cesdk.engine),C=k.width/k.height,P=Math.abs(p-C)>.001,x=u?[{uri:O,width:k.width,height:k.height}]:void 0,pe=O;x==null?n.engine.block.setString(s,"fill/image/imageFileURI",pe):(n.engine.block.setString(s,"fill/image/imageFileURI",""),n.engine.block.setSourceSet(s,"fill/image/sourceSet",x)),await n.engine.block.forceLoadResources([s]),P?n.engine.block.setContentFillMode(o,"Cover"):y();let Fe=()=>{if(a==null||a.length===0){if(l==null)throw new Error("No image URI found");n.engine.block.setString(s,"fill/image/imageFileURI",l)}else n.engine.block.setSourceSet(s,"fill/image/sourceSet",a);y()},Ne=()=>{if(x==null){if(pe==null)throw new Error("No image URI found");n.engine.block.setString(s,"fill/image/imageFileURI",pe)}else n.engine.block.setSourceSet(s,"fill/image/sourceSet",x);P?n.engine.block.setContentFillMode(o,"Cover"):y()};return{applyCallbacks:{onBefore:Fe,onAfter:Ne,onCancel:()=>{Fe()},onApply:()=>{Ne(),t.cesdk.engine.editor.addUndoStep()}}}}async function ds(e,t){throw new Error("Function not implemented.")}async function ps(e,t){throw new Error("Function not implemented.")}async function fs(e,t,n){let i=await(await fetch(t)).blob(),o=new File([i],`image.${ut(n)}`,{type:n}),s=await e.unstable_upload(o,()=>{}),a=s?.meta?.uri;return a??(console.warn("Failed to upload image:",s),t)}var $t=ls;function gs(e){let{engine:t,blockIdsToLock:n,editModeToLockTo:r}=e;function i(){let l=t.block.findAllSelected();return n.some(c=>l.includes(c))}let o=t.editor.onStateChanged(()=>{t.editor.getEditMode()!==r&&i()&&t.editor.setEditMode(r)}),s=t.block.onSelectionChanged(()=>{i()?t.editor.setEditMode(r):t.editor.setEditMode("Transform")});i()&&t.editor.setEditMode(r);let a=!1;return()=>{a||(s(),o(),t.editor.setEditMode("Transform"),a=!0)}}var Vt=gs;var Te=class e{constructor(){this.actions=new Map}static get(){let t="__imgly_callbacks_registry__",n=typeof window<"u"?window:globalThis;return n[t]||(n[t]=new e),n[t]}register(t,n){let r=this.actions.get(t)??{};this.actions.set(t,{...r,...n})}get(t){return this.actions.get(t)??{}}},R=Te;function ms(e){return async(t,n)=>{let r=n?.blockIds??e.blockIds;if(e.providerInitializationResult==null)return e.debug&&console.warn("[Generate] No provider initialization result found for quick action. Returning abortion status."),{status:"aborted"};let i=e.providerInitializationResult?.provider.input?.quickActions?.supported?.[e.quickAction.id];if(i==null)throw new Error("[Generate] Quick action input mapping failed. Ensure the provider supports this quick action.");let o=typeof i=="object"&&i!==null&&"mapInput"in i?i.mapInput:c=>c;e.close();let s=new AbortController,a=AbortSignal.any([e.abortSignal,s.signal].filter(A)),u=new re(e.cesdk.engine,te),l=e.lock??!0?Vt({engine:e.cesdk.engine,editModeToLockTo:K,blockIdsToLock:r}):()=>{};r.forEach(c=>{R.get().register(c,{onCancelGeneration:()=>{s.abort(de),l(),e.cesdk.engine.block.isValid(c)&&(e.cesdk.engine.block.isValid(c)&&e.cesdk.engine.block.setState(c,{type:"Ready"}),u.clear(c))}})}),r?.forEach(c=>{u.set(c,{status:"processing",quickActionId:e.quickAction.id})}),r.forEach(c=>{e.cesdk.engine.block.isValid(c)&&e.cesdk.engine.block.setState(c,{type:"Pending",progress:0})});try{let c=await e.providerInitializationResult.generate(o(t),{middlewares:[...e.middlewares??[]],debug:e.debug,dryRun:e.dryRun,abortSignal:a}),d=c.status;switch(d){case"success":{let{applyCallbacks:p}=await $t(c,{kind:e.providerInitializationResult.provider.kind,blockIds:r,cesdk:e.cesdk,abortSignal:a});if(r.forEach(g=>{e.cesdk.engine.block.isValid(g)&&e.cesdk.engine.block.setState(g,{type:"Ready"})}),e.confirmation){r.forEach(I=>{u.set(I,{status:"confirmation",quickActionId:e.quickAction.id})});let g={...p,onApply:async()=>{p.onApply(),l()},onCancel:()=>{p.onCancel(),l()}};r.forEach(I=>{R.get().register(I,{applyCallbacks:g})})}else r.forEach(g=>{e.cesdk.engine.block.isValid(g)&&u.clear(g)}),p.onApply(),l();return c}case"aborted":return e.debug&&console.log("Generation was aborted"),l(),r.forEach(p=>{e.cesdk.engine.block.isValid(p)&&u.clear(p)}),c;case"error":return l(),r.forEach(p=>{e.cesdk.engine.block.isValid(p)&&u.clear(p)}),console.error(`[Generate]: ${c.message}`),c;default:throw new Error(`[Generate] Unknown result status ${d}.`)}}catch(c){throw e.cesdk.ui.showNotification({type:"error",message:"A technical issue has occurred."}),l(),r.forEach(d=>{e.cesdk.engine.block.isValid(d)&&u.clear(d)}),c}finally{r.forEach(c=>{e.cesdk.engine.block.isValid(c)&&e.cesdk.engine.block.setState(c,{type:"Ready"})})}}}var Le=ms;function ys(e){let t=`ly.img.ai.${e.kind}}`;e.cesdk.i18n.setTranslations({en:{[`${t}.quickActionMenu.providerSelect.label`]:"Provider"}});let n=r=>{if(r.engine.editor.getEditMode()===K)return;let i=r.engine.block.findAllSelected();if(i.length===0)return;let{payload:o}=r,s=Bt({kind:e.kind,cesdk:e.cesdk,payload:o,defaultOrder:e.defaultOrder})??[];if(s.length===0)return;let a=bs(s).filter(m=>{if(m==="ly.img.separator")return!0;let O=m.scopes;if(O!=null&&O.length>0&&!i.every(C=>O.every(P=>e.engine.block.isAllowedByScope(C,P))))return!1;if(m.enable!=null){if(typeof m.enable=="function")return m.enable({engine:e.engine});if(typeof m.enable=="boolean")return m.enable}return!0}),u=[],l=e.providerInitializationResults.reduce((m,O)=>{if(O.provider.kind!==e.kind)return m;let k=a.map(C=>{if(C==="ly.img.separator")return C;if(O.provider.input?.quickActions?.supported?.[C.id]!=null)return{definition:C};{let P=D.get().getAll().filter(x=>x.provider.kind!==e.kind&&x.provider.id!==O.provider.id).find(x=>x.provider.input?.quickActions?.supported?.[C.id]!=null);if(P!=null){let x={definition:C,providerInitializationResult:P};return u.push(x),x}else return}}).filter(A);return k=Nt(k),k.length===0||k.every(C=>C==="ly.img.separator")||k.every(C=>C==="ly.img.separator"||C.providerInitializationResult!=null)||m.push({providerInitializationResult:O,quickActions:k}),m},[]);if(l.length===0)if(u.length>0){let m=new Map;u.forEach(k=>{let C=k.definition.id;m.has(C)||m.set(C,k)});let O=Array.from(m.values());l.push({providerInitializationResult:O[0].providerInitializationResult??e.providerInitializationResults[0],quickActions:O})}else return;let c=l.map(({providerInitializationResult:m})=>({id:m.provider.id,label:m.provider.name??m.provider.id})),d=r.experimental.global(`${t}.currentProvider`,c[0]),p=l.find(({providerInitializationResult:{provider:{id:m}}})=>m===d.value?.id),g=i.every(m=>r.engine.block.getState(m).type==="Ready"),{builder:I,experimental:h,state:b}=r,f=b(`${t}.isGenerating`,!1),y=b(`${t}.toggleExpandedState`,void 0),v=async(m,O,k)=>{f.setValue(!0);try{return await k(m,O)}finally{f.setValue(!1)}};h.builder.Popover(`${t}.popover`,{icon:"@imgly/Sparkle",variant:"plain",isDisabled:!g,isLoading:f.value,trailingIcon:null,children:({close:m})=>{I.Section(`${t}.popover.section`,{children:()=>{if(y.value!==void 0){let O=p?.quickActions.find(k=>k!=="ly.img.separator"&&k.definition.id===y.value);return O!=null&&O.definition.render!=null?O.definition.render({...r,toggleExpand:()=>{y.setValue(void 0)},isExpanded:!0,generate:Le({blockIds:i,providerInitializationResult:O.providerInitializationResult??p?.providerInitializationResult,quickAction:O.definition,middlewares:[v],confirmation:O.definition.defaults?.confirmation??!0,close:m,cesdk:e.cesdk,debug:e.debug,dryRun:e.dryRun}),close:m,providerId:d.value.id}):void 0}y.value==null&&c.length>1&&(I.Select(`${t}.providerSelect.select`,{inputLabel:`${t}.quickActionMenu.providerSelect.label`,values:c,...d}),I.Separator(`${t}.providerSelect.separator`)),h.builder.Menu(`${t}.menu`,{children:()=>{p?.quickActions.forEach(O=>{if(O==="ly.img.separator"){I.Separator(`${t}.separator.${Math.random().toString()}`);return}O.definition.render!=null&&O.definition.render({...r,toggleExpand:()=>{y.setValue(O.definition.id)},isExpanded:!1,generate:Le({blockIds:i,providerInitializationResult:O.providerInitializationResult??p?.providerInitializationResult,quickAction:O.definition,middlewares:[v],confirmation:O.definition.defaults?.confirmation??!0,close:m,cesdk:e.cesdk,debug:e.debug,dryRun:e.dryRun}),close:m,providerId:d.value.id})})}})}})}})};return Promise.resolve(n)}function bs(e){return e.map(t=>t==="ly.img.separator"?t:Z.get().getBy({id:t,type:"quick"})[0]).filter(A)}var Gt=ys;async function hs(e){let t=await Gt({kind:e.kind,providerInitializationResults:e.providerInitializationResults,cesdk:e.cesdk,engine:e.engine,debug:e.debug,dryRun:e.dryRun,defaultOrder:e.defaultOrder}),n=await Ft({kind:e.kind,cesdk:e.cesdk});return{renderFunction:i=>{let{engine:o}=i;if(o.editor.getEditMode()===K){let s=i.engine.block.findAllSelected();n({...i,payload:{...i.payload??{},applyCallbacks:{onBefore:()=>{s.forEach(a=>{R.get().get(a).applyCallbacks?.onBefore?.()})},onAfter:()=>{s.forEach(a=>{R.get().get(a).applyCallbacks?.onAfter?.()})},onCancel:()=>{s.forEach(a=>{R.get().get(a).applyCallbacks?.onCancel?.()})},onApply:()=>{s.forEach(a=>{R.get().get(a).applyCallbacks?.onApply?.()})}},onCancelGeneration:()=>{s.forEach(a=>{R.get().get(a).onCancelGeneration?.()})}}});return}t(i)}}}var Is=hs;var Ql={ImageUrl:je,StyleTransfer:pt};export{K as AI_EDIT_MODE,te as AI_METADATA_KEY,Z as ActionRegistry,Ql as CommonProperties,D as ProviderRegistry,bt as abortGenerationStateKey,Ae as addIconSetOnce,ao as checkAiPluginVersion,ke as composeMiddlewares,po as enableQuickActionForImageFill,ro as getDurationForVideo,se as getLabelFromId,to as getPanelId,we as getThumbnailForVideo,ee as initializeProvider,ns as initializeProviders,Is as initializeQuickActionComponents,Ji as integrateIntoDefaultAssetLibraryEntry,W as isAsyncGenerator,G as isGeneratingStateKey,Ce as loggingMiddleware,so as rateLimitMiddleware,uo as registerDockComponent,io as uploadMiddleware};
|
|
64
67
|
/*! Bundled license information:
|
|
65
68
|
|
|
66
69
|
@imgly/plugin-utils/dist/index.mjs:
|