@lexical/code 0.14.5 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,9 +14,15 @@ import 'prismjs/components/prism-c';
14
14
  import 'prismjs/components/prism-css';
15
15
  import 'prismjs/components/prism-objectivec';
16
16
  import 'prismjs/components/prism-sql';
17
+ import 'prismjs/components/prism-powershell';
17
18
  import 'prismjs/components/prism-python';
18
19
  import 'prismjs/components/prism-rust';
19
20
  import 'prismjs/components/prism-swift';
20
21
  import 'prismjs/components/prism-typescript';
21
22
  import 'prismjs/components/prism-java';
22
23
  import 'prismjs/components/prism-cpp';
24
+ declare global {
25
+ interface Window {
26
+ Prism: typeof import('prismjs');
27
+ }
28
+ }
@@ -3,7 +3,9 @@
3
3
  *
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
  */
8
+
7
9
  'use strict';
8
10
 
9
11
  require('prismjs');
@@ -15,6 +17,7 @@ require('prismjs/components/prism-c');
15
17
  require('prismjs/components/prism-css');
16
18
  require('prismjs/components/prism-objectivec');
17
19
  require('prismjs/components/prism-sql');
20
+ require('prismjs/components/prism-powershell');
18
21
  require('prismjs/components/prism-python');
19
22
  require('prismjs/components/prism-rust');
20
23
  require('prismjs/components/prism-swift');
@@ -57,6 +60,7 @@ function invariant(cond, message, ...args) {
57
60
  * LICENSE file in the root directory of this source tree.
58
61
  *
59
62
  */
63
+
60
64
  const mapToPrismLanguage = language => {
61
65
  // eslint-disable-next-line no-prototype-builtins
62
66
  return language != null && window.Prism.languages.hasOwnProperty(language) ? language : undefined;
@@ -130,16 +134,16 @@ class CodeNode extends lexical.ElementNode {
130
134
  code: node => {
131
135
  const isMultiLine = node.textContent != null && (/\r?\n/.test(node.textContent) || hasChildDOMNodeTag(node, 'BR'));
132
136
  return isMultiLine ? {
133
- conversion: convertPreElement,
137
+ conversion: $convertPreElement,
134
138
  priority: 1
135
139
  } : null;
136
140
  },
137
141
  div: node => ({
138
- conversion: convertDivElement,
142
+ conversion: $convertDivElement,
139
143
  priority: 1
140
144
  }),
141
145
  pre: node => ({
142
- conversion: convertPreElement,
146
+ conversion: $convertPreElement,
143
147
  priority: 0
144
148
  }),
145
149
  table: node => {
@@ -147,7 +151,7 @@ class CodeNode extends lexical.ElementNode {
147
151
  // domNode is a <table> since we matched it by nodeName
148
152
  if (isGitHubCodeTable(table)) {
149
153
  return {
150
- conversion: convertTableElement,
154
+ conversion: $convertTableElement,
151
155
  priority: 3
152
156
  };
153
157
  }
@@ -157,13 +161,7 @@ class CodeNode extends lexical.ElementNode {
157
161
  // element is a <td> since we matched it by nodeName
158
162
  const td = node;
159
163
  const table = td.closest('table');
160
- if (isGitHubCodeCell(td)) {
161
- return {
162
- conversion: convertTableCellElement,
163
- priority: 3
164
- };
165
- }
166
- if (table && isGitHubCodeTable(table)) {
164
+ if (isGitHubCodeCell(td) || table && isGitHubCodeTable(table)) {
167
165
  // Return a no-op if it's a table cell in a code table, but not a code line.
168
166
  // Otherwise it'll fall back to the T
169
167
  return {
@@ -298,7 +296,7 @@ function $createCodeNode(language) {
298
296
  function $isCodeNode(node) {
299
297
  return node instanceof CodeNode;
300
298
  }
301
- function convertPreElement(domNode) {
299
+ function $convertPreElement(domNode) {
302
300
  let language;
303
301
  if (utils.isHTMLElement(domNode)) {
304
302
  language = domNode.getAttribute(LANGUAGE_DATA_ATTRIBUTE);
@@ -307,7 +305,7 @@ function convertPreElement(domNode) {
307
305
  node: $createCodeNode(language)
308
306
  };
309
307
  }
310
- function convertDivElement(domNode) {
308
+ function $convertDivElement(domNode) {
311
309
  // domNode is a <div> since we matched it by nodeName
312
310
  const div = domNode;
313
311
  const isCode = isCodeElement(div);
@@ -317,17 +315,10 @@ function convertDivElement(domNode) {
317
315
  };
318
316
  }
319
317
  return {
320
- after: childLexicalNodes => {
321
- const domParent = domNode.parentNode;
322
- if (domParent != null && domNode !== domParent.lastChild) {
323
- childLexicalNodes.push(lexical.$createLineBreakNode());
324
- }
325
- return childLexicalNodes;
326
- },
327
318
  node: isCode ? $createCodeNode() : null
328
319
  };
329
320
  }
330
- function convertTableElement() {
321
+ function $convertTableElement() {
331
322
  return {
332
323
  node: $createCodeNode()
333
324
  };
@@ -337,20 +328,6 @@ function convertCodeNoop() {
337
328
  node: null
338
329
  };
339
330
  }
340
- function convertTableCellElement(domNode) {
341
- // domNode is a <td> since we matched it by nodeName
342
- const cell = domNode;
343
- return {
344
- after: childLexicalNodes => {
345
- if (cell.parentNode && cell.parentNode.nextSibling) {
346
- // Append newline between code lines
347
- childLexicalNodes.push(lexical.$createLineBreakNode());
348
- }
349
- return childLexicalNodes;
350
- },
351
- node: null
352
- };
353
- }
354
331
  function isCodeElement(div) {
355
332
  return div.style.fontFamily.match('monospace') !== null;
356
333
  }
@@ -378,6 +355,7 @@ function isGitHubCodeTable(table) {
378
355
  * LICENSE file in the root directory of this source tree.
379
356
  *
380
357
  */
358
+
381
359
  const DEFAULT_CODE_LANGUAGE = 'javascript';
382
360
  const CODE_LANGUAGE_FRIENDLY_NAME_MAP = {
383
361
  c: 'C',
@@ -390,6 +368,7 @@ const CODE_LANGUAGE_FRIENDLY_NAME_MAP = {
390
368
  markdown: 'Markdown',
391
369
  objc: 'Objective-C',
392
370
  plain: 'Plain Text',
371
+ powershell: 'PowerShell',
393
372
  py: 'Python',
394
373
  rust: 'Rust',
395
374
  sql: 'SQL',
@@ -524,6 +503,7 @@ function getLastCodeNodeOfLine(anchor) {
524
503
  * LICENSE file in the root directory of this source tree.
525
504
  *
526
505
  */
506
+
527
507
  const PrismTokenizer = {
528
508
  defaultLanguage: DEFAULT_CODE_LANGUAGE,
529
509
  tokenize(code, language) {
@@ -630,7 +610,7 @@ function getEndOfCodeInLine(anchor) {
630
610
  }
631
611
  return lastNode;
632
612
  }
633
- function textNodeTransform(node, editor, tokenizer) {
613
+ function $textNodeTransform(node, editor, tokenizer) {
634
614
  // Since CodeNode has flat children structure we only need to check
635
615
  // if node's parent is a code node and run highlighting if so
636
616
  const parentNode = node.getParent();
@@ -691,14 +671,14 @@ function codeNodeTransform(node, editor, tokenizer) {
691
671
  // each individual codehighlight node to be transformed again as it's already
692
672
  // in its final state
693
673
  editor.update(() => {
694
- updateAndRetainSelection(nodeKey, () => {
674
+ $updateAndRetainSelection(nodeKey, () => {
695
675
  const currentNode = lexical.$getNodeByKey(nodeKey);
696
676
  if (!$isCodeNode(currentNode) || !currentNode.isAttached()) {
697
677
  return false;
698
678
  }
699
679
  const code = currentNode.getTextContent();
700
680
  const tokens = tokenizer.tokenize(code, currentNode.getLanguage() || tokenizer.defaultLanguage);
701
- const highlightNodes = getHighlightNodes(tokens);
681
+ const highlightNodes = $getHighlightNodes(tokens);
702
682
  const diffRange = getDiffRange(currentNode.getChildren(), highlightNodes);
703
683
  const {
704
684
  from,
@@ -718,7 +698,7 @@ function codeNodeTransform(node, editor, tokenizer) {
718
698
  skipTransforms: true
719
699
  });
720
700
  }
721
- function getHighlightNodes(tokens, type) {
701
+ function $getHighlightNodes(tokens, type) {
722
702
  const nodes = [];
723
703
  for (const token of tokens) {
724
704
  if (typeof token === 'string') {
@@ -739,9 +719,9 @@ function getHighlightNodes(tokens, type) {
739
719
  content
740
720
  } = token;
741
721
  if (typeof content === 'string') {
742
- nodes.push(...getHighlightNodes([content], token.type));
722
+ nodes.push(...$getHighlightNodes([content], token.type));
743
723
  } else if (Array.isArray(content)) {
744
- nodes.push(...getHighlightNodes(content, token.type));
724
+ nodes.push(...$getHighlightNodes(content, token.type));
745
725
  }
746
726
  }
747
727
  }
@@ -750,7 +730,7 @@ function getHighlightNodes(tokens, type) {
750
730
 
751
731
  // Wrapping update function into selection retainer, that tries to keep cursor at the same
752
732
  // position as before.
753
- function updateAndRetainSelection(nodeKey, updateFn) {
733
+ function $updateAndRetainSelection(nodeKey, updateFn) {
754
734
  const node = lexical.$getNodeByKey(nodeKey);
755
735
  if (!$isCodeNode(node) || !node.isAttached()) {
756
736
  return;
@@ -872,7 +852,7 @@ function $getCodeLines(selection) {
872
852
  }
873
853
  return lines;
874
854
  }
875
- function handleTab(shiftKey) {
855
+ function $handleTab(shiftKey) {
876
856
  const selection = lexical.$getSelection();
877
857
  if (!lexical.$isRangeSelection(selection) || !$isSelectionInCode(selection)) {
878
858
  return null;
@@ -912,7 +892,7 @@ function handleTab(shiftKey) {
912
892
  // 3. Else: tab/outdent
913
893
  return tabOrOutdent;
914
894
  }
915
- function handleMultilineIndent(type) {
895
+ function $handleMultilineIndent(type) {
916
896
  const selection = lexical.$getSelection();
917
897
  if (!lexical.$isRangeSelection(selection) || !$isSelectionInCode(selection)) {
918
898
  return false;
@@ -968,7 +948,7 @@ function handleMultilineIndent(type) {
968
948
  }
969
949
  return true;
970
950
  }
971
- function handleShiftLines(type, event) {
951
+ function $handleShiftLines(type, event) {
972
952
  // We only care about the alt+arrow keys
973
953
  const selection = lexical.$getSelection();
974
954
  if (!lexical.$isRangeSelection(selection)) {
@@ -1066,7 +1046,7 @@ function handleShiftLines(type, event) {
1066
1046
  selection.setTextNodeRange(anchorNode, anchorOffset, focusNode, focusOffset);
1067
1047
  return true;
1068
1048
  }
1069
- function handleMoveTo(type, event) {
1049
+ function $handleMoveTo(type, event) {
1070
1050
  const selection = lexical.$getSelection();
1071
1051
  if (!lexical.$isRangeSelection(selection)) {
1072
1052
  return false;
@@ -1122,8 +1102,8 @@ function registerCodeHighlighting(editor, tokenizer) {
1122
1102
  }
1123
1103
  }
1124
1104
  });
1125
- }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(lexical.TextNode, node => textNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor, tokenizer)), editor.registerCommand(lexical.KEY_TAB_COMMAND, event => {
1126
- const command = handleTab(event.shiftKey);
1105
+ }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(lexical.TextNode, node => $textNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(CodeHighlightNode, node => $textNodeTransform(node, editor, tokenizer)), editor.registerCommand(lexical.KEY_TAB_COMMAND, event => {
1106
+ const command = $handleTab(event.shiftKey);
1127
1107
  if (command === null) {
1128
1108
  return false;
1129
1109
  }
@@ -1137,7 +1117,7 @@ function registerCodeHighlighting(editor, tokenizer) {
1137
1117
  }
1138
1118
  lexical.$insertNodes([lexical.$createTabNode()]);
1139
1119
  return true;
1140
- }, lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.INDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.INDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.OUTDENT_CONTENT_COMMAND, payload => handleMultilineIndent(lexical.OUTDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_UP_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_UP_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_DOWN_COMMAND, payload => handleShiftLines(lexical.KEY_ARROW_DOWN_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_END, payload => handleMoveTo(lexical.MOVE_TO_END, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_START, payload => handleMoveTo(lexical.MOVE_TO_START, payload), lexical.COMMAND_PRIORITY_LOW));
1120
+ }, lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.INDENT_CONTENT_COMMAND, payload => $handleMultilineIndent(lexical.INDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.OUTDENT_CONTENT_COMMAND, payload => $handleMultilineIndent(lexical.OUTDENT_CONTENT_COMMAND), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_UP_COMMAND, payload => $handleShiftLines(lexical.KEY_ARROW_UP_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.KEY_ARROW_DOWN_COMMAND, payload => $handleShiftLines(lexical.KEY_ARROW_DOWN_COMMAND, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_END, payload => $handleMoveTo(lexical.MOVE_TO_END, payload), lexical.COMMAND_PRIORITY_LOW), editor.registerCommand(lexical.MOVE_TO_START, payload => $handleMoveTo(lexical.MOVE_TO_START, payload), lexical.COMMAND_PRIORITY_LOW));
1141
1121
  }
1142
1122
 
1143
1123
  /**
@@ -3,7 +3,9 @@
3
3
  *
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
  */
8
+
7
9
  import 'prismjs';
8
10
  import 'prismjs/components/prism-clike.js';
9
11
  import 'prismjs/components/prism-javascript.js';
@@ -13,6 +15,7 @@ import 'prismjs/components/prism-c.js';
13
15
  import 'prismjs/components/prism-css.js';
14
16
  import 'prismjs/components/prism-objectivec.js';
15
17
  import 'prismjs/components/prism-sql.js';
18
+ import 'prismjs/components/prism-powershell.js';
16
19
  import 'prismjs/components/prism-python.js';
17
20
  import 'prismjs/components/prism-rust.js';
18
21
  import 'prismjs/components/prism-swift.js';
@@ -20,7 +23,7 @@ import 'prismjs/components/prism-typescript.js';
20
23
  import 'prismjs/components/prism-java.js';
21
24
  import 'prismjs/components/prism-cpp.js';
22
25
  import { isHTMLElement, addClassNamesToElement, removeClassNamesFromElement, mergeRegister } from '@lexical/utils';
23
- import { ElementNode, $applyNodeReplacement, $createParagraphNode, $isTextNode, $isTabNode, $createTabNode, $createLineBreakNode, TextNode, $isLineBreakNode, $createTextNode, $getNodeByKey, $getSelection, $isRangeSelection, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND, INSERT_TAB_COMMAND, KEY_ARROW_UP_COMMAND, MOVE_TO_START, KEY_TAB_COMMAND, COMMAND_PRIORITY_LOW, $insertNodes, KEY_ARROW_DOWN_COMMAND, MOVE_TO_END } from 'lexical';
26
+ import { ElementNode, $createParagraphNode, $isTextNode, $isTabNode, $createTabNode, $createLineBreakNode, $applyNodeReplacement, TextNode, $isLineBreakNode, $createTextNode, $getNodeByKey, $getSelection, $isRangeSelection, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND, INSERT_TAB_COMMAND, KEY_ARROW_UP_COMMAND, MOVE_TO_START, KEY_TAB_COMMAND, COMMAND_PRIORITY_LOW, $insertNodes, KEY_ARROW_DOWN_COMMAND, MOVE_TO_END } from 'lexical';
24
27
 
25
28
  /**
26
29
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -55,6 +58,7 @@ function invariant(cond, message, ...args) {
55
58
  * LICENSE file in the root directory of this source tree.
56
59
  *
57
60
  */
61
+
58
62
  const mapToPrismLanguage = language => {
59
63
  // eslint-disable-next-line no-prototype-builtins
60
64
  return language != null && window.Prism.languages.hasOwnProperty(language) ? language : undefined;
@@ -128,16 +132,16 @@ class CodeNode extends ElementNode {
128
132
  code: node => {
129
133
  const isMultiLine = node.textContent != null && (/\r?\n/.test(node.textContent) || hasChildDOMNodeTag(node, 'BR'));
130
134
  return isMultiLine ? {
131
- conversion: convertPreElement,
135
+ conversion: $convertPreElement,
132
136
  priority: 1
133
137
  } : null;
134
138
  },
135
139
  div: node => ({
136
- conversion: convertDivElement,
140
+ conversion: $convertDivElement,
137
141
  priority: 1
138
142
  }),
139
143
  pre: node => ({
140
- conversion: convertPreElement,
144
+ conversion: $convertPreElement,
141
145
  priority: 0
142
146
  }),
143
147
  table: node => {
@@ -145,7 +149,7 @@ class CodeNode extends ElementNode {
145
149
  // domNode is a <table> since we matched it by nodeName
146
150
  if (isGitHubCodeTable(table)) {
147
151
  return {
148
- conversion: convertTableElement,
152
+ conversion: $convertTableElement,
149
153
  priority: 3
150
154
  };
151
155
  }
@@ -155,13 +159,7 @@ class CodeNode extends ElementNode {
155
159
  // element is a <td> since we matched it by nodeName
156
160
  const td = node;
157
161
  const table = td.closest('table');
158
- if (isGitHubCodeCell(td)) {
159
- return {
160
- conversion: convertTableCellElement,
161
- priority: 3
162
- };
163
- }
164
- if (table && isGitHubCodeTable(table)) {
162
+ if (isGitHubCodeCell(td) || table && isGitHubCodeTable(table)) {
165
163
  // Return a no-op if it's a table cell in a code table, but not a code line.
166
164
  // Otherwise it'll fall back to the T
167
165
  return {
@@ -296,7 +294,7 @@ function $createCodeNode(language) {
296
294
  function $isCodeNode(node) {
297
295
  return node instanceof CodeNode;
298
296
  }
299
- function convertPreElement(domNode) {
297
+ function $convertPreElement(domNode) {
300
298
  let language;
301
299
  if (isHTMLElement(domNode)) {
302
300
  language = domNode.getAttribute(LANGUAGE_DATA_ATTRIBUTE);
@@ -305,7 +303,7 @@ function convertPreElement(domNode) {
305
303
  node: $createCodeNode(language)
306
304
  };
307
305
  }
308
- function convertDivElement(domNode) {
306
+ function $convertDivElement(domNode) {
309
307
  // domNode is a <div> since we matched it by nodeName
310
308
  const div = domNode;
311
309
  const isCode = isCodeElement(div);
@@ -315,17 +313,10 @@ function convertDivElement(domNode) {
315
313
  };
316
314
  }
317
315
  return {
318
- after: childLexicalNodes => {
319
- const domParent = domNode.parentNode;
320
- if (domParent != null && domNode !== domParent.lastChild) {
321
- childLexicalNodes.push($createLineBreakNode());
322
- }
323
- return childLexicalNodes;
324
- },
325
316
  node: isCode ? $createCodeNode() : null
326
317
  };
327
318
  }
328
- function convertTableElement() {
319
+ function $convertTableElement() {
329
320
  return {
330
321
  node: $createCodeNode()
331
322
  };
@@ -335,20 +326,6 @@ function convertCodeNoop() {
335
326
  node: null
336
327
  };
337
328
  }
338
- function convertTableCellElement(domNode) {
339
- // domNode is a <td> since we matched it by nodeName
340
- const cell = domNode;
341
- return {
342
- after: childLexicalNodes => {
343
- if (cell.parentNode && cell.parentNode.nextSibling) {
344
- // Append newline between code lines
345
- childLexicalNodes.push($createLineBreakNode());
346
- }
347
- return childLexicalNodes;
348
- },
349
- node: null
350
- };
351
- }
352
329
  function isCodeElement(div) {
353
330
  return div.style.fontFamily.match('monospace') !== null;
354
331
  }
@@ -376,6 +353,7 @@ function isGitHubCodeTable(table) {
376
353
  * LICENSE file in the root directory of this source tree.
377
354
  *
378
355
  */
356
+
379
357
  const DEFAULT_CODE_LANGUAGE = 'javascript';
380
358
  const CODE_LANGUAGE_FRIENDLY_NAME_MAP = {
381
359
  c: 'C',
@@ -388,6 +366,7 @@ const CODE_LANGUAGE_FRIENDLY_NAME_MAP = {
388
366
  markdown: 'Markdown',
389
367
  objc: 'Objective-C',
390
368
  plain: 'Plain Text',
369
+ powershell: 'PowerShell',
391
370
  py: 'Python',
392
371
  rust: 'Rust',
393
372
  sql: 'SQL',
@@ -522,6 +501,7 @@ function getLastCodeNodeOfLine(anchor) {
522
501
  * LICENSE file in the root directory of this source tree.
523
502
  *
524
503
  */
504
+
525
505
  const PrismTokenizer = {
526
506
  defaultLanguage: DEFAULT_CODE_LANGUAGE,
527
507
  tokenize(code, language) {
@@ -628,7 +608,7 @@ function getEndOfCodeInLine(anchor) {
628
608
  }
629
609
  return lastNode;
630
610
  }
631
- function textNodeTransform(node, editor, tokenizer) {
611
+ function $textNodeTransform(node, editor, tokenizer) {
632
612
  // Since CodeNode has flat children structure we only need to check
633
613
  // if node's parent is a code node and run highlighting if so
634
614
  const parentNode = node.getParent();
@@ -689,14 +669,14 @@ function codeNodeTransform(node, editor, tokenizer) {
689
669
  // each individual codehighlight node to be transformed again as it's already
690
670
  // in its final state
691
671
  editor.update(() => {
692
- updateAndRetainSelection(nodeKey, () => {
672
+ $updateAndRetainSelection(nodeKey, () => {
693
673
  const currentNode = $getNodeByKey(nodeKey);
694
674
  if (!$isCodeNode(currentNode) || !currentNode.isAttached()) {
695
675
  return false;
696
676
  }
697
677
  const code = currentNode.getTextContent();
698
678
  const tokens = tokenizer.tokenize(code, currentNode.getLanguage() || tokenizer.defaultLanguage);
699
- const highlightNodes = getHighlightNodes(tokens);
679
+ const highlightNodes = $getHighlightNodes(tokens);
700
680
  const diffRange = getDiffRange(currentNode.getChildren(), highlightNodes);
701
681
  const {
702
682
  from,
@@ -716,7 +696,7 @@ function codeNodeTransform(node, editor, tokenizer) {
716
696
  skipTransforms: true
717
697
  });
718
698
  }
719
- function getHighlightNodes(tokens, type) {
699
+ function $getHighlightNodes(tokens, type) {
720
700
  const nodes = [];
721
701
  for (const token of tokens) {
722
702
  if (typeof token === 'string') {
@@ -737,9 +717,9 @@ function getHighlightNodes(tokens, type) {
737
717
  content
738
718
  } = token;
739
719
  if (typeof content === 'string') {
740
- nodes.push(...getHighlightNodes([content], token.type));
720
+ nodes.push(...$getHighlightNodes([content], token.type));
741
721
  } else if (Array.isArray(content)) {
742
- nodes.push(...getHighlightNodes(content, token.type));
722
+ nodes.push(...$getHighlightNodes(content, token.type));
743
723
  }
744
724
  }
745
725
  }
@@ -748,7 +728,7 @@ function getHighlightNodes(tokens, type) {
748
728
 
749
729
  // Wrapping update function into selection retainer, that tries to keep cursor at the same
750
730
  // position as before.
751
- function updateAndRetainSelection(nodeKey, updateFn) {
731
+ function $updateAndRetainSelection(nodeKey, updateFn) {
752
732
  const node = $getNodeByKey(nodeKey);
753
733
  if (!$isCodeNode(node) || !node.isAttached()) {
754
734
  return;
@@ -870,7 +850,7 @@ function $getCodeLines(selection) {
870
850
  }
871
851
  return lines;
872
852
  }
873
- function handleTab(shiftKey) {
853
+ function $handleTab(shiftKey) {
874
854
  const selection = $getSelection();
875
855
  if (!$isRangeSelection(selection) || !$isSelectionInCode(selection)) {
876
856
  return null;
@@ -910,7 +890,7 @@ function handleTab(shiftKey) {
910
890
  // 3. Else: tab/outdent
911
891
  return tabOrOutdent;
912
892
  }
913
- function handleMultilineIndent(type) {
893
+ function $handleMultilineIndent(type) {
914
894
  const selection = $getSelection();
915
895
  if (!$isRangeSelection(selection) || !$isSelectionInCode(selection)) {
916
896
  return false;
@@ -966,7 +946,7 @@ function handleMultilineIndent(type) {
966
946
  }
967
947
  return true;
968
948
  }
969
- function handleShiftLines(type, event) {
949
+ function $handleShiftLines(type, event) {
970
950
  // We only care about the alt+arrow keys
971
951
  const selection = $getSelection();
972
952
  if (!$isRangeSelection(selection)) {
@@ -1064,7 +1044,7 @@ function handleShiftLines(type, event) {
1064
1044
  selection.setTextNodeRange(anchorNode, anchorOffset, focusNode, focusOffset);
1065
1045
  return true;
1066
1046
  }
1067
- function handleMoveTo(type, event) {
1047
+ function $handleMoveTo(type, event) {
1068
1048
  const selection = $getSelection();
1069
1049
  if (!$isRangeSelection(selection)) {
1070
1050
  return false;
@@ -1120,8 +1100,8 @@ function registerCodeHighlighting(editor, tokenizer) {
1120
1100
  }
1121
1101
  }
1122
1102
  });
1123
- }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(TextNode, node => textNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor, tokenizer)), editor.registerCommand(KEY_TAB_COMMAND, event => {
1124
- const command = handleTab(event.shiftKey);
1103
+ }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(TextNode, node => $textNodeTransform(node, editor, tokenizer)), editor.registerNodeTransform(CodeHighlightNode, node => $textNodeTransform(node, editor, tokenizer)), editor.registerCommand(KEY_TAB_COMMAND, event => {
1104
+ const command = $handleTab(event.shiftKey);
1125
1105
  if (command === null) {
1126
1106
  return false;
1127
1107
  }
@@ -1135,7 +1115,7 @@ function registerCodeHighlighting(editor, tokenizer) {
1135
1115
  }
1136
1116
  $insertNodes([$createTabNode()]);
1137
1117
  return true;
1138
- }, COMMAND_PRIORITY_LOW), editor.registerCommand(INDENT_CONTENT_COMMAND, payload => handleMultilineIndent(INDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(OUTDENT_CONTENT_COMMAND, payload => handleMultilineIndent(OUTDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_UP_COMMAND, payload => handleShiftLines(KEY_ARROW_UP_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_DOWN_COMMAND, payload => handleShiftLines(KEY_ARROW_DOWN_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_END, payload => handleMoveTo(MOVE_TO_END, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_START, payload => handleMoveTo(MOVE_TO_START, payload), COMMAND_PRIORITY_LOW));
1118
+ }, COMMAND_PRIORITY_LOW), editor.registerCommand(INDENT_CONTENT_COMMAND, payload => $handleMultilineIndent(INDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(OUTDENT_CONTENT_COMMAND, payload => $handleMultilineIndent(OUTDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_UP_COMMAND, payload => $handleShiftLines(KEY_ARROW_UP_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_DOWN_COMMAND, payload => $handleShiftLines(KEY_ARROW_DOWN_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_END, payload => $handleMoveTo(MOVE_TO_END, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_START, payload => $handleMoveTo(MOVE_TO_START, payload), COMMAND_PRIORITY_LOW));
1139
1119
  }
1140
1120
 
1141
1121
  /**
package/LexicalCode.js CHANGED
@@ -3,7 +3,9 @@
3
3
  *
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
  */
8
+
7
9
  'use strict'
8
10
  const LexicalCode = process.env.NODE_ENV === 'development' ? require('./LexicalCode.dev.js') : require('./LexicalCode.prod.js');
9
11
  module.exports = LexicalCode;
package/LexicalCode.mjs CHANGED
@@ -3,7 +3,9 @@
3
3
  *
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
  */
8
+
7
9
  import * as modDev from './LexicalCode.dev.mjs';
8
10
  import * as modProd from './LexicalCode.prod.mjs';
9
11
  const mod = process.env.NODE_ENV === 'development' ? modDev : modProd;
@@ -3,7 +3,9 @@
3
3
  *
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
  */
8
+
7
9
  const mod = await (process.env.NODE_ENV === 'development' ? import('./LexicalCode.dev.mjs') : import('./LexicalCode.prod.mjs'));
8
10
  export const $createCodeHighlightNode = mod.$createCodeHighlightNode;
9
11
  export const $createCodeNode = mod.$createCodeNode;
@@ -3,40 +3,42 @@
3
3
  *
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
  */
7
- 'use strict';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");require("prismjs/components/prism-typescript");
8
- require("prismjs/components/prism-java");require("prismjs/components/prism-cpp");var d=require("@lexical/utils"),m=require("lexical");let q=a=>null!=a&&window.Prism.languages.hasOwnProperty(a)?a:void 0;function v(a,b){for(let c of a.childNodes){if(d.isHTMLElement(c)&&c.tagName===b)return!0;v(c,b)}return!1}
9
- class w extends m.ElementNode{static getType(){return"code"}static clone(a){return new w(a.__language,a.__key)}constructor(a,b){super(b);this.__language=q(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)||v(a,"BR"))?{conversion:y,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:y,priority:0}),table:a=>z(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");
11
- return a.classList.contains("js-file-line")?{conversion:ca,priority:3}:b&&z(b)?{conversion:A,priority:3}:null},tr:a=>(a=a.closest("table"))&&z(a)?{conversion:A,priority:3}:null}}static importJSON(a){let b=B(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=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=C(b);for(c=[];;)if(m.$isTabNode(e))c.push(m.$createTabNode()),e=e.getNextSibling();else if(D(e)){for(var h=0,k=e.getTextContent(),l=e.getTextContentSize();h<l&&" "===k[h];)h++;0!==h&&c.push(E(" ".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)}F(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
- q(a)}getLanguage(){return this.getLatest().__language}}function B(a){return m.$applyNodeReplacement(new w(a))}function F(a){return a instanceof w}function y(a){let b;d.isHTMLElement(a)&&(b=a.getAttribute("data-highlight-language"));return{node:B(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?B():null}:{node:null}}function ba(){return{node:B()}}
15
- function A(){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 z(a){return a.classList.contains("js-file-line-container")}
16
- let G={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"},H={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function J(a){return H[a]||a}
17
- class K extends m.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new K(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(a){let b=super.createDOM(a);a=L(a.theme,this.__highlightType);d.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let e=super.updateDOM(a,b,c);a=L(c.theme,a.__highlightType);c=L(c.theme,this.__highlightType);a!==
18
- c&&(a&&d.removeClassNamesFromElement(b,a),c&&d.addClassNamesToElement(b,c));return e}static importJSON(a){let b=E(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 B()}}function L(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}
19
- function E(a,b){return m.$applyNodeReplacement(new K(a,b))}function D(a){return a instanceof K}function C(a){let b=a;for(;D(a)||m.$isTabNode(a);)b=a,a=a.getPreviousSibling();return b}function M(a){let b=a;for(;D(a)||m.$isTabNode(a);)b=a,a=a.getNextSibling();return b}let N={defaultLanguage:"javascript",tokenize(a,b){return window.Prism.tokenize(a,window.Prism.languages[b||""]||window.Prism.languages[this.defaultLanguage])}};
20
- function O(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(!(D(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];D(f)&&" "!==k&&(e={node:f,offset:g})}if(null!==e)return e;e=null;b<a.getTextContentSize()?D(a)&&(e=a.getTextContent()[b]):
21
- (f=a.getNextSibling(),D(f)&&(e=f.getTextContent()[0]));if(null!==e&&" "!==e)return c;a:for(e=a,f=a.getTextContent(),a=a.getTextContentSize();;){if(!D(e)||b===a){e=e.getNextSibling();if(null===e||m.$isLineBreakNode(e)){a=null;break a}D(e)&&(b=0,f=e.getTextContent(),a=e.getTextContentSize())}if(D(e)){if(" "!==f[b]){a={node:e,offset:b};break a}b++}}return null!==a?a:c}function P(a){a=M(a);if(m.$isLineBreakNode(a))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return a}
22
- function Q(a,b,c){let e=a.getParent();F(e)?R(e,b,c):D(a)&&a.replace(m.$createTextNode(a.__text))}let S=new Set;
23
- function R(a,b,c){let e=a.getKey();S.has(e)||(S.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ea(e,()=>{var f=m.$getNodeByKey(e);if(!F(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=T(g);var h=f.getChildren();for(f=0;f<h.length&&U(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++,!U(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
- {from:h,nodesForReplacement:g,to:k};return p!==x||u.length?(a.splice(p,x-p,u),!0):!1})},{onUpdate:()=>{S.delete(e)},skipTransforms:!0}))}
25
- function T(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(E(h,b))}}else({content:a}=e),"string"===typeof a?c.push(...T([a],e.type)):Array.isArray(a)&&c.push(...T(a,e.type));return c}
26
- function ea(a,b){a=m.$getNodeByKey(a);if(F(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 U(a,b){return D(a)&&D(b)&&a.__text===b.__text&&a.__highlightType===b.__highlightType||m.$isTabNode(a)&&m.$isTabNode(b)||m.$isLineBreakNode(a)&&m.$isLineBreakNode(b)}function V(a){if(!m.$isRangeSelection(a))return!1;var b=a.anchor.getNode();a=a.focus.getNode();if(b.is(a)&&F(b))return!0;b=b.getParent();return F(b)&&b.is(a.getParent())}
28
- function W(a){a=a.getNodes();let b=[[]];if(1===a.length&&F(a[0]))return b;let c=b[0];for(let e=0;e<a.length;e++){let f=a[e];if(!(D(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)||!V(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<W(b).length)return c;var e=b.getNodes()[0];if(!(F(e)||D(e)||m.$isTabNode(e)||m.$isLineBreakNode(e)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(F(e))return c;let f=C(e);e=M(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
- f.getKey()&&0===b.offset&&g.key===e.getKey()&&g.offset===e.getTextContentSize()?c:a}
31
- function X(a){var b=m.$getSelection();if(!m.$isRangeSelection(b)||!V(b))return!1;var c=W(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=C(f)),null!==f&&(a===m.INDENT_CONTENT_COMMAND?f.insertBefore(m.$createTabNode()):m.$isTabNode(f)&&f.remove()))}return!0}c=b.getNodes()[0];if(!(F(c)||D(c)||m.$isTabNode(c)||m.$isLineBreakNode(c)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(F(c))return a===m.INDENT_CONTENT_COMMAND&&
32
- b.insertNodes([m.$createTabNode()]),!0;c=C(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 Y(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(!V(c)||!D(k)&&!m.$isTabNode(k)||!D(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=C(k);n=M(l)}else p=C(l),n=M(k);if(null==p||null==n)return!1;let x=p.getNodesBetween(n);for(let t=0;t<x.length;t++){let I=x[t];if(!D(I)&&!m.$isTabNode(I)&&!m.$isLineBreakNode(I))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=D(p)||m.$isTabNode(p)||m.$isLineBreakNode(p)?
35
- r?C(p):M(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 Z(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(!D(g)&&!m.$isTabNode(g)||!D(h)&&!m.$isTabNode(h))return!1;if(a)if(g=O(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 P(h).select();b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=E;
37
- exports.$createCodeNode=B;exports.$isCodeHighlightNode=D;exports.$isCodeNode=F;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=G;exports.CODE_LANGUAGE_MAP=H;exports.CodeHighlightNode=K;exports.CodeNode=w;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.PrismTokenizer=N;exports.getCodeLanguages=()=>Object.keys(window.Prism.languages).filter(a=>"function"!==typeof window.Prism.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=P;
38
- exports.getFirstCodeNodeOfLine=C;exports.getLanguageFriendlyName=function(a){a=J(a);return G[a]||a};exports.getLastCodeNodeOfLine=M;exports.getStartOfCodeInLine=O;exports.normalizeCodeLang=J;
39
- exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([w,K]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=N);return d.mergeRegister(a.registerMutationListener(w,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(w,c=>R(c,a,b)),a.registerNodeTransform(m.TextNode,c=>Q(c,a,b)),a.registerNodeTransform(K,c=>Q(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(!V(c))return!1;m.$insertNodes([m.$createTabNode()]);
41
- return!0},m.COMMAND_PRIORITY_LOW),a.registerCommand(m.INDENT_CONTENT_COMMAND,()=>X(m.INDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.OUTDENT_CONTENT_COMMAND,()=>X(m.OUTDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_UP_COMMAND,c=>Y(m.KEY_ARROW_UP_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_DOWN_COMMAND,c=>Y(m.KEY_ARROW_DOWN_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.MOVE_TO_END,c=>Z(m.MOVE_TO_END,c),m.COMMAND_PRIORITY_LOW),
42
- a.registerCommand(m.MOVE_TO_START,c=>Z(m.MOVE_TO_START,c),m.COMMAND_PRIORITY_LOW))}
8
+
9
+ 'use strict';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-powershell");require("prismjs/components/prism-python");require("prismjs/components/prism-rust");
10
+ require("prismjs/components/prism-swift");require("prismjs/components/prism-typescript");require("prismjs/components/prism-java");require("prismjs/components/prism-cpp");var d=require("@lexical/utils"),m=require("lexical");"use strict";var q;
11
+ function v(a){let b=new URLSearchParams;b.append("code",a);for(let c=1;c<arguments.length;c++)b.append("v",arguments[c]);throw Error(`Minified Lexical error #${a}; visit https://lexical.dev/docs/error?${b} for the full message or `+"use the non-minified dev environment for full errors and additional helpful warnings.");}q=v&&v.__esModule&&Object.prototype.hasOwnProperty.call(v,"default")?v["default"]:v;let w=a=>null!=a&&window.Prism.languages.hasOwnProperty(a)?a:void 0;
12
+ function y(a,b){for(let c of a.childNodes){if(d.isHTMLElement(c)&&c.tagName===b)return!0;y(c,b)}return!1}
13
+ class z extends m.ElementNode{static getType(){return"code"}static clone(a){return new z(a.__language,a.__key)}constructor(a,b){super(b);this.__language=w(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");
14
+ 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)||y(a,"BR"))?{conversion:A,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:A,priority:0}),table:a=>B(a)?{conversion:ba,priority:3}:null,td:a=>{let b=a.closest("table");
15
+ return a.classList.contains("js-file-line")||b&&B(b)?{conversion:C,priority:3}:null},tr:a=>(a=a.closest("table"))&&B(a)?{conversion:C,priority:3}:null}}static importJSON(a){let b=D(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-2].getTextContent()&&a.isCollapsed()&&
16
+ 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=E(b);for(c=[];;)if(m.$isTabNode(e))c.push(m.$createTabNode()),e=e.getNextSibling();else if(F(e)){for(var h=0,k=e.getTextContent(),l=e.getTextContentSize();h<l&&" "===k[h];)h++;0!==h&&c.push(G(" ".repeat(h)));if(h!==l)break;e=e.getNextSibling()}else break;e=b.splitText(f.offset)[0];h=
17
+ 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)}H(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=w(a)}getLanguage(){return this.getLatest().__language}}
18
+ function D(a){return m.$applyNodeReplacement(new z(a))}function H(a){return a instanceof z}function A(a){let b;d.isHTMLElement(a)&&(b=a.getAttribute("data-highlight-language"));return{node:D(b)}}function aa(a){let b=null!==a.style.fontFamily.match("monospace");var c;if(c=!b){a:{for(a=a.parentElement;null!==a;){if(null!==a.style.fontFamily.match("monospace")){a=!0;break a}a=a.parentElement}a=!1}c=!a}return c?{node:null}:{node:b?D():null}}function ba(){return{node:D()}}
19
+ function C(){return{node:null}}function B(a){return a.classList.contains("js-file-line-container")}let I={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",powershell:"PowerShell",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",typescript:"TypeScript",xml:"XML"},J={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function L(a){return J[a]||a}
20
+ class M extends m.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new M(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(a){let b=super.createDOM(a);a=N(a.theme,this.__highlightType);d.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let e=super.updateDOM(a,b,c);a=N(c.theme,a.__highlightType);c=N(c.theme,this.__highlightType);a!==
21
+ c&&(a&&d.removeClassNamesFromElement(b,a),c&&d.addClassNamesToElement(b,c));return e}static importJSON(a){let b=G(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 D()}}function N(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}
22
+ function G(a,b){return m.$applyNodeReplacement(new M(a,b))}function F(a){return a instanceof M}function E(a){let b=a;for(;F(a)||m.$isTabNode(a);)b=a,a=a.getPreviousSibling();return b}function O(a){let b=a;for(;F(a)||m.$isTabNode(a);)b=a,a=a.getNextSibling();return b}let P={defaultLanguage:"javascript",tokenize(a,b){return window.Prism.tokenize(a,window.Prism.languages[b||""]||window.Prism.languages[this.defaultLanguage])}};
23
+ function Q(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;F(f)||m.$isTabNode(f)||m.$isLineBreakNode(f)||q(167);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];F(f)&&" "!==k&&(e={node:f,offset:g})}if(null!==e)return e;e=null;b<a.getTextContentSize()?F(a)&&(e=a.getTextContent()[b]):(f=a.getNextSibling(),F(f)&&(e=f.getTextContent()[0]));if(null!==
24
+ e&&" "!==e)return c;a:for(e=a,f=a.getTextContent(),a=a.getTextContentSize();;){if(!F(e)||b===a){e=e.getNextSibling();if(null===e||m.$isLineBreakNode(e)){a=null;break a}F(e)&&(b=0,f=e.getTextContent(),a=e.getTextContentSize())}if(F(e)){if(" "!==f[b]){a={node:e,offset:b};break a}b++}}return null!==a?a:c}function R(a){a=O(a);m.$isLineBreakNode(a)&&q(168);return a}function S(a,b,c){let e=a.getParent();H(e)?T(e,b,c):F(a)&&a.replace(m.$createTextNode(a.__text))}let U=new Set;
25
+ function T(a,b,c){let e=a.getKey();U.has(e)||(U.add(e),void 0===a.getLanguage()&&a.setLanguage(c.defaultLanguage),b.update(()=>{ca(e,()=>{var f=m.$getNodeByKey(e);if(!H(f)||!f.isAttached())return!1;var g=f.getTextContent();g=c.tokenize(g,f.getLanguage()||c.defaultLanguage);g=V(g);var h=f.getChildren();for(f=0;f<h.length&&W(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++,!W(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}=
26
+ {from:h,nodesForReplacement:g,to:k};return p!==x||u.length?(a.splice(p,x-p,u),!0):!1})},{onUpdate:()=>{U.delete(e)},skipTransforms:!0}))}
27
+ function V(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(G(h,b))}}else({content:a}=e),"string"===typeof a?c.push(...V([a],e.type)):Array.isArray(a)&&c.push(...V(a,e.type));return c}
28
+ function ca(a,b){a=m.$getNodeByKey(a);if(H(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()}}
29
+ function W(a,b){return F(a)&&F(b)&&a.__text===b.__text&&a.__highlightType===b.__highlightType||m.$isTabNode(a)&&m.$isTabNode(b)||m.$isLineBreakNode(a)&&m.$isLineBreakNode(b)}function X(a){if(!m.$isRangeSelection(a))return!1;var b=a.anchor.getNode();a=a.focus.getNode();if(b.is(a)&&H(b))return!0;b=b.getParent();return H(b)&&b.is(a.getParent())}
30
+ function Y(a){a=a.getNodes();let b=[[]];if(1===a.length&&H(a[0]))return b;let c=b[0];for(let e=0;e<a.length;e++){let f=a[e];F(f)||m.$isTabNode(f)||m.$isLineBreakNode(f)||q(169);m.$isLineBreakNode(f)?0!==e&&0<c.length&&(c=[],b.push(c)):c.push(f)}return b}
31
+ function da(a){var b=m.$getSelection();if(!m.$isRangeSelection(b)||!X(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<Y(b).length)return c;var e=b.getNodes()[0];H(e)||F(e)||m.$isTabNode(e)||m.$isLineBreakNode(e)||q(170);if(H(e))return c;let f=E(e);e=O(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===f.getKey()&&0===b.offset&&g.key===e.getKey()&&g.offset===e.getTextContentSize()?
32
+ c:a}
33
+ function Z(a){var b=m.$getSelection();if(!m.$isRangeSelection(b)||!X(b))return!1;var c=Y(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=E(f)),null!==f&&(a===m.INDENT_CONTENT_COMMAND?f.insertBefore(m.$createTabNode()):m.$isTabNode(f)&&f.remove()))}return!0}c=b.getNodes()[0];H(c)||F(c)||m.$isTabNode(c)||m.$isLineBreakNode(c)||q(171);if(H(c))return a===m.INDENT_CONTENT_COMMAND&&b.insertNodes([m.$createTabNode()]),!0;c=E(c);null===c&&q(172);a===m.INDENT_CONTENT_COMMAND?m.$isLineBreakNode(c)?
34
+ c.insertAfter(m.$createTabNode()):c.insertBefore(m.$createTabNode()):m.$isTabNode(c)&&c.remove();return!0}
35
+ function ea(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(!X(c)||!F(k)&&!m.$isTabNode(k)||!F(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()&&
36
+ null===a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}let n;if(k.isBefore(l)){var p=E(k);n=O(l)}else p=E(l),n=O(k);if(null==p||null==n)return!1;let x=p.getNodesBetween(n);for(let t=0;t<x.length;t++){let K=x[t];if(!F(K)&&!m.$isTabNode(K)&&!m.$isLineBreakNode(K))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=F(p)||m.$isTabNode(p)||
37
+ m.$isLineBreakNode(p)?r?E(p):O(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}
38
+ function fa(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(!F(g)&&!m.$isTabNode(g)||!F(h)&&!m.$isTabNode(h))return!1;if(a)if(g=Q(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 R(h).select();b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=G;
39
+ exports.$createCodeNode=D;exports.$isCodeHighlightNode=F;exports.$isCodeNode=H;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=I;exports.CODE_LANGUAGE_MAP=J;exports.CodeHighlightNode=M;exports.CodeNode=z;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.PrismTokenizer=P;exports.getCodeLanguages=()=>Object.keys(window.Prism.languages).filter(a=>"function"!==typeof window.Prism.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=R;
40
+ exports.getFirstCodeNodeOfLine=E;exports.getLanguageFriendlyName=function(a){a=L(a);return I[a]||a};exports.getLastCodeNodeOfLine=O;exports.getStartOfCodeInLine=Q;exports.normalizeCodeLang=L;
41
+ exports.registerCodeHighlighting=function(a,b){if(!a.hasNodes([z,M]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");null==b&&(b=P);return d.mergeRegister(a.registerMutationListener(z,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=
42
+ 0;n<k;n++)m.$isLineBreakNode(f[n])&&(l+="\n"+ ++r);e.setAttribute("data-gutter",l)}}})}),a.registerNodeTransform(z,c=>T(c,a,b)),a.registerNodeTransform(m.TextNode,c=>S(c,a,b)),a.registerNodeTransform(M,c=>S(c,a,b)),a.registerCommand(m.KEY_TAB_COMMAND,c=>{let e=da(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(!X(c))return!1;m.$insertNodes([m.$createTabNode()]);
43
+ return!0},m.COMMAND_PRIORITY_LOW),a.registerCommand(m.INDENT_CONTENT_COMMAND,()=>Z(m.INDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.OUTDENT_CONTENT_COMMAND,()=>Z(m.OUTDENT_CONTENT_COMMAND),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_UP_COMMAND,c=>ea(m.KEY_ARROW_UP_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.KEY_ARROW_DOWN_COMMAND,c=>ea(m.KEY_ARROW_DOWN_COMMAND,c),m.COMMAND_PRIORITY_LOW),a.registerCommand(m.MOVE_TO_END,c=>fa(m.MOVE_TO_END,c),m.COMMAND_PRIORITY_LOW),
44
+ a.registerCommand(m.MOVE_TO_START,c=>fa(m.MOVE_TO_START,c),m.COMMAND_PRIORITY_LOW))}
@@ -3,5 +3,7 @@
3
3
  *
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
  */
7
- import"prismjs";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-javascript.js";import"prismjs/components/prism-markup.js";import"prismjs/components/prism-markdown.js";import"prismjs/components/prism-c.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-objectivec.js";import"prismjs/components/prism-sql.js";import"prismjs/components/prism-python.js";import"prismjs/components/prism-rust.js";import"prismjs/components/prism-swift.js";import"prismjs/components/prism-typescript.js";import"prismjs/components/prism-java.js";import"prismjs/components/prism-cpp.js";import{isHTMLElement as e,addClassNamesToElement 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 g,TextNode as a,$isLineBreakNode as f,$createTextNode as p,$getNodeByKey as d,$getSelection as h,$isRangeSelection as m,INDENT_CONTENT_COMMAND as x,OUTDENT_CONTENT_COMMAND as N,INSERT_TAB_COMMAND as y,KEY_ARROW_UP_COMMAND as C,MOVE_TO_START as v,KEY_TAB_COMMAND as T,COMMAND_PRIORITY_LOW as _,$insertNodes as b,KEY_ARROW_DOWN_COMMAND as j,MOVE_TO_END as S}from"lexical";const w=e=>null!=e&&window.Prism.languages.hasOwnProperty(e)?e:void 0;function k(t,n){for(const r of t.childNodes){if(e(r)&&r.tagName===n)return!0;k(r,n)}return!1}const P="data-highlight-language";class L extends o{static getType(){return"code"}static clone(e){return new L(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)||k(e,"BR"))?{conversion:A,priority:1}:null,div:e=>({conversion:D,priority:1}),pre:e=>({conversion:A,priority:0}),table:e=>F(e)?{conversion:M,priority:3}:null,td:e=>{const t=e,n=t.closest("table");return t.classList.contains("js-file-line")?{conversion:z,priority:3}:n&&F(n)?{conversion:B,priority:3}:null},tr:e=>{const t=e.closest("table");return t&&F(t)?{conversion:B,priority:3}:null}}}static importJSON(e){const t=E(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,a=(o.isBefore(i)?o:i).getNode();if(l(a)){let e=Y(a);const t=[];for(;;)if(c(e))t.push(u()),e=e.getNextSibling();else{if(!V(e))break;{let n=0;const r=e.getTextContent(),o=e.getTextContentSize();for(;n<o&&" "===r[n];)n++;if(0!==n&&t.push(G(" ".repeat(n))),n!==o)break;e=e.getNextSibling()}}const n=a.splitText(o.offset)[0],r=0===o.offset?0:1,i=n.getIndexWithinParent()+r,s=a.getParentOrThrow(),l=[g(),...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(O(a)){const{offset:t}=e.anchor;a.splice(t,0,[g()]),a.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=w(e)}getLanguage(){return this.getLatest().__language}}function E(e){return i(new L(e))}function O(e){return e instanceof L}function A(t){let n;return e(t)&&(n=t.getAttribute(P)),{node:E(n)}}function D(e){const t=e,n=H(t);return n||function(e){let t=e.parentElement;for(;null!==t;){if(H(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?E():null}:{node:null}}function M(){return{node:E()}}function B(){return{node:null}}function z(e){const t=e;return{after:e=>(t.parentNode&&t.parentNode.nextSibling&&e.push(g()),e),node:null}}function H(e){return null!==e.style.fontFamily.match("monospace")}function F(e){return e.classList.contains("js-file-line-container")}const J="javascript",K={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"},R={cpp:"cpp",java:"java",javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain",ts:"typescript"};function I(e){return R[e]||e}function q(e){const t=I(e);return K[t]||t}const U=()=>J,W=()=>Object.keys(window.Prism.languages).filter((e=>"function"!=typeof window.Prism.languages[e])).sort();class Q extends a{constructor(e,t,n){super(e,n),this.__highlightType=t}static getType(){return"code-highlight"}static clone(e){return new Q(e.__text,e.__highlightType||void 0,e.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(e){const n=super.createDOM(e),r=X(e.theme,this.__highlightType);return t(n,r),n}updateDOM(e,r,o){const i=super.updateDOM(e,r,o),s=X(o.theme,e.__highlightType),l=X(o.theme,this.__highlightType);return s!==l&&(s&&n(r,s),l&&t(r,l)),i}static importJSON(e){const t=G(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 E()}}function X(e,t){return t&&e&&e.codeHighlight&&e.codeHighlight[t]}function G(e,t){return i(new Q(e,t))}function V(e){return e instanceof Q}function Y(e){let t=e,n=e;for(;V(n)||c(n);)t=n,n=n.getPreviousSibling();return t}function Z(e){let t=e,n=e;for(;V(n)||c(n);)t=n,n=n.getNextSibling();return t}const $={defaultLanguage:J,tokenize(e,t){return window.Prism.tokenize(e,window.Prism.languages[t||""]||window.Prism.languages[this.defaultLanguage])}};function ee(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(!(V(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];V(o)&&" "!==e&&(r={node:o,offset:i})}if(null!==r)return r;let l=null;if(t<e.getTextContentSize())V(e)&&(l=e.getTextContent()[t]);else{const t=e.getNextSibling();V(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(!V(n)||r===i){if(n=n.getNextSibling(),null===n||f(n))return null;V(n)&&(r=0,o=n.getTextContent(),i=n.getTextContentSize())}if(V(n)){if(" "!==o[r])return{node:n,offset:r};r++}}}(e,t);return null!==r?r:n}}function te(e){const t=Z(e);if(f(t))throw Error("Unexpected lineBreakNode in getEndOfCodeInLine");return t}function ne(e,t,n){const r=e.getParent();O(r)?ie(r,t,n):V(e)&&e.replace(p(e.__text))}function re(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 oe=new Set;function ie(e,t,n){const r=e.getKey();oe.has(r)||(oe.add(r),void 0===e.getLanguage()&&e.setLanguage(n.defaultLanguage),t.update((()=>{!function(e,t){const n=d(e);if(!O(n)||!n.isAttached())return;const r=h();if(!m(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=d(r);if(!O(t)||!t.isAttached())return!1;const o=t.getTextContent(),i=se(n.tokenize(o,t.getLanguage()||n.defaultLanguage)),s=function(e,t){let n=0;for(;n<e.length&&le(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++,!le(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:()=>{oe.delete(r)},skipTransforms:!0}))}function se(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(u()):o.length>0&&n.push(G(o,t))}}else{const{content:e}=r;"string"==typeof e?n.push(...se([e],r.type)):Array.isArray(e)&&n.push(...se(e,r.type))}return n}function le(e,t){return V(e)&&V(t)&&e.__text===t.__text&&e.__highlightType===t.__highlightType||c(e)&&c(t)||f(e)&&f(t)}function ce(e){if(!m(e))return!1;const t=e.anchor.getNode(),n=e.focus.getNode();if(t.is(n)&&O(t))return!0;const r=t.getParent();return O(r)&&r.is(n.getParent())}function ue(e){const t=e.getNodes(),n=[[]];if(1===t.length&&O(t[0]))return n;let r=n[0];for(let e=0;e<t.length;e++){const o=t[e];if(!(V(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 ge(e){const t=h();if(!m(t)||!ce(t))return!1;const n=ue(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=Y(n)),null!==n&&(e===x?n.insertBefore(u()):c(n)&&n.remove())}}return!0}const o=t.getNodes()[0];if(!(O(o)||V(o)||c(o)||f(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or CodeTabNode");if(O(o))return e===x&&t.insertNodes([u()]),!0;const i=Y(o);if(null===i)throw Error("Expected getFirstCodeNodeOfLine to return a valid Code Node");return e===x?f(i)?i.insertAfter(u()):i.insertBefore(u()):c(i)&&i.remove(),!0}function ae(e,t){const n=h();if(!m(n))return!1;const{anchor:r,focus:o}=n,i=r.offset,s=o.offset,l=r.getNode(),u=o.getNode(),g=e===C;if(!ce(n)||!V(l)&&!c(l)||!V(u)&&!c(u))return!1;if(!t.altKey){if(n.isCollapsed()){const e=l.getParentOrThrow();if(g&&0===i&&null===l.getPreviousSibling()){if(null===e.getPreviousSibling())return e.selectPrevious(),t.preventDefault(),!0}else if(!g&&i===l.getTextContentSize()&&null===l.getNextSibling()){if(null===e.getNextSibling())return e.selectNext(),t.preventDefault(),!0}}return!1}let a,p;if(l.isBefore(u)?(a=Y(l),p=Z(u)):(a=Y(u),p=Z(l)),null==a||null==p)return!1;const d=a.getNodesBetween(p);for(let e=0;e<d.length;e++){const t=d[e];if(!V(t)&&!c(t)&&!f(t))return!1}t.preventDefault(),t.stopPropagation();const x=g?a.getPreviousSibling():p.getNextSibling();if(!f(x))return!0;const N=g?x.getPreviousSibling():x.getNextSibling();if(null==N)return!0;const y=V(N)||c(N)||f(N)?g?Y(N):Z(N):null;let v=null!=y?y:N;return x.remove(),d.forEach((e=>e.remove())),e===C?(d.forEach((e=>v.insertBefore(e))),v.insertBefore(x)):(v.insertAfter(x),v=x,d.forEach((e=>{v.insertAfter(e),v=e}))),n.setTextNodeRange(l,i,u,s),!0}function fe(e,t){const n=h();if(!m(n))return!1;const{anchor:r,focus:o}=n,i=r.getNode(),s=o.getNode(),l=e===v;if(!V(i)&&!c(i)||!V(s)&&!c(s))return!1;if(l){const e=ee(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{te(s).select()}return t.preventDefault(),t.stopPropagation(),!0}function pe(e,t){if(!e.hasNodes([L,Q]))throw new Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return null==t&&(t=$),r(e.registerMutationListener(L,(t=>{e.update((()=>{for(const[n,r]of t)if("destroyed"!==r){const t=d(n);null!==t&&re(t,e)}}))})),e.registerNodeTransform(L,(n=>ie(n,e,t))),e.registerNodeTransform(a,(n=>ne(n,e,t))),e.registerNodeTransform(Q,(n=>ne(n,e,t))),e.registerCommand(T,(t=>{const n=function(e){const t=h();if(!m(t)||!ce(t))return null;const n=e?N:x,r=e?N:y;if(ue(t).length>1)return n;const o=t.getNodes()[0];if(!(O(o)||V(o)||c(o)||f(o)))throw Error("Expected selection firstNode to be CodeHighlightNode or TabNode");if(O(o))return n;const i=Y(o),s=Z(o),l=t.anchor,u=t.focus;let g,a;return u.isBefore(l)?(g=u,a=l):(g=l,a=u),null!==i&&null!==s&&g.key===i.getKey()&&0===g.offset&&a.key===s.getKey()&&a.offset===s.getTextContentSize()?n:r}(t.shiftKey);return null!==n&&(t.preventDefault(),e.dispatchCommand(n,void 0),!0)}),_),e.registerCommand(y,(()=>!!ce(h())&&(b([u()]),!0)),_),e.registerCommand(x,(e=>ge(x)),_),e.registerCommand(N,(e=>ge(N)),_),e.registerCommand(C,(e=>ae(C,e)),_),e.registerCommand(j,(e=>ae(j,e)),_),e.registerCommand(S,(e=>fe(S,e)),_),e.registerCommand(v,(e=>fe(v,e)),_))}export{G as $createCodeHighlightNode,E as $createCodeNode,V as $isCodeHighlightNode,O as $isCodeNode,K as CODE_LANGUAGE_FRIENDLY_NAME_MAP,R as CODE_LANGUAGE_MAP,Q as CodeHighlightNode,L as CodeNode,J as DEFAULT_CODE_LANGUAGE,$ as PrismTokenizer,W as getCodeLanguages,U as getDefaultCodeLanguage,te as getEndOfCodeInLine,Y as getFirstCodeNodeOfLine,q as getLanguageFriendlyName,Z as getLastCodeNodeOfLine,ee as getStartOfCodeInLine,I as normalizeCodeLang,pe as registerCodeHighlighting};
8
+
9
+ import"prismjs";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-javascript.js";import"prismjs/components/prism-markup.js";import"prismjs/components/prism-markdown.js";import"prismjs/components/prism-c.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-objectivec.js";import"prismjs/components/prism-sql.js";import"prismjs/components/prism-powershell.js";import"prismjs/components/prism-python.js";import"prismjs/components/prism-rust.js";import"prismjs/components/prism-swift.js";import"prismjs/components/prism-typescript.js";import"prismjs/components/prism-java.js";import"prismjs/components/prism-cpp.js";import{isHTMLElement as e,addClassNamesToElement as t,removeClassNamesFromElement as n,mergeRegister as r}from"@lexical/utils";import{ElementNode as o,$createParagraphNode as i,$isTextNode as s,$isTabNode as l,$createTabNode as u,$createLineBreakNode as c,$applyNodeReplacement as a,TextNode as g,$isLineBreakNode as f,$createTextNode as p,$getNodeByKey as h,$getSelection as d,$isRangeSelection as m,INDENT_CONTENT_COMMAND as y,OUTDENT_CONTENT_COMMAND as x,INSERT_TAB_COMMAND as v,KEY_ARROW_UP_COMMAND as _,MOVE_TO_START as C,KEY_TAB_COMMAND as T,COMMAND_PRIORITY_LOW as j,$insertNodes as N,KEY_ARROW_DOWN_COMMAND as S,MOVE_TO_END as b}from"lexical";"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function w(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var P=w((function(e){const t=new URLSearchParams;t.append("code",e);for(let e=1;e<arguments.length;e++)t.append("v",arguments[e]);throw Error(`Minified Lexical error #${e}; visit https://lexical.dev/docs/error?${t} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}));const k=e=>null!=e&&window.Prism.languages.hasOwnProperty(e)?e:void 0;function L(t,n){for(const r of t.childNodes){if(e(r)&&r.tagName===n)return!0;L(r,n)}return!1}const O="data-highlight-language";class A extends o{static getType(){return"code"}static clone(e){return new A(e.__language,e.__key)}constructor(e,t){super(t),this.__language=k(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(O,r),n}updateDOM(e,t,n){const r=this.__language,o=e.__language;return r?r!==o&&t.setAttribute(O,r):o&&t.removeAttribute(O),!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(O,r),{element:n}}static importDOM(){return{code:e=>null!=e.textContent&&(/\r?\n/.test(e.textContent)||L(e,"BR"))?{conversion:z,priority:1}:null,div:e=>({conversion:E,priority:1}),pre:e=>({conversion:z,priority:0}),table:e=>R(e)?{conversion:B,priority:3}:null,td:e=>{const t=e,n=t.closest("table");return t.classList.contains("js-file-line")||n&&R(n)?{conversion:H,priority:3}:null},tr:e=>{const t=e.closest("table");return t&&R(t)?{conversion:H,priority:3}:null}}}static importJSON(e){const t=M(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=i();return this.insertAfter(e,t),e}const{anchor:o,focus:a}=e,g=(o.isBefore(a)?o:a).getNode();if(s(g)){let e=Y(g);const t=[];for(;;)if(l(e))t.push(u()),e=e.getNextSibling();else{if(!V(e))break;{let n=0;const r=e.getTextContent(),o=e.getTextContentSize();for(;n<o&&" "===r[n];)n++;if(0!==n&&t.push(G(" ".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(),a=[c(),...t];s.splice(i,0,a);const f=t[t.length-1];f?f.select():0===o.offset?n.selectPrevious():n.getNextSibling().selectNext(0,0)}if(D(g)){const{offset:t}=e.anchor;g.splice(t,0,[c()]),g.select(t+1,t+1)}return null}canIndent(){return!1}collapseAtStart(){const e=i();return this.getChildren().forEach((t=>e.append(t))),this.replace(e),!0}setLanguage(e){this.getWritable().__language=k(e)}getLanguage(){return this.getLatest().__language}}function M(e){return a(new A(e))}function D(e){return e instanceof A}function z(t){let n;return e(t)&&(n=t.getAttribute(O)),{node:M(n)}}function E(e){const t=e,n=J(t);return n||function(e){let t=e.parentElement;for(;null!==t;){if(J(t))return!0;t=t.parentElement}return!1}(t)?{node:n?M():null}:{node:null}}function B(){return{node:M()}}function H(){return{node:null}}function J(e){return null!==e.style.fontFamily.match("monospace")}function R(e){return e.classList.contains("js-file-line-container")}const F="javascript",K={c:"C",clike:"C-like",cpp:"C++",css:"CSS",html:"HTML",java:"Java",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",powershell:"PowerShell",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 K[t]||t}const W=()=>F,$=()=>Object.keys(window.Prism.languages).filter((e=>"function"!=typeof window.Prism.languages[e])).sort();class Q extends g{constructor(e,t,n){super(e,n),this.__highlightType=t}static getType(){return"code-highlight"}static clone(e){return new Q(e.__text,e.__highlightType||void 0,e.__key)}getHighlightType(){return this.getLatest().__highlightType}canHaveFormat(){return!1}createDOM(e){const n=super.createDOM(e),r=X(e.theme,this.__highlightType);return t(n,r),n}updateDOM(e,r,o){const i=super.updateDOM(e,r,o),s=X(o.theme,e.__highlightType),l=X(o.theme,this.__highlightType);return s!==l&&(s&&n(r,s),l&&t(r,l)),i}static importJSON(e){const t=G(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 M()}}function X(e,t){return t&&e&&e.codeHighlight&&e.codeHighlight[t]}function G(e,t){return a(new Q(e,t))}function V(e){return e instanceof Q}function Y(e){let t=e,n=e;for(;V(n)||l(n);)t=n,n=n.getPreviousSibling();return t}function Z(e){let t=e,n=e;for(;V(n)||l(n);)t=n,n=n.getNextSibling();return t}const ee={defaultLanguage:F,tokenize(e,t){return window.Prism.tokenize(e,window.Prism.languages[t||""]||window.Prism.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(V(o)||l(o)||f(o)||P(167),f(o)){n={node:o,offset:1};break}i=Math.max(0,o.getTextContentSize()-1),s=o.getTextContent()}else i--;const e=s[i];V(o)&&" "!==e&&(r={node:o,offset:i})}if(null!==r)return r;let u=null;if(t<e.getTextContentSize())V(e)&&(u=e.getTextContent()[t]);else{const t=e.getNextSibling();V(t)&&(u=t.getTextContent()[0])}if(null!==u&&" "!==u)return n;{const r=function(e,t){let n=e,r=t,o=e.getTextContent(),i=e.getTextContentSize();for(;;){if(!V(n)||r===i){if(n=n.getNextSibling(),null===n||f(n))return null;V(n)&&(r=0,o=n.getTextContent(),i=n.getTextContentSize())}if(V(n)){if(" "!==o[r])return{node:n,offset:r};r++}}}(e,t);return null!==r?r:n}}function ne(e){const t=Z(e);return f(t)&&P(168),t}function re(e,t,n){const r=e.getParent();D(r)?se(r,t,n):V(e)&&e.replace(p(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++)f(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(!D(n)||!n.isAttached())return;const r=d();if(!m(r))return void t();const o=r.anchor,i=o.offset,l="element"===o.type&&f(n.getChildAtIndex(o.offset-1));let u=0;if(!l){const e=o.getNode();u=i+e.getPreviousSiblings().reduce(((e,t)=>e+t.getTextContentSize()),0)}if(!t())return;if(l)return void o.getNode().select(i,i);n.getChildren().some((e=>{const t=s(e);if(t||f(e)){const n=e.getTextContentSize();if(t&&n>=u)return e.select(u,u),!0;u-=n}return!1}))}(r,(()=>{const t=h(r);if(!D(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&&ue(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++,!ue(e[r-s],t[o-s])){s--;break}const l=n,u=r-s,c=t.slice(n,o-s);return{from:l,nodesForReplacement:c,to:u}}(t.getChildren(),i),{from:l,to:u,nodesForReplacement:c}=s;return!(l===u&&!c.length)&&(e.splice(l,u-l,c),!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(c()):"\t"===o?n.push(u()):o.length>0&&n.push(G(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 ue(e,t){return V(e)&&V(t)&&e.__text===t.__text&&e.__highlightType===t.__highlightType||l(e)&&l(t)||f(e)&&f(t)}function ce(e){if(!m(e))return!1;const t=e.anchor.getNode(),n=e.focus.getNode();if(t.is(n)&&D(t))return!0;const r=t.getParent();return D(r)&&r.is(n.getParent())}function ae(e){const t=e.getNodes(),n=[[]];if(1===t.length&&D(t[0]))return n;let r=n[0];for(let e=0;e<t.length;e++){const o=t[e];V(o)||l(o)||f(o)||P(169),f(o)?0!==e&&r.length>0&&(r=[],n.push(r)):r.push(o)}return n}function ge(e){const t=d();if(!m(t)||!ce(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=Y(n)),null!==n&&(e===y?n.insertBefore(u()):l(n)&&n.remove())}}return!0}const o=t.getNodes()[0];if(D(o)||V(o)||l(o)||f(o)||P(171),D(o))return e===y&&t.insertNodes([u()]),!0;const i=Y(o);return null===i&&P(172),e===y?f(i)?i.insertAfter(u()):i.insertBefore(u()):l(i)&&i.remove(),!0}function fe(e,t){const n=d();if(!m(n))return!1;const{anchor:r,focus:o}=n,i=r.offset,s=o.offset,u=r.getNode(),c=o.getNode(),a=e===_;if(!ce(n)||!V(u)&&!l(u)||!V(c)&&!l(c))return!1;if(!t.altKey){if(n.isCollapsed()){const e=u.getParentOrThrow();if(a&&0===i&&null===u.getPreviousSibling()){if(null===e.getPreviousSibling())return e.selectPrevious(),t.preventDefault(),!0}else if(!a&&i===u.getTextContentSize()&&null===u.getNextSibling()){if(null===e.getNextSibling())return e.selectNext(),t.preventDefault(),!0}}return!1}let g,p;if(u.isBefore(c)?(g=Y(u),p=Z(c)):(g=Y(c),p=Z(u)),null==g||null==p)return!1;const h=g.getNodesBetween(p);for(let e=0;e<h.length;e++){const t=h[e];if(!V(t)&&!l(t)&&!f(t))return!1}t.preventDefault(),t.stopPropagation();const y=a?g.getPreviousSibling():p.getNextSibling();if(!f(y))return!0;const x=a?y.getPreviousSibling():y.getNextSibling();if(null==x)return!0;const v=V(x)||l(x)||f(x)?a?Y(x):Z(x):null;let C=null!=v?v:x;return y.remove(),h.forEach((e=>e.remove())),e===_?(h.forEach((e=>C.insertBefore(e))),C.insertBefore(y)):(C.insertAfter(y),C=y,h.forEach((e=>{C.insertAfter(e),C=e}))),n.setTextNodeRange(u,i,c,s),!0}function pe(e,t){const n=d();if(!m(n))return!1;const{anchor:r,focus:o}=n,i=r.getNode(),s=o.getNode(),u=e===C;if(!V(i)&&!l(i)||!V(s)&&!l(s))return!1;if(u){const e=te(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{ne(s).select()}return t.preventDefault(),t.stopPropagation(),!0}function he(e,t){if(!e.hasNodes([A,Q]))throw new Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return null==t&&(t=ee),r(e.registerMutationListener(A,(t=>{e.update((()=>{for(const[n,r]of t)if("destroyed"!==r){const t=h(n);null!==t&&oe(t,e)}}))})),e.registerNodeTransform(A,(n=>se(n,e,t))),e.registerNodeTransform(g,(n=>re(n,e,t))),e.registerNodeTransform(Q,(n=>re(n,e,t))),e.registerCommand(T,(t=>{const n=function(e){const t=d();if(!m(t)||!ce(t))return null;const n=e?x:y,r=e?x:v;if(ae(t).length>1)return n;const o=t.getNodes()[0];if(D(o)||V(o)||l(o)||f(o)||P(170),D(o))return n;const i=Y(o),s=Z(o),u=t.anchor,c=t.focus;let a,g;return c.isBefore(u)?(a=c,g=u):(a=u,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)}),j),e.registerCommand(v,(()=>!!ce(d())&&(N([u()]),!0)),j),e.registerCommand(y,(e=>ge(y)),j),e.registerCommand(x,(e=>ge(x)),j),e.registerCommand(_,(e=>fe(_,e)),j),e.registerCommand(S,(e=>fe(S,e)),j),e.registerCommand(b,(e=>pe(b,e)),j),e.registerCommand(C,(e=>pe(C,e)),j))}export{G as $createCodeHighlightNode,M as $createCodeNode,V as $isCodeHighlightNode,D as $isCodeNode,K as CODE_LANGUAGE_FRIENDLY_NAME_MAP,I as CODE_LANGUAGE_MAP,Q as CodeHighlightNode,A as CodeNode,F as DEFAULT_CODE_LANGUAGE,ee as PrismTokenizer,$ as getCodeLanguages,W as getDefaultCodeLanguage,ne as getEndOfCodeInLine,Y as getFirstCodeNodeOfLine,U as getLanguageFriendlyName,Z as getLastCodeNodeOfLine,te as getStartOfCodeInLine,q as normalizeCodeLang,he as registerCodeHighlighting};
package/package.json CHANGED
@@ -8,12 +8,12 @@
8
8
  "code"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.14.5",
11
+ "version": "0.15.0",
12
12
  "main": "LexicalCode.js",
13
13
  "types": "index.d.ts",
14
14
  "dependencies": {
15
- "@lexical/utils": "0.14.5",
16
- "lexical": "0.14.5",
15
+ "@lexical/utils": "0.15.0",
16
+ "lexical": "0.15.0",
17
17
  "prismjs": "^1.27.0"
18
18
  },
19
19
  "repository": {