Current section

Files

Jump to
ckeditor5_phoenix dist index.cjs
Raw

dist/index.cjs

"use strict";var N=Object.create;var A=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var W=(i,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of q(e))!U.call(i,n)&&n!==r&&A(i,n,{get:()=>e[n],enumerable:!(a=x(e,n))||a.enumerable});return i};var t=(i,e,r)=>(r=i!=null?N(z(i)):{},W(e||!i||!i.__esModule?A(r,"default",{value:i,enumerable:!0}):r,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("ckeditor5");function E(i,e){let r=null;return(...a)=>{r&&clearTimeout(r),r=setTimeout(()=>{e(...a)},i)}}class k{el;liveSocket;pushEvent;pushEventTo;handleEvent}function y(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 F(i){return Object.keys(i).length===0&&i.constructor===Object}function v(i,e){const r=Object.entries(i).map(([a,n])=>[a,e(n,a)]);return Object.fromEntries(r)}function $(i){if(i===null)return null;const e=Number.parseInt(i,10);return Number.isNaN(e)?null:e}class u{static the=new u;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 l=async d=>o(await r(d));this.callbacks.has(e)||a.set(e,[]),a.set(e,[...a.get(e),l])})}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 K extends k{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=u.the.execute(r,o=>{const{ui:l,editing:d,model:p}=o;if(p.document.getRoot(a))return;o.addRoot(a,{isUndoable:!1,data:n});const h=this.el.querySelector("[data-cke-editable-content]"),g=l.view.createEditable(a,h);l.addEditable(g),d.view.forceRender(),s&&_(s,o,a)})}async destroyed(){const{editorId:e,rootName:r}=this.attrs;this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,await u.the.execute(e,a=>{const n=a.model.document.getRoot(r);n&&(a.detachEditable(n),a.detachRoot(r,!1))})}}const L=y(K);function _(i,e,r){const a=()=>{i.value=e.getData({rootName:r})};e.model.document.on("change:data",E(100,a)),a()}class w{static the=new w;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 P(i){return["inline","classic","balloon","decoupled"].includes(i)}async function G(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 Y(i){const e=await import("ckeditor5");let r=null;const a=i.map(async n=>{const s=await w.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(d){console.error(`Failed to load premium package: ${d}`)}const{[n]:l}=r||{};if(l)return l;throw new Error(`Plugin "${n}" not found in base or premium packages.`)});return{loadedPlugins:await Promise.all(a),hasPremium:!!r}}async function J(i,e){const r=[i.ui,i.content];return await Promise.all([O("ckeditor5",r),e&&O("ckeditor5-premium-features",r)].filter(n=>!!n)).then(n=>n.flat())}async function O(i,e){return await Promise.all(e.filter(r=>r!=="en").map(async r=>{const a=await Q(i,r);return a?.default??a}).filter(Boolean))}async function Q(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 X(i){return v(i,e=>({dictionary:e}))}function T(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 j=["inline","classic","balloon","decoupled","multiroot"];function Z(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(!j.includes(r))throw new Error(`Invalid editor type: ${r}. Must be one of: ${j.join(", ")}.`);return{type:r,config:a,license:n,customTranslations:s}}function tt(i,e){const{editing:r}=i;r.view.change(a=>{a.setStyle("height",`${e}px`,r.view.document.getRoot())})}const b=Symbol.for("elixir-editor-watchdog");function et(i){const e=new B.EditorWatchdog(i);return e.setCreator(async(...r)=>{const a=await i.create(...r);return a[b]=e,a}),{watchdog:e,Constructor:{create:async(...r)=>(await e.create(...r),e.editor)}}}function rt(i){return b in i?i[b]:null}class at extends k{editorPromise=null;get attrs(){const{el:e}=this,r=e.getAttribute.bind(e),a=e.hasAttribute.bind(e),n={editorId:r("id"),preset:Z(e),editableHeight:$(r("cke-editable-height")),watchdog:a("cke-watchdog"),events:{change:a("cke-change-event"),blur:a("cke-blur-event"),focus:a("cke-focus-event")},saveDebounceMs:$(r("cke-save-debounce-ms"))??400,language:{ui:r("cke-language")||"en",content:r("cke-content-language")||"en"}};return Object.defineProperty(this,"attrs",{value:n,writable:!1,configurable:!1,enumerable:!0}),n}async mounted(){return this.editorPromise=this.createEditor(),u.the.register(this.attrs.editorId,await this.editorPromise),this}async destroyed(){this.el.style.display="none",(await this.editorPromise)?.destroy(),this.editorPromise=null,u.the.unregister(this.attrs.editorId)}async createEditor(){const{preset:e,editorId:r,editableHeight:a,events:n,saveDebounceMs:s,language:o,watchdog:l}=this.attrs,{customTranslations:d,type:p,license:h,config:{plugins:g,...D}}=e;let f=await G(p);if(l){const c=et(f);({Constructor:f}=c),c.watchdog.on("restart",()=>{const I=c.watchdog.editor;this.editorPromise=Promise.resolve(I),u.the.unregister(r),u.the.register(r,I)})}const{loadedPlugins:H,hasPremium:M}=await Y(g),C=[...await J(o,M),X(d?.dictionary||{})].filter(c=>!F(c)),V=st(r,p),m=await f.create(V,{...D,initialData:ot(r,p),licenseKey:h.key,plugins:H,language:o,...C.length&&{translations:C}});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:c})=>{m.setData(c)}),P(p)){const c=document.getElementById(`${r}_input`);c&&it(c,m,s),a&&tt(m,a)}return m}setupTypingContentPush(e,r,a){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:e,data:S(r)})};r.model.document.on("change:data",E(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:S(r)})};r.ui.focusTracker.on("change:isFocused",n)}}function S(i){return i.model.document.getRootNames().reduce((r,a)=>(r[a]=i.getData({rootName:a}),r),Object.create({}))}function it(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",E(r,a)),nt(i)?.addEventListener("submit",a),a()}function nt(i){return i.closest("form")}function st(i,e){if(e==="decoupled"){const{content:a}=R(i);return a}if(P(e))return document.getElementById(`${i}_editor`);const r=T(i);return v(r,({content:a})=>a)}function ot(i,e){if(e==="decoupled"){const{initialValue:a}=R(i);if(a)return a}if(P(e))return document.getElementById(i)?.getAttribute("cke-initial-value")||"";const r=T(i);return v(r,({initialValue:a})=>a)}function R(i){const e=T(i).main;if(!e)throw new Error(`No "main" editable found for editor with ID "${i}".`);return e}const ct=y(at);class ut extends k{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=u.the.execute(e,a=>{const{ui:n}=a,s=lt(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 lt(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const dt=y(ut),mt={CKEditor5:ct,CKEditable:L,CKUIPart:dt};exports.CustomEditorPluginsRegistry=w;exports.EditorsRegistry=u;exports.Hooks=mt;exports.unwrapEditorWatchdog=rt;
//# sourceMappingURL=index.cjs.map