ckeditor5-livewire 1.2.5 → 1.2.6
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/hooks/editor/utils/query-editor-editables.d.ts +2 -3
- package/dist/hooks/editor/utils/query-editor-editables.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +138 -127
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/hooks/editable.test.ts +1 -1
- package/src/hooks/editor/editor.test.ts +29 -7
- package/src/hooks/editor/editor.ts +13 -17
- package/src/hooks/editor/utils/query-editor-editables.ts +35 -9
- package/src/hooks/ui-part.test.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/editor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,cAAc,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../../src/hooks/editor/editor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAY,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAKxE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAsBpC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC1D;;OAEG;IACH,OAAO,CAAC,aAAa,CAAgC;IAErD;;OAEG;IACY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BvC;;;OAGG;IACY,SAAS;IAkCxB;;OAEG;IACY,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjD;;OAEG;YACW,YAAY;CAwI3B;AA4CD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEhC;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { EditorId
|
|
1
|
+
import { EditorId } from '../typings';
|
|
2
2
|
/**
|
|
3
3
|
* Gets the initial root elements for the editor based on its type.
|
|
4
4
|
*
|
|
5
5
|
* @param editorId The editor's ID.
|
|
6
|
-
* @param type The type of the editor.
|
|
7
6
|
* @returns The root element(s) for the editor.
|
|
8
7
|
*/
|
|
9
|
-
export declare function queryEditablesElements(editorId: EditorId
|
|
8
|
+
export declare function queryEditablesElements(editorId: EditorId): Record<string, HTMLElement>;
|
|
10
9
|
/**
|
|
11
10
|
* Queries all editable elements within a specific editor instance.
|
|
12
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-editor-editables.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/editor/utils/query-editor-editables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"query-editor-editables.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/editor/utils/query-editor-editables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,+BAIxD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CA6CxF;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,GAIW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAChG;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var K=Object.create;var W=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var Q=(a,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Y(t))!J.call(a,n)&&n!==r&&W(a,n,{get:()=>t[n],enumerable:!(i=G(t,n))||i.enumerable});return a};var e=(a,t,r)=>(r=a!=null?K(X(a)):{},Q(t||!a||!a.__esModule?W(r,"default",{value:a,enumerable:!0}):r,a));class I{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 Z(a,t){const r=new Map;window.Livewire?.hook("component.init",async({component:i,cleanup:n})=>{if(i.name!==a)return;const s=new t(i);r.set(i.id,s),n(async()=>{s.state="destroying",await s.destroyed(),s.state="destroyed",r.delete(i.id)}),await s.mounted(),s.state="mounted"}),window.Livewire?.hook("commit",async({component:i,succeed:n})=>{i.name===a&&n(()=>{const s=r.get(i.id);s?.state==="mounted"&&s?.afterCommitSynced?.()})})}class j{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,r,i){const n=this.items.get(t),s=this.initializationErrors.get(t);return s?(i?.(s),Promise.reject(s)):n?Promise.resolve(r(n)):new Promise((o,c)=>{const u=this.getPendingCallbacks(t);u.success.push(async l=>{o(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(n=>n(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(n=>n(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(a,t){let r=null;return(...i)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...i)},a)}}function tt(a,t){const r=Object.entries(a).filter(([i,n])=>t(n,i));return Object.fromEntries(r)}function F(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 C(a,t){if(a===t)return!0;const r=Object.keys(a),i=Object.keys(t);if(r.length!==i.length)return!1;for(const n of r)if(a[n]!==t[n]||!Object.prototype.hasOwnProperty.call(t,n))return!1;return!0}function et(){return Math.random().toString(36).substring(2)}function rt(a,{timeOutAfter:t=500,retryAfter:r=100}={}){return new Promise((i,n)=>{const s=Date.now();let o=null;const c=setTimeout(()=>{n(o??new Error("Timeout"))},t),u=async()=>{try{const l=await a();clearTimeout(c),i(l)}catch(l){o=l,Date.now()-s>t?n(l):setTimeout(u,r)}};u()})}const x=Symbol.for("context-editor-watchdog");async function it({element:a,context:t,creator:r,config:i}){const n=et();await t.add({creator:(u,l)=>r.create(u,l),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 at(a){return x in a?a[x]:null}function nt(a){return a.model.document.getRootNames().reduce((r,i)=>(r[i]=a.getData({rootName:i}),r),Object.create({}))}function v(a){return["inline","classic","balloon","decoupled"].includes(a)}function st(a){let t=a;for(;t;){for(const r of t.attributes)if(r.name.startsWith("wire:model"))return!0;t=t.parentElement}return!1}async function ot(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 z{static the=new z;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 V(a){const t=await import("ckeditor5");let r=null;const i=a.map(async n=>{const s=await z.the.get(n);if(s)return s;const{[n]:o}=t;if(o)return o;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 q(a,t){const r=[a.ui,a.content];return await Promise.all([A("ckeditor5",r),t&&A("ckeditor5-premium-features",r)].filter(n=>!!n)).then(n=>n.flat())}async function A(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 N(a){return $(a,t=>({dictionary:t}))}function T(a,t){if(v(t)&&t!=="decoupled")return document.getElementById(`${a}_editor`);const r=B(a);return $(r,({element:i})=>i)}function B(a){return window.Livewire.all().filter(({name:t,canonical:r})=>t==="ckeditor5-editable"&&r.editorId===a).reduce((t,{canonical:r,el:i})=>({...t,[r.rootName]:{element:i.querySelector("[data-cke-editable-content]"),content:r.content}}),Object.create({}))}function H(a){const t=B(a),r=$(t,({content:i})=>i);return tt(r,i=>typeof i=="string")}function D(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>D(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]=D(n);return r}function ut(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 lt(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 mt(a){return O in a?a[O]:null}class E extends j{static the=new E}class dt extends I{contextPromise=null;async mounted(){const{contextId:t,language:r,context:i}=this.canonical,{customTranslations:n,watchdogConfig:s,config:{plugins:o,...c}}=i,{loadedPlugins:u,hasPremium:l}=await V(o??[]),f=[...await q(r,l),N(n||{})].filter(w=>!F(w));this.contextPromise=(async()=>{const{ContextWatchdog:w,Context:y}=await import("ckeditor5"),h=new w(y,{crashNumberLimit:10,...s});return await h.create({...c,language:r,plugins:u,...f.length&&{translations:f}}),h.on("itemError",(...b)=>{console.error("Context item error:",...b)}),h})();const g=await this.contextPromise;this.isBeingDestroyed()||E.the.register(t,g)}async destroyed(){const{contextId:t}=this.canonical;this.element.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,E.the.hasItem(t)&&E.the.unregister(t)}}}class p extends j{static the=new p}class wt extends I{editorPromise=null;mounted(){const{editorId:t,rootName:r,content:i,saveDebounceMs:n}=this.canonical,s=this.element.querySelector("input");this.editorPromise=p.the.execute(t,o=>{const{ui:c,editing:u,model:l}=o;if(l.document.getRoot(r)){if(i!==null){const w=o.getData({rootName:r});w&&w!==i&&o.setData({[r]:i})}return o}o.addRoot(r,{isUndoable:!1,...i!==null&&{data:i}});const d=this.element.querySelector("[data-cke-editable-content]"),f=c.view.createEditable(r,d);c.addEditable(f),u.view.forceRender();const g=()=>{const w=o.getData({rootName:r});s&&(s.value=w),this.$wire.set("content",w)};return o.model.document.on("change:data",S(n,g)),g(),o})}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 pt({saveDebounceMs:a,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:n}=this,{model:s,ui:{focusTracker:o}}=n;let c=null;n.on("afterCommitSynced",()=>{const{content:u}=t.canonical,l=this.getEditorRootsValues();if(st(t.element)){if(o.isFocused){C(u,l)||(c=u);return}C(u,l)||n.setData(u)}}),Livewire.on("set-editor-content",({editorId:u,content:l})=>{if(u!==t.canonical.editorId)return;const d=this.getEditorRootsValues();C(d,l)||n.setData(l)}),s.document.on("change:data",()=>{c=null}),o.on("change:isFocused",()=>{!o.isFocused&&c!==null&&(n.setData(c),c=null)})}setupTypingContentPush(){const{model:n}=this.editor,{$wire:s}=t,o=()=>{const c=this.getEditorRootsValues();C(c,t.canonical.content??{})||(s.set("content",c),s.dispatch("editor-content-changed",{editorId:t.canonical.editorId,content:c}))};n.document.on("change:data",S(a,o)),this.editor.once("ready",o)}setupFocusableEventPush(){const{ui:n}=this.editor,{$wire:s}=t,o=()=>{const c=this.getEditorRootsValues();s.set("focused",n.focusTracker.isFocused),C(c,t.canonical.content??{})||s.set("content",c)};n.focusTracker.on("change:isFocused",o)}getEditorRootsValues(){return nt(this.editor)}}}async function ht(a){const{Plugin:t}=await import("ckeditor5");return class extends t{input=null;form=null;static get pluginName(){return"SyncEditorWithInput"}afterInit(){const{editor:i}=this,s=i.sourceElement.id.replace(/_editor$/,"");this.input=document.getElementById(`${s}_input`),this.input&&(i.model.document.on("change:data",S(a,()=>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 ft extends I{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=at(t),i=mt(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:n,saveDebounceMs:s,language:o,watchdog:c,content:u}=this.canonical,{customTranslations:l,editorType:d,licenseKey:f,config:{plugins:g,...w}}=t;let y=await ot(d);const h=await(i?E.the.waitFor(i):null);if(c&&!h){const m=await lt(y);({Constructor:y}=m),m.watchdog.on("restart",()=>{const P=m.watchdog.editor;this.editorPromise=Promise.resolve(P),p.the.register(r,P)})}const{loadedPlugins:b,hasPremium:_}=await V(g);b.push(await pt({saveDebounceMs:s,component:this})),v(d)&&b.push(await ht(s));const M=[...await q(o,_),N(l||{})].filter(m=>!F(m));let k={...u,...H(r)};v(d)&&(k=k.main||"");const R=await(async()=>{let m=T(r,d);if(!(m instanceof HTMLElement)&&!("main"in m)){const L=d==="decoupled"?["main"]:Object.keys(k);U(m,L)||(m=await gt(r,d,L),k={...u,...H(r)})}v(d)&&"main"in m&&(m=m.main);const P={...D(w),initialData:k,licenseKey:f,plugins:b,language:o,...M.length&&{translations:M}};return!h||!(m instanceof HTMLElement)?y.create(m,P):(await it({context:h,element:m,creator:y,config:P})).editor})();return v(d)&&n&&ut(R,n),R}}function U(a,t){return t.every(r=>a[r])}async function gt(a,t,r){return await rt(()=>{const i=T(a,t);if(!U(i,r))throw new Error(`It looks like not all required root elements are present yet.
|
|
1
|
+
"use strict";var K=Object.create;var L=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var Q=(n,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Y(t))!J.call(n,a)&&a!==r&&L(n,a,{get:()=>t[a],enumerable:!(i=G(t,a))||i.enumerable});return n};var e=(n,t,r)=>(r=n!=null?K(X(n)):{},Q(t||!n||!n.__esModule?L(r,"default",{value:n,enumerable:!0}):r,n));class I{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 Z(n,t){const r=new Map;window.Livewire?.hook("component.init",async({component:i,cleanup:a})=>{if(i.name!==n)return;const s=new t(i);r.set(i.id,s),a(async()=>{s.state="destroying",await s.destroyed(),s.state="destroyed",r.delete(i.id)}),await s.mounted(),s.state="mounted"}),window.Livewire?.hook("commit",async({component:i,succeed:a})=>{i.name===n&&a(()=>{const s=r.get(i.id);s?.state==="mounted"&&s?.afterCommitSynced?.()})})}class A{items=new Map;initializationErrors=new Map;pendingCallbacks=new Map;watchers=new Set;execute(t,r,i){const a=this.items.get(t),s=this.initializationErrors.get(t);return s?(i?.(s),Promise.reject(s)):a?Promise.resolve(r(a)):new Promise((o,c)=>{const u=this.getPendingCallbacks(t);u.success.push(async l=>{o(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 O(n,t){let r=null;return(...i)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...i)},n)}}function tt(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 S(n,t){const r=Object.entries(n).map(([i,a])=>[i,t(a,i)]);return Object.fromEntries(r)}function v(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 et(){return Math.random().toString(36).substring(2)}function rt(n,{timeOutAfter:t=500,retryAfter:r=100}={}){return new Promise((i,a)=>{const s=Date.now();let o=null;const c=setTimeout(()=>{a(o??new Error("Timeout"))},t),u=async()=>{try{const l=await n();clearTimeout(c),i(l)}catch(l){o=l,Date.now()-s>t?a(l):setTimeout(u,r)}};u()})}const T=Symbol.for("context-editor-watchdog");async function it({element:n,context:t,creator:r,config:i}){const a=et();await t.add({creator:(u,l)=>r.create(u,l),id:a,sourceElementOrData:n,type:"editor",config:i});const s=t.getItem(a),o={state:"available",editorContextId:a,context:t};s[T]=o;const c=t.destroy.bind(t);return t.destroy=async()=>(o.state="unavailable",c()),{...o,editor:s}}function nt(n){return T in n?n[T]:null}function at(n){return n.model.document.getRootNames().reduce((r,i)=>(r[i]=n.getData({rootName:i}),r),Object.create({}))}function C(n){return["inline","classic","balloon","decoupled"].includes(n)}function st(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 ot(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 ${static the=new $;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 j(n){const t=await import("ckeditor5");let r=null;const i=n.map(async a=>{const s=await $.the.get(a);if(s)return s;const{[a]:o}=t;if(o)return o;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 F(n,t){const r=[n.ui,n.content];return await Promise.all([H("ckeditor5",r),t&&H("ckeditor5-premium-features",r)].filter(a=>!!a)).then(a=>a.flat())}async function H(n,t){return await Promise.all(t.filter(r=>r!=="en").map(async r=>{const i=await ct(n,r);return i?.default??i}).filter(Boolean))}async function ct(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 q(n){return S(n,t=>({dictionary:t}))}function N(n){const t=B(n);return S(t,({element:r})=>r)}function B(n){const t=window.Livewire.all().filter(({name:o,canonical:c})=>o==="ckeditor5-editable"&&c.editorId===n).reduce((o,{canonical:c,el:u})=>({...o,[c.rootName]:{element:u.querySelector("[data-cke-editable-content]"),content:c.content}}),Object.create({})),i=window.Livewire.all().find(({name:o,canonical:c})=>o==="ckeditor5"&&c.editorId===n)?.canonical.content,a=document.querySelector(`#${n}_editor `),s=t.main;return s&&i?.main?{...t,main:{...s,content:s.content||i.main}}:a?{...t,main:{element:a,content:i?.main||null}}:t}function W(n){const t=B(n),r=S(t,({content:i})=>i);return tt(r,i=>typeof i=="string")}function x(n){if(!n||typeof n!="object")return n;if(Array.isArray(n))return n.map(i=>x(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]=x(a);return r}function ut(n,t){const{editing:r}=n;r.view.change(i=>{i.setStyle("height",`${t}px`,r.view.document.getRoot())})}const D=Symbol.for("elixir-editor-watchdog");async function lt(n){const{EditorWatchdog:t}=await import("ckeditor5"),r=new t(n);return r.setCreator(async(...i)=>{const a=await n.create(...i);return a[D]=r,a}),{watchdog:r,Constructor:{create:async(...i)=>(await r.create(...i),r.editor)}}}function mt(n){return D in n?n[D]:null}class E extends A{static the=new E}class dt extends I{contextPromise=null;async mounted(){const{contextId:t,language:r,context:i}=this.canonical,{customTranslations:a,watchdogConfig:s,config:{plugins:o,...c}}=i,{loadedPlugins:u,hasPremium:l}=await j(o??[]),f=[...await F(r,l),q(a||{})].filter(w=>!V(w));this.contextPromise=(async()=>{const{ContextWatchdog:w,Context:y}=await import("ckeditor5"),h=new w(y,{crashNumberLimit:10,...s});return await h.create({...c,language:r,plugins:u,...f.length&&{translations:f}}),h.on("itemError",(...b)=>{console.error("Context item error:",...b)}),h})();const g=await this.contextPromise;this.isBeingDestroyed()||E.the.register(t,g)}async destroyed(){const{contextId:t}=this.canonical;this.element.style.display="none";try{await(await this.contextPromise)?.destroy()}finally{this.contextPromise=null,E.the.hasItem(t)&&E.the.unregister(t)}}}class p extends A{static the=new p}class wt extends I{editorPromise=null;mounted(){const{editorId:t,rootName:r,content:i,saveDebounceMs:a}=this.canonical,s=this.element.querySelector("input");this.editorPromise=p.the.execute(t,o=>{const{ui:c,editing:u,model:l}=o;if(l.document.getRoot(r)){if(i!==null){const w=o.getData({rootName:r});w&&w!==i&&o.setData({[r]:i})}return o}o.addRoot(r,{isUndoable:!1,...i!==null&&{data:i}});const d=this.element.querySelector("[data-cke-editable-content]"),f=c.view.createEditable(r,d);c.addEditable(f),u.view.forceRender();const g=()=>{const w=o.getData({rootName:r});s&&(s.value=w),this.$wire.set("content",w)};return o.model.document.on("change:data",O(a,g)),g(),o})}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 pt({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:s,ui:{focusTracker:o}}=a;let c=null;a.on("afterCommitSynced",()=>{const{content:u}=t.canonical,l=this.getEditorRootsValues();if(st(t.element)){if(o.isFocused){v(u,l)||(c=u);return}v(u,l)||a.setData(u)}}),Livewire.on("set-editor-content",({editorId:u,content:l})=>{if(u!==t.canonical.editorId)return;const d=this.getEditorRootsValues();v(d,l)||a.setData(l)}),s.document.on("change:data",()=>{c=null}),o.on("change:isFocused",()=>{!o.isFocused&&c!==null&&(a.setData(c),c=null)})}setupTypingContentPush(){const{model:a}=this.editor,{$wire:s}=t,o=()=>{const c=this.getEditorRootsValues();v(c,t.canonical.content??{})||(s.set("content",c),s.dispatch("editor-content-changed",{editorId:t.canonical.editorId,content:c}))};a.document.on("change:data",O(n,o)),this.editor.once("ready",o)}setupFocusableEventPush(){const{ui:a}=this.editor,{$wire:s}=t,o=()=>{const c=this.getEditorRootsValues();s.set("focused",a.focusTracker.isFocused),v(c,t.canonical.content??{})||s.set("content",c)};a.focusTracker.on("change:isFocused",o)}getEditorRootsValues(){return at(this.editor)}}}async function ht(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,s=i.sourceElement.id.replace(/_editor$/,"");this.input=document.getElementById(`${s}_input`),this.input&&(i.model.document.on("change:data",O(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 ft extends I{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=nt(t),i=mt(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:s,language:o,watchdog:c,content:u}=this.canonical,{customTranslations:l,editorType:d,licenseKey:f,config:{plugins:g,...w}}=t;let y=await ot(d);const h=await(i?E.the.waitFor(i):null);if(c&&!h){const m=await lt(y);({Constructor:y}=m),m.watchdog.on("restart",()=>{const P=m.watchdog.editor;this.editorPromise=Promise.resolve(P),p.the.register(r,P)})}const{loadedPlugins:b,hasPremium:_}=await j(g);b.push(await pt({saveDebounceMs:s,component:this})),C(d)&&b.push(await ht(s));const M=[...await F(o,_),q(l||{})].filter(m=>!V(m));let k={...u,...W(r)};C(d)&&(k=k.main||"");const z=await(async()=>{let m=N(r);if(!(m instanceof HTMLElement)&&!("main"in m)){const R=d==="decoupled"?["main"]:Object.keys(k);U(m,R)||(m=await gt(r,R),k={...u,...W(r)})}C(d)&&"main"in m&&(m=m.main);const P={...x(w),initialData:k,licenseKey:f,plugins:b,language:o,...M.length&&{translations:M}};return!h||!(m instanceof HTMLElement)?y.create(m,P):(await it({context:h,element:m,creator:y,config:P})).editor})();return C(d)&&a&&ut(z,a),z}}function U(n,t){return t.every(r=>n[r])}async function gt(n,t){return rt(()=>{const r=N(n);if(!U(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: ${
|
|
4
|
+
Missing roots: ${t.filter(i=>!r[i]).join(", ")}.`);return r},{timeOutAfter:2e3,retryAfter:100})}class yt extends I{mountedPromise=null;async mounted(){const{editorId:t,name:r}=this.canonical;this.mountedPromise=p.the.execute(t,i=>{const{ui:a}=i,s=Et(r),o=a.view[s];if(!o){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.element.appendChild(o.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:ft,"ckeditor5-context":dt,"ckeditor5-ui-part":yt,"ckeditor5-editable":wt};function kt(){for(const[n,t]of Object.entries(bt))Z(n,t)}kt();
|
|
5
5
|
//# sourceMappingURL=index.cjs.map
|