@lexical/code 0.14.2 → 0.14.3

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.
@@ -6,20 +6,6 @@
6
6
  *
7
7
  */
8
8
  import type { EditorConfig, LexicalNode, LineBreakNode, NodeKey, SerializedTextNode, Spread, TabNode } from 'lexical';
9
- import 'prismjs/components/prism-clike';
10
- import 'prismjs/components/prism-javascript';
11
- import 'prismjs/components/prism-markup';
12
- import 'prismjs/components/prism-markdown';
13
- import 'prismjs/components/prism-c';
14
- import 'prismjs/components/prism-css';
15
- import 'prismjs/components/prism-objectivec';
16
- import 'prismjs/components/prism-sql';
17
- import 'prismjs/components/prism-python';
18
- import 'prismjs/components/prism-rust';
19
- import 'prismjs/components/prism-swift';
20
- import 'prismjs/components/prism-typescript';
21
- import 'prismjs/components/prism-java';
22
- import 'prismjs/components/prism-cpp';
23
9
  import { ElementNode, TextNode } from 'lexical';
24
10
  export declare const DEFAULT_CODE_LANGUAGE = "javascript";
25
11
  type SerializedCodeHighlightNode = Spread<{
@@ -6,20 +6,6 @@
6
6
  *
7
7
  */
8
8
  import type { LexicalEditor, LineBreakNode } from 'lexical';
9
- import 'prismjs/components/prism-clike';
10
- import 'prismjs/components/prism-javascript';
11
- import 'prismjs/components/prism-markup';
12
- import 'prismjs/components/prism-markdown';
13
- import 'prismjs/components/prism-c';
14
- import 'prismjs/components/prism-css';
15
- import 'prismjs/components/prism-objectivec';
16
- import 'prismjs/components/prism-sql';
17
- import 'prismjs/components/prism-python';
18
- import 'prismjs/components/prism-rust';
19
- import 'prismjs/components/prism-swift';
20
- import 'prismjs/components/prism-typescript';
21
- import 'prismjs/components/prism-java';
22
- import 'prismjs/components/prism-cpp';
23
9
  import { TabNode } from 'lexical';
24
10
  import { CodeHighlightNode } from './CodeHighlightNode';
25
11
  type TokenContent = string | Token | (string | Token)[];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import * as Prism from 'prismjs';
9
+ export declare const reifyPrismLanguages: () => unknown;
10
+ export { Prism };
package/CodeNode.d.ts CHANGED
@@ -5,22 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
- import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread, TabNode } from 'lexical';
9
8
  import type { CodeHighlightNode } from '@lexical/code';
10
- import 'prismjs/components/prism-clike';
11
- import 'prismjs/components/prism-javascript';
12
- import 'prismjs/components/prism-markup';
13
- import 'prismjs/components/prism-markdown';
14
- import 'prismjs/components/prism-c';
15
- import 'prismjs/components/prism-css';
16
- import 'prismjs/components/prism-objectivec';
17
- import 'prismjs/components/prism-sql';
18
- import 'prismjs/components/prism-python';
19
- import 'prismjs/components/prism-rust';
20
- import 'prismjs/components/prism-swift';
21
- import 'prismjs/components/prism-typescript';
22
- import 'prismjs/components/prism-java';
23
- import 'prismjs/components/prism-cpp';
9
+ import type { DOMConversionMap, DOMExportOutput, EditorConfig, LexicalEditor, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread, TabNode } from 'lexical';
24
10
  import { ElementNode } from 'lexical';
25
11
  export type SerializedCodeNode = Spread<{
26
12
  language: string | null | undefined;
@@ -6,23 +6,37 @@
6
6
  */
7
7
  'use strict';
8
8
 
9
- var Prism = require('prismjs');
10
- require('prismjs/components/prism-clike');
11
- require('prismjs/components/prism-javascript');
12
- require('prismjs/components/prism-markup');
13
- require('prismjs/components/prism-markdown');
14
- require('prismjs/components/prism-c');
15
- require('prismjs/components/prism-css');
16
- require('prismjs/components/prism-objectivec');
17
- require('prismjs/components/prism-sql');
18
- require('prismjs/components/prism-python');
19
- require('prismjs/components/prism-rust');
20
- require('prismjs/components/prism-swift');
21
- require('prismjs/components/prism-typescript');
22
- require('prismjs/components/prism-java');
23
- require('prismjs/components/prism-cpp');
24
9
  var utils = require('@lexical/utils');
25
10
  var lexical = require('lexical');
11
+ var Prism = require('prismjs');
12
+ var prism_clike = require('prismjs/components/prism-clike');
13
+ var prism_javascript = require('prismjs/components/prism-javascript');
14
+ var prism_markup = require('prismjs/components/prism-markup');
15
+ var prism_markdown = require('prismjs/components/prism-markdown');
16
+ var prism_c = require('prismjs/components/prism-c');
17
+ var prism_css = require('prismjs/components/prism-css');
18
+ var prism_objectivec = require('prismjs/components/prism-objectivec');
19
+ var prism_sql = require('prismjs/components/prism-sql');
20
+ var prism_python = require('prismjs/components/prism-python');
21
+ var prism_rust = require('prismjs/components/prism-rust');
22
+ var prism_swift = require('prismjs/components/prism-swift');
23
+ var prism_typescript = require('prismjs/components/prism-typescript');
24
+ var prism_java = require('prismjs/components/prism-java');
25
+ var prism_cpp = require('prismjs/components/prism-cpp');
26
+
27
+ /**
28
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
29
+ *
30
+ * This source code is licensed under the MIT license found in the
31
+ * LICENSE file in the root directory of this source tree.
32
+ *
33
+ */
34
+
35
+ // Avoid tree-shaking
36
+ const reifyPrismLanguages = () => ({
37
+ Prism,
38
+ languages: [prism_clike, prism_javascript, prism_markup, prism_markdown, prism_c, prism_css, prism_objectivec, prism_sql, prism_python, prism_rust, prism_swift, prism_typescript, prism_java, prism_cpp]
39
+ });
26
40
 
27
41
  /**
28
42
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -1079,6 +1093,7 @@ function handleMoveTo(type, event) {
1079
1093
  return true;
1080
1094
  }
1081
1095
  function registerCodeHighlighting(editor, tokenizer) {
1096
+ reifyPrismLanguages();
1082
1097
  if (!editor.hasNodes([CodeNode, CodeHighlightNode])) {
1083
1098
  throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
1084
1099
  }
@@ -4,23 +4,37 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import * as Prism from 'prismjs';
8
- import 'prismjs/components/prism-clike';
9
- import 'prismjs/components/prism-javascript';
10
- import 'prismjs/components/prism-markup';
11
- import 'prismjs/components/prism-markdown';
12
- import 'prismjs/components/prism-c';
13
- import 'prismjs/components/prism-css';
14
- import 'prismjs/components/prism-objectivec';
15
- import 'prismjs/components/prism-sql';
16
- import 'prismjs/components/prism-python';
17
- import 'prismjs/components/prism-rust';
18
- import 'prismjs/components/prism-swift';
19
- import 'prismjs/components/prism-typescript';
20
- import 'prismjs/components/prism-java';
21
- import 'prismjs/components/prism-cpp';
22
7
  import { addClassNamesToElement, isHTMLElement, removeClassNamesFromElement, mergeRegister } from '@lexical/utils';
23
8
  import { ElementNode, $applyNodeReplacement, $createParagraphNode, $isTextNode, $isTabNode, $createTabNode, $createLineBreakNode, TextNode, $isLineBreakNode, $getNodeByKey, KEY_TAB_COMMAND, COMMAND_PRIORITY_LOW, INSERT_TAB_COMMAND, $getSelection, $insertNodes, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ARROW_DOWN_COMMAND, MOVE_TO_END, MOVE_TO_START, $createTextNode, $isRangeSelection } from 'lexical';
9
+ import * as Prism from 'prismjs';
10
+ import * as prism_clike from 'prismjs/components/prism-clike.js';
11
+ import * as prism_javascript from 'prismjs/components/prism-javascript.js';
12
+ import * as prism_markup from 'prismjs/components/prism-markup.js';
13
+ import * as prism_markdown from 'prismjs/components/prism-markdown.js';
14
+ import * as prism_c from 'prismjs/components/prism-c.js';
15
+ import * as prism_css from 'prismjs/components/prism-css.js';
16
+ import * as prism_objectivec from 'prismjs/components/prism-objectivec.js';
17
+ import * as prism_sql from 'prismjs/components/prism-sql.js';
18
+ import * as prism_python from 'prismjs/components/prism-python.js';
19
+ import * as prism_rust from 'prismjs/components/prism-rust.js';
20
+ import * as prism_swift from 'prismjs/components/prism-swift.js';
21
+ import * as prism_typescript from 'prismjs/components/prism-typescript.js';
22
+ import * as prism_java from 'prismjs/components/prism-java.js';
23
+ import * as prism_cpp from 'prismjs/components/prism-cpp.js';
24
+
25
+ /**
26
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
27
+ *
28
+ * This source code is licensed under the MIT license found in the
29
+ * LICENSE file in the root directory of this source tree.
30
+ *
31
+ */
32
+
33
+ // Avoid tree-shaking
34
+ const reifyPrismLanguages = () => ({
35
+ Prism,
36
+ languages: [prism_clike, prism_javascript, prism_markup, prism_markdown, prism_c, prism_css, prism_objectivec, prism_sql, prism_python, prism_rust, prism_swift, prism_typescript, prism_java, prism_cpp]
37
+ });
24
38
 
25
39
  /**
26
40
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -1077,6 +1091,7 @@ function handleMoveTo(type, event) {
1077
1091
  return true;
1078
1092
  }
1079
1093
  function registerCodeHighlighting(editor, tokenizer) {
1094
+ reifyPrismLanguages();
1080
1095
  if (!editor.hasNodes([CodeNode, CodeHighlightNode])) {
1081
1096
  throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
1082
1097
  }
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import * as modDev from './LexicalCode.dev.esm.js';
8
- import * as modProd from './LexicalCode.prod.esm.js';
7
+ import * as modDev from './LexicalCode.dev.mjs';
8
+ import * as modProd from './LexicalCode.prod.mjs';
9
9
  const mod = process.env.NODE_ENV === 'development' ? modDev : modProd;
10
10
  export const $createCodeHighlightNode = mod.$createCodeHighlightNode;
11
11
  export const $createCodeNode = mod.$createCodeNode;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ const mod = await (process.env.NODE_ENV === 'development' ? import('./LexicalCode.dev.mjs') : import('./LexicalCode.prod.mjs'));
8
+ export const $createCodeHighlightNode = mod.$createCodeHighlightNode;
9
+ export const $createCodeNode = mod.$createCodeNode;
10
+ export const $isCodeHighlightNode = mod.$isCodeHighlightNode;
11
+ export const $isCodeNode = mod.$isCodeNode;
12
+ export const CODE_LANGUAGE_FRIENDLY_NAME_MAP = mod.CODE_LANGUAGE_FRIENDLY_NAME_MAP;
13
+ export const CODE_LANGUAGE_MAP = mod.CODE_LANGUAGE_MAP;
14
+ export const CodeHighlightNode = mod.CodeHighlightNode;
15
+ export const CodeNode = mod.CodeNode;
16
+ export const DEFAULT_CODE_LANGUAGE = mod.DEFAULT_CODE_LANGUAGE;
17
+ export const PrismTokenizer = mod.PrismTokenizer;
18
+ export const getCodeLanguages = mod.getCodeLanguages;
19
+ export const getDefaultCodeLanguage = mod.getDefaultCodeLanguage;
20
+ export const getEndOfCodeInLine = mod.getEndOfCodeInLine;
21
+ export const getFirstCodeNodeOfLine = mod.getFirstCodeNodeOfLine;
22
+ export const getLanguageFriendlyName = mod.getLanguageFriendlyName;
23
+ export const getLastCodeNodeOfLine = mod.getLastCodeNodeOfLine;
24
+ export const getStartOfCodeInLine = mod.getStartOfCodeInLine;
25
+ export const normalizeCodeLang = mod.normalizeCodeLang;
26
+ export const registerCodeHighlighting = mod.registerCodeHighlighting;
@@ -4,39 +4,39 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- 'use strict';var d=require("prismjs");require("prismjs/components/prism-clike");require("prismjs/components/prism-javascript");require("prismjs/components/prism-markup");require("prismjs/components/prism-markdown");require("prismjs/components/prism-c");require("prismjs/components/prism-css");require("prismjs/components/prism-objectivec");require("prismjs/components/prism-sql");require("prismjs/components/prism-python");require("prismjs/components/prism-rust");require("prismjs/components/prism-swift");
8
- require("prismjs/components/prism-typescript");require("prismjs/components/prism-java");require("prismjs/components/prism-cpp");var m=require("@lexical/utils"),q=require("lexical");let v=a=>null!=a&&d.languages.hasOwnProperty(a)?a:void 0;function w(a,b){for(let c of a.childNodes){if(m.isHTMLElement(c)&&c.tagName===b)return!0;w(c,b)}return!1}
9
- class y extends q.ElementNode{static getType(){return"code"}static clone(a){return new y(a.__language,a.__key)}constructor(a,b){super(b);this.__language=v(a)}createDOM(a){let b=document.createElement("code");m.addClassNamesToElement(b,a.theme.code);b.setAttribute("spellcheck","false");(a=this.getLanguage())&&b.setAttribute("data-highlight-language",a);return b}updateDOM(a,b){let c=this.__language;a=a.__language;c?c!==a&&b.setAttribute("data-highlight-language",c):a&&b.removeAttribute("data-highlight-language");
10
- return!1}exportDOM(a){let b=document.createElement("pre");m.addClassNamesToElement(b,a._config.theme.code);b.setAttribute("spellcheck","false");(a=this.getLanguage())&&b.setAttribute("data-highlight-language",a);return{element:b}}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||w(a,"BR"))?{conversion:z,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:z,priority:0}),table:a=>A(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");
7
+ 'use strict';var d=require("@lexical/utils"),m=require("lexical"),q=require("prismjs");require("prismjs/components/prism-clike");require("prismjs/components/prism-javascript");require("prismjs/components/prism-markup");require("prismjs/components/prism-markdown");require("prismjs/components/prism-c");require("prismjs/components/prism-css");require("prismjs/components/prism-objectivec");require("prismjs/components/prism-sql");require("prismjs/components/prism-python");require("prismjs/components/prism-rust");
8
+ require("prismjs/components/prism-swift");require("prismjs/components/prism-typescript");require("prismjs/components/prism-java");require("prismjs/components/prism-cpp");let v=a=>null!=a&&q.languages.hasOwnProperty(a)?a:void 0;function w(a,b){for(let c of a.childNodes){if(d.isHTMLElement(c)&&c.tagName===b)return!0;w(c,b)}return!1}
9
+ class y extends m.ElementNode{static getType(){return"code"}static clone(a){return new y(a.__language,a.__key)}constructor(a,b){super(b);this.__language=v(a)}createDOM(a){let b=document.createElement("code");d.addClassNamesToElement(b,a.theme.code);b.setAttribute("spellcheck","false");(a=this.getLanguage())&&b.setAttribute("data-highlight-language",a);return b}updateDOM(a,b){let c=this.__language;a=a.__language;c?c!==a&&b.setAttribute("data-highlight-language",c):a&&b.removeAttribute("data-highlight-language");
10
+ return!1}exportDOM(a){let b=document.createElement("pre");d.addClassNamesToElement(b,a._config.theme.code);b.setAttribute("spellcheck","false");(a=this.getLanguage())&&b.setAttribute("data-highlight-language",a);return{element:b}}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||w(a,"BR"))?{conversion:z,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:z,priority:0}),table:a=>A(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");
11
11
  return a.classList.contains("js-file-line")?{conversion:ca,priority:3}:b&&A(b)?{conversion:B,priority:3}:null},tr:a=>(a=a.closest("table"))&&A(a)?{conversion:B,priority:3}:null}}static importJSON(a){let b=C(a.language);b.setFormat(a.format);b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}insertNewAfter(a,b=!0){var c=this.getChildren(),e=c.length;if(2<=e&&"\n"===c[e-1].getTextContent()&&"\n"===c[e-
12
- 2].getTextContent()&&a.isCollapsed()&&a.anchor.key===this.__key&&a.anchor.offset===e)return c[e-1].remove(),c[e-2].remove(),a=q.$createParagraphNode(),this.insertAfter(a,b),a;let {anchor:f,focus:g}=a;b=(f.isBefore(g)?f:g).getNode();if(q.$isTextNode(b)){e=D(b);for(c=[];;)if(q.$isTabNode(e))c.push(q.$createTabNode()),e=e.getNextSibling();else if(E(e)){for(var h=0,k=e.getTextContent(),l=e.getTextContentSize();h<l&&" "===k[h];)h++;0!==h&&c.push(F(" ".repeat(h)));if(h!==l)break;e=e.getNextSibling()}else break;
13
- e=b.splitText(f.offset)[0];h=0===f.offset?0:1;h=e.getIndexWithinParent()+h;k=b.getParentOrThrow();l=[q.$createLineBreakNode(),...c];k.splice(h,0,l);(c=c[c.length-1])?c.select():0===f.offset?e.selectPrevious():e.getNextSibling().selectNext(0,0)}G(b)&&({offset:a}=a.anchor,b.splice(a,0,[q.$createLineBreakNode()]),b.select(a+1,a+1));return null}canIndent(){return!1}collapseAtStart(){let a=q.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=
14
- v(a)}getLanguage(){return this.getLatest().__language}}function C(a){return q.$applyNodeReplacement(new y(a))}function G(a){return a instanceof y}function z(a){let b;m.isHTMLElement(a)&&(b=a.getAttribute("data-highlight-language"));return{node:C(b)}}function aa(a){let b=null!==a.style.fontFamily.match("monospace");return b||da(a)?{after:c=>{let e=a.parentNode;null!=e&&a!==e.lastChild&&c.push(q.$createLineBreakNode());return c},node:b?C():null}:{node:null}}function ba(){return{node:C()}}
15
- function B(){return{node:null}}function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(q.$createLineBreakNode());return b},node:null}}function da(a){for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace"))return!0;a=a.parentElement}return!1}function A(a){return a.classList.contains("js-file-line-container")}
12
+ 2].getTextContent()&&a.isCollapsed()&&a.anchor.key===this.__key&&a.anchor.offset===e)return c[e-1].remove(),c[e-2].remove(),a=m.$createParagraphNode(),this.insertAfter(a,b),a;let {anchor:f,focus:g}=a;b=(f.isBefore(g)?f:g).getNode();if(m.$isTextNode(b)){e=D(b);for(c=[];;)if(m.$isTabNode(e))c.push(m.$createTabNode()),e=e.getNextSibling();else if(E(e)){for(var h=0,k=e.getTextContent(),l=e.getTextContentSize();h<l&&" "===k[h];)h++;0!==h&&c.push(F(" ".repeat(h)));if(h!==l)break;e=e.getNextSibling()}else break;
13
+ e=b.splitText(f.offset)[0];h=0===f.offset?0:1;h=e.getIndexWithinParent()+h;k=b.getParentOrThrow();l=[m.$createLineBreakNode(),...c];k.splice(h,0,l);(c=c[c.length-1])?c.select():0===f.offset?e.selectPrevious():e.getNextSibling().selectNext(0,0)}G(b)&&({offset:a}=a.anchor,b.splice(a,0,[m.$createLineBreakNode()]),b.select(a+1,a+1));return null}canIndent(){return!1}collapseAtStart(){let a=m.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=
14
+ v(a)}getLanguage(){return this.getLatest().__language}}function C(a){return m.$applyNodeReplacement(new y(a))}function G(a){return a instanceof y}function z(a){let b;d.isHTMLElement(a)&&(b=a.getAttribute("data-highlight-language"));return{node:C(b)}}function aa(a){let b=null!==a.style.fontFamily.match("monospace");return b||da(a)?{after:c=>{let e=a.parentNode;null!=e&&a!==e.lastChild&&c.push(m.$createLineBreakNode());return c},node:b?C():null}:{node:null}}function ba(){return{node:C()}}
15
+ function B(){return{node:null}}function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(m.$createLineBreakNode());return b},node:null}}function da(a){for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace"))return!0;a=a.parentElement}return!1}function A(a){return a.classList.contains("js-file-line-container")}
16
16
  let H={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",typescript:"TypeScript",xml:"XML"},I={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function K(a){return I[a]||a}
17
- class L extends q.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new L(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(a){let b=super.createDOM(a);a=M(a.theme,this.__highlightType);m.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let e=super.updateDOM(a,b,c);a=M(c.theme,a.__highlightType);c=M(c.theme,this.__highlightType);a!==
18
- c&&(a&&m.removeClassNamesFromElement(b,a),c&&m.addClassNamesToElement(b,c));return e}static importJSON(a){let b=F(a.text,a.highlightType);b.setFormat(a.format);b.setDetail(a.detail);b.setMode(a.mode);b.setStyle(a.style);return b}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType(),type:"code-highlight",version:1}}setFormat(){return this}isParentRequired(){return!0}createParentElementNode(){return C()}}function M(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}
19
- function F(a,b){return q.$applyNodeReplacement(new L(a,b))}function E(a){return a instanceof L}function D(a){let b=a;for(;E(a)||q.$isTabNode(a);)b=a,a=a.getPreviousSibling();return b}function N(a){let b=a;for(;E(a)||q.$isTabNode(a);)b=a,a=a.getNextSibling();return b}let O={defaultLanguage:"javascript",tokenize(a,b){return d.tokenize(a,d.languages[b||""]||d.languages[this.defaultLanguage])}};
20
- function P(a,b){let c=null;var e=null,f=a;let g=b,h=a.getTextContent();for(;;){if(0===g){f=f.getPreviousSibling();if(null===f)break;if(!(E(f)||q.$isTabNode(f)||q.$isLineBreakNode(f)))throw Error("Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode");if(q.$isLineBreakNode(f)){c={node:f,offset:1};break}g=Math.max(0,f.getTextContentSize()-1);h=f.getTextContent()}else g--;let k=h[g];E(f)&&" "!==k&&(e={node:f,offset:g})}if(null!==e)return e;e=null;b<a.getTextContentSize()?E(a)&&(e=a.getTextContent()[b]):
21
- (f=a.getNextSibling(),E(f)&&(e=f.getTextContent()[0]));if(null!==e&&" "!==e)return c;a:for(e=a,f=a.getTextContent(),a=a.getTextContentSize();;){if(!E(e)||b===a){e=e.getNextSibling();if(null===e||q.$isLineBreakNode(e)){a=null;break a}E(e)&&(b=0,f=e.getTextContent(),a=e.getTextContentSize())}if(E(e)){if(" "!==f[b]){a={node:e,offset:b};break a}b++}}return null!==a?a:c}function Q(a){a=N(a);if(q.$isLineBreakNode(a))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return a}
22
- function R(a,b,c){let e=a.getParent();G(e)?S(e,b,c):E(a)&&a.replace(q.$createTextNode(a.__text))}let T=new Set;
23
- function S(a,b,c){let e=a.getKey();T.has(e)||(T.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(e,()=>{var f=q.$getNodeByKey(e);if(!G(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=U(g);var h=f.getChildren();for(f=0;f<h.length&&V(h[f],g[f]);)f++;var k=h.length;let l=g.length,r=Math.min(k,l)-f,n=0;for(;n<r;)if(n++,!V(h[k-n],g[l-n])){n--;break}h=f;k-=n;g=g.slice(f,l-n);let {from:p,to:x,nodesForReplacement:u}=
17
+ class L extends m.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new L(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(a){let b=super.createDOM(a);a=M(a.theme,this.__highlightType);d.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let e=super.updateDOM(a,b,c);a=M(c.theme,a.__highlightType);c=M(c.theme,this.__highlightType);a!==
18
+ c&&(a&&d.removeClassNamesFromElement(b,a),c&&d.addClassNamesToElement(b,c));return e}static importJSON(a){let b=F(a.text,a.highlightType);b.setFormat(a.format);b.setDetail(a.detail);b.setMode(a.mode);b.setStyle(a.style);return b}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType(),type:"code-highlight",version:1}}setFormat(){return this}isParentRequired(){return!0}createParentElementNode(){return C()}}function M(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}
19
+ function F(a,b){return m.$applyNodeReplacement(new L(a,b))}function E(a){return a instanceof L}function D(a){let b=a;for(;E(a)||m.$isTabNode(a);)b=a,a=a.getPreviousSibling();return b}function N(a){let b=a;for(;E(a)||m.$isTabNode(a);)b=a,a=a.getNextSibling();return b}let O={defaultLanguage:"javascript",tokenize(a,b){return q.tokenize(a,q.languages[b||""]||q.languages[this.defaultLanguage])}};
20
+ function P(a,b){let c=null;var e=null,f=a;let g=b,h=a.getTextContent();for(;;){if(0===g){f=f.getPreviousSibling();if(null===f)break;if(!(E(f)||m.$isTabNode(f)||m.$isLineBreakNode(f)))throw Error("Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode");if(m.$isLineBreakNode(f)){c={node:f,offset:1};break}g=Math.max(0,f.getTextContentSize()-1);h=f.getTextContent()}else g--;let k=h[g];E(f)&&" "!==k&&(e={node:f,offset:g})}if(null!==e)return e;e=null;b<a.getTextContentSize()?E(a)&&(e=a.getTextContent()[b]):
21
+ (f=a.getNextSibling(),E(f)&&(e=f.getTextContent()[0]));if(null!==e&&" "!==e)return c;a:for(e=a,f=a.getTextContent(),a=a.getTextContentSize();;){if(!E(e)||b===a){e=e.getNextSibling();if(null===e||m.$isLineBreakNode(e)){a=null;break a}E(e)&&(b=0,f=e.getTextContent(),a=e.getTextContentSize())}if(E(e)){if(" "!==f[b]){a={node:e,offset:b};break a}b++}}return null!==a?a:c}function Q(a){a=N(a);if(m.$isLineBreakNode(a))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return a}
22
+ function R(a,b,c){let e=a.getParent();G(e)?S(e,b,c):E(a)&&a.replace(m.$createTextNode(a.__text))}let T=new Set;
23
+ function S(a,b,c){let e=a.getKey();T.has(e)||(T.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(e,()=>{var f=m.$getNodeByKey(e);if(!G(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=U(g);var h=f.getChildren();for(f=0;f<h.length&&V(h[f],g[f]);)f++;var k=h.length;let l=g.length,r=Math.min(k,l)-f,n=0;for(;n<r;)if(n++,!V(h[k-n],g[l-n])){n--;break}h=f;k-=n;g=g.slice(f,l-n);let {from:p,to:x,nodesForReplacement:u}=
24
24
  {from:h,nodesForReplacement:g,to:k};return p!==x||u.length?(a.splice(p,x-p,u),!0):!1})},{onUpdate:()=>{T.delete(e)},skipTransforms:!0}))}
25
- function U(a,b){let c=[];for(let e of a)if("string"===typeof e){a=e.split(/(\n|\t)/);let f=a.length;for(let g=0;g<f;g++){let h=a[g];"\n"===h||"\r\n"===h?c.push(q.$createLineBreakNode()):"\t"===h?c.push(q.$createTabNode()):0<h.length&&c.push(F(h,b))}}else({content:a}=e),"string"===typeof a?c.push(...U([a],e.type)):Array.isArray(a)&&c.push(...U(a,e.type));return c}
26
- function ea(a,b){a=q.$getNodeByKey(a);if(G(a)&&a.isAttached()){var c=q.$getSelection();if(q.$isRangeSelection(c)){c=c.anchor;var e=c.offset,f="element"===c.type&&q.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let h=c.getNode();g=e+h.getPreviousSiblings().reduce((k,l)=>k+l.getTextContentSize(),0)}b()&&(f?c.getNode().select(e,e):a.getChildren().some(h=>{let k=q.$isTextNode(h);if(k||q.$isLineBreakNode(h)){let l=h.getTextContentSize();if(k&&l>=g)return h.select(g,g),!0;g-=l}return!1}))}else b()}}
27
- function V(a,b){return E(a)&&E(b)&&a.__text===b.__text&&a.__highlightType===b.__highlightType||q.$isTabNode(a)&&q.$isTabNode(b)||q.$isLineBreakNode(a)&&q.$isLineBreakNode(b)}function W(a){if(!q.$isRangeSelection(a))return!1;var b=a.anchor.getNode();a=a.focus.getNode();if(b.is(a)&&G(b))return!0;b=b.getParent();return G(b)&&b.is(a.getParent())}
28
- function X(a){a=a.getNodes();let b=[[]];if(1===a.length&&G(a[0]))return b;let c=b[0];for(let e=0;e<a.length;e++){let f=a[e];if(!(E(f)||q.$isTabNode(f)||q.$isLineBreakNode(f)))throw Error("Expected selection to be inside CodeBlock and consisting of CodeHighlightNode, TabNode and LineBreakNode");q.$isLineBreakNode(f)?0!==e&&0<c.length&&(c=[],b.push(c)):c.push(f)}return b}
29
- function fa(a){var b=q.$getSelection();if(!q.$isRangeSelection(b)||!W(b))return null;let c=a?q.OUTDENT_CONTENT_COMMAND:q.INDENT_CONTENT_COMMAND;a=a?q.OUTDENT_CONTENT_COMMAND:q.INSERT_TAB_COMMAND;if(1<X(b).length)return c;var e=b.getNodes()[0];if(!(G(e)||E(e)||q.$isTabNode(e)||q.$isLineBreakNode(e)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(G(e))return c;let f=D(e);e=N(e);var g=b.anchor;let h=b.focus;h.isBefore(g)?b=h:(b=g,g=h);return null!==f&&null!==e&&b.key===
25
+ function U(a,b){let c=[];for(let e of a)if("string"===typeof e){a=e.split(/(\n|\t)/);let f=a.length;for(let g=0;g<f;g++){let h=a[g];"\n"===h||"\r\n"===h?c.push(m.$createLineBreakNode()):"\t"===h?c.push(m.$createTabNode()):0<h.length&&c.push(F(h,b))}}else({content:a}=e),"string"===typeof a?c.push(...U([a],e.type)):Array.isArray(a)&&c.push(...U(a,e.type));return c}
26
+ function ea(a,b){a=m.$getNodeByKey(a);if(G(a)&&a.isAttached()){var c=m.$getSelection();if(m.$isRangeSelection(c)){c=c.anchor;var e=c.offset,f="element"===c.type&&m.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let h=c.getNode();g=e+h.getPreviousSiblings().reduce((k,l)=>k+l.getTextContentSize(),0)}b()&&(f?c.getNode().select(e,e):a.getChildren().some(h=>{let k=m.$isTextNode(h);if(k||m.$isLineBreakNode(h)){let l=h.getTextContentSize();if(k&&l>=g)return h.select(g,g),!0;g-=l}return!1}))}else b()}}
27
+ function V(a,b){return E(a)&&E(b)&&a.__text===b.__text&&a.__highlightType===b.__highlightType||m.$isTabNode(a)&&m.$isTabNode(b)||m.$isLineBreakNode(a)&&m.$isLineBreakNode(b)}function W(a){if(!m.$isRangeSelection(a))return!1;var b=a.anchor.getNode();a=a.focus.getNode();if(b.is(a)&&G(b))return!0;b=b.getParent();return G(b)&&b.is(a.getParent())}
28
+ function X(a){a=a.getNodes();let b=[[]];if(1===a.length&&G(a[0]))return b;let c=b[0];for(let e=0;e<a.length;e++){let f=a[e];if(!(E(f)||m.$isTabNode(f)||m.$isLineBreakNode(f)))throw Error("Expected selection to be inside CodeBlock and consisting of CodeHighlightNode, TabNode and LineBreakNode");m.$isLineBreakNode(f)?0!==e&&0<c.length&&(c=[],b.push(c)):c.push(f)}return b}
29
+ function fa(a){var b=m.$getSelection();if(!m.$isRangeSelection(b)||!W(b))return null;let c=a?m.OUTDENT_CONTENT_COMMAND:m.INDENT_CONTENT_COMMAND;a=a?m.OUTDENT_CONTENT_COMMAND:m.INSERT_TAB_COMMAND;if(1<X(b).length)return c;var e=b.getNodes()[0];if(!(G(e)||E(e)||m.$isTabNode(e)||m.$isLineBreakNode(e)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(G(e))return c;let f=D(e);e=N(e);var g=b.anchor;let h=b.focus;h.isBefore(g)?b=h:(b=g,g=h);return null!==f&&null!==e&&b.key===
30
30
  f.getKey()&&0===b.offset&&g.key===e.getKey()&&g.offset===e.getTextContentSize()?c:a}
31
- function Y(a){var b=q.$getSelection();if(!q.$isRangeSelection(b)||!W(b))return!1;var c=X(b);let e=c.length;if(1<c.length){for(b=0;b<e;b++){var f=c[b];0<f.length&&(f=f[0],0===b&&(f=D(f)),null!==f&&(a===q.INDENT_CONTENT_COMMAND?f.insertBefore(q.$createTabNode()):q.$isTabNode(f)&&f.remove()))}return!0}c=b.getNodes()[0];if(!(G(c)||E(c)||q.$isTabNode(c)||q.$isLineBreakNode(c)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(G(c))return a===q.INDENT_CONTENT_COMMAND&&
32
- b.insertNodes([q.$createTabNode()]),!0;c=D(c);if(null===c)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");a===q.INDENT_CONTENT_COMMAND?q.$isLineBreakNode(c)?c.insertAfter(q.$createTabNode()):c.insertBefore(q.$createTabNode()):q.$isTabNode(c)&&c.remove();return!0}
33
- function Z(a,b){let c=q.$getSelection();if(!q.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c,g=e.offset,h=f.offset,k=e.getNode(),l=f.getNode();var r=a===q.KEY_ARROW_UP_COMMAND;if(!W(c)||!E(k)&&!q.$isTabNode(k)||!E(l)&&!q.$isTabNode(l))return!1;if(!b.altKey){if(c.isCollapsed())if(a=k.getParentOrThrow(),r&&0===g&&null===k.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!r&&g===k.getTextContentSize()&&null===k.getNextSibling()&&null===
34
- a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}let n;if(k.isBefore(l)){var p=D(k);n=N(l)}else p=D(l),n=N(k);if(null==p||null==n)return!1;let x=p.getNodesBetween(n);for(let t=0;t<x.length;t++){let J=x[t];if(!E(J)&&!q.$isTabNode(J)&&!q.$isLineBreakNode(J))return!1}b.preventDefault();b.stopPropagation();b=r?p.getPreviousSibling():n.getNextSibling();if(!q.$isLineBreakNode(b))return!0;p=r?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;r=E(p)||q.$isTabNode(p)||q.$isLineBreakNode(p)?
35
- r?D(p):N(p):null;let u=null!=r?r:p;b.remove();x.forEach(t=>t.remove());a===q.KEY_ARROW_UP_COMMAND?(x.forEach(t=>u.insertBefore(t)),u.insertBefore(b)):(u.insertAfter(b),u=b,x.forEach(t=>{u.insertAfter(t);u=t}));c.setTextNodeRange(k,g,l,h);return!0}
36
- function ha(a,b){let c=q.$getSelection();if(!q.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c;var g=e.getNode();let h=f.getNode();a=a===q.MOVE_TO_START;if(!E(g)&&!q.$isTabNode(g)||!E(h)&&!q.$isTabNode(h))return!1;if(a)if(g=P(h,f.offset),null!==g){let {node:k,offset:l}=g;q.$isLineBreakNode(k)?k.selectNext(0,0):c.setTextNodeRange(k,l,k,l)}else h.getParentOrThrow().selectStart();else Q(h).select();b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=F;
37
- exports.$createCodeNode=C;exports.$isCodeHighlightNode=E;exports.$isCodeNode=G;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=H;exports.CODE_LANGUAGE_MAP=I;exports.CodeHighlightNode=L;exports.CodeNode=y;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.PrismTokenizer=O;exports.getCodeLanguages=()=>Object.keys(d.languages).filter(a=>"function"!==typeof d.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=Q;exports.getFirstCodeNodeOfLine=D;
31
+ function Y(a){var b=m.$getSelection();if(!m.$isRangeSelection(b)||!W(b))return!1;var c=X(b);let e=c.length;if(1<c.length){for(b=0;b<e;b++){var f=c[b];0<f.length&&(f=f[0],0===b&&(f=D(f)),null!==f&&(a===m.INDENT_CONTENT_COMMAND?f.insertBefore(m.$createTabNode()):m.$isTabNode(f)&&f.remove()))}return!0}c=b.getNodes()[0];if(!(G(c)||E(c)||m.$isTabNode(c)||m.$isLineBreakNode(c)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(G(c))return a===m.INDENT_CONTENT_COMMAND&&
32
+ b.insertNodes([m.$createTabNode()]),!0;c=D(c);if(null===c)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");a===m.INDENT_CONTENT_COMMAND?m.$isLineBreakNode(c)?c.insertAfter(m.$createTabNode()):c.insertBefore(m.$createTabNode()):m.$isTabNode(c)&&c.remove();return!0}
33
+ function Z(a,b){let c=m.$getSelection();if(!m.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c,g=e.offset,h=f.offset,k=e.getNode(),l=f.getNode();var r=a===m.KEY_ARROW_UP_COMMAND;if(!W(c)||!E(k)&&!m.$isTabNode(k)||!E(l)&&!m.$isTabNode(l))return!1;if(!b.altKey){if(c.isCollapsed())if(a=k.getParentOrThrow(),r&&0===g&&null===k.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!r&&g===k.getTextContentSize()&&null===k.getNextSibling()&&null===
34
+ a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}let n;if(k.isBefore(l)){var p=D(k);n=N(l)}else p=D(l),n=N(k);if(null==p||null==n)return!1;let x=p.getNodesBetween(n);for(let t=0;t<x.length;t++){let J=x[t];if(!E(J)&&!m.$isTabNode(J)&&!m.$isLineBreakNode(J))return!1}b.preventDefault();b.stopPropagation();b=r?p.getPreviousSibling():n.getNextSibling();if(!m.$isLineBreakNode(b))return!0;p=r?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;r=E(p)||m.$isTabNode(p)||m.$isLineBreakNode(p)?
35
+ r?D(p):N(p):null;let u=null!=r?r:p;b.remove();x.forEach(t=>t.remove());a===m.KEY_ARROW_UP_COMMAND?(x.forEach(t=>u.insertBefore(t)),u.insertBefore(b)):(u.insertAfter(b),u=b,x.forEach(t=>{u.insertAfter(t);u=t}));c.setTextNodeRange(k,g,l,h);return!0}
36
+ function ha(a,b){let c=m.$getSelection();if(!m.$isRangeSelection(c))return!1;let {anchor:e,focus:f}=c;var g=e.getNode();let h=f.getNode();a=a===m.MOVE_TO_START;if(!E(g)&&!m.$isTabNode(g)||!E(h)&&!m.$isTabNode(h))return!1;if(a)if(g=P(h,f.offset),null!==g){let {node:k,offset:l}=g;m.$isLineBreakNode(k)?k.selectNext(0,0):c.setTextNodeRange(k,l,k,l)}else h.getParentOrThrow().selectStart();else Q(h).select();b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=F;
37
+ exports.$createCodeNode=C;exports.$isCodeHighlightNode=E;exports.$isCodeNode=G;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=H;exports.CODE_LANGUAGE_MAP=I;exports.CodeHighlightNode=L;exports.CodeNode=y;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.PrismTokenizer=O;exports.getCodeLanguages=()=>Object.keys(q.languages).filter(a=>"function"!==typeof q.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=Q;exports.getFirstCodeNodeOfLine=D;
38
38
  exports.getLanguageFriendlyName=function(a){a=K(a);return H[a]||a};exports.getLastCodeNodeOfLine=N;exports.getStartOfCodeInLine=P;exports.normalizeCodeLang=K;
39
- exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([y,L]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=O);return m.mergeRegister(a.registerMutationListener(y,c=>{a.update(()=>{for(let [g,h]of c)if("destroyed"!==h){var e=q.$getNodeByKey(g);if(null!==e)a:{var f=e;e=a.getElementByKey(f.getKey());if(null===e)break a;f=f.getChildren();let k=f.length;if(k===e.__cachedChildrenLength)break a;e.__cachedChildrenLength=k;let l="1",r=1;for(let n=
40
- 0;n<k;n++)q.$isLineBreakNode(f[n])&&(l+="\n"+ ++r);e.setAttribute("data-gutter",l)}}})}),a.registerNodeTransform(y,c=>S(c,a,b)),a.registerNodeTransform(q.TextNode,c=>R(c,a,b)),a.registerNodeTransform(L,c=>R(c,a,b)),a.registerCommand(q.KEY_TAB_COMMAND,c=>{let e=fa(c.shiftKey);if(null===e)return!1;c.preventDefault();a.dispatchCommand(e,void 0);return!0},q.COMMAND_PRIORITY_LOW),a.registerCommand(q.INSERT_TAB_COMMAND,()=>{let c=q.$getSelection();if(!W(c))return!1;q.$insertNodes([q.$createTabNode()]);
41
- return!0},q.COMMAND_PRIORITY_LOW),a.registerCommand(q.INDENT_CONTENT_COMMAND,()=>Y(q.INDENT_CONTENT_COMMAND),q.COMMAND_PRIORITY_LOW),a.registerCommand(q.OUTDENT_CONTENT_COMMAND,()=>Y(q.OUTDENT_CONTENT_COMMAND),q.COMMAND_PRIORITY_LOW),a.registerCommand(q.KEY_ARROW_UP_COMMAND,c=>Z(q.KEY_ARROW_UP_COMMAND,c),q.COMMAND_PRIORITY_LOW),a.registerCommand(q.KEY_ARROW_DOWN_COMMAND,c=>Z(q.KEY_ARROW_DOWN_COMMAND,c),q.COMMAND_PRIORITY_LOW),a.registerCommand(q.MOVE_TO_END,c=>ha(q.MOVE_TO_END,c),q.COMMAND_PRIORITY_LOW),
42
- a.registerCommand(q.MOVE_TO_START,c=>ha(q.MOVE_TO_START,c),q.COMMAND_PRIORITY_LOW))}
39
+ exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([y,L]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=O);return d.mergeRegister(a.registerMutationListener(y,c=>{a.update(()=>{for(let [g,h]of c)if("destroyed"!==h){var e=m.$getNodeByKey(g);if(null!==e)a:{var f=e;e=a.getElementByKey(f.getKey());if(null===e)break a;f=f.getChildren();let k=f.length;if(k===e.__cachedChildrenLength)break a;e.__cachedChildrenLength=k;let l="1",r=1;for(let n=
40
+ 0;n<k;n++)m.$isLineBreakNode(f[n])&&(l+="\n"+ ++r);e.setAttribute("data-gutter",l)}}})}),a.registerNodeTransform(y,c=>S(c,a,b)),a.registerNodeTransform(m.TextNode,c=>R(c,a,b)),a.registerNodeTransform(L,c=>R(c,a,b)),a.registerCommand(m.KEY_TAB_COMMAND,c=>{let e=fa(c.shiftKey);if(null===e)return!1;c.preventDefault();a.dispatchCommand(e,void 0);return!0},m.COMMAND_PRIORITY_LOW),a.registerCommand(m.INSERT_TAB_COMMAND,()=>{let c=m.$getSelection();if(!W(c))return!1;m.$insertNodes([m.$createTabNode()]);
41
+ return!0},m.COMMAND_PRIORITY_LOW),a.registerCommand(m.INDENT_CONTENT_COMMAND,()=>Y(m.INDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.OUTDENT_CONTENT_COMMAND,()=>Y(m.OUTDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_UP_COMMAND,c=>Z(m.KEY_ARROW_UP_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_DOWN_COMMAND,c=>Z(m.KEY_ARROW_DOWN_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.MOVE_TO_END,c=>ha(m.MOVE_TO_END,c),m.COMMAND_PRIORITY_LOW),
42
+ a.registerCommand(m.MOVE_TO_START,c=>ha(m.MOVE_TO_START,c),m.COMMAND_PRIORITY_LOW))}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import{addClassNamesToElement as e,isHTMLElement as t,removeClassNamesFromElement as n,mergeRegister as r}from"@lexical/utils";import{ElementNode as o,$applyNodeReplacement as i,$createParagraphNode as s,$isTextNode as l,$isTabNode as c,$createTabNode as u,$createLineBreakNode as a,TextNode as g,$isLineBreakNode as f,$getNodeByKey as p,KEY_TAB_COMMAND as h,COMMAND_PRIORITY_LOW as d,INSERT_TAB_COMMAND as m,$getSelection as x,$insertNodes as N,INDENT_CONTENT_COMMAND as y,OUTDENT_CONTENT_COMMAND as C,KEY_ARROW_UP_COMMAND as v,KEY_ARROW_DOWN_COMMAND as T,MOVE_TO_END as _,MOVE_TO_START as b,$createTextNode as j,$isRangeSelection as S}from"lexical";import*as k from"prismjs";import*as w from"prismjs/components/prism-clike.js";import*as L from"prismjs/components/prism-javascript.js";import*as P from"prismjs/components/prism-markup.js";import*as E from"prismjs/components/prism-markdown.js";import*as O from"prismjs/components/prism-c.js";import*as A from"prismjs/components/prism-css.js";import*as D from"prismjs/components/prism-objectivec.js";import*as M from"prismjs/components/prism-sql.js";import*as B from"prismjs/components/prism-python.js";import*as z from"prismjs/components/prism-rust.js";import*as H from"prismjs/components/prism-swift.js";import*as F from"prismjs/components/prism-typescript.js";import*as J from"prismjs/components/prism-java.js";import*as K from"prismjs/components/prism-cpp.js";const R=e=>null!=e&&k.languages.hasOwnProperty(e)?e:void 0;function I(e,n){for(const r of e.childNodes){if(t(r)&&r.tagName===n)return!0;I(r,n)}return!1}const q="data-highlight-language";class U extends o{static getType(){return"code"}static clone(e){return new U(e.__language,e.__key)}constructor(e,t){super(t),this.__language=R(e)}createDOM(t){const n=document.createElement("code");e(n,t.theme.code),n.setAttribute("spellcheck","false");const r=this.getLanguage();return r&&n.setAttribute(q,r),n}updateDOM(e,t,n){const r=this.__language,o=e.__language;return r?r!==o&&t.setAttribute(q,r):o&&t.removeAttribute(q),!1}exportDOM(t){const n=document.createElement("pre");e(n,t._config.theme.code),n.setAttribute("spellcheck","false");const r=this.getLanguage();return r&&n.setAttribute(q,r),{element:n}}static importDOM(){return{code:e=>null!=e.textContent&&(/\r?\n/.test(e.textContent)||I(e,"BR"))?{conversion:X,priority:1}:null,div:e=>({conversion:G,priority:1}),pre:e=>({conversion:X,priority:0}),table:e=>ee(e)?{conversion:V,priority:3}:null,td:e=>{const t=e,n=t.closest("table");return t.classList.contains("js-file-line")?{conversion:Z,priority:3}:n&&ee(n)?{conversion:Y,priority:3}:null},tr:e=>{const t=e.closest("table");return t&&ee(t)?{conversion:Y,priority:3}:null}}}static importJSON(e){const t=W(e.language);return t.setFormat(e.format),t.setIndent(e.indent),t.setDirection(e.direction),t}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}insertNewAfter(e,t=!0){const n=this.getChildren(),r=n.length;if(r>=2&&"\n"===n[r-1].getTextContent()&&"\n"===n[r-2].getTextContent()&&e.isCollapsed()&&e.anchor.key===this.__key&&e.anchor.offset===r){n[r-1].remove(),n[r-2].remove();const e=s();return this.insertAfter(e,t),e}const{anchor:o,focus:i}=e,g=(o.isBefore(i)?o:i).getNode();if(l(g)){let e=fe(g);const t=[];for(;;)if(c(e))t.push(u()),e=e.getNextSibling();else{if(!ge(e))break;{let n=0;const r=e.getTextContent(),o=e.getTextContentSize();for(;n<o&&" "===r[n];)n++;if(0!==n&&t.push(ae(" ".repeat(n))),n!==o)break;e=e.getNextSibling()}}const n=g.splitText(o.offset)[0],r=0===o.offset?0:1,i=n.getIndexWithinParent()+r,s=g.getParentOrThrow(),l=[a(),...t];s.splice(i,0,l);const f=t[t.length-1];f?f.select():0===o.offset?n.selectPrevious():n.getNextSibling().selectNext(0,0)}if(Q(g)){const{offset:t}=e.anchor;g.splice(t,0,[a()]),g.select(t+1,t+1)}return null}canIndent(){return!1}collapseAtStart(){const e=s();return this.getChildren().forEach((t=>e.append(t))),this.replace(e),!0}setLanguage(e){this.getWritable().__language=R(e)}getLanguage(){return this.getLatest().__language}}function W(e){return i(new U(e))}function Q(e){return e instanceof U}function X(e){let n;return t(e)&&(n=e.getAttribute(q)),{node:W(n)}}function G(e){const t=e,n=$(t);return n||function(e){let t=e.parentElement;for(;null!==t;){if($(t))return!0;t=t.parentElement}return!1}(t)?{after:t=>{const n=e.parentNode;return null!=n&&e!==n.lastChild&&t.push(a()),t},node:n?W():null}:{node:null}}function V(){return{node:W()}}function Y(){return{node:null}}function Z(e){const t=e;return{after:e=>(t.parentNode&&t.parentNode.nextSibling&&e.push(a()),e),node:null}}function $(e){return null!==e.style.fontFamily.match("monospace")}function ee(e){return e.classList.contains("js-file-line-container")}const te="javascript",ne={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",typescript:"TypeScript",xml:"XML"},re={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function oe(e){return re[e]||e}function ie(e){const t=oe(e);return ne[t]||t}const se=()=>te,le=()=>Object.keys(k.languages).filter((e=>"function"!=typeof k.languages[e])).sort();class ce extends g{constructor(e,t,n){super(e,n),this.__highlightType=t}static getType(){return"code-highlight"}static clone(e){return new ce(e.__text,e.__highlightType||void 0,e.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(t){const n=super.createDOM(t),r=ue(t.theme,this.__highlightType);return e(n,r),n}updateDOM(t,r,o){const i=super.updateDOM(t,r,o),s=ue(o.theme,t.__highlightType),l=ue(o.theme,this.__highlightType);return s!==l&&(s&&n(r,s),l&&e(r,l)),i}static importJSON(e){const t=ae(e.text,e.highlightType);return t.setFormat(e.format),t.setDetail(e.detail),t.setMode(e.mode),t.setStyle(e.style),t}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType(),type:"code-highlight",version:1}}setFormat(e){return this}isParentRequired(){return!0}createParentElementNode(){return W()}}function ue(e,t){return t&&e&&e.codeHighlight&&e.codeHighlight[t]}function ae(e,t){return i(new ce(e,t))}function ge(e){return e instanceof ce}function fe(e){let t=e,n=e;for(;ge(n)||c(n);)t=n,n=n.getPreviousSibling();return t}function pe(e){let t=e,n=e;for(;ge(n)||c(n);)t=n,n=n.getNextSibling();return t}const he={defaultLanguage:te,tokenize(e,t){return k.tokenize(e,k.languages[t||""]||k.languages[this.defaultLanguage])}};function de(e,t){let n=null,r=null,o=e,i=t,s=e.getTextContent();for(;;){if(0===i){if(o=o.getPreviousSibling(),null===o)break;if(!(ge(o)||c(o)||f(o)))throw Error("Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode");if(f(o)){n={node:o,offset:1};break}i=Math.max(0,o.getTextContentSize()-1),s=o.getTextContent()}else i--;const e=s[i];ge(o)&&" "!==e&&(r={node:o,offset:i})}if(null!==r)return r;let l=null;if(t<e.getTextContentSize())ge(e)&&(l=e.getTextContent()[t]);else{const t=e.getNextSibling();ge(t)&&(l=t.getTextContent()[0])}if(null!==l&&" "!==l)return n;{const r=function(e,t){let n=e,r=t,o=e.getTextContent(),i=e.getTextContentSize();for(;;){if(!ge(n)||r===i){if(n=n.getNextSibling(),null===n||f(n))return null;ge(n)&&(r=0,o=n.getTextContent(),i=n.getTextContentSize())}if(ge(n)){if(" "!==o[r])return{node:n,offset:r};r++}}}(e,t);return null!==r?r:n}}function me(e){const t=pe(e);if(f(t))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return t}function xe(e,t,n){const r=e.getParent();Q(r)?Ce(r,t,n):ge(e)&&e.replace(j(e.__text))}function Ne(e,t){const n=t.getElementByKey(e.getKey());if(null===n)return;const r=e.getChildren(),o=r.length;if(o===n.__cachedChildrenLength)return;n.__cachedChildrenLength=o;let i="1",s=1;for(let e=0;e<o;e++)f(r[e])&&(i+="\n"+ ++s);n.setAttribute("data-gutter",i)}const ye=new Set;function Ce(e,t,n){const r=e.getKey();ye.has(r)||(ye.add(r),void 0===e.getLanguage()&&e.setLanguage(n.defaultLanguage),t.update((()=>{!function(e,t){const n=p(e);if(!Q(n)||!n.isAttached())return;const r=x();if(!S(r))return void t();const o=r.anchor,i=o.offset,s="element"===o.type&&f(n.getChildAtIndex(o.offset-1));let c=0;if(!s){const e=o.getNode();c=i+e.getPreviousSiblings().reduce(((e,t)=>e+t.getTextContentSize()),0)}if(!t())return;if(s)return void o.getNode().select(i,i);n.getChildren().some((e=>{const t=l(e);if(t||f(e)){const n=e.getTextContentSize();if(t&&n>=c)return e.select(c,c),!0;c-=n}return!1}))}(r,(()=>{const t=p(r);if(!Q(t)||!t.isAttached())return!1;const o=t.getTextContent(),i=ve(n.tokenize(o,t.getLanguage()||n.defaultLanguage)),s=function(e,t){let n=0;for(;n<e.length&&Te(e[n],t[n]);)n++;const r=e.length,o=t.length,i=Math.min(r,o)-n;let s=0;for(;s<i;)if(s++,!Te(e[r-s],t[o-s])){s--;break}const l=n,c=r-s,u=t.slice(n,o-s);return{from:l,nodesForReplacement:u,to:c}}(t.getChildren(),i),{from:l,to:c,nodesForReplacement:u}=s;return!(l===c&&!u.length)&&(e.splice(l,c-l,u),!0)}))}),{onUpdate:()=>{ye.delete(r)},skipTransforms:!0}))}function ve(e,t){const n=[];for(const r of e)if("string"==typeof r){const e=r.split(/(\n|\t)/),o=e.length;for(let r=0;r<o;r++){const o=e[r];"\n"===o||"\r\n"===o?n.push(a()):"\t"===o?n.push(u()):o.length>0&&n.push(ae(o,t))}}else{const{content:e}=r;"string"==typeof e?n.push(...ve([e],r.type)):Array.isArray(e)&&n.push(...ve(e,r.type))}return n}function Te(e,t){return ge(e)&&ge(t)&&e.__text===t.__text&&e.__highlightType===t.__highlightType||c(e)&&c(t)||f(e)&&f(t)}function _e(e){if(!S(e))return!1;const t=e.anchor.getNode(),n=e.focus.getNode();if(t.is(n)&&Q(t))return!0;const r=t.getParent();return Q(r)&&r.is(n.getParent())}function be(e){const t=e.getNodes(),n=[[]];if(1===t.length&&Q(t[0]))return n;let r=n[0];for(let e=0;e<t.length;e++){const o=t[e];if(!(ge(o)||c(o)||f(o)))throw Error("Expected selection to be inside CodeBlock and consisting of CodeHighlightNode, TabNode and LineBreakNode");f(o)?0!==e&&r.length>0&&(r=[],n.push(r)):r.push(o)}return n}function je(e){const t=x();if(!S(t)||!_e(t))return!1;const n=be(t),r=n.length;if(n.length>1){for(let t=0;t<r;t++){const r=n[t];if(r.length>0){let n=r[0];0===t&&(n=fe(n)),null!==n&&(e===y?n.insertBefore(u()):c(n)&&n.remove())}}return!0}const o=t.getNodes()[0];if(!(Q(o)||ge(o)||c(o)||f(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(Q(o))return e===y&&t.insertNodes([u()]),!0;const i=fe(o);if(null===i)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");return e===y?f(i)?i.insertAfter(u()):i.insertBefore(u()):c(i)&&i.remove(),!0}function Se(e,t){const n=x();if(!S(n))return!1;const{anchor:r,focus:o}=n,i=r.offset,s=o.offset,l=r.getNode(),u=o.getNode(),a=e===v;if(!_e(n)||!ge(l)&&!c(l)||!ge(u)&&!c(u))return!1;if(!t.altKey){if(n.isCollapsed()){const e=l.getParentOrThrow();if(a&&0===i&&null===l.getPreviousSibling()){if(null===e.getPreviousSibling())return e.selectPrevious(),t.preventDefault(),!0}else if(!a&&i===l.getTextContentSize()&&null===l.getNextSibling()){if(null===e.getNextSibling())return e.selectNext(),t.preventDefault(),!0}}return!1}let g,p;if(l.isBefore(u)?(g=fe(l),p=pe(u)):(g=fe(u),p=pe(l)),null==g||null==p)return!1;const h=g.getNodesBetween(p);for(let e=0;e<h.length;e++){const t=h[e];if(!ge(t)&&!c(t)&&!f(t))return!1}t.preventDefault(),t.stopPropagation();const d=a?g.getPreviousSibling():p.getNextSibling();if(!f(d))return!0;const m=a?d.getPreviousSibling():d.getNextSibling();if(null==m)return!0;const N=ge(m)||c(m)||f(m)?a?fe(m):pe(m):null;let y=null!=N?N:m;return d.remove(),h.forEach((e=>e.remove())),e===v?(h.forEach((e=>y.insertBefore(e))),y.insertBefore(d)):(y.insertAfter(d),y=d,h.forEach((e=>{y.insertAfter(e),y=e}))),n.setTextNodeRange(l,i,u,s),!0}function ke(e,t){const n=x();if(!S(n))return!1;const{anchor:r,focus:o}=n,i=r.getNode(),s=o.getNode(),l=e===b;if(!ge(i)&&!c(i)||!ge(s)&&!c(s))return!1;if(l){const e=de(s,o.offset);if(null!==e){const{node:t,offset:r}=e;f(t)?t.selectNext(0,0):n.setTextNodeRange(t,r,t,r)}else s.getParentOrThrow().selectStart()}else{me(s).select()}return t.preventDefault(),t.stopPropagation(),!0}function we(e,t){if(!e.hasNodes([U,ce]))throw new Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return null==t&&(t=he),r(e.registerMutationListener(U,(t=>{e.update((()=>{for(const[n,r]of t)if("destroyed"!==r){const t=p(n);null!==t&&Ne(t,e)}}))})),e.registerNodeTransform(U,(n=>Ce(n,e,t))),e.registerNodeTransform(g,(n=>xe(n,e,t))),e.registerNodeTransform(ce,(n=>xe(n,e,t))),e.registerCommand(h,(t=>{const n=function(e){const t=x();if(!S(t)||!_e(t))return null;const n=e?C:y,r=e?C:m;if(be(t).length>1)return n;const o=t.getNodes()[0];if(!(Q(o)||ge(o)||c(o)||f(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(Q(o))return n;const i=fe(o),s=pe(o),l=t.anchor,u=t.focus;let a,g;return u.isBefore(l)?(a=u,g=l):(a=l,g=u),null!==i&&null!==s&&a.key===i.getKey()&&0===a.offset&&g.key===s.getKey()&&g.offset===s.getTextContentSize()?n:r}(t.shiftKey);return null!==n&&(t.preventDefault(),e.dispatchCommand(n,void 0),!0)}),d),e.registerCommand(m,(()=>!!_e(x())&&(N([u()]),!0)),d),e.registerCommand(y,(e=>je(y)),d),e.registerCommand(C,(e=>je(C)),d),e.registerCommand(v,(e=>Se(v,e)),d),e.registerCommand(T,(e=>Se(T,e)),d),e.registerCommand(_,(e=>ke(_,e)),d),e.registerCommand(b,(e=>ke(b,e)),d))}export{ae as $createCodeHighlightNode,W as $createCodeNode,ge as $isCodeHighlightNode,Q as $isCodeNode,ne as CODE_LANGUAGE_FRIENDLY_NAME_MAP,re as CODE_LANGUAGE_MAP,ce as CodeHighlightNode,U as CodeNode,te as DEFAULT_CODE_LANGUAGE,he as PrismTokenizer,le as getCodeLanguages,se as getDefaultCodeLanguage,me as getEndOfCodeInLine,fe as getFirstCodeNodeOfLine,ie as getLanguageFriendlyName,pe as getLastCodeNodeOfLine,de as getStartOfCodeInLine,oe as normalizeCodeLang,we as registerCodeHighlighting};
package/package.json CHANGED
@@ -8,13 +8,12 @@
8
8
  "code"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.14.2",
11
+ "version": "0.14.3",
12
12
  "main": "LexicalCode.js",
13
- "peerDependencies": {
14
- "lexical": "0.14.2"
15
- },
13
+ "types": "index.d.ts",
16
14
  "dependencies": {
17
- "@lexical/utils": "0.14.2",
15
+ "@lexical/utils": "0.14.3",
16
+ "lexical": "0.14.3",
18
17
  "prismjs": "^1.27.0"
19
18
  },
20
19
  "repository": {
@@ -25,6 +24,19 @@
25
24
  "devDependencies": {
26
25
  "@types/prismjs": "^1.26.0"
27
26
  },
28
- "module": "LexicalCode.esm.js",
29
- "sideEffects": false
27
+ "module": "LexicalCode.mjs",
28
+ "sideEffects": false,
29
+ "exports": {
30
+ ".": {
31
+ "import": {
32
+ "types": "./index.d.ts",
33
+ "node": "./LexicalCode.node.mjs",
34
+ "default": "./LexicalCode.mjs"
35
+ },
36
+ "require": {
37
+ "types": "./index.d.ts",
38
+ "default": "./LexicalCode.js"
39
+ }
40
+ }
41
+ }
30
42
  }
@@ -1,7 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- import*as e from"prismjs";import"prismjs/components/prism-clike";import"prismjs/components/prism-javascript";import"prismjs/components/prism-markup";import"prismjs/components/prism-markdown";import"prismjs/components/prism-c";import"prismjs/components/prism-css";import"prismjs/components/prism-objectivec";import"prismjs/components/prism-sql";import"prismjs/components/prism-python";import"prismjs/components/prism-rust";import"prismjs/components/prism-swift";import"prismjs/components/prism-typescript";import"prismjs/components/prism-java";import"prismjs/components/prism-cpp";import{addClassNamesToElement as t,isHTMLElement as n,removeClassNamesFromElement as r,mergeRegister as o}from"@lexical/utils";import{ElementNode as i,$applyNodeReplacement as s,$createParagraphNode as l,$isTextNode as c,$isTabNode as u,$createTabNode as a,$createLineBreakNode as g,TextNode as f,$isLineBreakNode as p,$getNodeByKey as h,KEY_TAB_COMMAND as d,COMMAND_PRIORITY_LOW as m,INSERT_TAB_COMMAND as x,$getSelection as N,$insertNodes as y,INDENT_CONTENT_COMMAND as C,OUTDENT_CONTENT_COMMAND as v,KEY_ARROW_UP_COMMAND as T,KEY_ARROW_DOWN_COMMAND as _,MOVE_TO_END as b,MOVE_TO_START as S,$createTextNode as j,$isRangeSelection as k}from"lexical";const w=t=>null!=t&&e.languages.hasOwnProperty(t)?t:void 0;function L(e,t){for(const r of e.childNodes){if(n(r)&&r.tagName===t)return!0;L(r,t)}return!1}const P="data-highlight-language";class E extends i{static getType(){return"code"}static clone(e){return new E(e.__language,e.__key)}constructor(e,t){super(t),this.__language=w(e)}createDOM(e){const n=document.createElement("code");t(n,e.theme.code),n.setAttribute("spellcheck","false");const r=this.getLanguage();return r&&n.setAttribute(P,r),n}updateDOM(e,t,n){const r=this.__language,o=e.__language;return r?r!==o&&t.setAttribute(P,r):o&&t.removeAttribute(P),!1}exportDOM(e){const n=document.createElement("pre");t(n,e._config.theme.code),n.setAttribute("spellcheck","false");const r=this.getLanguage();return r&&n.setAttribute(P,r),{element:n}}static importDOM(){return{code:e=>null!=e.textContent&&(/\r?\n/.test(e.textContent)||L(e,"BR"))?{conversion:D,priority:1}:null,div:e=>({conversion:M,priority:1}),pre:e=>({conversion:D,priority:0}),table:e=>J(e)?{conversion:B,priority:3}:null,td:e=>{const t=e,n=t.closest("table");return t.classList.contains("js-file-line")?{conversion:H,priority:3}:n&&J(n)?{conversion:z,priority:3}:null},tr:e=>{const t=e.closest("table");return t&&J(t)?{conversion:z,priority:3}:null}}}static importJSON(e){const t=O(e.language);return t.setFormat(e.format),t.setIndent(e.indent),t.setDirection(e.direction),t}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}insertNewAfter(e,t=!0){const n=this.getChildren(),r=n.length;if(r>=2&&"\n"===n[r-1].getTextContent()&&"\n"===n[r-2].getTextContent()&&e.isCollapsed()&&e.anchor.key===this.__key&&e.anchor.offset===r){n[r-1].remove(),n[r-2].remove();const e=l();return this.insertAfter(e,t),e}const{anchor:o,focus:i}=e,s=(o.isBefore(i)?o:i).getNode();if(c(s)){let e=Z(s);const t=[];for(;;)if(u(e))t.push(a()),e=e.getNextSibling();else{if(!Y(e))break;{let n=0;const r=e.getTextContent(),o=e.getTextContentSize();for(;n<o&&" "===r[n];)n++;if(0!==n&&t.push(V(" ".repeat(n))),n!==o)break;e=e.getNextSibling()}}const n=s.splitText(o.offset)[0],r=0===o.offset?0:1,i=n.getIndexWithinParent()+r,l=s.getParentOrThrow(),c=[g(),...t];l.splice(i,0,c);const f=t[t.length-1];f?f.select():0===o.offset?n.selectPrevious():n.getNextSibling().selectNext(0,0)}if(A(s)){const{offset:t}=e.anchor;s.splice(t,0,[g()]),s.select(t+1,t+1)}return null}canIndent(){return!1}collapseAtStart(){const e=l();return this.getChildren().forEach((t=>e.append(t))),this.replace(e),!0}setLanguage(e){this.getWritable().__language=w(e)}getLanguage(){return this.getLatest().__language}}function O(e){return s(new E(e))}function A(e){return e instanceof E}function D(e){let t;return n(e)&&(t=e.getAttribute(P)),{node:O(t)}}function M(e){const t=e,n=F(t);return n||function(e){let t=e.parentElement;for(;null!==t;){if(F(t))return!0;t=t.parentElement}return!1}(t)?{after:t=>{const n=e.parentNode;return null!=n&&e!==n.lastChild&&t.push(g()),t},node:n?O():null}:{node:null}}function B(){return{node:O()}}function z(){return{node:null}}function H(e){const t=e;return{after:e=>(t.parentNode&&t.parentNode.nextSibling&&e.push(g()),e),node:null}}function F(e){return null!==e.style.fontFamily.match("monospace")}function J(e){return e.classList.contains("js-file-line-container")}const K="javascript",R={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",typescript:"TypeScript",xml:"XML"},I={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function q(e){return I[e]||e}function U(e){const t=q(e);return R[t]||t}const W=()=>K,Q=()=>Object.keys(e.languages).filter((t=>"function"!=typeof e.languages[t])).sort();class X extends f{constructor(e,t,n){super(e,n),this.__highlightType=t}static getType(){return"code-highlight"}static clone(e){return new X(e.__text,e.__highlightType||void 0,e.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(e){const n=super.createDOM(e),r=G(e.theme,this.__highlightType);return t(n,r),n}updateDOM(e,n,o){const i=super.updateDOM(e,n,o),s=G(o.theme,e.__highlightType),l=G(o.theme,this.__highlightType);return s!==l&&(s&&r(n,s),l&&t(n,l)),i}static importJSON(e){const t=V(e.text,e.highlightType);return t.setFormat(e.format),t.setDetail(e.detail),t.setMode(e.mode),t.setStyle(e.style),t}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType(),type:"code-highlight",version:1}}setFormat(e){return this}isParentRequired(){return!0}createParentElementNode(){return O()}}function G(e,t){return t&&e&&e.codeHighlight&&e.codeHighlight[t]}function V(e,t){return s(new X(e,t))}function Y(e){return e instanceof X}function Z(e){let t=e,n=e;for(;Y(n)||u(n);)t=n,n=n.getPreviousSibling();return t}function $(e){let t=e,n=e;for(;Y(n)||u(n);)t=n,n=n.getNextSibling();return t}const ee={defaultLanguage:K,tokenize(t,n){return e.tokenize(t,e.languages[n||""]||e.languages[this.defaultLanguage])}};function te(e,t){let n=null,r=null,o=e,i=t,s=e.getTextContent();for(;;){if(0===i){if(o=o.getPreviousSibling(),null===o)break;if(!(Y(o)||u(o)||p(o)))throw Error("Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode");if(p(o)){n={node:o,offset:1};break}i=Math.max(0,o.getTextContentSize()-1),s=o.getTextContent()}else i--;const e=s[i];Y(o)&&" "!==e&&(r={node:o,offset:i})}if(null!==r)return r;let l=null;if(t<e.getTextContentSize())Y(e)&&(l=e.getTextContent()[t]);else{const t=e.getNextSibling();Y(t)&&(l=t.getTextContent()[0])}if(null!==l&&" "!==l)return n;{const r=function(e,t){let n=e,r=t,o=e.getTextContent(),i=e.getTextContentSize();for(;;){if(!Y(n)||r===i){if(n=n.getNextSibling(),null===n||p(n))return null;Y(n)&&(r=0,o=n.getTextContent(),i=n.getTextContentSize())}if(Y(n)){if(" "!==o[r])return{node:n,offset:r};r++}}}(e,t);return null!==r?r:n}}function ne(e){const t=$(e);if(p(t))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return t}function re(e,t,n){const r=e.getParent();A(r)?se(r,t,n):Y(e)&&e.replace(j(e.__text))}function oe(e,t){const n=t.getElementByKey(e.getKey());if(null===n)return;const r=e.getChildren(),o=r.length;if(o===n.__cachedChildrenLength)return;n.__cachedChildrenLength=o;let i="1",s=1;for(let e=0;e<o;e++)p(r[e])&&(i+="\n"+ ++s);n.setAttribute("data-gutter",i)}const ie=new Set;function se(e,t,n){const r=e.getKey();ie.has(r)||(ie.add(r),void 0===e.getLanguage()&&e.setLanguage(n.defaultLanguage),t.update((()=>{!function(e,t){const n=h(e);if(!A(n)||!n.isAttached())return;const r=N();if(!k(r))return void t();const o=r.anchor,i=o.offset,s="element"===o.type&&p(n.getChildAtIndex(o.offset-1));let l=0;if(!s){const e=o.getNode();l=i+e.getPreviousSiblings().reduce(((e,t)=>e+t.getTextContentSize()),0)}if(!t())return;if(s)return void o.getNode().select(i,i);n.getChildren().some((e=>{const t=c(e);if(t||p(e)){const n=e.getTextContentSize();if(t&&n>=l)return e.select(l,l),!0;l-=n}return!1}))}(r,(()=>{const t=h(r);if(!A(t)||!t.isAttached())return!1;const o=t.getTextContent(),i=le(n.tokenize(o,t.getLanguage()||n.defaultLanguage)),s=function(e,t){let n=0;for(;n<e.length&&ce(e[n],t[n]);)n++;const r=e.length,o=t.length,i=Math.min(r,o)-n;let s=0;for(;s<i;)if(s++,!ce(e[r-s],t[o-s])){s--;break}const l=n,c=r-s,u=t.slice(n,o-s);return{from:l,nodesForReplacement:u,to:c}}(t.getChildren(),i),{from:l,to:c,nodesForReplacement:u}=s;return!(l===c&&!u.length)&&(e.splice(l,c-l,u),!0)}))}),{onUpdate:()=>{ie.delete(r)},skipTransforms:!0}))}function le(e,t){const n=[];for(const r of e)if("string"==typeof r){const e=r.split(/(\n|\t)/),o=e.length;for(let r=0;r<o;r++){const o=e[r];"\n"===o||"\r\n"===o?n.push(g()):"\t"===o?n.push(a()):o.length>0&&n.push(V(o,t))}}else{const{content:e}=r;"string"==typeof e?n.push(...le([e],r.type)):Array.isArray(e)&&n.push(...le(e,r.type))}return n}function ce(e,t){return Y(e)&&Y(t)&&e.__text===t.__text&&e.__highlightType===t.__highlightType||u(e)&&u(t)||p(e)&&p(t)}function ue(e){if(!k(e))return!1;const t=e.anchor.getNode(),n=e.focus.getNode();if(t.is(n)&&A(t))return!0;const r=t.getParent();return A(r)&&r.is(n.getParent())}function ae(e){const t=e.getNodes(),n=[[]];if(1===t.length&&A(t[0]))return n;let r=n[0];for(let e=0;e<t.length;e++){const o=t[e];if(!(Y(o)||u(o)||p(o)))throw Error("Expected selection to be inside CodeBlock and consisting of CodeHighlightNode, TabNode and LineBreakNode");p(o)?0!==e&&r.length>0&&(r=[],n.push(r)):r.push(o)}return n}function ge(e){const t=N();if(!k(t)||!ue(t))return!1;const n=ae(t),r=n.length;if(n.length>1){for(let t=0;t<r;t++){const r=n[t];if(r.length>0){let n=r[0];0===t&&(n=Z(n)),null!==n&&(e===C?n.insertBefore(a()):u(n)&&n.remove())}}return!0}const o=t.getNodes()[0];if(!(A(o)||Y(o)||u(o)||p(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(A(o))return e===C&&t.insertNodes([a()]),!0;const i=Z(o);if(null===i)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");return e===C?p(i)?i.insertAfter(a()):i.insertBefore(a()):u(i)&&i.remove(),!0}function fe(e,t){const n=N();if(!k(n))return!1;const{anchor:r,focus:o}=n,i=r.offset,s=o.offset,l=r.getNode(),c=o.getNode(),a=e===T;if(!ue(n)||!Y(l)&&!u(l)||!Y(c)&&!u(c))return!1;if(!t.altKey){if(n.isCollapsed()){const e=l.getParentOrThrow();if(a&&0===i&&null===l.getPreviousSibling()){if(null===e.getPreviousSibling())return e.selectPrevious(),t.preventDefault(),!0}else if(!a&&i===l.getTextContentSize()&&null===l.getNextSibling()){if(null===e.getNextSibling())return e.selectNext(),t.preventDefault(),!0}}return!1}let g,f;if(l.isBefore(c)?(g=Z(l),f=$(c)):(g=Z(c),f=$(l)),null==g||null==f)return!1;const h=g.getNodesBetween(f);for(let e=0;e<h.length;e++){const t=h[e];if(!Y(t)&&!u(t)&&!p(t))return!1}t.preventDefault(),t.stopPropagation();const d=a?g.getPreviousSibling():f.getNextSibling();if(!p(d))return!0;const m=a?d.getPreviousSibling():d.getNextSibling();if(null==m)return!0;const x=Y(m)||u(m)||p(m)?a?Z(m):$(m):null;let y=null!=x?x:m;return d.remove(),h.forEach((e=>e.remove())),e===T?(h.forEach((e=>y.insertBefore(e))),y.insertBefore(d)):(y.insertAfter(d),y=d,h.forEach((e=>{y.insertAfter(e),y=e}))),n.setTextNodeRange(l,i,c,s),!0}function pe(e,t){const n=N();if(!k(n))return!1;const{anchor:r,focus:o}=n,i=r.getNode(),s=o.getNode(),l=e===S;if(!Y(i)&&!u(i)||!Y(s)&&!u(s))return!1;if(l){const e=te(s,o.offset);if(null!==e){const{node:t,offset:r}=e;p(t)?t.selectNext(0,0):n.setTextNodeRange(t,r,t,r)}else s.getParentOrThrow().selectStart()}else{ne(s).select()}return t.preventDefault(),t.stopPropagation(),!0}function he(e,t){if(!e.hasNodes([E,X]))throw new Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return null==t&&(t=ee),o(e.registerMutationListener(E,(t=>{e.update((()=>{for(const[n,r]of t)if("destroyed"!==r){const t=h(n);null!==t&&oe(t,e)}}))})),e.registerNodeTransform(E,(n=>se(n,e,t))),e.registerNodeTransform(f,(n=>re(n,e,t))),e.registerNodeTransform(X,(n=>re(n,e,t))),e.registerCommand(d,(t=>{const n=function(e){const t=N();if(!k(t)||!ue(t))return null;const n=e?v:C,r=e?v:x;if(ae(t).length>1)return n;const o=t.getNodes()[0];if(!(A(o)||Y(o)||u(o)||p(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(A(o))return n;const i=Z(o),s=$(o),l=t.anchor,c=t.focus;let a,g;return c.isBefore(l)?(a=c,g=l):(a=l,g=c),null!==i&&null!==s&&a.key===i.getKey()&&0===a.offset&&g.key===s.getKey()&&g.offset===s.getTextContentSize()?n:r}(t.shiftKey);return null!==n&&(t.preventDefault(),e.dispatchCommand(n,void 0),!0)}),m),e.registerCommand(x,(()=>!!ue(N())&&(y([a()]),!0)),m),e.registerCommand(C,(e=>ge(C)),m),e.registerCommand(v,(e=>ge(v)),m),e.registerCommand(T,(e=>fe(T,e)),m),e.registerCommand(_,(e=>fe(_,e)),m),e.registerCommand(b,(e=>pe(b,e)),m),e.registerCommand(S,(e=>pe(S,e)),m))}export{V as $createCodeHighlightNode,O as $createCodeNode,Y as $isCodeHighlightNode,A as $isCodeNode,R as CODE_LANGUAGE_FRIENDLY_NAME_MAP,I as CODE_LANGUAGE_MAP,X as CodeHighlightNode,E as CodeNode,K as DEFAULT_CODE_LANGUAGE,ee as PrismTokenizer,Q as getCodeLanguages,W as getDefaultCodeLanguage,ne as getEndOfCodeInLine,Z as getFirstCodeNodeOfLine,U as getLanguageFriendlyName,$ as getLastCodeNodeOfLine,te as getStartOfCodeInLine,q as normalizeCodeLang,he as registerCodeHighlighting};