Current section

Files

Jump to
ckeditor5_phoenix dist index.cjs
Raw

dist/index.cjs

"use strict";var M=Object.create;var T=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var z=(i,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of D(e))!x.call(i,n)&&n!==r&&T(i,n,{get:()=>e[n],enumerable:!(a=V(e,n))||a.enumerable});return i};var t=(i,e,r)=>(r=i!=null?M(N(i)):{},z(e||!i||!i.__esModule?T(r,"default",{value:i,enumerable:!0}):r,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function f(i,e){let r=null;return(...a)=>{r&&clearTimeout(r),r=setTimeout(()=>{e(...a)},i)}}class b{el;liveSocket;pushEvent;pushEventTo;handleEvent}function E(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,s)=>this.pushEventTo?.(r,a,n,s),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 U(i){return Object.keys(i).length===0&&i.constructor===Object}function k(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;watchers=new Set;constructor(){}execute(e,r){const{callbacks:a,editors:n}=this,s=n.get(e);return s?Promise.resolve(r(s)):new Promise(o=>{const u=async c=>o(await r(c));this.callbacks.has(e)||a.set(e,[]),a.set(e,[...a.get(e),u])})}register(e,r){const{editors:a,callbacks:n}=this,s=n.get(e);if(a.has(e))throw new Error(`Editor with ID "${e}" is already registered.`);a.set(e,r),s&&(s.forEach(o=>o(r)),n.delete(e)),this.editors.size===1&&this.register(null,r),this.notifyWatchers()}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),this.notifyWatchers()}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),this.notifyWatchers()}watch(e){return this.watchers.add(e),e(new Map(this.editors)),this.unwatch.bind(this,e)}unwatch(e){this.watchers.delete(e)}notifyWatchers(){const e=new Map(this.editors);this.watchers.forEach(r=>r(e))}}class q extends b{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,s=this.el.querySelector(`#${e}_input`);this.mountedPromise=l.the.execute(r,o=>{const{ui:u,editing:c,model:w}=o;if(w.document.getRoot(a))return;o.addRoot(a,{isUndoable:!1,data:n});const h=this.el.querySelector("[data-cke-editable-content]"),g=u.view.createEditable(a,h);u.addEditable(g),c.view.forceRender(),s&&K(s,o,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 F=E(q);function K(i,e,r){const a=()=>{i.value=e.getData({rootName:r})};e.model.document.on("change:data",f(100,a)),a()}class p{static the=new p;plugins=new Map;constructor(){}register(e,r){if(this.plugins.has(e))throw new Error(`Plugin with name "${e}" is already registered.`);return this.plugins.set(e,r),this.unregister.bind(this,e)}unregister(e){if(!this.plugins.has(e))throw new Error(`Plugin with name "${e}" is not registered.`);this.plugins.delete(e)}unregisterAll(){this.plugins.clear()}async get(e){return this.plugins.get(e)?.()}has(e){return this.plugins.has(e)}}function y(i){return["inline","classic","balloon","decoupled"].includes(i)}async function B(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 L(i){const e=await import("ckeditor5");let r=null;const a=i.map(async n=>{const s=await p.the.get(n);if(s)return s;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]:u}=r||{};if(u)return u;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(a),hasPremium:!!r}}async function W(i,e){const r=[i.ui,i.content];return await Promise.all([$("ckeditor5",r),e&&$("ckeditor5-premium-features",r)].filter(n=>!!n)).then(n=>n.flat())}async function $(i,e){return await Promise.all(e.filter(r=>r!=="en").map(async r=>{const a=await _(i,r);return a?.default??a}).filter(Boolean))}async function _(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 G(i){return k(i,e=>({dictionary:e}))}function v(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"),s=a.getAttribute("data-cke-editable-initial-value")||"",o=a.querySelector("[data-cke-editable-content]");return!n||!o?r:{...r,[n]:{content:o,initialValue:s}}},Object.create({}))}const I=["inline","classic","balloon","decoupled","multiroot"];function J(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,custom_translations:s}=JSON.parse(e);if(!r||!a||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!I.includes(r))throw new Error(`Invalid editor type: ${r}. Must be one of: ${I.join(", ")}.`);return{type:r,config:a,license:n,customTranslations:s}}function Y(i,e){const{editing:r}=i;r.view.change(a=>{a.setStyle("height",`${e}px`,r.view.document.getRoot())})}class Q extends b{editorPromise=null;get attrs(){const e={editorId:this.el.getAttribute("id"),preset:J(this.el),editableHeight:A(this.el.getAttribute("cke-editable-height")),events:{change:this.el.getAttribute("cke-change-event")!==null,blur:this.el.getAttribute("cke-blur-event")!==null,focus:this.el.getAttribute("cke-focus-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,events:n,saveDebounceMs:s,language:o}=this.attrs,{customTranslations:u,type:c,license:w,config:{plugins:h,...g}}=e,O=await B(c),R=tt(r,c),{loadedPlugins:S,hasPremium:H}=await L(h),P=[...await W(o,H),G(u?.dictionary||{})].filter(d=>!U(d)),m=await O.create(R,{...g,initialData:et(r,c),licenseKey:w.key,plugins:S,language:o,...P.length&&{translations:P}});if(n.change&&this.setupTypingContentPush(r,m,s),n.blur&&this.setupEventPush(r,m,"blur"),n.focus&&this.setupEventPush(r,m,"focus"),this.handleEvent("ckeditor5:set-data",({data:d})=>{m.setData(d)}),y(c)){const d=document.getElementById(`${r}_input`);d&&X(d,m,s),a&&Y(m,a)}return m}setupTypingContentPush(e,r,a){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:e,data:C(r)})};r.model.document.on("change:data",f(a,n)),n()}setupEventPush(e,r,a){const n=()=>{const{isFocused:s}=r.ui.focusTracker;(s?"focus":"blur")===a&&this.pushEvent(`ckeditor5:${a}`,{editorId:e,data:C(r)})};r.ui.focusTracker.on("change:isFocused",n)}}function C(i){return i.model.document.getRootNames().reduce((r,a)=>(r[a]=i.getData({rootName:a}),r),Object.create({}))}function X(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",f(r,a)),Z(i)?.addEventListener("submit",a),a()}function Z(i){return i.closest("form")}function tt(i,e){if(e==="decoupled"){const{content:a}=j(i);return a}if(y(e))return document.getElementById(`${i}_editor`);const r=v(i);return k(r,({content:a})=>a)}function et(i,e){if(e==="decoupled"){const{initialValue:a}=j(i);if(a)return a}if(y(e))return document.getElementById(i)?.getAttribute("cke-initial-value")||"";const r=v(i);return k(r,({initialValue:a})=>a)}function j(i){const e=v(i).main;if(!e)throw new Error(`No "main" editable found for editor with ID "${i}".`);return e}const rt=E(Q);class at extends b{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,s=it(r),o=n.view[s];if(!o){console.error(`Unknown UI part name: "${r}". Supported names are "toolbar" and "menubar".`);return}this.el.appendChild(o.element)})}async destroyed(){this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,this.el.innerHTML=""}}function it(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const nt=E(at),st={CKEditor5:rt,CKEditable:F,CKUIPart:nt};exports.CustomEditorPluginsRegistry=p;exports.EditorsRegistry=l;exports.Hooks=st;
//# sourceMappingURL=index.cjs.map