Current section

Files

Jump to
ckeditor5_phoenix dist index.cjs
Raw

dist/index.cjs

"use strict";var q=Object.create;var I=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var B=(i,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of z(t))!W.call(i,n)&&n!==r&&I(i,n,{get:()=>t[n],enumerable:!(a=x(t,n))||a.enumerable});return i};var e=(i,t,r)=>(r=i!=null?q(U(i)):{},B(t||!i||!i.__esModule?I(r,"default",{value:i,enumerable:!0}):r,i));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("ckeditor5");function k(i,t){let r=null;return(...a)=>{r&&clearTimeout(r),r=setTimeout(()=>{t(...a)},i)}}class y{el;liveSocket;pushEvent;pushEventTo;handleEvent}function v(i){return{mounted(){const t=new i;return this.el.instance=t,t.el=this.el,t.liveSocket=this.liveSocket,t.pushEvent=(r,a,n)=>this.pushEvent?.(r,a,n),t.pushEventTo=(r,a,n,s)=>this.pushEventTo?.(r,a,n,s),t.handleEvent=(r,a)=>this.handleEvent?.(r,a),t.mounted?.()},beforeUpdate(){this.el.instance.beforeUpdate?.()},destroyed(){this.el.instance.destroyed?.()},disconnected(){this.el.instance.disconnected?.()},reconnected(){this.el.instance.reconnected?.()}}}function K(i){return Object.keys(i).length===0&&i.constructor===Object}function P(i,t){const r=Object.entries(i).map(([a,n])=>[a,t(n,a)]);return Object.fromEntries(r)}function O(i){if(i===null)return null;const t=Number.parseInt(i,10);return Number.isNaN(t)?null:t}class u{static the=new u;editors=new Map;callbacks=new Map;watchers=new Set;constructor(){}execute(t,r){const{callbacks:a,editors:n}=this,s=n.get(t);return s?Promise.resolve(r(s)):new Promise(o=>{const l=async d=>o(await r(d));this.callbacks.has(t)||a.set(t,[]),a.set(t,[...a.get(t),l])})}register(t,r){const{editors:a,callbacks:n}=this,s=n.get(t);if(a.has(t))throw new Error(`Editor with ID "${t}" is already registered.`);a.set(t,r),s&&(s.forEach(o=>o(r)),n.delete(t)),this.editors.size===1&&this.register(null,r),this.notifyWatchers()}unregister(t){const{editors:r,callbacks:a}=this;if(!r.has(t))throw new Error(`Editor with ID "${t}" is not registered.`);t&&this.editors.get(null)===r.get(t)&&this.unregister(null),r.delete(t),a.delete(t),this.notifyWatchers()}getEditors(){return Array.from(this.editors.values())}hasEditor(t){return this.editors.has(t)}waitForEditor(t){return this.execute(t,r=>r)}async destroyAllEditors(){const t=Array.from(this.editors.values()).map(r=>r.destroy());this.editors.clear(),this.callbacks.clear(),await Promise.all(t),this.notifyWatchers()}watch(t){return this.watchers.add(t),t(new Map(this.editors)),this.unwatch.bind(this,t)}unwatch(t){this.watchers.delete(t)}notifyWatchers(){const t=new Map(this.editors);this.watchers.forEach(r=>r(t))}}class L extends y{mountedPromise=null;get attrs(){const t={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:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editableId:t,editorId:r,rootName:a,initialValue:n}=this.attrs,s=this.el.querySelector(`#${t}_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]"),f=l.view.createEditable(a,h);l.addEditable(f),d.view.forceRender(),s&&G(s,o,a)})}async destroyed(){const{editorId:t,rootName:r}=this.attrs;this.el.style.display="none",await this.mountedPromise,this.mountedPromise=null,await u.the.execute(t,a=>{const n=a.model.document.getRoot(r);n&&(a.detachEditable(n),a.detachRoot(r,!1))})}}const _=v(L);function G(i,t,r){const a=()=>{i.value=t.getData({rootName:r})};t.model.document.on("change:data",k(100,a)),a()}class w{static the=new w;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)}}function T(i){return["inline","classic","balloon","decoupled"].includes(i)}async function Y(i){const t=await import("ckeditor5"),a={inline:t.InlineEditor,balloon:t.BalloonEditor,classic:t.ClassicEditor,decoupled:t.DecoupledEditor,multiroot:t.MultiRootEditor}[i];if(!a)throw new Error(`Unsupported editor type: ${i}`);return a}async function J(i){const t=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}=t;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 Q(i,t){const r=[i.ui,i.content];return await Promise.all([S("ckeditor5",r),t&&S("ckeditor5-premium-features",r)].filter(n=>!!n)).then(n=>n.flat())}async function S(i,t){return await Promise.all(t.filter(r=>r!=="en").map(async r=>{const a=await X(i,r);return a?.default??a}).filter(Boolean))}async function X(i,t){try{if(i==="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 ${i}/${t}:`,r),null}}function Z(i){return P(i,t=>({dictionary:t}))}function $(i){const t=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(t).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 R=["inline","classic","balloon","decoupled","multiroot"];function tt(i){const t=i.getAttribute("cke-preset");if(!t)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(t);if(!r||!a||!n)throw new Error('CKEditor5 hook configuration must include "editor", "config", and "license" properties.');if(!R.includes(r))throw new Error(`Invalid editor type: ${r}. Must be one of: ${R.join(", ")}.`);return{type:r,config:a,license:n,customTranslations:s}}function b(i){if(!i||typeof i!="object")return i;if(Array.isArray(i))return i.map(a=>b(a));const t=i;if(t.$element&&typeof t.$element=="string"){const a=document.querySelector(t.$element);return a||console.warn(`Element not found for selector: ${t.$element}`),a||null}const r=Object.create(null);for(const[a,n]of Object.entries(i))r[a]=b(n);return r}function et(i,t){const{editing:r}=i;r.view.change(a=>{a.setStyle("height",`${t}px`,r.view.document.getRoot())})}const E=Symbol.for("elixir-editor-watchdog");function rt(i){const t=new F.EditorWatchdog(i);return t.setCreator(async(...r)=>{const a=await i.create(...r);return a[E]=t,a}),{watchdog:t,Constructor:{create:async(...r)=>(await t.create(...r),t.editor)}}}function at(i){return E in i?i[E]:null}class it extends y{editorPromise=null;get attrs(){const{el:t}=this,r=t.getAttribute.bind(t),a=t.hasAttribute.bind(t),n={editorId:r("id"),preset:tt(t),editableHeight:O(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:O(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:t,editorId:r,editableHeight:a,events:n,saveDebounceMs:s,language:o,watchdog:l}=this.attrs,{customTranslations:d,type:p,license:h,config:{plugins:f,...H}}=t;let g=await Y(p);if(l){const c=rt(g);({Constructor:g}=c),c.watchdog.on("restart",()=>{const C=c.watchdog.editor;this.editorPromise=Promise.resolve(C),u.the.unregister(r),u.the.register(r,C)})}const{loadedPlugins:M,hasPremium:V}=await J(f),A=[...await Q(o,V),Z(d?.dictionary||{})].filter(c=>!K(c)),N=ot(r,p),m=await g.create(N,{...b(H),initialData:ct(r,p),licenseKey:h.key,plugins:M,language:o,...A.length&&{translations:A}});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)}),T(p)){const c=document.getElementById(`${r}_input`);c&&nt(c,m,s),a&&et(m,a)}return m}setupTypingContentPush(t,r,a){const n=()=>{this.pushEvent("ckeditor5:change",{editorId:t,data:j(r)})};r.model.document.on("change:data",k(a,n)),n()}setupEventPush(t,r,a){const n=()=>{const{isFocused:s}=r.ui.focusTracker;(s?"focus":"blur")===a&&this.pushEvent(`ckeditor5:${a}`,{editorId:t,data:j(r)})};r.ui.focusTracker.on("change:isFocused",n)}}function j(i){return i.model.document.getRootNames().reduce((r,a)=>(r[a]=i.getData({rootName:a}),r),Object.create({}))}function nt(i,t,r){const a=()=>{const n=t.getData();i.value=n,i.dispatchEvent(new Event("input",{bubbles:!0}))};t.model.document.on("change:data",k(r,a)),st(i)?.addEventListener("submit",a),a()}function st(i){return i.closest("form")}function ot(i,t){if(t==="decoupled"){const{content:a}=D(i);return a}if(T(t))return document.getElementById(`${i}_editor`);const r=$(i);return P(r,({content:a})=>a)}function ct(i,t){if(t==="decoupled"){const{initialValue:a}=D(i);if(a)return a}if(T(t))return document.getElementById(i)?.getAttribute("cke-initial-value")||"";const r=$(i);return P(r,({initialValue:a})=>a)}function D(i){const t=$(i).main;if(!t)throw new Error(`No "main" editable found for editor with ID "${i}".`);return t}const ut=v(it);class lt extends y{mountedPromise=null;get attrs(){const t={editorId:this.el.getAttribute("data-cke-editor-id")||null,name:this.el.getAttribute("data-cke-ui-part-name")};return Object.defineProperty(this,"attrs",{value:t,writable:!1,configurable:!1,enumerable:!0}),t}async mounted(){const{editorId:t,name:r}=this.attrs;this.mountedPromise=u.the.execute(t,a=>{const{ui:n}=a,s=dt(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 dt(i){switch(i){case"toolbar":return"toolbar";case"menubar":return"menuBarView";default:return null}}const mt=v(lt),pt={CKEditor5:ut,CKEditable:_,CKUIPart:mt};exports.CustomEditorPluginsRegistry=w;exports.EditorsRegistry=u;exports.Hooks=pt;exports.unwrapEditorWatchdog=at;
//# sourceMappingURL=index.cjs.map