ckeditor5-phoenix 1.14.1 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/editor/editor.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +249 -183
- package/dist/index.mjs.map +1 -1
- package/dist/shared/async-registry.d.ts +39 -9
- package/dist/shared/async-registry.d.ts.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/is-nil.d.ts +2 -0
- package/dist/shared/is-nil.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/hooks/editor/editor.test.ts +59 -5
- package/src/hooks/editor/editor.ts +31 -14
- package/src/shared/async-registry.test.ts +301 -25
- package/src/shared/async-registry.ts +148 -46
- package/src/shared/index.ts +1 -0
- package/src/shared/is-nil.test.ts +21 -0
- package/src/shared/is-nil.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/hooks/editor/editor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/hooks/editor/editor.ts"],"names":[],"mappings":"AA6ZA;;GAEG;AACH,eAAO,MAAM,UAAU,kGAA2B,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var X=Object.create;var R=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var tt=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var rt=(a,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Z(t))!et.call(a,n)&&n!==r&&R(a,n,{get:()=>t[n],enumerable:!(i=Q(t,n))||i.enumerable});return a};var e=(a,t,r)=>(r=a!=null?X(tt(a)):{},rt(t||!a||!a.__esModule?R(r,"default",{value:a,enumerable:!0}):r,a));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class B{items=new Map;callbacks=new Map;watchers=new Set;execute(t,r){const{callbacks:i,items:n}=this,o=n.get(t);return o?Promise.resolve(r(o)):new Promise(s=>{const c=async u=>s(await r(u));this.callbacks.has(t)||i.set(t,[]),i.set(t,[...i.get(t),c])})}register(t,r){const{items:i,callbacks:n}=this,o=n.get(t);if(i.has(t))throw new Error(`Item with ID "${t}" is already registered.`);i.set(t,r),o&&(o.forEach(s=>s(r)),n.delete(t)),this.items.size===1&&this.register(null,r),this.notifyWatchers()}unregister(t){const{items:r,callbacks:i}=this;if(!r.has(t))throw new Error(`Item with ID "${t}" is not registered.`);t&&this.items.get(null)===r.get(t)&&this.unregister(null),r.delete(t),i.delete(t),this.notifyWatchers()}getItems(){return Array.from(this.items.values())}hasItem(t){return this.items.has(t)}waitFor(t){return this.execute(t,r=>r)}async destroyAll(){const t=Array.from(new Set(this.items.values())).map(r=>r.destroy());this.items.clear(),this.callbacks.clear(),await Promise.all(t),this.notifyWatchers()}watch(t){return this.watchers.add(t),t(new Map(this.items)),this.unwatch.bind(this,t)}unwatch(t){this.watchers.delete(t)}notifyWatchers(){const t=new Map(this.items);this.watchers.forEach(r=>r(t))}}function at(a){return a.replace(/[-_\s]+(.)?/g,(t,r)=>r?r.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function A(a,t){let r=null;return(...i)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...i)},a)}}function it(a){if(Object.prototype.toString.call(a)!=="[object Object]")return!1;const t=Object.getPrototypeOf(a);return t===Object.prototype||t===null}function E(a){if(Array.isArray(a))return a.map(E);if(it(a)){const t=Object.create(null);for(const[r,i]of Object.entries(a))t[at(r)]=E(i);return t}return a}class k{state="mounting";el;liveSocket;pushEvent;pushEventTo;handleEvent;isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}}function P(a){return{async mounted(){const t=new a;this.el.instance=t,t.el=this.el,t.liveSocket=this.liveSocket,t.pushEvent=(i,n,o)=>this.pushEvent?.(i,n,o),t.pushEventTo=(i,n,o,s)=>this.pushEventTo?.(i,n,o,s),t.handleEvent=(i,n)=>this.handleEvent?.(i,n),t.state="mounting";const r=await t.mounted?.();return t.state="mounted",r},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(a){return Object.keys(a).length===0&&a.constructor===Object}function $(a,t){const r=Object.entries(a).map(([i,n])=>[i,t(n,i)]);return Object.fromEntries(r)}function N(a){if(a===null)return null;const t=Number.parseInt(a,10);return Number.isNaN(t)?null:t}function nt(){return Math.random().toString(36).substring(2)}const T=Symbol.for("context-editor-watchdog");async function ot({element:a,context:t,creator:r,config:i}){const n=nt();await t.add({creator:(u,f)=>r.create(u,f),id:n,sourceElementOrData:a,type:"editor",config:i});const o=t.getItem(n),s={state:"available",editorContextId:n,context:t};o[T]=s;const c=t.destroy.bind(t);return t.destroy=async()=>(s.state="unavailable",c()),{...s,editor:o}}function U(a){return T in a?a[T]:null}function j(a){return["inline","classic","balloon","decoupled"].includes(a)}async function st(a){const t=await import("ckeditor5"),i={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[a];if(!i)throw new Error(`Unsupported editor type: ${a}`);return i}class v{static the=new v;plugins=new Map;constructor(){}register(t,r){if(this.plugins.has(t))throw new Error(`Plugin with name "${t}" is already registered.`);return this.plugins.set(t,r),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 _(a){const t=await import("ckeditor5");let r=null;const i=a.map(async n=>{const o=await v.the.get(n);if(o)return o;const{[n]:s}=t;if(s)return s;if(!r)try{r=await import("ckeditor5-premium-features")}catch(u){console.error(`Failed to load premium package: ${u}`)}const{[n]:c}=r||{};if(c)return c;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(i),hasPremium:!!r}}async function z(a,t){const r=[a.ui,a.content];return await Promise.all([V("ckeditor5",r),t&&V("ckeditor5-premium-features",r)].filter(n=>!!n)).then(n=>n.flat())}async function V(a,t){return await Promise.all(t.filter(r=>r!=="en").map(async r=>{const i=await ct(a,r);return i?.default??i}).filter(Boolean))}async function ct(a,t){try{if(a==="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(r){return console.error(`Failed to load translation for ${a}/${t}:`,r),null}}function K(a){return $(a,t=>({dictionary:t}))}function D(a){const t=document.querySelectorAll([`[data-cke-editor-id="${a}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", "));return Array.from(t).reduce((r,i)=>{const n=i.getAttribute("data-cke-editable-root-name"),o=i.getAttribute("data-cke-editable-initial-value")||"",s=i.querySelector("[data-cke-editable-content]");return!n||!s?r:{...r,[n]:{content:s,initialValue:o}}},Object.create({}))}const W=["inline","classic","balloon","decoupled","multiroot"];function ut(a){const t=a.getAttribute("cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:r,config:i,license:n,...o}=JSON.parse(t);if(!r||!i||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!W.includes(r))throw new Error(`Invalid editor type: ${r}. Must be one of: ${W.join(", ")}.`);return{type:r,license:n,config:E(i),customTranslations:o.customTranslations||o.custom_translations}}function x(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>x(i));const t=a;if(t.$element&&typeof t.$element=="string"){const i=document.querySelector(t.$element);return i||console.warn(`Element not found for selector: ${t.$element}`),i||null}const r=Object.create(null);for(const[i,n]of Object.entries(a))r[i]=x(n);return r}function lt(a,t){const{editing:r}=a;r.view.change(i=>{i.setStyle("height",`${t}px`,r.view.document.getRoot())})}const O=Symbol.for("elixir-editor-watchdog");async function dt(a){const{EditorWatchdog:t}=await import("ckeditor5"),r=new t(a);return r.setCreator(async(...i)=>{const n=await a.create(...i);return n[O]=r,n}),{watchdog:r,Constructor:{create:async(...i)=>(await r.create(...i),r.editor)}}}function F(a){return O in a?a[O]:null}class h extends B{static the=new h}function mt(a){const t=a.getAttribute("cke-context");if(!t)throw new Error('CKEditor5 hook requires a "cke-context" attribute on the element.');const{config:r,...i}=JSON.parse(t);return{config:E(r),customTranslations:i.customTranslations||i.custom_translations,watchdogConfig:i.watchdogConfig||i.watchdog_config}}class pt extends k{contextPromise=null;get attrs(){const t=i=>this.el.getAttribute(i)||null,r={id:this.el.id,config:mt(this.el),language:{ui:t("cke-language")||"en",content:t("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:r,writable:!1,configurable:!1,enumerable:!0}),r}async mounted(){const{id:t,language:r}=this.attrs,{customTranslations:i,watchdogConfig:n,config:{plugins:o,...s}}=this.attrs.config,{loadedPlugins:c,hasPremium:u}=await _(o??[]),d=[...await z(r,u),K(i?.dictionary||{})].filter(b=>!L(b));this.contextPromise=(async()=>{const{ContextWatchdog:b,Context:C}=await import("ckeditor5"),p=new b(C,{crashNumberLimit:10,...n});return await p.create({...s,language:r,plugins:c,...d.length&&{translations:d}}),p.on("itemError",(...y)=>{console.error("Context item error:",...y)}),p})();const g=await this.contextPromise;this.isBeingDestroyed()||h.the.register(t,g)}async destroyed(){const{id:t}=this.attrs;this.el.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,h.the.hasItem(t)&&h.the.unregister(t)}}}function wt(a){return a.hasAttribute("cke-context")}function ht(a){let t=a;for(;t;){if(wt(t))return t;t=t.parentElement}return null}async function ft(a){const t=ht(a);return t?h.the.waitFor(t.id):null}const gt=P(pt);class m extends B{static the=new m}class bt extends k{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:r,rootName:i,initialValue:n}=this.attrs,o=this.el.querySelector(`#${t}_input`);this.editorPromise=m.the.execute(r,s=>{const{ui:c,editing:u,model:f}=s;if(f.document.getRoot(i))return s;s.addRoot(i,{isUndoable:!1,data:n});const d=this.el.querySelector("[data-cke-editable-content]"),g=c.view.createEditable(i,d);return c.addEditable(g),u.view.forceRender(),o&&Et(o,s,i),s})}async destroyed(){const{rootName:t}=this.attrs;this.el.style.display="none";const r=await this.editorPromise;if(this.editorPromise=null,r&&r.state!=="destroyed"){const i=r.model.document.getRoot(t);i&&"detachEditable"in r&&(r.detachEditable(i),r.detachRoot(t,!1))}}}const yt=P(bt);function Et(a,t,r){const i=()=>{a.value=t.getData({rootName:r})};t.model.document.on("change:data",A(100,i)),i()}class kt extends k{editorPromise=null;get attrs(){const{el:t}=this,r=t.getAttribute.bind(t),i=t.hasAttribute.bind(t),n={editorId:r("id"),contextId:r("cke-context-id"),preset:ut(t),editableHeight:N(r("cke-editable-height")),watchdog:i("cke-watchdog"),events:{change:i("cke-change-event"),blur:i("cke-blur-event"),focus:i("cke-focus-event")},saveDebounceMs:N(r("cke-save-debounce-ms"))??400,language:{ui:r("cke-language")||"en",content:r("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;this.editorPromise=this.createEditor();const r=await this.editorPromise;return this.isBeingDestroyed()||(m.the.register(t,r),r.once("destroy",()=>{m.the.hasItem(t)&&m.the.unregister(t)})),this}async destroyed(){this.el.style.display="none";try{const t=await this.editorPromise,r=U(t),i=F(t);r?r.state!=="unavailable"&&await r.context.remove(r.editorContextId):i?await i.destroy():await t.destroy()}finally{this.editorPromise=null}}async createEditor(){const{preset:t,editorId:r,contextId:i,editableHeight:n,events:o,saveDebounceMs:s,language:c,watchdog:u}=this.attrs,{customTranslations:f,type:d,license:g,config:{plugins:b,...C}}=t;let p=await st(d);const y=await(i?h.the.waitFor(i):ft(this.el));if(u&&!y){const l=await dt(p);({Constructor:p}=l),l.watchdog.on("restart",()=>{const M=l.watchdog.editor;this.editorPromise=Promise.resolve(M),m.the.register(r,M)})}const{loadedPlugins:Y,hasPremium:J}=await _(b),S=[...await z(c,J),K(f?.dictionary||{})].filter(l=>!L(l)),I=Ct(r,d),H={...x(C),initialData:It(r,d),licenseKey:g.key,plugins:Y,language:c,...S.length&&{translations:S}},w=await(async()=>!y||!(I instanceof HTMLElement)?p.create(I,H):(await ot({context:y,element:I,creator:p,config:H})).editor)();if(o.change&&this.setupTypingContentPush(r,w,s),o.blur&&this.setupEventPush(r,w,"blur"),o.focus&&this.setupEventPush(r,w,"focus"),this.handleEvent("ckeditor5:set-data",({data:l})=>{w.setData(l)}),j(d)){const l=document.getElementById(`${r}_input`);l&&Pt(l,w,s),n&<(w,n)}return w}setupTypingContentPush(t,r,i){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:t,data:q(r)})};r.model.document.on("change:data",A(i,n)),n()}setupEventPush(t,r,i){const n=()=>{const{isFocused:o}=r.ui.focusTracker;(o?"focus":"blur")===i&&this.pushEvent(`ckeditor5:${i}`,{editorId:t,data:q(r)})};r.ui.focusTracker.on("change:isFocused",n)}}function q(a){return a.model.document.getRootNames().reduce((r,i)=>(r[i]=a.getData({rootName:i}),r),Object.create({}))}function Pt(a,t,r){const i=()=>{const n=t.getData();a.value=n,a.dispatchEvent(new Event("input",{bubbles:!0}))};t.model.document.on("change:data",A(r,i)),vt(a)?.addEventListener("submit",i),i()}function vt(a){return a.closest("form")}function Ct(a,t){if(t==="decoupled"){const{content:i}=G(a);return i}if(j(t))return document.getElementById(`${a}_editor`);const r=D(a);return $(r,({content:i})=>i)}function It(a,t){if(t==="decoupled"){const{initialValue:i}=G(a);if(i)return i}if(j(t))return document.getElementById(a)?.getAttribute("cke-initial-value")||"";const r=D(a);return $(r,({initialValue:i})=>i)}function G(a){const t=D(a).main;if(!t)throw new Error(`No "main" editable found for editor with ID "${a}".`);return t}const Tt=P(kt);class xt extends k{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:r}=this.attrs;this.mountedPromise=m.the.execute(t,i=>{const{ui:n}=i,o=Ot(r),s=n.view[o];if(!s){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.el.appendChild(s.element)})}async destroyed(){this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.el.innerHTML=""}}function Ot(a){switch(a){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const At=P(xt),$t={CKEditor5:Tt,CKEditable:yt,CKUIPart:At,CKContext:gt};exports.CustomEditorPluginsRegistry=v;exports.EditorsRegistry=m;exports.Hooks=$t;exports.unwrapEditorContext=U;exports.unwrapEditorWatchdog=F;
|
|
1
|
+
"use strict";var X=Object.create;var z=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var tt=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var rt=(a,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Z(t))!et.call(a,n)&&n!==e&&z(a,n,{get:()=>t[n],enumerable:!(i=Q(t,n))||i.enumerable});return a};var r=(a,t,e)=>(e=a!=null?X(tt(a)):{},rt(t||!a||!a.__esModule?z(e,"default",{value:a,enumerable:!0}):e,a));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class q{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,e,i){const n=this.items.get(t),s=this.initializationErrors.get(t);return s?(i?.(s),Promise.reject(s)):n?Promise.resolve(e(n)):new Promise((o,c)=>{const u=this.getPendingCallbacks(t);u.success.push(async p=>{o(await e(p))}),i?u.error.push(i):u.error.push(c)})}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 i=this.pendingCallbacks.get(t);i&&(i.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 i=this.pendingCallbacks.get(t);i&&(i.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,i)=>{this.execute(t,e,i)})}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 at(a){return a.replace(/[-_\s]+(.)?/g,(t,e)=>e?e.toUpperCase():"").replace(/^./,t=>t.toLowerCase())}function D(a,t){let e=null;return(...i)=>{e&&clearTimeout(e),e=setTimeout(()=>{t(...i)},a)}}function it(a){if(Object.prototype.toString.call(a)!=="[object Object]")return!1;const t=Object.getPrototypeOf(a);return t===Object.prototype||t===null}function k(a){if(Array.isArray(a))return a.map(k);if(it(a)){const t=Object.create(null);for(const[e,i]of Object.entries(a))t[at(e)]=k(i);return t}return a}class P{state="mounting";el;liveSocket;pushEvent;pushEventTo;handleEvent;isBeingDestroyed(){return this.state==="destroyed"||this.state==="destroying"}}function v(a){return{async mounted(){const t=new a;this.el.instance=t,t.el=this.el,t.liveSocket=this.liveSocket,t.pushEvent=(i,n,s)=>this.pushEvent?.(i,n,s),t.pushEventTo=(i,n,s,o)=>this.pushEventTo?.(i,n,s,o),t.handleEvent=(i,n)=>this.handleEvent?.(i,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 B(a){return Object.keys(a).length===0&&a.constructor===Object}function nt(a){return a==null}function $(a,t){const e=Object.entries(a).map(([i,n])=>[i,t(n,i)]);return Object.fromEntries(e)}function R(a){if(a===null)return null;const t=Number.parseInt(a,10);return Number.isNaN(t)?null:t}function st(){return Math.random().toString(36).substring(2)}const x=Symbol.for("context-editor-watchdog");async function ot({element:a,context:t,creator:e,config:i}){const n=st();await t.add({creator:(u,p)=>e.create(u,p),id:n,sourceElementOrData:a,type:"editor",config:i});const s=t.getItem(n),o={state:"available",editorContextId:n,context:t};s[x]=o;const c=t.destroy.bind(t);return t.destroy=async()=>(o.state="unavailable",c()),{...o,editor:s}}function L(a){return x in a?a[x]:null}function j(a){return["inline","classic","balloon","decoupled"].includes(a)}async function ct(a){const t=await import("ckeditor5"),i={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[a];if(!i)throw new Error(`Unsupported editor type: ${a}`);return i}class C{static the=new C;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(a){const t=await import("ckeditor5");let e=null;const i=a.map(async n=>{const s=await C.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(u){console.error(`Failed to load premium package: ${u}`)}const{[n]:c}=e||{};if(c)return c;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(i),hasPremium:!!e}}async function _(a,t){const e=[a.ui,a.content];return await Promise.all([N("ckeditor5",e),t&&N("ckeditor5-premium-features",e)].filter(n=>!!n)).then(n=>n.flat())}async function N(a,t){return await Promise.all(t.filter(e=>e!=="en").map(async e=>{const i=await ut(a,e);return i?.default??i}).filter(Boolean))}async function ut(a,t){try{if(a==="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 ${a}/${t}:`,e),null}}function K(a){return $(a,t=>({dictionary:t}))}function S(a){const t=document.querySelectorAll([`[data-cke-editor-id="${a}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", "));return Array.from(t).reduce((e,i)=>{const n=i.getAttribute("data-cke-editable-root-name"),s=i.getAttribute("data-cke-editable-initial-value")||"",o=i.querySelector("[data-cke-editable-content]");return!n||!o?e:{...e,[n]:{content:o,initialValue:s}}},Object.create({}))}const V=["inline","classic","balloon","decoupled","multiroot"];function lt(a){const t=a.getAttribute("cke-preset");if(!t)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:e,config:i,license:n,...s}=JSON.parse(t);if(!e||!i||!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:k(i),customTranslations:s.customTranslations||s.custom_translations}}function O(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>O(i));const t=a;if(t.$element&&typeof t.$element=="string"){const i=document.querySelector(t.$element);return i||console.warn(`Element not found for selector: ${t.$element}`),i||null}const e=Object.create(null);for(const[i,n]of Object.entries(a))e[i]=O(n);return e}function dt(a,t){const{editing:e}=a;e.view.change(i=>{i.setStyle("height",`${t}px`,e.view.document.getRoot())})}const A=Symbol.for("elixir-editor-watchdog");async function mt(a){const{EditorWatchdog:t}=await import("ckeditor5"),e=new t(a);return e.setCreator(async(...i)=>{const n=await a.create(...i);return n[A]=e,n}),{watchdog:e,Constructor:{create:async(...i)=>(await e.create(...i),e.editor)}}}function F(a){return A in a?a[A]:null}class g extends q{static the=new g}function pt(a){const t=a.getAttribute("cke-context");if(!t)throw new Error('CKEditor5 hook requires a "cke-context" attribute on the element.');const{config:e,...i}=JSON.parse(t);return{config:k(e),customTranslations:i.customTranslations||i.custom_translations,watchdogConfig:i.watchdogConfig||i.watchdog_config}}class ht extends P{contextPromise=null;get attrs(){const t=i=>this.el.getAttribute(i)||null,e={id:this.el.id,config:pt(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:i,watchdogConfig:n,config:{plugins:s,...o}}=this.attrs.config,{loadedPlugins:c,hasPremium:u}=await U(s??[]),m=[...await _(e,u),K(i?.dictionary||{})].filter(b=>!B(b));this.contextPromise=(async()=>{const{ContextWatchdog:b,Context:I}=await import("ckeditor5"),h=new b(I,{crashNumberLimit:10,...n});return await h.create({...o,language:e,plugins:c,...m.length&&{translations:m}}),h.on("itemError",(...y)=>{console.error("Context item error:",...y)}),h})();const f=await this.contextPromise;this.isBeingDestroyed()||g.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,g.the.hasItem(t)&&g.the.unregister(t)}}}function wt(a){return a.hasAttribute("cke-context")}function gt(a){let t=a;for(;t;){if(wt(t))return t;t=t.parentElement}return null}async function ft(a){const t=gt(a);return t?g.the.waitFor(t.id):null}const bt=v(ht);class d extends q{static the=new d}class yt extends P{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:i,initialValue:n}=this.attrs,s=this.el.querySelector(`#${t}_input`);this.editorPromise=d.the.execute(e,o=>{const{ui:c,editing:u,model:p}=o;if(p.document.getRoot(i))return o;o.addRoot(i,{isUndoable:!1,data:n});const m=this.el.querySelector("[data-cke-editable-content]"),f=c.view.createEditable(i,m);return c.addEditable(f),u.view.forceRender(),s&&kt(s,o,i),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 i=e.model.document.getRoot(t);i&&"detachEditable"in e&&(e.detachEditable(i),e.detachRoot(t,!1))}}}const Et=v(yt);function kt(a,t,e){const i=()=>{a.value=t.getData({rootName:e})};t.model.document.on("change:data",D(100,i)),i()}class Pt extends P{editorPromise=null;get attrs(){const{el:t}=this,e=t.getAttribute.bind(t),i=t.hasAttribute.bind(t),n={editorId:e("id"),contextId:e("cke-context-id"),preset:lt(t),editableHeight:R(e("cke-editable-height")),watchdog:i("cke-watchdog"),events:{change:i("cke-change-event"),blur:i("cke-blur-event"),focus:i("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;d.the.resetErrors(t);try{this.editorPromise=this.createEditor();const e=await this.editorPromise;this.isBeingDestroyed()||(d.the.register(t,e),e.once("destroy",()=>{d.the.hasItem(t)&&d.the.unregister(t)}))}catch(e){this.editorPromise=null,d.the.error(t,e)}return this}async destroyed(){this.el.style.display="none";try{const t=await this.editorPromise;if(!t)return;const e=L(t),i=F(t);e?e.state!=="unavailable"&&await e.context.remove(e.editorContextId):i?await i.destroy():await t.destroy()}finally{this.editorPromise=null}}async createEditor(){const{preset:t,editorId:e,contextId:i,editableHeight:n,events:s,saveDebounceMs:o,language:c,watchdog:u}=this.attrs,{customTranslations:p,type:m,license:f,config:{plugins:b,...I}}=t;let h=await ct(m);const y=await(i?g.the.waitFor(i):ft(this.el));if(u&&!y){const l=await mt(h);({Constructor:h}=l),l.watchdog.on("restart",()=>{const E=l.watchdog.editor;this.editorPromise=Promise.resolve(E),d.the.register(e,E)})}const{loadedPlugins:Y,hasPremium:J}=await U(b),M=[...await _(c,J),K(p?.dictionary||{})].filter(l=>!B(l)),T=It(e,m),H={...O(I),initialData:Tt(e,m),licenseKey:f.key,plugins:Y,language:c,...M.length&&{translations:M}},w=await(async()=>!y||!(T instanceof HTMLElement)?h.create(T,H):(await ot({context:y,element:T,creator:h,config:H})).editor)();if(s.change&&this.setupTypingContentPush(e,w,o),s.blur&&this.setupEventPush(e,w,"blur"),s.focus&&this.setupEventPush(e,w,"focus"),this.handleEvent("ckeditor5:set-data",({editorId:l,data:E})=>{(nt(l)||l===this.attrs.editorId)&&w.setData(E)}),j(m)){const l=document.getElementById(`${e}_input`);l&&vt(l,w,o),n&&dt(w,n)}return w}setupTypingContentPush(t,e,i){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:t,data:W(e)})};e.model.document.on("change:data",D(i,n)),n()}setupEventPush(t,e,i){const n=()=>{const{isFocused:s}=e.ui.focusTracker;(s?"focus":"blur")===i&&this.pushEvent(`ckeditor5:${i}`,{editorId:t,data:W(e)})};e.ui.focusTracker.on("change:isFocused",n)}}function W(a){return a.model.document.getRootNames().reduce((e,i)=>(e[i]=a.getData({rootName:i}),e),Object.create({}))}function vt(a,t,e){const i=()=>{const n=t.getData();a.value=n,a.dispatchEvent(new Event("input",{bubbles:!0}))};t.model.document.on("change:data",D(e,i)),Ct(a)?.addEventListener("submit",i),i()}function Ct(a){return a.closest("form")}function It(a,t){if(t==="decoupled"){const{content:i}=G(a);return i}if(j(t))return document.getElementById(`${a}_editor`);const e=S(a);return $(e,({content:i})=>i)}function Tt(a,t){if(t==="decoupled"){const{initialValue:i}=G(a);if(i)return i}if(j(t))return document.getElementById(a)?.getAttribute("cke-initial-value")||"";const e=S(a);return $(e,({initialValue:i})=>i)}function G(a){const t=S(a).main;if(!t)throw new Error(`No "main" editable found for editor with ID "${a}".`);return t}const xt=v(Pt);class Ot extends P{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=d.the.execute(t,i=>{const{ui:n}=i,s=At(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 At(a){switch(a){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const Dt=v(Ot),$t={CKEditor5:xt,CKEditable:Et,CKUIPart:Dt,CKContext:bt};exports.CustomEditorPluginsRegistry=C;exports.EditorsRegistry=d;exports.Hooks=$t;exports.unwrapEditorContext=L;exports.unwrapEditorWatchdog=F;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|