ckeditor5-livewire 1.2.9 → 1.3.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.
@@ -7,10 +7,27 @@ export declare class EditableComponentHook extends ClassHook<Snapshot> {
7
7
  * The promise that resolves when the editable is mounted.
8
8
  */
9
9
  private editorPromise;
10
+ /**
11
+ * Pending content to apply when the editor loses focus.
12
+ */
13
+ private pendingContent;
10
14
  /**
11
15
  * Mounts the editable component.
12
16
  */
13
17
  mounted(): void;
18
+ /**
19
+ * Setups the content sync from the editor to Livewire on user input with debounce.
20
+ */
21
+ private syncTypingContentPush;
22
+ /**
23
+ * Sets up handlers that manage pending incoming content (clears pending
24
+ * content on user edits and applies pending content on blur).
25
+ */
26
+ private setupPendingReceivedContentHandlers;
27
+ /**
28
+ * Applies canonical content to the editor while respecting focus/pending state.
29
+ */
30
+ private applyCanonicalContentToEditor;
14
31
  /**
15
32
  * Called when the component is updated by Livewire.
16
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../../src/hooks/editable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC5D;;OAEG;IACH,OAAO,CAAC,aAAa,CAAgD;IAErE;;OAEG;IACM,OAAO;IA4DhB;;OAEG;IACY,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjD;;OAEG;IACY,SAAS;CAoBzB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
1
+ {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../../../src/hooks/editable.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC5D;;OAEG;IACH,OAAO,CAAC,aAAa,CAAgD;IAErE;;OAEG;IACH,OAAO,CAAC,cAAc,CAAuB;IAE7C;;OAEG;IACM,OAAO;IAgDhB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;OAGG;IACH,OAAO,CAAC,mCAAmC;IAmB3C;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAsBrC;;OAEG;IACY,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjD;;OAEG;IACY,SAAS;CAoBzB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"livewire-sync.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/editor/plugins/livewire-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAKrD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,EACE,cAAc,EACd,SAAS,GACV,EAAE,KAAK,GACP,OAAO,CAAC,iBAAiB,CAAC,CAiI5B;AAUD;;GAEG;AACH,KAAK,KAAK,GAAG;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAAC"}
1
+ {"version":3,"file":"livewire-sync.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/editor/plugins/livewire-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAKrD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,EACE,cAAc,EACd,SAAS,GACV,EAAE,KAAK,GACP,OAAO,CAAC,iBAAiB,CAAC,CAyI5B;AAUD;;GAEG;AACH,KAAK,KAAK,GAAG;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var J=Object.create;var H=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var tt=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var rt=(n,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Z(t))!et.call(n,a)&&a!==r&&H(n,a,{get:()=>t[a],enumerable:!(i=Q(t,a))||i.enumerable});return n};var e=(n,t,r)=>(r=n!=null?J(tt(n)):{},rt(t||!n||!n.__esModule?H(r,"default",{value:n,enumerable:!0}):r,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class v{constructor(t){this.livewireComponent=t}state="mounting";get canonical(){return this.livewireComponent.canonical}get element(){return this.livewireComponent.el}get $wire(){return this.livewireComponent.$wire}isBeingDestroyed(){return["destroyed","destroying"].includes(this.state)}}function A(n,t){const r=new Map;window.Livewire?.hook("component.init",async({component:i,cleanup:a})=>{if(i.name!==n)return;const o=new t(i);r.set(i.id,o),a(async()=>{o.state="destroying",await o.destroyed(),o.state="destroyed",r.delete(i.id)}),await o.mounted(),o.state="mounted"}),window.Livewire?.hook("commit",async({component:i,succeed:a})=>{i.name===n&&a(()=>{const o=r.get(i.id);o?.state==="mounted"&&o?.afterCommitSynced?.()})})}class j{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,r,i){const a=this.items.get(t),o=this.initializationErrors.get(t);return o?(i?.(o),Promise.reject(o)):a?Promise.resolve(r(a)):new Promise((s,c)=>{const u=this.getPendingCallbacks(t);u.success.push(async l=>{s(await r(l))}),i?u.error.push(i):u.error.push(c)})}register(t,r){if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,r);const i=this.pendingCallbacks.get(t);i&&(i.success.forEach(a=>a(r)),this.pendingCallbacks.delete(t)),this.registerAsDefault(t,r),this.notifyWatchers()}error(t,r){this.items.delete(t),this.initializationErrors.set(t,r);const i=this.pendingCallbacks.get(t);i&&(i.error.forEach(a=>a(r)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,r),this.notifyWatchers()}resetErrors(t){const{initializationErrors:r}=this;r.has(null)&&r.get(null)===r.get(t)&&r.delete(null),r.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((r,i)=>{this.execute(t,r,i)})}async destroyAll(){const t=Array.from(new Set(this.items.values())).map(r=>r.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 r=this.pendingCallbacks.get(t);return r||(r={success:[],error:[]},this.pendingCallbacks.set(t,r)),r}registerAsDefault(t,r){this.items.size===1&&t!==null&&this.register(null,r)}}function S(n,t){let r=null;return(...i)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...i)},n)}}function it(n,t){const r=Object.entries(n).filter(([i,a])=>t(a,i));return Object.fromEntries(r)}function V(n){return Object.keys(n).length===0&&n.constructor===Object}function $(n,t){const r=Object.entries(n).map(([i,a])=>[i,t(a,i)]);return Object.fromEntries(r)}function P(n,t){if(n===t)return!0;const r=Object.keys(n),i=Object.keys(t);if(r.length!==i.length)return!1;for(const a of r)if(n[a]!==t[a]||!Object.prototype.hasOwnProperty.call(t,a))return!1;return!0}function nt(){return Math.random().toString(36).substring(2)}function at(n,{timeOutAfter:t=500,retryAfter:r=100}={}){return new Promise((i,a)=>{const o=Date.now();let s=null;const c=setTimeout(()=>{a(s??new Error("Timeout"))},t),u=async()=>{try{const l=await n();clearTimeout(c),i(l)}catch(l){s=l,Date.now()-o>t?a(l):setTimeout(u,r)}};u()})}const x=Symbol.for("context-editor-watchdog");async function ot({element:n,context:t,creator:r,config:i}){const a=nt();await t.add({creator:(u,l)=>r.create(u,l),id:a,sourceElementOrData:n,type:"editor",config:i});const o=t.getItem(a),s={state:"available",editorContextId:a,context:t};o[x]=s;const c=t.destroy.bind(t);return t.destroy=async()=>(s.state="unavailable",c()),{...s,editor:o}}function st(n){return x in n?n[x]:null}function ct(n){return n.model.document.getRootNames().reduce((r,i)=>(r[i]=n.getData({rootName:i}),r),Object.create({}))}function I(n){return["inline","classic","balloon","decoupled"].includes(n)}function ut(n){let t=n;for(;t;){for(const r of t.attributes)if(r.name.startsWith("wire:model"))return!0;t=t.parentElement}return!1}async function lt(n){const t=await import("ckeditor5"),i={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[n];if(!i)throw new Error(`Unsupported editor type: ${n}`);return i}class T{static the=new T;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 F(n){const t=await import("ckeditor5");let r=null;const i=n.map(async a=>{const o=await T.the.get(a);if(o)return o;const{[a]: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{[a]:c}=r||{};if(c)return c;throw new Error(`Plugin "${a}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(i),hasPremium:!!r}}async function q(n,t){const r=[n.ui,n.content];return await Promise.all([L("ckeditor5",r),t&&L("ckeditor5-premium-features",r)].filter(a=>!!a)).then(a=>a.flat())}async function L(n,t){return await Promise.all(t.filter(r=>r!=="en").map(async r=>{const i=await mt(n,r);return i?.default??i}).filter(Boolean))}async function mt(n,t){try{if(n==="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 ${n}/${t}:`,r),null}}function N(n){return $(n,t=>({dictionary:t}))}function B(n){const t=U(n);return $(t,({element:r})=>r)}function U(n){const t=window.Livewire.all().filter(({name:s,canonical:c})=>s==="ckeditor5-editable"&&c.editorId===n).reduce((s,{canonical:c,el:u})=>({...s,[c.rootName]:{element:u.querySelector("[data-cke-editable-content]"),content:c.content}}),Object.create({})),i=window.Livewire.all().find(({name:s,canonical:c})=>s==="ckeditor5"&&c.editorId===n)?.canonical.content,a=document.querySelector(`#${n}_editor `),o=t.main;return o&&i?.main?{...t,main:{...o,content:o.content||i.main}}:a?{...t,main:{element:a,content:i?.main||null}}:t}function W(n){const t=U(n),r=$(t,({content:i})=>i);return it(r,i=>typeof i=="string")}function D(n){if(!n||typeof n!="object")return n;if(Array.isArray(n))return n.map(i=>D(i));const t=n;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,a]of Object.entries(n))r[i]=D(a);return r}function dt(n,t){const{editing:r}=n;r.view.change(i=>{i.setStyle("height",`${t}px`,r.view.document.getRoot())})}const O=Symbol.for("elixir-editor-watchdog");async function wt(n){const{EditorWatchdog:t}=await import("ckeditor5"),r=new t(n);return r.setCreator(async(...i)=>{const a=await n.create(...i);return a[O]=r,a}),{watchdog:r,Constructor:{create:async(...i)=>(await r.create(...i),r.editor)}}}function pt(n){return O in n?n[O]:null}class f extends j{static the=new f}class ht extends v{contextPromise=null;async mounted(){const{contextId:t,language:r,context:i}=this.canonical,{customTranslations:a,watchdogConfig:o,config:{plugins:s,...c}}=i,{loadedPlugins:u,hasPremium:l}=await F(s??[]),g=[...await q(r,l),N(a||{})].filter(w=>!V(w));this.contextPromise=(async()=>{const{ContextWatchdog:w,Context:E}=await import("ckeditor5"),h=new w(E,{crashNumberLimit:10,...o});return await h.create({...c,language:r,plugins:u,...g.length&&{translations:g}}),h.on("itemError",(...b)=>{console.error("Context item error:",...b)}),h})();const y=await this.contextPromise;this.isBeingDestroyed()||f.the.register(t,y)}async destroyed(){const{contextId:t}=this.canonical;this.element.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,f.the.hasItem(t)&&f.the.unregister(t)}}}class p extends j{static the=new p}class _ extends v{editorPromise=null;mounted(){const{editorId:t,rootName:r,content:i,saveDebounceMs:a}=this.canonical,o=this.element.querySelector("input");this.editorPromise=p.the.execute(t,s=>{if(this.isBeingDestroyed())return null;const{ui:c,editing:u,model:l}=s;if(l.document.getRoot(r)){if(i!==null){const w=s.getData({rootName:r});w&&w!==i&&s.setData({[r]:i})}return s}s.addRoot(r,{isUndoable:!1,...i!==null&&{data:i}});const d=this.element.querySelector("[data-cke-editable-content]"),g=c.view.createEditable(r,d);c.addEditable(g),u.view.forceRender();const y=()=>{const w=s.getData({rootName:r});o&&(o.value=w),this.$wire.set("content",w)};return s.model.document.on("change:data",S(a,y)),y(),s})}async afterCommitSynced(){const t=await this.editorPromise,{content:r,rootName:i}=this.canonical;t.getData({rootName:i})!==r&&t.setData({[i]:r??""})}async destroyed(){const{rootName:t}=this.canonical;this.element.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))}}}async function ft({saveDebounceMs:n,component:t}){const{Plugin:r}=await import("ckeditor5");return class extends r{static get pluginName(){return"LivewireSync"}init(){this.setupTypingContentPush(),this.setupFocusableEventPush(),this.setupContentServerSync()}setupContentServerSync(){const{editor:a}=this,{model:o,ui:{focusTracker:s}}=a;let c=null;a.on("afterCommitSynced",()=>{const{content:u}=t.canonical,l=this.getEditorRootsValues();if(ut(t.element)){if(s.isFocused){P(u,l)||(c=u);return}P(u,l)||a.setData(u)}}),Livewire.on("set-editor-content",({editorId:u,content:l})=>{if(u!==t.canonical.editorId)return;const d=this.getEditorRootsValues();P(d,l)||a.setData(l)}),o.document.on("change:data",()=>{c=null}),s.on("change:isFocused",()=>{!s.isFocused&&c!==null&&(a.setData(c),c=null)})}setupTypingContentPush(){const{model:a}=this.editor,{$wire:o}=t,s=()=>{const c=this.getEditorRootsValues();P(c,t.canonical.content??{})||(o.set("content",c),o.dispatch("editor-content-changed",{editorId:t.canonical.editorId,content:c}))};a.document.on("change:data",S(n,s)),this.editor.once("ready",s)}setupFocusableEventPush(){const{ui:a}=this.editor,{$wire:o}=t,s=()=>{const c=this.getEditorRootsValues();o.set("focused",a.focusTracker.isFocused),P(c,t.canonical.content??{})||o.set("content",c)};a.focusTracker.on("change:isFocused",s)}getEditorRootsValues(){return ct(this.editor)}}}async function gt(n){const{Plugin:t}=await import("ckeditor5");return class extends t{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:i}=this,o=i.sourceElement.id.replace(/_editor$/,"");this.input=document.getElementById(`${o}_input`),this.input&&(i.model.document.on("change:data",S(n,()=>this.sync())),i.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{if(this.input){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}}}class K extends v{editorPromise=null;async mounted(){const{editorId:t}=this.canonical;p.the.resetErrors(t);try{this.editorPromise=this.createEditor();const r=await this.editorPromise;this.isBeingDestroyed()||(p.the.register(t,r),r.once("destroy",()=>{p.the.hasItem(t)&&p.the.unregister(t)}))}catch(r){console.error(`Error initializing CKEditor5 instance with ID "${t}":`,r),this.editorPromise=null,p.the.error(t,r)}}async destroyed(){this.element.style.display="none";try{const t=await this.editorPromise;if(!t)return;const r=st(t),i=pt(t);r?r.state!=="unavailable"&&await r.context.remove(r.editorContextId):i?await i.destroy():await t.destroy()}finally{this.editorPromise=null}}async afterCommitSynced(){(await this.editorPromise)?.fire("afterCommitSynced")}async createEditor(){const{preset:t,editorId:r,contextId:i,editableHeight:a,saveDebounceMs:o,language:s,watchdog:c,content:u}=this.canonical,{customTranslations:l,editorType:d,licenseKey:g,config:{plugins:y,...w}}=t;let E=await lt(d);const h=await(i?f.the.waitFor(i):null);if(c&&!h){const m=await wt(E);({Constructor:E}=m),m.watchdog.on("restart",()=>{const C=m.watchdog.editor;this.editorPromise=Promise.resolve(C),p.the.register(r,C)})}const{loadedPlugins:b,hasPremium:X}=await F(y);b.push(await ft({saveDebounceMs:o,component:this})),I(d)&&b.push(await gt(o));const M=[...await q(s,X),N(l||{})].filter(m=>!V(m));let k={...u,...W(r)};I(d)&&(k=k.main||"");const R=await(async()=>{let m=B(r);if(!(m instanceof HTMLElement)&&!("main"in m)){const z=d==="decoupled"?["main"]:Object.keys(k);G(m,z)||(m=await yt(r,z),k={...u,...W(r)})}I(d)&&"main"in m&&(m=m.main);const C={...D(w),initialData:k,licenseKey:g,plugins:b,language:s,...M.length&&{translations:M}};return!h||!(m instanceof HTMLElement)?E.create(m,C):(await ot({context:h,element:m,creator:E,config:C})).editor})();return I(d)&&a&&dt(R,a),R}}function G(n,t){return t.every(r=>n[r])}async function yt(n,t){return at(()=>{const r=B(n);if(!G(r,t))throw new Error(`It looks like not all required root elements are present yet.
1
+ "use strict";var Q=Object.create;var z=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var et=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var it=(n,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of tt(t))!rt.call(n,a)&&a!==r&&z(n,a,{get:()=>t[a],enumerable:!(i=Z(t,a))||i.enumerable});return n};var e=(n,t,r)=>(r=n!=null?Q(et(n)):{},it(t||!n||!n.__esModule?z(r,"default",{value:n,enumerable:!0}):r,n));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class k{constructor(t){this.livewireComponent=t}state="mounting";get canonical(){return this.livewireComponent.canonical}get element(){return this.livewireComponent.el}get $wire(){return this.livewireComponent.$wire}isBeingDestroyed(){return["destroyed","destroying"].includes(this.state)}}function W(n,t){const r=new Map;window.Livewire?.hook("component.init",async({component:i,cleanup:a})=>{if(i.name!==n)return;const o=new t(i);r.set(i.id,o),a(async()=>{o.state="destroying",await o.destroyed(),o.state="destroyed",r.delete(i.id)}),await o.mounted(),o.state="mounted"}),window.Livewire?.hook("commit",async({component:i,succeed:a})=>{i.name===n&&a(()=>{const o=r.get(i.id);o?.state==="mounted"&&o?.afterCommitSynced?.()})})}class F{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,r,i){const a=this.items.get(t),o=this.initializationErrors.get(t);return o?(i?.(o),Promise.reject(o)):a?Promise.resolve(r(a)):new Promise((s,c)=>{const u=this.getPendingCallbacks(t);u.success.push(async l=>{s(await r(l))}),i?u.error.push(i):u.error.push(c)})}register(t,r){if(this.items.has(t))throw new Error(`Item with ID "${t}" is already registered.`);this.resetErrors(t),this.items.set(t,r);const i=this.pendingCallbacks.get(t);i&&(i.success.forEach(a=>a(r)),this.pendingCallbacks.delete(t)),this.registerAsDefault(t,r),this.notifyWatchers()}error(t,r){this.items.delete(t),this.initializationErrors.set(t,r);const i=this.pendingCallbacks.get(t);i&&(i.error.forEach(a=>a(r)),this.pendingCallbacks.delete(t)),this.initializationErrors.size===1&&!this.items.size&&this.error(null,r),this.notifyWatchers()}resetErrors(t){const{initializationErrors:r}=this;r.has(null)&&r.get(null)===r.get(t)&&r.delete(null),r.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((r,i)=>{this.execute(t,r,i)})}async destroyAll(){const t=Array.from(new Set(this.items.values())).map(r=>r.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 r=this.pendingCallbacks.get(t);return r||(r={success:[],error:[]},this.pendingCallbacks.set(t,r)),r}registerAsDefault(t,r){this.items.size===1&&t!==null&&this.register(null,r)}}function S(n,t){let r=null;return(...i)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...i)},n)}}function nt(n,t){const r=Object.entries(n).filter(([i,a])=>t(a,i));return Object.fromEntries(r)}function V(n){return Object.keys(n).length===0&&n.constructor===Object}function H(n,t){const r=Object.entries(n).map(([i,a])=>[i,t(a,i)]);return Object.fromEntries(r)}function C(n,t){if(n===t)return!0;const r=Object.keys(n),i=Object.keys(t);if(r.length!==i.length)return!1;for(const a of r)if(n[a]!==t[a]||!Object.prototype.hasOwnProperty.call(t,a))return!1;return!0}function at(){return Math.random().toString(36).substring(2)}function ot(n,{timeOutAfter:t=500,retryAfter:r=100}={}){return new Promise((i,a)=>{const o=Date.now();let s=null;const c=setTimeout(()=>{a(s??new Error("Timeout"))},t),u=async()=>{try{const l=await n();clearTimeout(c),i(l)}catch(l){s=l,Date.now()-o>t?a(l):setTimeout(u,r)}};u()})}const x=Symbol.for("context-editor-watchdog");async function st({element:n,context:t,creator:r,config:i}){const a=at();await t.add({creator:(u,l)=>r.create(u,l),id:a,sourceElementOrData:n,type:"editor",config:i});const o=t.getItem(a),s={state:"available",editorContextId:a,context:t};o[x]=s;const c=t.destroy.bind(t);return t.destroy=async()=>(s.state="unavailable",c()),{...s,editor:o}}function ct(n){return x in n?n[x]:null}function ut(n){return n.model.document.getRootNames().reduce((r,i)=>(r[i]=n.getData({rootName:i}),r),Object.create({}))}function v(n){return["inline","classic","balloon","decoupled"].includes(n)}function j(n){let t=n;for(;t;){for(const r of t.attributes)if(r.name.startsWith("wire:model"))return!0;t=t.parentElement}return!1}async function lt(n){const t=await import("ckeditor5"),i={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[n];if(!i)throw new Error(`Unsupported editor type: ${n}`);return i}class T{static the=new T;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 N(n){const t=await import("ckeditor5");let r=null;const i=n.map(async a=>{const o=await T.the.get(a);if(o)return o;const{[a]: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{[a]:c}=r||{};if(c)return c;throw new Error(`Plugin "${a}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(i),hasPremium:!!r}}async function q(n,t){const r=[n.ui,n.content];return await Promise.all([L("ckeditor5",r),t&&L("ckeditor5-premium-features",r)].filter(a=>!!a)).then(a=>a.flat())}async function L(n,t){return await Promise.all(t.filter(r=>r!=="en").map(async r=>{const i=await mt(n,r);return i?.default??i}).filter(Boolean))}async function mt(n,t){try{if(n==="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 ${n}/${t}:`,r),null}}function B(n){return H(n,t=>({dictionary:t}))}function U(n){const t=_(n);return H(t,({element:r})=>r)}function _(n){const t=window.Livewire.all().filter(({name:s,canonical:c})=>s==="ckeditor5-editable"&&c.editorId===n).reduce((s,{canonical:c,el:u})=>({...s,[c.rootName]:{element:u.querySelector("[data-cke-editable-content]"),content:c.content}}),Object.create({})),i=window.Livewire.all().find(({name:s,canonical:c})=>s==="ckeditor5"&&c.editorId===n)?.canonical.content,a=document.querySelector(`#${n}_editor `),o=t.main;return o&&i?.main?{...t,main:{...o,content:o.content||i.main}}:a?{...t,main:{element:a,content:i?.main||null}}:t}function A(n){const t=_(n),r=H(t,({content:i})=>i);return nt(r,i=>typeof i=="string")}function D(n){if(!n||typeof n!="object")return n;if(Array.isArray(n))return n.map(i=>D(i));const t=n;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,a]of Object.entries(n))r[i]=D(a);return r}function dt(n,t){const{editing:r}=n;r.view.change(i=>{i.setStyle("height",`${t}px`,r.view.document.getRoot())})}const O=Symbol.for("elixir-editor-watchdog");async function pt(n){const{EditorWatchdog:t}=await import("ckeditor5"),r=new t(n);return r.setCreator(async(...i)=>{const a=await n.create(...i);return a[O]=r,a}),{watchdog:r,Constructor:{create:async(...i)=>(await r.create(...i),r.editor)}}}function wt(n){return O in n?n[O]:null}class h extends F{static the=new h}class ht extends k{contextPromise=null;async mounted(){const{contextId:t,language:r,context:i}=this.canonical,{customTranslations:a,watchdogConfig:o,config:{plugins:s,...c}}=i,{loadedPlugins:u,hasPremium:l}=await N(s??[]),P=[...await q(r,l),B(a||{})].filter(g=>!V(g));this.contextPromise=(async()=>{const{ContextWatchdog:g,Context:f}=await import("ckeditor5"),w=new g(f,{crashNumberLimit:10,...o});return await w.create({...c,language:r,plugins:u,...P.length&&{translations:P}}),w.on("itemError",(...y)=>{console.error("Context item error:",...y)}),w})();const I=await this.contextPromise;this.isBeingDestroyed()||h.the.register(t,I)}async destroyed(){const{contextId:t}=this.canonical;this.element.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,h.the.hasItem(t)&&h.the.unregister(t)}}}class d extends F{static the=new d}class K extends k{editorPromise=null;pendingContent=null;mounted(){const{editorId:t,rootName:r,content:i}=this.canonical;this.editorPromise=d.the.execute(t,a=>{if(this.isBeingDestroyed())return null;const{ui:o,editing:s,model:c}=a;if(c.document.getRoot(r)){if(i!==null){const u=a.getData({rootName:r});u&&u!==i&&a.setData({[r]:i})}}else{a.addRoot(r,{isUndoable:!1,...i!==null&&{data:i}});const u=this.element.querySelector("[data-cke-editable-content]"),l=o.view.createEditable(r,u);o.addEditable(l),s.view.forceRender()}return this.syncTypingContentPush(a),this.setupPendingReceivedContentHandlers(a),a})}syncTypingContentPush(t){const{rootName:r,saveDebounceMs:i}=this.canonical,a=this.element.querySelector("input"),o=()=>{const s=t.getData({rootName:r});a&&(a.value=s),this.$wire.set("content",s)};t.model.document.on("change:data",S(i,o)),o()}setupPendingReceivedContentHandlers(t){const{ui:r,model:i}=t,{rootName:a}=this.canonical;i.document.on("change:data",()=>{this.pendingContent=null}),r.focusTracker.on("change:isFocused",()=>{!r.focusTracker.isFocused&&this.pendingContent!==null&&(t.setData({[a]:this.pendingContent}),this.pendingContent=null)})}applyCanonicalContentToEditor(t){if(!j(this.element))return;const{content:r,rootName:i}=this.canonical,{ui:a}=t;if(t.getData({rootName:i})!==(r??"")){if(a.focusTracker.isFocused){this.pendingContent=r??"";return}t.setData({[i]:r??""})}}async afterCommitSynced(){const t=await this.editorPromise;this.applyCanonicalContentToEditor(t)}async destroyed(){const{rootName:t}=this.canonical;this.element.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))}}}async function ft({saveDebounceMs:n,component:t}){const{Plugin:r}=await import("ckeditor5");return class extends r{static get pluginName(){return"LivewireSync"}init(){this.setupTypingContentPush(),this.setupFocusableEventPush(),this.setupAfterCommitHandler(),this.setupSetEditorContentHandler()}setupAfterCommitHandler(){const{editor:a}=this,{model:o,ui:{focusTracker:s}}=a;let c=null;a.on("afterCommitSynced",()=>{if(!j(t.element))return;const{content:u}=t.canonical,l=this.getEditorRootsValues();if(s.isFocused){C(u,l)||(c=u);return}C(u,l)||a.setData(u)}),o.document.on("change:data",()=>{c=null}),s.on("change:isFocused",()=>{!s.isFocused&&c!==null&&(a.setData(c),c=null)})}setupSetEditorContentHandler(){Livewire.on("set-editor-content",({editorId:a,content:o})=>{if(a!==t.canonical.editorId)return;const s=this.getEditorRootsValues();C(s,o)||this.editor.setData(o)})}setupTypingContentPush(){const{model:a}=this.editor,{$wire:o}=t,s=()=>{const c=this.getEditorRootsValues();C(c,t.canonical.content??{})||(o.set("content",c),o.dispatch("editor-content-changed",{editorId:t.canonical.editorId,content:c}))};a.document.on("change:data",S(n,s)),this.editor.once("ready",s)}setupFocusableEventPush(){const{ui:a}=this.editor,{$wire:o}=t,s=()=>{const c=this.getEditorRootsValues();o.set("focused",a.focusTracker.isFocused),C(c,t.canonical.content??{})||o.set("content",c)};a.focusTracker.on("change:isFocused",s)}getEditorRootsValues(){return ut(this.editor)}}}async function gt(n){const{Plugin:t}=await import("ckeditor5");return class extends t{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:i}=this,o=i.sourceElement.id.replace(/_editor$/,"");this.input=document.getElementById(`${o}_input`),this.input&&(i.model.document.on("change:data",S(n,()=>this.sync())),i.once("ready",this.sync),this.form=this.input.closest("form"),this.form?.addEventListener("submit",this.sync))}sync=()=>{if(this.input){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}}}class G extends k{editorPromise=null;async mounted(){const{editorId:t}=this.canonical;d.the.resetErrors(t);try{this.editorPromise=this.createEditor();const r=await this.editorPromise;this.isBeingDestroyed()||(d.the.register(t,r),r.once("destroy",()=>{d.the.hasItem(t)&&d.the.unregister(t)}))}catch(r){console.error(`Error initializing CKEditor5 instance with ID "${t}":`,r),this.editorPromise=null,d.the.error(t,r)}}async destroyed(){this.element.style.display="none";try{const t=await this.editorPromise;if(!t)return;const r=ct(t),i=wt(t);r?r.state!=="unavailable"&&await r.context.remove(r.editorContextId):i?await i.destroy():await t.destroy()}finally{this.editorPromise=null}}async afterCommitSynced(){(await this.editorPromise)?.fire("afterCommitSynced")}async createEditor(){const{preset:t,editorId:r,contextId:i,editableHeight:a,saveDebounceMs:o,language:s,watchdog:c,content:u}=this.canonical,{customTranslations:l,editorType:p,licenseKey:P,config:{plugins:I,...g}}=t;let f=await lt(p);const w=await(i?h.the.waitFor(i):null);if(c&&!w){const m=await pt(f);({Constructor:f}=m),m.watchdog.on("restart",()=>{const b=m.watchdog.editor;this.editorPromise=Promise.resolve(b),d.the.register(r,b)})}const{loadedPlugins:y,hasPremium:J}=await N(I);y.push(await ft({saveDebounceMs:o,component:this})),v(p)&&y.push(await gt(o));const $=[...await q(s,J),B(l||{})].filter(m=>!V(m));let E={...u,...A(r)};v(p)&&(E=E.main||"");const R=await(async()=>{let m=U(r);if(!(m instanceof HTMLElement)&&!("main"in m)){const M=p==="decoupled"?["main"]:Object.keys(E);Y(m,M)||(m=await yt(r,M),E={...u,...A(r)})}v(p)&&"main"in m&&(m=m.main);const b={...D(g),initialData:E,licenseKey:P,plugins:y,language:s,...$.length&&{translations:$}};return!w||!(m instanceof HTMLElement)?f.create(m,b):(await st({context:w,element:m,creator:f,config:b})).editor})();return v(p)&&a&&dt(R,a),R}}function Y(n,t){return t.every(r=>n[r])}async function yt(n,t){return ot(()=>{const r=U(n);if(!Y(r,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(i=>!r[i]).join(", ")}.`);return r},{timeOutAfter:2e3,retryAfter:100})}class Y extends v{mountedPromise=null;async mounted(){const{editorId:t,name:r}=this.canonical;this.mountedPromise=p.the.execute(t,i=>{if(this.isBeingDestroyed())return;const{ui:a}=i,o=Et(r),s=a.view[o];if(!s){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.element.appendChild(s.element)})}async destroyed(){this.element.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.element.innerHTML=""}}function Et(n){switch(n){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const bt={ckeditor5:K,"ckeditor5-context":ht,"ckeditor5-ui-part":Y,"ckeditor5-editable":_};function kt(){for(const[n,t]of Object.entries(bt))A(n,t)}kt();exports.ClassHook=v;exports.ContextsRegistry=f;exports.CustomEditorPluginsRegistry=T;exports.EditableComponentHook=_;exports.EditorComponentHook=K;exports.EditorsRegistry=p;exports.UIPartComponentHook=Y;exports.registerLivewireComponentHook=A;
4
+ Missing roots: ${t.filter(i=>!r[i]).join(", ")}.`);return r},{timeOutAfter:2e3,retryAfter:100})}class X extends k{mountedPromise=null;async mounted(){const{editorId:t,name:r}=this.canonical;this.mountedPromise=d.the.execute(t,i=>{if(this.isBeingDestroyed())return;const{ui:a}=i,o=Et(r),s=a.view[o];if(!s){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.element.appendChild(s.element)})}async destroyed(){this.element.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.element.innerHTML=""}}function Et(n){switch(n){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const bt={ckeditor5:G,"ckeditor5-context":ht,"ckeditor5-ui-part":X,"ckeditor5-editable":K};function Ct(){for(const[n,t]of Object.entries(bt))W(n,t)}Ct();exports.ClassHook=k;exports.ContextsRegistry=h;exports.CustomEditorPluginsRegistry=T;exports.EditableComponentHook=K;exports.EditorComponentHook=G;exports.EditorsRegistry=d;exports.UIPartComponentHook=X;exports.registerLivewireComponentHook=W;
5
5
  //# sourceMappingURL=index.cjs.map