Current section

Files

Jump to
ckeditor5_phoenix dist index.cjs
Raw

dist/index.cjs

"use strict";var S=Object.create;var P=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var M=(i,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of D(e))!N.call(i,n)&&n!==r&&P(i,n,{get:()=>e[n],enumerable:!(a=V(e,n))||a.enumerable});return i};var t=(i,e,r)=>(r=i!=null?S(O(i)):{},M(e||!i||!i.__esModule?P(r,"default",{value:i,enumerable:!0}):r,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function b(i,e){let r=null;return(...a)=>{r&&clearTimeout(r),r=setTimeout(()=>{e(...a)},i)}}class f{el;liveSocket;pushEvent;pushEventTo;handleEvent}function g(i){return{mounted(){const e=new i;return this.el.instance=e,e.el=this.el,e.liveSocket=this.liveSocket,e.pushEvent=(r,a,n)=>this.pushEvent?.(r,a,n),e.pushEventTo=(r,a,n,o)=>this.pushEventTo?.(r,a,n,o),e.handleEvent=(r,a)=>this.handleEvent?.(r,a),e.mounted?.()},beforeUpdate(){this.el.instance.beforeUpdate?.()},destroyed(){this.el.instance.destroyed?.()},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()}}}function C(i,e){const r=Object.entries(i).map(([a,n])=>[a,e(n,a)]);return Object.fromEntries(r)}function A(i){if(i===null)return null;const e=Number.parseInt(i,10);return Number.isNaN(e)?null:e}class l{static the=new l;editors=new Map;callbacks=new Map;constructor(){}execute(e,r){const{callbacks:a,editors:n}=this,o=n.get(e);return o?Promise.resolve(r(o)):new Promise(s=>{const c=async m=>s(await r(m));this.callbacks.has(e)||a.set(e,[]),a.set(e,[...a.get(e),c])})}register(e,r){const{editors:a,callbacks:n}=this,o=n.get(e);if(a.has(e))throw new Error(`Editor with ID "${e}" is already registered.`);a.set(e,r),o&&(o.forEach(s=>s(r)),n.delete(e)),this.editors.size===1&&this.register(null,r)}unregister(e){const{editors:r,callbacks:a}=this;if(!r.has(e))throw new Error(`Editor with ID "${e}" is not registered.`);e&&this.editors.get(null)===r.get(e)&&this.unregister(null),r.delete(e),a.delete(e)}getEditors(){return Array.from(this.editors.values())}hasEditor(e){return this.editors.has(e)}waitForEditor(e){return this.execute(e,r=>r)}async destroyAllEditors(){const e=Array.from(this.editors.values()).map(r=>r.destroy());this.editors.clear(),this.callbacks.clear(),await Promise.all(e)}}class U extends f{mountedPromise=null;get attrs(){const e={editableId:this.el.getAttribute("id"),editorId:this.el.getAttribute("data-cke-editor-id")||null,rootName:this.el.getAttribute("data-cke-editable-root-name"),initialValue:this.el.getAttribute("data-cke-editable-initial-value")||""};return Object.defineProperty(this,"attrs",{value:e,writable:!1,configurable:!1,enumerable:!0}),e}async mounted(){const{editableId:e,editorId:r,rootName:a,initialValue:n}=this.attrs,o=this.el.querySelector(`#${e}_input`);this.mountedPromise=l.the.execute(r,s=>{const{ui:c,editing:m,model:p}=s;if(p.document.getRoot(a))return;s.addRoot(a,{isUndoable:!1,data:n});const w=this.el.querySelector("[data-cke-editable-content]"),h=c.view.createEditable(a,w);c.addEditable(h),m.view.forceRender(),o&&x(o,s,a)})}async destroyed(){const{editorId:e,rootName:r}=this.attrs;this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,await l.the.execute(e,a=>{const n=a.model.document.getRoot(r);n&&(a.detachEditable(n),a.detachRoot(r,!1))})}}const q=g(U);function x(i,e,r){const a=()=>{i.value=e.getData({rootName:r})};e.model.document.on("change:data",b(100,a)),a()}function E(i){return["inline","classic","balloon","decoupled"].includes(i)}async function z(i){const e=await import("ckeditor5"),a={inline:e.InlineEditor,balloon:e.BalloonEditor,classic:e.ClassicEditor,decoupled:e.DecoupledEditor,multiroot:e.MultiRootEditor}[i];if(!a)throw new Error(`Unsupported editor type: ${i}`);return a}async function K(i){const e=await import("ckeditor5");let r=null;const a=i.map(async n=>{const{[n]:o}=e;if(o)return o;if(!r)try{r=await import("ckeditor5-premium-features")}catch(c){console.error(`Failed to load premium package: ${c}`)}const{[n]:s}=r||{};if(s)return s;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(a),hasPremium:!!r}}async function I(i,e){return await Promise.all(e.filter(r=>r!=="en").map(async r=>{const a=await B(i,r);return a?.default??a}).filter(Boolean))}async function B(i,e){try{if(i==="ckeditor5")switch(e){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 ${e} not found in ckeditor5 translations`),null}else switch(e){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 ${e} not found in premium translations`),await import("ckeditor5-premium-features/translations/en.js")}}catch(r){return console.error(`Failed to load translation for ${i}/${e}:`,r),null}}function k(i){const e=document.querySelectorAll([`[data-cke-editor-id="${i}"][data-cke-editable-root-name]`,"[data-cke-editable-root-name]:not([data-cke-editor-id])"].join(", "));return Array.from(e).reduce((r,a)=>{const n=a.getAttribute("data-cke-editable-root-name"),o=a.getAttribute("data-cke-editable-initial-value")||"",s=a.querySelector("[data-cke-editable-content]");return!n||!s?r:{...r,[n]:{content:s,initialValue:o}}},Object.create({}))}const $=["inline","classic","balloon","decoupled","multiroot"];function F(i){const e=i.getAttribute("cke-preset");if(!e)throw new Error('CKEditor5 hook requires a "cke-preset" attribute on the element.');const{type:r,config:a,license:n}=JSON.parse(e);if(!r||!a||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!$.includes(r))throw new Error(`Invalid editor type: ${r}. Must be one of: ${$.join(", ")}.`);return{type:r,config:a,license:n}}function L(i,e){const{editing:r}=i;r.view.change(a=>{a.setStyle("height",`${e}px`,r.view.document.getRoot())})}class _ extends f{editorPromise=null;get attrs(){const e={editorId:this.el.getAttribute("id"),preset:F(this.el),editableHeight:A(this.el.getAttribute("cke-editable-height")),changeEvent:this.el.getAttribute("cke-change-event")!==null,saveDebounceMs:A(this.el.getAttribute("cke-save-debounce-ms"))??400,language:{ui:this.el.getAttribute("cke-language")||"en",content:this.el.getAttribute("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:e,writable:!1,configurable:!1,enumerable:!0}),e}async mounted(){return this.editorPromise=this.createEditor(),l.the.register(this.attrs.editorId,await this.editorPromise),this}async destroyed(){this.el.style.display="none",(await this.editorPromise)?.destroy(),this.editorPromise=null,l.the.unregister(this.attrs.editorId)}async createEditor(){const{preset:e,editorId:r,editableHeight:a,changeEvent:n,saveDebounceMs:o,language:s}=this.attrs,{type:c,license:m,config:{plugins:p,...w}}=e,h=await z(c),j=Q(r,c),{loadedPlugins:H,hasPremium:R}=await K(p),y=[s.ui,s.content],v=await Promise.all([I("ckeditor5",y),R&&I("ckeditor5-premium-features",y)].filter(u=>!!u)).then(u=>u.flat()),d=await h.create(j,{...w,initialData:W(r,c),licenseKey:m.key,plugins:H,language:s,...v.length&&{translations:v}});if(n&&this.setupContentPush(r,d,o),this.handleEvent("ckeditor5:set-data",({data:u})=>{d.setData(u)}),E(c)){const u=document.getElementById(`${r}_input`);u&&J(u,d,o),a&&L(d,a)}return d}setupContentPush(e,r,a){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:e,data:G(r)})};r.model.document.on("change:data",b(a,n)),n()}}function G(i){return i.model.document.getRootNames().reduce((r,a)=>(r[a]=i.getData({rootName:a}),r),Object.create({}))}function J(i,e,r){const a=()=>{const n=e.getData();i.value=n,i.dispatchEvent(new Event("input",{bubbles:!0}))};e.model.document.on("change:data",b(r,a)),Y(i)?.addEventListener("submit",a),a()}function Y(i){return i.closest("form")}function Q(i,e){if(e==="decoupled"){const{content:a}=T(i);return a}if(E(e))return document.getElementById(`${i}_editor`);const r=k(i);return C(r,({content:a})=>a)}function W(i,e){if(e==="decoupled"){const{initialValue:a}=T(i);if(a)return a}if(E(e))return document.getElementById(i)?.getAttribute("cke-initial-value")||"";const r=k(i);return C(r,({initialValue:a})=>a)}function T(i){const e=k(i).main;if(!e)throw new Error(`No "main" editable found for editor with ID "${i}".`);return e}const X=g(_);class Z extends f{mountedPromise=null;get attrs(){const e={editorId:this.el.getAttribute("data-cke-editor-id")||null,name:this.el.getAttribute("data-cke-ui-part-name")};return Object.defineProperty(this,"attrs",{value:e,writable:!1,configurable:!1,enumerable:!0}),e}async mounted(){const{editorId:e,name:r}=this.attrs;this.mountedPromise=l.the.execute(e,a=>{const{ui:n}=a,o=tt(r),s=n.view[o];if(!s){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.el.appendChild(s.element)})}async destroyed(){this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.el.innerHTML=""}}function tt(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const et=g(Z),rt={CKEditor5:X,CKEditable:q,CKUIPart:et};exports.EditorsRegistry=l;exports.Hooks=rt;
//# sourceMappingURL=index.cjs.map