@akilli/editor 4.8.3 → 5.0.1
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/README.md +18 -24
- package/dist/editor.css +1 -1
- package/dist/editor.js +2 -2
- package/dist/editor.woff2 +0 -0
- package/package.json +11 -7
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
1
3
|
# akilli editor
|
|
2
4
|
|
|
3
5
|
A HTML standards-compliant and dependency-free rich text editor.
|
|
@@ -68,9 +70,17 @@ the sibling elements.
|
|
|
68
70
|
|
|
69
71
|
### `Enter` key handling
|
|
70
72
|
|
|
71
|
-
After adding the first widget into the content area, you can also use the `Enter` key to add a new
|
|
72
|
-
on the widget, this new paragraph will be created inside the widget itself or on
|
|
73
|
-
|
|
73
|
+
After adding the first widget into the content area, you can also use the `Enter` key to add a new one. In most cases
|
|
74
|
+
this will be a new paragraph. Depending on the widget, this new paragraph will be created inside the widget itself or on
|
|
75
|
+
top-level.
|
|
76
|
+
|
|
77
|
+
Within lists the `Enter` key will add a new list item. Within tables it's either a new row or new column, depending on
|
|
78
|
+
wheter a row or a column currently is focused.
|
|
79
|
+
|
|
80
|
+
### `Backspace` key handling
|
|
81
|
+
|
|
82
|
+
Certain editable elements like p. e. paragraphs and headings remove themselves if they contain no text and the
|
|
83
|
+
`Backspace` key is pressed. Other (pseudo) elements like p. e. table rows and colums do the same.
|
|
74
84
|
|
|
75
85
|
### Sortable elements
|
|
76
86
|
|
|
@@ -94,22 +104,6 @@ Figure widgets like blockquote, table or media elements allow changing alignment
|
|
|
94
104
|
class `left`, `center` or `right`. This is done by combining the `Shift` key with the `ArrowLeft` (`left`)
|
|
95
105
|
, `ArrowDown` (`center`) or `ArrowRight` (`right`) or `ArrowUp` (*removes CSS classes*) keys.
|
|
96
106
|
|
|
97
|
-
### Table widget keyboard shortcuts
|
|
98
|
-
|
|
99
|
-
The keyboard shortcuts within a table slightly differ due to the nature of table elements. Navigating, sorting, adding
|
|
100
|
-
and deleting shortcuts use the **arrow keys** `ArrowLeft`, `ArrowRight`, `ArrowUp`, `ArrowDown`. Note that sorting,
|
|
101
|
-
adding and deleting take the table section (`thead`, `tbody`, `tfoot`) into account.
|
|
102
|
-
|
|
103
|
-
To navigate among the cells and rows use one of the **arrow keys**.
|
|
104
|
-
|
|
105
|
-
To sort a table row/column combine the `Control` key with one of the **arrow keys**.
|
|
106
|
-
|
|
107
|
-
To add a new row/column before/after the currently focused table cell combine the `Alt` key with one of the **arrow
|
|
108
|
-
keys**.
|
|
109
|
-
|
|
110
|
-
To delete the row/column before/after the currently focused table cell combine the `Alt` and `Shift` keys with one of
|
|
111
|
-
the **arrow keys**.
|
|
112
|
-
|
|
113
107
|
### Text-level elements
|
|
114
108
|
|
|
115
109
|
Each formatting command registers a keyboard shortcut in the form `Alt` + `Shift` + a letter. If you hover a formatbar
|
|
@@ -190,7 +184,7 @@ const config = {
|
|
|
190
184
|
* If browser URL is provided, an audio browser dialog is used to insert new audio elements instead of the
|
|
191
185
|
* default audio dialog that provides just a simple form to set the src attribute.
|
|
192
186
|
*
|
|
193
|
-
* @see
|
|
187
|
+
* @see AudioDialog.constructor
|
|
194
188
|
* @type {string|undefined}
|
|
195
189
|
*/
|
|
196
190
|
browser: undefined,
|
|
@@ -219,7 +213,7 @@ const config = {
|
|
|
219
213
|
* If browser URL is provided, a block browser dialog is used to insert new block elements instead of the
|
|
220
214
|
* default block dialog that provides just a simple form to set the id attribute.
|
|
221
215
|
*
|
|
222
|
-
* @see
|
|
216
|
+
* @see BlockDialog.constructor
|
|
223
217
|
* @type {string|undefined}
|
|
224
218
|
*/
|
|
225
219
|
browser: undefined,
|
|
@@ -243,7 +237,7 @@ const config = {
|
|
|
243
237
|
* If browser URL is provided, an iframe browser dialog is used to insert new iframe elements instead of the
|
|
244
238
|
* default iframe dialog that provides just a simple form to set the src, width and height attributes.
|
|
245
239
|
*
|
|
246
|
-
* @see
|
|
240
|
+
* @see IframeDialog.constructor
|
|
247
241
|
* @type {string|undefined}
|
|
248
242
|
*/
|
|
249
243
|
browser: undefined,
|
|
@@ -259,7 +253,7 @@ const config = {
|
|
|
259
253
|
* If browser URL is provided, an image browser dialog is used to insert new image elements instead of the
|
|
260
254
|
* default image dialog that provides just a simple form to set the src, alt, width and height attributes.
|
|
261
255
|
*
|
|
262
|
-
* @see
|
|
256
|
+
* @see ImageDialog.constructor
|
|
263
257
|
* @type {string|undefined}
|
|
264
258
|
*/
|
|
265
259
|
browser: undefined,
|
|
@@ -275,7 +269,7 @@ const config = {
|
|
|
275
269
|
* If browser URL is provided, a video browser dialog is used to insert new video elements instead of the
|
|
276
270
|
* default video dialog that provides just a simple form to set the src, width and height attributes.
|
|
277
271
|
*
|
|
278
|
-
* @see
|
|
272
|
+
* @see VideoDialog.constructor
|
|
279
273
|
* @type {string|undefined}
|
|
280
274
|
*/
|
|
281
275
|
browser: undefined,
|
package/dist/editor.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--editor-block-background: #
|
|
1
|
+
:root{--editor-block-background: #012022;--editor-block-color: #fff;--editor-border: #01202233;--editor-button-background: #012022;--editor-button-color: #fff;--editor-cancel-background: #e3e7e7;--editor-cancel-color: #012022;--editor-dialog-background: #fff;--editor-dialog-color: #012022;--editor-error: #cc2e2c;--editor-focus: #fcece1;--editor-placeholder: #01202233;--editor-slot: #09575c;--editor-sortover: #012022;--editor-toolbar-background: #fff;--editor-toolbar-color: #012022;--editor-text-block: "Block: " attr(id);--editor-text-editable: "Gimme some text!";--editor-text-root: "Gimme some widgets!";--editor-text-slot: "Focus this slot and gimme some widgets!";--editor-text-tablecol: "Col ";--editor-text-tablebodyrow: "Row ";--editor-text-tablefootrow: "Foot ";--editor-text-tableheadrow: "Head "}akilli-editor[lang=de]{--editor-text-editable: "Gib mir Text!";--editor-text-root: "Gib mir Widgets!";--editor-text-slot: "Fokussiere diesen Slot und gib mir Widgets!";--editor-text-tablecol: "Spalte ";--editor-text-tablebodyrow: "Zeile ";--editor-text-tablefootrow: "Fu\df ";--editor-text-tableheadrow: "Kopf "}::backdrop{--editor-dialog-backdrop: #000000cc}@font-face{font-family:editor;font-display:block;font-style:normal;font-weight:900;src:url(editor.woff2) format("woff2")}akilli-editor{position:relative;display:block}akilli-editor editor-root{display:block;width:100%;padding:.75rem .6875rem .6875rem;overflow:auto;border:.0625rem solid var(--editor-border);border-top:0}akilli-editor editor-root:empty:after{color:var(--editor-placeholder);content:var(--editor-text-root)}akilli-editor editor-root :focus{outline:.25rem dashed var(--editor-focus)}akilli-editor editor-root [contenteditable]{min-height:1.5rem}akilli-editor editor-root [contenteditable=true]:empty:after{color:var(--editor-placeholder);content:var(--editor-text-editable)}akilli-editor editor-root :is(td,th)[contenteditable]{height:1.5rem}akilli-editor editor-root slot[contenteditable]{display:block;padding:.25rem;clear:both;border:.25rem solid var(--editor-slot)}akilli-editor editor-root slot[contenteditable=true]:empty:after{color:var(--editor-slot);content:var(--editor-text-slot)}akilli-editor editor-root [contenteditable=true] :hover{cursor:context-menu}akilli-editor editor-root [data-sortable][data-sort]:hover{cursor:grab}akilli-editor editor-root :is([data-sortover],[contenteditable][data-sortover]){outline:.25rem dashed var(--editor-sortover)}akilli-editor editor-root :is(details,div,section){overflow:auto}akilli-editor editor-root :is(audio,iframe,img,video){pointer-events:none}akilli-editor editor-root :is(thead,tbody,tfoot){counter-reset:rows}akilli-editor editor-root colgroup{display:table-header-group;counter-reset:cols}akilli-editor editor-root col,akilli-editor editor-root :is(colgroup,tr):before{display:table-cell;height:1.5rem;line-height:1.5rem;vertical-align:middle;text-align:center;color:var(--editor-placeholder)}akilli-editor editor-root col:after{counter-increment:cols;content:var(--editor-text-tablecol) counter(cols)}akilli-editor editor-root colgroup:before{content:" "}akilli-editor editor-root tr:before{counter-increment:rows;content:var(--editor-text-tablebodyrow) counter(rows)}akilli-editor editor-root thead tr:before{content:var(--editor-text-tableheadrow) counter(rows)}akilli-editor editor-root tfoot tr:before{content:var(--editor-text-tablefootrow) counter(rows)}akilli-editor editor-root col:focus,akilli-editor editor-root tr:focus:before{background:var(--editor-focus)}akilli-editor editor-root summary{white-space:pre-wrap}akilli-editor editor-root app-block{display:block;padding:.25rem;border:.0625rem solid var(--editor-block-background)}akilli-editor editor-root app-block:before{display:block;margin:-.25rem -.25rem .5rem;padding:.125rem .25rem;color:var(--editor-block-color);background:var(--editor-block-background);content:var(--editor-text-block)}akilli-editor dialog::backdrop{background:var(--editor-dialog-backdrop)}akilli-editor dialog form{padding:.75rem;color:var(--editor-dialog-color);background:var(--editor-dialog-background)}akilli-editor dialog :is(form,fieldset)>:not(:first-child){margin-top:1.5rem}akilli-editor dialog legend{font-size:1.25rem}akilli-editor dialog label{display:block}akilli-editor dialog [data-required] label:after{content:" *"}akilli-editor dialog button{padding:.75rem;color:var(--editor-button-color);background:var(--editor-button-background)}akilli-editor dialog button+button{margin-left:1.5rem}akilli-editor dialog button[type=reset]{color:var(--editor-cancel-color);background:var(--editor-cancel-background)}akilli-editor dialog input:is([type=email],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=url]),akilli-editor dialog select{width:100%;padding:.71875rem 0;border-bottom:.0625rem solid var(--editor-border)}akilli-editor dialog input:is([type=email],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=url]):invalid,akilli-editor dialog select:invalid{border-color:var(--editor-error)}akilli-editor editor-toolbar{position:sticky;top:0;display:flex;flex-wrap:wrap;color:var(--editor-toolbar-color);background:var(--editor-toolbar-background);border:.0625rem solid var(--editor-border)}akilli-editor :is(editor-focusbar,editor-formatbar){position:absolute;left:0;display:flex;flex-wrap:wrap;color:var(--editor-toolbar-color);background:var(--editor-toolbar-background);border:.0625rem solid var(--editor-border)}akilli-editor editor-focusbar:empty,akilli-editor editor-focusbar [data-command]{display:none}akilli-editor editor-focusbar[data-alignable] [data-command^=align-],akilli-editor editor-focusbar[data-deletable] [data-command=delete],akilli-editor editor-focusbar[data-sortable] [data-command^=sort-]{display:inline-block}akilli-editor [data-command]{display:inline-block;line-height:1;padding:.25rem .5rem;font-family:editor;font-size:0}akilli-editor [data-command]:focus{color:var(--editor-focus)}akilli-editor [data-command]:before{font-size:1.5rem}akilli-editor [data-command=abbreviation]:before{content:"\e800"}akilli-editor [data-command=align-center]:before{content:"\e801"}akilli-editor [data-command=align-left]:before{content:"\e802"}akilli-editor [data-command=align-none]:before{content:"\e803"}akilli-editor [data-command=align-right]:before{content:"\e804"}akilli-editor [data-command=audio]:before{content:"\e805"}akilli-editor [data-command=block]:before{content:"\e806"}akilli-editor [data-command=blockquote]:before{content:"\e807"}akilli-editor [data-command=bold]:before{content:"\e808"}akilli-editor [data-command=cite]:before{content:"\e809"}akilli-editor [data-command=code]:before{content:"\e80a"}akilli-editor [data-command=data]:before{content:"\e80b"}akilli-editor [data-command=definition]:before{content:"\e80c"}akilli-editor [data-command=delete]:before{content:"\e80d"}akilli-editor [data-command=deletion]:before{content:"\e80e"}akilli-editor [data-command=details]:before{content:"\e80f"}akilli-editor [data-command=division]:before{content:"\e810"}akilli-editor [data-command=emphasis]:before{content:"\e811"}akilli-editor [data-command=heading]:before{content:"\e812"}akilli-editor [data-command=horizontalrule]:before{content:"\e813"}akilli-editor [data-command=iframe]:before{content:"\e814"}akilli-editor [data-command=image]:before{content:"\e815"}akilli-editor [data-command=insertion]:before{content:"\e816"}akilli-editor [data-command=italic]:before{content:"\e817"}akilli-editor [data-command=keyboard]:before{content:"\e818"}akilli-editor [data-command=link]:before{content:"\e819"}akilli-editor [data-command=mark]:before{content:"\e81a"}akilli-editor [data-command=orderedlist]:before{content:"\e81b"}akilli-editor [data-command=paragraph]:before{content:"\e81c"}akilli-editor [data-command=preformat]:before{content:"\e81d"}akilli-editor [data-command=quote]:before{content:"\e81e"}akilli-editor [data-command=sample]:before{content:"\e81f"}akilli-editor [data-command=section]:before{content:"\e820"}akilli-editor [data-command=small]:before{content:"\e821"}akilli-editor [data-command=sort-first]:before{content:"\e822"}akilli-editor [data-command=sort-last]:before{content:"\e823"}akilli-editor [data-command=sort-next]:before{content:"\e824"}akilli-editor [data-command=sort-prev]:before{content:"\e825"}akilli-editor [data-command=strikethrough]:before{content:"\e826"}akilli-editor [data-command=strong]:before{content:"\e827"}akilli-editor [data-command=subheading]:before{content:"\e828"}akilli-editor [data-command=subscript]:before{content:"\e829"}akilli-editor [data-command=superscript]:before{content:"\e82a"}akilli-editor [data-command=table]:before{content:"\e82b"}akilli-editor [data-command=time]:before{content:"\e82c"}akilli-editor [data-command=underline]:before{content:"\e82d"}akilli-editor [data-command=unorderedlist]:before{content:"\e82e"}akilli-editor [data-command=variable]:before{content:"\e82f"}akilli-editor [data-command=video]:before{content:"\e830"}
|
package/dist/editor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Ho=Object.defineProperty;var Po=(s,t,e)=>t in s?Ho(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var D=(s,t,e)=>(Po(s,typeof t!="symbol"?t+"":t,e),e),ui=(s,t,e)=>{if(!t.has(s))throw TypeError("Cannot "+e)};var m=(s,t,e)=>(ui(s,t,"read from private field"),e?e.call(s):t.get(s)),d=(s,t,e)=>{if(t.has(s))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(s):t.set(s,e)},E=(s,t,e,i)=>(ui(s,t,"write to private field"),i?i.call(s,e):t.set(s,e),e);var p=(s,t,e)=>(ui(s,t,"access private method"),e);var S=Object.freeze({CENTER:"center",LEFT:"left",NONE:"none",RIGHT:"right"}),u=Object.freeze({INVALID_ARGUMENT:"Invalid argument",MISSING_NAME:"Missing name",NOT_IMPLEMENTED:"Not implemented"}),a=Object.freeze({A:"a",B:"b",BACKSPACE:"Backspace",C:"c",D:"d",DEL:"Delete",DOWN:"ArrowDown",E:"e",END:"End",ENTER:"Enter",ESC:"Escape",F:"f",G:"g",HOME:"Home",I:"i",J:"j",K:"k",L:"l",LEFT:"ArrowLeft",M:"m",O:"o",Q:"q",R:"r",RIGHT:"ArrowRight",S:"s",SPACE:" ",T:"t",TAB:"Tab",U:"u",UP:"ArrowUp",V:"v",W:"w",X:"x",Y:"y",Z:"z"}),x=Object.freeze({AFTERBEGIN:"afterbegin",AFTEREND:"afterend",BEFOREBEGIN:"beforebegin",BEFOREEND:"beforeend"}),R=Object.freeze({FIRST:"first",LAST:"last",NEXT:"next",PREV:"prev"}),o=Object.freeze({AUDIO:"audio",BLOCK:"block",BREAK:"break",CAPTION:"caption",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"}),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",DATA:"data",DEL:"del",DETAILS:"details",DFN:"dfn",DIALOG:"editor-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"}),qr=Object.freeze({FUNCTION:"function",STRING:"string",UNDEFINED:"undefined"});function I(s,t,{alt:e=!1,ctrl:i=!1,shift:n=!1}={}){return(Array.isArray(t)&&t.includes(s.key)||s.key===t)&&s.altKey===e&&s.ctrlKey===i&&s.shiftKey===n}function Rt(s){return typeof s===qr.UNDEFINED}function $(s){return typeof s===qr.FUNCTION}function N(s){return s&&typeof s===qr.STRING}function Q(s){return Rt(s)||N(s)}function gi(s){return Rt(s)||Array.isArray(s)&&s.length>0}function Ei(s){return Rt(s)||s instanceof HTMLElement}var Mt,Ot,yt,Dt,St,bi,Ct,Ti,C=class{constructor(t,e,i=void 0){d(this,St);d(this,Ct);d(this,Mt,void 0);d(this,Ot,void 0);d(this,yt,void 0);d(this,Dt,void 0);if(!(t instanceof O)||!N(e)||!Q(i))throw new Error(u.INVALID_ARGUMENT);E(this,Mt,t),E(this,Ot,e),E(this,yt,i&&this.editor.tags.get(i)),E(this,Dt,this.editor.dialogs.get(e))}get editor(){return m(this,Mt)}get name(){return m(this,Ot)}get tag(){return m(this,yt)}get dialog(){return m(this,Dt)}execute(){this.dialog?this.openDialog():this.insert(p(this,St,bi).call(this))}insert(t={}){if(!this.tag)return;p(this,Ct,Ti).call(this,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),p(this,St,bi).call(this))}};Mt=new WeakMap,Ot=new WeakMap,yt=new WeakMap,Dt=new WeakMap,St=new WeakSet,bi=function(){if(!this.tag)return{};let t=this.editor.dom.getSelectedAttributesByName(this.tag.name);return p(this,Ct,Ti).call(this,t),t},Ct=new WeakSet,Ti=function(t){Object.keys(t).forEach(e=>this.tag.attributes.includes(e)&&t[e]||delete t[e])};var Y,Bt=class{constructor(t=[]){d(this,Y,new Map);t.forEach(e=>this.set(e))}get(t){return m(this,Y).get(t)}set(t){if(!(t instanceof C))throw new Error(u.INVALID_ARGUMENT);m(this,Y).set(t.name,t)}find(t){return Array.from(m(this,Y).values()).find(e=>e.tag?.name===t)}execute(t){this.get(t).execute()}freeze(){m(this,Y).forEach(t=>Object.freeze(t)),Object.freeze(m(this,Y)),Object.freeze(this)}};Y=new WeakMap;var et,Ft=class{constructor(t=[]){d(this,et,new Map);t.forEach(e=>this.set(e))}get(t){return m(this,et).get(t)}set(t){if(!(t instanceof A))throw new Error(u.INVALID_ARGUMENT);m(this,et).set(t.name,t)}freeze(){m(this,et).forEach(t=>Object.freeze(t)),Object.freeze(m(this,et)),Object.freeze(this)}};et=new WeakMap;var Lt,xt,Wr,$r,Hi,Z=class{constructor(t){d(this,xt);d(this,$r);d(this,Lt,void 0);if(!(t instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);E(this,Lt,t),this.register(p(this,$r,Hi).bind(this))}dispatch(t,e=void 0,i=void 0){if(!N(t)||!Ei(e)||!Ei(i))throw new Error(u.INVALID_ARGUMENT);m(this,Lt).dispatchEvent(new CustomEvent(t,{detail:{element:e,target:i}}))}register(t,e={childList:!0,subtree:!0}){if(!$(t))throw new Error(u.INVALID_ARGUMENT);new MutationObserver(t).observe(m(this,Lt),e)}};Lt=new WeakMap,xt=new WeakSet,Wr=function(t,e,i){e instanceof HTMLElement&&i instanceof HTMLElement&&(this.dispatch(t,e,i),this.dispatch(`${t}${e.localName.replace("-","")}`,e,i))},$r=new WeakSet,Hi=function(t){t.forEach(e=>{e.addedNodes.forEach(i=>{i instanceof HTMLElement&&(p(this,xt,Wr).call(this,"insert",i,e.target),Array.from(i.getElementsByTagName(r.ALL)).forEach(n=>p(this,xt,Wr).call(this,"insert",n,e.target)))}),e.removedNodes.forEach(i=>i instanceof HTMLElement&&p(this,xt,Wr).call(this,"delete",i,e.target))})};var Gt,Ut,Ht,Pt,Qr,Yr,Pi,rt=class{constructor(t,e){d(this,Yr);d(this,Gt,void 0);d(this,Ut,void 0);d(this,Ht,void 0);d(this,Pt,void 0);d(this,Qr,{alwaysRaised:"yes",dependent:"yes",height:"",location:"no",menubar:"no",minimizable:"no",modal:"yes",resizable:"yes",scrollbars:"yes",toolbar:"no",width:""});if(!(t instanceof O)||!(e instanceof Document))throw new Error(u.INVALID_ARGUMENT);E(this,Gt,t),E(this,Ut,e),E(this,Ht,this.document.defaultView),E(this,Pt,this.document.documentElement)}get editor(){return m(this,Gt)}get document(){return m(this,Ut)}get window(){return m(this,Ht)}get root(){return m(this,Pt)}registerElement(t,e,i=void 0){Rt(this.window.customElements.get(t))&&this.window.customElements.define(t,e,i?{extends:i}:void 0)}createElement(t,{attributes:e={},html:i=""}={}){let n=this.document.createElement(t);return n.innerHTML=i,Object.entries(e).forEach(([c,f])=>f&&n.setAttribute(c,`${f}`)),n}insert(t){if(!(t instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);let e=this.getSelectedEditable();if(e instanceof HTMLSlotElement&&this.editor.tags.allowed(e.parentElement,t))e.insertAdjacentElement(x.BEFOREBEGIN,t);else if(e)this.closest(e,t)?.insertAdjacentElement(x.AFTEREND,t),e.hasAttribute("data-deletable")&&!e.textContent.trim()&&e.parentElement.removeChild(e);else if(this.editor.tags.allowed(this.editor.root,t))this.editor.root.appendChild(t);else throw new Error(u.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 Error(u.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 n=e.toString(),c=Array.from(e.cloneContents().childNodes).every(f=>f instanceof Text&&!f.textContent.trim()||f instanceof HTMLElement&&f.localName===t.localName);e.deleteContents(),c?e.insertNode(this.createText(n)):(t.textContent=n,e.insertNode(t)),i.normalize()}createText(t){return this.document.createTextNode(t)}createTable(t=1,e=1){let i=this.createElement(r.TABLE),n=this.createElement(r.TBODY);for(let c=0;c<t;c++)this.createTableRow(n,e,c);return i.appendChild(n),i}createTableRow(t,e,i=0){if(!(t instanceof HTMLTableElement)&&!(t instanceof HTMLTableSectionElement))throw new Error(u.INVALID_ARGUMENT);let n=t.insertRow(i);for(let c=0;c<e;c++)this.createTableCell(n)}createTableCell(t,e=null){if(!(t instanceof HTMLTableRowElement)||e&&!(e instanceof HTMLTableCellElement))throw new Error(u.INVALID_ARGUMENT);let i=t.parentElement.localName===r.THEAD?r.TH:r.TD;t.insertBefore(this.createElement(i),e)}arbitrary(t){return t===this.editor.root||t?.hasAttribute("data-arbitrary")}contains(t){if(!(t instanceof HTMLElement))throw new Error(u.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 Error(u.INVALID_ARGUMENT);let i=t,n=t.parentElement;do if(this.arbitrary(n)&&this.editor.tags.allowed(n,e))return i;while((i=n)&&(n=n.parentElement)&&this.contains(n))}wrap(t,e,i={}){let n;if(t instanceof HTMLElement){if(t.parentElement.localName!==e&&(n=this.closest(t,e))){let c=this.createElement(e,i);n.insertAdjacentElement(x.AFTEREND,c),c.appendChild(t)}}else throw new Error(u.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(n=>i[n.nodeName]=n.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 n=e.closest("[contenteditable=true]"),c=i.closest("[contenteditable=true]");if(n instanceof HTMLElement&&n===c&&this.contains(n))return n}}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 Error(u.INVALID_ARGUMENT);let e=this.document.createRange();e.selectNodeContents(t),this.setRange(e)}focusEnd(t){if(!(t instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);t.focus();let e=this.document.createRange();e.selectNodeContents(t),e.collapse(),this.setRange(e)}delete(t){if(!(t instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);let e=t.previousElementSibling,i=t.nextElementSibling;t.parentElement.removeChild(t),e instanceof HTMLElement&&e.hasAttribute("data-focusable")?this.focusEnd(e):i instanceof HTMLElement&&i.hasAttribute("data-focusable")&&i.focus()}sort(t,e){if(!(t instanceof HTMLElement)||!Object.values(R).includes(e))throw new Error(u.INVALID_ARGUMENT);let i=t.parentElement,n=t.previousElementSibling,c=t.nextElementSibling,f=i.firstElementChild,b=i.lastElementChild,T=t===f,L=t===b;e===R.PREV&&!T&&n.hasAttribute("data-sortable")?(n.insertAdjacentHTML(x.BEFOREBEGIN,t.outerHTML),i.removeChild(t)):e===R.NEXT&&!L&&c.hasAttribute("data-sortable")?(c.insertAdjacentHTML(x.AFTEREND,t.outerHTML),i.removeChild(t)):(e===R.FIRST&&!T||e===R.NEXT&&L)&&f.hasAttribute("data-sortable")?(f.insertAdjacentHTML(x.BEFOREBEGIN,t.outerHTML),i.removeChild(t)):(e===R.LAST&&!L||e===R.PREV&&T)&&b.hasAttribute("data-sortable")&&(b.insertAdjacentHTML(x.AFTEREND,t.outerHTML),i.removeChild(t))}open({url:t,name:e,call:i,params:n={}}){if(!N(t)||!N(e)||!$(i))throw new Error(u.INVALID_ARGUMENT);let c=this.createElement(r.A,{attributes:{href:t}}),f=new URL(c.href);Object.entries(n).forEach(([T,L])=>f.searchParams.set(T,`${L}`));let b=this.window.open(f.toString(),e,p(this,Yr,Pi).call(this));this.window.addEventListener("message",T=>{T.origin===f.origin&&T.source===b&&(i(T.data),b.close())},!1)}getWidth(){return this.window.screen.width}getHeight(){return this.window.screen.height}};Gt=new WeakMap,Ut=new WeakMap,Ht=new WeakMap,Pt=new WeakMap,Qr=new WeakMap,Yr=new WeakSet,Pi=function(){let t=Object.assign({},m(this,Qr),{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 kt,M=class{constructor(t){d(this,kt,void 0);if(!(t instanceof O))throw new Error(u.INVALID_ARGUMENT);E(this,kt,t)}get editor(){return m(this,kt)}filter(t){throw new Error(u.NOT_IMPLEMENTED)}};kt=new WeakMap;var it,vt=class{constructor(){d(this,it,new Set)}add(t){if(!(t instanceof M))throw new Error(u.INVALID_ARGUMENT);m(this,it).add(t)}filter(t){if(!(t instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);m(this,it).forEach(e=>{t.normalize(),e.filter(t)})}freeze(){m(this,it).forEach(t=>Object.freeze(t)),Object.freeze(m(this,it)),Object.freeze(this)}};it=new WeakMap;var ot=class{constructor({name:t,group:e,...i}={}){D(this,"name");D(this,"group");D(this,"children");D(this,"attributes");D(this,"alignable");D(this,"arbitrary");D(this,"deletable");D(this,"editable");D(this,"empty");D(this,"focusable");D(this,"navigable");D(this,"slotable");D(this,"sortable");D(this,"enter");if(!N(t)||!N(e)||!gi(i.children)||!gi(i.attributes)||!Q(i.enter))throw new Error(u.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 Vt,It,Zr,l=class{constructor(t){d(this,It);d(this,Vt,void 0);if(!(t instanceof O))throw new Error(u.INVALID_ARGUMENT);E(this,Vt,t)}get editor(){return m(this,Vt)}static get name(){throw new Error(u.MISSING_NAME)}static get dependencies(){return[]}static get config(){return{}}init(){throw new Error(u.NOT_IMPLEMENTED)}_(t){return this.editor.translator.translate(this.constructor.name,t)}_base(t){return this.editor.translator.translate("base",t)}_i18n(t){t[this.editor.config.base.lang]&&this.editor.translator.set(this.constructor.name,t[this.editor.config.base.lang])}_tag(t){this.editor.tags.set(new ot(t))}_command(t){this.editor.commands.set(new C(this.editor,this.constructor.name,t))}_toolbar(t,e=void 0){this.editor.toolbar.appendChild(p(this,It,Zr).call(this,t,t,void 0,e))}_formatbar(t,e=void 0,i=void 0){let n=this._base("Alt"),c=this._base("Shift"),f=t+(e?` [${n} + ${c} + ${e}]`:"");this.editor.formatbar.appendChild(p(this,It,Zr).call(this,t,f,e,i))}_focusbar(t,e=void 0){this.editor.focusbar.appendChild(p(this,It,Zr).call(this,t,t,void 0,e))}};Vt=new WeakMap,It=new WeakSet,Zr=function(t,e,i=void 0,n=void 0){if(!N(t)||!N(e)||!Q(i))throw new Error(u.INVALID_ARGUMENT);return this.editor.dom.createElement(r.BUTTON,{attributes:{type:"button",title:e,"data-command":n||this.constructor.name,"data-key":i},html:t})};var X,Kt=class{constructor(t=[]){d(this,X,new Map);t.forEach(e=>this.set(e))}get(t){return m(this,X).get(t)}set(t){if(!(t instanceof l))throw new Error(u.INVALID_ARGUMENT);m(this,X).set(t.constructor.name,t)}init(){m(this,X).forEach(t=>t.init())}freeze(){m(this,X).forEach(t=>Object.freeze(t)),Object.freeze(m(this,X)),Object.freeze(this)}};X=new WeakMap;var st,jt=class{constructor(t=[]){d(this,st,new Map);t.forEach(e=>this.set(e))}get(t){return m(this,st).get(t instanceof HTMLElement?t.localName:t)}set(t){if(!(t instanceof ot))throw new Error(u.INVALID_ARGUMENT);m(this,st).set(t.name,t)}allowed(t,e,i=!1){let n=i?e:this.get(e)?.group;return!!this.get(t)?.children.includes(n)}freeze(){m(this,st).forEach(t=>{Object.freeze(t.children),Object.freeze(t.attributes),Object.freeze(t)}),Object.freeze(m(this,st)),Object.freeze(this)}};st=new WeakMap;var at,zt=class{constructor(){d(this,at,new Map)}get(t){return m(this,at).get(t)}set(t,e){if(!N(t)||!(e instanceof Object))throw new Error(u.INVALID_ARGUMENT);m(this,at).set(t,e)}translate(t,e){return this.get(t)?.[e]||e}freeze(){m(this,at).forEach(t=>Object.freeze(t)),Object.freeze(m(this,at)),Object.freeze(this)}};at=new WeakMap;var qt,Nt,Wt,$t,Qt,Yt,Zt,Xt,Jt,te,ee,re,Xr,Jr,ti,ei,ri,ii,O=class{constructor(t,e={}){d(this,qt,void 0);d(this,Nt,{});d(this,Wt,void 0);d(this,$t,void 0);d(this,Qt,void 0);d(this,Yt,void 0);d(this,Zt,void 0);d(this,Xt,void 0);d(this,Jt,void 0);d(this,te,void 0);d(this,ee,void 0);d(this,re,void 0);d(this,Xr,new zt);d(this,Jr,new jt);d(this,ti,new vt);d(this,ei,new Ft);d(this,ri,new Bt);d(this,ii,new Kt);if(!(t instanceof HTMLElement)||!(e instanceof Object))throw new Error(u.INVALID_ARGUMENT);E(this,qt,t),E(this,Nt,e),E(this,Wt,new rt(this,this.orig.ownerDocument)),E(this,$t,this.dom.createElement(r.EDITOR)),E(this,Qt,this.dom.createElement(r.TOOLBAR,{attributes:{role:"toolbar"}})),this.element.appendChild(this.toolbar),E(this,Yt,new Z(this.toolbar)),E(this,Zt,this.dom.createElement(r.FORMATBAR,{attributes:{role:"toolbar"}})),this.formatbar.hidden=!0,this.element.appendChild(this.formatbar),E(this,Xt,new Z(this.formatbar)),E(this,Jt,this.dom.createElement(r.FOCUSBAR,{attributes:{role:"toolbar"}})),this.focusbar.hidden=!0,this.element.appendChild(this.focusbar),E(this,te,new Z(this.focusbar)),E(this,ee,this.dom.createElement(r.ROOT)),this.element.appendChild(this.root),E(this,re,new Z(this.root))}get orig(){return m(this,qt)}get config(){return m(this,Nt)}get dom(){return m(this,Wt)}get element(){return m(this,$t)}get toolbar(){return m(this,Qt)}get toolbarDispatcher(){return m(this,Yt)}get formatbar(){return m(this,Zt)}get formatbarDispatcher(){return m(this,Xt)}get focusbar(){return m(this,Jt)}get focusbarDispatcher(){return m(this,te)}get root(){return m(this,ee)}get rootDispatcher(){return m(this,re)}get translator(){return m(this,Xr)}get tags(){return m(this,Jr)}get filters(){return m(this,ti)}get dialogs(){return m(this,ei)}get commands(){return m(this,ri)}get plugins(){return m(this,ii)}static get defaultConfig(){return{}}init(){let t=this.config;E(this,Nt,{});let e=this.constructor.defaultConfig.base?.plugins||[],i=e;if(Array.isArray(t.base?.plugins)&&t.base.plugins.length>0){let f=t.base.plugins;t.base?.pluginsDisabled?i=i.filter(b=>!f.includes(b.name)):(i=[],f.forEach(b=>{let T=e.find(L=>L.name===b);T&&i.push(T)}))}let n=new Set,c=f=>{f.dependencies?.forEach(c),n.add(f)};i.map(c),n.forEach(f=>{Object.entries(f.config).forEach(([b,T])=>{var L,B;(L=this.config)[B=f.name]??(L[B]={}),this.config[f.name][b]=t[f.name]?.[b]||this.constructor.defaultConfig[f.name]?.[b]||T}),this.plugins.set(new f(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),this.translator.freeze(),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("/ /g"," "))):this.setHtml(this.orig.innerHTML),this.orig.insertAdjacentElement(x.AFTEREND,this.element),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")}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}};qt=new WeakMap,Nt=new WeakMap,Wt=new WeakMap,$t=new WeakMap,Qt=new WeakMap,Yt=new WeakMap,Zt=new WeakMap,Xt=new WeakMap,Jt=new WeakMap,te=new WeakMap,ee=new WeakMap,re=new WeakMap,Xr=new WeakMap,Jr=new WeakMap,ti=new WeakMap,ei=new WeakMap,ri=new WeakMap,ii=new WeakMap;var U,J,tt,oi,ki,si,vi,ie=class{constructor(t,e,i,n){d(this,oi);d(this,si);d(this,U,void 0);d(this,J,void 0);d(this,tt,void 0);var c,f;if(!(t instanceof rt)||!N(e)||!N(i)||!$(n))throw new Error(u.INVALID_ARGUMENT);E(this,U,t),E(this,J,m(this,U).createElement(r.FORM,{attributes:{method:"dialog"}})),p(f=p(c=this.addFieldset(),oi,ki).call(c,i,n),si,vi).call(f,e)}get form(){return m(this,J)}addFieldset(){let t=m(this,U).createElement(r.FIELDSET);return m(this,tt)?m(this,tt).insertAdjacentElement(x.AFTEREND,t):m(this,J).insertAdjacentElement(x.AFTERBEGIN,t),E(this,tt,t),this}addLegend(t){if(!N(t))throw new Error(u.INVALID_ARGUMENT);return m(this,tt).appendChild(m(this,U).createElement(r.LEGEND,{html:t})),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={},n="text"){if(!N(t)||!N(e)||!N(n))throw new Error(u.INVALID_ARGUMENT);Object.assign(i,{id:`editor-${t}`,name:t,type:n});let c=m(this,U).createElement(r.DIV);return c.appendChild(m(this,U).createElement(r.LABEL,{attributes:{for:i.id},html:e})),c.appendChild(m(this,U).createElement(r.INPUT,{attributes:i})),i.required&&c.setAttribute("data-required",""),m(this,tt).appendChild(c),this}};U=new WeakMap,J=new WeakMap,tt=new WeakMap,oi=new WeakSet,ki=function(t,e){let i=m(this,U).createElement(r.BUTTON,{attributes:{type:"button"},html:t});return i.addEventListener("click",e),m(this,J).appendChild(i),this},si=new WeakSet,vi=function(t){return m(this,J).appendChild(m(this,U).createElement(r.BUTTON,{html:t})),this};var oe,se,ae,ne,ai,Vi,ni,Ki,de,Ai,A=class{constructor(t,e,i=void 0){d(this,ai);d(this,ni);d(this,de);d(this,oe,void 0);d(this,se,void 0);d(this,ae,void 0);d(this,ne,void 0);if(!(t instanceof O)||!N(e)||!Q(i))throw new Error(u.INVALID_ARGUMENT);E(this,oe,t),E(this,se,e),E(this,ae,i)}get editor(){return m(this,oe)}get name(){return m(this,se)}get url(){return m(this,ae)}get formCreator(){return m(this,ne)}open(t,e={}){this.url?p(this,ai,Vi).call(this,t,e):p(this,ni,Ki).call(this,t,e)}_(t){return this.editor.translator.translate(this.name,t)}_prepareForm(){throw new Error(u.NOT_IMPLEMENTED)}};oe=new WeakMap,se=new WeakMap,ae=new WeakMap,ne=new WeakMap,ai=new WeakSet,Vi=function(t,e={}){this.editor.dom.open({url:this.url,name:this.name,call:t,params:e})},ni=new WeakSet,Ki=function(t,e={}){let i=this.editor.dom.getRange(),n=()=>{i&&this.editor.dom.setRange(i),p(this,de,Ai).call(this)};p(this,de,Ai).call(this),E(this,ne,new ie(this.editor.dom,this._("Save"),this._("Cancel"),n)),this._prepareForm();let c=this.formCreator.form;c.addEventListener("submit",b=>{b.preventDefault(),b.stopPropagation(),n();let T={};Array.from(c.elements).forEach(L=>T[L.name]=L.value),t(T)}),Object.entries(e).forEach(([b,T])=>c.elements[b]&&(c.elements[b].value=T));let f=this.editor.dom.createElement(r.DIALOG);f.addEventListener("close",n),f.appendChild(c),f.show(),this.editor.element.appendChild(f)},de=new WeakSet,Ai=function(){Array.from(this.editor.element.getElementsByTagName(r.DIALOG)).forEach(t=>{t.parentElement.removeChild(t)})};var le=class extends A{constructor(t){super(t,nt.name)}_prepareForm(){this.formCreator.addLegend(this._("Abbreviation")).addTextInput("title",this._("Full term"),{placeholder:this._("Insert full term or leave empty to remove it")})}};var me,g=class{constructor(t){d(this,me,void 0);if(!(t instanceof O))throw new Error(u.INVALID_ARGUMENT);E(this,me,t)}get editor(){return m(this,me)}handleEvent(t){$(this[t.type])&&this[t.type](t)}};me=new WeakMap;var he=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){t.detail.element.hasAttribute("data-alignable")&&t.detail.element.addEventListener("keydown",this)}keydown(t){let e={[a.UP]:S.NONE,[a.LEFT]:S.LEFT,[a.DOWN]:S.CENTER,[a.RIGHT]:S.RIGHT};t.target===t.currentTarget&&I(t,Object.keys(e),{shift:!0})&&(t.preventDefault(),t.stopPropagation(),t.target.classList.remove(...Object.values(e)),e[t.key]!==S.NONE&&t.target.classList.add(e[t.key]))}};var di,ji,fe,Li,ce=class extends M{constructor(){super(...arguments);d(this,di);d(this,fe)}filter(e){let i=this.editor.tags.get(e),n=this.editor.tags.allowed(e,r.P),c=i.editable||i.group===o.FORMAT,f=[],b=(T=null)=>{n&&f.length>0&&(e.insertBefore(this.editor.dom.createElement(r.P,{html:f.join(" ")}),T),f=[])};Array.from(e.childNodes).forEach(T=>{let L=T.textContent.trim();if(T instanceof HTMLElement){let B=p(this,di,ji).call(this,T),W=this.editor.tags.get(B);if(W&&this.editor.tags.allowed(e,B))b(B),p(this,fe,Li).call(this,B,W);else if(W&&W.group===o.FORMAT&&n){let w=p(this,fe,Li).call(this,B,W);w&&(f.push(w.outerHTML),e.removeChild(w))}else!c&&L&&n?(f.push(L),e.removeChild(B)):c&&L?e.replaceChild(this.editor.dom.createText(L),B):e.removeChild(B)}else T instanceof Text?(!c&&L&&n&&f.push(L),(!c||!L)&&e.removeChild(T)):T instanceof Node&&e.removeChild(T)}),b()}};di=new WeakSet,ji=function(e){let i=this.editor.config.base.filter[e.localName];if(!i)return e;let n=this.editor.dom.createElement(i,{html:e.innerHTML});return e.parentElement.replaceChild(n,e),n},fe=new WeakSet,Li=function(e,i){if(Array.from(e.attributes).forEach(n=>!i.attributes.includes(n.name)&&e.removeAttribute(n.name)),e.hasChildNodes()&&this.editor.filters.filter(e),e.hasChildNodes()||i.empty)return e;e.parentElement?.removeChild(e)};var pe=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){t.detail.element.hasAttribute("data-deletable")&&t.detail.element.addEventListener("keydown",this)}keydown(t){t.target===t.currentTarget&&I(t,a.DEL,{ctrl:!0})&&(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation())}};var ue=class extends HTMLElement{get open(){return this.hasAttribute("open")}set open(t){t===!0?this.setAttribute("open",""):this.removeAttribute("open")}constructor(){super(),this.addEventListener("keydown",t=>t.key===a.ESC&&this.close()),this.addEventListener("click",t=>t.target===this&&this.close())}connectedCallback(){this.setAttribute("role","dialog"),this.tabIndex=-1,this.focus()}show(){this.open=!0,this.dispatchEvent(new CustomEvent("show",{detail:{element:this,target:this}}))}close(){this.open=!1,this.dispatchEvent(new CustomEvent("close",{detail:{element:this,target:this}}))}};var ge=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){t.detail.element.contentEditable==="true"?t.detail.element.addEventListener("keydown",this):t.detail.element.parentElement.contentEditable==="true"&&t.detail.element.addEventListener("dblclick",this)}keydown(t){if(I(t,a.ENTER,{shift:!0})&&!this.editor.tags.allowed(t.target,r.BR))t.preventDefault(),t.stopPropagation();else if(I(t,a.ENTER)){t.preventDefault(),t.stopPropagation();let e=this.editor.tags.get(t.target)?.enter;e&&(t.target.textContent.trim()||!t.target.hasAttribute("data-deletable")?this.editor.dom.closest(t.target,e)?.insertAdjacentElement(x.AFTEREND,this.editor.dom.createElement(e)):t.target instanceof HTMLParagraphElement||(this.editor.dom.closest(t.target,r.P)?.insertAdjacentElement(x.AFTEREND,this.editor.dom.createElement(r.P)),t.target.parentElement.removeChild(t.target)))}else I(t,a.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")?(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation()):/^[A-Z]$/.test(t.key)&&I(t,t.key,{alt:!0,shift:!0})&&(t.preventDefault(),t.stopPropagation(),this.editor.formatbar.querySelector(`${r.BUTTON}[data-key=${t.key.toLowerCase()}]`)?.click())}dblclick(t){this.editor.dom.selectContents(t.target),this.editor.commands.find(t.target.localName)?.execute()}};var Ee=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){t.detail.element.hasAttribute("data-focusable")&&t.detail.element.focus()}};var V=class extends g{insertbutton(t){t.detail.element.getAttribute("data-command")&&t.detail.element.addEventListener("click",this)}click(t){this.editor.commands.execute(t.target.getAttribute("data-command"))}keydown(t){if(I(t,[a.LEFT,a.RIGHT,a.HOME,a.END])){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,n=t.target.parentElement.firstElementChild,c=t.target.parentElement.lastElementChild,f=t.target===n,b=t.target===c;t.key===a.LEFT&&!f?e.focus():t.key===a.RIGHT&&!b?i.focus():t.key===a.HOME||t.key===a.RIGHT&&b?n.focus():(t.key===a.END||t.key===a.LEFT&&f)&&c.focus(),t.preventDefault(),t.stopPropagation()}}_show(t,e){if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new Error(u.INVALID_ARGUMENT);t.hidden=!1;let{x:i,y:n}=e.getBoundingClientRect(),{x:c,y:f}=this.editor.root.getBoundingClientRect(),b=i-c+t.clientWidth-this.editor.root.clientWidth,T=n-f-e.scrollTop+this.editor.root.offsetTop-t.clientHeight,L=t.clientWidth<this.editor.root.clientWidth?i-c:0;L>0&&b>0&&(L=L>b?(L-b)/2:0),t.style.left=`${L}px`,t.style.top=`${T}px`}_hide(t){t.hidden=!0,t.removeAttribute("style")}};var Te,xi,Ae,Ii,be=class extends V{constructor(e){super(e);d(this,Te);d(this,Ae);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(e){super.insertbutton(e),e.detail.element.getAttribute("data-command")&&e.detail.element.addEventListener("mousedown",this)}mousedown(e){e.preventDefault(),e.stopPropagation()}focusin(e){e.target instanceof HTMLElement&&e.target.hasAttribute("data-focusable")&&p(this,Te,xi).call(this,e.target)}focusout(){p(this,Ae,Ii).call(this)}selectionchange(){let e=this.editor.dom.getActiveElement();!this.editor.dom.getSelection().isCollapsed||!e?p(this,Ae,Ii).call(this):e instanceof HTMLElement&&e.hasAttribute("data-focusable")&&p(this,Te,xi).call(this,e)}};Te=new WeakSet,xi=function(e){!this.editor.focusbar.children.length||(Object.keys(e.dataset).forEach(i=>this.editor.focusbar.dataset[i]=e.dataset[i]),this.editor.focusbar.dataset.tag=e.localName,this._show(this.editor.focusbar,e))},Ae=new WeakSet,Ii=function(){this._hide(this.editor.focusbar),Object.keys(this.editor.focusbar.dataset).forEach(e=>delete this.editor.focusbar.dataset[e])};var Le=class extends V{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 li,zi,xe=class extends g{constructor(e){super(e);d(this,li);this.editor.root.addEventListener("insert",this)}insert(e){e.detail.element.hasAttribute("data-navigable")&&(e.detail.element.tabIndex=0,e.detail.element.addEventListener("keydown",this))}keydown(e){if(e.target===e.currentTarget&&I(e,[a.UP,a.DOWN,a.HOME,a.END])&&p(this,li,zi).call(this,e.target)){let i=e.target.previousElementSibling,n=e.target.nextElementSibling,c=e.target.parentElement.firstElementChild,f=e.target.parentElement.lastElementChild,b=e.target===c,T=e.target===f;e.key===a.UP&&!b&&i.hasAttribute("data-navigable")?i.focus():e.key===a.DOWN&&!T&&n.hasAttribute("data-navigable")?n.focus():(e.key===a.HOME||e.key===a.DOWN&&T)&&c.hasAttribute("data-navigable")?c.focus():(e.key===a.END||e.key===a.UP&&b)&&f.hasAttribute("data-navigable")&&f.focus(),e.preventDefault(),e.stopPropagation()}}};li=new WeakSet,zi=function(e){if(e.contentEditable!=="true")return!0;let i=this.editor.dom.getSelection(),n=this.editor.dom.getSelectedEditable(),c=this.editor.dom.getSelectedElement();return i.isCollapsed&&i.anchorOffset===0&&[n,e.firstChild].includes(c)};var Ie=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){t.detail.element instanceof HTMLSlotElement?t.detail.element.addEventListener("keydown",this):t.detail.element.hasAttribute("data-slotable")&&!t.detail.element.querySelector(":scope > "+r.SLOT)&&t.detail.element.appendChild(this.editor.dom.createElement(r.SLOT))}keydown(t){!I(t,a.TAB)&&!I(t,a.TAB,{shift:!0})&&(t.preventDefault(),t.stopPropagation())}};var _e,Ni,we,_i,Ne=class extends g{constructor(e){super(e);d(this,_e);d(this,we);this.editor.root.addEventListener("insert",this)}insert(e){e.detail.element.hasAttribute("data-sortable")&&(e.detail.element.addEventListener("keydown",this),e.detail.element.addEventListener("pointerdown",this),e.detail.element.addEventListener("pointermove",this),e.detail.element.addEventListener("pointerup",this))}keydown(e){let i={[a.HOME]:R.FIRST,[a.UP]:R.PREV,[a.DOWN]:R.NEXT,[a.END]:R.LAST};e.target===e.currentTarget&&I(e,Object.keys(i),{ctrl:!0})&&(this.editor.dom.sort(e.target,i[e.key]),e.preventDefault(),e.stopPropagation())}pointerdown(e){let i=e.target.closest("[data-sortable]");i&&this.editor.dom.contains(i)&&(i.setAttribute("data-sort",""),i.setPointerCapture(e.pointerId))}pointermove(e){let i=e.target.closest("[data-sortable][data-sort]"),n=this.editor.dom.document.elementFromPoint(e.x,e.y);p(this,_e,Ni).call(this),i&&this.editor.dom.contains(i)&&p(this,we,_i).call(this,i,n)&&n.setAttribute("data-sortover","")}pointerup(e){let i=e.target.closest("[data-sortable][data-sort]");if(i&&this.editor.dom.contains(i)){let n=this.editor.dom.document.elementFromPoint(e.x,e.y);p(this,_e,Ni).call(this),i.removeAttribute("data-sort"),i.releasePointerCapture(e.pointerId),p(this,we,_i).call(this,i,n)&&n.insertAdjacentElement(x.BEFOREBEGIN,i)}}};_e=new WeakSet,Ni=function(){this.editor.root.querySelectorAll("[data-sortover]").forEach(e=>e.removeAttribute("data-sortover"))},we=new WeakSet,_i=function(e,i){return e instanceof HTMLElement&&i instanceof HTMLElement&&this.editor.dom.contains(i)&&![this.editor.root,e].includes(i)&&i.hasAttribute("data-sortable")&&(e.parentElement===i.parentElement||this.editor.dom.arbitrary(e.parentElement)&&this.editor.dom.arbitrary(i.parentElement))&&this.editor.tags.allowed(i.parentElement,e)};var Re=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert(t){let e=this.editor.tags.get(t.detail.element);e&&(e.editable&&(t.detail.element.contentEditable="true"),["alignable","arbitrary","deletable","focusable","navigable","slotable","sortable"].forEach(i=>{e[i]&&(t.detail.element.dataset[i]="")}))}};var Me=class extends V{constructor(t){super(t),this.editor.toolbar.addEventListener("insertbutton",this)}insertbutton(t){super.insertbutton(t),t.detail.element.tabIndex=t.detail.element===this.editor.toolbar.firstElementChild?0:-1,t.detail.element.addEventListener("keydown",this)}};var qi={de:{Alt:"Alt",Shift:"Umschalt"}};var h=class extends l{static get name(){return"base"}static get config(){return{browser:{},filter:{},lang:void 0,plugins:[],pluginsDisabled:!1}}init(){this._i18n(qi),this.editor.dom.registerElement(r.DIALOG,ue),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 Re(this.editor),new Me(this.editor),new Le(this.editor),new be(this.editor),new ge(this.editor),new pe(this.editor),new xe(this.editor),new Ne(this.editor),new he(this.editor),new Ee(this.editor),new Ie(this.editor),this.editor.filters.add(new ce(this.editor))}};var Wi={de:{Abbreviation:"Abk\xFCrzung",Cancel:"Abbrechen","Full term":"Langform","Insert full term or leave empty to remove it":"Langform eingeben oder zum Entfernen leer lassen",Save:"Speichern"}};var nt=class extends l{static get name(){return"abbreviation"}static get dependencies(){return[h]}init(){this._i18n(Wi),this._tag({name:r.ABBR,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new le(this.editor)),this._command(r.ABBR),this._formatbar(this._("Abbreviation"),a.A)}};var _t,Oe=class extends C{constructor(e,i){let n=Object.entries(S).find(([,c])=>c===i)?.[0].toLowerCase();if(!n)throw new Error(u.INVALID_ARGUMENT);super(e,dt.name+"-"+n);d(this,_t,void 0);E(this,_t,i)}execute(){let e=this.editor.dom.getActiveElement();e?.hasAttribute("data-alignable")&&(e.classList.remove(...Object.values(S)),m(this,_t)!==S.NONE&&e.classList.add(m(this,_t)))}};_t=new WeakMap;var $i={de:{"Align center":"zentriert","Align left":"linksb\xFCndig","Align right":"rechtsb\xFCndig","No alignment":"Keine Ausrichtung"}};var dt=class extends l{static get name(){return"align"}static get dependencies(){return[h]}init(){this._i18n($i);let t={[S.NONE]:this._("No alignment"),[S.LEFT]:this._("Align left"),[S.CENTER]:this._("Align center"),[S.RIGHT]:this._("Align right")};Object.entries(t).forEach(([e,i])=>{let n=new Oe(this.editor,e);this.editor.commands.set(n),this._focusbar(i,n.name)})}};var ye=class extends A{constructor(t,e=void 0){super(t,K.name,e)}_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 Se,wi,De=class extends g{constructor(e){super(e);d(this,Se);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertaudio",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.AUDIO)).forEach(i=>p(this,Se,wi).call(this,i))}insertaudio(e){p(this,Se,wi).call(this,e.detail.element)}};Se=new WeakSet,wi=function(e){let i=e.getAttribute("src");i?(e.setAttribute("src",this.editor.url(i)),e.controls=!0,this.editor.dom.wrap(e,r.FIGURE,{attributes:{class:K.name}})):e.parentElement.removeChild(e)};var Ce=class extends M{filter(t){t.querySelectorAll(`${r.FIGURE} > ${r.FIGCAPTION}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Be=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insertfigure",this)}insertfigure(t){t.detail.element.querySelector(":scope > "+r.FIGCAPTION)||t.detail.element.appendChild(this.editor.dom.createElement(r.FIGCAPTION))}};var y=class extends l{static get name(){return"figure"}static get dependencies(){return[h]}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 Be(this.editor),this.editor.filters.add(new Ce(this.editor))}};var Qi={de:{Audio:"Audio",Cancel:"Abbrechen",ID:"ID","Insert URL to audio":"URL zur Audiodatei eingeben",Save:"Speichern",URL:"URL"}};var K=class extends l{static get name(){return"audio"}static get dependencies(){return[h,y]}static get config(){return{browser:void 0}}init(){this._i18n(Qi),this._tag({name:r.AUDIO,group:o.AUDIO,attributes:["controls","id","src"],empty:!0,navigable:!0}),new De(this.editor),this.editor.dialogs.set(new ye(this.editor,this.editor.config.audio.browser)),this._command(r.AUDIO),this._toolbar(this._("Audio"))}};var Fe=class extends A{constructor(t,e=void 0){super(t,lt.name,e)}_prepareForm(){this.formCreator.addLegend(this._("Block")).addTextInput("id",this._("ID"),{required:"required"})}};var Ge=class extends HTMLElement{get content(){return this.shadowRoot.innerHTML}set content(t){this.shadowRoot.innerHTML=t}constructor(){super(),this.attachShadow({mode:"open"})}};var Ue=class extends g{constructor(t){super(t),this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertappblock",this)}sethtml(t){Array.from(t.detail.element.getElementsByTagName(r.BLOCK)).forEach(e=>e.id||e.parentElement.removeChild(e))}async insertappblock(t){if(!t.detail.element.id){t.detail.element.parentElement.removeChild(t.detail.element);return}if(!this.editor.config.block.api)return;let e=this.editor.config.block.api.replace("{id}",t.detail.element.id),i=await fetch(e,{mode:"no-cors"});if(!i.ok)return;let n="";this.editor.config.block.css&&(n=this.editor.config.block.css.split(",").map(f=>`<link rel="stylesheet" href="${f}">`).join(""));let c=await i.text();t.detail.element.content=n+c}};var mi={de:{Cancel:"Abbrechen",Height:"H\xF6he",ID:"ID",Ifrane:"Iframe","Insert URL to embedded page":"URL zur eingebetteten Seite eingeben",Save:"Speichern",URL:"URL",Width:"Breite"}};var lt=class extends l{static get name(){return"block"}static get dependencies(){return[h]}static get config(){return{api:void 0,browser:void 0,css:void 0}}init(){this._i18n(mi),this.editor.dom.registerElement(r.BLOCK,Ge),this._tag({name:r.BLOCK,group:o.BLOCK,attributes:["id"],deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),new Ue(this.editor),this.editor.dialogs.set(new Fe(this.editor,this.editor.config.block.browser)),this._command(r.BLOCK),this._toolbar(this._("Block"))}};var He=class extends M{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(P.name)&&t.querySelector(":scope > "+r.BLOCKQUOTE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(t.insertAdjacentElement(x.BEFOREBEGIN,t.querySelector(":scope > "+r.BLOCKQUOTE)),t.parentElement.removeChild(t))}};var Pe=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insertblockquote",this),this.editor.root.addEventListener("deleteblockquote",this)}insertblockquote(t){this.editor.dom.wrap(t.detail.element,r.FIGURE,{attributes:{class:P.name}})}deleteblockquote(t){t.detail.target.localName===r.FIGURE&&t.detail.target.classList.contains(P.name)&&t.detail.target.parentElement.removeChild(t.detail.target)}};var ke=class extends M{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 G=class extends l{static get name(){return"break"}static get dependencies(){return[h]}init(){this._tag({name:r.BR,group:o.BREAK,empty:!0}),this.editor.filters.add(new ke(this.editor))}};var Yi={de:{Blockquote:"Blockzitat"}};var P=class extends l{static get name(){return"blockquote"}static get dependencies(){return[h,G,y]}init(){this._i18n(Yi),this._tag({name:r.BLOCKQUOTE,group:o.QUOTE,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new Pe(this.editor),this._command(r.BLOCKQUOTE),this._toolbar(this._("Blockquote")),this.editor.filters.add(new He(this.editor))}};var Zi={de:{bold:"fett"}};var ve=class extends l{static get name(){return"bold"}static get dependencies(){return[h]}init(){this._i18n(Zi),this._tag({name:r.B,group:o.FORMAT}),this._command(r.B),this._formatbar(this._("bold"),a.B)}};var Xi={de:{Citation:"Zitatquelle"}};var Ve=class extends l{static get name(){return"cite"}static get dependencies(){return[h]}init(){this._i18n(Xi),this._tag({name:r.CITE,group:o.FORMAT}),this._command(r.CITE),this._formatbar(this._("Citation"),a.Z)}};var Ji={de:{Code:"Quelltext"}};var Ke=class extends l{static get name(){return"code"}static get dependencies(){return[h]}init(){this._i18n(Ji),this._tag({name:r.CODE,group:o.FORMAT}),this._command(r.CODE),this._formatbar(this._("Code"),a.C)}};var je=class extends A{constructor(t){super(t,mt.name)}_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("value",this._("Machine-readable Value"),{placeholder:this._("Insert value or leave empty to remove it")})}};var to={de:{Cancel:"Abbrechen",Data:"Data","Machine-readable Value":"Maschinenlesbarer Wert","Insert value or leave empty to remove it":"Wert eingeben oder zum Entfernen leer lassen",Save:"Speichern"}};var mt=class extends l{static get name(){return"data"}static get dependencies(){return[h]}init(){this._i18n(to),this._tag({name:r.DATA,group:o.FORMAT,attributes:["value"]}),this.editor.dialogs.set(new je(this.editor)),this._command(r.DATA),this._formatbar(this._("Data"),a.J)}};var ze=class extends A{constructor(t){super(t,ht.name)}_prepareForm(){this.formCreator.addLegend(this._("Definition")).addTextInput("title",this._("Term"),{placeholder:this._("Insert term or leave empty to remove it")})}};var eo={de:{Definition:"Definition","Insert term or leave empty to remove it":"Begriff eingeben oder zum Entfernen leer lassen",Term:"Begriff"}};var ht=class extends l{static get name(){return"definition"}static get dependencies(){return[h]}init(){this._i18n(eo),this._tag({name:r.DFN,group:o.FORMAT,attributes:["title"]}),this.editor.dialogs.set(new ze(this.editor)),this._command(r.DFN),this._formatbar(this._("Definition"),a.D)}};var qe=class extends C{constructor(t){super(t,ct.name)}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-deletable")&&this.editor.dom.delete(t)}};var ro={de:{Delete:"L\xF6schen"}};var ct=class extends l{static get name(){return"delete"}static get dependencies(){return[h]}init(){this._i18n(ro),this.editor.commands.set(new qe(this.editor)),this._focusbar(this._("Delete"),this.constructor.name)}};var io={de:{"Text Deletion":"Textl\xF6schung"}};var We=class extends l{static get name(){return"deletion"}static get dependencies(){return[h]}init(){this._i18n(io),this._tag({name:r.DEL,group:o.FORMAT}),this._command(r.DEL),this._formatbar(this._("Text Deletion"),a.G)}};var $e=class extends M{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 Ye,Ri,Qe=class extends g{constructor(e){super(e);d(this,Ye);this.editor.root.addEventListener("insertdetails",this),this.editor.root.addEventListener("insertsummary",this)}insertdetails(e){e.detail.element.open=!0,e.detail.element.querySelector(`:scope > ${r.SUMMARY}:first-child`)||e.detail.element.insertAdjacentElement(x.AFTERBEGIN,this.editor.dom.createElement(r.SUMMARY))}insertsummary(e){p(this,Ye,Ri).call(this,e.detail.element),e.detail.element.addEventListener("click",this),e.detail.element.addEventListener("blur",this),e.detail.element.addEventListener("keydown",this)}click(e){e.preventDefault(),e.stopPropagation(),e.target.parentElement.open=!0}blur(e){p(this,Ye,Ri).call(this,e.target)}keydown(e){I(e,a.SPACE)?(e.preventDefault(),e.stopPropagation(),this.editor.dom.insertText(" ")):I(e,a.ENTER)&&(e.preventDefault(),e.stopPropagation(),e.target.parentElement.open=!0)}};Ye=new WeakSet,Ri=function(e){e.textContent.trim()?e.querySelectorAll(r.BR+":not(:last-child)").forEach(i=>i.parentElement.removeChild(i)):e.textContent=this.editor.translator.translate(ft.name,"Details"),e.lastElementChild instanceof HTMLBRElement||e.appendChild(this.editor.dom.createElement(r.BR))};var oo={de:{Details:"Details"}};var ft=class extends l{static get name(){return"details"}static get dependencies(){return[h]}init(){this._i18n(oo),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],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 Qe(this.editor),this._command(r.DETAILS),this._toolbar(this._("Details")),this.editor.filters.add(new $e(this.editor))}};var Ze=class extends A{constructor(t){super(t,pt.name)}_prepareForm(){this.formCreator.addLegend(this._("Division")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var so={de:{Cancel:"Abbrechen","CSS class":"CSS-Klasse",Division:"Division","Insert CSS class":"CSS-Klasse eingeben",Save:"Speichern"}};var pt=class extends l{static get name(){return"division"}static get dependencies(){return[h]}init(){this._i18n(so),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 Ze(this.editor)),this._command(r.DIV),this._toolbar(this._("Division"))}};var ao={de:{emphasized:"betont"}};var Xe=class extends l{static get name(){return"emphasis"}static get dependencies(){return[h]}init(){this._i18n(ao),this._tag({name:r.EM,group:o.FORMAT}),this._command(r.EM),this._formatbar(this._("emphasized"),a.E)}};var no={de:{Heading:"\xDCberschrift"}};var Je=class extends l{static get name(){return"heading"}static get dependencies(){return[h]}init(){this._i18n(no),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(this._("Heading"))}};var lo={de:{"Horizontal Rule":"Horizontale Linie"}};var tr=class extends l{static get name(){return"horizontalrule"}static get dependencies(){return[h]}init(){this._i18n(lo),this._tag({name:r.HR,group:o.RULE,deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),this._command(r.HR),this._toolbar(this._("Horizontal Rule"))}};var er=class extends A{constructor(t,e=void 0){super(t,j.name,e)}_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 ir,Mi,rr=class extends g{constructor(e){super(e);d(this,ir);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertiframe",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.IFRAME)).forEach(i=>p(this,ir,Mi).call(this,i))}insertiframe(e){p(this,ir,Mi).call(this,e.detail.element)}};ir=new WeakSet,Mi=function(e){let i=e.getAttribute("src");i?(e.setAttribute("src",this.editor.url(i)),e.allowFullscreen=!0,this.editor.dom.wrap(e,r.FIGURE,{attributes:{class:j.name}})):e.parentElement.removeChild(e)};var j=class extends l{static get name(){return"iframe"}static get dependencies(){return[h,y]}static get config(){return{browser:void 0}}init(){this._i18n(mi),this._tag({name:r.IFRAME,group:o.IFRAME,attributes:["allowfullscreen","height","id","src","width"],empty:!0,navigable:!0}),new rr(this.editor),this.editor.dialogs.set(new er(this.editor,this.editor.config.iframe.browser)),this._command(r.IFRAME),this._toolbar(this._("Iframe"))}};var or=class extends A{constructor(t,e=void 0){super(t,z.name,e)}_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 ar,Oi,sr=class extends g{constructor(e){super(e);d(this,ar);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertimg",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.IMG)).forEach(i=>p(this,ar,Oi).call(this,i))}insertimg(e){p(this,ar,Oi).call(this,e.detail.element)}};ar=new WeakSet,Oi=function(e){let i=e.getAttribute("src");i?(e.setAttribute("src",this.editor.url(i)),this.editor.dom.wrap(e,r.FIGURE,{attributes:{class:z.name}})):e.parentElement.removeChild(e)};var mo={de:{"Alternative text":"Alternativtext",Cancel:"Abbrechen",Height:"H\xF6he",ID:"ID",Image:"Bild","Insert URL to image":"URL zur Bilddatei eingeben",Save:"Speichern","Text shown when media element is not available":"Ersatztext, falls Medienelement nicht verf\xFCgbar ist",URL:"URL",Width:"Breite"}};var z=class extends l{static get name(){return"image"}static get dependencies(){return[h,y]}static get config(){return{browser:void 0}}init(){this._i18n(mo),this._tag({name:r.IMG,group:o.IMAGE,attributes:["alt","height","id","src","width"],empty:!0,navigable:!0}),new sr(this.editor),this.editor.dialogs.set(new or(this.editor,this.editor.config.image.browser)),this._command(r.IMG),this._toolbar(this._("Image"))}};var ho={de:{"Text Insertion":"Texteinf\xFCgung"}};var nr=class extends l{static get name(){return"insertion"}static get dependencies(){return[h]}init(){this._i18n(ho),this._tag({name:r.INS,group:o.FORMAT}),this._command(r.INS),this._formatbar(this._("Text Insertion"),a.F)}};var co={de:{italic:"kursiv"}};var dr=class extends l{static get name(){return"italic"}static get dependencies(){return[h]}init(){this._i18n(co),this._tag({name:r.I,group:o.FORMAT}),this._command(r.I),this._formatbar(this._("italic"),a.I)}};var fo={de:{"User Input":"Benutzereingabe"}};var lr=class extends l{static get name(){return"keyboard"}static get dependencies(){return[h]}init(){this._i18n(fo),this._tag({name:r.KBD,group:o.FORMAT}),this._command(r.KBD),this._formatbar(this._("User Input"),a.K)}};var mr=class extends A{constructor(t){super(t,ut.name)}_prepareForm(){this.formCreator.addLegend(this._("Link")).addTextInput("href",this._("URL"),{pattern:"(https?|/|mailto:|tel:).+",placeholder:this._("Insert link or leave empty to unlink")})}};var cr,yi,hr=class extends g{constructor(e){super(e);d(this,cr);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("inserta",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.A)).forEach(i=>p(this,cr,yi).call(this,i))}inserta(e){p(this,cr,yi).call(this,e.detail.element)}};cr=new WeakSet,yi=function(e){let i=e.getAttribute("href");i?e.setAttribute("href",this.editor.url(i)):e.parentElement.replaceChild(this.editor.dom.createText(e.textContent),e)};var po={de:{Cancel:"Abbrechen","Insert link or leave empty to unlink":"Link eingeben oder zum Entfernen leer lassen",Link:"Link",Save:"Speichern",URL:"URL"}};var ut=class extends l{static get name(){return"link"}static get dependencies(){return[h]}init(){this._i18n(po),this._tag({name:r.A,group:o.FORMAT,attributes:["href"]}),new hr(this.editor),this.editor.dialogs.set(new mr(this.editor)),this._command(r.A),this._formatbar(this._("Link"),a.L)}};var uo={de:{mark:"markiert"}};var fr=class extends l{static get name(){return"mark"}static get dependencies(){return[h]}init(){this._i18n(uo),this._tag({name:r.MARK,group:o.FORMAT}),this._command(r.MARK),this._formatbar(this._("mark"),a.M)}};var ur,Di,pr=class extends g{constructor(e){super(e);d(this,ur);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(e){Array.from(e.detail.element.getElementsByTagName(r.LI)).forEach(i=>p(this,ur,Di).call(this,i))}insertli(e){p(this,ur,Di).call(this,e.detail.element)}deleteli(e){e.detail.target.children.length===0&&e.detail.target.parentElement.removeChild(e.detail.target)}insertol(e){e.detail.element.children.length===0&&e.detail.element.appendChild(this.editor.dom.createElement(r.LI))}insertul(e){this.insertol(e)}};ur=new WeakSet,Di=function(e){!(e.parentElement instanceof HTMLOListElement)&&!(e.parentElement instanceof HTMLUListElement)&&this.editor.dom.wrap(e,r.UL)};var gt=class extends l{static get name(){return"list"}static get dependencies(){return[h,G]}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 pr(this.editor)}};var go={de:{"Ordered List":"Geordnete Liste"}};var gr=class extends l{static get name(){return"orderedlist"}static get dependencies(){return[h,gt]}init(){this._i18n(go),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(this._("Ordered List"))}};var br,Si,Er=class extends g{constructor(e){super(e);d(this,br);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertp",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.P)).forEach(i=>p(this,br,Si).call(this,i))}insertp(e){p(this,br,Si).call(this,e.detail.element)}paste(e){this.editor.dom.window.setTimeout(()=>this.editor.filters.filter(e.target))}};br=new WeakSet,Si=function(e){e.addEventListener("paste",this)};var Eo={de:{Paragraph:"Absatz"}};var Tr=class extends l{static get name(){return"paragraph"}static get dependencies(){return[h,G]}init(){this._i18n(Eo),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 Er(this.editor),this._command(r.P),this._toolbar(this._("Paragraph"))}};var Ar=class extends M{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(k.name)&&t.querySelector(":scope > "+r.PRE)&&!t.querySelector(":scope > "+r.FIGCAPTION)&&(t.insertAdjacentElement(x.BEFOREBEGIN,t.querySelector(":scope > "+r.PRE)),t.parentElement.removeChild(t))}};var Lr=class extends g{constructor(t){super(t),this.editor.root.addEventListener("insertpre",this),this.editor.root.addEventListener("deletepre",this)}insertpre(t){this.editor.dom.wrap(t.detail.element,r.FIGURE,{attributes:{class:k.name}})}deletepre(t){t.detail.target.localName===r.FIGURE&&t.detail.target.classList.contains(k.name)&&t.detail.target.parentElement.removeChild(t.detail.target)}};var bo={de:{"Preformatted Text":"Vorformatierter Text"}};var k=class extends l{static get name(){return"preformat"}static get dependencies(){return[h,G,y]}init(){this._i18n(bo),this._tag({name:r.PRE,group:o.PREFORMAT,children:[o.BREAK],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new Lr(this.editor),this._command(r.PRE),this._toolbar(this._("Preformatted Text")),this.editor.filters.add(new Ar(this.editor))}};var To={de:{Quote:"Zitat"}};var xr=class extends l{static get name(){return"quote"}static get dependencies(){return[h]}init(){this._i18n(To),this._tag({name:r.Q,group:o.FORMAT}),this._command(r.Q),this._formatbar(this._("Quote"),a.Q)}};var Ao={de:{"Sample Output":"Beispielausgabe"}};var Ir=class extends l{static get name(){return"sample"}static get dependencies(){return[h]}init(){this._i18n(Ao),this._tag({name:r.SAMP,group:o.FORMAT}),this._command(r.SAMP),this._formatbar(this._("Sample Output"),a.O)}};var Nr=class extends A{constructor(t){super(t,Et.name)}_prepareForm(){this.formCreator.addLegend(this._("Section")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var Lo={de:{Cancel:"Abbrechen","CSS class":"CSS-Klasse","Insert CSS class":"CSS-Klasse eingeben",Save:"Speichern",Section:"Sektion"}};var Et=class extends l{static get name(){return"section"}static get dependencies(){return[h]}init(){this._i18n(Lo),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 Nr(this.editor)),this._command(r.SECTION),this._toolbar(this._("Section"))}};var xo={de:{small:"klein"}};var _r=class extends l{static get name(){return"small"}static get dependencies(){return[h]}init(){this._i18n(xo),this._tag({name:r.SMALL,group:o.FORMAT}),this._command(r.SMALL),this._formatbar(this._("small"),a.W)}};var Rr,wr=class extends C{constructor(e,i){let n=Object.entries(R).find(([,c])=>c===i)?.[0].toLowerCase();if(!n)throw new Error(u.INVALID_ARGUMENT);super(e,bt.name+"-"+n);d(this,Rr,void 0);E(this,Rr,i)}execute(){let e=this.editor.dom.getActiveElement();e?.hasAttribute("data-sortable")&&this.editor.dom.sort(e,m(this,Rr))}};Rr=new WeakMap;var Io={de:{"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"}};var bt=class extends l{static get name(){return"sort"}static get dependencies(){return[h]}init(){this._i18n(Io);let t={[R.FIRST]:this._("Sort to the beginning"),[R.PREV]:this._("Sort before previous element"),[R.NEXT]:this._("Sort after next element"),[R.LAST]:this._("Sort to the end")};Object.entries(t).forEach(([e,i])=>{let n=new wr(this.editor,e);this.editor.commands.set(n),this._focusbar(i,n.name)})}};var No={de:{strikethrough:"durchgestrichen"}};var Mr=class extends l{static get name(){return"strikethrough"}static get dependencies(){return[h]}init(){this._i18n(No),this._tag({name:r.S,group:o.FORMAT}),this._command(r.S),this._formatbar(this._("strikethrough"),a.R)}};var _o={de:{"strongly emphasized":"stark betont"}};var Or=class extends l{static get name(){return"strong"}static get dependencies(){return[h]}init(){this._i18n(_o),this._tag({name:r.STRONG,group:o.FORMAT}),this._command(r.STRONG),this._formatbar(this._("strongly emphasized"),a.S)}};var wo={de:{Subheading:"Unter\xFCberschrift"}};var yr=class extends l{static get name(){return"subheading"}static get dependencies(){return[h]}init(){this._i18n(wo),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(this._("Subheading"))}};var Ro={de:{subscript:"tiefgestellt"}};var Dr=class extends l{static get name(){return"subscript"}static get dependencies(){return[h]}init(){this._i18n(Ro),this._tag({name:r.SUB,group:o.FORMAT}),this._command(r.SUB),this._formatbar(this._("subscript"),a.X)}};var Mo={de:{superscript:"hochgestellt"}};var Sr=class extends l{static get name(){return"superscript"}static get dependencies(){return[h]}init(){this._i18n(Mo),this._tag({name:r.SUP,group:o.FORMAT}),this._command(r.SUP),this._formatbar(this._("superscript"),a.Y)}};var hi,Oo,Cr=class extends g{constructor(e){super(e);d(this,hi);this.editor.root.addEventListener("inserttd",this),this.editor.root.addEventListener("insertth",this)}inserttd(e){e.detail.element.addEventListener("keydown",this)}insertth(e){e.detail.element.addEventListener("keydown",this)}keydown(e){let i=e.target,n=i.parentElement,c=n.parentElement,f=c instanceof HTMLTableElement?c:c.parentElement,b=[a.LEFT,a.RIGHT,a.UP,a.DOWN],T=I(e,b),L=I(e,b,{ctrl:!0}),B=I(e,b,{alt:!0}),W=I(e,b,{alt:!0,shift:!0});if(i instanceof HTMLTableCellElement&&n instanceof HTMLTableRowElement&&(c instanceof HTMLTableElement||c instanceof HTMLTableSectionElement)&&f instanceof HTMLTableElement&&(T&&p(this,hi,Oo).call(this,i,e.key)||L||B||W)){let w=i.cellIndex,v=n.cells.length,At=c.rows.length,H=c instanceof HTMLTableElement?n.rowIndex:n.sectionRowIndex,fi=w===0,pi=w===v-1,Go=H===0,Uo=H===At-1,Gi=n.rowIndex===0,Ui=n.rowIndex===f.rows.length-1;e.preventDefault(),e.stopPropagation(),T?e.key===a.LEFT&&!fi?this.editor.dom.focusEnd(n.cells[w-1]):e.key===a.LEFT&&Gi?this.editor.dom.focusEnd(f.rows[f.rows.length-1].cells[v-1]):e.key===a.LEFT?this.editor.dom.focusEnd(f.rows[n.rowIndex-1].cells[v-1]):e.key===a.RIGHT&&!pi?n.cells[w+1].focus():e.key===a.RIGHT&&Ui?f.rows[0].cells[0].focus():e.key===a.RIGHT?f.rows[n.rowIndex+1].cells[0].focus():e.key===a.UP&&Gi?f.rows[f.rows.length-1].cells[w].focus():e.key===a.UP?f.rows[n.rowIndex-1].cells[w].focus():e.key===a.DOWN&&Ui?f.rows[0].cells[w].focus():e.key===a.DOWN&&f.rows[n.rowIndex+1].cells[w].focus():L?(e.key===a.LEFT&&v>1&&fi?Array.from(f.rows).forEach(_=>_.appendChild(_.cells[w])):e.key===a.LEFT&&v>1?Array.from(f.rows).forEach(_=>_.insertBefore(_.cells[w],_.cells[w-1])):e.key===a.RIGHT&&v>1&&pi?Array.from(f.rows).forEach(_=>_.insertBefore(_.cells[w],_.cells[0])):e.key===a.RIGHT&&v>1?Array.from(f.rows).forEach(_=>_.insertBefore(_.cells[w+1],_.cells[w])):e.key===a.UP&&At>1&&Go?c.appendChild(n):e.key===a.UP&&At>1?c.insertBefore(n,c.rows[H-1]):e.key===a.DOWN&&At>1&&Uo?c.insertBefore(n,c.rows[0]):e.key===a.DOWN&&At>1&&c.insertBefore(c.rows[H+1],n),i.focus()):B?e.key===a.LEFT?Array.from(f.rows).forEach(_=>this.editor.dom.createTableCell(_,_.cells[w])):e.key===a.RIGHT?Array.from(f.rows).forEach(_=>this.editor.dom.createTableCell(_,_.cells[w+1])):e.key===a.UP?this.editor.dom.createTableRow(c,v,H):e.key===a.DOWN&&this.editor.dom.createTableRow(c,v,H+1):W&&(e.key===a.LEFT&&!fi?Array.from(f.rows).forEach(_=>_.deleteCell(w-1)):e.key===a.RIGHT&&!pi?Array.from(f.rows).forEach(_=>_.deleteCell(w+1)):e.key===a.UP&&H>0?c.deleteRow(H-1):e.key===a.DOWN&&H<At-1&&c.deleteRow(H+1))}}};hi=new WeakSet,Oo=function(e,i){if([a.UP,a.DOWN].includes(i))return!0;let n=this.editor.dom.getSelection(),c=n.anchorNode instanceof HTMLElement?n.anchorNode:e;if(!n.isCollapsed)return!1;if(i===a.LEFT){let b=e.firstChild;return b instanceof HTMLElement&&(b=b.firstChild),n.anchorOffset===0&&[e,b].includes(c)}let f=e.lastChild;return e.lastChild instanceof HTMLBRElement&&e.lastChild.previousSibling&&(f=e.lastChild.previousSibling),f instanceof HTMLElement&&(f=f.lastChild),n.anchorOffset===c.textContent.length&&[e,f].includes(c)};var Br=class extends C{constructor(t){super(t,F.name,r.TABLE)}insert({rows:t,cols:e}={}){let i=this.editor.dom.createElement(r.FIGURE,{attributes:{class:F.name}}),n=this.editor.dom.createTable(parseInt(t,10)||1,parseInt(e,10)||1);i.appendChild(n),this.editor.dom.insert(i)}};var Fr=class extends A{constructor(t){super(t,F.name)}_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 Gr=class extends M{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(F.name)&&t.querySelector(":scope > "+r.TABLE)&&!t.querySelector(":scope > "+r.FIGCAPTION)?(t.insertAdjacentElement(x.BEFOREBEGIN,t.querySelector(":scope > "+r.TABLE)),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 Ur=class extends g{constructor(t){super(t),this.editor.root.addEventListener("inserttable",this)}inserttable(t){this.editor.dom.wrap(t.detail.element,r.FIGURE,{attributes:{class:F.name}}),t.detail.element.tBodies.length>0&&t.detail.element.tBodies[0].rows[0]&&(!t.detail.element.tHead||!t.detail.element.tFoot)&&(t.detail.element.tHead||this.editor.dom.createTableRow(t.detail.element.createTHead(),t.detail.element.tBodies[0].rows[0].cells.length),t.detail.element.tFoot||this.editor.dom.createTableRow(t.detail.element.createTFoot(),t.detail.element.tBodies[0].rows[0].cells.length))}};var yo={de:{Cancel:"Abbrechen",Columns:"Spalten","Delete next column":"N\xE4chste Spalte l\xF6schen","Delete next row":"N\xE4chste Zeile l\xF6schen","Delete previous column":"Vorherige Spalte l\xF6schen","Delete previous row":"Vorherige Zeile l\xF6schen",Rows:"Zeilen",Save:"Speichern","Sort after next column":"Hinter die n\xE4chste Spalte sortieren","Sort after next row":"Hinter die n\xE4chste Zeile sortieren","Sort before previous column":"Vor die vorherige Spalte sortieren","Sort before previous row":"Vor die vorherige Zeile sortieren","Sort column to the beginning":"Spalte an den Anfang sortieren","Sort row to the beginning":"Zeile an den Anfang sortieren","Sort column to the end":"Spalte ans Ende sortieren","Sort row to the end":"Zeile ans Ende sortieren",Table:"Tabelle"}};var wt,ci,Hr,Ci,F=class extends l{constructor(){super(...arguments);d(this,wt);d(this,Hr)}static get name(){return"table"}static get dependencies(){return[h,G,y]}init(){this._i18n(yo),this._tag({name:r.TABLE,group:o.TABLE,children:[o.TABLESECTION],deletable:!0,navigable:!0}),this._tag(p(this,wt,ci).call(this,r.THEAD)),this._tag(p(this,wt,ci).call(this,r.TBODY)),this._tag(p(this,wt,ci).call(this,r.TFOOT)),this._tag({name:r.TR,group:o.TABLEROW,children:[o.TABLECELL]}),this._tag(p(this,Hr,Ci).call(this,r.TH)),this._tag(p(this,Hr,Ci).call(this,r.TD)),new Ur(this.editor),new Cr(this.editor),this.editor.filters.add(new Gr(this.editor)),this.editor.dialogs.set(new Fr(this.editor)),this.editor.commands.set(new Br(this.editor)),this._toolbar(this._("Table"))}};wt=new WeakSet,ci=function(e){return{name:e,group:o.TABLESECTION,children:[o.TABLEROW]}},Hr=new WeakSet,Ci=function(e){return{name:e,group:o.TABLECELL,children:[o.BREAK,o.FORMAT],editable:!0,empty:!0}};var Pr=class extends A{constructor(t){super(t,Tt.name)}_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("datetime",this._("Machine-readable Datetime"),{placeholder:this._("Insert date/time or leave empty to remove it")})}};var Do={de:{Cancel:"Abbrechen","Insert date/time or leave empty to remove it":"Datum/Zeit eingeben oder zum Entfernen leer lassen","Machine-readable Datetime":"Maschinenlesbare Datums-/Zeitangabe",Save:"Speichern",Time:"Zeit"}};var Tt=class extends l{static get name(){return"time"}static get dependencies(){return[h]}init(){this._i18n(Do),this._tag({name:r.TIME,group:o.FORMAT,attributes:["datetime"]}),this.editor.dialogs.set(new Pr(this.editor)),this._command(r.TIME),this._formatbar(this._("Time"),a.T)}};var So={de:{underline:"unterstrichen"}};var kr=class extends l{static get name(){return"underline"}static get dependencies(){return[h]}init(){this._i18n(So),this._tag({name:r.U,group:o.FORMAT}),this._command(r.U),this._formatbar(this._("underline"),a.U)}};var Co={de:{"Unordered List":"Ungeordnete Liste"}};var vr=class extends l{static get name(){return"unorderedlist"}static get dependencies(){return[h,gt]}init(){this._i18n(Co),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(this._("Unordered List"))}};var Bo={de:{Variable:"Variable"}};var Vr=class extends l{static get name(){return"variable"}static get dependencies(){return[h]}init(){this._i18n(Bo),this._tag({name:r.VAR,group:o.FORMAT}),this._command(r.VAR),this._formatbar(this._("Variable"),a.V)}};var Kr=class extends A{constructor(t,e=void 0){super(t,q.name,e)}_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 zr,Bi,jr=class extends g{constructor(e){super(e);d(this,zr);this.editor.root.addEventListener("sethtml",this),this.editor.root.addEventListener("insertvideo",this)}sethtml(e){Array.from(e.detail.element.getElementsByTagName(r.VIDEO)).forEach(i=>p(this,zr,Bi).call(this,i))}insertvideo(e){p(this,zr,Bi).call(this,e.detail.element)}};zr=new WeakSet,Bi=function(e){let i=e.getAttribute("src");i?(e.setAttribute("src",this.editor.url(i)),e.controls=!0,this.editor.dom.wrap(e,r.FIGURE,{attributes:{class:q.name}})):e.parentElement.removeChild(e)};var Fo={de:{Cancel:"Abbrechen",Height:"H\xF6he",ID:"ID","Insert URL to video":"URL zur Videodatei eingeben",Save:"Speichern",URL:"URL",Video:"Video",Width:"Breite"}};var q=class extends l{static get name(){return"video"}static get dependencies(){return[h,y]}static get config(){return{browser:void 0}}init(){this._i18n(Fo),this._tag({name:r.VIDEO,group:o.VIDEO,attributes:["controls","height","id","src","width"],empty:!0,navigable:!0}),new jr(this.editor),this.editor.dialogs.set(new Kr(this.editor,this.editor.config.video.browser)),this._command(r.VIDEO),this._toolbar(this._("Video"))}};var Fi=class extends O{static get defaultConfig(){return{base:{plugins:[ve,dr,Or,Xe,kr,Mr,ut,fr,_r,ht,nt,xr,Ve,Ke,lr,Ir,Vr,Dr,Sr,Tt,mt,nr,We,Tr,Je,yr,vr,gr,tr,P,z,q,K,j,F,k,Et,ft,pt,lt,dt,bt,ct]}}}};export{Fi as default};
|
|
1
|
+
var o=class{static get AUDIO(){return"audio"}static get BLOCK(){return"block"}static get BREAK(){return"break"}static get CAPTION(){return"caption"}static get COL(){return"col"}static get COLGROUP(){return"colgroup"}static get CONTAINER(){return"container"}static get FIGURE(){return"figure"}static get FORMAT(){return"format"}static get HEADING(){return"heading"}static get IFRAME(){return"iframe"}static get IMAGE(){return"image"}static get LIST(){return"list"}static get LISTITEM(){return"listitem"}static get PARAGRAPH(){return"paragraph"}static get PREFORMAT(){return"preformat"}static get QUOTE(){return"quote"}static get ROOT(){return"root"}static get RULE(){return"rule"}static get SLOT(){return"slot"}static get SUMMARY(){return"summary"}static get TABLE(){return"table"}static get TABLECELL(){return"tablecell"}static get TABLEROW(){return"tablerow"}static get TABLESECTION(){return"tablesection"}static get VIDEO(){return"video"}};function v(s){return typeof s<"u"}function V(s){return typeof s=="function"}function b(s){return s&&typeof s=="string"}function M(s){return!v(s)||b(s)}function Se(s){return!v(s)||Array.isArray(s)&&s.length>0}function Me(s){return!v(s)||s instanceof HTMLElement}var R=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 T)||!b(e)||!M(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 j=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof R))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 $=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof p))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=class{static get A(){return"a"}static get ABBR(){return"abbr"}static get ALL(){return"*"}static get AUDIO(){return"audio"}static get B(){return"b"}static get BLOCK(){return"app-block"}static get BLOCKQUOTE(){return"blockquote"}static get BR(){return"br"}static get BUTTON(){return"button"}static get CITE(){return"cite"}static get CODE(){return"code"}static get COL(){return"col"}static get COLGROUP(){return"colgroup"}static get DATA(){return"data"}static get DEL(){return"del"}static get DETAILS(){return"details"}static get DFN(){return"dfn"}static get DIALOG(){return"dialog"}static get DIV(){return"div"}static get EDITOR(){return"akilli-editor"}static get EM(){return"em"}static get FIELDSET(){return"fieldset"}static get FIGCAPTION(){return"figcaption"}static get FIGURE(){return"figure"}static get FOCUSBAR(){return"editor-focusbar"}static get FORM(){return"form"}static get FORMATBAR(){return"editor-formatbar"}static get H2(){return"h2"}static get H3(){return"h3"}static get HR(){return"hr"}static get I(){return"i"}static get IFRAME(){return"iframe"}static get IMG(){return"img"}static get INPUT(){return"input"}static get INS(){return"ins"}static get KBD(){return"kbd"}static get LABEL(){return"label"}static get LEGEND(){return"legend"}static get LI(){return"li"}static get MARK(){return"mark"}static get OL(){return"ol"}static get P(){return"p"}static get PRE(){return"pre"}static get Q(){return"q"}static get ROOT(){return"editor-root"}static get S(){return"s"}static get SAMP(){return"samp"}static get SECTION(){return"section"}static get SLOT(){return"slot"}static get SMALL(){return"small"}static get STRONG(){return"strong"}static get SUB(){return"sub"}static get SUMMARY(){return"summary"}static get SUP(){return"sup"}static get TABLE(){return"table"}static get TBODY(){return"tbody"}static get TD(){return"td"}static get TFOOT(){return"tfoot"}static get TH(){return"th"}static get THEAD(){return"thead"}static get TIME(){return"time"}static get TOOLBAR(){return"editor-toolbar"}static get TR(){return"tr"}static get U(){return"u"}static get UL(){return"ul"}static get VAR(){return"var"}static get VIDEO(){return"video"}};var B=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(!b(t)||!Me(e)||!Me(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(!V(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(n=>this.#e("insert",n,e.target)))}),e.removedNodes.forEach(i=>i instanceof HTMLElement&&this.#e("delete",i,e.target))})}};var E=class{static get FIRST(){return"first"}static get PREV(){return"prev"}static get NEXT(){return"next"}static get LAST(){return"last"}static values(){return[this.FIRST,this.PREV,this.NEXT,this.LAST]}};var Q=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 T)||!(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){v(this.window.customElements.get(t))||this.window.customElements.define(t,e,i?{extends:i}:void 0)}createElement(t,{attributes:e={},html:i=""}={}){let n=this.document.createElement(t);return n.innerHTML=i,Object.entries(e).forEach(([l,c])=>c&&n.setAttribute(l,`${c}`)),n}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 n=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(n)):(t.textContent=n,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}sort(t,e){if(!(t instanceof HTMLElement)||!E.values().includes(e))throw new TypeError("Invalid argument");if(t.parentElement.children.length<=1)return;let i=t.parentElement,n=i.parentElement,l=t.previousElementSibling,c=t.nextElementSibling,u=i.firstElementChild,f=i.lastElementChild,g=t===u,O=t===f,S=t.localName===r.COL,q=Array.from(i.children).indexOf(t);e===E.PREV&&!g&&l.hasAttribute("data-sortable")?(S&&Array.from(n.rows).forEach(I=>this.insertBefore(I.cells[q],I.cells[q-1])),this.insertBefore(t,l)):e===E.NEXT&&!O&&c.hasAttribute("data-sortable")?(S&&Array.from(n.rows).forEach(I=>this.insertAfter(I.cells[q],I.cells[q+1])),this.insertAfter(t,c)):(e===E.FIRST&&!g||e===E.NEXT&&O)&&u.hasAttribute("data-sortable")?(S&&Array.from(n.rows).forEach(I=>this.insertFirstChild(I.cells[q],I)),this.insertBefore(t,u)):(e===E.LAST&&!O||e===E.PREV&&g)&&f.hasAttribute("data-sortable")&&(S&&Array.from(n.rows).forEach(I=>this.insertLastChild(I.cells[q],I)),this.insertAfter(t,f))}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 n=Array.from(t.parentElement.children).indexOf(t),l=t.parentElement.parentElement;Array.from(l.rows).forEach(c=>c.removeChild(c.cells[n]))}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,n=t.parentElement;do if(this.arbitrary(n)&&this.editor.tags.allowed(n,e))return i;while((i=n)&&(n=n.parentElement)&&this.contains(n))}wrap(t,e,i={}){let n;if(t instanceof HTMLElement){if(t.parentElement.localName!==e&&(n=this.closest(t,e))){let l=this.createElement(e,i);this.insertAfter(l,n),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(n=>i[n.nodeName]=n.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 n=e.closest("[contenteditable=true]"),l=i.closest("[contenteditable=true]");if(n instanceof HTMLElement&&n===l&&this.contains(n))return n}}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:n={}}){if(!b(t)||!b(e)||!V(i))throw new TypeError("Invalid argument");let l=this.createElement(r.A,{attributes:{href:t}}),c=new URL(l.href);Object.entries(n).forEach(([f,g])=>c.searchParams.set(f,`${g}`));let u=this.window.open(c.toString(),e,this.#a());this.window.addEventListener("message",f=>{f.origin===c.origin&&f.source===u&&(i(f.data),u.close())},!1)}getWidth(){return this.window.screen.width}getHeight(){return this.window.screen.height}#i(t,e,i){let n=this.createElement(t);for(let l=0;l<e;l++)this.insertLastChild(t===r.THEAD?this.createTableHeaderRow(i):this.createTableRow(i),n);return n}#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 L=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof T))throw new TypeError("Invalid argument");this.#t=t}filter(t){throw new Error("Not implemented")}};var Y=class{#t=new Set;add(t){if(!(t instanceof L))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 F=class{name;group;children;attributes;alignable;arbitrary;deletable;editable;empty;focusable;navigable;slotable;sortable;enter;constructor({name:t,group:e,...i}={}){if(!b(t)||!b(e)||!Se(i.children)||!Se(i.attributes)||!M(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 d=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 T))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 F(t))}_command(t){this.editor.commands.set(new R(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 n=this._(t),l=this._("Alt"),c=this._("Shift"),u=n+(e?` [${l} + ${c} + ${e}]`:"");this.editor.dom.insertLastChild(this.#e(n,u,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,n=void 0){if(!b(t)||!b(e)||!M(i))throw new TypeError("Invalid argument");return this.editor.dom.createElement(r.BUTTON,{attributes:{type:"button",title:e,"data-command":n||this.constructor.name,"data-key":i},html:t})}};var Z=class{#t=new Map;constructor(t=[]){t.forEach(e=>this.set(e))}get(t){return this.#t.get(t)}set(t){if(!(t instanceof d))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 X=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 F))throw new TypeError("Invalid argument");this.#t.set(t.name,t)}allowed(t,e,i=!1){let n=i?e:this.get(e)?.group;return!!this.get(t)?.children.includes(n)}freeze(){this.#t.forEach(t=>{Object.freeze(t.children),Object.freeze(t.attributes),Object.freeze(t)}),Object.freeze(this.#t),Object.freeze(this)}};var T=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||{}}}#u=new X;get tags(){return this.#u}#f=new Y;get filters(){return this.#f}#p=new $;get dialogs(){return this.#p}#g=new j;get commands(){return this.#g}#E=new Z;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 Q(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 B(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 B(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 B(this.focusbar),this.#c=this.dom.createElement(r.ROOT),this.dom.insertLastChild(this.root,this.element),this.#h=new B(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(u=>!c.includes(u.name)):(i=[],c.forEach(u=>{let f=e.find(g=>g.name===u);f&&i.push(f)}))}let n=new Set,l=c=>{c.dependencies?.forEach(l),n.add(c)};i.map(l),n.forEach(c=>{Object.entries(c.config).forEach(([u,f])=>{this.config[c.name]??={},this.config[c.name][u]=t[c.name]?.[u]||this.constructor.defaultConfig[c.name]?.[u]||f}),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("/ /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 J=class{#t;get editor(){return this.#t}#e;get form(){return this.#e}#r;constructor(t){if(!(t instanceof T))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(!b(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={},n="text"){if(!b(t)||!b(e)||!b(n))throw new TypeError("Invalid argument");Object.assign(i,{id:`editor-${t}`,name:t,type:n});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 p=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 T)||!b(e)||!M(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 n=this.editor.dom.createElement(r.DIALOG);n.addEventListener("click",c=>c.target===n&&n.close()),n.addEventListener("close",()=>{i&&this.editor.dom.setRange(i),n.returnValue&&t(JSON.parse(n.returnValue)),this.#a()}),this.editor.dom.insertLastChild(n,this.editor.element),this.#o=new J(this.editor),this._prepareForm();let l=this.formCreator.form;l.addEventListener("submit",()=>n.close(JSON.stringify(Object.fromEntries(new FormData(l))))),l.addEventListener("reset",()=>n.close()),new FormData(l).forEach((c,u)=>v(e[u])&&(l.elements[u].value=e[u])),this.editor.dom.insertLastChild(l,n),n.showModal()}#a(){Array.from(this.editor.element.getElementsByTagName(r.DIALOG)).forEach(t=>{t.parentElement.removeChild(t)})}};var tt=class extends p{constructor(t){super(t,D.name)}_prepareForm(){this.formCreator.addLegend(this._("Abbreviation")).addTextInput("title",this._("Full term"),{placeholder:this._("Insert full term or leave empty to remove it")})}};var A=class{static get NONE(){return"none"}static get LEFT(){return"left"}static get CENTER(){return"center"}static get RIGHT(){return"right"}static values(){return[this.NONE,this.LEFT,this.CENTER,this.RIGHT]}};var a=class{static get A(){return"a"}static get ARROWDOWN(){return"ArrowDown"}static get ARROWLEFT(){return"ArrowLeft"}static get ARROWRIGHT(){return"ArrowRight"}static get ARROWUP(){return"ArrowUp"}static get B(){return"b"}static get BACKSPACE(){return"Backspace"}static get C(){return"c"}static get D(){return"d"}static get DEL(){return"Delete"}static get E(){return"e"}static get END(){return"End"}static get ENTER(){return"Enter"}static get F(){return"f"}static get G(){return"g"}static get HOME(){return"Home"}static get I(){return"i"}static get J(){return"j"}static get K(){return"k"}static get L(){return"l"}static get M(){return"m"}static get O(){return"o"}static get Q(){return"q"}static get R(){return"r"}static get S(){return"s"}static get SPACE(){return" "}static get T(){return"t"}static get TAB(){return"Tab"}static get U(){return"u"}static get V(){return"v"}static get W(){return"w"}static get X(){return"x"}static get Y(){return"y"}static get Z(){return"z"}static isEventFor(t,e,{alt:i=!1,ctrl:n=!1,shift:l=!1}={}){return(Array.isArray(e)&&e.includes(t.key)||t.key===e)&&t.altKey===i&&t.ctrlKey===n&&t.shiftKey===l}};var h=class{#t;get editor(){return this.#t}constructor(t){if(!(t instanceof T))throw new TypeError("Invalid argument");this.#t=t}handleEvent(t){V(this[t.type])&&this[t.type](t)}_(t){return this.editor.translate(t)}};var et=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){let e={[a.ARROWUP]:A.NONE,[a.ARROWLEFT]:A.LEFT,[a.ARROWDOWN]:A.CENTER,[a.ARROWRIGHT]:A.RIGHT};t.target===t.currentTarget&&a.isEventFor(t,Object.keys(e),{shift:!0})&&(t.preventDefault(),t.stopPropagation(),this.editor.dom.removeClass(t.target,...A.values()),e[t.key]!==A.NONE&&t.target.classList.add(e[t.key]))}};var rt=class extends L{filter(t){let e=this.editor.tags.get(t),i=this.editor.tags.allowed(t,r.P),n=e.editable||e.group===o.FORMAT,l=[],c=(u=null)=>{if(i&&l.length>0){let f=this.editor.dom.createElement(r.P,{html:l.join(" ")});u?this.editor.dom.insertBefore(f,u):this.editor.dom.insertLastChild(f,t),l=[]}};Array.from(t.childNodes).forEach(u=>{let f=u.textContent.trim();if(u instanceof HTMLElement){let g=this.#t(u),O=this.editor.tags.get(g);if(O&&this.editor.tags.allowed(t,g))c(g),this.#e(g,O);else if(O&&O.group===o.FORMAT&&i){let S=this.#e(g,O);S&&(l.push(S.outerHTML),t.removeChild(S))}else!n&&f&&i?(l.push(f),t.removeChild(g)):n&&f?t.replaceChild(this.editor.dom.createText(f),g):t.removeChild(g)}else u instanceof Text?(!n&&f&&i&&l.push(f),(!n||!f)&&t.removeChild(u)):u instanceof Node&&t.removeChild(u)}),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 it=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.isEventFor(t,a.DEL,{ctrl:!0})&&(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation())}};var ot=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(a.isEventFor(t,a.ENTER,{shift:!0})&&!this.editor.tags.allowed(t.target,r.BR))t.preventDefault(),t.stopPropagation();else if(a.isEventFor(t,a.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.isEventFor(t,a.BACKSPACE)&&!t.target.textContent&&t.target.hasAttribute("data-deletable")?(this.editor.dom.delete(t.target),t.preventDefault(),t.stopPropagation()):/^[A-Z]$/.test(t.key)&&a.isEventFor(t,t.key,{alt:!0,shift:!0})&&(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 st=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insert",this)}insert({detail:{element:t}}){t.hasAttribute("data-focusable")&&t.focus()}};var _=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(a.isEventFor(t,[a.ARROWLEFT,a.ARROWRIGHT,a.HOME,a.END])){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,n=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===n,u=t.target===l;t.key===a.ARROWLEFT&&!c?e.focus():t.key===a.ARROWRIGHT&&!u?i.focus():t.key===a.HOME||t.key===a.ARROWRIGHT&&u?n.focus():(t.key===a.END||t.key===a.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:n}=e.getBoundingClientRect(),{x:l,y:c}=this.editor.root.getBoundingClientRect(),u=i-l+t.clientWidth-this.editor.root.clientWidth,f=n-c-e.scrollTop+this.editor.root.offsetTop-t.clientHeight,g=t.clientWidth<this.editor.root.clientWidth?i-l:0;g>0&&u>0&&(g=g>u?(g-u)/2:0),t.style.left=`${g}px`,t.style.top=`${f}px`}_hide(t){t.hidden=!0,t.removeAttribute("style")}};var at=class extends _{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 nt=class extends _{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 dt=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&&a.isEventFor(t,[a.ARROWUP,a.ARROWDOWN,a.HOME,a.END])&&this.#t(t.target)){let e=t.target.previousElementSibling,i=t.target.nextElementSibling,n=t.target.parentElement.firstElementChild,l=t.target.parentElement.lastElementChild,c=t.target===n,u=t.target===l;t.key===a.ARROWUP&&!c&&e.hasAttribute("data-navigable")?e.focus():t.key===a.ARROWDOWN&&!u&&i.hasAttribute("data-navigable")?i.focus():(t.key===a.HOME||t.key===a.ARROWDOWN&&u)&&n.hasAttribute("data-navigable")?n.focus():(t.key===a.END||t.key===a.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(),n=this.editor.dom.getSelectedElement();return e.isCollapsed&&e.anchorOffset===0&&[i,t.firstChild].includes(n)}};var mt=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.isEventFor(t,a.BACKSPACE)&&t.target.matches(":only-child")?this.editor.dom.delete(t.target.parentElement):!a.isEventFor(t,a.TAB)&&!a.isEventFor(t,a.TAB,{shift:!0})&&(t.preventDefault(),t.stopPropagation())}};var lt=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){let e={[a.HOME]:E.FIRST,[a.ARROWUP]:E.PREV,[a.ARROWDOWN]:E.NEXT,[a.END]:E.LAST};t.target===t.currentTarget&&a.isEventFor(t,Object.keys(e),{ctrl:!0})&&(this.editor.dom.sort(t.target,e[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),n=i.parentElement;if(this.#t(),e.removeAttribute("data-sort"),e.releasePointerCapture(t.pointerId),this.#e(e,i)){if(e.localName===r.COL&&n===e.parentElement){let l=Array.from(n.children).indexOf(e),c=Array.from(n.children).indexOf(i),u=n.parentElement;Array.from(u.rows).forEach(f=>this.editor.dom.insertBefore(f.cells[l],f.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 ct=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 ht=class extends _{constructor(t){super(t),this.editor.toolbar.addEventListener("insertbutton",this)}};var m=class extends d{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 ct(this.editor),new ht(this.editor),new nt(this.editor),new at(this.editor),new ot(this.editor),new it(this.editor),new dt(this.editor),new lt(this.editor),new et(this.editor),new st(this.editor),new mt(this.editor),this.editor.filters.add(new rt(this.editor))}};var D=class extends d{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 tt(this.editor)),this._command(r.ABBR),this._formatbar("Abbreviation",a.A)}};var ut=class extends R{#t;constructor(t,e){if(!A.values().includes(e))throw new TypeError("Invalid argument");super(t,P.name+"-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-alignable")&&(this.editor.dom.removeClass(t,...A.values()),this.#t!==A.NONE&&t.classList.add(this.#t))}};var P=class extends d{static get name(){return"align"}static get dependencies(){return[m]}init(){let t={[A.NONE]:"No alignment",[A.LEFT]:"Align left",[A.CENTER]:"Align center",[A.RIGHT]:"Align right"};Object.entries(t).forEach(([e,i])=>{let n=new ut(this.editor,e);this.editor.commands.set(n),this._focusbar(i,n.name)})}};var ft=class extends p{_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 pt=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:H.name}})):t.parentElement.removeChild(t)}};var gt=class extends L{filter(t){t.querySelectorAll(`${r.FIGURE} > ${r.FIGCAPTION}:only-child`).forEach(e=>e.parentElement.removeChild(e))}};var Et=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 x=class extends d{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 Et(this.editor),this.editor.filters.add(new gt(this.editor))}};var H=class extends d{static get name(){return"audio"}static get dependencies(){return[m,x]}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 pt(this.editor),this.editor.dialogs.set(new ft(this.editor,this.constructor.name,this.editor.config.audio.browser)),this._command(r.AUDIO),this._toolbar("Audio")}};var bt=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Block")).addTextInput("id",this._("ID"),{required:"required"})}};var Tt=class extends HTMLElement{get content(){return this.shadowRoot.innerHTML}set content(t){this.shadowRoot.innerHTML=t}constructor(){super(),this.attachShadow({mode:"open"})}};var Lt=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 n="";this.editor.config.block.css&&(n=this.editor.config.block.css.split(",").map(c=>`<link rel="stylesheet" href="${c}">`).join(""));let l=await i.text();t.content=n+l}};var At=class extends d{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,Tt),this._tag({name:r.BLOCK,group:o.BLOCK,attributes:["id"],deletable:!0,empty:!0,focusable:!0,navigable:!0,sortable:!0}),new Lt(this.editor),this.editor.dialogs.set(new bt(this.editor,this.constructor.name,this.editor.config.block.browser)),this._command(r.BLOCK),this._toolbar("Block")}};var xt=class extends L{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(C.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 Rt=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:C.name}})}deleteblockquote({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(C.name)&&t.parentElement.removeChild(t)}};var wt=class extends L{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 w=class extends d{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 wt(this.editor))}};var C=class extends d{static get name(){return"blockquote"}static get dependencies(){return[m,w,x]}init(){this._tag({name:r.BLOCKQUOTE,group:o.QUOTE,children:[o.BREAK,o.FORMAT],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new Rt(this.editor),this._command(r.BLOCKQUOTE),this._toolbar("Blockquote"),this.editor.filters.add(new xt(this.editor))}};var Ot=class extends d{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",a.B)}};var It=class extends d{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",a.Z)}};var yt=class extends d{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",a.C)}};var Ct=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("value",this._("Machine-readable Value"),{placeholder:this._("Insert value or leave empty to remove it")})}};var Nt=class extends d{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 Ct(this.editor,this.constructor.name)),this._command(r.DATA),this._formatbar("Data",a.J)}};var _t=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Definition")).addTextInput("title",this._("Term"),{placeholder:this._("Insert term or leave empty to remove it")})}};var St=class extends d{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 _t(this.editor,this.constructor.name)),this._command(r.DFN),this._formatbar("Definition",a.D)}};var Mt=class extends R{constructor(t){super(t,U.name)}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-deletable")&&this.editor.dom.delete(t)}};var U=class extends d{static get name(){return"delete"}static get dependencies(){return[m]}init(){this.editor.commands.set(new Mt(this.editor)),this._focusbar("Delete",this.constructor.name)}};var Bt=class extends d{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",a.G)}};var vt=class extends L{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 Ft=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){a.isEventFor(t,a.SPACE)?(t.preventDefault(),t.stopPropagation(),this.editor.dom.insertText(" ")):a.isEventFor(t,a.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 Dt=class extends d{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],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 Ft(this.editor),this._command(r.DETAILS),this._toolbar("Details"),this.editor.filters.add(new vt(this.editor))}};var Pt=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Division")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var Ht=class extends d{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 Pt(this.editor,this.constructor.name)),this._command(r.DIV),this._toolbar("Division")}};var Ut=class extends d{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",a.E)}};var Gt=class extends d{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 kt=class extends d{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 ve={"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","Align center":"zentriert","Align left":"linksb\xFCndig","Align right":"rechtsb\xFCndig","No alignment":"Keine Ausrichtung",Audio:"Audio","Insert URL to audio":"URL zur Audiodatei eingeben",Alt:"Alt",Cancel:"Abbrechen",Save:"Speichern",Shift:"Umschalt",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",Delete:"L\xF6schen","Text Deletion":"Textl\xF6schung",Details:"Details",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","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",strikethrough:"durchgestrichen","strongly emphasized":"stark betont",Subheading:"Unter\xFCberschrift",subscript:"tiefgestellt",superscript:"hochgestellt",Columns:"Spalten","Delete next column":"N\xE4chste Spalte l\xF6schen","Delete next row":"N\xE4chste Zeile l\xF6schen","Delete previous column":"Vorherige Spalte l\xF6schen","Delete previous row":"Vorherige Zeile l\xF6schen",Rows:"Zeilen","Sort after next column":"Hinter die n\xE4chste Spalte sortieren","Sort after next row":"Hinter die n\xE4chste Zeile sortieren","Sort before previous column":"Vor die vorherige Spalte sortieren","Sort before previous row":"Vor die vorherige Zeile sortieren","Sort column to the beginning":"Spalte an den Anfang sortieren","Sort row to the beginning":"Zeile an den Anfang sortieren","Sort column to the end":"Spalte ans Ende sortieren","Sort row to the end":"Zeile ans Ende sortieren",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 Kt=class extends d{static get name(){return"i18n"}static get dependencies(){return[m]}init(){this._i18n({de:ve})}};var Wt=class extends p{_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 zt=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 d{static get name(){return"iframe"}static get dependencies(){return[m,x]}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 zt(this.editor),this.editor.dialogs.set(new Wt(this.editor,this.constructor.name,this.editor.config.iframe.browser)),this._command(r.IFRAME),this._toolbar("Iframe")}};var qt=class extends p{_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 Vt=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 d{static get name(){return"image"}static get dependencies(){return[m,x]}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 Vt(this.editor),this.editor.dialogs.set(new qt(this.editor,this.constructor.name,this.editor.config.image.browser)),this._command(r.IMG),this._toolbar("Image")}};var jt=class extends d{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",a.F)}};var $t=class extends d{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",a.I)}};var Qt=class extends d{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",a.K)}};var Yt=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Link")).addTextInput("href",this._("URL"),{pattern:"(https?|/|mailto:|tel:).+",placeholder:this._("Insert link or leave empty to unlink")})}};var Zt=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 Xt=class extends d{static get name(){return"link"}static get dependencies(){return[m]}init(){this._tag({name:r.A,group:o.FORMAT,attributes:["href"]}),new Zt(this.editor),this.editor.dialogs.set(new Yt(this.editor,this.constructor.name)),this._command(r.A),this._formatbar("Link",a.L)}};var Jt=class extends d{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",a.M)}};var te=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 d{static get name(){return"list"}static get dependencies(){return[m,w]}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 te(this.editor)}};var ee=class extends d{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 re=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 ie=class extends d{static get name(){return"paragraph"}static get dependencies(){return[m,w]}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 re(this.editor),this._command(r.P),this._toolbar("Paragraph")}};var oe=class extends L{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(N.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 se=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:N.name}})}deletepre({detail:{target:t}}){t.localName===r.FIGURE&&t.classList.contains(N.name)&&t.parentElement.removeChild(t)}};var N=class extends d{static get name(){return"preformat"}static get dependencies(){return[m,w,x]}init(){this._tag({name:r.PRE,group:o.PREFORMAT,children:[o.BREAK],deletable:!0,editable:!0,navigable:!0,enter:r.P}),new se(this.editor),this._command(r.PRE),this._toolbar("Preformatted Text"),this.editor.filters.add(new oe(this.editor))}};var ae=class extends d{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",a.Q)}};var ne=class extends d{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",a.O)}};var de=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Section")).addTextInput("class",this._("CSS class"),{placeholder:this._("Insert CSS class")})}};var me=class extends d{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 de(this.editor,this.constructor.name)),this._command(r.SECTION),this._toolbar("Section")}};var le=class extends d{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",a.W)}};var ce=class extends R{#t;constructor(t,e){if(!E.values().includes(e))throw new TypeError("Invalid argument");super(t,W.name+"-"+e),this.#t=e}execute(){let t=this.editor.dom.getActiveElement();t?.hasAttribute("data-sortable")&&this.editor.dom.sort(t,this.#t)}};var W=class extends d{static get name(){return"sort"}static get dependencies(){return[m]}init(){let t={[E.FIRST]:"Sort to the beginning",[E.PREV]:"Sort before previous element",[E.NEXT]:"Sort after next element",[E.LAST]:"Sort to the end"};Object.entries(t).forEach(([e,i])=>{let n=new ce(this.editor,e);this.editor.commands.set(n),this._focusbar(i,n.name)})}};var he=class extends d{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",a.R)}};var ue=class extends d{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",a.S)}};var fe=class extends d{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 pe=class extends d{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",a.X)}};var ge=class extends d{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",a.Y)}};var Ee=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,n=e.closest(r.TABLE);if(e instanceof HTMLTableCellElement&&i instanceof HTMLTableRowElement&&n instanceof HTMLTableElement&&a.isEventFor(t,[a.ARROWLEFT,a.ARROWRIGHT,a.ARROWUP,a.ARROWDOWN])&&this.#t(e,t.key)){let l=e.cellIndex,c=i.cells.length,u=l===0,f=l===c-1,g=i.rowIndex===0,O=i.rowIndex===n.rows.length-1;t.preventDefault(),t.stopPropagation(),t.key===a.ARROWLEFT&&!u?this.editor.dom.focusEnd(i.cells[l-1]):t.key===a.ARROWLEFT&&g?this.editor.dom.focusEnd(n.rows[n.rows.length-1].cells[c-1]):t.key===a.ARROWLEFT?this.editor.dom.focusEnd(n.rows[i.rowIndex-1].cells[c-1]):t.key===a.ARROWRIGHT&&!f?i.cells[l+1].focus():t.key===a.ARROWRIGHT&&O?n.rows[0].cells[0].focus():t.key===a.ARROWRIGHT?n.rows[i.rowIndex+1].cells[0].focus():t.key===a.ARROWUP&&g?n.rows[n.rows.length-1].cells[l].focus():t.key===a.ARROWUP?n.rows[i.rowIndex-1].cells[l].focus():t.key===a.ARROWDOWN&&O?n.rows[0].cells[l].focus():t.key===a.ARROWDOWN&&n.rows[i.rowIndex+1].cells[l].focus()}}#t(t,e){if([a.ARROWUP,a.ARROWDOWN].includes(e))return!0;let i=this.editor.dom.getSelection(),n=i.anchorNode instanceof HTMLElement?i.anchorNode:t;if(!i.isCollapsed)return!1;if(e===a.ARROWLEFT){let c=t.firstChild;return c instanceof HTMLElement&&(c=c.firstChild),i.anchorOffset===0&&[t,c].includes(n)}let l=t.lastChild;return t.lastChild instanceof HTMLBRElement&&t.lastChild.previousSibling&&(l=t.lastChild.previousSibling),l instanceof HTMLElement&&(l=l.lastChild),i.anchorOffset===n.textContent.length&&[t,l].includes(n)}};var be=class extends h{constructor(t){super(t),this.editor.root.addEventListener("insertcol",this)}insertcol({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){if(a.isEventFor(t,a.ENTER)){let e=t.target.parentElement,i=e.parentElement,n=Array.from(e.children).indexOf(t.target);Array.from(i.rows).forEach(l=>this.editor.dom.insertAfter(this.editor.dom.createElement(l.cells[n].localName),l.cells[n])),this.editor.dom.insertAfter(this.editor.dom.createElement(r.COL),t.target)}else a.isEventFor(t,a.BACKSPACE)&&this.editor.dom.delete(t.target)}};var Te=class extends R{constructor(t){super(t,y.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 Le=class extends p{_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 Ae=class extends L{filter(t){t instanceof HTMLElement&&t.localName===r.FIGURE&&t.classList.contains(y.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 xe=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:y.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 Re=class extends h{constructor(t){super(t),this.editor.root.addEventListener("inserttr",this)}inserttr({detail:{element:t}}){t.addEventListener("keydown",this)}keydown(t){a.isEventFor(t,a.ENTER)?this.editor.dom.insertAfter(this.editor.dom.createTableRow(t.target.cells.length),t.target):a.isEventFor(t,a.BACKSPACE)&&this.editor.dom.delete(t.target)}};var y=class extends d{static get name(){return"table"}static get dependencies(){return[m,w,x]}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 xe(this.editor),new be(this.editor),new Re(this.editor),new Ee(this.editor),this.editor.filters.add(new Ae(this.editor)),this.editor.dialogs.set(new Le(this.editor,this.constructor.name)),this.editor.commands.set(new Te(this.editor)),this._toolbar("Table")}#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 we=class extends p{_prepareForm(){this.formCreator.addLegend(this._("Data")).addTextInput("datetime",this._("Machine-readable Datetime"),{placeholder:this._("Insert date/time or leave empty to remove it")})}};var Oe=class extends d{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 we(this.editor,this.constructor.name)),this._command(r.TIME),this._formatbar("Time",a.T)}};var Ie=class extends d{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",a.U)}};var ye=class extends d{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 Ce=class extends d{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",a.V)}};var Ne=class extends p{_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 _e=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 d{static get name(){return"video"}static get dependencies(){return[m,x]}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 _e(this.editor),this.editor.dialogs.set(new Ne(this.editor,this.constructor.name,this.editor.config.video.browser)),this._command(r.VIDEO),this._toolbar("Video")}};var Be=class extends T{static get defaultConfig(){return{base:{plugins:[Kt,Ot,$t,ue,Ut,Ie,he,Xt,Jt,le,St,D,ae,It,yt,Qt,ne,Ce,pe,ge,Oe,Nt,jt,Bt,ie,Gt,fe,ye,ee,kt,C,k,z,H,G,y,N,me,Dt,Ht,At,P,W,U]}}}};export{Be as default};
|
package/dist/editor.woff2
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akilli/editor",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "A HTML standards-compliant and dependency-free rich text editor",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"contenteditable",
|
|
@@ -25,18 +25,22 @@
|
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
27
|
"start": "npx --yes servor --reload . index.html 20000",
|
|
28
|
+
"lint:check": "prettier --check '**/*.js'",
|
|
29
|
+
"lint:fix": "prettier --write '**/*.js'",
|
|
28
30
|
"build": "npm run build:clean && npm run build:font && npm run build:css && npm run build:js",
|
|
29
31
|
"build:clean": "rm -rf dist",
|
|
30
32
|
"build:font": "mkdir -p dist && cp src/editor/editor.woff2 dist/editor.woff2",
|
|
31
33
|
"build:css": "esbuild src/editor/editor.css --minify --outfile=dist/editor.css",
|
|
32
|
-
"build:js": "esbuild src/editor/Editor.js --minify --bundle --outfile=dist/editor.js --target=
|
|
33
|
-
"release:patch": "npm ci && npm version patch && npm publish",
|
|
34
|
-
"release:minor": "npm ci && npm version minor && npm publish",
|
|
35
|
-
"release:major": "npm ci && npm version major && npm publish",
|
|
34
|
+
"build:js": "esbuild src/editor/Editor.js --minify --bundle --outfile=dist/editor.js --target=es2022 --format=esm",
|
|
35
|
+
"release:patch": "npm ci && npm run lint:check && npm version patch && npm publish",
|
|
36
|
+
"release:minor": "npm ci && npm run lint:check && npm version minor && npm publish",
|
|
37
|
+
"release:major": "npm ci && npm run lint:check && npm version major && npm publish",
|
|
38
|
+
"preversion": "git fetch --tags",
|
|
36
39
|
"version": "npm run build && git add -A dist",
|
|
37
|
-
"postversion": "git push
|
|
40
|
+
"postversion": "git push --follow-tags"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
40
|
-
"esbuild": "^0.15.
|
|
43
|
+
"esbuild": "^0.15.13",
|
|
44
|
+
"prettier": "^2.7.1"
|
|
41
45
|
}
|
|
42
46
|
}
|