Current section

Files

Jump to
ckeditor5_phoenix dist index.cjs
Raw

dist/index.cjs

"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.
* If you want to wait for them, ensure they are registered before editor initialization.
* If you want lazy initialize roots, consider removing root values from the \`initialData\` config and assign initial data in editable components.
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.ContextsRegistry=f;exports.CustomEditorPluginsRegistry=I;exports.EditorsRegistry=h;exports.Hooks=Mt;exports.unwrapEditorContext=K;exports.unwrapEditorWatchdog=J;
//# sourceMappingURL=index.cjs.map