ckeditor5-phoenix 1.15.6 → 1.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../src/hooks/editable.ts"],"names":[],"mappings":"AA8FA;;GAEG;AACH,eAAO,MAAM,YAAY,+FAA6B,CAAC"}
1
+ {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../src/hooks/editable.ts"],"names":[],"mappings":"AAmGA;;GAEG;AACH,eAAO,MAAM,YAAY,+FAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-part.d.ts","sourceRoot":"","sources":["../../src/hooks/ui-part.ts"],"names":[],"mappings":"AAqFA;;GAEG;AACH,eAAO,MAAM,UAAU,+FAA2B,CAAC"}
1
+ {"version":3,"file":"ui-part.d.ts","sourceRoot":"","sources":["../../src/hooks/ui-part.ts"],"names":[],"mappings":"AA0FA;;GAEG;AACH,eAAO,MAAM,UAAU,+FAA2B,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var Z=Object.create;var H=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var et=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var at=(i,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of et(t))!it.call(i,n)&&n!==e&&H(i,n,{get:()=>t[n],enumerable:!(a=tt(t,n))||a.enumerable});return i};var r=(i,t,e)=>(e=i!=null?Z(rt(i)):{},at(t||!i||!i.__esModule?H(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class L{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,e,a){const n=this.items.get(t),s=this.initializationErrors.get(t);return s?(a?.(s),Promise.reject(s)):n?Promise.resolve(e(n)):new Promise((o,l)=>{const c=this.getPendingCallbacks(t);c.success.push(async u=>{o(await e(u))}),a?c.error.push(a):c.error.push(l)})}register(t,e){if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,e);const a=this.pendingCallbacks.get(t);a&&(a.success.forEach(n=>n(e)),this.pendingCallbacks.delete(t)),this.registerAsDefault(t,e),this.notifyWatchers()}error(t,e){this.items.delete(t),this.initializationErrors.set(t,e);const a=this.pendingCallbacks.get(t);a&&(a.error.forEach(n=>n(e)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,e),this.notifyWatchers()}resetErrors(t){const{initializationErrors:e}=this;e.has(null)&&e.get(null)===e.get(t)&&e.delete(null),e.delete(t)}unregister(t){if(!this.items.has(t))throw new Error(`Item with ID "${t}" is not registered.`);t&&this.items.get(null)===this.items.get(t)&&this.unregister(null),this.items.delete(t),this.pendingCallbacks.delete(t),this.notifyWatchers()}getItems(){return Array.from(this.items.values())}hasItem(t){return this.items.has(t)}waitFor(t){return new Promise((e,a)=>{this.execute(t,e,a)})}async destroyAll(){const t=Array.from(new Set(this.items.values())).map(e=>e.destroy());this.items.clear(),this.pendingCallbacks.clear(),await Promise.all(t),this.notifyWatchers()}watch(t){return this.watchers.add(t),t(new Map(this.items),new Map(this.initializationErrors)),this.unwatch.bind(this,t)}unwatch(t){this.watchers.delete(t)}notifyWatchers(){this.watchers.forEach(t=>t(new Map(this.items),new Map(this.initializationErrors)))}getPendingCallbacks(t){let e=this.pendingCallbacks.get(t);return e||(e={success:[],error:[]},this.pendingCallbacks.set(t,e)),e}registerAsDefault(t,e){this.items.size===1&&t!==null&&this.register(null,e)}}function nt(i){return i.replace(/[-_\s]+(.)?/g,(t,e)=>e?e.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function j(i,t){let e=null;return(...a)=>{e&&clearTimeout(e),e=setTimeout(()=>{t(...a)},i)}}function st(i){if(Object.prototype.toString.call(i)!=="[object Object]")return!1;const t=Object.getPrototypeOf(i);return t===Object.prototype||t===null}function P(i){if(Array.isArray(i))return i.map(P);if(st(i)){const t=Object.create(null);for(const[e,a]of Object.entries(i))t[nt(e)]=P(a);return t}return i}function ot(i,t){const e=Object.entries(i).filter(([a,n])=>t(n,a));return Object.fromEntries(e)}class v{state="mounting";el;liveSocket;pushEvent;pushEventTo;handleEvent;isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}}function C(i){return{async mounted(){const t=new i;this.el.instance=t,t.el=this.el,t.liveSocket=this.liveSocket,t.pushEvent=(a,n,s)=>this.pushEvent?.(a,n,s),t.pushEventTo=(a,n,s,o)=>this.pushEventTo?.(a,n,s,o),t.handleEvent=(a,n)=>this.handleEvent?.(a,n),t.state="mounting";const e=await t.mounted?.();return t.state="mounted",e},beforeUpdate(){this.el.instance.beforeUpdate?.()},async destroyed(){const{instance:t}=this.el;t.state="destroying",await t.destroyed?.(),t.state="destroyed"},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()}}}function K(i){return Object.keys(i).length===0&&i.constructor===Object}function ct(i){return i==null}function D(i,t){const e=Object.entries(i).map(([a,n])=>[a,t(n,a)]);return Object.fromEntries(e)}function R(i){if(i===null)return null;const t=Number.parseInt(i,10);return Number.isNaN(t)?null:t}function ut(){return Math.random().toString(36).substring(2)}function lt(i,{timeOutAfter:t=500,retryAfter:e=100}={}){return new Promise((a,n)=>{const s=Date.now();let o=null;const l=setTimeout(()=>{n(o??new Error("Timeout"))},t),c=async()=>{try{const u=await i();clearTimeout(l),a(u)}catch(u){o=u,Date.now()-s>t?n(u):setTimeout(c,e)}};c()})}const O=Symbol.for("context-editor-watchdog");async function dt({element:i,context:t,creator:e,config:a}){const n=ut();await t.add({creator:(c,u)=>e.create(c,u),id:n,sourceElementOrData:i,type:"editor",config:a});const s=t.getItem(n),o={state:"available",editorContextId:n,context:t};s[O]=o;const l=t.destroy.bind(t);return t.destroy=async()=>(o.state="unavailable",l()),{...o,editor:s}}function U(i){return O in i?i[O]:null}function k(i){return["inline","classic","balloon","decoupled"].includes(i)}async function mt(i){const t=await import("ckeditor5"),a={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[i];if(!a)throw new Error(`Unsupported editor type: ${i}`);return a}class I{static the=new I;plugins=new Map;constructor(){}register(t,e){if(this.plugins.has(t))throw new Error(`Plugin with name "${t}" is already registered.`);return this.plugins.set(t,e),this.unregister.bind(this,t)}unregister(t){if(!this.plugins.has(t))throw new Error(`Plugin with name "${t}" is not registered.`);this.plugins.delete(t)}unregisterAll(){this.plugins.clear()}async get(t){return this.plugins.get(t)?.()}has(t){return this.plugins.has(t)}}async function _(i){const t=await import("ckeditor5");let e=null;const a=i.map(async n=>{const s=await I.the.get(n);if(s)return s;const{[n]:o}=t;if(o)return o;if(!e)try{e=await import("ckeditor5-premium-features")}catch(c){console.error(`Failed to load premium package: ${c}`)}const{[n]:l}=e||{};if(l)return l;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(a),hasPremium:!!e}}async function B(i,t){const e=[i.ui,i.content];return await Promise.all([N("ckeditor5",e),t&&N("ckeditor5-premium-features",e)].filter(n=>!!n)).then(n=>n.flat())}async function N(i,t){return await Promise.all(t.filter(e=>e!=="en").map(async e=>{const a=await ht(i,e);return a?.default??a}).filter(Boolean))}async function ht(i,t){try{if(i==="ckeditor5")switch(t){case"af":return await import("ckeditor5/translations/af.js");case"ar":return await import("ckeditor5/translations/ar.js");case"ast":return await import("ckeditor5/translations/ast.js");case"az":return await import("ckeditor5/translations/az.js");case"bg":return await import("ckeditor5/translations/bg.js");case"bn":return await import("ckeditor5/translations/bn.js");case"bs":return await import("ckeditor5/translations/bs.js");case"ca":return await import("ckeditor5/translations/ca.js");case"cs":return await import("ckeditor5/translations/cs.js");case"da":return await import("ckeditor5/translations/da.js");case"de":return await import("ckeditor5/translations/de.js");case"de-ch":return await import("ckeditor5/translations/de-ch.js");case"el":return await import("ckeditor5/translations/el.js");case"en":return await import("ckeditor5/translations/en.js");case"en-au":return await import("ckeditor5/translations/en-au.js");case"en-gb":return await import("ckeditor5/translations/en-gb.js");case"eo":return await import("ckeditor5/translations/eo.js");case"es":return await import("ckeditor5/translations/es.js");case"es-co":return await import("ckeditor5/translations/es-co.js");case"et":return await import("ckeditor5/translations/et.js");case"eu":return await import("ckeditor5/translations/eu.js");case"fa":return await import("ckeditor5/translations/fa.js");case"fi":return await import("ckeditor5/translations/fi.js");case"fr":return await import("ckeditor5/translations/fr.js");case"gl":return await import("ckeditor5/translations/gl.js");case"gu":return await import("ckeditor5/translations/gu.js");case"he":return await import("ckeditor5/translations/he.js");case"hi":return await import("ckeditor5/translations/hi.js");case"hr":return await import("ckeditor5/translations/hr.js");case"hu":return await import("ckeditor5/translations/hu.js");case"hy":return await import("ckeditor5/translations/hy.js");case"id":return await import("ckeditor5/translations/id.js");case"it":return await import("ckeditor5/translations/it.js");case"ja":return await import("ckeditor5/translations/ja.js");case"jv":return await import("ckeditor5/translations/jv.js");case"kk":return await import("ckeditor5/translations/kk.js");case"km":return await import("ckeditor5/translations/km.js");case"kn":return await import("ckeditor5/translations/kn.js");case"ko":return await import("ckeditor5/translations/ko.js");case"ku":return await import("ckeditor5/translations/ku.js");case"lt":return await import("ckeditor5/translations/lt.js");case"lv":return await import("ckeditor5/translations/lv.js");case"ms":return await import("ckeditor5/translations/ms.js");case"nb":return await import("ckeditor5/translations/nb.js");case"ne":return await import("ckeditor5/translations/ne.js");case"nl":return await import("ckeditor5/translations/nl.js");case"no":return await import("ckeditor5/translations/no.js");case"oc":return await import("ckeditor5/translations/oc.js");case"pl":return await import("ckeditor5/translations/pl.js");case"pt":return await import("ckeditor5/translations/pt.js");case"pt-br":return await import("ckeditor5/translations/pt-br.js");case"ro":return await import("ckeditor5/translations/ro.js");case"ru":return await import("ckeditor5/translations/ru.js");case"si":return await import("ckeditor5/translations/si.js");case"sk":return await import("ckeditor5/translations/sk.js");case"sl":return await import("ckeditor5/translations/sl.js");case"sq":return await import("ckeditor5/translations/sq.js");case"sr":return await import("ckeditor5/translations/sr.js");case"sr-latn":return await import("ckeditor5/translations/sr-latn.js");case"sv":return await import("ckeditor5/translations/sv.js");case"th":return await import("ckeditor5/translations/th.js");case"tk":return await import("ckeditor5/translations/tk.js");case"tr":return await import("ckeditor5/translations/tr.js");case"tt":return await import("ckeditor5/translations/tt.js");case"ug":return await import("ckeditor5/translations/ug.js");case"uk":return await import("ckeditor5/translations/uk.js");case"ur":return await import("ckeditor5/translations/ur.js");case"uz":return await import("ckeditor5/translations/uz.js");case"vi":return await import("ckeditor5/translations/vi.js");case"zh":return await import("ckeditor5/translations/zh.js");case"zh-cn":return await import("ckeditor5/translations/zh-cn.js");default:return console.warn(`Language ${t} not found in ckeditor5 translations`),null}else switch(t){case"af":return await import("ckeditor5-premium-features/translations/af.js");case"ar":return await import("ckeditor5-premium-features/translations/ar.js");case"ast":return await import("ckeditor5-premium-features/translations/ast.js");case"az":return await import("ckeditor5-premium-features/translations/az.js");case"bg":return await import("ckeditor5-premium-features/translations/bg.js");case"bn":return await import("ckeditor5-premium-features/translations/bn.js");case"bs":return await import("ckeditor5-premium-features/translations/bs.js");case"ca":return await import("ckeditor5-premium-features/translations/ca.js");case"cs":return await import("ckeditor5-premium-features/translations/cs.js");case"da":return await import("ckeditor5-premium-features/translations/da.js");case"de":return await import("ckeditor5-premium-features/translations/de.js");case"de-ch":return await import("ckeditor5-premium-features/translations/de-ch.js");case"el":return await import("ckeditor5-premium-features/translations/el.js");case"en":return await import("ckeditor5-premium-features/translations/en.js");case"en-au":return await import("ckeditor5-premium-features/translations/en-au.js");case"en-gb":return await import("ckeditor5-premium-features/translations/en-gb.js");case"eo":return await import("ckeditor5-premium-features/translations/eo.js");case"es":return await import("ckeditor5-premium-features/translations/es.js");case"es-co":return await import("ckeditor5-premium-features/translations/es-co.js");case"et":return await import("ckeditor5-premium-features/translations/et.js");case"eu":return await import("ckeditor5-premium-features/translations/eu.js");case"fa":return await import("ckeditor5-premium-features/translations/fa.js");case"fi":return await import("ckeditor5-premium-features/translations/fi.js");case"fr":return await import("ckeditor5-premium-features/translations/fr.js");case"gl":return await import("ckeditor5-premium-features/translations/gl.js");case"gu":return await import("ckeditor5-premium-features/translations/gu.js");case"he":return await import("ckeditor5-premium-features/translations/he.js");case"hi":return await import("ckeditor5-premium-features/translations/hi.js");case"hr":return await import("ckeditor5-premium-features/translations/hr.js");case"hu":return await import("ckeditor5-premium-features/translations/hu.js");case"hy":return await import("ckeditor5-premium-features/translations/hy.js");case"id":return await import("ckeditor5-premium-features/translations/id.js");case"it":return await import("ckeditor5-premium-features/translations/it.js");case"ja":return await import("ckeditor5-premium-features/translations/ja.js");case"jv":return await import("ckeditor5-premium-features/translations/jv.js");case"kk":return await import("ckeditor5-premium-features/translations/kk.js");case"km":return await import("ckeditor5-premium-features/translations/km.js");case"kn":return await import("ckeditor5-premium-features/translations/kn.js");case"ko":return await import("ckeditor5-premium-features/translations/ko.js");case"ku":return await import("ckeditor5-premium-features/translations/ku.js");case"lt":return await import("ckeditor5-premium-features/translations/lt.js");case"lv":return await import("ckeditor5-premium-features/translations/lv.js");case"ms":return await import("ckeditor5-premium-features/translations/ms.js");case"nb":return await import("ckeditor5-premium-features/translations/nb.js");case"ne":return await import("ckeditor5-premium-features/translations/ne.js");case"nl":return await import("ckeditor5-premium-features/translations/nl.js");case"no":return await import("ckeditor5-premium-features/translations/no.js");case"oc":return await import("ckeditor5-premium-features/translations/oc.js");case"pl":return await import("ckeditor5-premium-features/translations/pl.js");case"pt":return await import("ckeditor5-premium-features/translations/pt.js");case"pt-br":return await import("ckeditor5-premium-features/translations/pt-br.js");case"ro":return await import("ckeditor5-premium-features/translations/ro.js");case"ru":return await import("ckeditor5-premium-features/translations/ru.js");case"si":return await import("ckeditor5-premium-features/translations/si.js");case"sk":return await import("ckeditor5-premium-features/translations/sk.js");case"sl":return await import("ckeditor5-premium-features/translations/sl.js");case"sq":return await import("ckeditor5-premium-features/translations/sq.js");case"sr":return await import("ckeditor5-premium-features/translations/sr.js");case"sr-latn":return await import("ckeditor5-premium-features/translations/sr-latn.js");case"sv":return await import("ckeditor5-premium-features/translations/sv.js");case"th":return await import("ckeditor5-premium-features/translations/th.js");case"tk":return await import("ckeditor5-premium-features/translations/tk.js");case"tr":return await import("ckeditor5-premium-features/translations/tr.js");case"tt":return await import("ckeditor5-premium-features/translations/tt.js");case"ug":return await import("ckeditor5-premium-features/translations/ug.js");case"uk":return await import("ckeditor5-premium-features/translations/uk.js");case"ur":return await import("ckeditor5-premium-features/translations/ur.js");case"uz":return await import("ckeditor5-premium-features/translations/uz.js");case"vi":return await import("ckeditor5-premium-features/translations/vi.js");case"zh":return await import("ckeditor5-premium-features/translations/zh.js");case"zh-cn":return await import("ckeditor5-premium-features/translations/zh-cn.js");default:return console.warn(`Language ${t} not found in premium translations`),await import("ckeditor5-premium-features/translations/en.js")}}catch(e){return console.error(`Failed to load translation for ${i}/${t}:`,e),null}}function F(i){return D(i,t=>({dictionary:t}))}function G(i){const t=Y(i);return D(t,({content:e})=>e)}function W(i){const t=Y(i),e=D(t,({initialValue:a})=>a);return ot(e,a=>typeof a=="string")}function Y(i){const t=document.querySelectorAll([`[data-cke-editor-id="${i}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", ")),e=Array.from(t).reduce((l,c)=>{const u=c.getAttribute("data-cke-editable-root-name"),d=c.getAttribute("data-cke-editable-initial-value")||"",p=c.querySelector("[data-cke-editable-content]");return!u||!p?l:{...l,[u]:{content:p,initialValue:d}}},Object.create({})),a=document.querySelector(`[phx-hook="CKEditor5"][id="${i}"]`);if(!a)return e;const n=a.getAttribute("cke-initial-value")||"",s=a.querySelector(`#${i}_editor `),o=e.main;return o?{...e,main:{...o,initialValue:o.initialValue||n}}:s?{...e,main:{content:s,initialValue:n}}:e}const V=["inline","classic","balloon","decoupled","multiroot"];function pt(i){const t=i.getAttribute("cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:e,config:a,license:n,...s}=JSON.parse(t);if(!e||!a||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!V.includes(e))throw new Error(`Invalid editor type: ${e}. Must be one of: ${V.join(", ")}.`);return{type:e,license:n,config:P(a),customTranslations:s.customTranslations||s.custom_translations}}function A(i){if(!i||typeof i!="object")return i;if(Array.isArray(i))return i.map(a=>A(a));const t=i;if(t.$element&&typeof t.$element=="string"){const a=document.querySelector(t.$element);return a||console.warn(`Element not found for selector: ${t.$element}`),a||null}const e=Object.create(null);for(const[a,n]of Object.entries(i))e[a]=A(n);return e}function wt(i,t){const{editing:e}=i;e.view.change(a=>{a.setStyle("height",`${t}px`,e.view.document.getRoot())})}const S=Symbol.for("elixir-editor-watchdog");async function ft(i){const{EditorWatchdog:t}=await import("ckeditor5"),e=new t(i);return e.setCreator(async(...a)=>{const n=await i.create(...a);return n[S]=e,n}),{watchdog:e,Constructor:{create:async(...a)=>(await e.create(...a),e.editor)}}}function J(i){return S in i?i[S]:null}class f extends L{static the=new f}function gt(i){const t=i.getAttribute("cke-context");if(!t)throw new Error('CKEditor5 hook requires a "cke-context" attribute on the element.');const{config:e,...a}=JSON.parse(t);return{config:P(e),customTranslations:a.customTranslations||a.custom_translations,watchdogConfig:a.watchdogConfig||a.watchdog_config}}class yt extends v{contextPromise=null;get attrs(){const t=a=>this.el.getAttribute(a)||null,e={id:this.el.id,config:gt(this.el),language:{ui:t("cke-language")||"en",content:t("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:e,writable:!1,configurable:!1,enumerable:!0}),e}async mounted(){const{id:t,language:e}=this.attrs,{customTranslations:a,watchdogConfig:n,config:{plugins:s,...o}}=this.attrs.config,{loadedPlugins:l,hasPremium:c}=await _(s??[]),d=[...await B(e,c),F(a?.dictionary||{})].filter(g=>!K(g));this.contextPromise=(async()=>{const{ContextWatchdog:g,Context:T}=await import("ckeditor5"),w=new g(T,{crashNumberLimit:10,...n});return await w.create({...o,language:e,plugins:l,...d.length&&{translations:d}}),w.on("itemError",(...y)=>{console.error("Context item error:",...y)}),w})();const p=await this.contextPromise;this.isBeingDestroyed()||f.the.register(t,p)}async destroyed(){const{id:t}=this.attrs;this.el.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,f.the.hasItem(t)&&f.the.unregister(t)}}}function bt(i){return i.hasAttribute("cke-context")}function Et(i){let t=i;for(;t;){if(bt(t))return t;t=t.parentElement}return null}async function kt(i){const t=Et(i);return t?f.the.waitFor(t.id):null}const Pt=C(yt);class h extends L{static the=new h}class vt extends v{editorPromise=null;get attrs(){const t={editableId:this.el.getAttribute("id"),editorId:this.el.getAttribute("data-cke-editor-id")||null,rootName:this.el.getAttribute("data-cke-editable-root-name"),initialValue:this.el.getAttribute("data-cke-editable-initial-value")||""};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editableId:t,editorId:e,rootName:a,initialValue:n}=this.attrs,s=this.el.querySelector(`#${t}_input`);this.editorPromise=h.the.execute(e,o=>{const{ui:l,editing:c,model:u}=o;if(u.document.getRoot(a))return o;o.addRoot(a,{isUndoable:!1,data:n});const d=this.el.querySelector("[data-cke-editable-content]"),p=l.view.createEditable(a,d);return l.addEditable(p),c.view.forceRender(),s&&It(s,o,a),o})}async destroyed(){const{rootName:t}=this.attrs;this.el.style.display="none";const e=await this.editorPromise;if(this.editorPromise=null,e&&e.state!=="destroyed"){const a=e.model.document.getRoot(t);a&&"detachEditable"in e&&(e.detachEditable(a),e.detachRoot(t,!1))}}}const Ct=C(vt);function It(i,t,e){const a=()=>{i.value=t.getData({rootName:e})};t.model.document.on("change:data",j(100,a)),a()}async function Tt({editorId:i,saveDebounceMs:t}){const{Plugin:e}=await import("ckeditor5");return class extends e{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:n}=this;this.input=document.getElementById(`${i}_input`),this.input&&(n.model.document.on("change:data",j(t,()=>this.sync())),n.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{const n=this.editor.getData();this.input.value=n,this.input.dispatchEvent(new Event("input",{bubbles:!0}))};destroy(){this.form&&this.form.removeEventListener("submit",this.sync),this.input=null,this.form=null}}}async function xt(i){const{Plugin:t}=await import("ckeditor5"),{editorId:e,saveDebounceMs:a,events:n,pushEvent:s,handleEvent:o}=i;return class extends t{static get pluginName(){return"SyncEditorWithPhoenix"}init(){const{editor:c}=this;n.change&&this.setupTypingContentPush(),n.blur&&this.setupEventPush("blur"),n.focus&&this.setupEventPush("focus"),o("ckeditor5:set-data",({editorId:u,data:d})=>{(ct(u)||u===e)&&c.setData(d)})}setupTypingContentPush(){const{editor:c}=this,u=()=>{s("ckeditor5:change",{editorId:e,data:q(this.editor)})};c.model.document.on("change:data",j(a,u)),c.once("ready",u)}setupEventPush(c){const{editor:u}=this,d=()=>{const{isFocused:p}=u.ui.focusTracker;(p?"focus":"blur")===c&&s(`ckeditor5:${c}`,{editorId:e,data:q(u)})};u.ui.focusTracker.on("change:isFocused",d)}}}function q(i){return i.model.document.getRootNames().reduce((e,a)=>(e[a]=i.getData({rootName:a}),e),Object.create({}))}class Ot extends v{editorPromise=null;get attrs(){const{el:t}=this,e=t.getAttribute.bind(t),a=t.hasAttribute.bind(t),n={editorId:e("id"),contextId:e("cke-context-id"),preset:pt(t),editableHeight:R(e("cke-editable-height")),watchdog:a("cke-watchdog"),events:{change:a("cke-change-event"),blur:a("cke-blur-event"),focus:a("cke-focus-event")},saveDebounceMs:R(e("cke-save-debounce-ms"))??400,language:{ui:e("cke-language")||"en",content:e("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:n,writable:!1,configurable:!1,enumerable:!0}),n}async mounted(){const{editorId:t}=this.attrs;h.the.resetErrors(t);try{this.editorPromise=this.createEditor();const e=await this.editorPromise;this.isBeingDestroyed()||(h.the.register(t,e),e.once("destroy",()=>{h.the.hasItem(t)&&h.the.unregister(t)}))}catch(e){this.editorPromise=null,h.the.error(t,e)}return this}async destroyed(){this.el.style.display="none";try{const t=await this.editorPromise;if(!t)return;const e=U(t),a=J(t);e?e.state!=="unavailable"&&await e.context.remove(e.editorContextId):a?await a.destroy():await t.destroy()}finally{this.editorPromise=null}}async createEditor(){const{preset:t,editorId:e,contextId:a,editableHeight:n,events:s,saveDebounceMs:o,language:l,watchdog:c}=this.attrs,{customTranslations:u,type:d,license:p,config:{plugins:g,...T}}=t;let w=await mt(d);const y=await(a?f.the.waitFor(a):kt(this.el));if(c&&!y){const m=await ft(w);({Constructor:w}=m),m.watchdog.on("restart",()=>{const E=m.watchdog.editor;this.editorPromise=Promise.resolve(E),h.the.register(e,E)})}const{loadedPlugins:x,hasPremium:Q}=await _(g);k(d)&&x.push(await Tt({editorId:e,saveDebounceMs:o})),x.push(await xt({editorId:e,saveDebounceMs:o,events:s,pushEvent:this.pushEvent.bind(this),handleEvent:this.handleEvent.bind(this)}));const $=[...await B(l,Q),F(u?.dictionary||{})].filter(m=>!K(m));let b=W(e);k(d)&&(b=b.main||"");const M=await(async()=>{let m=G(e);if(!(m instanceof HTMLElement)&&!("main"in m)){const z=d==="decoupled"?["main"]:Object.keys(b);X(m,z)||(m=await At(e,z),b=W(e))}k(d)&&"main"in m&&(m=m.main);const E={...A(T),initialData:b,licenseKey:p.key,plugins:x,language:l,...$.length&&{translations:$}};return!y||!(m instanceof HTMLElement)?w.create(m,E):(await dt({context:y,element:m,creator:w,config:E})).editor})();return k(d)&&n&&wt(M,n),M}}function X(i,t){return t.every(e=>i[e])}async function At(i,t){return lt(()=>{const e=G(i);if(!X(e,t))throw new Error(`It looks like not all required root elements are present yet.
1
+ "use strict";var Z=Object.create;var H=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var et=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var at=(i,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of et(t))!it.call(i,n)&&n!==e&&H(i,n,{get:()=>t[n],enumerable:!(a=tt(t,n))||a.enumerable});return i};var r=(i,t,e)=>(e=i!=null?Z(rt(i)):{},at(t||!i||!i.__esModule?H(e,"default",{value:i,enumerable:!0}):e,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class B{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,e,a){const n=this.items.get(t),s=this.initializationErrors.get(t);return s?(a?.(s),Promise.reject(s)):n?Promise.resolve(e(n)):new Promise((o,l)=>{const c=this.getPendingCallbacks(t);c.success.push(async u=>{o(await e(u))}),a?c.error.push(a):c.error.push(l)})}register(t,e){if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,e);const a=this.pendingCallbacks.get(t);a&&(a.success.forEach(n=>n(e)),this.pendingCallbacks.delete(t)),this.registerAsDefault(t,e),this.notifyWatchers()}error(t,e){this.items.delete(t),this.initializationErrors.set(t,e);const a=this.pendingCallbacks.get(t);a&&(a.error.forEach(n=>n(e)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,e),this.notifyWatchers()}resetErrors(t){const{initializationErrors:e}=this;e.has(null)&&e.get(null)===e.get(t)&&e.delete(null),e.delete(t)}unregister(t){if(!this.items.has(t))throw new Error(`Item with ID "${t}" is not registered.`);t&&this.items.get(null)===this.items.get(t)&&this.unregister(null),this.items.delete(t),this.pendingCallbacks.delete(t),this.notifyWatchers()}getItems(){return Array.from(this.items.values())}hasItem(t){return this.items.has(t)}waitFor(t){return new Promise((e,a)=>{this.execute(t,e,a)})}async destroyAll(){const t=Array.from(new Set(this.items.values())).map(e=>e.destroy());this.items.clear(),this.pendingCallbacks.clear(),await Promise.all(t),this.notifyWatchers()}watch(t){return this.watchers.add(t),t(new Map(this.items),new Map(this.initializationErrors)),this.unwatch.bind(this,t)}unwatch(t){this.watchers.delete(t)}notifyWatchers(){this.watchers.forEach(t=>t(new Map(this.items),new Map(this.initializationErrors)))}getPendingCallbacks(t){let e=this.pendingCallbacks.get(t);return e||(e={success:[],error:[]},this.pendingCallbacks.set(t,e)),e}registerAsDefault(t,e){this.items.size===1&&t!==null&&this.register(null,e)}}function nt(i){return i.replace(/[-_\s]+(.)?/g,(t,e)=>e?e.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function j(i,t){let e=null;return(...a)=>{e&&clearTimeout(e),e=setTimeout(()=>{t(...a)},i)}}function st(i){if(Object.prototype.toString.call(i)!=="[object Object]")return!1;const t=Object.getPrototypeOf(i);return t===Object.prototype||t===null}function P(i){if(Array.isArray(i))return i.map(P);if(st(i)){const t=Object.create(null);for(const[e,a]of Object.entries(i))t[nt(e)]=P(a);return t}return i}function ot(i,t){const e=Object.entries(i).filter(([a,n])=>t(n,a));return Object.fromEntries(e)}class v{state="mounting";el;liveSocket;pushEvent;pushEventTo;handleEvent;isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}}function C(i){return{async mounted(){const t=new i;this.el.instance=t,t.el=this.el,t.liveSocket=this.liveSocket,t.pushEvent=(a,n,s)=>this.pushEvent?.(a,n,s),t.pushEventTo=(a,n,s,o)=>this.pushEventTo?.(a,n,s,o),t.handleEvent=(a,n)=>this.handleEvent?.(a,n),t.state="mounting";const e=await t.mounted?.();return t.state="mounted",e},beforeUpdate(){this.el.instance.beforeUpdate?.()},async destroyed(){const{instance:t}=this.el;t.state="destroying",await t.destroyed?.(),t.state="destroyed"},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()}}}function L(i){return Object.keys(i).length===0&&i.constructor===Object}function ct(i){return i==null}function D(i,t){const e=Object.entries(i).map(([a,n])=>[a,t(n,a)]);return Object.fromEntries(e)}function R(i){if(i===null)return null;const t=Number.parseInt(i,10);return Number.isNaN(t)?null:t}function ut(){return Math.random().toString(36).substring(2)}function lt(i,{timeOutAfter:t=500,retryAfter:e=100}={}){return new Promise((a,n)=>{const s=Date.now();let o=null;const l=setTimeout(()=>{n(o??new Error("Timeout"))},t),c=async()=>{try{const u=await i();clearTimeout(l),a(u)}catch(u){o=u,Date.now()-s>t?n(u):setTimeout(c,e)}};c()})}const O=Symbol.for("context-editor-watchdog");async function dt({element:i,context:t,creator:e,config:a}){const n=ut();await t.add({creator:(c,u)=>e.create(c,u),id:n,sourceElementOrData:i,type:"editor",config:a});const s=t.getItem(n),o={state:"available",editorContextId:n,context:t};s[O]=o;const l=t.destroy.bind(t);return t.destroy=async()=>(o.state="unavailable",l()),{...o,editor:s}}function K(i){return O in i?i[O]:null}function k(i){return["inline","classic","balloon","decoupled"].includes(i)}async function mt(i){const t=await import("ckeditor5"),a={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[i];if(!a)throw new Error(`Unsupported editor type: ${i}`);return a}class I{static the=new I;plugins=new Map;constructor(){}register(t,e){if(this.plugins.has(t))throw new Error(`Plugin with name "${t}" is already registered.`);return this.plugins.set(t,e),this.unregister.bind(this,t)}unregister(t){if(!this.plugins.has(t))throw new Error(`Plugin with name "${t}" is not registered.`);this.plugins.delete(t)}unregisterAll(){this.plugins.clear()}async get(t){return this.plugins.get(t)?.()}has(t){return this.plugins.has(t)}}async function U(i){const t=await import("ckeditor5");let e=null;const a=i.map(async n=>{const s=await I.the.get(n);if(s)return s;const{[n]:o}=t;if(o)return o;if(!e)try{e=await import("ckeditor5-premium-features")}catch(c){console.error(`Failed to load premium package: ${c}`)}const{[n]:l}=e||{};if(l)return l;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(a),hasPremium:!!e}}async function _(i,t){const e=[i.ui,i.content];return await Promise.all([N("ckeditor5",e),t&&N("ckeditor5-premium-features",e)].filter(n=>!!n)).then(n=>n.flat())}async function N(i,t){return await Promise.all(t.filter(e=>e!=="en").map(async e=>{const a=await ht(i,e);return a?.default??a}).filter(Boolean))}async function ht(i,t){try{if(i==="ckeditor5")switch(t){case"af":return await import("ckeditor5/translations/af.js");case"ar":return await import("ckeditor5/translations/ar.js");case"ast":return await import("ckeditor5/translations/ast.js");case"az":return await import("ckeditor5/translations/az.js");case"bg":return await import("ckeditor5/translations/bg.js");case"bn":return await import("ckeditor5/translations/bn.js");case"bs":return await import("ckeditor5/translations/bs.js");case"ca":return await import("ckeditor5/translations/ca.js");case"cs":return await import("ckeditor5/translations/cs.js");case"da":return await import("ckeditor5/translations/da.js");case"de":return await import("ckeditor5/translations/de.js");case"de-ch":return await import("ckeditor5/translations/de-ch.js");case"el":return await import("ckeditor5/translations/el.js");case"en":return await import("ckeditor5/translations/en.js");case"en-au":return await import("ckeditor5/translations/en-au.js");case"en-gb":return await import("ckeditor5/translations/en-gb.js");case"eo":return await import("ckeditor5/translations/eo.js");case"es":return await import("ckeditor5/translations/es.js");case"es-co":return await import("ckeditor5/translations/es-co.js");case"et":return await import("ckeditor5/translations/et.js");case"eu":return await import("ckeditor5/translations/eu.js");case"fa":return await import("ckeditor5/translations/fa.js");case"fi":return await import("ckeditor5/translations/fi.js");case"fr":return await import("ckeditor5/translations/fr.js");case"gl":return await import("ckeditor5/translations/gl.js");case"gu":return await import("ckeditor5/translations/gu.js");case"he":return await import("ckeditor5/translations/he.js");case"hi":return await import("ckeditor5/translations/hi.js");case"hr":return await import("ckeditor5/translations/hr.js");case"hu":return await import("ckeditor5/translations/hu.js");case"hy":return await import("ckeditor5/translations/hy.js");case"id":return await import("ckeditor5/translations/id.js");case"it":return await import("ckeditor5/translations/it.js");case"ja":return await import("ckeditor5/translations/ja.js");case"jv":return await import("ckeditor5/translations/jv.js");case"kk":return await import("ckeditor5/translations/kk.js");case"km":return await import("ckeditor5/translations/km.js");case"kn":return await import("ckeditor5/translations/kn.js");case"ko":return await import("ckeditor5/translations/ko.js");case"ku":return await import("ckeditor5/translations/ku.js");case"lt":return await import("ckeditor5/translations/lt.js");case"lv":return await import("ckeditor5/translations/lv.js");case"ms":return await import("ckeditor5/translations/ms.js");case"nb":return await import("ckeditor5/translations/nb.js");case"ne":return await import("ckeditor5/translations/ne.js");case"nl":return await import("ckeditor5/translations/nl.js");case"no":return await import("ckeditor5/translations/no.js");case"oc":return await import("ckeditor5/translations/oc.js");case"pl":return await import("ckeditor5/translations/pl.js");case"pt":return await import("ckeditor5/translations/pt.js");case"pt-br":return await import("ckeditor5/translations/pt-br.js");case"ro":return await import("ckeditor5/translations/ro.js");case"ru":return await import("ckeditor5/translations/ru.js");case"si":return await import("ckeditor5/translations/si.js");case"sk":return await import("ckeditor5/translations/sk.js");case"sl":return await import("ckeditor5/translations/sl.js");case"sq":return await import("ckeditor5/translations/sq.js");case"sr":return await import("ckeditor5/translations/sr.js");case"sr-latn":return await import("ckeditor5/translations/sr-latn.js");case"sv":return await import("ckeditor5/translations/sv.js");case"th":return await import("ckeditor5/translations/th.js");case"tk":return await import("ckeditor5/translations/tk.js");case"tr":return await import("ckeditor5/translations/tr.js");case"tt":return await import("ckeditor5/translations/tt.js");case"ug":return await import("ckeditor5/translations/ug.js");case"uk":return await import("ckeditor5/translations/uk.js");case"ur":return await import("ckeditor5/translations/ur.js");case"uz":return await import("ckeditor5/translations/uz.js");case"vi":return await import("ckeditor5/translations/vi.js");case"zh":return await import("ckeditor5/translations/zh.js");case"zh-cn":return await import("ckeditor5/translations/zh-cn.js");default:return console.warn(`Language ${t} not found in ckeditor5 translations`),null}else switch(t){case"af":return await import("ckeditor5-premium-features/translations/af.js");case"ar":return await import("ckeditor5-premium-features/translations/ar.js");case"ast":return await import("ckeditor5-premium-features/translations/ast.js");case"az":return await import("ckeditor5-premium-features/translations/az.js");case"bg":return await import("ckeditor5-premium-features/translations/bg.js");case"bn":return await import("ckeditor5-premium-features/translations/bn.js");case"bs":return await import("ckeditor5-premium-features/translations/bs.js");case"ca":return await import("ckeditor5-premium-features/translations/ca.js");case"cs":return await import("ckeditor5-premium-features/translations/cs.js");case"da":return await import("ckeditor5-premium-features/translations/da.js");case"de":return await import("ckeditor5-premium-features/translations/de.js");case"de-ch":return await import("ckeditor5-premium-features/translations/de-ch.js");case"el":return await import("ckeditor5-premium-features/translations/el.js");case"en":return await import("ckeditor5-premium-features/translations/en.js");case"en-au":return await import("ckeditor5-premium-features/translations/en-au.js");case"en-gb":return await import("ckeditor5-premium-features/translations/en-gb.js");case"eo":return await import("ckeditor5-premium-features/translations/eo.js");case"es":return await import("ckeditor5-premium-features/translations/es.js");case"es-co":return await import("ckeditor5-premium-features/translations/es-co.js");case"et":return await import("ckeditor5-premium-features/translations/et.js");case"eu":return await import("ckeditor5-premium-features/translations/eu.js");case"fa":return await import("ckeditor5-premium-features/translations/fa.js");case"fi":return await import("ckeditor5-premium-features/translations/fi.js");case"fr":return await import("ckeditor5-premium-features/translations/fr.js");case"gl":return await import("ckeditor5-premium-features/translations/gl.js");case"gu":return await import("ckeditor5-premium-features/translations/gu.js");case"he":return await import("ckeditor5-premium-features/translations/he.js");case"hi":return await import("ckeditor5-premium-features/translations/hi.js");case"hr":return await import("ckeditor5-premium-features/translations/hr.js");case"hu":return await import("ckeditor5-premium-features/translations/hu.js");case"hy":return await import("ckeditor5-premium-features/translations/hy.js");case"id":return await import("ckeditor5-premium-features/translations/id.js");case"it":return await import("ckeditor5-premium-features/translations/it.js");case"ja":return await import("ckeditor5-premium-features/translations/ja.js");case"jv":return await import("ckeditor5-premium-features/translations/jv.js");case"kk":return await import("ckeditor5-premium-features/translations/kk.js");case"km":return await import("ckeditor5-premium-features/translations/km.js");case"kn":return await import("ckeditor5-premium-features/translations/kn.js");case"ko":return await import("ckeditor5-premium-features/translations/ko.js");case"ku":return await import("ckeditor5-premium-features/translations/ku.js");case"lt":return await import("ckeditor5-premium-features/translations/lt.js");case"lv":return await import("ckeditor5-premium-features/translations/lv.js");case"ms":return await import("ckeditor5-premium-features/translations/ms.js");case"nb":return await import("ckeditor5-premium-features/translations/nb.js");case"ne":return await import("ckeditor5-premium-features/translations/ne.js");case"nl":return await import("ckeditor5-premium-features/translations/nl.js");case"no":return await import("ckeditor5-premium-features/translations/no.js");case"oc":return await import("ckeditor5-premium-features/translations/oc.js");case"pl":return await import("ckeditor5-premium-features/translations/pl.js");case"pt":return await import("ckeditor5-premium-features/translations/pt.js");case"pt-br":return await import("ckeditor5-premium-features/translations/pt-br.js");case"ro":return await import("ckeditor5-premium-features/translations/ro.js");case"ru":return await import("ckeditor5-premium-features/translations/ru.js");case"si":return await import("ckeditor5-premium-features/translations/si.js");case"sk":return await import("ckeditor5-premium-features/translations/sk.js");case"sl":return await import("ckeditor5-premium-features/translations/sl.js");case"sq":return await import("ckeditor5-premium-features/translations/sq.js");case"sr":return await import("ckeditor5-premium-features/translations/sr.js");case"sr-latn":return await import("ckeditor5-premium-features/translations/sr-latn.js");case"sv":return await import("ckeditor5-premium-features/translations/sv.js");case"th":return await import("ckeditor5-premium-features/translations/th.js");case"tk":return await import("ckeditor5-premium-features/translations/tk.js");case"tr":return await import("ckeditor5-premium-features/translations/tr.js");case"tt":return await import("ckeditor5-premium-features/translations/tt.js");case"ug":return await import("ckeditor5-premium-features/translations/ug.js");case"uk":return await import("ckeditor5-premium-features/translations/uk.js");case"ur":return await import("ckeditor5-premium-features/translations/ur.js");case"uz":return await import("ckeditor5-premium-features/translations/uz.js");case"vi":return await import("ckeditor5-premium-features/translations/vi.js");case"zh":return await import("ckeditor5-premium-features/translations/zh.js");case"zh-cn":return await import("ckeditor5-premium-features/translations/zh-cn.js");default:return console.warn(`Language ${t} not found in premium translations`),await import("ckeditor5-premium-features/translations/en.js")}}catch(e){return console.error(`Failed to load translation for ${i}/${t}:`,e),null}}function F(i){return D(i,t=>({dictionary:t}))}function G(i){const t=Y(i);return D(t,({content:e})=>e)}function W(i){const t=Y(i),e=D(t,({initialValue:a})=>a);return ot(e,a=>typeof a=="string")}function Y(i){const t=document.querySelectorAll([`[data-cke-editor-id="${i}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", ")),e=Array.from(t).reduce((l,c)=>{const u=c.getAttribute("data-cke-editable-root-name"),d=c.getAttribute("data-cke-editable-initial-value")||"",p=c.querySelector("[data-cke-editable-content]");return!u||!p?l:{...l,[u]:{content:p,initialValue:d}}},Object.create({})),a=document.querySelector(`[phx-hook="CKEditor5"][id="${i}"]`);if(!a)return e;const n=a.getAttribute("cke-initial-value")||"",s=a.querySelector(`#${i}_editor `),o=e.main;return o?{...e,main:{...o,initialValue:o.initialValue||n}}:s?{...e,main:{content:s,initialValue:n}}:e}const V=["inline","classic","balloon","decoupled","multiroot"];function pt(i){const t=i.getAttribute("cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:e,config:a,license:n,...s}=JSON.parse(t);if(!e||!a||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!V.includes(e))throw new Error(`Invalid editor type: ${e}. Must be one of: ${V.join(", ")}.`);return{type:e,license:n,config:P(a),customTranslations:s.customTranslations||s.custom_translations}}function A(i){if(!i||typeof i!="object")return i;if(Array.isArray(i))return i.map(a=>A(a));const t=i;if(t.$element&&typeof t.$element=="string"){const a=document.querySelector(t.$element);return a||console.warn(`Element not found for selector: ${t.$element}`),a||null}const e=Object.create(null);for(const[a,n]of Object.entries(i))e[a]=A(n);return e}function wt(i,t){const{editing:e}=i;e.view.change(a=>{a.setStyle("height",`${t}px`,e.view.document.getRoot())})}const S=Symbol.for("elixir-editor-watchdog");async function ft(i){const{EditorWatchdog:t}=await import("ckeditor5"),e=new t(i);return e.setCreator(async(...a)=>{const n=await i.create(...a);return n[S]=e,n}),{watchdog:e,Constructor:{create:async(...a)=>(await e.create(...a),e.editor)}}}function J(i){return S in i?i[S]:null}class f extends B{static the=new f}function gt(i){const t=i.getAttribute("cke-context");if(!t)throw new Error('CKEditor5 hook requires a "cke-context" attribute on the element.');const{config:e,...a}=JSON.parse(t);return{config:P(e),customTranslations:a.customTranslations||a.custom_translations,watchdogConfig:a.watchdogConfig||a.watchdog_config}}class yt extends v{contextPromise=null;get attrs(){const t=a=>this.el.getAttribute(a)||null,e={id:this.el.id,config:gt(this.el),language:{ui:t("cke-language")||"en",content:t("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:e,writable:!1,configurable:!1,enumerable:!0}),e}async mounted(){const{id:t,language:e}=this.attrs,{customTranslations:a,watchdogConfig:n,config:{plugins:s,...o}}=this.attrs.config,{loadedPlugins:l,hasPremium:c}=await U(s??[]),d=[...await _(e,c),F(a?.dictionary||{})].filter(g=>!L(g));this.contextPromise=(async()=>{const{ContextWatchdog:g,Context:T}=await import("ckeditor5"),w=new g(T,{crashNumberLimit:10,...n});return await w.create({...o,language:e,plugins:l,...d.length&&{translations:d}}),w.on("itemError",(...y)=>{console.error("Context item error:",...y)}),w})();const p=await this.contextPromise;this.isBeingDestroyed()||f.the.register(t,p)}async destroyed(){const{id:t}=this.attrs;this.el.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,f.the.hasItem(t)&&f.the.unregister(t)}}}function bt(i){return i.hasAttribute("cke-context")}function Et(i){let t=i;for(;t;){if(bt(t))return t;t=t.parentElement}return null}async function kt(i){const t=Et(i);return t?f.the.waitFor(t.id):null}const Pt=C(yt);class h extends B{static the=new h}class vt extends v{editorPromise=null;get attrs(){const t={editableId:this.el.getAttribute("id"),editorId:this.el.getAttribute("data-cke-editor-id")||null,rootName:this.el.getAttribute("data-cke-editable-root-name"),initialValue:this.el.getAttribute("data-cke-editable-initial-value")||""};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editableId:t,editorId:e,rootName:a,initialValue:n}=this.attrs,s=this.el.querySelector(`#${t}_input`);this.editorPromise=h.the.execute(e,o=>{if(this.isBeingDestroyed())return null;const{ui:l,editing:c,model:u}=o;if(u.document.getRoot(a))return o;o.addRoot(a,{isUndoable:!1,data:n});const d=this.el.querySelector("[data-cke-editable-content]"),p=l.view.createEditable(a,d);return l.addEditable(p),c.view.forceRender(),s&&It(s,o,a),o})}async destroyed(){const{rootName:t}=this.attrs;this.el.style.display="none";const e=await this.editorPromise;if(this.editorPromise=null,e&&e.state!=="destroyed"){const a=e.model.document.getRoot(t);a&&"detachEditable"in e&&(e.detachEditable(a),e.detachRoot(t,!1))}}}const Ct=C(vt);function It(i,t,e){const a=()=>{i.value=t.getData({rootName:e})};t.model.document.on("change:data",j(100,a)),a()}async function Tt({editorId:i,saveDebounceMs:t}){const{Plugin:e}=await import("ckeditor5");return class extends e{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:n}=this;this.input=document.getElementById(`${i}_input`),this.input&&(n.model.document.on("change:data",j(t,()=>this.sync())),n.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{const n=this.editor.getData();this.input.value=n,this.input.dispatchEvent(new Event("input",{bubbles:!0}))};destroy(){this.form&&this.form.removeEventListener("submit",this.sync),this.input=null,this.form=null}}}async function xt(i){const{Plugin:t}=await import("ckeditor5"),{editorId:e,saveDebounceMs:a,events:n,pushEvent:s,handleEvent:o}=i;return class extends t{static get pluginName(){return"SyncEditorWithPhoenix"}init(){const{editor:c}=this;n.change&&this.setupTypingContentPush(),n.blur&&this.setupEventPush("blur"),n.focus&&this.setupEventPush("focus"),o("ckeditor5:set-data",({editorId:u,data:d})=>{(ct(u)||u===e)&&c.setData(d)})}setupTypingContentPush(){const{editor:c}=this,u=()=>{s("ckeditor5:change",{editorId:e,data:q(this.editor)})};c.model.document.on("change:data",j(a,u)),c.once("ready",u)}setupEventPush(c){const{editor:u}=this,d=()=>{const{isFocused:p}=u.ui.focusTracker;(p?"focus":"blur")===c&&s(`ckeditor5:${c}`,{editorId:e,data:q(u)})};u.ui.focusTracker.on("change:isFocused",d)}}}function q(i){return i.model.document.getRootNames().reduce((e,a)=>(e[a]=i.getData({rootName:a}),e),Object.create({}))}class Ot extends v{editorPromise=null;get attrs(){const{el:t}=this,e=t.getAttribute.bind(t),a=t.hasAttribute.bind(t),n={editorId:e("id"),contextId:e("cke-context-id"),preset:pt(t),editableHeight:R(e("cke-editable-height")),watchdog:a("cke-watchdog"),events:{change:a("cke-change-event"),blur:a("cke-blur-event"),focus:a("cke-focus-event")},saveDebounceMs:R(e("cke-save-debounce-ms"))??400,language:{ui:e("cke-language")||"en",content:e("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:n,writable:!1,configurable:!1,enumerable:!0}),n}async mounted(){const{editorId:t}=this.attrs;h.the.resetErrors(t);try{this.editorPromise=this.createEditor();const e=await this.editorPromise;this.isBeingDestroyed()||(h.the.register(t,e),e.once("destroy",()=>{h.the.hasItem(t)&&h.the.unregister(t)}))}catch(e){this.editorPromise=null,h.the.error(t,e)}return this}async destroyed(){this.el.style.display="none";try{const t=await this.editorPromise;if(!t)return;const e=K(t),a=J(t);e?e.state!=="unavailable"&&await e.context.remove(e.editorContextId):a?await a.destroy():await t.destroy()}finally{this.editorPromise=null}}async createEditor(){const{preset:t,editorId:e,contextId:a,editableHeight:n,events:s,saveDebounceMs:o,language:l,watchdog:c}=this.attrs,{customTranslations:u,type:d,license:p,config:{plugins:g,...T}}=t;let w=await mt(d);const y=await(a?f.the.waitFor(a):kt(this.el));if(c&&!y){const m=await ft(w);({Constructor:w}=m),m.watchdog.on("restart",()=>{const E=m.watchdog.editor;this.editorPromise=Promise.resolve(E),h.the.register(e,E)})}const{loadedPlugins:x,hasPremium:Q}=await U(g);k(d)&&x.push(await Tt({editorId:e,saveDebounceMs:o})),x.push(await xt({editorId:e,saveDebounceMs:o,events:s,pushEvent:this.pushEvent.bind(this),handleEvent:this.handleEvent.bind(this)}));const $=[...await _(l,Q),F(u?.dictionary||{})].filter(m=>!L(m));let b=W(e);k(d)&&(b=b.main||"");const M=await(async()=>{let m=G(e);if(!(m instanceof HTMLElement)&&!("main"in m)){const z=d==="decoupled"?["main"]:Object.keys(b);X(m,z)||(m=await At(e,z),b=W(e))}k(d)&&"main"in m&&(m=m.main);const E={...A(T),initialData:b,licenseKey:p.key,plugins:x,language:l,...$.length&&{translations:$}};return!y||!(m instanceof HTMLElement)?w.create(m,E):(await dt({context:y,element:m,creator:w,config:E})).editor})();return k(d)&&n&&wt(M,n),M}}function X(i,t){return t.every(e=>i[e])}async function At(i,t){return lt(()=>{const e=G(i);if(!X(e,t))throw new Error(`It looks like not all required root elements are present yet.
2
2
  * If you want to wait for them, ensure they are registered before editor initialization.
3
3
  * If you want lazy initialize roots, consider removing root values from the \`initialData\` config and assign initial data in editable components.
4
- Missing roots: ${t.filter(a=>!e[a]).join(", ")}.`);return e},{timeOutAfter:2e3,retryAfter:100})}const St=C(Ot);class jt extends v{mountedPromise=null;get attrs(){const t={editorId:this.el.getAttribute("data-cke-editor-id")||null,name:this.el.getAttribute("data-cke-ui-part-name")};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editorId:t,name:e}=this.attrs;this.mountedPromise=h.the.execute(t,a=>{const{ui:n}=a,s=Dt(e),o=n.view[s];if(!o){console.error(`Unknown UI part name: "${e}". Supported names are "toolbar" and "menubar".`);return}this.el.appendChild(o.element)})}async destroyed(){this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.el.innerHTML=""}}function Dt(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const $t=C(jt),Mt={CKEditor5:St,CKEditable:Ct,CKUIPart:$t,CKContext:Pt};exports.CustomEditorPluginsRegistry=I;exports.EditorsRegistry=h;exports.Hooks=Mt;exports.unwrapEditorContext=U;exports.unwrapEditorWatchdog=J;
4
+ Missing roots: ${t.filter(a=>!e[a]).join(", ")}.`);return e},{timeOutAfter:2e3,retryAfter:100})}const St=C(Ot);class jt extends v{mountedPromise=null;get attrs(){const t={editorId:this.el.getAttribute("data-cke-editor-id")||null,name:this.el.getAttribute("data-cke-ui-part-name")};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editorId:t,name:e}=this.attrs;this.mountedPromise=h.the.execute(t,a=>{if(this.isBeingDestroyed())return;const{ui:n}=a,s=Dt(e),o=n.view[s];if(!o){console.error(`Unknown UI part name: "${e}". Supported names are "toolbar" and "menubar".`);return}this.el.appendChild(o.element)})}async destroyed(){this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.el.innerHTML=""}}function Dt(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const $t=C(jt),Mt={CKEditor5:St,CKEditable:Ct,CKUIPart:$t,CKContext:Pt};exports.CustomEditorPluginsRegistry=I;exports.EditorsRegistry=h;exports.Hooks=Mt;exports.unwrapEditorContext=K;exports.unwrapEditorWatchdog=J;
5
5
  //# sourceMappingURL=index.cjs.map