@akilli/editor 5.2.7 → 5.3.0

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/editor.js CHANGED
@@ -1,2 +1,2 @@
1
- var o=Object.freeze({AUDIO:"audio",BLOCK:"block",BREAK:"break",CAPTION:"caption",COL:"col",COLGROUP:"colgroup",CONTAINER:"container",FIGURE:"figure",FORMAT:"format",HEADING:"heading",IFRAME:"iframe",IMAGE:"image",LIST:"list",LISTITEM:"listitem",PARAGRAPH:"paragraph",PREFORMAT:"preformat",QUOTE:"quote",ROOT:"root",RULE:"rule",SLOT:"slot",SUMMARY:"summary",TABLE:"table",TABLECELL:"tablecell",TABLEROW:"tablerow",TABLESECTION:"tablesection",VIDEO:"video"});function F(s){return typeof s<"u"}function j(s){return typeof s=="function"}function E(s){return s&&typeof s=="string"}function v(s){return!F(s)||E(s)}function De(s){return!F(s)||Array.isArray(s)&&s.length>0}function Fe(s){return!F(s)||s instanceof HTMLElement}var A=class{#t;get editor(){return this.#t}#e;get name(){return this.#e}#r;get tag(){return this.#r}#o;get dialog(){return this.#o}constructor(t,e,i=void 0){if(!(t instanceof x)||!E(e)||!v(i))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=i&&this.editor.tags.get(i),this.#o=this.editor.dialogs.get(e)}execute(){this.dialog?this._openDialog():this._insert(this.#s())}_insert(t={}){if(!this.tag)return;this.#i(t);let e=this.editor.dom.getSelectedElementByName(this.tag.name);this.tag.group!==o.FORMAT?this.editor.dom.insert(this.editor.dom.createElement(this.tag.name,{attributes:t})):e&&Object.keys(t).length>0?e.parentElement.replaceChild(this.editor.dom.createElement(this.tag.name,{attributes:t,html:e.textContent}),e):e?e.parentElement.replaceChild(this.editor.dom.createText(e.textContent),e):this.editor.dom.format(this.editor.dom.createElement(this.tag.name,{attributes:t}))}_openDialog(){this.dialog?.open(t=>this._insert(t),this.#s())}#s(){if(!this.tag)return{};let t=this.editor.dom.getSelectedAttributesByName(this.tag.name);return this.#i(t),t}#i(t){Object.keys(t).forEach(e=>this.tag.attributes.includes(e)&&t[e]||delete t[e])}};var q=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof A))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}findByTagName(t){return Array.from(this.#t.values()).find(e=>e.tag?.name===t)}execute(t){this.get(t).execute()}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var V=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof u))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var r=Object.freeze({A:"a",ABBR:"abbr",ALL:"*",AUDIO:"audio",B:"b",BLOCK:"app-block",BLOCKQUOTE:"blockquote",BR:"br",BUTTON:"button",CITE:"cite",CODE:"code",COL:"col",COLGROUP:"colgroup",DATA:"data",DEL:"del",DETAILS:"details",DFN:"dfn",DIALOG:"dialog",DIV:"div",EDITOR:"akilli-editor",EM:"em",FIELDSET:"fieldset",FIGCAPTION:"figcaption",FIGURE:"figure",FOCUSBAR:"editor-focusbar",FORM:"form",FORMATBAR:"editor-formatbar",H2:"h2",H3:"h3",HR:"hr",I:"i",IFRAME:"iframe",IMG:"img",INPUT:"input",INS:"ins",KBD:"kbd",LABEL:"label",LEGEND:"legend",LI:"li",MARK:"mark",OL:"ol",P:"p",PRE:"pre",Q:"q",ROOT:"editor-root",S:"s",SAMP:"samp",SECTION:"section",SLOT:"slot",SMALL:"small",STRONG:"strong",SUB:"sub",SUMMARY:"summary",SUP:"sup",TABLE:"table",TBODY:"tbody",TD:"td",TFOOT:"tfoot",TH:"th",THEAD:"thead",TIME:"time",TOOLBAR:"editor-toolbar",TR:"tr",U:"u",UL:"ul",VAR:"var",VIDEO:"video"});var D=class{#t;constructor(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");this.#t=t,this.register(this.#r.bind(this))}dispatch(t,e=void 0,i=void 0){if(!E(t)||!Fe(e)||!Fe(i))throw new TypeError("Invalid argument");this.#t.dispatchEvent(new CustomEvent(t,{detail:{element:e,target:i}}))}register(t,e={childList:!0,subtree:!0}){if(!j(t))throw new TypeError("Invalid argument");new MutationObserver(t).observe(this.#t,e)}#e(t,e,i){e instanceof HTMLElement&&i instanceof HTMLElement&&(this.dispatch(t,e,i),this.dispatch(`${t}${e.localName.replace("-","")}`,e,i))}#r(t){t.forEach(e=>{e.addedNodes.forEach(i=>{i instanceof HTMLElement&&(this.#e("insert",i,e.target),Array.from(i.getElementsByTagName(r.ALL)).forEach(a=>this.#e("insert",a,e.target)))}),e.removedNodes.forEach(i=>i instanceof HTMLElement&&this.#e("delete",i,e.target))})}};var T=Object.freeze({FIRST:"first",PREV:"prev",NEXT:"next",LAST:"last"});var $=class{#t;get editor(){return this.#t}#e;get document(){return this.#e}#r;get window(){return this.#r}#o;get root(){return this.#o}#s={alwaysRaised:"yes",dependent:"yes",height:"",location:"no",menubar:"no",minimizable:"no",modal:"yes",resizable:"yes",scrollbars:"yes",toolbar:"no",width:""};constructor(t,e){if(!(t instanceof x)||!(e instanceof Document))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=this.document.defaultView,this.#o=this.document.documentElement}registerElement(t,e,i=void 0){F(this.window.customElements.get(t))||this.window.customElements.define(t,e,i?{extends:i}:void 0)}createElement(t,{attributes:e={},html:i=""}={}){let a=this.document.createElement(t);return a.innerHTML=i,Object.entries(e).forEach(([l,c])=>c&&a.setAttribute(l,`${c}`)),a}insert(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.getSelectedEditable();if(e instanceof HTMLSlotElement&&this.editor.tags.allowed(e.parentElement,t))this.insertBefore(t,e);else if(e){let i=this.closest(e,t);i&&this.insertAfter(t,i),e.hasAttribute("data-deletable")&&!e.textContent.trim()&&e.parentElement.removeChild(e)}else if(this.editor.tags.allowed(this.editor.root,t))this.insertLastChild(t,this.editor.root);else throw new TypeError("Invalid argument")}insertText(t){let e=this.getSelectedEditable();if(e){let i=this.getRange();i.deleteContents(),i.insertNode(this.createText(t)),i.collapse(),e.normalize()}}format(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.getRange(),i=this.getSelectedEditable();if(!e||e.collapsed||!e.toString().trim()||!i||!this.editor.tags.allowed(i,t))return;e.startContainer instanceof Text&&e.startContainer.parentElement!==i&&e.setStartBefore(e.startContainer.parentElement),e.endContainer instanceof Text&&e.endContainer.parentElement!==i&&e.setEndAfter(e.endContainer.parentElement);let a=e.toString(),l=Array.from(e.cloneContents().childNodes).every(c=>c instanceof Text&&!c.textContent.trim()||c instanceof HTMLElement&&c.localName===t.localName);e.deleteContents(),l?e.insertNode(this.createText(a)):(t.textContent=a,e.insertNode(t)),i.normalize()}createText(t){return this.document.createTextNode(t)}createTable(t=1,e=1){let i=this.createElement(r.TABLE);return this.insertLastChild(this.createTableHeader(1,e),i),this.insertLastChild(this.createTableBody(t,e),i),this.insertLastChild(this.createTableFooter(1,e),i),i}createTableColumnGroup(t=1){let e=this.createElement(r.COLGROUP);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.COL),e);return e}createTableHeader(t=1,e=1){return this.#i(r.THEAD,t,e)}createTableBody(t=1,e=1){return this.#i(r.TBODY,t,e)}createTableFooter(t=1,e=1){return this.#i(r.TFOOT,t,e)}createTableHeaderRow(t){let e=this.createElement(r.TR);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.TH),e);return e}createTableRow(t){let e=this.createElement(r.TR);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.TD),e);return e}createTableRowAfter(t){if(!(t instanceof HTMLTableRowElement))throw new TypeError("Invalid argument");this.insertAfter(this.createTableRow(t.cells.length),t)}createTableColumnAfter(t){if(!(t instanceof HTMLTableColElement)||t.localName!==r.COL)throw new TypeError("Invalid argument");let e=t.parentElement,i=e.parentElement,a=Array.from(e.children).indexOf(t);Array.from(i.rows).forEach(l=>this.insertAfter(this.createElement(l.cells[a].localName),l.cells[a])),this.insertAfter(this.createElement(r.COL),t)}sort(t,e){if(!(t instanceof HTMLElement)||!Object.values(T).includes(e))throw new TypeError("Invalid argument");if(t.parentElement.children.length<=1)return;let i=t.parentElement,a=i.parentElement,l=t.previousElementSibling,c=t.nextElementSibling,f=i.firstElementChild,p=i.lastElementChild,g=t===f,I=t===p,B=t.localName===r.COL,W=Array.from(i.children).indexOf(t);e===T.PREV&&!g&&l.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertBefore(C.cells[W],C.cells[W-1])),this.insertBefore(t,l)):e===T.NEXT&&!I&&c.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertAfter(C.cells[W],C.cells[W+1])),this.insertAfter(t,c)):(e===T.FIRST&&!g||e===T.NEXT&&I)&&f.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertFirstChild(C.cells[W],C)),this.insertBefore(t,f)):(e===T.LAST&&!I||e===T.PREV&&g)&&p.hasAttribute("data-sortable")&&(B&&Array.from(a.rows).forEach(C=>this.insertLastChild(C.cells[W],C)),this.insertAfter(t,p))}insertBefore(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("beforebegin",t)}insertAfter(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("afterend",t)}insertFirstChild(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("afterbegin",t)}insertLastChild(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("beforeend",t)}delete(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");if([r.COL,r.TR].includes(t.localName)&&t.matches(":only-child"))return;if(t.localName===r.COL){let a=Array.from(t.parentElement.children).indexOf(t),l=t.parentElement.parentElement;Array.from(l.rows).forEach(c=>c.removeChild(c.cells[a]))}let e=t.previousElementSibling,i=t.nextElementSibling;t===this.getActiveElement()&&t.blur(),t.parentElement.removeChild(t),e instanceof HTMLElement&&e.hasAttribute("data-focusable")?this.focusEnd(e):i instanceof HTMLElement&&i.hasAttribute("data-focusable")&&i.focus()}arbitrary(t){return t===this.editor.root||t?.hasAttribute("data-arbitrary")}contains(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");if(this.editor.root.contains(t))return!0;let e=t.closest(this.editor.root.localName);return e&&!e.parentElement}closest(t,e){if(!(t instanceof HTMLElement)||!this.contains(t.parentElement))throw new TypeError("Invalid argument");let i=t,a=t.parentElement;do if(this.arbitrary(a)&&this.editor.tags.allowed(a,e))return i;while((i=a)&&(a=a.parentElement)&&this.contains(a))}wrap(t,e,i={}){let a;if(t instanceof HTMLElement){if(t.parentElement.localName!==e&&(a=this.closest(t,e))){let l=this.createElement(e,i);this.insertAfter(l,a),this.insertLastChild(t,l)}}else throw new TypeError("Invalid argument")}getActiveElement(){let t=this.document.activeElement;return t&&this.contains(t)?t:void 0}getSelectedElement(){let t=this.getSelection(),e=t.anchorNode instanceof Text?t.anchorNode.parentElement:t.anchorNode,i=t.focusNode instanceof Text?t.focusNode.parentElement:t.focusNode;if(e instanceof HTMLElement&&i instanceof HTMLElement&&e===i&&this.contains(e))return e}getSelectedElementByName(t){let e=this.getSelectedElement();return e?.localName===t?e:void 0}getSelectedAttributesByName(t){let e=this.getSelectedElementByName(t),i={};return e&&Array.from(e.attributes).forEach(a=>i[a.nodeName]=a.nodeValue),i}getSelectedEditable(){let t=this.getSelection(),e=t.anchorNode instanceof Text?t.anchorNode.parentElement:t.anchorNode,i=t.focusNode instanceof Text?t.focusNode.parentElement:t.focusNode;if(e instanceof HTMLElement&&i instanceof HTMLElement){let a=e.closest("[contenteditable=true]"),l=i.closest("[contenteditable=true]");if(a instanceof HTMLElement&&a===l&&this.contains(a))return a}}getSelection(){return this.window.getSelection()}getRange(){let t=this.getSelection();return t.rangeCount>0?t.getRangeAt(0):void 0}setRange(t){let e=this.getSelection();e.removeAllRanges(),e.addRange(t)}selectContents(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.document.createRange();e.selectNodeContents(t),this.setRange(e)}focusEnd(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");t.focus();let e=this.document.createRange();e.selectNodeContents(t),e.collapse(),this.setRange(e)}removeClass(t,...e){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");t.classList.remove(...e),t.classList.length>0||t.removeAttribute("class")}open({url:t,name:e,call:i,params:a={}}){if(!E(t)||!E(e)||!j(i))throw new TypeError("Invalid argument");let l=this.createElement(r.A,{attributes:{href:t}}),c=new URL(l.href);Object.entries(a).forEach(([p,g])=>c.searchParams.set(p,`${g}`));let f=this.window.open(c.toString(),e,this.#a());this.window.addEventListener("message",p=>{p.origin===c.origin&&p.source===f&&(i(p.data),f.close())},!1)}getWidth(){return this.window.screen.width}getHeight(){return this.window.screen.height}#i(t,e,i){let a=this.createElement(t);for(let l=0;l<e;l++)this.insertLastChild(t===r.THEAD?this.createTableHeaderRow(i):this.createTableRow(i),a);return a}#a(){let t=Object.assign({},this.#s,{height:`${this.getHeight()}`,width:`${this.getWidth()}`},this.editor.config.base.browser);return Object.entries(t).filter(([,e])=>!!e).map(([e,i])=>`${e}=${i}`).join(",")}};var w=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}filter(t){throw new Error("Not implemented")}};var Q=class{#t=new Set;add(t){if(!(t instanceof w))throw new TypeError("Invalid argument");this.#t.add(t)}filter(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");this.#t.forEach(e=>{t.normalize(),e.filter(t)})}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var H=class{name;group;children;attributes;alignable;arbitrary;deletable;editable;empty;focusable;navigable;slotable;sortable;enter;constructor({name:t,group:e,...i}={}){if(!E(t)||!E(e)||!De(i.children)||!De(i.attributes)||!v(i.enter))throw new TypeError("Invalid argument");this.name=t,this.group=e,this.children=i.children||[],this.attributes=i.attributes||[],this.arbitrary=i.arbitrary===!0,this.alignable=i.alignable===!0,this.deletable=i.deletable===!0,this.editable=i.editable===!0,this.empty=i.empty===!0,this.focusable=i.focusable===!0,this.navigable=i.navigable===!0,this.slotable=i.slotable===!0,this.sortable=i.sortable===!0,this.enter=i.enter}};var n=class{#t;get editor(){return this.#t}static get name(){throw new Error("Missing name")}static get dependencies(){return[]}static get config(){return{}}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}init(){throw new Error("Not implemented")}_(t){return this.editor.translate(t)}_i18n(t){t[this.editor.config.base.lang]&&(this.editor.i18n=t[this.editor.config.base.lang])}_tag(t){this.editor.tags.set(new H(t))}_command(t){this.editor.commands.set(new A(this.editor,this.constructor.name,t))}_toolbar(t,e=void 0){let i=this._(t);this.editor.dom.insertLastChild(this.#e(i,i,void 0,e),this.editor.toolbar)}_formatbar(t,e=void 0,i=void 0){let a=this._(t),l=this._("Alt"),c=this._("Shift"),f=a+(e?` [${l} + ${c} + ${e}]`:"");this.editor.dom.insertLastChild(this.#e(a,f,e,i),this.editor.formatbar)}_focusbar(t,e=void 0){let i=this._(t);this.editor.dom.insertLastChild(this.#e(i,i,void 0,e),this.editor.focusbar)}#e(t,e,i=void 0,a=void 0){if(!E(t)||!E(e)||!v(i))throw new TypeError("Invalid argument");return this.editor.dom.createElement(r.BUTTON,{attributes:{type:"button",title:e,"data-command":a||this.constructor.name,"data-key":i},html:t})}};var Y=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof n))throw new TypeError("Invalid argument");this.#t.set(t.constructor.name,t)}init(){this.#t.forEach(t=>t.init())}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var Z=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t instanceof HTMLElement?t.localName:t)}set(t){if(!(t instanceof H))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}allowed(t,e,i=!1){let a=i?e:this.get(e)?.group;return!!this.get(t)?.children.includes(a)}freeze(){this.#t.forEach(t=>{Object.freeze(t.children),Object.freeze(t.attributes),Object.freeze(t)}),Object.freeze(this.#t),Object.freeze(this)}};var x=class{#t;get orig(){return this.#t}#e={};get config(){return this.#e}#r;get dom(){return this.#r}#o;get element(){return this.#o}#s;get toolbar(){return this.#s}#i;get toolbarDispatcher(){return this.#i}#a;get formatbar(){return this.#a}#d;get formatbarDispatcher(){return this.#d}#m;get focusbar(){return this.#m}#l;get focusbarDispatcher(){return this.#l}#c;get root(){return this.#c}#h;get rootDispatcher(){return this.#h}#n={};get i18n(){return this.#n}set i18n(t){this.#n={...this.#n,...t||{}}}#f=new Z;get tags(){return this.#f}#u=new Q;get filters(){return this.#u}#p=new V;get dialogs(){return this.#p}#g=new q;get commands(){return this.#g}#E=new Y;get plugins(){return this.#E}static get defaultConfig(){return{}}constructor(t,e={}){if(!(t instanceof HTMLElement)||!(e instanceof Object))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=new $(this,this.orig.ownerDocument),this.#o=this.dom.createElement(r.EDITOR),this.#s=this.dom.createElement(r.TOOLBAR,{attributes:{role:"toolbar"}}),this.dom.insertLastChild(this.toolbar,this.element),this.#i=new D(this.toolbar),this.#a=this.dom.createElement(r.FORMATBAR,{attributes:{role:"toolbar"}}),this.formatbar.hidden=!0,this.dom.insertLastChild(this.formatbar,this.element),this.#d=new D(this.formatbar),this.#m=this.dom.createElement(r.FOCUSBAR,{attributes:{role:"toolbar"}}),this.focusbar.hidden=!0,this.dom.insertLastChild(this.focusbar,this.element),this.#l=new D(this.focusbar),this.#c=this.dom.createElement(r.ROOT),this.dom.insertLastChild(this.root,this.element),this.#h=new D(this.root)}init(){let t=this.config;this.#e={};let e=this.constructor.defaultConfig.base?.plugins||[],i=e;if(Array.isArray(t.base?.plugins)&&t.base.plugins.length>0){let c=t.base.plugins;t.base?.pluginsDisabled?i=i.filter(f=>!c.includes(f.name)):(i=[],c.forEach(f=>{let p=e.find(g=>g.name===f);p&&i.push(p)}))}let a=new Set,l=c=>{c.dependencies?.forEach(l),a.add(c)};i.map(l),a.forEach(c=>{Object.entries(c.config).forEach(([f,p])=>{this.config[c.name]??={},this.config[c.name][f]=t[c.name]?.[f]||this.constructor.defaultConfig[c.name]?.[f]||p}),this.plugins.set(new c(this))}),this.config.base.lang&&(this.element.lang=this.config.base.lang),this.plugins.init(),this.toolbarDispatcher.dispatch("init"),this.formatbarDispatcher.dispatch("init"),this.focusbarDispatcher.dispatch("init"),this.rootDispatcher.dispatch("init")}freeze(){Object.freeze(this.config),Object.freeze(this.i18n),this.tags.freeze(),this.filters.freeze(),this.dialogs.freeze(),this.commands.freeze(),this.plugins.freeze()}load(){this.orig instanceof HTMLTextAreaElement?(this.orig.form.addEventListener("submit",()=>this.save()),this.setHtml(this.orig.value.replace("/&nbsp;/g"," "))):this.setHtml(this.orig.innerHTML),this.dom.insertAfter(this.element,this.orig),this.orig.hidden=!0,this.rootDispatcher.dispatch("load")}destroy(){this.element.parentElement.removeChild(this.element),this.orig.hidden=!1,this.rootDispatcher.dispatch("destroy")}getHtml(){let t=this.dom.createElement(this.root.localName,{html:this.root.innerHTML});return this.filters.filter(t),this.rootDispatcher.dispatch("gethtml",t),t.innerHTML}setHtml(t){let e=this.dom.createElement(this.root.localName,{html:t});this.rootDispatcher.dispatch("sethtml",e),this.filters.filter(e),this.root.innerHTML=e.innerHTML}save(){this.orig instanceof HTMLTextAreaElement?this.orig.value=this.getHtml():this.orig.innerHTML=this.getHtml(),this.rootDispatcher.dispatch("save")}translate(t){return this.i18n[t]||t}url(t){let e=this.dom.window.origin||this.dom.window.location.origin,i=this.dom.createElement(r.A,{attributes:{href:t}});return e===i.origin?i.pathname:i.href}static create(t,e={}){let i=new this(t,e);return i.init(),i.freeze(),i.load(),i}};var X=class{#t;get editor(){return this.#t}#e;get form(){return this.#e}#r;constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t,this.#e=this.editor.dom.createElement(r.FORM,{attributes:{method:"dialog"}}),this.addFieldset().#o().#s()}addFieldset(){let t=this.editor.dom.createElement(r.FIELDSET);return this.#r?this.editor.dom.insertAfter(t,this.#r):this.editor.dom.insertFirstChild(t,this.#e),this.#r=t,this}addLegend(t){if(!E(t))throw new TypeError("Invalid argument");return this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LEGEND,{html:t}),this.#r),this}addTextInput(t,e,i={}){return this.addInput(t,e,i,"text")}addNumberInput(t,e,i={}){return this.addInput(t,e,i,"number")}addInput(t,e,i={},a="text"){if(!E(t)||!E(e)||!E(a))throw new TypeError("Invalid argument");Object.assign(i,{id:`editor-${t}`,name:t,type:a});let l=this.editor.dom.createElement(r.DIV);return this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LABEL,{attributes:{for:i.id},html:e}),l),this.editor.dom.insertLastChild(this.editor.dom.createElement(r.INPUT,{attributes:i}),l),i.required&&l.setAttribute("data-required",""),this.editor.dom.insertLastChild(l,this.#r),this}#o(){let t=this.#i("Cancel"),e=this.editor.dom.createElement(r.BUTTON,{attributes:{type:"reset"},html:t});return this.editor.dom.insertLastChild(e,this.#e),this}#s(){let t=this.editor.dom.createElement(r.BUTTON,{html:this.#i("Save")});return this.editor.dom.insertLastChild(t,this.#e),this}#i(t){return this.editor.translate(t)}};var u=class{#t;get editor(){return this.#t}#e;get name(){return this.#e}#r;get browserUrl(){return this.#r}#o;get formCreator(){return this.#o}constructor(t,e,i=void 0){if(!(t instanceof x)||!E(e)||!v(i))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=i}open(t,e={}){this.browserUrl?this.#s(t,e):this.#i(t,e)}_(t){return this.editor.translate(t)}_prepareForm(){throw new Error("Not implemented")}#s(t,e={}){this.editor.dom.open({url:this.browserUrl,name:this.name,call:t,params:e})}#i(t,e={}){let i=this.editor.dom.getRange();this.#a();let a=this.editor.dom.createElement(r.DIALOG);a.addEventListener("click",c=>c.target===a&&a.close()),a.addEventListener("close",()=>{i&&this.editor.dom.setRange(i),a.returnValue&&t(JSON.parse(a.returnValue)),this.#a()}),this.editor.dom.insertLastChild(a,this.editor.element),this.#o=new X(this.editor),this._prepareForm();let l=this.formCreator.form;l.addEventListener("submit",()=>a.close(JSON.stringify(Object.fromEntries(new FormData(l))))),l.addEventListener("reset",()=>a.close()),new FormData(l).forEach((c,f)=>F(e[f])&&(l.elements[f].value=e[f])),this.editor.dom.insertLastChild(l,a),a.showModal()}#a(){Array.from(this.editor.element.getElementsByTagName(r.DIALOG)).forEach(t=>{t.parentElement.removeChild(t)})}};var J=class extends u{constructor(t){super(t,P.name)}_prepareForm(){this.formCreator.addLegend(this._("Abbreviation")).addTextInput("title",this._("Full term"),{placeholder:this._("Insert full term or leave empty to remove it")})}};var R=Object.freeze({NONE:"none",LEFT:"left",CENTER:"center",RIGHT:"right"});var tt=class extends A{#t;constructor(t,e){if(!Object.values(R).includes(e))throw new TypeError("Invalid argument");super(t,"align-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-alignable")&&(this.editor.dom.removeClass(t,...Object.values(R)),this.#t!==R.NONE&&t.classList.add(this.#t))}};var h=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}handleEvent(t){j(this[t.type])&&this[t.type](t)}_(t){return this.editor.translate(t)}};var b=Object.freeze({A:"a",ARROWDOWN:"ArrowDown",ARROWLEFT:"ArrowLeft",ARROWRIGHT:"ArrowRight",ARROWUP:"ArrowUp",B:"b",BACKSPACE:"Backspace",C:"c",D:"d",DEL:"Delete",E:"e",END:"End",ENTER:"Enter",F:"f",G:"g",HOME:"Home",I:"i",J:"j",K:"k",L:"l",M:"m",O:"o",Q:"q",R:"r",S:"s",SPACE:" ",T:"t",TAB:"Tab",U:"u",V:"v",W:"w",X:"x",Y:"y",Z:"z"}),d=b,qe=Object.freeze([b.ARROWLEFT,b.ARROWRIGHT,b.ARROWUP,b.ARROWDOWN]),Ve=Object.freeze([b.HOME,b.ARROWUP,b.ARROWDOWN,b.END]),$e=Object.freeze([b.HOME,b.ARROWLEFT,b.ARROWRIGHT,b.END]),ve=Object.freeze({[b.ARROWUP]:R.NONE,[b.ARROWLEFT]:R.LEFT,[b.ARROWDOWN]:R.CENTER,[b.ARROWRIGHT]:R.RIGHT}),He=Object.freeze({[b.HOME]:T.FIRST,[b.ARROWUP]:T.PREV,[b.ARROWDOWN]:T.NEXT,[b.END]:T.LAST});function L(s,t,{alt:e=!1,ctrl:i=!1,shift:a=!1}={}){return s.key===t&&s.altKey===e&&s.ctrlKey===i&&s.shiftKey===a}function et(s,t,{alt:e=!1,ctrl:i=!1,shift:a=!1}={}){return Array.isArray(t)&&t.includes(s.key)&&s.altKey===e&&s.ctrlKey===i&&s.shiftKey===a}function Ue(s){return et(s,qe)}function Ge(s){return et(s,Ve)}function ke(s){return et(s,$e)}function Ke(s){return et(s,Object.keys(ve),{shift:!0})}function ze(s){return et(s,Object.keys(He),{ctrl:!0})}function We(s){return/^[A-Z]$/.test(s.key)&&L(s,s.key,{alt:!0,shift:!0})}var rt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-alignable")&&t.addEventListener("keydown",this)}keydown(t){t.target===t.currentTarget&&Ke(t)&&(t.preventDefault(),t.stopPropagation(),this.editor.dom.removeClass(t.target,...Object.values(R)),ve[t.key]!==R.NONE&&t.target.classList.add(ve[t.key]))}};var it=class extends w{filter(t){let e=this.editor.tags.get(t),i=this.editor.tags.allowed(t,r.P),a=e.editable||e.group===o.FORMAT,l=[],c=(f=null)=>{if(i&&l.length>0){let p=this.editor.dom.createElement(r.P,{html:l.join(" ")});f?this.editor.dom.insertBefore(p,f):this.editor.dom.insertLastChild(p,t),l=[]}};Array.from(t.childNodes).forEach(f=>{let p=f.textContent.trim();if(f instanceof HTMLElement){let g=this.#t(f),I=this.editor.tags.get(g);if(I&&this.editor.tags.allowed(t,g))c(g),this.#e(g,I);else if(I&&I.group===o.FORMAT&&i){let B=this.#e(g,I);B&&(l.push(B.outerHTML),t.removeChild(B))}else!a&&p&&i?(l.push(p),t.removeChild(g)):a&&p?t.replaceChild(this.editor.dom.createText(p),g):t.removeChild(g)}else f instanceof Text?(!a&&p&&i&&l.push(p),(!a||!p)&&t.removeChild(f)):f instanceof Node&&t.removeChild(f)}),c()}#t(t){let e=this.editor.config.base.filter[t.localName];if(!e)return t;let i=this.editor.dom.createElement(e,{html:t.innerHTML});return t.parentElement.replaceChild(i,t),i}#e(t,e){if(Array.from(t.attributes).forEach(i=>!e.attributes.includes(i.name)&&t.removeAttribute(i.name)),t.hasChildNodes()&&this.editor.filters.filter(t),t.hasChildNodes()||e.empty)return t;t.parentElement?.removeChild(t)}};var ot=class extends A{constructor(t){super(t,"delete")}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-deletable")&&this.editor.dom.delete(t)}};var st=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-deletable")&&t.addEventListener("keydown",this)}keydown(t){t.target===t.currentTarget&&L(t,d.DEL,{ctrl:!0})&&(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation())}};var at=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.contentEditable==="true"?t.addEventListener("keydown",this):t.parentElement.contentEditable==="true"&&t.addEventListener("dblclick",this)}keydown(t){if(L(t,d.ENTER,{shift:!0})&&!this.editor.tags.allowed(t.target,r.BR))t.preventDefault(),t.stopPropagation();else if(L(t,d.ENTER)){t.preventDefault(),t.stopPropagation();let e=this.editor.tags.get(t.target)?.enter;if(e){if(t.target.textContent.trim()||!t.target.hasAttribute("data-deletable")){let i=this.editor.dom.closest(t.target,e);i&&this.editor.dom.insertAfter(this.editor.dom.createElement(e),i)}else if(!(t.target instanceof HTMLParagraphElement)){let i=this.editor.dom.closest(t.target,r.P);i&&this.editor.dom.insertAfter(this.editor.dom.createElement(r.P),i),t.target.parentElement.removeChild(t.target)}}}else L(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")?(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation()):We(t)&&(t.preventDefault(),t.stopPropagation(),this.editor.formatbar.querySelector(`${r.BUTTON}[data-key=${t.key.toLowerCase()}]`)?.click())}dblclick({target:t}){this.editor.dom.selectContents(t),this.editor.commands.findByTagName(t.localName)?.execute()}};var nt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-focusable")&&t.focus()}};var S=class extends h{insertbutton({target:t,detail:{element:e}}){e.getAttribute("data-command")&&e.addEventListener("click",this),e.tabIndex=e===t.firstElementChild?0:-1,e.addEventListener("keydown",this)}click({target:t}){this.editor.commands.execute(t.getAttribute("data-command"))}keydown(t){if(ke(t)){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,a=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===a,f=t.target===l;t.key===d.ARROWLEFT&&!c?e.focus():t.key===d.ARROWRIGHT&&!f?i.focus():t.key===d.HOME||t.key===d.ARROWRIGHT&&f?a.focus():(t.key===d.END||t.key===d.ARROWLEFT&&c)&&l.focus(),t.preventDefault(),t.stopPropagation()}}_show(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");t.hidden=!1;let{x:i,y:a}=e.getBoundingClientRect(),{x:l,y:c}=this.editor.root.getBoundingClientRect(),f=i-l+t.clientWidth-this.editor.root.clientWidth,p=a-c-e.scrollTop+this.editor.root.offsetTop-t.clientHeight,g=t.clientWidth<this.editor.root.clientWidth?i-l:0;g>0&&f>0&&(g=g>f?(g-f)/2:0),t.style.left=`${g}px`,t.style.top=`${p}px`}_hide(t){t.hidden=!0,t.removeAttribute("style")}};var dt=class extends S{constructor(t){super(t),this.editor.focusbar.addEventListener("insertbutton",this),this.editor.root.addEventListener("focusin",this),this.editor.root.addEventListener("focusout",this),this.editor.dom.document.addEventListener("selectionchange",this)}insertbutton(t){super.insertbutton(t),t.detail.element.getAttribute("data-command")&&t.detail.element.addEventListener("mousedown",this)}mousedown(t){t.preventDefault(),t.stopPropagation()}focusin({target:t}){t instanceof HTMLElement&&t.hasAttribute("data-focusable")&&this.#t(t)}focusout(){this.#e()}selectionchange(){let t=this.editor.dom.getActiveElement();!this.editor.dom.getSelection().isCollapsed||!t?this.#e():t instanceof HTMLElement&&t.hasAttribute("data-focusable")&&this.#t(t)}#t(t){this.editor.focusbar.children.length&&(Object.keys(t.dataset).forEach(e=>this.editor.focusbar.dataset[e]=t.dataset[e]),this.editor.focusbar.dataset.tag=t.localName,this._show(this.editor.focusbar,t))}#e(){this._hide(this.editor.focusbar),Object.keys(this.editor.focusbar.dataset).forEach(t=>delete this.editor.focusbar.dataset[t])}};var mt=class extends S{constructor(t){super(t),this.editor.formatbar.addEventListener("insertbutton",this),this.editor.dom.document.addEventListener("selectionchange",this)}selectionchange(){let t=this.editor.dom.getSelectedEditable();t&&!this.editor.dom.getSelection().isCollapsed&&this.editor.tags.allowed(t,o.FORMAT,!0)?this._show(this.editor.formatbar,t):this._hide(this.editor.formatbar)}};var lt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-navigable")&&(t.tabIndex=0,t.addEventListener("keydown",this))}keydown(t){if(t.target===t.currentTarget&&Ge(t)&&this.#t(t.target)){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,a=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===a,f=t.target===l;t.key===d.ARROWUP&&!c&&e.hasAttribute("data-navigable")?e.focus():t.key===d.ARROWDOWN&&!f&&i.hasAttribute("data-navigable")?i.focus():(t.key===d.HOME||t.key===d.ARROWDOWN&&f)&&a.hasAttribute("data-navigable")?a.focus():(t.key===d.END||t.key===d.ARROWUP&&c)&&l.hasAttribute("data-navigable")&&l.focus(),t.preventDefault(),t.stopPropagation()}}#t(t){if(t.contentEditable!=="true")return!0;let e=this.editor.dom.getSelection(),i=this.editor.dom.getSelectedEditable(),a=this.editor.dom.getSelectedElement();return e.isCollapsed&&e.anchorOffset===0&&[i,t.firstChild].includes(a)}};var ct=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t instanceof HTMLSlotElement?t.addEventListener("keydown",this):t.hasAttribute("data-slotable")&&!t.querySelector(":scope > "+r.SLOT)&&this.editor.dom.insertLastChild(this.editor.dom.createElement(r.SLOT),t)}keydown(t){L(t,d.BACKSPACE)&&t.target.matches(":only-child")?this.editor.dom.delete(t.target.parentElement):!L(t,d.TAB)&&!L(t,d.TAB,{shift:!0})&&(t.preventDefault(),t.stopPropagation())}};var ht=class extends A{#t;constructor(t,e){if(!Object.values(T).includes(e))throw new TypeError("Invalid argument");super(t,"sort-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-sortable")&&this.editor.dom.sort(t,this.#t)}};var ft=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-sortable")&&(t.addEventListener("keydown",this),t.addEventListener("pointerdown",this),t.addEventListener("pointermove",this),t.addEventListener("pointerup",this))}keydown(t){t.target===t.currentTarget&&ze(t)&&(this.editor.dom.sort(t.target,He[t.key]),t.preventDefault(),t.stopPropagation())}pointerdown(t){let e=t.target.closest("[data-sortable]");e&&this.editor.dom.contains(e)&&(e.setAttribute("data-sort",""),e.setPointerCapture(t.pointerId))}pointermove(t){let e=t.target.closest("[data-sortable][data-sort]"),i=this.editor.dom.document.elementFromPoint(t.x,t.y);this.#t(),e&&this.editor.dom.contains(e)&&this.#e(e,i)&&i.setAttribute("data-sortover","")}pointerup(t){let e=t.target.closest("[data-sortable][data-sort]");if(e&&this.editor.dom.contains(e)){let i=this.editor.dom.document.elementFromPoint(t.x,t.y),a=i.parentElement;if(this.#t(),e.removeAttribute("data-sort"),e.releasePointerCapture(t.pointerId),this.#e(e,i)){if(e.localName===r.COL&&a===e.parentElement){let l=Array.from(a.children).indexOf(e),c=Array.from(a.children).indexOf(i),f=a.parentElement;Array.from(f.rows).forEach(p=>this.editor.dom.insertBefore(p.cells[l],p.cells[c]))}this.editor.dom.insertBefore(e,i)}}}#t(){this.editor.root.querySelectorAll("[data-sortover]").forEach(t=>t.removeAttribute("data-sortover"))}#e(t,e){return t instanceof HTMLElement&&e instanceof HTMLElement&&this.editor.dom.contains(e)&&![this.editor.root,t].includes(e)&&e.hasAttribute("data-sortable")&&(t.parentElement===e.parentElement||this.editor.dom.arbitrary(t.parentElement)&&this.editor.dom.arbitrary(e.parentElement))&&this.editor.tags.allowed(e.parentElement,t)}};var ut=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){let e=this.editor.tags.get(t);e&&(e.editable&&(t.contentEditable="true"),["alignable","arbitrary","deletable","focusable","navigable","slotable","sortable"].forEach(i=>{e[i]&&(t.dataset[i]="")}))}};var pt=class extends S{constructor(t){super(t),this.editor.toolbar.addEventListener("insertbutton",this)}};var m=class extends n{static get name(){return"base"}static get config(){return{browser:{},filter:{},lang:void 0,plugins:[],pluginsDisabled:!1}}init(){this._tag({name:r.ROOT,group:o.ROOT,children:[o.AUDIO,o.BLOCK,o.CONTAINER,o.FIGURE,o.HEADING,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO]}),this._tag({name:r.SLOT,group:o.SLOT,editable:!0,focusable:!0,navigable:!0,sortable:!0}),new ut(this.editor),new pt(this.editor),new mt(this.editor),new dt(this.editor),new at(this.editor),new st(this.editor),new lt(this.editor),new ft(this.editor),new rt(this.editor),new nt(this.editor),new ct(this.editor),this.editor.filters.add(new it(this.editor)),this.#t(),this.#e(),this.#r()}#t(){let t={[R.NONE]:"No alignment",[R.LEFT]:"Align left",[R.CENTER]:"Align center",[R.RIGHT]:"Align right"};Object.entries(t).forEach(([e,i])=>{let a=new tt(this.editor,e);this.editor.commands.set(a),this._focusbar(i,a.name)})}#e(){let t={[T.FIRST]:"Sort to the beginning",[T.PREV]:"Sort before previous element",[T.NEXT]:"Sort after next element",[T.LAST]:"Sort to the end"};Object.entries(t).forEach(([e,i])=>{let a=new ht(this.editor,e);this.editor.commands.set(a),this._focusbar(i,a.name)})}#r(){this.editor.commands.set(new ot(this.editor)),this._focusbar("Delete","delete")}};var P=class extends n{static get name(){return"abbreviation"}static get dependencies(){return[m]}init(){this._tag({name:r.ABBR,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new J(this.editor)),this._command(r.ABBR),this._formatbar("Abbreviation",d.A)}};var gt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Audio")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to audio"),required:"required"}).addTextInput("id",this._("ID"))}};var Et=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertaudio",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.AUDIO)).forEach(e=>this.#t(e))}insertaudio({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.controls=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:U.name}})):t.parentElement.removeChild(t)}};var bt=class extends w{filter(t){t.querySelectorAll(`${r.FIGURE} > ${r.FIGCAPTION}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Tt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertfigure",this)}insertfigure({detail:{element:t}}){t.querySelector(":scope > "+r.FIGCAPTION)||this.editor.dom.insertLastChild(this.editor.dom.createElement(r.FIGCAPTION),t)}};var O=class extends n{static get name(){return"figure"}static get dependencies(){return[m]}init(){this._tag({name:r.FIGURE,group:o.FIGURE,children:[o.AUDIO,o.CAPTION,o.IFRAME,o.IMAGE,o.PREFORMAT,o.QUOTE,o.TABLE,o.VIDEO],attributes:["class"],alignable:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag({name:r.FIGCAPTION,group:o.CAPTION,children:[o.FORMAT],editable:!0,navigable:!0,enter:r.P}),new Tt(this.editor),this.editor.filters.add(new bt(this.editor))}};var U=class extends n{static get name(){return"audio"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.AUDIO,group:o.AUDIO,attributes:["controls","id","src"],empty:!0,navigable:!0}),new Et(this.editor),this.editor.dialogs.set(new gt(this.editor,this.constructor.name,this.editor.config.audio.browser)),this._command(r.AUDIO),this._toolbar("Audio")}};var Lt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Block")).addTextInput("id",this._("ID"),{required:"required"})}};var At=class extends HTMLElement{get content(){return this.shadowRoot.innerHTML}set content(t){this.shadowRoot.innerHTML=t}constructor(){super(),this.attachShadow({mode:"open"})}};var xt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertappblock",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.BLOCK)).forEach(e=>e.id||e.parentElement.removeChild(e))}async insertappblock({detail:{element:t}}){if(!t.id){t.parentElement.removeChild(t);return}if(!this.editor.config.block.api)return;let e=this.editor.config.block.api.replace("{id}",t.id),i=await fetch(e,{mode:"no-cors"});if(!i.ok)return;let a="";this.editor.config.block.css&&(a=this.editor.config.block.css.split(",").map(c=>`<link rel="stylesheet" href="${c}">`).join(""));let l=await i.text();t.content=a+l}};var wt=class extends n{static get name(){return"block"}static get dependencies(){return[m]}static get config(){return{api:void 0,browser:void 0,css:void 0}}init(){this.editor.dom.registerElement(r.BLOCK,At),this._tag({name:r.BLOCK,group:o.BLOCK,attributes:["id"],deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),new xt(this.editor),this.editor.dialogs.set(new Lt(this.editor,this.constructor.name,this.editor.config.block.browser)),this._command(r.BLOCK),this._toolbar("Block")}};var Rt=class extends w{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(_.name)&&t.querySelector(":scope > "+r.BLOCKQUOTE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.BLOCKQUOTE),t),t.parentElement.removeChild(t))}};var Ot=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertblockquote",this),this.editor.root.addEventListener("deleteblockquote",this)}insertblockquote({detail:{element:t}}){this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:_.name}})}deleteblockquote({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(_.name)&&t.parentElement.removeChild(t)}};var yt=class extends w{filter(t){if(t instanceof HTMLPreElement){t.outerHTML=t.outerHTML.replace(/(<br\s*\/?>)/gi,`
2
- `);return}t.innerHTML=t.innerHTML.replace(/^\s*(<br\s*\/?>\s*)+/gi,"").replace(/\s*(<br\s*\/?>\s*)+$/gi,""),t instanceof HTMLParagraphElement?t.outerHTML=t.outerHTML.replace(/\s*(<br\s*\/?>\s*){2,}/gi,"</p><p>"):t.innerHTML=t.innerHTML.replace(/\s*(<br\s*\/?>\s*){2,}/gi,"<br>")}};var y=class extends n{static get name(){return"break"}static get dependencies(){return[m]}init(){this._tag({name:r.BR,group:o.BREAK,empty:!0}),this.editor.filters.add(new yt(this.editor))}};var _=class extends n{static get name(){return"blockquote"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.BLOCKQUOTE,group:o.QUOTE,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new Ot(this.editor),this._command(r.BLOCKQUOTE),this._toolbar("Blockquote"),this.editor.filters.add(new Rt(this.editor))}};var It=class extends n{static get name(){return"bold"}static get dependencies(){return[m]}init(){this._tag({name:r.B,group:o.FORMAT}),this._command(r.B),this._formatbar("bold",d.B)}};var Ct=class extends n{static get name(){return"cite"}static get dependencies(){return[m]}init(){this._tag({name:r.CITE,group:o.FORMAT}),this._command(r.CITE),this._formatbar("Citation",d.Z)}};var Nt=class extends n{static get name(){return"code"}static get dependencies(){return[m]}init(){this._tag({name:r.CODE,group:o.FORMAT}),this._command(r.CODE),this._formatbar("Code",d.C)}};var _t=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("value",this._("Machine-readable Value"),{placeholder:this._("Insert value or leave empty to remove it")})}};var Mt=class extends n{static get name(){return"data"}static get dependencies(){return[m]}init(){this._tag({name:r.DATA,group:o.FORMAT,attributes:["value"]}),this.editor.dialogs.set(new _t(this.editor,this.constructor.name)),this._command(r.DATA),this._formatbar("Data",d.J)}};var St=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Definition")).addTextInput("title",this._("Term"),{placeholder:this._("Insert term or leave empty to remove it")})}};var Bt=class extends n{static get name(){return"definition"}static get dependencies(){return[m]}init(){this._tag({name:r.DFN,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new St(this.editor,this.constructor.name)),this._command(r.DFN),this._formatbar("Definition",d.D)}};var vt=class extends n{static get name(){return"deletion"}static get dependencies(){return[m]}init(){this._tag({name:r.DEL,group:o.FORMAT}),this._command(r.DEL),this._formatbar("Text Deletion",d.G)}};var Dt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Details")).addTextInput("name",this._("Name"),{placeholder:this._("Insert name or leave empty to remove it")})}};var Ft=class extends w{filter(t){t.querySelectorAll(`${r.SUMMARY}:not(:first-child)`).forEach(e=>e.parentElement.removeChild(e)),t.querySelectorAll(`${r.SUMMARY}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Ht=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertdetails",this),this.editor.root.addEventListener("insertsummary",this)}insertdetails({detail:{element:t}}){t.open=!0,t.querySelector(`:scope > ${r.SUMMARY}:first-child`)||this.editor.dom.insertFirstChild(this.editor.dom.createElement(r.SUMMARY),t)}insertsummary({detail:{element:t}}){this.#t(t),t.addEventListener("click",this),t.addEventListener("blur",this),t.addEventListener("keydown",this)}click(t){t.preventDefault(),t.stopPropagation(),t.target.parentElement.open=!0}blur({target:t}){this.#t(t)}keydown(t){L(t,d.SPACE)?(t.preventDefault(),t.stopPropagation(),this.editor.dom.insertText(" ")):L(t,d.ENTER)&&(t.preventDefault(),t.stopPropagation(),t.target.parentElement.open=!0)}#t(t){t.textContent.trim()?t.querySelectorAll(r.BR+":not(:last-child)").forEach(e=>e.parentElement.removeChild(e)):t.textContent=this._("Details"),t.lastElementChild instanceof HTMLBRElement||this.editor.dom.insertLastChild(this.editor.dom.createElement(r.BR),t)}};var Pt=class extends n{static get name(){return"details"}static get dependencies(){return[m]}init(){this._tag({name:r.DETAILS,group:o.CONTAINER,children:[o.AUDIO,o.FIGURE,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.SUMMARY,o.TABLE,o.VIDEO],attributes:["name"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this._tag({name:r.SUMMARY,group:o.SUMMARY,editable:!0,navigable:!0,enter:r.P}),new Ht(this.editor),this.editor.dialogs.set(new Dt(this.editor,this.constructor.name)),this._command(r.DETAILS),this._toolbar("Details"),this.editor.filters.add(new Ft(this.editor))}};var Ut=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Division")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var Gt=class extends n{static get name(){return"division"}static get dependencies(){return[m]}init(){this._tag({name:r.DIV,group:o.CONTAINER,children:[o.AUDIO,o.BLOCK,o.FIGURE,o.IFRAME,o.IMAGE,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO],attributes:["class"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this.editor.dialogs.set(new Ut(this.editor,this.constructor.name)),this._command(r.DIV),this._toolbar("Division")}};var kt=class extends n{static get name(){return"emphasis"}static get dependencies(){return[m]}init(){this._tag({name:r.EM,group:o.FORMAT}),this._command(r.EM),this._formatbar("emphasized",d.E)}};var Kt=class extends n{static get name(){return"heading"}static get dependencies(){return[m]}init(){this._tag({name:r.H2,group:o.HEADING,deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),this._command(r.H2),this._toolbar("Heading")}};var zt=class extends n{static get name(){return"horizontalrule"}static get dependencies(){return[m]}init(){this._tag({name:r.HR,group:o.RULE,deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.HR),this._toolbar("Horizontal Rule")}};var je={"CSS class":"CSS-Klasse",Height:"H\xF6he",ID:"ID","Insert CSS class":"CSS-Klasse eingeben",URL:"URL",Width:"Breite",Abbreviation:"Abk\xFCrzung","Full term":"Langform","Insert full term or leave empty to remove it":"Langform eingeben oder zum Entfernen leer lassen",Audio:"Audio","Insert URL to audio":"URL zur Audiodatei eingeben","Align center":"zentriert","Align left":"linksb\xFCndig","Align right":"rechtsb\xFCndig",Alt:"Alt",Cancel:"Abbrechen",Delete:"L\xF6schen","No alignment":"Keine Ausrichtung",Save:"Speichern",Shift:"Umschalt","Sort after next element":"Hinter das n\xE4chste Element sortieren","Sort before previous element":"Vor das vorherige Element sortieren","Sort to the beginning":"An den Anfang sortieren","Sort to the end":"Ans Ende sortieren",Block:"Block",Blockquote:"Blockzitat",bold:"fett",Citation:"Zitatquelle",Code:"Quelltext",Data:"Data","Machine-readable Value":"Maschinenlesbarer Wert","Insert value or leave empty to remove it":"Wert eingeben oder zum Entfernen leer lassen",Definition:"Definition","Insert term or leave empty to remove it":"Begriff eingeben oder zum Entfernen leer lassen",Term:"Begriff","Text Deletion":"Textl\xF6schung",Details:"Details","Insert name or leave empty to remove it":"Name eingeben oder zum Entfernen leer lassen",Name:"Name",Division:"Division",emphasized:"betont",Heading:"\xDCberschrift","Horizontal Rule":"Horizontale Linie",Ifrane:"Iframe","Insert URL to embedded page":"URL zur eingebetteten Seite eingeben","Alternative text":"Alternativtext",Image:"Bild","Insert URL to image":"URL zur Bilddatei eingeben","Text shown when media element is not available":"Ersatztext, falls Medienelement nicht verf\xFCgbar ist","Text Insertion":"Texteinf\xFCgung",italic:"kursiv","User Input":"Benutzereingabe","Insert link or leave empty to unlink":"Link eingeben oder zum Entfernen leer lassen",Link:"Link",mark:"markiert","Ordered List":"Geordnete Liste",Paragraph:"Absatz","Preformatted Text":"Vorformatierter Text",Quote:"Zitat","Sample Output":"Beispielausgabe",Section:"Sektion",small:"klein",strikethrough:"durchgestrichen","strongly emphasized":"stark betont",Subheading:"Unter\xFCberschrift",subscript:"tiefgestellt",superscript:"hochgestellt","Add column":"Spalte hinzuf\xFCgen","Add row":"Zeile hinzuf\xFCgen",Columns:"Spalten",Rows:"Zeilen",Table:"Tabelle","Insert date/time or leave empty to remove it":"Datum/Zeit eingeben oder zum Entfernen leer lassen","Machine-readable Datetime":"Maschinenlesbare Datums-/Zeitangabe",Time:"Zeit",underline:"unterstrichen","Unordered List":"Ungeordnete Liste",Variable:"Variable","Insert URL to video":"URL zur Videodatei eingeben",Video:"Video"};var Wt=class extends n{static get name(){return"i18n"}static get dependencies(){return[m]}init(){this._i18n({de:je})}};var jt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Iframe")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to embedded page"),required:"required"}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var qt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertiframe",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.IFRAME)).forEach(e=>this.#t(e))}insertiframe({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.allowFullscreen=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:G.name}})):t.parentElement.removeChild(t)}};var G=class extends n{static get name(){return"iframe"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.IFRAME,group:o.IFRAME,attributes:["allowfullscreen","height","id","src","width"],empty:!0,navigable:!0}),new qt(this.editor),this.editor.dialogs.set(new jt(this.editor,this.constructor.name,this.editor.config.iframe.browser)),this._command(r.IFRAME),this._toolbar("Iframe")}};var Vt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Image")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to image"),required:"required"}).addTextInput("alt",this._("Alternative text"),{placeholder:this._("Text shown when media element is not available")}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var $t=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertimg",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.IMG)).forEach(e=>this.#t(e))}insertimg({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:k.name}})):t.parentElement.removeChild(t)}};var k=class extends n{static get name(){return"image"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.IMG,group:o.IMAGE,attributes:["alt","height","id","src","width"],empty:!0,navigable:!0}),new $t(this.editor),this.editor.dialogs.set(new Vt(this.editor,this.constructor.name,this.editor.config.image.browser)),this._command(r.IMG),this._toolbar("Image")}};var Qt=class extends n{static get name(){return"insertion"}static get dependencies(){return[m]}init(){this._tag({name:r.INS,group:o.FORMAT}),this._command(r.INS),this._formatbar("Text Insertion",d.F)}};var Yt=class extends n{static get name(){return"italic"}static get dependencies(){return[m]}init(){this._tag({name:r.I,group:o.FORMAT}),this._command(r.I),this._formatbar("italic",d.I)}};var Zt=class extends n{static get name(){return"keyboard"}static get dependencies(){return[m]}init(){this._tag({name:r.KBD,group:o.FORMAT}),this._command(r.KBD),this._formatbar("User Input",d.K)}};var Xt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Link")).addTextInput("href",this._("URL"),{pattern:"(https?|/|mailto:|tel:).+",placeholder:this._("Insert link or leave empty to unlink")})}};var Jt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("inserta",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.A)).forEach(e=>this.#t(e))}inserta({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("href");e?t.setAttribute("href",this.editor.url(e)):t.parentElement.replaceChild(this.editor.dom.createText(t.textContent),t)}};var te=class extends n{static get name(){return"link"}static get dependencies(){return[m]}init(){this._tag({name:r.A,group:o.FORMAT,attributes:["href"]}),new Jt(this.editor),this.editor.dialogs.set(new Xt(this.editor,this.constructor.name)),this._command(r.A),this._formatbar("Link",d.L)}};var ee=class extends n{static get name(){return"mark"}static get dependencies(){return[m]}init(){this._tag({name:r.MARK,group:o.FORMAT}),this._command(r.MARK),this._formatbar("mark",d.M)}};var re=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertli",this),this.editor.root.addEventListener("deleteli",this),this.editor.root.addEventListener("insertol",this),this.editor.root.addEventListener("insertul",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.LI)).forEach(e=>this.#t(e))}insertli({detail:{element:t}}){this.#t(t)}deleteli({detail:{target:t}}){t.children.length===0&&t.parentElement.removeChild(t)}insertol({detail:{element:t}}){this.#e(t)}insertul({detail:{element:t}}){this.#e(t)}#t(t){!(t.parentElement instanceof HTMLOListElement)&&!(t.parentElement instanceof HTMLUListElement)&&this.editor.dom.wrap(t,r.UL)}#e(t){t.children.length===0&&this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LI),t)}};var K=class extends n{static get name(){return"list"}static get dependencies(){return[m,y]}init(){this._tag({name:r.LI,group:o.LISTITEM,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.LI}),new re(this.editor)}};var ie=class extends n{static get name(){return"orderedlist"}static get dependencies(){return[m,K]}init(){this._tag({name:r.OL,group:o.LIST,children:[o.LISTITEM],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.OL),this._toolbar("Ordered List")}};var oe=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertp",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.P)).forEach(e=>e.addEventListener("paste",this))}insertp({detail:{element:t}}){t.addEventListener("paste",this)}paste({target:t}){this.editor.dom.window.setTimeout(()=>this.editor.filters.filter(t))}};var se=class extends n{static get name(){return"paragraph"}static get dependencies(){return[m,y]}init(){this._tag({name:r.P,group:o.PARAGRAPH,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),new oe(this.editor),this._command(r.P),this._toolbar("Paragraph")}};var ae=class extends w{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(M.name)&&t.querySelector(":scope > "+r.PRE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.PRE),t),t.parentElement.removeChild(t))}};var ne=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertpre",this),this.editor.root.addEventListener("deletepre",this)}insertpre({detail:{element:t}}){this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:M.name}})}deletepre({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(M.name)&&t.parentElement.removeChild(t)}};var M=class extends n{static get name(){return"preformat"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.PRE,group:o.PREFORMAT,children:[o.BREAK],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new ne(this.editor),this._command(r.PRE),this._toolbar("Preformatted Text"),this.editor.filters.add(new ae(this.editor))}};var de=class extends n{static get name(){return"quote"}static get dependencies(){return[m]}init(){this._tag({name:r.Q,group:o.FORMAT}),this._command(r.Q),this._formatbar("Quote",d.Q)}};var me=class extends n{static get name(){return"sample"}static get dependencies(){return[m]}init(){this._tag({name:r.SAMP,group:o.FORMAT}),this._command(r.SAMP),this._formatbar("Sample Output",d.O)}};var le=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Section")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var ce=class extends n{static get name(){return"section"}static get dependencies(){return[m]}init(){this._tag({name:r.SECTION,group:o.CONTAINER,children:[o.AUDIO,o.FIGURE,o.HEADING,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO],attributes:["class"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this.editor.dialogs.set(new le(this.editor,this.constructor.name)),this._command(r.SECTION),this._toolbar("Section")}};var he=class extends n{static get name(){return"small"}static get dependencies(){return[m]}init(){this._tag({name:r.SMALL,group:o.FORMAT}),this._command(r.SMALL),this._formatbar("small",d.W)}};var fe=class extends n{static get name(){return"strikethrough"}static get dependencies(){return[m]}init(){this._tag({name:r.S,group:o.FORMAT}),this._command(r.S),this._formatbar("strikethrough",d.R)}};var ue=class extends n{static get name(){return"strong"}static get dependencies(){return[m]}init(){this._tag({name:r.STRONG,group:o.FORMAT}),this._command(r.STRONG),this._formatbar("strongly emphasized",d.S)}};var pe=class extends n{static get name(){return"subheading"}static get dependencies(){return[m]}init(){this._tag({name:r.H3,group:o.HEADING,deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),this._command(r.H3),this._toolbar("Subheading")}};var ge=class extends n{static get name(){return"subscript"}static get dependencies(){return[m]}init(){this._tag({name:r.SUB,group:o.FORMAT}),this._command(r.SUB),this._formatbar("subscript",d.X)}};var Ee=class extends n{static get name(){return"superscript"}static get dependencies(){return[m]}init(){this._tag({name:r.SUP,group:o.FORMAT}),this._command(r.SUP),this._formatbar("superscript",d.Y)}};var be=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttd",this),this.editor.root.addEventListener("insertth",this)}inserttd({detail:{element:t}}){t.addEventListener("keydown",this)}insertth({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){let e=t.target,i=e.parentElement,a=e.closest(r.TABLE);if(e instanceof HTMLTableCellElement&&i instanceof HTMLTableRowElement&&a instanceof HTMLTableElement&&Ue(t)&&this.#t(e,t.key)){let l=e.cellIndex,c=i.cells.length,f=l===0,p=l===c-1,g=i.rowIndex===0,I=i.rowIndex===a.rows.length-1;t.preventDefault(),t.stopPropagation(),t.key===d.ARROWLEFT&&!f?this.editor.dom.focusEnd(i.cells[l-1]):t.key===d.ARROWLEFT&&g?this.editor.dom.focusEnd(a.rows[a.rows.length-1].cells[c-1]):t.key===d.ARROWLEFT?this.editor.dom.focusEnd(a.rows[i.rowIndex-1].cells[c-1]):t.key===d.ARROWRIGHT&&!p?i.cells[l+1].focus():t.key===d.ARROWRIGHT&&I?a.rows[0].cells[0].focus():t.key===d.ARROWRIGHT?a.rows[i.rowIndex+1].cells[0].focus():t.key===d.ARROWUP&&g?a.rows[a.rows.length-1].cells[l].focus():t.key===d.ARROWUP?a.rows[i.rowIndex-1].cells[l].focus():t.key===d.ARROWDOWN&&I?a.rows[0].cells[l].focus():t.key===d.ARROWDOWN&&a.rows[i.rowIndex+1].cells[l].focus()}}#t(t,e){if([d.ARROWUP,d.ARROWDOWN].includes(e))return!0;let i=this.editor.dom.getSelection(),a=i.anchorNode instanceof HTMLElement?i.anchorNode:t;if(!i.isCollapsed)return!1;if(e===d.ARROWLEFT){let c=t.firstChild;return c instanceof HTMLElement&&(c=c.firstChild),i.anchorOffset===0&&[t,c].includes(a)}let l=t.lastChild;return t.lastChild instanceof HTMLBRElement&&t.lastChild.previousSibling&&(l=t.lastChild.previousSibling),l instanceof HTMLElement&&(l=l.lastChild),i.anchorOffset===a.textContent.length&&[t,l].includes(a)}};var Te=class extends A{constructor(t){super(t,"tablecolumn-add")}execute(){let t=this.editor.dom.getActiveElement();t?.localName===r.COL&&this.editor.dom.createTableColumnAfter(t)}};var Le=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertcol",this)}insertcol({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){L(t,d.ENTER)?this.editor.dom.createTableColumnAfter(t.target):L(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")&&this.editor.dom.delete(t.target)}};var Ae=class extends A{constructor(t){super(t,N.name,r.TABLE)}_insert({rows:t,cols:e}={}){this.editor.dom.insert(this.editor.dom.createTable(parseInt(t,10)||1,parseInt(e,10)||1))}};var xe=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Table")).addNumberInput("rows",this._("Rows"),{min:"1",required:"required",value:"1"}).addNumberInput("cols",this._("Columns"),{min:"1",required:"required",value:"1"})}};var we=class extends w{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(N.name)&&t.querySelector(":scope > "+r.TABLE)&&!t.querySelector(":scope > "+r.FIGCAPTION)?(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.TABLE),t),t.parentElement.removeChild(t)):(t instanceof HTMLTableElement&&t.querySelector(`:scope > ${r.THEAD}, :scope > ${r.TFOOT}`)&&!t.querySelector(":scope > "+r.TBODY)||t instanceof HTMLTableSectionElement&&t.rows.length<=0||t instanceof HTMLTableRowElement&&!t.querySelector(`:scope > ${r.TH}:not(:empty), :scope > ${r.TD}:not(:empty)`))&&t.parentElement.removeChild(t)}};var Re=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttable",this)}inserttable({detail:{element:t}}){if(this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:N.name}}),t.tBodies.length>0&&t.tBodies[0].rows[0]){let e=t.tBodies[0],i=e.rows[0].cells.length;t.querySelector(":scope > "+r.COLGROUP)||this.editor.dom.insertFirstChild(this.editor.dom.createTableColumnGroup(i),t),t.tHead||this.editor.dom.insertBefore(this.editor.dom.createTableHeader(1,i),e),t.tFoot||this.editor.dom.insertLastChild(this.editor.dom.createTableFooter(1,i),t)}}};var Oe=class extends A{constructor(t){super(t,"tablerow-add")}execute(){let t=this.editor.dom.getActiveElement();t instanceof HTMLTableRowElement&&this.editor.dom.createTableRowAfter(t)}};var ye=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttr",this)}inserttr({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){L(t,d.ENTER)?this.editor.dom.createTableRowAfter(t.target):L(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")&&this.editor.dom.delete(t.target)}};var N=class extends n{static get name(){return"table"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.TABLE,group:o.TABLE,children:[o.TABLESECTION],deletable:!0,navigable:!0}),this._tag({name:r.COLGROUP,group:o.COLGROUP,children:[o.COL]}),this._tag({name:r.COL,group:o.COL,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag(this.#t(r.THEAD)),this._tag(this.#t(r.TBODY)),this._tag(this.#t(r.TFOOT)),this._tag({name:r.TR,group:o.TABLEROW,children:[o.TABLECELL],deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag(this.#e(r.TH)),this._tag(this.#e(r.TD)),new Re(this.editor),new Le(this.editor),new ye(this.editor),new be(this.editor),this.editor.filters.add(new we(this.editor)),this.editor.dialogs.set(new xe(this.editor,this.constructor.name)),this.editor.commands.set(new Ae(this.editor)),this.editor.commands.set(new Te(this.editor)),this.editor.commands.set(new Oe(this.editor)),this._toolbar("Table"),this._focusbar("Add column","tablecolumn-add"),this._focusbar("Add row","tablerow-add")}#t(t){return{name:t,group:o.TABLESECTION,children:[o.TABLEROW]}}#e(t){return{name:t,group:o.TABLECELL,children:[o.BREAK,o.FORMAT],editable:!0,empty:!0}}};var Ie=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("datetime",this._("Machine-readable Datetime"),{placeholder:this._("Insert date/time or leave empty to remove it")})}};var Ce=class extends n{static get name(){return"time"}static get dependencies(){return[m]}init(){this._tag({name:r.TIME,group:o.FORMAT,attributes:["datetime"]}),this.editor.dialogs.set(new Ie(this.editor,this.constructor.name)),this._command(r.TIME),this._formatbar("Time",d.T)}};var Ne=class extends n{static get name(){return"underline"}static get dependencies(){return[m]}init(){this._tag({name:r.U,group:o.FORMAT}),this._command(r.U),this._formatbar("underline",d.U)}};var _e=class extends n{static get name(){return"unorderedlist"}static get dependencies(){return[m,K]}init(){this._tag({name:r.UL,group:o.LIST,children:[o.LISTITEM],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.UL),this._toolbar("Unordered List")}};var Me=class extends n{static get name(){return"variable"}static get dependencies(){return[m]}init(){this._tag({name:r.VAR,group:o.FORMAT}),this._command(r.VAR),this._formatbar("Variable",d.V)}};var Se=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Video")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to video"),required:"required"}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var Be=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertvideo",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.VIDEO)).forEach(e=>this.#t(e))}insertvideo({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.controls=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:z.name}})):t.parentElement.removeChild(t)}};var z=class extends n{static get name(){return"video"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.VIDEO,group:o.VIDEO,attributes:["controls","height","id","src","width"],empty:!0,navigable:!0}),new Be(this.editor),this.editor.dialogs.set(new Se(this.editor,this.constructor.name,this.editor.config.video.browser)),this._command(r.VIDEO),this._toolbar("Video")}};var Pe=class extends x{static get defaultConfig(){return{base:{plugins:[Wt,It,Yt,ue,kt,Ne,fe,te,ee,he,Bt,P,de,Ct,Nt,Zt,me,Me,ge,Ee,Ce,Mt,Qt,vt,se,Kt,pe,_e,ie,zt,_,k,z,U,G,N,M,ce,Pt,Gt,wt]}}}};export{Pe as default};
1
+ var o=Object.freeze({AUDIO:"audio",BLOCK:"block",BREAK:"break",CAPTION:"caption",COL:"col",COLGROUP:"colgroup",CONTAINER:"container",FIGURE:"figure",FORMAT:"format",HEADING:"heading",IFRAME:"iframe",IMAGE:"image",LIST:"list",LISTITEM:"listitem",PARAGRAPH:"paragraph",PREFORMAT:"preformat",QUOTE:"quote",ROOT:"root",RULE:"rule",SLOT:"slot",SUMMARY:"summary",TABLE:"table",TABLECELL:"tablecell",TABLEROW:"tablerow",TABLESECTION:"tablesection",VIDEO:"video"});function F(s){return typeof s<"u"}function j(s){return typeof s=="function"}function E(s){return s&&typeof s=="string"}function D(s){return!F(s)||E(s)}function ve(s){return!F(s)||Array.isArray(s)&&s.length>0}function Fe(s){return!F(s)||s instanceof HTMLElement}var L=class{#t;get editor(){return this.#t}#e;get name(){return this.#e}#r;get tag(){return this.#r}#o;get dialog(){return this.#o}constructor(t,e,i=void 0){if(!(t instanceof x)||!E(e)||!D(i))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=i&&this.editor.tags.get(i),this.#o=this.editor.dialogs.get(e)}execute(){this.dialog?this._openDialog():this._insert(this.#s())}_insert(t={}){if(!this.tag)return;this.#i(t);let e=this.editor.dom.getSelectedElementByName(this.tag.name);this.tag.group!==o.FORMAT?this.editor.dom.insert(this.editor.dom.createElement(this.tag.name,{attributes:t})):e&&Object.keys(t).length>0?e.parentElement.replaceChild(this.editor.dom.createElement(this.tag.name,{attributes:t,html:e.textContent}),e):e?e.parentElement.replaceChild(this.editor.dom.createText(e.textContent),e):this.editor.dom.format(this.editor.dom.createElement(this.tag.name,{attributes:t}))}_openDialog(){this.dialog?.open(t=>this._insert(t),this.#s())}#s(){if(!this.tag)return{};let t=this.editor.dom.getSelectedAttributesByName(this.tag.name);return this.#i(t),t}#i(t){Object.keys(t).forEach(e=>this.tag.attributes.includes(e)&&t[e]||delete t[e])}};var q=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof L))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}findByTagName(t){return Array.from(this.#t.values()).find(e=>e.tag?.name===t)}execute(t){this.get(t).execute()}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var V=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof u))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var r=Object.freeze({A:"a",ABBR:"abbr",ALL:"*",AUDIO:"audio",B:"b",BLOCK:"app-block",BLOCKQUOTE:"blockquote",BR:"br",BUTTON:"button",CITE:"cite",CODE:"code",COL:"col",COLGROUP:"colgroup",DATA:"data",DEL:"del",DETAILS:"details",DFN:"dfn",DIALOG:"dialog",DIV:"div",EDITOR:"akilli-editor",EM:"em",FIELDSET:"fieldset",FIGCAPTION:"figcaption",FIGURE:"figure",FOCUSBAR:"editor-focusbar",FORM:"form",FORMATBAR:"editor-formatbar",H2:"h2",H3:"h3",HR:"hr",I:"i",IFRAME:"iframe",IMG:"img",INPUT:"input",INS:"ins",KBD:"kbd",LABEL:"label",LEGEND:"legend",LI:"li",MARK:"mark",OL:"ol",P:"p",PRE:"pre",Q:"q",ROOT:"editor-root",S:"s",SAMP:"samp",SECTION:"section",SLOT:"slot",SMALL:"small",STRONG:"strong",SUB:"sub",SUMMARY:"summary",SUP:"sup",TABLE:"table",TBODY:"tbody",TD:"td",TFOOT:"tfoot",TH:"th",THEAD:"thead",TIME:"time",TOOLBAR:"editor-toolbar",TR:"tr",U:"u",UL:"ul",VAR:"var",VIDEO:"video"});var v=class{#t;constructor(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");this.#t=t,this.register(this.#r.bind(this))}dispatch(t,e=void 0,i=void 0){if(!E(t)||!Fe(e)||!Fe(i))throw new TypeError("Invalid argument");this.#t.dispatchEvent(new CustomEvent(t,{detail:{element:e,target:i}}))}register(t,e={childList:!0,subtree:!0}){if(!j(t))throw new TypeError("Invalid argument");new MutationObserver(t).observe(this.#t,e)}#e(t,e,i){e instanceof HTMLElement&&i instanceof HTMLElement&&(this.dispatch(t,e,i),this.dispatch(`${t}${e.localName.replace("-","")}`,e,i))}#r(t){t.forEach(e=>{e.addedNodes.forEach(i=>{i instanceof HTMLElement&&(this.#e("insert",i,e.target),Array.from(i.getElementsByTagName(r.ALL)).forEach(a=>this.#e("insert",a,e.target)))}),e.removedNodes.forEach(i=>i instanceof HTMLElement&&this.#e("delete",i,e.target))})}};var T=Object.freeze({FIRST:"first",PREV:"prev",NEXT:"next",LAST:"last"});var $=class{#t;get editor(){return this.#t}#e;get document(){return this.#e}#r;get window(){return this.#r}#o;get root(){return this.#o}#s={alwaysRaised:"yes",dependent:"yes",height:"",location:"no",menubar:"no",minimizable:"no",modal:"yes",resizable:"yes",scrollbars:"yes",toolbar:"no",width:""};constructor(t,e){if(!(t instanceof x)||!(e instanceof Document))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=this.document.defaultView,this.#o=this.document.documentElement}registerElement(t,e,i=void 0){F(this.window.customElements.get(t))||this.window.customElements.define(t,e,i?{extends:i}:void 0)}createElement(t,{attributes:e={},html:i=""}={}){let a=this.document.createElement(t);return a.innerHTML=i,Object.entries(e).forEach(([l,c])=>c&&a.setAttribute(l,`${c}`)),a}createFragment(){return this.document.createDocumentFragment()}insert(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.getSelectedEditable();if(e instanceof HTMLSlotElement&&this.editor.tags.allowed(e.parentElement,t))this.insertBefore(t,e);else if(e){let i=this.closest(e,t);i&&this.insertAfter(t,i),e.hasAttribute("data-deletable")&&!e.textContent.trim()&&e.parentElement.removeChild(e)}else if(this.editor.tags.allowed(this.editor.root,t))this.insertLastChild(t,this.editor.root);else throw new TypeError("Invalid argument")}insertText(t){let e=this.getSelectedEditable(),i=this.getRange();!e||!i||!t||(i.deleteContents(),i.insertNode(this.createText(t)),i.collapse(),e.normalize())}insertHtml(t){let e=this.getSelectedEditable(),i=this.getRange();if(!e||!i||!t)return;let a=this.createElement(e.localName,{html:t});this.editor.filters.filter(a);let l=this.createFragment();for(;a.firstChild;)l.appendChild(a.firstChild);i.deleteContents(),i.insertNode(l);let c=l.lastChild;c&&(i.setStartAfter(c),i.setEndAfter(c),this.setRange(i)),e.normalize()}format(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.getRange(),i=this.getSelectedEditable();if(!e||e.collapsed||!e.toString().trim()||!i||!this.editor.tags.allowed(i,t))return;e.startContainer instanceof Text&&e.startContainer.parentElement!==i&&e.setStartBefore(e.startContainer.parentElement),e.endContainer instanceof Text&&e.endContainer.parentElement!==i&&e.setEndAfter(e.endContainer.parentElement);let a=e.toString(),l=Array.from(e.cloneContents().childNodes).every(c=>c instanceof Text&&!c.textContent.trim()||c instanceof HTMLElement&&c.localName===t.localName);e.deleteContents(),l?e.insertNode(this.createText(a)):(t.textContent=a,e.insertNode(t)),i.normalize()}createText(t){return this.document.createTextNode(t)}createTable(t=1,e=1){let i=this.createElement(r.TABLE);return this.insertLastChild(this.createTableHeader(1,e),i),this.insertLastChild(this.createTableBody(t,e),i),this.insertLastChild(this.createTableFooter(1,e),i),i}createTableColumnGroup(t=1){let e=this.createElement(r.COLGROUP);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.COL),e);return e}createTableHeader(t=1,e=1){return this.#i(r.THEAD,t,e)}createTableBody(t=1,e=1){return this.#i(r.TBODY,t,e)}createTableFooter(t=1,e=1){return this.#i(r.TFOOT,t,e)}createTableHeaderRow(t){let e=this.createElement(r.TR);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.TH),e);return e}createTableRow(t){let e=this.createElement(r.TR);for(let i=0;i<t;i++)this.insertLastChild(this.createElement(r.TD),e);return e}createTableRowAfter(t){if(!(t instanceof HTMLTableRowElement))throw new TypeError("Invalid argument");this.insertAfter(this.createTableRow(t.cells.length),t)}createTableColumnAfter(t){if(!(t instanceof HTMLTableColElement)||t.localName!==r.COL)throw new TypeError("Invalid argument");let e=t.parentElement,i=e.parentElement,a=Array.from(e.children).indexOf(t);Array.from(i.rows).forEach(l=>this.insertAfter(this.createElement(l.cells[a].localName),l.cells[a])),this.insertAfter(this.createElement(r.COL),t)}sort(t,e){if(!(t instanceof HTMLElement)||!Object.values(T).includes(e))throw new TypeError("Invalid argument");if(t.parentElement.children.length<=1)return;let i=t.parentElement,a=i.parentElement,l=t.previousElementSibling,c=t.nextElementSibling,f=i.firstElementChild,p=i.lastElementChild,g=t===f,I=t===p,B=t.localName===r.COL,W=Array.from(i.children).indexOf(t);e===T.PREV&&!g&&l.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertBefore(C.cells[W],C.cells[W-1])),this.insertBefore(t,l)):e===T.NEXT&&!I&&c.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertAfter(C.cells[W],C.cells[W+1])),this.insertAfter(t,c)):(e===T.FIRST&&!g||e===T.NEXT&&I)&&f.hasAttribute("data-sortable")?(B&&Array.from(a.rows).forEach(C=>this.insertFirstChild(C.cells[W],C)),this.insertBefore(t,f)):(e===T.LAST&&!I||e===T.PREV&&g)&&p.hasAttribute("data-sortable")&&(B&&Array.from(a.rows).forEach(C=>this.insertLastChild(C.cells[W],C)),this.insertAfter(t,p))}insertBefore(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("beforebegin",t)}insertAfter(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("afterend",t)}insertFirstChild(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("afterbegin",t)}insertLastChild(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");e.insertAdjacentElement("beforeend",t)}delete(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");if([r.COL,r.TR].includes(t.localName)&&t.matches(":only-child"))return;if(t.localName===r.COL){let a=Array.from(t.parentElement.children).indexOf(t),l=t.parentElement.parentElement;Array.from(l.rows).forEach(c=>c.removeChild(c.cells[a]))}let e=t.previousElementSibling,i=t.nextElementSibling;t===this.getActiveElement()&&t.blur(),t.parentElement.removeChild(t),e instanceof HTMLElement&&e.hasAttribute("data-focusable")?this.focusEnd(e):i instanceof HTMLElement&&i.hasAttribute("data-focusable")&&i.focus()}arbitrary(t){return t===this.editor.root||t?.hasAttribute("data-arbitrary")}contains(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");if(this.editor.root.contains(t))return!0;let e=t.closest(r.ROOT);return e&&!e.parentElement}closest(t,e){if(!(t instanceof HTMLElement)||!this.contains(t.parentElement))throw new TypeError("Invalid argument");let i=t,a=t.parentElement;do if(this.arbitrary(a)&&this.editor.tags.allowed(a,e))return i;while((i=a)&&(a=a.parentElement)&&this.contains(a))}wrap(t,e,i={}){let a;if(t instanceof HTMLElement){if(t.parentElement.localName!==e&&(a=this.closest(t,e))){let l=this.createElement(e,i);this.insertAfter(l,a),this.insertLastChild(t,l)}}else throw new TypeError("Invalid argument")}getActiveElement(){let t=this.document.activeElement;return t&&this.contains(t)?t:void 0}getSelectedElement(){let t=this.getSelection(),e=t.anchorNode instanceof Text?t.anchorNode.parentElement:t.anchorNode,i=t.focusNode instanceof Text?t.focusNode.parentElement:t.focusNode;if(e instanceof HTMLElement&&i instanceof HTMLElement&&e===i&&this.contains(e))return e}getSelectedElementByName(t){let e=this.getSelectedElement();return e?.localName===t?e:void 0}getSelectedAttributesByName(t){let e=this.getSelectedElementByName(t),i={};return e&&Array.from(e.attributes).forEach(a=>i[a.nodeName]=a.nodeValue),i}getSelectedEditable(){let t=this.getSelection(),e=t.anchorNode instanceof Text?t.anchorNode.parentElement:t.anchorNode,i=t.focusNode instanceof Text?t.focusNode.parentElement:t.focusNode;if(e instanceof HTMLElement&&i instanceof HTMLElement){let a=e.closest("[contenteditable=true]"),l=i.closest("[contenteditable=true]");if(a instanceof HTMLElement&&a===l&&this.contains(a))return a}}getSelection(){return this.window.getSelection()}getRange(){let t=this.getSelection();return t.rangeCount>0?t.getRangeAt(0):void 0}setRange(t){let e=this.getSelection();e.removeAllRanges(),e.addRange(t)}selectContents(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");let e=this.document.createRange();e.selectNodeContents(t),this.setRange(e)}focusEnd(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");t.focus();let e=this.document.createRange();e.selectNodeContents(t),e.collapse(),this.setRange(e)}removeClass(t,...e){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");t.classList.remove(...e),t.classList.length>0||t.removeAttribute("class")}open({url:t,name:e,call:i,params:a={}}){if(!E(t)||!E(e)||!j(i))throw new TypeError("Invalid argument");let l=this.createElement(r.A,{attributes:{href:t}}),c=new URL(l.href);Object.entries(a).forEach(([p,g])=>c.searchParams.set(p,`${g}`));let f=this.window.open(c.toString(),e,this.#a());this.window.addEventListener("message",p=>{p.origin===c.origin&&p.source===f&&(i(p.data),f.close())},!1)}getWidth(){return this.window.screen.width}getHeight(){return this.window.screen.height}#i(t,e,i){let a=this.createElement(t);for(let l=0;l<e;l++)this.insertLastChild(t===r.THEAD?this.createTableHeaderRow(i):this.createTableRow(i),a);return a}#a(){let t=Object.assign({},this.#s,{height:`${this.getHeight()}`,width:`${this.getWidth()}`},this.editor.config.base.browser);return Object.entries(t).filter(([,e])=>!!e).map(([e,i])=>`${e}=${i}`).join(",")}};var R=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}filter(t){throw new Error("Not implemented")}};var Q=class{#t=new Set;add(t){if(!(t instanceof R))throw new TypeError("Invalid argument");this.#t.add(t)}filter(t){if(!(t instanceof HTMLElement))throw new TypeError("Invalid argument");this.#t.forEach(e=>{t.normalize(),e.filter(t)})}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var H=class{name;group;children;attributes;alignable;arbitrary;deletable;editable;empty;focusable;navigable;slotable;sortable;enter;constructor({name:t,group:e,...i}={}){if(!E(t)||!E(e)||!ve(i.children)||!ve(i.attributes)||!D(i.enter))throw new TypeError("Invalid argument");this.name=t,this.group=e,this.children=i.children||[],this.attributes=i.attributes||[],this.arbitrary=i.arbitrary===!0,this.alignable=i.alignable===!0,this.deletable=i.deletable===!0,this.editable=i.editable===!0,this.empty=i.empty===!0,this.focusable=i.focusable===!0,this.navigable=i.navigable===!0,this.slotable=i.slotable===!0,this.sortable=i.sortable===!0,this.enter=i.enter}};var n=class{#t;get editor(){return this.#t}static get name(){throw new Error("Missing name")}static get dependencies(){return[]}static get config(){return{}}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}init(){throw new Error("Not implemented")}_(t){return this.editor.translate(t)}_i18n(t){t[this.editor.config.base.lang]&&(this.editor.i18n=t[this.editor.config.base.lang])}_tag(t){this.editor.tags.set(new H(t))}_command(t){this.editor.commands.set(new L(this.editor,this.constructor.name,t))}_toolbar(t,e=void 0){let i=this._(t);this.editor.dom.insertLastChild(this.#e(i,i,void 0,e),this.editor.toolbar)}_formatbar(t,e=void 0,i=void 0){let a=this._(t),l=this._("Alt"),c=this._("Shift"),f=a+(e?` [${l} + ${c} + ${e}]`:"");this.editor.dom.insertLastChild(this.#e(a,f,e,i),this.editor.formatbar)}_focusbar(t,e=void 0){let i=this._(t);this.editor.dom.insertLastChild(this.#e(i,i,void 0,e),this.editor.focusbar)}#e(t,e,i=void 0,a=void 0){if(!E(t)||!E(e)||!D(i))throw new TypeError("Invalid argument");return this.editor.dom.createElement(r.BUTTON,{attributes:{type:"button",title:e,"data-command":a||this.constructor.name,"data-key":i},html:t})}};var Y=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof n))throw new TypeError("Invalid argument");this.#t.set(t.constructor.name,t)}init(){this.#t.forEach(t=>t.init())}freeze(){this.#t.forEach(t=>Object.freeze(t)),Object.freeze(this.#t),Object.freeze(this)}};var Z=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t instanceof HTMLElement?t.localName:t)}set(t){if(!(t instanceof H))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}allowed(t,e,i=!1){let a=i?e:this.get(e)?.group;return!!this.get(t)?.children.includes(a)}freeze(){this.#t.forEach(t=>{Object.freeze(t.children),Object.freeze(t.attributes),Object.freeze(t)}),Object.freeze(this.#t),Object.freeze(this)}};var x=class{#t;get orig(){return this.#t}#e={};get config(){return this.#e}#r;get dom(){return this.#r}#o;get element(){return this.#o}#s;get toolbar(){return this.#s}#i;get toolbarDispatcher(){return this.#i}#a;get formatbar(){return this.#a}#d;get formatbarDispatcher(){return this.#d}#m;get focusbar(){return this.#m}#l;get focusbarDispatcher(){return this.#l}#c;get root(){return this.#c}#h;get rootDispatcher(){return this.#h}#n={};get i18n(){return this.#n}set i18n(t){this.#n={...this.#n,...t||{}}}#f=new Z;get tags(){return this.#f}#u=new Q;get filters(){return this.#u}#p=new V;get dialogs(){return this.#p}#g=new q;get commands(){return this.#g}#E=new Y;get plugins(){return this.#E}static get defaultConfig(){return{}}constructor(t,e={}){if(!(t instanceof HTMLElement)||!(e instanceof Object))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=new $(this,this.orig.ownerDocument),this.#o=this.dom.createElement(r.EDITOR),this.#s=this.dom.createElement(r.TOOLBAR,{attributes:{role:"toolbar"}}),this.dom.insertLastChild(this.toolbar,this.element),this.#i=new v(this.toolbar),this.#a=this.dom.createElement(r.FORMATBAR,{attributes:{role:"toolbar"}}),this.formatbar.hidden=!0,this.dom.insertLastChild(this.formatbar,this.element),this.#d=new v(this.formatbar),this.#m=this.dom.createElement(r.FOCUSBAR,{attributes:{role:"toolbar"}}),this.focusbar.hidden=!0,this.dom.insertLastChild(this.focusbar,this.element),this.#l=new v(this.focusbar),this.#c=this.dom.createElement(r.ROOT),this.dom.insertLastChild(this.root,this.element),this.#h=new v(this.root)}init(){let t=this.config;this.#e={};let e=this.constructor.defaultConfig.base?.plugins||[],i=e;if(Array.isArray(t.base?.plugins)&&t.base.plugins.length>0){let c=t.base.plugins;t.base?.pluginsDisabled?i=i.filter(f=>!c.includes(f.name)):(i=[],c.forEach(f=>{let p=e.find(g=>g.name===f);p&&i.push(p)}))}let a=new Set,l=c=>{c.dependencies?.forEach(l),a.add(c)};i.map(l),a.forEach(c=>{Object.entries(c.config).forEach(([f,p])=>{this.config[c.name]??={},this.config[c.name][f]=t[c.name]?.[f]||this.constructor.defaultConfig[c.name]?.[f]||p}),this.plugins.set(new c(this))}),this.config.base.lang&&(this.element.lang=this.config.base.lang),this.plugins.init(),this.toolbarDispatcher.dispatch("init"),this.formatbarDispatcher.dispatch("init"),this.focusbarDispatcher.dispatch("init"),this.rootDispatcher.dispatch("init")}freeze(){Object.freeze(this.config),Object.freeze(this.i18n),this.tags.freeze(),this.filters.freeze(),this.dialogs.freeze(),this.commands.freeze(),this.plugins.freeze()}load(){this.orig instanceof HTMLTextAreaElement?(this.orig.form.addEventListener("submit",()=>this.save()),this.setHtml(this.orig.value.replace("/&nbsp;/g"," "))):this.setHtml(this.orig.innerHTML),this.dom.insertAfter(this.element,this.orig),this.orig.hidden=!0,this.rootDispatcher.dispatch("load")}destroy(){this.element.parentElement.removeChild(this.element),this.orig.hidden=!1,this.rootDispatcher.dispatch("destroy")}getHtml(){let t=this.dom.createElement(r.ROOT,{html:this.root.innerHTML});return this.filters.filter(t),this.rootDispatcher.dispatch("gethtml",t),t.innerHTML}setHtml(t){let e=this.dom.createElement(r.ROOT,{html:t});this.rootDispatcher.dispatch("sethtml",e),this.filters.filter(e),this.root.innerHTML=e.innerHTML}save(){this.orig instanceof HTMLTextAreaElement?this.orig.value=this.getHtml():this.orig.innerHTML=this.getHtml(),this.rootDispatcher.dispatch("save")}translate(t){return this.i18n[t]||t}url(t){let e=this.dom.window.origin||this.dom.window.location.origin,i=this.dom.createElement(r.A,{attributes:{href:t}});return e===i.origin?i.pathname:i.href}static create(t,e={}){let i=new this(t,e);return i.init(),i.freeze(),i.load(),i}};var X=class{#t;get editor(){return this.#t}#e;get form(){return this.#e}#r;constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t,this.#e=this.editor.dom.createElement(r.FORM,{attributes:{method:"dialog"}}),this.addFieldset().#o().#s()}addFieldset(){let t=this.editor.dom.createElement(r.FIELDSET);return this.#r?this.editor.dom.insertAfter(t,this.#r):this.editor.dom.insertFirstChild(t,this.#e),this.#r=t,this}addLegend(t){if(!E(t))throw new TypeError("Invalid argument");return this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LEGEND,{html:t}),this.#r),this}addTextInput(t,e,i={}){return this.addInput(t,e,i,"text")}addNumberInput(t,e,i={}){return this.addInput(t,e,i,"number")}addInput(t,e,i={},a="text"){if(!E(t)||!E(e)||!E(a))throw new TypeError("Invalid argument");Object.assign(i,{id:`editor-${t}`,name:t,type:a});let l=this.editor.dom.createElement(r.DIV);return this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LABEL,{attributes:{for:i.id},html:e}),l),this.editor.dom.insertLastChild(this.editor.dom.createElement(r.INPUT,{attributes:i}),l),i.required&&l.setAttribute("data-required",""),this.editor.dom.insertLastChild(l,this.#r),this}#o(){let t=this.#i("Cancel"),e=this.editor.dom.createElement(r.BUTTON,{attributes:{type:"reset"},html:t});return this.editor.dom.insertLastChild(e,this.#e),this}#s(){let t=this.editor.dom.createElement(r.BUTTON,{html:this.#i("Save")});return this.editor.dom.insertLastChild(t,this.#e),this}#i(t){return this.editor.translate(t)}};var u=class{#t;get editor(){return this.#t}#e;get name(){return this.#e}#r;get browserUrl(){return this.#r}#o;get formCreator(){return this.#o}constructor(t,e,i=void 0){if(!(t instanceof x)||!E(e)||!D(i))throw new TypeError("Invalid argument");this.#t=t,this.#e=e,this.#r=i}open(t,e={}){this.browserUrl?this.#s(t,e):this.#i(t,e)}_(t){return this.editor.translate(t)}_prepareForm(){throw new Error("Not implemented")}#s(t,e={}){this.editor.dom.open({url:this.browserUrl,name:this.name,call:t,params:e})}#i(t,e={}){let i=this.editor.dom.getRange();this.#a();let a=this.editor.dom.createElement(r.DIALOG);a.addEventListener("click",c=>c.target===a&&a.close()),a.addEventListener("close",()=>{i&&this.editor.dom.setRange(i),a.returnValue&&t(JSON.parse(a.returnValue)),this.#a()}),this.editor.dom.insertLastChild(a,this.editor.element),this.#o=new X(this.editor),this._prepareForm();let l=this.formCreator.form;l.addEventListener("submit",()=>a.close(JSON.stringify(Object.fromEntries(new FormData(l))))),l.addEventListener("reset",()=>a.close()),new FormData(l).forEach((c,f)=>F(e[f])&&(l.elements[f].value=e[f])),this.editor.dom.insertLastChild(l,a),a.showModal()}#a(){Array.from(this.editor.element.getElementsByTagName(r.DIALOG)).forEach(t=>{t.parentElement.removeChild(t)})}};var J=class extends u{constructor(t){super(t,P.name)}_prepareForm(){this.formCreator.addLegend(this._("Abbreviation")).addTextInput("title",this._("Full term"),{placeholder:this._("Insert full term or leave empty to remove it")})}};var w=Object.freeze({NONE:"none",LEFT:"left",CENTER:"center",RIGHT:"right"});var tt=class extends L{#t;constructor(t,e){if(!Object.values(w).includes(e))throw new TypeError("Invalid argument");super(t,"align-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-alignable")&&(this.editor.dom.removeClass(t,...Object.values(w)),this.#t!==w.NONE&&t.classList.add(this.#t))}};var h=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof x))throw new TypeError("Invalid argument");this.#t=t}handleEvent(t){j(this[t.type])&&this[t.type](t)}_(t){return this.editor.translate(t)}};var b=Object.freeze({A:"a",ARROWDOWN:"ArrowDown",ARROWLEFT:"ArrowLeft",ARROWRIGHT:"ArrowRight",ARROWUP:"ArrowUp",B:"b",BACKSPACE:"Backspace",C:"c",D:"d",DEL:"Delete",E:"e",END:"End",ENTER:"Enter",F:"f",G:"g",HOME:"Home",I:"i",J:"j",K:"k",L:"l",M:"m",O:"o",Q:"q",R:"r",S:"s",SPACE:" ",T:"t",TAB:"Tab",U:"u",V:"v",W:"w",X:"x",Y:"y",Z:"z"}),d=b,qe=Object.freeze([b.ARROWLEFT,b.ARROWRIGHT,b.ARROWUP,b.ARROWDOWN]),Ve=Object.freeze([b.HOME,b.ARROWUP,b.ARROWDOWN,b.END]),$e=Object.freeze([b.HOME,b.ARROWLEFT,b.ARROWRIGHT,b.END]),De=Object.freeze({[b.ARROWUP]:w.NONE,[b.ARROWLEFT]:w.LEFT,[b.ARROWDOWN]:w.CENTER,[b.ARROWRIGHT]:w.RIGHT}),He=Object.freeze({[b.HOME]:T.FIRST,[b.ARROWUP]:T.PREV,[b.ARROWDOWN]:T.NEXT,[b.END]:T.LAST});function A(s,t,{alt:e=!1,ctrl:i=!1,shift:a=!1}={}){return s.key===t&&s.altKey===e&&s.ctrlKey===i&&s.shiftKey===a}function et(s,t,{alt:e=!1,ctrl:i=!1,shift:a=!1}={}){return Array.isArray(t)&&t.includes(s.key)&&s.altKey===e&&s.ctrlKey===i&&s.shiftKey===a}function Ue(s){return et(s,qe)}function Ge(s){return et(s,Ve)}function ke(s){return et(s,$e)}function Ke(s){return et(s,Object.keys(De),{shift:!0})}function ze(s){return et(s,Object.keys(He),{ctrl:!0})}function We(s){return/^[A-Z]$/.test(s.key)&&A(s,s.key,{alt:!0,shift:!0})}var rt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-alignable")&&t.addEventListener("keydown",this)}keydown(t){t.target===t.currentTarget&&Ke(t)&&(t.preventDefault(),t.stopPropagation(),this.editor.dom.removeClass(t.target,...Object.values(w)),De[t.key]!==w.NONE&&t.target.classList.add(De[t.key]))}};var it=class extends R{filter(t){let e=this.editor.tags.get(t),i=this.editor.tags.allowed(t,r.P),a=e.editable||e.group===o.FORMAT,l=[],c=(f=null)=>{if(i&&l.length>0){let p=this.editor.dom.createElement(r.P,{html:l.join(" ")});f?this.editor.dom.insertBefore(p,f):this.editor.dom.insertLastChild(p,t),l=[]}};Array.from(t.childNodes).forEach(f=>{let p=f.textContent.trim();if(f instanceof HTMLElement){let g=this.#t(f),I=this.editor.tags.get(g);if(I&&this.editor.tags.allowed(t,g))c(g),this.#e(g,I);else if(I&&I.group===o.FORMAT&&i){let B=this.#e(g,I);B&&(l.push(B.outerHTML),t.removeChild(B))}else!a&&p&&i?(l.push(p),t.removeChild(g)):a&&p?t.replaceChild(this.editor.dom.createText(p),g):t.removeChild(g)}else f instanceof Text?(!a&&p&&i&&l.push(p),(!a||!p)&&t.removeChild(f)):f instanceof Node&&t.removeChild(f)}),c()}#t(t){let e=this.editor.config.base.filter[t.localName];if(!e)return t;let i=this.editor.dom.createElement(e,{html:t.innerHTML});return t.parentElement.replaceChild(i,t),i}#e(t,e){if(Array.from(t.attributes).forEach(i=>!e.attributes.includes(i.name)&&t.removeAttribute(i.name)),t.hasChildNodes()&&this.editor.filters.filter(t),t.hasChildNodes()||e.empty)return t;t.parentElement?.removeChild(t)}};var ot=class extends L{constructor(t){super(t,"delete")}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-deletable")&&this.editor.dom.delete(t)}};var st=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-deletable")&&t.addEventListener("keydown",this)}keydown(t){t.target===t.currentTarget&&A(t,d.DEL,{ctrl:!0})&&(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation())}};var at=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this),this.editor.root.addEventListener("beforeinput",this)}insert({detail:{element:t}}){t.contentEditable==="true"?t.addEventListener("keydown",this):t.parentElement.contentEditable==="true"&&t.addEventListener("dblclick",this)}keydown(t){if(A(t,d.ENTER,{shift:!0})&&!this.editor.tags.allowed(t.target,r.BR))t.preventDefault(),t.stopPropagation();else if(A(t,d.ENTER)){t.preventDefault(),t.stopPropagation();let e=this.editor.tags.get(t.target)?.enter;if(e){if(t.target.textContent.trim()||!t.target.hasAttribute("data-deletable")){let i=this.editor.dom.closest(t.target,e);i&&this.editor.dom.insertAfter(this.editor.dom.createElement(e),i)}else if(!(t.target instanceof HTMLParagraphElement)){let i=this.editor.dom.closest(t.target,r.P);i&&this.editor.dom.insertAfter(this.editor.dom.createElement(r.P),i),t.target.parentElement.removeChild(t.target)}}}else A(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")?(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation()):We(t)&&(t.preventDefault(),t.stopPropagation(),this.editor.formatbar.querySelector(`${r.BUTTON}[data-key=${t.key.toLowerCase()}]`)?.click())}dblclick({target:t}){this.editor.dom.selectContents(t),this.editor.commands.findByTagName(t.localName)?.execute()}beforeinput(t){if(t.inputType!=="insertFromPaste"||!t.cancelable)return;let e=t.dataTransfer?.getData("text/html"),i=t.dataTransfer?.getData("text/plain");e?(t.preventDefault(),t.stopPropagation(),this.editor.dom.insertHtml(e)):i&&(t.preventDefault(),t.stopPropagation(),this.editor.dom.insertText(i))}};var nt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-focusable")&&t.focus()}};var S=class extends h{insertbutton({target:t,detail:{element:e}}){e.getAttribute("data-command")&&e.addEventListener("click",this),e.tabIndex=e===t.firstElementChild?0:-1,e.addEventListener("keydown",this)}click({target:t}){this.editor.commands.execute(t.getAttribute("data-command"))}keydown(t){if(ke(t)){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,a=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===a,f=t.target===l;t.key===d.ARROWLEFT&&!c?e.focus():t.key===d.ARROWRIGHT&&!f?i.focus():t.key===d.HOME||t.key===d.ARROWRIGHT&&f?a.focus():(t.key===d.END||t.key===d.ARROWLEFT&&c)&&l.focus(),t.preventDefault(),t.stopPropagation()}}_show(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new TypeError("Invalid argument");t.hidden=!1;let{x:i,y:a}=e.getBoundingClientRect(),{x:l,y:c}=this.editor.root.getBoundingClientRect(),f=i-l+t.clientWidth-this.editor.root.clientWidth,p=a-c-e.scrollTop+this.editor.root.offsetTop-t.clientHeight,g=t.clientWidth<this.editor.root.clientWidth?i-l:0;g>0&&f>0&&(g=g>f?(g-f)/2:0),t.style.left=`${g}px`,t.style.top=`${p}px`}_hide(t){t.hidden=!0,t.removeAttribute("style")}};var dt=class extends S{constructor(t){super(t),this.editor.focusbar.addEventListener("insertbutton",this),this.editor.root.addEventListener("focusin",this),this.editor.root.addEventListener("focusout",this),this.editor.dom.document.addEventListener("selectionchange",this)}insertbutton(t){super.insertbutton(t),t.detail.element.getAttribute("data-command")&&t.detail.element.addEventListener("mousedown",this)}mousedown(t){t.preventDefault(),t.stopPropagation()}focusin({target:t}){t instanceof HTMLElement&&t.hasAttribute("data-focusable")&&this.#t(t)}focusout(){this.#e()}selectionchange(){let t=this.editor.dom.getActiveElement();!this.editor.dom.getSelection().isCollapsed||!t?this.#e():t instanceof HTMLElement&&t.hasAttribute("data-focusable")&&this.#t(t)}#t(t){this.editor.focusbar.children.length&&(Object.keys(t.dataset).forEach(e=>this.editor.focusbar.dataset[e]=t.dataset[e]),this.editor.focusbar.dataset.tag=t.localName,this._show(this.editor.focusbar,t))}#e(){this._hide(this.editor.focusbar),Object.keys(this.editor.focusbar.dataset).forEach(t=>delete this.editor.focusbar.dataset[t])}};var mt=class extends S{constructor(t){super(t),this.editor.formatbar.addEventListener("insertbutton",this),this.editor.dom.document.addEventListener("selectionchange",this)}selectionchange(){let t=this.editor.dom.getSelectedEditable();t&&!this.editor.dom.getSelection().isCollapsed&&this.editor.tags.allowed(t,o.FORMAT,!0)?this._show(this.editor.formatbar,t):this._hide(this.editor.formatbar)}};var lt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-navigable")&&(t.tabIndex=0,t.addEventListener("keydown",this))}keydown(t){if(t.target===t.currentTarget&&Ge(t)&&this.#t(t.target)){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,a=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===a,f=t.target===l;t.key===d.ARROWUP&&!c&&e.hasAttribute("data-navigable")?e.focus():t.key===d.ARROWDOWN&&!f&&i.hasAttribute("data-navigable")?i.focus():(t.key===d.HOME||t.key===d.ARROWDOWN&&f)&&a.hasAttribute("data-navigable")?a.focus():(t.key===d.END||t.key===d.ARROWUP&&c)&&l.hasAttribute("data-navigable")&&l.focus(),t.preventDefault(),t.stopPropagation()}}#t(t){if(t.contentEditable!=="true")return!0;let e=this.editor.dom.getSelection(),i=this.editor.dom.getSelectedEditable(),a=this.editor.dom.getSelectedElement();return e.isCollapsed&&e.anchorOffset===0&&[i,t.firstChild].includes(a)}};var ct=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t instanceof HTMLSlotElement?t.addEventListener("keydown",this):t.hasAttribute("data-slotable")&&!t.querySelector(":scope > "+r.SLOT)&&this.editor.dom.insertLastChild(this.editor.dom.createElement(r.SLOT),t)}keydown(t){A(t,d.BACKSPACE)&&t.target.matches(":only-child")?this.editor.dom.delete(t.target.parentElement):!A(t,d.TAB)&&!A(t,d.TAB,{shift:!0})&&(t.preventDefault(),t.stopPropagation())}};var ht=class extends L{#t;constructor(t,e){if(!Object.values(T).includes(e))throw new TypeError("Invalid argument");super(t,"sort-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-sortable")&&this.editor.dom.sort(t,this.#t)}};var ft=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-sortable")&&(t.addEventListener("keydown",this),t.addEventListener("pointerdown",this),t.addEventListener("pointermove",this),t.addEventListener("pointerup",this))}keydown(t){t.target===t.currentTarget&&ze(t)&&(this.editor.dom.sort(t.target,He[t.key]),t.preventDefault(),t.stopPropagation())}pointerdown(t){let e=t.target.closest("[data-sortable]");e&&this.editor.dom.contains(e)&&(e.setAttribute("data-sort",""),e.setPointerCapture(t.pointerId))}pointermove(t){let e=t.target.closest("[data-sortable][data-sort]"),i=this.editor.dom.document.elementFromPoint(t.x,t.y);this.#t(),e&&this.editor.dom.contains(e)&&this.#e(e,i)&&i.setAttribute("data-sortover","")}pointerup(t){let e=t.target.closest("[data-sortable][data-sort]");if(e&&this.editor.dom.contains(e)){let i=this.editor.dom.document.elementFromPoint(t.x,t.y),a=i.parentElement;if(this.#t(),e.removeAttribute("data-sort"),e.releasePointerCapture(t.pointerId),this.#e(e,i)){if(e.localName===r.COL&&a===e.parentElement){let l=Array.from(a.children).indexOf(e),c=Array.from(a.children).indexOf(i),f=a.parentElement;Array.from(f.rows).forEach(p=>this.editor.dom.insertBefore(p.cells[l],p.cells[c]))}this.editor.dom.insertBefore(e,i)}}}#t(){this.editor.root.querySelectorAll("[data-sortover]").forEach(t=>t.removeAttribute("data-sortover"))}#e(t,e){return t instanceof HTMLElement&&e instanceof HTMLElement&&this.editor.dom.contains(e)&&![this.editor.root,t].includes(e)&&e.hasAttribute("data-sortable")&&(t.parentElement===e.parentElement||this.editor.dom.arbitrary(t.parentElement)&&this.editor.dom.arbitrary(e.parentElement))&&this.editor.tags.allowed(e.parentElement,t)}};var ut=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){let e=this.editor.tags.get(t);e&&(e.editable&&(t.contentEditable="true"),["alignable","arbitrary","deletable","focusable","navigable","slotable","sortable"].forEach(i=>{e[i]&&(t.dataset[i]="")}))}};var pt=class extends S{constructor(t){super(t),this.editor.toolbar.addEventListener("insertbutton",this)}};var m=class extends n{static get name(){return"base"}static get config(){return{browser:{},filter:{},lang:void 0,plugins:[],pluginsDisabled:!1}}init(){this._tag({name:r.ROOT,group:o.ROOT,children:[o.AUDIO,o.BLOCK,o.CONTAINER,o.FIGURE,o.HEADING,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO]}),this._tag({name:r.SLOT,group:o.SLOT,editable:!0,focusable:!0,navigable:!0,sortable:!0}),new ut(this.editor),new pt(this.editor),new mt(this.editor),new dt(this.editor),new at(this.editor),new st(this.editor),new lt(this.editor),new ft(this.editor),new rt(this.editor),new nt(this.editor),new ct(this.editor),this.editor.filters.add(new it(this.editor)),this.#t(),this.#e(),this.#r()}#t(){let t={[w.NONE]:"No alignment",[w.LEFT]:"Align left",[w.CENTER]:"Align center",[w.RIGHT]:"Align right"};Object.entries(t).forEach(([e,i])=>{let a=new tt(this.editor,e);this.editor.commands.set(a),this._focusbar(i,a.name)})}#e(){let t={[T.FIRST]:"Sort to the beginning",[T.PREV]:"Sort before previous element",[T.NEXT]:"Sort after next element",[T.LAST]:"Sort to the end"};Object.entries(t).forEach(([e,i])=>{let a=new ht(this.editor,e);this.editor.commands.set(a),this._focusbar(i,a.name)})}#r(){this.editor.commands.set(new ot(this.editor)),this._focusbar("Delete","delete")}};var P=class extends n{static get name(){return"abbreviation"}static get dependencies(){return[m]}init(){this._tag({name:r.ABBR,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new J(this.editor)),this._command(r.ABBR),this._formatbar("Abbreviation",d.A)}};var gt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Audio")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to audio"),required:"required"}).addTextInput("id",this._("ID"))}};var Et=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertaudio",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.AUDIO)).forEach(e=>this.#t(e))}insertaudio({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.controls=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:U.name}})):t.parentElement.removeChild(t)}};var bt=class extends R{filter(t){t.querySelectorAll(`${r.FIGURE} > ${r.FIGCAPTION}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Tt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertfigure",this)}insertfigure({detail:{element:t}}){t.querySelector(":scope > "+r.FIGCAPTION)||this.editor.dom.insertLastChild(this.editor.dom.createElement(r.FIGCAPTION),t)}};var O=class extends n{static get name(){return"figure"}static get dependencies(){return[m]}init(){this._tag({name:r.FIGURE,group:o.FIGURE,children:[o.AUDIO,o.CAPTION,o.IFRAME,o.IMAGE,o.PREFORMAT,o.QUOTE,o.TABLE,o.VIDEO],attributes:["class"],alignable:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag({name:r.FIGCAPTION,group:o.CAPTION,children:[o.FORMAT],editable:!0,navigable:!0,enter:r.P}),new Tt(this.editor),this.editor.filters.add(new bt(this.editor))}};var U=class extends n{static get name(){return"audio"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.AUDIO,group:o.AUDIO,attributes:["controls","id","src"],empty:!0,navigable:!0}),new Et(this.editor),this.editor.dialogs.set(new gt(this.editor,this.constructor.name,this.editor.config.audio.browser)),this._command(r.AUDIO),this._toolbar("Audio")}};var At=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Block")).addTextInput("id",this._("ID"),{required:"required"})}};var Lt=class extends HTMLElement{get content(){return this.shadowRoot.innerHTML}set content(t){this.shadowRoot.innerHTML=t}constructor(){super(),this.attachShadow({mode:"open"})}};var xt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertappblock",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.BLOCK)).forEach(e=>e.id||e.parentElement.removeChild(e))}async insertappblock({detail:{element:t}}){if(!t.id){t.parentElement.removeChild(t);return}if(!this.editor.config.block.api)return;let e=this.editor.config.block.api.replace("{id}",t.id),i=await fetch(e,{mode:"no-cors"});if(!i.ok)return;let a="";this.editor.config.block.css&&(a=this.editor.config.block.css.split(",").map(c=>`<link rel="stylesheet" href="${c}">`).join(""));let l=await i.text();t.content=a+l}};var Rt=class extends n{static get name(){return"block"}static get dependencies(){return[m]}static get config(){return{api:void 0,browser:void 0,css:void 0}}init(){this.editor.dom.registerElement(r.BLOCK,Lt),this._tag({name:r.BLOCK,group:o.BLOCK,attributes:["id"],deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),new xt(this.editor),this.editor.dialogs.set(new At(this.editor,this.constructor.name,this.editor.config.block.browser)),this._command(r.BLOCK),this._toolbar("Block")}};var wt=class extends R{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(_.name)&&t.querySelector(":scope > "+r.BLOCKQUOTE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.BLOCKQUOTE),t),t.parentElement.removeChild(t))}};var Ot=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertblockquote",this),this.editor.root.addEventListener("deleteblockquote",this)}insertblockquote({detail:{element:t}}){this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:_.name}})}deleteblockquote({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(_.name)&&t.parentElement.removeChild(t)}};var yt=class extends R{filter(t){if(t instanceof HTMLPreElement){t.outerHTML=t.outerHTML.replace(/(<br\s*\/?>)/gi,`
2
+ `);return}t.innerHTML=t.innerHTML.replace(/^\s*(<br\s*\/?>\s*)+/gi,"").replace(/\s*(<br\s*\/?>\s*)+$/gi,""),t instanceof HTMLParagraphElement?t.outerHTML=t.outerHTML.replace(/\s*(<br\s*\/?>\s*){2,}/gi,"</p><p>"):t.innerHTML=t.innerHTML.replace(/\s*(<br\s*\/?>\s*){2,}/gi,"<br>")}};var y=class extends n{static get name(){return"break"}static get dependencies(){return[m]}init(){this._tag({name:r.BR,group:o.BREAK,empty:!0}),this.editor.filters.add(new yt(this.editor))}};var _=class extends n{static get name(){return"blockquote"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.BLOCKQUOTE,group:o.QUOTE,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new Ot(this.editor),this._command(r.BLOCKQUOTE),this._toolbar("Blockquote"),this.editor.filters.add(new wt(this.editor))}};var It=class extends n{static get name(){return"bold"}static get dependencies(){return[m]}init(){this._tag({name:r.B,group:o.FORMAT}),this._command(r.B),this._formatbar("bold",d.B)}};var Ct=class extends n{static get name(){return"cite"}static get dependencies(){return[m]}init(){this._tag({name:r.CITE,group:o.FORMAT}),this._command(r.CITE),this._formatbar("Citation",d.Z)}};var Nt=class extends n{static get name(){return"code"}static get dependencies(){return[m]}init(){this._tag({name:r.CODE,group:o.FORMAT}),this._command(r.CODE),this._formatbar("Code",d.C)}};var _t=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("value",this._("Machine-readable Value"),{placeholder:this._("Insert value or leave empty to remove it")})}};var Mt=class extends n{static get name(){return"data"}static get dependencies(){return[m]}init(){this._tag({name:r.DATA,group:o.FORMAT,attributes:["value"]}),this.editor.dialogs.set(new _t(this.editor,this.constructor.name)),this._command(r.DATA),this._formatbar("Data",d.J)}};var St=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Definition")).addTextInput("title",this._("Term"),{placeholder:this._("Insert term or leave empty to remove it")})}};var Bt=class extends n{static get name(){return"definition"}static get dependencies(){return[m]}init(){this._tag({name:r.DFN,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new St(this.editor,this.constructor.name)),this._command(r.DFN),this._formatbar("Definition",d.D)}};var Dt=class extends n{static get name(){return"deletion"}static get dependencies(){return[m]}init(){this._tag({name:r.DEL,group:o.FORMAT}),this._command(r.DEL),this._formatbar("Text Deletion",d.G)}};var vt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Details")).addTextInput("name",this._("Name"),{placeholder:this._("Insert name or leave empty to remove it")})}};var Ft=class extends R{filter(t){t.querySelectorAll(`${r.SUMMARY}:not(:first-child)`).forEach(e=>e.parentElement.removeChild(e)),t.querySelectorAll(`${r.SUMMARY}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Ht=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertdetails",this)}insertdetails({detail:{element:t}}){t.open=!0,t.querySelector(`:scope > ${r.SUMMARY}:first-child`)||this.editor.dom.insertFirstChild(this.editor.dom.createElement(r.SUMMARY),t)}};var Pt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertsummary",this)}insertsummary({detail:{element:t}}){this.#t(t),t.addEventListener("click",this),t.addEventListener("blur",this),t.addEventListener("keydown",this)}click(t){t.preventDefault(),t.stopPropagation(),t.target.parentElement.open=!0}blur({target:t}){this.#t(t)}keydown(t){A(t,d.SPACE)?(t.preventDefault(),t.stopPropagation(),this.editor.dom.insertText(" ")):A(t,d.ENTER)&&(t.preventDefault(),t.stopPropagation(),t.target.parentElement.open=!0)}#t(t){t.textContent.trim()?t.querySelectorAll(r.BR+":not(:last-child)").forEach(e=>e.parentElement.removeChild(e)):t.textContent=this._("Details"),t.lastElementChild instanceof HTMLBRElement||this.editor.dom.insertLastChild(this.editor.dom.createElement(r.BR),t)}};var Ut=class extends n{static get name(){return"details"}static get dependencies(){return[m]}init(){this._tag({name:r.DETAILS,group:o.CONTAINER,children:[o.AUDIO,o.FIGURE,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.SUMMARY,o.TABLE,o.VIDEO],attributes:["name"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this._tag({name:r.SUMMARY,group:o.SUMMARY,editable:!0,navigable:!0,enter:r.P}),new Ht(this.editor),new Pt(this.editor),this.editor.dialogs.set(new vt(this.editor,this.constructor.name)),this._command(r.DETAILS),this._toolbar("Details"),this.editor.filters.add(new Ft(this.editor))}};var Gt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Division")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var kt=class extends n{static get name(){return"division"}static get dependencies(){return[m]}init(){this._tag({name:r.DIV,group:o.CONTAINER,children:[o.AUDIO,o.BLOCK,o.FIGURE,o.IFRAME,o.IMAGE,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO],attributes:["class"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this.editor.dialogs.set(new Gt(this.editor,this.constructor.name)),this._command(r.DIV),this._toolbar("Division")}};var Kt=class extends n{static get name(){return"emphasis"}static get dependencies(){return[m]}init(){this._tag({name:r.EM,group:o.FORMAT}),this._command(r.EM),this._formatbar("emphasized",d.E)}};var zt=class extends n{static get name(){return"heading"}static get dependencies(){return[m]}init(){this._tag({name:r.H2,group:o.HEADING,deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),this._command(r.H2),this._toolbar("Heading")}};var Wt=class extends n{static get name(){return"horizontalrule"}static get dependencies(){return[m]}init(){this._tag({name:r.HR,group:o.RULE,deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.HR),this._toolbar("Horizontal Rule")}};var je={"CSS class":"CSS-Klasse",Height:"H\xF6he",ID:"ID","Insert CSS class":"CSS-Klasse eingeben",URL:"URL",Width:"Breite",Abbreviation:"Abk\xFCrzung","Full term":"Langform","Insert full term or leave empty to remove it":"Langform eingeben oder zum Entfernen leer lassen",Audio:"Audio","Insert URL to audio":"URL zur Audiodatei eingeben","Align center":"zentriert","Align left":"linksb\xFCndig","Align right":"rechtsb\xFCndig",Alt:"Alt",Cancel:"Abbrechen",Delete:"L\xF6schen","No alignment":"Keine Ausrichtung",Save:"Speichern",Shift:"Umschalt","Sort after next element":"Hinter das n\xE4chste Element sortieren","Sort before previous element":"Vor das vorherige Element sortieren","Sort to the beginning":"An den Anfang sortieren","Sort to the end":"Ans Ende sortieren",Block:"Block",Blockquote:"Blockzitat",bold:"fett",Citation:"Zitatquelle",Code:"Quelltext",Data:"Data","Machine-readable Value":"Maschinenlesbarer Wert","Insert value or leave empty to remove it":"Wert eingeben oder zum Entfernen leer lassen",Definition:"Definition","Insert term or leave empty to remove it":"Begriff eingeben oder zum Entfernen leer lassen",Term:"Begriff","Text Deletion":"Textl\xF6schung",Details:"Details","Insert name or leave empty to remove it":"Name eingeben oder zum Entfernen leer lassen",Name:"Name",Division:"Division",emphasized:"betont",Heading:"\xDCberschrift","Horizontal Rule":"Horizontale Linie",Ifrane:"Iframe","Insert URL to embedded page":"URL zur eingebetteten Seite eingeben","Alternative text":"Alternativtext",Image:"Bild","Insert URL to image":"URL zur Bilddatei eingeben","Text shown when media element is not available":"Ersatztext, falls Medienelement nicht verf\xFCgbar ist","Text Insertion":"Texteinf\xFCgung",italic:"kursiv","User Input":"Benutzereingabe","Insert link or leave empty to unlink":"Link eingeben oder zum Entfernen leer lassen",Link:"Link",mark:"markiert","Ordered List":"Geordnete Liste",Paragraph:"Absatz","Preformatted Text":"Vorformatierter Text",Quote:"Zitat","Sample Output":"Beispielausgabe",Section:"Sektion",small:"klein",strikethrough:"durchgestrichen","strongly emphasized":"stark betont",Subheading:"Unter\xFCberschrift",subscript:"tiefgestellt",superscript:"hochgestellt","Add column":"Spalte hinzuf\xFCgen","Add row":"Zeile hinzuf\xFCgen",Columns:"Spalten",Rows:"Zeilen",Table:"Tabelle","Insert date/time or leave empty to remove it":"Datum/Zeit eingeben oder zum Entfernen leer lassen","Machine-readable Datetime":"Maschinenlesbare Datums-/Zeitangabe",Time:"Zeit",underline:"unterstrichen","Unordered List":"Ungeordnete Liste",Variable:"Variable","Insert URL to video":"URL zur Videodatei eingeben",Video:"Video"};var jt=class extends n{static get name(){return"i18n"}static get dependencies(){return[m]}init(){this._i18n({de:je})}};var qt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Iframe")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to embedded page"),required:"required"}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var Vt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertiframe",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.IFRAME)).forEach(e=>this.#t(e))}insertiframe({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.allowFullscreen=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:G.name}})):t.parentElement.removeChild(t)}};var G=class extends n{static get name(){return"iframe"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.IFRAME,group:o.IFRAME,attributes:["allowfullscreen","height","id","src","width"],empty:!0,navigable:!0}),new Vt(this.editor),this.editor.dialogs.set(new qt(this.editor,this.constructor.name,this.editor.config.iframe.browser)),this._command(r.IFRAME),this._toolbar("Iframe")}};var $t=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Image")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to image"),required:"required"}).addTextInput("alt",this._("Alternative text"),{placeholder:this._("Text shown when media element is not available")}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var Qt=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertimg",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.IMG)).forEach(e=>this.#t(e))}insertimg({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:k.name}})):t.parentElement.removeChild(t)}};var k=class extends n{static get name(){return"image"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.IMG,group:o.IMAGE,attributes:["alt","height","id","src","width"],empty:!0,navigable:!0}),new Qt(this.editor),this.editor.dialogs.set(new $t(this.editor,this.constructor.name,this.editor.config.image.browser)),this._command(r.IMG),this._toolbar("Image")}};var Yt=class extends n{static get name(){return"insertion"}static get dependencies(){return[m]}init(){this._tag({name:r.INS,group:o.FORMAT}),this._command(r.INS),this._formatbar("Text Insertion",d.F)}};var Zt=class extends n{static get name(){return"italic"}static get dependencies(){return[m]}init(){this._tag({name:r.I,group:o.FORMAT}),this._command(r.I),this._formatbar("italic",d.I)}};var Xt=class extends n{static get name(){return"keyboard"}static get dependencies(){return[m]}init(){this._tag({name:r.KBD,group:o.FORMAT}),this._command(r.KBD),this._formatbar("User Input",d.K)}};var Jt=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Link")).addTextInput("href",this._("URL"),{pattern:"(https?|/|mailto:|tel:).+",placeholder:this._("Insert link or leave empty to unlink")})}};var te=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("inserta",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.A)).forEach(e=>this.#t(e))}inserta({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("href");e?t.setAttribute("href",this.editor.url(e)):t.parentElement.replaceChild(this.editor.dom.createText(t.textContent),t)}};var ee=class extends n{static get name(){return"link"}static get dependencies(){return[m]}init(){this._tag({name:r.A,group:o.FORMAT,attributes:["href"]}),new te(this.editor),this.editor.dialogs.set(new Jt(this.editor,this.constructor.name)),this._command(r.A),this._formatbar("Link",d.L)}};var re=class extends n{static get name(){return"mark"}static get dependencies(){return[m]}init(){this._tag({name:r.MARK,group:o.FORMAT}),this._command(r.MARK),this._formatbar("mark",d.M)}};var ie=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertli",this),this.editor.root.addEventListener("deleteli",this),this.editor.root.addEventListener("insertol",this),this.editor.root.addEventListener("insertul",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.LI)).forEach(e=>this.#t(e))}insertli({detail:{element:t}}){this.#t(t)}deleteli({detail:{target:t}}){t.children.length===0&&t.parentElement.removeChild(t)}insertol({detail:{element:t}}){this.#e(t)}insertul({detail:{element:t}}){this.#e(t)}#t(t){!(t.parentElement instanceof HTMLOListElement)&&!(t.parentElement instanceof HTMLUListElement)&&this.editor.dom.wrap(t,r.UL)}#e(t){t.children.length===0&&this.editor.dom.insertLastChild(this.editor.dom.createElement(r.LI),t)}};var K=class extends n{static get name(){return"list"}static get dependencies(){return[m,y]}init(){this._tag({name:r.LI,group:o.LISTITEM,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.LI}),new ie(this.editor)}};var oe=class extends n{static get name(){return"orderedlist"}static get dependencies(){return[m,K]}init(){this._tag({name:r.OL,group:o.LIST,children:[o.LISTITEM],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.OL),this._toolbar("Ordered List")}};var se=class extends n{static get name(){return"paragraph"}static get dependencies(){return[m,y]}init(){this._tag({name:r.P,group:o.PARAGRAPH,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),this._command(r.P),this._toolbar("Paragraph")}};var ae=class extends R{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(M.name)&&t.querySelector(":scope > "+r.PRE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.PRE),t),t.parentElement.removeChild(t))}};var ne=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertpre",this),this.editor.root.addEventListener("deletepre",this)}insertpre({detail:{element:t}}){this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:M.name}})}deletepre({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(M.name)&&t.parentElement.removeChild(t)}};var M=class extends n{static get name(){return"preformat"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.PRE,group:o.PREFORMAT,children:[o.BREAK],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new ne(this.editor),this._command(r.PRE),this._toolbar("Preformatted Text"),this.editor.filters.add(new ae(this.editor))}};var de=class extends n{static get name(){return"quote"}static get dependencies(){return[m]}init(){this._tag({name:r.Q,group:o.FORMAT}),this._command(r.Q),this._formatbar("Quote",d.Q)}};var me=class extends n{static get name(){return"sample"}static get dependencies(){return[m]}init(){this._tag({name:r.SAMP,group:o.FORMAT}),this._command(r.SAMP),this._formatbar("Sample Output",d.O)}};var le=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Section")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var ce=class extends n{static get name(){return"section"}static get dependencies(){return[m]}init(){this._tag({name:r.SECTION,group:o.CONTAINER,children:[o.AUDIO,o.FIGURE,o.HEADING,o.IFRAME,o.IMAGE,o.LIST,o.PARAGRAPH,o.PREFORMAT,o.QUOTE,o.RULE,o.TABLE,o.VIDEO],attributes:["class"],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,slotable:!0,sortable:!0}),this.editor.dialogs.set(new le(this.editor,this.constructor.name)),this._command(r.SECTION),this._toolbar("Section")}};var he=class extends n{static get name(){return"small"}static get dependencies(){return[m]}init(){this._tag({name:r.SMALL,group:o.FORMAT}),this._command(r.SMALL),this._formatbar("small",d.W)}};var fe=class extends n{static get name(){return"strikethrough"}static get dependencies(){return[m]}init(){this._tag({name:r.S,group:o.FORMAT}),this._command(r.S),this._formatbar("strikethrough",d.R)}};var ue=class extends n{static get name(){return"strong"}static get dependencies(){return[m]}init(){this._tag({name:r.STRONG,group:o.FORMAT}),this._command(r.STRONG),this._formatbar("strongly emphasized",d.S)}};var pe=class extends n{static get name(){return"subheading"}static get dependencies(){return[m]}init(){this._tag({name:r.H3,group:o.HEADING,deletable:!0,editable:!0,focusable:!0,navigable:!0,sortable:!0,enter:r.P}),this._command(r.H3),this._toolbar("Subheading")}};var ge=class extends n{static get name(){return"subscript"}static get dependencies(){return[m]}init(){this._tag({name:r.SUB,group:o.FORMAT}),this._command(r.SUB),this._formatbar("subscript",d.X)}};var Ee=class extends n{static get name(){return"superscript"}static get dependencies(){return[m]}init(){this._tag({name:r.SUP,group:o.FORMAT}),this._command(r.SUP),this._formatbar("superscript",d.Y)}};var be=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttd",this),this.editor.root.addEventListener("insertth",this)}inserttd({detail:{element:t}}){t.addEventListener("keydown",this)}insertth({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){let e=t.target,i=e.parentElement,a=e.closest(r.TABLE);if(e instanceof HTMLTableCellElement&&i instanceof HTMLTableRowElement&&a instanceof HTMLTableElement&&Ue(t)&&this.#t(e,t.key)){let l=e.cellIndex,c=i.cells.length,f=l===0,p=l===c-1,g=i.rowIndex===0,I=i.rowIndex===a.rows.length-1;t.preventDefault(),t.stopPropagation(),t.key===d.ARROWLEFT&&!f?this.editor.dom.focusEnd(i.cells[l-1]):t.key===d.ARROWLEFT&&g?this.editor.dom.focusEnd(a.rows[a.rows.length-1].cells[c-1]):t.key===d.ARROWLEFT?this.editor.dom.focusEnd(a.rows[i.rowIndex-1].cells[c-1]):t.key===d.ARROWRIGHT&&!p?i.cells[l+1].focus():t.key===d.ARROWRIGHT&&I?a.rows[0].cells[0].focus():t.key===d.ARROWRIGHT?a.rows[i.rowIndex+1].cells[0].focus():t.key===d.ARROWUP&&g?a.rows[a.rows.length-1].cells[l].focus():t.key===d.ARROWUP?a.rows[i.rowIndex-1].cells[l].focus():t.key===d.ARROWDOWN&&I?a.rows[0].cells[l].focus():t.key===d.ARROWDOWN&&a.rows[i.rowIndex+1].cells[l].focus()}}#t(t,e){if([d.ARROWUP,d.ARROWDOWN].includes(e))return!0;let i=this.editor.dom.getSelection(),a=i.anchorNode instanceof HTMLElement?i.anchorNode:t;if(!i.isCollapsed)return!1;if(e===d.ARROWLEFT){let c=t.firstChild;return c instanceof HTMLElement&&(c=c.firstChild),i.anchorOffset===0&&[t,c].includes(a)}let l=t.lastChild;return t.lastChild instanceof HTMLBRElement&&t.lastChild.previousSibling&&(l=t.lastChild.previousSibling),l instanceof HTMLElement&&(l=l.lastChild),i.anchorOffset===a.textContent.length&&[t,l].includes(a)}};var Te=class extends L{constructor(t){super(t,"tablecolumn-add")}execute(){let t=this.editor.dom.getActiveElement();t?.localName===r.COL&&this.editor.dom.createTableColumnAfter(t)}};var Ae=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertcol",this)}insertcol({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){A(t,d.ENTER)?this.editor.dom.createTableColumnAfter(t.target):A(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")&&this.editor.dom.delete(t.target)}};var Le=class extends L{constructor(t){super(t,N.name,r.TABLE)}_insert({rows:t,cols:e}={}){this.editor.dom.insert(this.editor.dom.createTable(parseInt(t,10)||1,parseInt(e,10)||1))}};var xe=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Table")).addNumberInput("rows",this._("Rows"),{min:"1",required:"required",value:"1"}).addNumberInput("cols",this._("Columns"),{min:"1",required:"required",value:"1"})}};var Re=class extends R{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(N.name)&&t.querySelector(":scope > "+r.TABLE)&&!t.querySelector(":scope > "+r.FIGCAPTION)?(this.editor.dom.insertBefore(t.querySelector(":scope > "+r.TABLE),t),t.parentElement.removeChild(t)):(t instanceof HTMLTableElement&&t.querySelector(`:scope > ${r.THEAD}, :scope > ${r.TFOOT}`)&&!t.querySelector(":scope > "+r.TBODY)||t instanceof HTMLTableSectionElement&&t.rows.length<=0||t instanceof HTMLTableRowElement&&!t.querySelector(`:scope > ${r.TH}:not(:empty), :scope > ${r.TD}:not(:empty)`))&&t.parentElement.removeChild(t)}};var we=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttable",this)}inserttable({detail:{element:t}}){if(this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:N.name}}),t.tBodies.length>0&&t.tBodies[0].rows[0]){let e=t.tBodies[0],i=e.rows[0].cells.length;t.querySelector(":scope > "+r.COLGROUP)||this.editor.dom.insertFirstChild(this.editor.dom.createTableColumnGroup(i),t),t.tHead||this.editor.dom.insertBefore(this.editor.dom.createTableHeader(1,i),e),t.tFoot||this.editor.dom.insertLastChild(this.editor.dom.createTableFooter(1,i),t)}}};var Oe=class extends L{constructor(t){super(t,"tablerow-add")}execute(){let t=this.editor.dom.getActiveElement();t instanceof HTMLTableRowElement&&this.editor.dom.createTableRowAfter(t)}};var ye=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttr",this)}inserttr({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){A(t,d.ENTER)?this.editor.dom.createTableRowAfter(t.target):A(t,d.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")&&this.editor.dom.delete(t.target)}};var N=class extends n{static get name(){return"table"}static get dependencies(){return[m,y,O]}init(){this._tag({name:r.TABLE,group:o.TABLE,children:[o.TABLESECTION],deletable:!0,navigable:!0}),this._tag({name:r.COLGROUP,group:o.COLGROUP,children:[o.COL]}),this._tag({name:r.COL,group:o.COL,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag(this.#t(r.THEAD)),this._tag(this.#t(r.TBODY)),this._tag(this.#t(r.TFOOT)),this._tag({name:r.TR,group:o.TABLEROW,children:[o.TABLECELL],deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._tag(this.#e(r.TH)),this._tag(this.#e(r.TD)),new we(this.editor),new Ae(this.editor),new ye(this.editor),new be(this.editor),this.editor.filters.add(new Re(this.editor)),this.editor.dialogs.set(new xe(this.editor,this.constructor.name)),this.editor.commands.set(new Le(this.editor)),this.editor.commands.set(new Te(this.editor)),this.editor.commands.set(new Oe(this.editor)),this._toolbar("Table"),this._focusbar("Add column","tablecolumn-add"),this._focusbar("Add row","tablerow-add")}#t(t){return{name:t,group:o.TABLESECTION,children:[o.TABLEROW]}}#e(t){return{name:t,group:o.TABLECELL,children:[o.BREAK,o.FORMAT],editable:!0,empty:!0}}};var Ie=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("datetime",this._("Machine-readable Datetime"),{placeholder:this._("Insert date/time or leave empty to remove it")})}};var Ce=class extends n{static get name(){return"time"}static get dependencies(){return[m]}init(){this._tag({name:r.TIME,group:o.FORMAT,attributes:["datetime"]}),this.editor.dialogs.set(new Ie(this.editor,this.constructor.name)),this._command(r.TIME),this._formatbar("Time",d.T)}};var Ne=class extends n{static get name(){return"underline"}static get dependencies(){return[m]}init(){this._tag({name:r.U,group:o.FORMAT}),this._command(r.U),this._formatbar("underline",d.U)}};var _e=class extends n{static get name(){return"unorderedlist"}static get dependencies(){return[m,K]}init(){this._tag({name:r.UL,group:o.LIST,children:[o.LISTITEM],arbitrary:!0,deletable:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.UL),this._toolbar("Unordered List")}};var Me=class extends n{static get name(){return"variable"}static get dependencies(){return[m]}init(){this._tag({name:r.VAR,group:o.FORMAT}),this._command(r.VAR),this._formatbar("Variable",d.V)}};var Se=class extends u{_prepareForm(){this.formCreator.addLegend(this._("Video")).addTextInput("src",this._("URL"),{pattern:"(https?|/).+",placeholder:this._("Insert URL to video"),required:"required"}).addNumberInput("width",this._("Width")).addNumberInput("height",this._("Height")).addTextInput("id",this._("ID"))}};var Be=class extends h{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertvideo",this)}sethtml({detail:{element:t}}){Array.from(t.getElementsByTagName(r.VIDEO)).forEach(e=>this.#t(e))}insertvideo({detail:{element:t}}){this.#t(t)}#t(t){let e=t.getAttribute("src");e?(t.setAttribute("src",this.editor.url(e)),t.controls=!0,this.editor.dom.wrap(t,r.FIGURE,{attributes:{class:z.name}})):t.parentElement.removeChild(t)}};var z=class extends n{static get name(){return"video"}static get dependencies(){return[m,O]}static get config(){return{browser:void 0}}init(){this._tag({name:r.VIDEO,group:o.VIDEO,attributes:["controls","height","id","src","width"],empty:!0,navigable:!0}),new Be(this.editor),this.editor.dialogs.set(new Se(this.editor,this.constructor.name,this.editor.config.video.browser)),this._command(r.VIDEO),this._toolbar("Video")}};var Pe=class extends x{static get defaultConfig(){return{base:{plugins:[jt,It,Zt,ue,Kt,Ne,fe,ee,re,he,Bt,P,de,Ct,Nt,Xt,me,Me,ge,Ee,Ce,Mt,Yt,Dt,se,zt,pe,_e,oe,Wt,_,k,z,U,G,N,M,ce,Ut,kt,Rt]}}}};export{Pe as default};
package/license.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2024 Ayhan Akilli
1
+ Copyright (c) 2026 Ayhan Akilli
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
4
4
  documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
package/package.json CHANGED
@@ -1,48 +1,48 @@
1
1
  {
2
- "name": "@akilli/editor",
3
- "version": "5.2.7",
4
- "description": "A HTML standards-compliant and dependency-free rich text editor",
5
- "keywords": [
6
- "contenteditable",
7
- "editor",
8
- "html-editor",
9
- "rte",
10
- "rich-text",
11
- "rich-text-editor",
12
- "wysiwyg",
13
- "wysiwyg-editor"
14
- ],
15
- "author": "Ayhan Akilli",
16
- "license": "MIT",
17
- "bugs": "https://github.com/akilli/editor/issues",
18
- "repository": {
19
- "type": "git",
20
- "url": "https://github.com/akilli/editor.git"
21
- },
22
- "type": "module",
23
- "browser": "./dist/editor.js",
24
- "files": [
25
- "dist"
26
- ],
27
- "workspaces": [
28
- "src"
29
- ],
30
- "scripts": {
31
- "start": "npx --yes servor --reload . index.html 20000",
32
- "lint": "prettier --check '**/*.js'",
33
- "lint:fix": "prettier --write '**/*.js'",
34
- "build": "npm run build:clean && npm run build:font && npm run build:css && npm run build:js",
35
- "build:clean": "rm -rf dist",
36
- "build:font": "mkdir -p dist && cp src/build/editor.woff2 dist/editor.woff2",
37
- "build:css": "esbuild src/build/editor.css --minify --outfile=dist/editor.css",
38
- "build:js": "node ./build.js",
39
- "release:patch": "./release patch",
40
- "release:minor": "./release minor",
41
- "release:major": "./release major"
42
- },
43
- "devDependencies": {
44
- "@akilli/editor-src": "^5.2.7",
45
- "esbuild": "^0.24.2",
46
- "prettier": "^3.4.2"
47
- }
2
+ "name": "@akilli/editor",
3
+ "version": "5.3.0",
4
+ "description": "A HTML standards-compliant and dependency-free rich text editor",
5
+ "keywords": [
6
+ "contenteditable",
7
+ "editor",
8
+ "html-editor",
9
+ "rte",
10
+ "rich-text",
11
+ "rich-text-editor",
12
+ "wysiwyg",
13
+ "wysiwyg-editor"
14
+ ],
15
+ "author": "Ayhan Akilli",
16
+ "license": "MIT",
17
+ "bugs": "https://github.com/akilli/editor/issues",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/akilli/editor.git"
21
+ },
22
+ "type": "module",
23
+ "browser": "./dist/editor.js",
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "workspaces": [
28
+ "src"
29
+ ],
30
+ "scripts": {
31
+ "start": "npx --yes servor --reload . index.html 20000",
32
+ "lint": "prettier --check '**/*.js'",
33
+ "lint:fix": "prettier --write '**/*.js'",
34
+ "build": "npm run build:clean && npm run build:font && npm run build:css && npm run build:js",
35
+ "build:clean": "rm -rf dist",
36
+ "build:font": "mkdir -p dist && cp src/build/editor.woff2 dist/editor.woff2",
37
+ "build:css": "esbuild src/build/editor.css --minify --outfile=dist/editor.css",
38
+ "build:js": "node ./build.js",
39
+ "release:patch": "./release patch",
40
+ "release:minor": "./release minor",
41
+ "release:major": "./release major"
42
+ },
43
+ "devDependencies": {
44
+ "@akilli/editor-src": "^5.3.0",
45
+ "esbuild": "^0.28.0",
46
+ "prettier": "^3.8.3"
47
+ }
48
48
  }