@lexical/code 0.2.9 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LexicalCode.d.ts CHANGED
@@ -14,9 +14,12 @@ import type {
14
14
  RangeSelection,
15
15
  EditorThemeClasses,
16
16
  LexicalEditor,
17
+ SerializedElementNode,
18
+ SerializedTextNode,
17
19
  } from 'lexical';
18
20
 
19
21
  import {ElementNode, TextNode} from 'lexical';
22
+ import {Spread} from 'libdefs/globals';
20
23
 
21
24
  declare class CodeNode extends ElementNode {
22
25
  static getType(): string;
@@ -31,6 +34,8 @@ declare class CodeNode extends ElementNode {
31
34
  collapseAtStart(): true;
32
35
  setLanguage(language: string): void;
33
36
  getLanguage(): string | void;
37
+ importJSON(serializedNode: SerializedCodeNode): CodeNode;
38
+ exportJSON(): SerializedElementNode;
34
39
  }
35
40
  declare function $createCodeNode(language?: string): CodeNode;
36
41
  declare function $isCodeNode(
@@ -74,3 +79,21 @@ declare function $isCodeHighlightNode(
74
79
  ): node is CodeHighlightNode;
75
80
 
76
81
  declare function registerCodeHighlighting(editor: LexicalEditor): () => void;
82
+
83
+ type SerializedCodeNode = Spread<
84
+ {
85
+ language: string | null | undefined;
86
+ type: 'code';
87
+ version: 1;
88
+ },
89
+ SerializedElementNode
90
+ >;
91
+
92
+ type SerializedCodeHighlightNode = Spread<
93
+ {
94
+ highlightType: string | null | undefined;
95
+ type: 'code-highlight';
96
+ version: 1;
97
+ },
98
+ SerializedTextNode
99
+ >;
@@ -53,6 +53,11 @@ class CodeHighlightNode extends lexical.TextNode {
53
53
  return new CodeHighlightNode(node.__text, node.__highlightType || undefined, node.__key);
54
54
  }
55
55
 
56
+ getHighlightType() {
57
+ const self = this.getLatest();
58
+ return self.__highlightType;
59
+ }
60
+
56
61
  createDOM(config) {
57
62
  const element = super.createDOM(config);
58
63
  const className = getHighlightThemeClass(config.theme, this.__highlightType);
@@ -76,6 +81,22 @@ class CodeHighlightNode extends lexical.TextNode {
76
81
  }
77
82
 
78
83
  return update;
84
+ }
85
+
86
+ static importJSON(serializedNode) {
87
+ const node = $createCodeHighlightNode(serializedNode.highlightType);
88
+ node.setFormat(serializedNode.format);
89
+ node.setDetail(serializedNode.detail);
90
+ node.setMode(serializedNode.mode);
91
+ node.setStyle(serializedNode.style);
92
+ return node;
93
+ }
94
+
95
+ exportJSON() {
96
+ return { ...super.exportJSON(),
97
+ highlightType: this.getHighlightType(),
98
+ type: 'code-highlight'
99
+ };
79
100
  } // Prevent formatting (bold, underline, etc)
80
101
 
81
102
 
@@ -199,6 +220,21 @@ class CodeNode extends lexical.ElementNode {
199
220
  return null;
200
221
  }
201
222
  };
223
+ }
224
+
225
+ static importJSON(serializedNode) {
226
+ const node = $createCodeNode(serializedNode.language);
227
+ node.setFormat(serializedNode.format);
228
+ node.setIndent(serializedNode.indent);
229
+ node.setDirection(serializedNode.direction);
230
+ return node;
231
+ }
232
+
233
+ exportJSON() {
234
+ return { ...super.exportJSON(),
235
+ language: this.getLanguage(),
236
+ type: 'code'
237
+ };
202
238
  } // Mutation
203
239
 
204
240
 
@@ -318,6 +354,142 @@ function getLastCodeHighlightNodeOfLine(anchor) {
318
354
  return currentNode;
319
355
  }
320
356
 
357
+ function isSpaceOrTabChar(char) {
358
+ return char === ' ' || char === '\t';
359
+ }
360
+
361
+ function findFirstNotSpaceOrTabCharAtText(text, isForward) {
362
+ const length = text.length;
363
+ let offset = -1;
364
+
365
+ if (isForward) {
366
+ for (let i = 0; i < length; i++) {
367
+ const char = text[i];
368
+
369
+ if (!isSpaceOrTabChar(char)) {
370
+ offset = i;
371
+ break;
372
+ }
373
+ }
374
+ } else {
375
+ for (let i = length - 1; i > -1; i--) {
376
+ const char = text[i];
377
+
378
+ if (!isSpaceOrTabChar(char)) {
379
+ offset = i;
380
+ break;
381
+ }
382
+ }
383
+ }
384
+
385
+ return offset;
386
+ }
387
+
388
+ function getStartOfCodeInLine(anchor) {
389
+ let currentNode = null;
390
+ let currentNodeOffset = -1;
391
+ const previousSiblings = anchor.getPreviousSiblings();
392
+ previousSiblings.push(anchor);
393
+
394
+ while (previousSiblings.length > 0) {
395
+ const node = previousSiblings.pop();
396
+
397
+ if ($isCodeHighlightNode(node)) {
398
+ const text = node.getTextContent();
399
+ const offset = findFirstNotSpaceOrTabCharAtText(text, true);
400
+
401
+ if (offset !== -1) {
402
+ currentNode = node;
403
+ currentNodeOffset = offset;
404
+ }
405
+ }
406
+
407
+ if (lexical.$isLineBreakNode(node)) {
408
+ break;
409
+ }
410
+ }
411
+
412
+ if (currentNode === null) {
413
+ const nextSiblings = anchor.getNextSiblings();
414
+
415
+ while (nextSiblings.length > 0) {
416
+ const node = nextSiblings.shift();
417
+
418
+ if ($isCodeHighlightNode(node)) {
419
+ const text = node.getTextContent();
420
+ const offset = findFirstNotSpaceOrTabCharAtText(text, true);
421
+
422
+ if (offset !== -1) {
423
+ currentNode = node;
424
+ currentNodeOffset = offset;
425
+ break;
426
+ }
427
+ }
428
+
429
+ if (lexical.$isLineBreakNode(node)) {
430
+ break;
431
+ }
432
+ }
433
+ }
434
+
435
+ return {
436
+ node: currentNode,
437
+ offset: currentNodeOffset
438
+ };
439
+ }
440
+ function getEndOfCodeInLine(anchor) {
441
+ let currentNode = null;
442
+ let currentNodeOffset = -1;
443
+ const nextSiblings = anchor.getNextSiblings();
444
+ nextSiblings.unshift(anchor);
445
+
446
+ while (nextSiblings.length > 0) {
447
+ const node = nextSiblings.shift();
448
+
449
+ if ($isCodeHighlightNode(node)) {
450
+ const text = node.getTextContent();
451
+ const offset = findFirstNotSpaceOrTabCharAtText(text, false);
452
+
453
+ if (offset !== -1) {
454
+ currentNode = node;
455
+ currentNodeOffset = offset + 1;
456
+ }
457
+ }
458
+
459
+ if (lexical.$isLineBreakNode(node)) {
460
+ break;
461
+ }
462
+ }
463
+
464
+ if (currentNode === null) {
465
+ const previousSiblings = anchor.getPreviousSiblings();
466
+
467
+ while (previousSiblings.length > 0) {
468
+ const node = previousSiblings.pop();
469
+
470
+ if ($isCodeHighlightNode(node)) {
471
+ const text = node.getTextContent();
472
+ const offset = findFirstNotSpaceOrTabCharAtText(text, false);
473
+
474
+ if (offset !== -1) {
475
+ currentNode = node;
476
+ currentNodeOffset = offset + 1;
477
+ break;
478
+ }
479
+ }
480
+
481
+ if (lexical.$isLineBreakNode(node)) {
482
+ break;
483
+ }
484
+ }
485
+ }
486
+
487
+ return {
488
+ node: currentNode,
489
+ offset: currentNodeOffset
490
+ };
491
+ }
492
+
321
493
  function convertPreElement(domNode) {
322
494
  return {
323
495
  node: $createCodeNode()
@@ -783,6 +955,48 @@ function handleShiftLines(type, event) {
783
955
  return true;
784
956
  }
785
957
 
958
+ function handleMoveTo(type, event) {
959
+ const selection = lexical.$getSelection();
960
+
961
+ if (!lexical.$isRangeSelection(selection)) {
962
+ return false;
963
+ }
964
+
965
+ const {
966
+ anchor,
967
+ focus
968
+ } = selection;
969
+ const anchorNode = anchor.getNode();
970
+ const focusNode = focus.getNode();
971
+ const isMoveToStart = type === lexical.MOVE_TO_START;
972
+
973
+ if (!$isCodeHighlightNode(anchorNode) || !$isCodeHighlightNode(focusNode)) {
974
+ return false;
975
+ }
976
+
977
+ let node;
978
+ let offset;
979
+
980
+ if (isMoveToStart) {
981
+ ({
982
+ node,
983
+ offset
984
+ } = getStartOfCodeInLine(focusNode));
985
+ } else {
986
+ ({
987
+ node,
988
+ offset
989
+ } = getEndOfCodeInLine(focusNode));
990
+ }
991
+
992
+ if (node !== null && offset !== -1) {
993
+ selection.setTextNodeRange(node, offset, node, offset);
994
+ }
995
+
996
+ event.preventDefault();
997
+ event.stopPropagation();
998
+ }
999
+
786
1000
  function registerCodeHighlighting(editor) {
787
1001
  if (!editor.hasNodes([CodeNode, CodeHighlightNode])) {
788
1002
  throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
@@ -800,7 +1014,7 @@ function registerCodeHighlighting(editor) {
800
1014
  }
801
1015
  }
802
1016
  });
803
- }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor)), editor.registerNodeTransform(lexical.TextNode, node => textNodeTransform(node, editor)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor)), 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));
1017
+ }), editor.registerNodeTransform(CodeNode, node => codeNodeTransform(node, editor)), editor.registerNodeTransform(lexical.TextNode, node => textNodeTransform(node, editor)), editor.registerNodeTransform(CodeHighlightNode, node => textNodeTransform(node, editor)), 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));
804
1018
  }
805
1019
 
806
1020
  exports.$createCodeHighlightNode = $createCodeHighlightNode;
@@ -811,6 +1025,8 @@ exports.CodeHighlightNode = CodeHighlightNode;
811
1025
  exports.CodeNode = CodeNode;
812
1026
  exports.getCodeLanguages = getCodeLanguages;
813
1027
  exports.getDefaultCodeLanguage = getDefaultCodeLanguage;
1028
+ exports.getEndOfCodeInLine = getEndOfCodeInLine;
814
1029
  exports.getFirstCodeHighlightNodeOfLine = getFirstCodeHighlightNodeOfLine;
815
1030
  exports.getLastCodeHighlightNodeOfLine = getLastCodeHighlightNodeOfLine;
1031
+ exports.getStartOfCodeInLine = getStartOfCodeInLine;
816
1032
  exports.registerCodeHighlighting = registerCodeHighlighting;
@@ -53,6 +53,7 @@ declare export class CodeHighlightNode extends TextNode {
53
53
  __highlightType: ?string;
54
54
  constructor(text: string, highlightType?: string, key?: NodeKey): void;
55
55
  static getType(): string;
56
+ // $FlowFixMe
56
57
  static clone(node: CodeHighlightNode): CodeHighlightNode;
57
58
  createDOM(config: EditorConfig): HTMLElement;
58
59
  updateDOM(
@@ -4,25 +4,28 @@
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
- var e=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
- var n=require("@lexical/utils"),r=require("lexical");const t=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;
9
- class u extends r.TextNode{constructor(a,c,b){super(a,b);this.__highlightType=c}static getType(){return"code-highlight"}static clone(a){return new u(a.__text,a.__highlightType||void 0,a.__key)}createDOM(a){const c=super.createDOM(a);a=v(a.theme,this.__highlightType);n.addClassNamesToElement(c,a);return c}updateDOM(a,c,b){const d=super.updateDOM(a,c,b);a=v(b.theme,a.__highlightType);b=v(b.theme,this.__highlightType);a!==b&&(a&&n.removeClassNamesFromElement(c,a),b&&n.addClassNamesToElement(c,b));return d}setFormat(){return this}}
10
- function v(a,c){return c&&a&&a.codeHighlight&&a.codeHighlight[c]}function y(a,c){return new u(a,c)}function z(a){return a instanceof u}
11
- class B extends r.ElementNode{static getType(){return"code"}static clone(a){return new B(a.__language,a.__key)}constructor(a,c){super(c);this.__language=t(a)}createDOM(a){const c=document.createElement("code");n.addClassNamesToElement(c,a.theme.code);c.setAttribute("spellcheck","false");(a=this.getLanguage())&&c.setAttribute("data-highlight-language",a);return c}updateDOM(a,c){const b=this.__language;a=a.__language;b?b!==a&&c.setAttribute("data-highlight-language",b):a&&c.removeAttribute("data-highlight-language");
12
- return!1}static importDOM(){return{div:()=>({conversion:C,priority:1}),pre:()=>({conversion:D,priority:0}),table:a=>E(a)?{conversion:F,priority:4}:null,td:a=>{const c=a.closest("table");return a.classList.contains("js-file-line")?{conversion:G,priority:4}:c&&E(c)?{conversion:H,priority:4}:null},tr:a=>(a=a.closest("table"))&&E(a)?{conversion:H,priority:4}:null}}insertNewAfter(a){var c=this.getChildren(),b=c.length;if(2<=b&&"\n"===c[b-1].getTextContent()&&"\n"===c[b-2].getTextContent()&&a.isCollapsed()&&
13
- a.anchor.key===this.__key&&a.anchor.offset===b)return c[b-1].remove(),c[b-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a),a;c=a.anchor.getNode();var d=I(c);if(null!=d){b=0;for(d=d.getTextContent();b<d.length&&/[\t ]/.test(d[b]);)b+=1;if(0<b)return b=d.substring(0,b),b=y(b),c.insertAfter(b),a.insertNodes([r.$createLineBreakNode()]),b.select(),b}return null}canInsertTab(){const a=r.$getSelection();return r.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){const a=
14
- r.$createParagraphNode();this.getChildren().forEach(c=>a.append(c));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=t(a)}getLanguage(){return this.getLatest().__language}}function J(a){return new B(a)}function K(a){return a instanceof B}function I(a){let c=null;const b=a.getPreviousSiblings();for(b.push(a);0<b.length&&(a=b.pop(),z(a)&&(c=a),!r.$isLineBreakNode(a)););return c}
15
- function L(a){let c=null;const b=a.getNextSiblings();for(b.unshift(a);0<b.length&&(a=b.shift(),z(a)&&(c=a),!r.$isLineBreakNode(a)););return c}function D(){return{node:J()}}function C(a){return{after:c=>{const b=a.parentNode;null!=b&&a!==b.lastChild&&c.push(r.$createLineBreakNode());return c},node:null!==a.style.fontFamily.match("monospace")?J():null}}function F(){return{node:J()}}function H(){return{node:null}}
16
- function G(a){return{after:c=>{a.parentNode&&a.parentNode.nextSibling&&c.push(r.$createLineBreakNode());return c},node:null}}function E(a){return a.classList.contains("js-file-line-container")}function M(a,c){const b=a.getParent();K(b)?N(b,c):z(a)&&a.replace(r.$createTextNode(a.__text))}let O=!1;
17
- function N(a,c){O||(O=!0,void 0===a.getLanguage()&&a.setLanguage("javascript"),c.update(()=>{P(a,()=>{var b=a.getTextContent();b=e.tokenize(b,e.languages[a.getLanguage()||""]||e.languages.javascript);b=R(b);var d=a.getChildren();let f=0;for(;f<d.length&&S(d[f],b[f]);)f++;var h=d.length;const m=b.length,g=Math.min(h,m)-f;let k=0;for(;k<g;)if(k++,!S(d[h-k],b[m-k])){k--;break}d=f;h-=k;b=b.slice(f,m-k);const {from:l,to:p,nodesForReplacement:w}={from:d,nodesForReplacement:b,to:h};return l!==p||w.length?
18
- (a.splice(l,p-l,w),!0):!1})},{onUpdate:()=>{O=!1},skipTransforms:!0}))}function R(a){const c=[];a.forEach(b=>{if("string"===typeof b){b=b.split("\n");for(var d=0;d<b.length;d++){const f=b[d];f.length&&c.push(y(f));d<b.length-1&&c.push(r.$createLineBreakNode())}}else({content:d}=b),"string"===typeof d?c.push(y(d,b.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?c.push(y(d[0],b.type)):Array.isArray(d)&&c.push(...R(d))});return c}
19
- function P(a,c){var b=r.$getSelection();if(r.$isRangeSelection(b)&&b.anchor){b=b.anchor;var d=b.offset,f="element"===b.type&&r.$isLineBreakNode(a.getChildAtIndex(b.offset-1)),h=0;if(!f){const m=b.getNode();h=d+m.getPreviousSiblings().reduce((g,k)=>g+(r.$isLineBreakNode(k)?0:k.getTextContentSize()),0)}c()&&(f?b.getNode().select(d,d):a.getChildren().some(m=>{if(r.$isTextNode(m)){const g=m.getTextContentSize();if(g>=h)return m.select(h,h),!0;h-=g}return!1}))}}
20
- function S(a,c){return z(a)&&z(c)?a.__text===c.__text&&a.__highlightType===c.__highlightType:r.$isLineBreakNode(a)&&r.$isLineBreakNode(c)?!0:!1}function T(a){var c=r.$getSelection();if(!r.$isRangeSelection(c)||c.isCollapsed())return!1;c=c.getNodes();for(var b=0;b<c.length;b++){var d=c[b];if(!z(d)&&!r.$isLineBreakNode(d))return!1}b=I(c[0]);null!=b&&U(b,a);for(b=1;b<c.length;b++)d=c[b],r.$isLineBreakNode(c[b-1])&&z(d)&&U(d,a);return!0}
21
- function U(a,c){const b=a.getTextContent();c===r.INDENT_CONTENT_COMMAND?0<b.length&&/\s/.test(b[0])?a.setTextContent("\t"+b):(c=y("\t"),a.insertBefore(c)):0===b.indexOf("\t")&&(1===b.length?a.remove():a.setTextContent(b.substring(1)))}
22
- function V(a,c){const b=r.$getSelection();if(!r.$isRangeSelection(b))return!1;const {anchor:d,focus:f}=b,h=d.offset,m=f.offset,g=d.getNode(),k=f.getNode();var l=a===r.KEY_ARROW_UP_COMMAND;if(!z(g)||!z(k))return!1;if(!c.altKey){if(b.isCollapsed())if(a=g.getParentOrThrow(),l&&0===h&&null===g.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),c.preventDefault(),!0}else if(!l&&h===g.getTextContentSize()&&null===g.getNextSibling()&&null===a.getNextSibling())return a.selectNext(),
23
- c.preventDefault(),!0;return!1}var p=I(g);const w=L(k);if(null==p||null==w)return!1;const A=p.getNodesBetween(w);for(let q=0;q<A.length;q++){const Q=A[q];if(!z(Q)&&!r.$isLineBreakNode(Q))return!1}c.preventDefault();c.stopPropagation();c=l?p.getPreviousSibling():w.getNextSibling();if(!r.$isLineBreakNode(c))return!0;p=l?c.getPreviousSibling():c.getNextSibling();if(null==p)return!0;l=l?I(p):L(p);let x=null!=l?l:p;c.remove();A.forEach(q=>q.remove());a===r.KEY_ARROW_UP_COMMAND?(A.forEach(q=>x.insertBefore(q)),
24
- x.insertBefore(c)):(x.insertAfter(c),x=c,A.forEach(q=>{x.insertAfter(q);x=q}));b.setTextNodeRange(g,h,k,m);return!0}exports.$createCodeHighlightNode=y;exports.$createCodeNode=J;exports.$isCodeHighlightNode=z;exports.$isCodeNode=K;exports.CodeHighlightNode=u;exports.CodeNode=B;exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getFirstCodeHighlightNodeOfLine=I;
25
- exports.getLastCodeHighlightNodeOfLine=L;
26
- exports.registerCodeHighlighting=function(a){if(!a.hasNodes([B,u]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return n.mergeRegister(a.registerMutationListener(B,c=>{a.update(()=>{for(const [f,h]of c)if("destroyed"!==h){var b=r.$getNodeByKey(f);if(null!==b)a:{var d=b;b=a.getElementByKey(d.getKey());if(null===b)break a;d=d.getChildren();const m=d.length;if(m===b.__cachedChildrenLength)break a;b.__cachedChildrenLength=m;let g="1",k=1;for(let l=0;l<m;l++)r.$isLineBreakNode(d[l])&&
27
- (g+="\n"+ ++k);b.setAttribute("data-gutter",g)}}})}),a.registerNodeTransform(B,c=>N(c,a)),a.registerNodeTransform(r.TextNode,c=>M(c,a)),a.registerNodeTransform(u,c=>M(c,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>T(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>T(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,c=>V(r.KEY_ARROW_UP_COMMAND,c),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,
28
- c=>V(r.KEY_ARROW_DOWN_COMMAND,c),r.COMMAND_PRIORITY_LOW))};
7
+ 'use strict';var e=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
+ var m=require("@lexical/utils"),r=require("lexical");let t=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;
9
+ class u extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new u(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=v(a.theme,this.__highlightType);m.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let d=super.updateDOM(a,b,c);a=v(c.theme,a.__highlightType);c=v(c.theme,this.__highlightType);a!==c&&(a&&m.removeClassNamesFromElement(b,
10
+ a),c&&m.addClassNamesToElement(b,c));return d}static importJSON(a){let b=y(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"}}setFormat(){return this}}function v(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}function y(a,b){return new u(a,b)}function z(a){return a instanceof u}
11
+ class A extends r.ElementNode{static getType(){return"code"}static clone(a){return new A(a.__language,a.__key)}constructor(a,b){super(b);this.__language=t(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");
12
+ return!1}static importDOM(){return{div:()=>({conversion:C,priority:1}),pre:()=>({conversion:D,priority:0}),table:a=>E(a)?{conversion:F,priority:4}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?{conversion:G,priority:4}:b&&E(b)?{conversion:H,priority:4}:null},tr:a=>(a=a.closest("table"))&&E(a)?{conversion:H,priority:4}:null}}static importJSON(a){let b=I(a.language);b.setFormat(a.format);b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),
13
+ language:this.getLanguage(),type:"code"}}insertNewAfter(a){var b=this.getChildren(),c=b.length;if(2<=c&&"\n"===b[c-1].getTextContent()&&"\n"===b[c-2].getTextContent()&&a.isCollapsed()&&a.anchor.key===this.__key&&a.anchor.offset===c)return b[c-1].remove(),b[c-2].remove(),a=r.$createParagraphNode(),this.insertAfter(a),a;b=a.anchor.getNode();var d=J(b);if(null!=d){c=0;for(d=d.getTextContent();c<d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=y(c),b.insertAfter(c),a.insertNodes([r.$createLineBreakNode()]),
14
+ c.select(),c}return null}canInsertTab(){let a=r.$getSelection();return r.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){let a=r.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=t(a)}getLanguage(){return this.getLatest().__language}}function I(a){return new A(a)}function K(a){return a instanceof A}
15
+ function J(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),z(a)&&(b=a),!r.$isLineBreakNode(a)););return b}function L(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),z(a)&&(b=a),!r.$isLineBreakNode(a)););return b}function M(a,b){var c=a.length;let d=-1;if(b)for(b=0;b<c;b++){let f=a[b];if(" "!==f&&"\t"!==f){d=b;break}}else for(--c;-1<c;c--)if(b=a[c]," "!==b&&"\t"!==b){d=c;break}return d}
16
+ function N(a){let b=null,c=-1;var d=a.getPreviousSiblings();for(d.push(a);0<d.length;){var f=d.pop();if(z(f)){var g=f.getTextContent();g=M(g,!0);-1!==g&&(b=f,c=g)}if(r.$isLineBreakNode(f))break}if(null===b)for(a=a.getNextSiblings();0<a.length;){d=a.shift();if(z(d)&&(f=d.getTextContent(),f=M(f,!0),-1!==f)){b=d;c=f;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}
17
+ function O(a){let b=null,c=-1;var d=a.getNextSiblings();for(d.unshift(a);0<d.length;){var f=d.shift();if(z(f)){var g=f.getTextContent();g=M(g,!1);-1!==g&&(b=f,c=g+1)}if(r.$isLineBreakNode(f))break}if(null===b)for(a=a.getPreviousSiblings();0<a.length;){d=a.pop();if(z(d)&&(f=d.getTextContent(),f=M(f,!1),-1!==f)){b=d;c=f+1;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}function D(){return{node:I()}}
18
+ function C(a){return{after:b=>{let c=a.parentNode;null!=c&&a!==c.lastChild&&b.push(r.$createLineBreakNode());return b},node:null!==a.style.fontFamily.match("monospace")?I():null}}function F(){return{node:I()}}function H(){return{node:null}}function G(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(r.$createLineBreakNode());return b},node:null}}function E(a){return a.classList.contains("js-file-line-container")}
19
+ function P(a,b){let c=a.getParent();K(c)?Q(c,b):z(a)&&a.replace(r.$createTextNode(a.__text))}let R=!1;
20
+ function Q(a,b){R||(R=!0,void 0===a.getLanguage()&&a.setLanguage("javascript"),b.update(()=>{S(a,()=>{var c=a.getTextContent();c=e.tokenize(c,e.languages[a.getLanguage()||""]||e.languages.javascript);c=U(c);var d=a.getChildren();let f=0;for(;f<d.length&&V(d[f],c[f]);)f++;var g=d.length;let l=c.length,h=Math.min(g,l)-f,k=0;for(;k<h;)if(k++,!V(d[g-k],c[l-k])){k--;break}d=f;g-=k;c=c.slice(f,l-k);let {from:n,to:p,nodesForReplacement:w}={from:d,nodesForReplacement:c,to:g};return n!==p||w.length?(a.splice(n,
21
+ p-n,w),!0):!1})},{onUpdate:()=>{R=!1},skipTransforms:!0}))}function U(a){let b=[];a.forEach(c=>{if("string"===typeof c){c=c.split("\n");for(var d=0;d<c.length;d++){let f=c[d];f.length&&b.push(y(f));d<c.length-1&&b.push(r.$createLineBreakNode())}}else({content:d}=c),"string"===typeof d?b.push(y(d,c.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?b.push(y(d[0],c.type)):Array.isArray(d)&&b.push(...U(d))});return b}
22
+ function S(a,b){var c=r.$getSelection();if(r.$isRangeSelection(c)&&c.anchor){c=c.anchor;var d=c.offset,f="element"===c.type&&r.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let l=c.getNode();g=d+l.getPreviousSiblings().reduce((h,k)=>h+(r.$isLineBreakNode(k)?0:k.getTextContentSize()),0)}b()&&(f?c.getNode().select(d,d):a.getChildren().some(l=>{if(r.$isTextNode(l)){let h=l.getTextContentSize();if(h>=g)return l.select(g,g),!0;g-=h}return!1}))}}
23
+ function V(a,b){return z(a)&&z(b)?a.__text===b.__text&&a.__highlightType===b.__highlightType:r.$isLineBreakNode(a)&&r.$isLineBreakNode(b)?!0:!1}function W(a){var b=r.$getSelection();if(!r.$isRangeSelection(b)||b.isCollapsed())return!1;b=b.getNodes();for(var c=0;c<b.length;c++){var d=b[c];if(!z(d)&&!r.$isLineBreakNode(d))return!1}c=J(b[0]);null!=c&&X(c,a);for(c=1;c<b.length;c++)d=b[c],r.$isLineBreakNode(b[c-1])&&z(d)&&X(d,a);return!0}
24
+ function X(a,b){let c=a.getTextContent();b===r.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=y("\t"),a.insertBefore(b)):0===c.indexOf("\t")&&(1===c.length?a.remove():a.setTextContent(c.substring(1)))}
25
+ function Y(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.offset,l=f.offset,h=d.getNode(),k=f.getNode();var n=a===r.KEY_ARROW_UP_COMMAND;if(!z(h)||!z(k))return!1;if(!b.altKey){if(c.isCollapsed())if(a=h.getParentOrThrow(),n&&0===g&&null===h.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!n&&g===h.getTextContentSize()&&null===h.getNextSibling()&&null===a.getNextSibling())return a.selectNext(),
26
+ b.preventDefault(),!0;return!1}var p=J(h);let w=L(k);if(null==p||null==w)return!1;let B=p.getNodesBetween(w);for(let q=0;q<B.length;q++){let T=B[q];if(!z(T)&&!r.$isLineBreakNode(T))return!1}b.preventDefault();b.stopPropagation();b=n?p.getPreviousSibling():w.getNextSibling();if(!r.$isLineBreakNode(b))return!0;p=n?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;n=n?J(p):L(p);let x=null!=n?n:p;b.remove();B.forEach(q=>q.remove());a===r.KEY_ARROW_UP_COMMAND?(B.forEach(q=>x.insertBefore(q)),
27
+ x.insertBefore(b)):(x.insertAfter(b),x=b,B.forEach(q=>{x.insertAfter(q);x=q}));c.setTextNodeRange(h,g,k,l);return!0}function Z(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.getNode(),l=f.getNode();a=a===r.MOVE_TO_START;if(!z(g)||!z(l))return!1;let h,k;a?{node:h,offset:k}=N(l):{node:h,offset:k}=O(l);null!==h&&-1!==k&&c.setTextNodeRange(h,k,h,k);b.preventDefault();b.stopPropagation()}exports.$createCodeHighlightNode=y;exports.$createCodeNode=I;
28
+ exports.$isCodeHighlightNode=z;exports.$isCodeNode=K;exports.CodeHighlightNode=u;exports.CodeNode=A;exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=O;exports.getFirstCodeHighlightNodeOfLine=J;exports.getLastCodeHighlightNodeOfLine=L;exports.getStartOfCodeInLine=N;
29
+ exports.registerCodeHighlighting=function(a){if(!a.hasNodes([A,u]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return m.mergeRegister(a.registerMutationListener(A,b=>{a.update(()=>{for(let [f,g]of b)if("destroyed"!==g){var c=r.$getNodeByKey(f);if(null!==c)a:{var d=c;c=a.getElementByKey(d.getKey());if(null===c)break a;d=d.getChildren();let l=d.length;if(l===c.__cachedChildrenLength)break a;c.__cachedChildrenLength=l;let h="1",k=1;for(let n=0;n<l;n++)r.$isLineBreakNode(d[n])&&
30
+ (h+="\n"+ ++k);c.setAttribute("data-gutter",h)}}})}),a.registerNodeTransform(A,b=>Q(b,a)),a.registerNodeTransform(r.TextNode,b=>P(b,a)),a.registerNodeTransform(u,b=>P(b,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>W(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>W(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,b=>Y(r.KEY_ARROW_UP_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,
31
+ b=>Y(r.KEY_ARROW_DOWN_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_END,b=>Z(r.MOVE_TO_END,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_START,b=>Z(r.MOVE_TO_START,b),r.COMMAND_PRIORITY_LOW))}
package/package.json CHANGED
@@ -8,13 +8,13 @@
8
8
  "code"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.2.9",
11
+ "version": "0.3.2",
12
12
  "main": "LexicalCode.js",
13
13
  "peerDependencies": {
14
- "lexical": "0.2.9"
14
+ "lexical": "0.3.2"
15
15
  },
16
16
  "dependencies": {
17
- "@lexical/utils": "0.2.9",
17
+ "@lexical/utils": "0.3.2",
18
18
  "prismjs": "^1.27.0"
19
19
  },
20
20
  "repository": {