ckeditor5-phoenix 1.27.2 → 1.28.1
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/dist/hooks/editable.d.ts.map +1 -1
- package/dist/hooks/editor/utils/assign-editor-roots-to-config.d.ts.map +1 -1
- package/dist/hooks/editor/utils/query-all-editor-editables.d.ts +1 -0
- package/dist/hooks/editor/utils/query-all-editor-editables.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +134 -122
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/hooks/editable.test.ts +29 -0
- package/src/hooks/editable.ts +3 -1
- package/src/hooks/editor/editor.test.ts +78 -0
- package/src/hooks/editor/plugins/sync-editor-with-phoenix.ts +1 -1
- package/src/hooks/editor/utils/assign-editor-roots-to-config.ts +7 -3
- package/src/hooks/editor/utils/query-all-editor-editables.ts +12 -6
- package/test-utils/editor/create-editable-html-element.ts +5 -0
- package/test-utils/editor/create-editor-html-element.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../src/hooks/editable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../src/hooks/editable.ts"],"names":[],"mappings":"AAoHA;;GAEG;AACH,eAAO,MAAM,YAAY,4GAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign-editor-roots-to-config.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/utils/assign-editor-roots-to-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,YAAY,EAC9D,MAAM,EAAE,wBAAwB,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,MAAM,EAAE,CAAC,GACR,CAAC,
|
|
1
|
+
{"version":3,"file":"assign-editor-roots-to-config.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/utils/assign-editor-roots-to-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,YAAY,EAC9D,MAAM,EAAE,wBAAwB,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACvC,MAAM,EAAE,CAAC,GACR,CAAC,CAuCH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-all-editor-editables.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/utils/query-all-editor-editables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"query-all-editor-editables.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/utils/query-all-editor-editables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAmExF;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var at=Object.create;var H=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var ct=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of it(t))!ot.call(r,i)&&i!==e&&H(r,i,{get:()=>t[i],enumerable:!(n=nt(t,i))||n.enumerable});return r};var a=(r,t,e)=>(e=r!=null?at(st(r)):{},ct(t||!r||!r.__esModule?H(e,"default",{value:r,enumerable:!0}):e,r));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function q(r,t){if(!r||r.size!==t.size)return!1;for(const[e,n]of r)if(!t.has(e)||t.get(e)!==n)return!1;return!0}class K{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;batchDepth=0;lastNotifiedItems=null;lastNotifiedErrors=null;execute(t,e,n){const i=this.items.get(t),s=this.initializationErrors.get(t);return s?(n?.(s),Promise.reject(s)):i?Promise.resolve(e(i)):new Promise((o,u)=>{const c=this.getPendingCallbacks(t);c.success.push(async l=>{o(await e(l))}),n?c.error.push(n):c.error.push(u)})}mountEffect(t,e){let n,i,s=!1;const o=this.watch(u=>{const c=u.get(t);if(c!==i&&(n?.(),n=void 0,i=c,!!c))try{const l=e(c);s?(l?.(),o()):n=l}catch(l){throw console.error(l),l}});return()=>{s=!0,i&&(o(),n?.(),n=void 0)}}register(t,e){this.batch(()=>{if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,e);const n=this.pendingCallbacks.get(t);n&&(n.success.forEach(i=>i(e)),this.pendingCallbacks.delete(t)),this.items.size===1&&t!==null&&this.register(null,e)})}error(t,e){this.batch(()=>{this.items.delete(t),this.initializationErrors.set(t,e);const n=this.pendingCallbacks.get(t);n&&(n.error.forEach(i=>i(e)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,e)})}resetErrors(t){const{initializationErrors:e}=this;e.has(null)&&e.get(null)===e.get(t)&&e.delete(null),e.delete(t)}unregister(t,e=!0){this.batch(()=>{t&&this.items.get(null)===this.items.get(t)&&this.unregister(null,!1),this.items.delete(t),e&&this.pendingCallbacks.delete(t),this.resetErrors(t)})}getItems(){return Array.from(this.items.values())}getItem(t){return this.items.get(t)}hasItem(t){return this.items.has(t)}waitFor(t){return new Promise((e,n)=>{this.execute(t,e,n)})}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.flushWatchers()}async reset(){await this.destroyAll(),this.watchers.clear()}batch(t){this.batchDepth++;try{return t()}finally{this.batchDepth--,this.batchDepth===0&&this.flushWatchers()}}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)}flushWatchers(){q(this.lastNotifiedItems,this.items)&&q(this.lastNotifiedErrors,this.initializationErrors)||(this.lastNotifiedItems=new Map(this.items),this.lastNotifiedErrors=new Map(this.initializationErrors),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}}function ut(r){return r.replace(/[-_\s]+(.)?/g,(t,e)=>e?e.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function A(r,t){let e=null;return(...n)=>{e&&clearTimeout(e),e=setTimeout(()=>{t(...n)},r)}}function lt(r){if(Object.prototype.toString.call(r)!=="[object Object]")return!1;const t=Object.getPrototypeOf(r);return t===Object.prototype||t===null}function T(r){if(Array.isArray(r))return r.map(T);if(lt(r)){const t=Object.create(null);for(const[e,n]of Object.entries(r))t[ut(e)]=T(n);return t}return r}function dt(){const r=document.querySelector('meta[name="csrf-token"]');if(r)return r.getAttribute("content");const t=document.cookie.match(/(?:^|; )_csrf_token=([^;]*)/);return t?decodeURIComponent(t[1]):null}class O{state="mounting";el;_beforeDestroyCallbacks=[];onBeforeDestroy(t){this._beforeDestroyCallbacks.push(t)}pushEvent;pushEventTo;handleEvent;mounted(){}destroyed(){}updated(){}isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}_runBeforeDestroyCallbacks(){for(const t of this._beforeDestroyCallbacks.reverse())t();this._beforeDestroyCallbacks=[]}}function D(r){return{async mounted(){const t=new r;this.el.instance=t,t.el=this.el,t.pushEvent=(n,i,s)=>this.pushEvent?.(n,i,s),t.pushEventTo=(n,i,s,o)=>this.pushEventTo?.(n,i,s,o),t.handleEvent=(n,i)=>this.handleEvent?.(n,i),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",t._runBeforeDestroyCallbacks(),await t.destroyed?.(),t.state="destroyed"},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()},updated(){return this.el.instance.updated?.()}}}function Y(r){return Object.keys(r).length===0&&r.constructor===Object}function ht(r){return r==null}function mt(r,t){const e=Object.entries(r).map(([n,i])=>[n,t(i,n)]);return Object.fromEntries(e)}function B(r){if(r===null)return null;const t=Number.parseInt(r,10);return Number.isNaN(t)?null:t}function pt(r){return r==null||r.trim()===""?null:JSON.parse(r)}function ft(r,t){if(r===t)return!0;const e=Object.keys(r),n=Object.keys(t);if(e.length!==n.length)return!1;for(const i of e)if(r[i]!==t[i]||!Object.prototype.hasOwnProperty.call(t,i))return!1;return!0}function wt(){return Math.random().toString(36).substring(2)}function gt(r,{timeOutAfter:t=500,retryAfter:e=100}={}){return new Promise((n,i)=>{const s=Date.now();let o=null;const u=setTimeout(()=>{i(o??new Error("Timeout"))},t),c=async()=>{try{const l=await r();clearTimeout(u),n(l)}catch(l){o=l,Date.now()-s>t?i(l):setTimeout(c,e)}};c()})}function yt(r,t,e){const n=!r.editorName||r.editorName==="ClassicEditor",i=new Set([...Object.keys(t),...Object.keys(e.roots??{})]),s=Array.from(i).reduce((u,c)=>({...u,[c]:{...e.roots?.[c],...c==="main"?e.root:{},...c in t?{initialData:t[c].initialValue,...!n&&{element:t[c].content}}:{}}}),Object.create(e.roots||{})),o={...e,roots:s,...n&&{attachTo:t.main?.content}};return delete o.root,o}function bt(r){const t=[r.ui?.element,r.ui?.view?.toolbar?.element,r.ui?.view?.menuBarView?.element].filter(Boolean);for(const s of t)i(s);const e=r.ui?.view?.body?._bodyCollectionContainer;e?.isConnected&&i(e);const n=r.editing?.view;if(n)for(const s of n.domRoots.values())s instanceof HTMLElement&&(s.removeAttribute("contenteditable"),s.removeAttribute("role"),s.removeAttribute("aria-label"),s.removeAttribute("aria-multiline"),s.removeAttribute("spellcheck"),s.classList.remove("ck","ck-content","ck-editor__editable","ck-rounded-corners","ck-editor__editable_inline","ck-blurred","ck-focused"),i(s));function i(s){s.hasAttribute("data-cke-controlled")?s.innerHTML="":s.remove()}}const U=Symbol.for("context-editor-watchdog");async function kt({context:r,creator:t,config:e}){const n=wt();await r.add({creator:t.create.bind(t),id:n,type:"editor",config:e});const i=r.getItem(n),s={state:"available",editorContextId:n,context:r};i[U]=s;const o=r.destroy.bind(r);return r.destroy=async()=>(s.state="unavailable",o()),{...s,editor:i}}function J(r){return U in r?r[U]:null}function F(r){return"addEditable"in r.ui}function R(r){return["inline","classic","balloon","decoupled"].includes(r)}async function Et(r){const t=await import("ckeditor5"),n={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[r];if(!n)throw new Error(`Unsupported editor type: ${r}`);return n}class S{static the=new S;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 G(r){const t=await import("ckeditor5");let e=null;const n=r.map(async i=>{const s=await S.the.get(i);if(s)return s;const{[i]: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{[i]:u}=e||{};if(u)return u;throw new Error(`Plugin "${i}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(n),hasPremium:!!e}}async function X(r,t){const e=[r.ui,r.content];return await Promise.all([W("ckeditor5",e),t&&W("ckeditor5-premium-features",e)].filter(i=>!!i)).then(i=>i.flat())}async function W(r,t){return await Promise.all(t.filter(e=>e!=="en").map(async e=>{const n=await vt(r,e);return n?.default??n}).filter(Boolean))}async function vt(r,t){try{if(r==="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 ${r}/${t}:`,e),null}}function Q(r){return mt(r,t=>({dictionary:t}))}function Z(r){const t=document.querySelectorAll([`[data-cke-editor-id="${r}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", ")),e=Array.from(t).reduce((u,c)=>{const l=c.getAttribute("data-cke-editable-root-name"),d=c.getAttribute("data-cke-editable-initial-value")||"",h=c.querySelector("[data-cke-editable-content]");return!l||!h?u:{...u,[l]:{content:h,initialValue:d}}},Object.create({})),n=document.querySelector(`[phx-hook="CKEditor5"][id="${r}"]`);if(!n)return e;const i=n.getAttribute("data-cke-initial-value")||"",s=n.querySelector(`#${r}_editor `),o=e.main;return o?{...e,main:{...o,initialValue:o.initialValue||i}}:s?{...e,main:{content:s,initialValue:i}}:e}const L=["inline","classic","balloon","decoupled","multiroot"];function Ct(r){const t=r.getAttribute("data-cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:e,config:n,license:i,watchdog:s,...o}=JSON.parse(t);if(!e||!n||!i)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!L.includes(e))throw new Error(`Invalid editor type: ${e}. Must be one of: ${L.join(", ")}.`);return{type:e,license:i,watchdog:s,config:T(n),customTranslations:o.customTranslations||o.custom_translations}}function I(r){if(!r||typeof r!="object")return r;if(Array.isArray(r))return r.map(n=>I(n));const t=r;if(t.$element&&typeof t.$element=="string"){const n=document.querySelector(t.$element);return n||console.warn(`Element not found for selector: ${t.$element}`),n||null}const e=Object.create(null);for(const[n,i]of Object.entries(r))e[n]=I(i);return e}function x(r,t,e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(s=>x(r,t,s));const n=e;if(n.$translation&&typeof n.$translation=="string"){const s=n.$translation,o=Pt(r,s,t);return o===void 0&&console.warn(`Translation not found for key: ${s}`),o!==void 0?o:null}const i=Object.create(null);for(const[s,o]of Object.entries(e))i[s]=x(r,t,o);return i}function Pt(r,t,e){for(const n of r){const i=n[e];if(i?.dictionary&&t in i.dictionary)return i.dictionary[t]}}function At(r,t){const{editing:e}=r;e.view.change(n=>{n.setStyle("height",`${t}px`,e.view.document.getRoot())})}const M=Symbol.for("elixir-editor-watchdog");async function Tt(r,t){const{EditorWatchdog:e}=await import("ckeditor5"),n=new e(null,t??{crashNumberLimit:10,minimumNonErrorTimePeriod:5e3});return n.setCreator(async()=>{const i=await r();return i[M]=n,i}),n}function tt(r){return M in r?r[M]:null}class y extends K{static the=new y}function It(r){const t=r.getAttribute("data-cke-context");if(!t)throw new Error('CKEditor5 hook requires a "data-cke-context" attribute on the element.');const{config:e,...n}=JSON.parse(t);return{config:T(e),customTranslations:n.customTranslations||n.custom_translations,watchdogConfig:n.watchdogConfig||n.watchdog_config}}class xt extends O{contextPromise=null;get attrs(){const t=n=>this.el.getAttribute(n)||null,e={id:this.el.id,config:It(this.el),language:{ui:t("data-cke-language")||"en",content:t("data-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:n,watchdogConfig:i,config:{plugins:s,...o}}=this.attrs.config,{loadedPlugins:u,hasPremium:c}=await G(s??[]),d=[...await X(e,c),Q(n?.dictionary||{})].filter(p=>!Y(p));let h=I(o);h=x([...d].reverse(),e.ui,h),this.contextPromise=(async()=>{const{ContextWatchdog:p,Context:E}=await import("ckeditor5"),b=new p(E,{crashNumberLimit:10,...i});return await b.create({...h,language:e,plugins:u,...d.length&&{translations:d}}),b.on("itemError",(...v)=>{console.error("Context item error:",...v)}),b})();const w=await this.contextPromise;this.isBeingDestroyed()||y.the.register(t,w)}async destroyed(){const{id:t}=this.attrs;this.el.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,y.the.hasItem(t)&&y.the.unregister(t)}}}function Ot(r){return r.hasAttribute("data-cke-context")}function Dt(r){let t=r;for(;t;){if(Ot(t))return t;t=t.parentElement}return null}async function St(r){const t=Dt(r);return t?y.the.waitFor(t.id):null}const Nt=D(xt);function Rt(r,t){const e=new Set;return n=>{let i=!1;return r.model.enqueueChange({isUndoable:!1},s=>{const o=r.model.document.getRoot(t);if(o){for(const u of e)n&&u in n||(s.removeAttribute(u,o),e.delete(u),i=!0);for(const[u,c]of Object.entries(n??{}))s.setAttribute(u,c,o),e.add(u),i=!0}}),i}}async function Vt(){const{Plugin:r,FileRepository:t}=await import("ckeditor5");return class extends r{static get pluginName(){return"PhoenixUploadAdapter"}static get requires(){return[t]}init(){const{editor:n}=this,{plugins:i,config:s}=n,o=s.get("phoenixUpload.url");if(!o||i.has("SimpleUploadAdapter")||i.has("Base64UploadAdapter")||i.has("CKFinderUploadAdapter"))return;const u=i.get(t);u.createUploadAdapter=c=>new Ut(c,o)}}}class Ut{loader;uploadUrl;abortController=null;constructor(t,e){this.loader=t,this.uploadUrl=e}async upload(){const t=await this.loader.file;this.abortController=new AbortController;const e=new FormData;e.append("file",t),t.size&&(this.loader.uploadTotal=t.size,this.loader.uploaded=0);const n={},i=dt();i&&(n["X-CSRF-Token"]=i);try{const s=await fetch(this.uploadUrl,{method:"POST",headers:n,body:e,signal:this.abortController.signal});if(!s.ok){let u="Couldn't upload file!";try{const c=await s.json();c?.error?.message&&(u=c.error.message)}catch{}throw new Error(u)}return this.loader.uploaded=this.loader.uploadTotal,{default:(await s.json()).url}}catch(s){throw s.name==="AbortError"?s:s.message||"Couldn't upload file!"}}abort(){this.abortController?.abort(),this.abortController=null}}async function Mt({editorId:r,saveDebounceMs:t}){const{Plugin:e}=await import("ckeditor5");return class extends e{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:i}=this;this.input=document.getElementById(`${r}_input`),this.input&&(i.model.document.on("change:data",A(t,()=>this.sync())),i.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{const i=this.editor.getData();this.input.value=i,this.input.dispatchEvent(new Event("input",{bubbles:!0}))};destroy(){this.form&&this.form.removeEventListener("submit",this.sync),this.input=null,this.form=null}}}const $=Symbol("suppress-phoenix-sync");async function $t(r){const{Plugin:t}=await import("ckeditor5"),{editorId:e,saveDebounceMs:n,events:i,pushEvent:s,handleEvent:o}=r;return class extends t{static get pluginName(){return"SyncEditorWithPhoenix"}init(){const{editor:c}=this;i.change&&this.setupTypingContentPush(),i.blur&&this.setupEventPush("blur"),i.focus&&this.setupEventPush("focus"),i.ready&&this.editor.once("ready",()=>{s("ckeditor5:ready",{editorId:e,data:V(c)})}),o("ckeditor5:set-data",({editorId:l,data:d})=>{(ht(l)||l===e)&&c.setData(d)})}setupTypingContentPush(){const{editor:c}=this;let l=null,d=!1;const h=()=>{if(d)return;const p=V(c);(!l||!ft(l,p))&&(s("ckeditor5:change",{editorId:e,data:p}),l=p)},w=A(n,h);c.model.document.on("change:data",A(10,p=>{if(_t(p)){l=null;return}c.ui.focusTracker.isFocused?w():h()})),c.once("ready",h),c.once("destroy",()=>{d=!0})}setupEventPush(c){const{editor:l}=this,d=()=>{const{isFocused:h}=l.ui.focusTracker;(h?"focus":"blur")===c&&s(`ckeditor5:${c}`,{editorId:e,data:V(l)})};l.ui.focusTracker.on("change:isFocused",d)}}}function V(r){return r.model.document.getRootNames().reduce((e,n)=>(e[n]=r.getData({rootName:n}),e),Object.create({}))}function _t(r){const t=r[$];return delete r[$],!!t}function zt(r){let t=!1;const e=n=>{t||(n[$]=!0)};return r.model.document.once("change:data",e,{priority:"highest"}),()=>{t=!0,r.model.document.off("change:data",e)}}class et{el;rootName;valueAttrName;rootAttrsAttrName;isDestroyed=!1;cleanupCallbacks=[];editor;pendingValue=null;previousValue=null;attrsUpdater=null;constructor({el:t,editor:e,rootName:n,valueAttrName:i="data-cke-value",rootAttrsAttrName:s="data-cke-root-attrs"}){this.el=t,this.editor=e,this.rootName=n,this.valueAttrName=i,this.rootAttrsAttrName=s;const{value:o}=this.attrs;this.previousValue=o,this.setupSyncHandlers(e,this.rootName)}get attrs(){return{rootAttributes:pt(this.el.getAttribute(this.rootAttrsAttrName)),value:this.el.getAttribute(this.valueAttrName)}}async updated(){const{editor:t}=this,{value:e,rootAttributes:n}=this.attrs;if(!t||t.state==="destroyed"||this.isDestroyed)return;let i=()=>{};t.model.enqueueChange({isUndoable:!1},()=>{let s=this.attrsUpdater?.(n);e!==this.previousValue&&(this.previousValue=e,t.ui.focusTracker.isFocused?this.pendingValue=e:(this.setRootValue(t,this.rootName,e),s=!0)),s&&(i=zt(t))}),i()}setupSyncHandlers(t,e){this.attrsUpdater=Rt(t,e),this.attrsUpdater(this.attrs.rootAttributes);const n=()=>{this.pendingValue=null},i=()=>{!t.ui.focusTracker.isFocused&&this.pendingValue!==null&&(this.setRootValue(t,e,this.pendingValue),this.pendingValue=null)};t.model.document.on("change:data",n),t.ui.focusTracker.on("change:isFocused",i),this.cleanupCallbacks.push(()=>{t.model.document.off("change:data",n),t.ui.focusTracker.off("change:isFocused",i)})}setRootValue(t,e,n){t.getData({rootName:e})!==n&&t.setData({[e]:n})}destroy(){this.isDestroyed=!0,this.cleanupCallbacks.forEach(t=>t()),this.cleanupCallbacks=[]}}class m extends K{static the=new m}class jt extends O{sentinel=null;get attrs(){const{el:t}=this,e=t.getAttribute.bind(t),n=t.hasAttribute.bind(t),i={editorId:e("id"),contextId:e("data-cke-context-id"),preset:Ct(t),editableHeight:B(e("data-cke-editable-height")),watchdog:n("data-cke-watchdog"),events:{change:n("data-cke-change-event"),blur:n("data-cke-blur-event"),focus:n("data-cke-focus-event"),ready:n("data-cke-ready-event")},saveDebounceMs:B(e("data-cke-save-debounce-ms"))??400,language:{ui:e("data-cke-language")||"en",content:e("data-cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:i,writable:!1,configurable:!1,enumerable:!0}),i}async mounted(){const{editorId:t}=this.attrs;m.the.resetErrors(t);try{const e=await this.createEditor();if(this.isBeingDestroyed())return;const n=m.the.mountEffect(t,i=>(i.once("destroy",()=>{m.the.unregister(t,!1)},{priority:"highest"}),this.sentinel=new et({editor:i,el:this.el,rootName:"main",valueAttrName:"data-cke-initial-value",rootAttrsAttrName:"data-cke-root-attrs"}),()=>{this.sentinel?.destroy(),this.sentinel=null}));this.onBeforeDestroy(async()=>{m.the.unregister(t),n();const i=J(e),s=tt(e);i?i.state!=="unavailable"&&await i.context.remove(i.editorContextId):s?await s.destroy():await e.destroy()}),m.the.register(t,e)}catch(e){console.error(e),m.the.error(t,e)}return this}async updated(){this.sentinel?.updated()}async destroyed(){this.el.style.display="none"}async createEditor(){const{preset:t,editorId:e,contextId:n,editableHeight:i,events:s,saveDebounceMs:o,language:u,watchdog:c}=this.attrs,{customTranslations:l,type:d,license:h,config:{plugins:w,...p}}=t,E=await Et(d),b=await(n?y.the.waitFor(n):St(this.el)),v=async()=>{const{loadedPlugins:f,hasPremium:C}=await G(w);R(d)&&f.push(await Mt({editorId:e,saveDebounceMs:o})),f.push(...await Promise.all([$t({editorId:e,saveDebounceMs:o,events:s,pushEvent:this.pushEvent.bind(this),handleEvent:this.handleEvent.bind(this)}),Vt()]));const k=[...await X(u,C),Q(l?.dictionary||{})].filter(j=>!Y(j));let P=Z(e);const N=Object.keys(P);R(d)&&N.push("main"),rt(P,N)||(P=await Ht(e,N));let g={...p,licenseKey:h.key,plugins:f,language:u,...k.length&&{translations:k}};g=I(g),g=x([...k].reverse(),u.ui,g),g=yt(E,P,g);const z=await(async()=>b?(await kt({context:b,creator:E,config:g})).editor:E.create(g))();return R(d)&&i&&At(z,i),z};if(c&&!b){const f=await Tt(v,t.watchdog);return f.on("error",(C,{causesRestart:_})=>{if(_){const k=m.the.getItem(e);k&&(bt(k),m.the.unregister(e))}}),f.on("restart",()=>{const C=f.editor;m.the.register(e,C)}),await f.create({}),f.editor}return v()}}function rt(r,t){return t.every(e=>r[e])}async function Ht(r,t){return gt(()=>{const e=Z(r);if(!rt(e,t))throw new Error(`It looks like not all required root elements are present yet.
|
|
1
|
+
"use strict";var at=Object.create;var H=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ot=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var ct=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of it(t))!st.call(r,i)&&i!==e&&H(r,i,{get:()=>t[i],enumerable:!(n=nt(t,i))||n.enumerable});return r};var a=(r,t,e)=>(e=r!=null?at(ot(r)):{},ct(t||!r||!r.__esModule?H(e,"default",{value:r,enumerable:!0}):e,r));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function q(r,t){if(!r||r.size!==t.size)return!1;for(const[e,n]of r)if(!t.has(e)||t.get(e)!==n)return!1;return!0}class K{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;batchDepth=0;lastNotifiedItems=null;lastNotifiedErrors=null;execute(t,e,n){const i=this.items.get(t),o=this.initializationErrors.get(t);return o?(n?.(o),Promise.reject(o)):i?Promise.resolve(e(i)):new Promise((c,u)=>{const s=this.getPendingCallbacks(t);s.success.push(async l=>{c(await e(l))}),n?s.error.push(n):s.error.push(u)})}mountEffect(t,e){let n,i,o=!1;const c=this.watch(u=>{const s=u.get(t);if(s!==i&&(n?.(),n=void 0,i=s,!!s))try{const l=e(s);o?(l?.(),c()):n=l}catch(l){throw console.error(l),l}});return()=>{o=!0,i&&(c(),n?.(),n=void 0)}}register(t,e){this.batch(()=>{if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,e);const n=this.pendingCallbacks.get(t);n&&(n.success.forEach(i=>i(e)),this.pendingCallbacks.delete(t)),this.items.size===1&&t!==null&&this.register(null,e)})}error(t,e){this.batch(()=>{this.items.delete(t),this.initializationErrors.set(t,e);const n=this.pendingCallbacks.get(t);n&&(n.error.forEach(i=>i(e)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,e)})}resetErrors(t){const{initializationErrors:e}=this;e.has(null)&&e.get(null)===e.get(t)&&e.delete(null),e.delete(t)}unregister(t,e=!0){this.batch(()=>{t&&this.items.get(null)===this.items.get(t)&&this.unregister(null,!1),this.items.delete(t),e&&this.pendingCallbacks.delete(t),this.resetErrors(t)})}getItems(){return Array.from(this.items.values())}getItem(t){return this.items.get(t)}hasItem(t){return this.items.has(t)}waitFor(t){return new Promise((e,n)=>{this.execute(t,e,n)})}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.flushWatchers()}async reset(){await this.destroyAll(),this.watchers.clear()}batch(t){this.batchDepth++;try{return t()}finally{this.batchDepth--,this.batchDepth===0&&this.flushWatchers()}}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)}flushWatchers(){q(this.lastNotifiedItems,this.items)&&q(this.lastNotifiedErrors,this.initializationErrors)||(this.lastNotifiedItems=new Map(this.items),this.lastNotifiedErrors=new Map(this.initializationErrors),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}}function ut(r){return r.replace(/[-_\s]+(.)?/g,(t,e)=>e?e.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function P(r,t){let e=null;return(...n)=>{e&&clearTimeout(e),e=setTimeout(()=>{t(...n)},r)}}function lt(r){if(Object.prototype.toString.call(r)!=="[object Object]")return!1;const t=Object.getPrototypeOf(r);return t===Object.prototype||t===null}function T(r){if(Array.isArray(r))return r.map(T);if(lt(r)){const t=Object.create(null);for(const[e,n]of Object.entries(r))t[ut(e)]=T(n);return t}return r}function dt(){const r=document.querySelector('meta[name="csrf-token"]');if(r)return r.getAttribute("content");const t=document.cookie.match(/(?:^|; )_csrf_token=([^;]*)/);return t?decodeURIComponent(t[1]):null}class O{state="mounting";el;_beforeDestroyCallbacks=[];onBeforeDestroy(t){this._beforeDestroyCallbacks.push(t)}pushEvent;pushEventTo;handleEvent;mounted(){}destroyed(){}updated(){}isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}_runBeforeDestroyCallbacks(){for(const t of this._beforeDestroyCallbacks.reverse())t();this._beforeDestroyCallbacks=[]}}function D(r){return{async mounted(){const t=new r;this.el.instance=t,t.el=this.el,t.pushEvent=(n,i,o)=>this.pushEvent?.(n,i,o),t.pushEventTo=(n,i,o,c)=>this.pushEventTo?.(n,i,o,c),t.handleEvent=(n,i)=>this.handleEvent?.(n,i),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",t._runBeforeDestroyCallbacks(),await t.destroyed?.(),t.state="destroyed"},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()},updated(){return this.el.instance.updated?.()}}}function Y(r){return Object.keys(r).length===0&&r.constructor===Object}function mt(r){return r==null}function ht(r,t){const e=Object.entries(r).map(([n,i])=>[n,t(i,n)]);return Object.fromEntries(e)}function B(r){if(r===null)return null;const t=Number.parseInt(r,10);return Number.isNaN(t)?null:t}function pt(r){return r==null||r.trim()===""?null:JSON.parse(r)}function ft(r,t){if(r===t)return!0;const e=Object.keys(r),n=Object.keys(t);if(e.length!==n.length)return!1;for(const i of e)if(r[i]!==t[i]||!Object.prototype.hasOwnProperty.call(t,i))return!1;return!0}function wt(){return Math.random().toString(36).substring(2)}function gt(r,{timeOutAfter:t=500,retryAfter:e=100}={}){return new Promise((n,i)=>{const o=Date.now();let c=null;const u=setTimeout(()=>{i(c??new Error("Timeout"))},t),s=async()=>{try{const l=await r();clearTimeout(u),n(l)}catch(l){c=l,Date.now()-o>t?i(l):setTimeout(s,e)}};s()})}function yt(r,t,e){const n=!r.editorName||r.editorName==="ClassicEditor",i=new Set([...Object.keys(t),...Object.keys(e.roots??{})]),o=Array.from(i).reduce((u,s)=>({...u,[s]:{...e.roots?.[s],...s==="main"?e.root:{},...s in t?{initialData:t[s].initialValue,modelElement:t[s].modelElement||"$root",...!n&&{element:t[s].content}}:{}}}),{...e.roots||{}}),c={...e,roots:o,...n&&{attachTo:t.main?.content}};return delete c.root,c}function bt(r){const t=[r.ui?.element,r.ui?.view?.toolbar?.element,r.ui?.view?.menuBarView?.element].filter(Boolean);for(const o of t)i(o);const e=r.ui?.view?.body?._bodyCollectionContainer;e?.isConnected&&i(e);const n=r.editing?.view;if(n)for(const o of n.domRoots.values())o instanceof HTMLElement&&(o.removeAttribute("contenteditable"),o.removeAttribute("role"),o.removeAttribute("aria-label"),o.removeAttribute("aria-multiline"),o.removeAttribute("spellcheck"),o.classList.remove("ck","ck-content","ck-editor__editable","ck-rounded-corners","ck-editor__editable_inline","ck-blurred","ck-focused"),i(o));function i(o){o.hasAttribute("data-cke-controlled")?o.innerHTML="":o.remove()}}const $=Symbol.for("context-editor-watchdog");async function kt({context:r,creator:t,config:e}){const n=wt();await r.add({creator:t.create.bind(t),id:n,type:"editor",config:e});const i=r.getItem(n),o={state:"available",editorContextId:n,context:r};i[$]=o;const c=r.destroy.bind(r);return r.destroy=async()=>(o.state="unavailable",c()),{...o,editor:i}}function J(r){return $ in r?r[$]:null}function F(r){return"addEditable"in r.ui}function R(r){return["inline","classic","balloon","decoupled"].includes(r)}async function Et(r){const t=await import("ckeditor5"),n={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[r];if(!n)throw new Error(`Unsupported editor type: ${r}`);return n}class S{static the=new S;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 G(r){const t=await import("ckeditor5");let e=null;const n=r.map(async i=>{const o=await S.the.get(i);if(o)return o;const{[i]:c}=t;if(c)return c;if(!e)try{e=await import("ckeditor5-premium-features")}catch(s){console.error(`Failed to load premium package: ${s}`)}const{[i]:u}=e||{};if(u)return u;throw new Error(`Plugin "${i}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(n),hasPremium:!!e}}async function X(r,t){const e=[r.ui,r.content];return await Promise.all([W("ckeditor5",e),t&&W("ckeditor5-premium-features",e)].filter(i=>!!i)).then(i=>i.flat())}async function W(r,t){return await Promise.all(t.filter(e=>e!=="en").map(async e=>{const n=await vt(r,e);return n?.default??n}).filter(Boolean))}async function vt(r,t){try{if(r==="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 ${r}/${t}:`,e),null}}function Q(r){return ht(r,t=>({dictionary:t}))}function Z(r){const t=document.querySelectorAll([`[data-cke-editor-id="${r}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", ")),e=Array.from(t).reduce((u,s)=>{const l=s.getAttribute("data-cke-editable-root-name"),m=s.getAttribute("data-cke-editable-root-model-element-name")||null,d=s.getAttribute("data-cke-editable-initial-value")||"",f=s.querySelector("[data-cke-editable-content]");return!l||!f?u:{...u,[l]:{content:f,initialValue:d,modelElement:m}}},Object.create(null)),n=document.querySelector(`[phx-hook="CKEditor5"][id="${r}"]`);if(!n)return e;const i=n.getAttribute("data-cke-root-model-element-name"),o=n.getAttribute("data-cke-initial-value")||"";if(e.main)return{...e,main:{...e.main,modelElement:e.main.modelElement||i,initialValue:e.main.initialValue||o}};const c=n.querySelector(`#${r}_editor `);return c?{...e,main:{content:c,initialValue:o,modelElement:n.getAttribute("data-cke-root-model-element-name")||"$root"}}:e}const L=["inline","classic","balloon","decoupled","multiroot"];function Ct(r){const t=r.getAttribute("data-cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:e,config:n,license:i,watchdog:o,...c}=JSON.parse(t);if(!e||!n||!i)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!L.includes(e))throw new Error(`Invalid editor type: ${e}. Must be one of: ${L.join(", ")}.`);return{type:e,license:i,watchdog:o,config:T(n),customTranslations:c.customTranslations||c.custom_translations}}function I(r){if(!r||typeof r!="object")return r;if(Array.isArray(r))return r.map(n=>I(n));const t=r;if(t.$element&&typeof t.$element=="string"){const n=document.querySelector(t.$element);return n||console.warn(`Element not found for selector: ${t.$element}`),n||null}const e=Object.create(null);for(const[n,i]of Object.entries(r))e[n]=I(i);return e}function x(r,t,e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>x(r,t,o));const n=e;if(n.$translation&&typeof n.$translation=="string"){const o=n.$translation,c=At(r,o,t);return c===void 0&&console.warn(`Translation not found for key: ${o}`),c!==void 0?c:null}const i=Object.create(null);for(const[o,c]of Object.entries(e))i[o]=x(r,t,c);return i}function At(r,t,e){for(const n of r){const i=n[e];if(i?.dictionary&&t in i.dictionary)return i.dictionary[t]}}function Pt(r,t){const{editing:e}=r;e.view.change(n=>{n.setStyle("height",`${t}px`,e.view.document.getRoot())})}const U=Symbol.for("elixir-editor-watchdog");async function Tt(r,t){const{EditorWatchdog:e}=await import("ckeditor5"),n=new e(null,t??{crashNumberLimit:10,minimumNonErrorTimePeriod:5e3});return n.setCreator(async()=>{const i=await r();return i[U]=n,i}),n}function tt(r){return U in r?r[U]:null}class y extends K{static the=new y}function It(r){const t=r.getAttribute("data-cke-context");if(!t)throw new Error('CKEditor5 hook requires a "data-cke-context" attribute on the element.');const{config:e,...n}=JSON.parse(t);return{config:T(e),customTranslations:n.customTranslations||n.custom_translations,watchdogConfig:n.watchdogConfig||n.watchdog_config}}class xt extends O{contextPromise=null;get attrs(){const t=n=>this.el.getAttribute(n)||null,e={id:this.el.id,config:It(this.el),language:{ui:t("data-cke-language")||"en",content:t("data-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:n,watchdogConfig:i,config:{plugins:o,...c}}=this.attrs.config,{loadedPlugins:u,hasPremium:s}=await G(o??[]),m=[...await X(e,s),Q(n?.dictionary||{})].filter(p=>!Y(p));let d=I(c);d=x([...m].reverse(),e.ui,d),this.contextPromise=(async()=>{const{ContextWatchdog:p,Context:E}=await import("ckeditor5"),b=new p(E,{crashNumberLimit:10,...i});return await b.create({...d,language:e,plugins:u,...m.length&&{translations:m}}),b.on("itemError",(...v)=>{console.error("Context item error:",...v)}),b})();const f=await this.contextPromise;this.isBeingDestroyed()||y.the.register(t,f)}async destroyed(){const{id:t}=this.attrs;this.el.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,y.the.hasItem(t)&&y.the.unregister(t)}}}function Ot(r){return r.hasAttribute("data-cke-context")}function Dt(r){let t=r;for(;t;){if(Ot(t))return t;t=t.parentElement}return null}async function St(r){const t=Dt(r);return t?y.the.waitFor(t.id):null}const Nt=D(xt);function Rt(r,t){const e=new Set;return n=>{let i=!1;return r.model.enqueueChange({isUndoable:!1},o=>{const c=r.model.document.getRoot(t);if(c){for(const u of e)n&&u in n||(o.removeAttribute(u,c),e.delete(u),i=!0);for(const[u,s]of Object.entries(n??{}))o.setAttribute(u,s,c),e.add(u),i=!0}}),i}}async function Vt(){const{Plugin:r,FileRepository:t}=await import("ckeditor5");return class extends r{static get pluginName(){return"PhoenixUploadAdapter"}static get requires(){return[t]}init(){const{editor:n}=this,{plugins:i,config:o}=n,c=o.get("phoenixUpload.url");if(!c||i.has("SimpleUploadAdapter")||i.has("Base64UploadAdapter")||i.has("CKFinderUploadAdapter"))return;const u=i.get(t);u.createUploadAdapter=s=>new $t(s,c)}}}class $t{loader;uploadUrl;abortController=null;constructor(t,e){this.loader=t,this.uploadUrl=e}async upload(){const t=await this.loader.file;this.abortController=new AbortController;const e=new FormData;e.append("file",t),t.size&&(this.loader.uploadTotal=t.size,this.loader.uploaded=0);const n={},i=dt();i&&(n["X-CSRF-Token"]=i);try{const o=await fetch(this.uploadUrl,{method:"POST",headers:n,body:e,signal:this.abortController.signal});if(!o.ok){let u="Couldn't upload file!";try{const s=await o.json();s?.error?.message&&(u=s.error.message)}catch{}throw new Error(u)}return this.loader.uploaded=this.loader.uploadTotal,{default:(await o.json()).url}}catch(o){throw o.name==="AbortError"?o:o.message||"Couldn't upload file!"}}abort(){this.abortController?.abort(),this.abortController=null}}async function Ut({editorId:r,saveDebounceMs:t}){const{Plugin:e}=await import("ckeditor5");return class extends e{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:i}=this;this.input=document.getElementById(`${r}_input`),this.input&&(i.model.document.on("change:data",P(t,()=>this.sync())),i.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{const i=this.editor.getData();this.input.value=i,this.input.dispatchEvent(new Event("input",{bubbles:!0}))};destroy(){this.form&&this.form.removeEventListener("submit",this.sync),this.input=null,this.form=null}}}const M=Symbol("suppress-phoenix-sync");async function Mt(r){const{Plugin:t}=await import("ckeditor5"),{editorId:e,saveDebounceMs:n,events:i,pushEvent:o,handleEvent:c}=r;return class extends t{static get pluginName(){return"SyncEditorWithPhoenix"}init(){const{editor:s}=this;i.change&&this.setupTypingContentPush(),i.blur&&this.setupEventPush("blur"),i.focus&&this.setupEventPush("focus"),i.ready&&this.editor.once("ready",()=>{o("ckeditor5:ready",{editorId:e,data:V(s)})}),c("ckeditor5:set-data",({editorId:l,data:m})=>{(mt(l)||l===e)&&s.setData(m)})}setupTypingContentPush(){const{editor:s}=this;let l=null,m=!1;const d=()=>{if(m)return;const p=V(s);(!l||!ft(l,p))&&(o("ckeditor5:change",{editorId:e,data:p}),l=p)},f=P(n,d);s.model.document.on("change:data",P(10,p=>{if(_t(p)){l=null;return}s.ui.focusTracker.isFocused?f():d()})),s.once("ready",d),s.once("destroy",()=>{m=!0})}setupEventPush(s){const{editor:l}=this,m=()=>{const{isFocused:d}=l.ui.focusTracker;(d?"focus":"blur")===s&&o(`ckeditor5:${s}`,{editorId:e,data:V(l)})};l.ui.focusTracker.on("change:isFocused",m)}}}function V(r){return r.model.document.getRootNames().reduce((e,n)=>(e[n]=r.getData({rootName:n}),e),Object.create(null))}function _t(r){const t=r[M];return delete r[M],!!t}function zt(r){let t=!1;const e=n=>{t||(n[M]=!0)};return r.model.document.once("change:data",e,{priority:"highest"}),()=>{t=!0,r.model.document.off("change:data",e)}}class et{el;rootName;valueAttrName;rootAttrsAttrName;isDestroyed=!1;cleanupCallbacks=[];editor;pendingValue=null;previousValue=null;attrsUpdater=null;constructor({el:t,editor:e,rootName:n,valueAttrName:i="data-cke-value",rootAttrsAttrName:o="data-cke-root-attrs"}){this.el=t,this.editor=e,this.rootName=n,this.valueAttrName=i,this.rootAttrsAttrName=o;const{value:c}=this.attrs;this.previousValue=c,this.setupSyncHandlers(e,this.rootName)}get attrs(){return{rootAttributes:pt(this.el.getAttribute(this.rootAttrsAttrName)),value:this.el.getAttribute(this.valueAttrName)}}async updated(){const{editor:t}=this,{value:e,rootAttributes:n}=this.attrs;if(!t||t.state==="destroyed"||this.isDestroyed)return;let i=()=>{};t.model.enqueueChange({isUndoable:!1},()=>{let o=this.attrsUpdater?.(n);e!==this.previousValue&&(this.previousValue=e,t.ui.focusTracker.isFocused?this.pendingValue=e:(this.setRootValue(t,this.rootName,e),o=!0)),o&&(i=zt(t))}),i()}setupSyncHandlers(t,e){this.attrsUpdater=Rt(t,e),this.attrsUpdater(this.attrs.rootAttributes);const n=()=>{this.pendingValue=null},i=()=>{!t.ui.focusTracker.isFocused&&this.pendingValue!==null&&(this.setRootValue(t,e,this.pendingValue),this.pendingValue=null)};t.model.document.on("change:data",n),t.ui.focusTracker.on("change:isFocused",i),this.cleanupCallbacks.push(()=>{t.model.document.off("change:data",n),t.ui.focusTracker.off("change:isFocused",i)})}setRootValue(t,e,n){t.getData({rootName:e})!==n&&t.setData({[e]:n})}destroy(){this.isDestroyed=!0,this.cleanupCallbacks.forEach(t=>t()),this.cleanupCallbacks=[]}}class h extends K{static the=new h}class jt extends O{sentinel=null;get attrs(){const{el:t}=this,e=t.getAttribute.bind(t),n=t.hasAttribute.bind(t),i={editorId:e("id"),contextId:e("data-cke-context-id"),preset:Ct(t),editableHeight:B(e("data-cke-editable-height")),watchdog:n("data-cke-watchdog"),events:{change:n("data-cke-change-event"),blur:n("data-cke-blur-event"),focus:n("data-cke-focus-event"),ready:n("data-cke-ready-event")},saveDebounceMs:B(e("data-cke-save-debounce-ms"))??400,language:{ui:e("data-cke-language")||"en",content:e("data-cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:i,writable:!1,configurable:!1,enumerable:!0}),i}async mounted(){const{editorId:t}=this.attrs;h.the.resetErrors(t);try{const e=await this.createEditor();if(this.isBeingDestroyed())return;const n=h.the.mountEffect(t,i=>(i.once("destroy",()=>{h.the.unregister(t,!1)},{priority:"highest"}),this.sentinel=new et({editor:i,el:this.el,rootName:"main",valueAttrName:"data-cke-initial-value",rootAttrsAttrName:"data-cke-root-attrs"}),()=>{this.sentinel?.destroy(),this.sentinel=null}));this.onBeforeDestroy(async()=>{h.the.unregister(t),n();const i=J(e),o=tt(e);i?i.state!=="unavailable"&&await i.context.remove(i.editorContextId):o?await o.destroy():await e.destroy()}),h.the.register(t,e)}catch(e){console.error(e),h.the.error(t,e)}return this}async updated(){this.sentinel?.updated()}async destroyed(){this.el.style.display="none"}async createEditor(){const{preset:t,editorId:e,contextId:n,editableHeight:i,events:o,saveDebounceMs:c,language:u,watchdog:s}=this.attrs,{customTranslations:l,type:m,license:d,config:{plugins:f,...p}}=t,E=await Et(m),b=await(n?y.the.waitFor(n):St(this.el)),v=async()=>{const{loadedPlugins:w,hasPremium:C}=await G(f);R(m)&&w.push(await Ut({editorId:e,saveDebounceMs:c})),w.push(...await Promise.all([Mt({editorId:e,saveDebounceMs:c,events:o,pushEvent:this.pushEvent.bind(this),handleEvent:this.handleEvent.bind(this)}),Vt()]));const k=[...await X(u,C),Q(l?.dictionary||{})].filter(j=>!Y(j));let A=Z(e);const N=Object.keys(A);R(m)&&N.push("main"),rt(A,N)||(A=await Ht(e,N));let g={...p,licenseKey:d.key,plugins:w,language:u,...k.length&&{translations:k}};g=I(g),g=x([...k].reverse(),u.ui,g),g=yt(E,A,g);const z=await(async()=>b?(await kt({context:b,creator:E,config:g})).editor:E.create(g))();return R(m)&&i&&Pt(z,i),z};if(s&&!b){const w=await Tt(v,t.watchdog);return w.on("error",(C,{causesRestart:_})=>{if(_){const k=h.the.getItem(e);k&&(bt(k),h.the.unregister(e))}}),w.on("restart",()=>{const C=w.editor;h.the.register(e,C)}),await w.create({}),w.editor}return v()}}function rt(r,t){return t.every(e=>r[e])}async function Ht(r,t){return gt(()=>{const e=Z(r);if(!rt(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(n=>!e[n]).join(", ")}.`);return e},{timeOutAfter:2e3,retryAfter:100})}const qt=D(jt);class Bt extends O{sentinel=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}mounted(){const{editableId:t,editorId:e,rootName:n,initialValue:i}=this.attrs,
|
|
4
|
+
Missing roots: ${t.filter(n=>!e[n]).join(", ")}.`);return e},{timeOutAfter:2e3,retryAfter:100})}const qt=D(jt);class Bt extends O{sentinel=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"),modelElement:this.el.getAttribute("data-cke-editable-root-model-element-name")||null,initialValue:this.el.getAttribute("data-cke-editable-initial-value")||""};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}mounted(){const{editableId:t,editorId:e,rootName:n,initialValue:i,modelElement:o}=this.attrs,c=h.the.mountEffect(e,u=>{const s=this.el.querySelector("[data-cke-editable-content]");if(this.isBeingDestroyed())return;const l=this.el.querySelector(`#${t}_input`);if(F(u)&&!u.model.document.getRoot(n)){const{ui:d,editing:f}=u;u.addRoot(n,{isUndoable:!1,initialData:i,modelElement:o||"$root"});const p=d.view.createEditable(n,s);d.addEditable(p),f.view.forceRender()}this.sentinel=new et({el:this.el,editor:u,rootName:n,valueAttrName:"data-cke-editable-initial-value",rootAttrsAttrName:"data-cke-editable-root-attrs"});const m=l?Wt(l,u,n):null;return()=>{if(m?.(),this.sentinel?.destroy(),this.sentinel=null,u.state!=="destroyed"){const d=u.model.document.getRoot(n);d&&F(u)&&(u.ui.view.editables[n]&&u.detachEditable(d),d.isAttached()&&u.detachRoot(n,!1))}}});this.onBeforeDestroy(()=>{this.el.style.display="none",c()})}async updated(){this.sentinel?.updated()}}const Ft=D(Bt);function Wt(r,t,e){const n=()=>{r.value=t.getData({rootName:e})},i=P(200,n);return t.model.document.on("change:data",i),n(),()=>{t.model.document.off("change:data",i)}}class Lt extends O{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}mounted(){const{editorId:t,name:e}=this.attrs,n=h.the.mountEffect(t,i=>{if(this.isBeingDestroyed())return;const{ui:o}=i,c=Kt(e),u=o.view[c];if(!u){console.error(`Unknown UI part name: "${e}". Supported names are "toolbar" and "menubar".`);return}return this.el.appendChild(u.element),()=>{this.el.innerHTML=""}});this.onBeforeDestroy(()=>{this.el.style.display="none",n()})}}function Kt(r){switch(r){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const Yt=D(Lt),Jt={CKEditor5:qt,CKEditable:Ft,CKUIPart:Yt,CKContext:Nt};exports.ContextsRegistry=y;exports.CustomEditorPluginsRegistry=S;exports.EditorsRegistry=h;exports.Hooks=Jt;exports.unwrapEditorContext=J;exports.unwrapEditorWatchdog=tt;
|
|
5
5
|
//# sourceMappingURL=index.cjs.map
|