@lexical/code 0.4.1 → 0.5.1-next.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.
@@ -196,6 +196,18 @@ const mapToPrismLanguage = language => {
196
196
  return language != null && Prism.languages.hasOwnProperty(language) ? language : undefined;
197
197
  };
198
198
 
199
+ function hasChildDOMNodeTag(node, tagName) {
200
+ for (const child of node.childNodes) {
201
+ if (child instanceof HTMLElement && child.tagName === tagName) {
202
+ return true;
203
+ }
204
+
205
+ hasChildDOMNodeTag(child, tagName);
206
+ }
207
+
208
+ return false;
209
+ }
210
+
199
211
  const LANGUAGE_DATA_ATTRIBUTE = 'data-highlight-language';
200
212
  /** @noInheritDoc */
201
213
 
@@ -249,7 +261,7 @@ class CodeNode extends lexical.ElementNode {
249
261
  // but if it's a multi line <code> we'll create a block. Pass through to
250
262
  // inline format handled by TextNode otherwise
251
263
  code: node => {
252
- const isMultiLine = node.textContent != null && /\r?\n/.test(node.textContent);
264
+ const isMultiLine = node.textContent != null && (/\r?\n/.test(node.textContent) || hasChildDOMNodeTag(node, 'BR'));
253
265
  return isMultiLine ? {
254
266
  conversion: convertPreElement,
255
267
  priority: 1
@@ -412,13 +424,15 @@ function $isCodeNode(node) {
412
424
 
413
425
  function convertPreElement(domNode) {
414
426
  return {
415
- node: $createCodeNode()
427
+ node: $createCodeNode(),
428
+ preformatted: true
416
429
  };
417
430
  }
418
431
 
419
432
  function convertDivElement(domNode) {
420
433
  // domNode is a <div> since we matched it by nodeName
421
434
  const div = domNode;
435
+ const isCode = isCodeElement(div);
422
436
  return {
423
437
  after: childLexicalNodes => {
424
438
  const domParent = domNode.parentNode;
@@ -429,13 +443,15 @@ function convertDivElement(domNode) {
429
443
 
430
444
  return childLexicalNodes;
431
445
  },
432
- node: isCodeElement(div) ? $createCodeNode() : null
446
+ node: isCode ? $createCodeNode() : null,
447
+ preformatted: isCode
433
448
  };
434
449
  }
435
450
 
436
451
  function convertTableElement() {
437
452
  return {
438
- node: $createCodeNode()
453
+ node: $createCodeNode(),
454
+ preformatted: true
439
455
  };
440
456
  }
441
457
 
@@ -678,17 +694,24 @@ function codeNodeTransform(node, editor) {
678
694
 
679
695
  if (node.getLanguage() === undefined) {
680
696
  node.setLanguage(DEFAULT_CODE_LANGUAGE);
681
- } // Using nested update call to pass `skipTransforms` since we don't want
697
+ }
698
+
699
+ const nodeKey = node.getKey(); // Using nested update call to pass `skipTransforms` since we don't want
682
700
  // each individual codehighlight node to be transformed again as it's already
683
701
  // in its final state
684
702
 
685
-
686
703
  editor.update(() => {
687
- updateAndRetainSelection(node, () => {
688
- const code = node.getTextContent();
689
- const tokens = Prism.tokenize(code, Prism.languages[node.getLanguage() || ''] || Prism.languages[DEFAULT_CODE_LANGUAGE]);
704
+ updateAndRetainSelection(nodeKey, () => {
705
+ const currentNode = lexical.$getNodeByKey(nodeKey);
706
+
707
+ if (!$isCodeNode(currentNode) || !currentNode.isAttached()) {
708
+ return false;
709
+ }
710
+
711
+ const code = currentNode.getTextContent();
712
+ const tokens = Prism.tokenize(code, Prism.languages[currentNode.getLanguage() || ''] || Prism.languages[DEFAULT_CODE_LANGUAGE]);
690
713
  const highlightNodes = getHighlightNodes(tokens);
691
- const diffRange = getDiffRange(node.getChildren(), highlightNodes);
714
+ const diffRange = getDiffRange(currentNode.getChildren(), highlightNodes);
692
715
  const {
693
716
  from,
694
717
  to,
@@ -746,7 +769,13 @@ function getHighlightNodes(tokens) {
746
769
  // position as before.
747
770
 
748
771
 
749
- function updateAndRetainSelection(node, updateFn) {
772
+ function updateAndRetainSelection(nodeKey, updateFn) {
773
+ const node = lexical.$getNodeByKey(nodeKey);
774
+
775
+ if (!$isCodeNode(node) || !node.isAttached()) {
776
+ return;
777
+ }
778
+
750
779
  const selection = lexical.$getSelection(); // If it's not range selection (or null selection) there's no need to change it,
751
780
  // but we can still run highlighting logic
752
781
 
@@ -5,28 +5,28 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
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={c:"C",clike:"C-like",css:"CSS",html:"HTML",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",xml:"XML"},u={javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain"};function v(a){return u[a]||a}
9
- class y extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new y(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=z(a.theme,this.__highlightType);m.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let d=super.updateDOM(a,b,c);a=z(c.theme,a.__highlightType);c=z(c.theme,this.__highlightType);a!==c&&(a&&m.removeClassNamesFromElement(b,
10
- a),c&&m.addClassNamesToElement(b,c));return d}static importJSON(a){let b=A(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}}function z(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}function A(a,b){return new y(a,b)}function C(a){return a instanceof y}
11
- function D(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),C(a)&&(b=a),!r.$isLineBreakNode(a)););return b}function E(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),C(a)&&(b=a),!r.$isLineBreakNode(a)););return b}let F=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;
12
- class G extends r.ElementNode{static getType(){return"code"}static clone(a){return new G(a.__language,a.__key)}constructor(a,b){super(b);this.__language=F(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");
13
- return!1}static importDOM(){return{code:a=>null!=a.textContent&&/\r?\n/.test(a.textContent)?{conversion:H,priority:1}:null,div:()=>({conversion:I,priority:1}),pre:()=>({conversion:H,priority:0}),table:a=>J(a)?{conversion:aa,priority:4}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?{conversion:ba,priority:4}:b&&J(b)?{conversion:K,priority:4}:null},tr:a=>(a=a.closest("table"))&&J(a)?{conversion:K,priority:4}:null}}static importJSON(a){let b=L(a.language);b.setFormat(a.format);
14
- b.setIndent(a.indent);b.setDirection(a.direction);return b}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),type:"code",version:1}}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=D(b);if(null!=d){c=0;for(d=d.getTextContent();c<
15
- d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=A(c),b.insertAfter(c),a.insertNodes([r.$createLineBreakNode()]),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=F(a)}getLanguage(){return this.getLatest().__language}}
16
- function L(a){return new G(a)}function M(a){return a instanceof G}function H(){return{node:L()}}function I(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")?L():null}}function aa(){return{node:L()}}function K(){return{node:null}}function ba(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(r.$createLineBreakNode());return b},node:null}}
17
- function J(a){return a.classList.contains("js-file-line-container")}function N(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}
18
- function O(a){let b=null,c=-1;var d=a.getPreviousSiblings();for(d.push(a);0<d.length;){var f=d.pop();if(C(f)){var g=f.getTextContent();g=N(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(C(d)&&(f=d.getTextContent(),f=N(f,!0),-1!==f)){b=d;c=f;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}
19
- function P(a){let b=null,c=-1;var d=a.getNextSiblings();for(d.unshift(a);0<d.length;){var f=d.shift();if(C(f)){var g=f.getTextContent();g=N(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(C(d)&&(f=d.getTextContent(),f=N(f,!1),-1!==f)){b=d;c=f+1;break}if(r.$isLineBreakNode(d))break}return{node:b,offset:c}}function Q(a,b){let c=a.getParent();M(c)?R(c,b):C(a)&&a.replace(r.$createTextNode(a.__text))}let S=!1;
20
- function R(a,b){S||(S=!0,void 0===a.getLanguage()&&a.setLanguage("javascript"),b.update(()=>{ca(a,()=>{var c=a.getTextContent();c=e.tokenize(c,e.languages[a.getLanguage()||""]||e.languages.javascript);c=T(c);var d=a.getChildren();let f=0;for(;f<d.length&&U(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++,!U(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:()=>{S=!1},skipTransforms:!0}))}function T(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(A(f));d<c.length-1&&b.push(r.$createLineBreakNode())}}else({content:d}=c),"string"===typeof d?b.push(A(d,c.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?b.push(A(d[0],c.type)):Array.isArray(d)&&b.push(...T(d))});return b}
22
- function ca(a,b){var c=r.$getSelection();if(r.$isRangeSelection(c)){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}))}else b()}
23
- function U(a,b){return C(a)&&C(b)?a.__text===b.__text&&a.__highlightType===b.__highlightType:r.$isLineBreakNode(a)&&r.$isLineBreakNode(b)?!0:!1}function V(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(!C(d)&&!r.$isLineBreakNode(d))return!1}c=D(b[0]);null!=c&&W(c,a);for(c=1;c<b.length;c++)d=b[c],r.$isLineBreakNode(b[c-1])&&C(d)&&W(d,a);return!0}
24
- function W(a,b){let c=a.getTextContent();b===r.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=A("\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(!C(h)||!C(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=D(h);let w=E(k);if(null==p||null==w)return!1;let B=p.getNodesBetween(w);for(let q=0;q<B.length;q++){let X=B[q];if(!C(X)&&!r.$isLineBreakNode(X))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?D(p):E(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(!C(g)||!C(l))return!1;let h,k;a?{node:h,offset:k}=O(l):{node:h,offset:k}=P(l);null!==h&&-1!==k&&c.setTextNodeRange(h,k,h,k);b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=A;
28
- exports.$createCodeNode=L;exports.$isCodeHighlightNode=C;exports.$isCodeNode=M;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=t;exports.CODE_LANGUAGE_MAP=u;exports.CodeHighlightNode=y;exports.CodeNode=G;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=P;exports.getFirstCodeHighlightNodeOfLine=D;
29
- exports.getLanguageFriendlyName=function(a){a=v(a);return t[a]||a};exports.getLastCodeHighlightNodeOfLine=E;exports.getStartOfCodeInLine=O;exports.normalizeCodeLang=v;
30
- exports.registerCodeHighlighting=function(a){if(!a.hasNodes([G,y]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return m.mergeRegister(a.registerMutationListener(G,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])&&
31
- (h+="\n"+ ++k);c.setAttribute("data-gutter",h)}}})}),a.registerNodeTransform(G,b=>R(b,a)),a.registerNodeTransform(r.TextNode,b=>Q(b,a)),a.registerNodeTransform(y,b=>Q(b,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>V(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>V(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,
32
- 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))}
8
+ var m=require("@lexical/utils"),t=require("lexical");let u={c:"C",clike:"C-like",css:"CSS",html:"HTML",js:"JavaScript",markdown:"Markdown",objc:"Objective-C",plain:"Plain Text",py:"Python",rust:"Rust",sql:"SQL",swift:"Swift",xml:"XML"},v={javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain"};function w(a){return v[a]||a}
9
+ class z extends t.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new z(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=A(a.theme,this.__highlightType);m.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let d=super.updateDOM(a,b,c);a=A(c.theme,a.__highlightType);c=A(c.theme,this.__highlightType);a!==c&&(a&&m.removeClassNamesFromElement(b,
10
+ a),c&&m.addClassNamesToElement(b,c));return d}static importJSON(a){let b=B(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}}function A(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}function B(a,b){return new z(a,b)}function C(a){return a instanceof z}
11
+ function D(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),C(a)&&(b=a),!t.$isLineBreakNode(a)););return b}function E(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),C(a)&&(b=a),!t.$isLineBreakNode(a)););return b}let F=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;function G(a,b){for(let c of a.childNodes){if(c instanceof HTMLElement&&c.tagName===b)return!0;G(c,b)}return!1}
12
+ class H extends t.ElementNode{static getType(){return"code"}static clone(a){return new H(a.__language,a.__key)}constructor(a,b){super(b);this.__language=F(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");
13
+ return!1}static importDOM(){return{code:a=>null!=a.textContent&&(/\r?\n/.test(a.textContent)||G(a,"BR"))?{conversion:I,priority:1}:null,div:()=>({conversion:aa,priority:1}),pre:()=>({conversion:I,priority:0}),table:a=>J(a)?{conversion:ba,priority:4}:null,td:a=>{let b=a.closest("table");return a.classList.contains("js-file-line")?{conversion:ca,priority:4}:b&&J(b)?{conversion:K,priority:4}:null},tr:a=>(a=a.closest("table"))&&J(a)?{conversion:K,priority:4}:null}}static importJSON(a){let b=L(a.language);
14
+ 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){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=t.$createParagraphNode(),this.insertAfter(a),a;b=a.anchor.getNode();var d=D(b);if(null!=d){c=0;
15
+ for(d=d.getTextContent();c<d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=B(c),b.insertAfter(c),a.insertNodes([t.$createLineBreakNode()]),c.select(),c}return null}canInsertTab(){let a=t.$getSelection();return t.$isRangeSelection(a)&&a.isCollapsed()?!0:!1}canIndent(){return!1}collapseAtStart(){let a=t.$createParagraphNode();this.getChildren().forEach(b=>a.append(b));this.replace(a);return!0}setLanguage(a){this.getWritable().__language=F(a)}getLanguage(){return this.getLatest().__language}}
16
+ function L(a){return new H(a)}function M(a){return a instanceof H}function I(){return{node:L(),preformatted:!0}}function aa(a){let b=null!==a.style.fontFamily.match("monospace");return{after:c=>{let d=a.parentNode;null!=d&&a!==d.lastChild&&c.push(t.$createLineBreakNode());return c},node:b?L():null,preformatted:b}}function ba(){return{node:L(),preformatted:!0}}function K(){return{node:null}}
17
+ function ca(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(t.$createLineBreakNode());return b},node:null}}function J(a){return a.classList.contains("js-file-line-container")}function N(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}
18
+ function O(a){let b=null,c=-1;var d=a.getPreviousSiblings();for(d.push(a);0<d.length;){var f=d.pop();if(C(f)){var g=f.getTextContent();g=N(g,!0);-1!==g&&(b=f,c=g)}if(t.$isLineBreakNode(f))break}if(null===b)for(a=a.getNextSiblings();0<a.length;){d=a.shift();if(C(d)&&(f=d.getTextContent(),f=N(f,!0),-1!==f)){b=d;c=f;break}if(t.$isLineBreakNode(d))break}return{node:b,offset:c}}
19
+ function P(a){let b=null,c=-1;var d=a.getNextSiblings();for(d.unshift(a);0<d.length;){var f=d.shift();if(C(f)){var g=f.getTextContent();g=N(g,!1);-1!==g&&(b=f,c=g+1)}if(t.$isLineBreakNode(f))break}if(null===b)for(a=a.getPreviousSiblings();0<a.length;){d=a.pop();if(C(d)&&(f=d.getTextContent(),f=N(f,!1),-1!==f)){b=d;c=f+1;break}if(t.$isLineBreakNode(d))break}return{node:b,offset:c}}function Q(a,b){let c=a.getParent();M(c)?R(c,b):C(a)&&a.replace(t.$createTextNode(a.__text))}let S=!1;
20
+ function R(a,b){if(!S){S=!0;void 0===a.getLanguage()&&a.setLanguage("javascript");var c=a.getKey();b.update(()=>{da(c,()=>{var d=t.$getNodeByKey(c);if(!M(d)||!d.isAttached())return!1;var f=d.getTextContent();f=e.tokenize(f,e.languages[d.getLanguage()||""]||e.languages.javascript);f=T(f);var g=d.getChildren();for(d=0;d<g.length&&U(g[d],f[d]);)d++;var k=g.length;let h=f.length,n=Math.min(k,h)-d,l=0;for(;l<n;)if(l++,!U(g[k-l],f[h-l])){l--;break}g=d;k-=l;f=f.slice(d,h-l);let {from:p,to:x,nodesForReplacement:r}=
21
+ {from:g,nodesForReplacement:f,to:k};return p!==x||r.length?(a.splice(p,x-p,r),!0):!1})},{onUpdate:()=>{S=!1},skipTransforms:!0})}}function T(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(B(f));d<c.length-1&&b.push(t.$createLineBreakNode())}}else({content:d}=c),"string"===typeof d?b.push(B(d,c.type)):Array.isArray(d)&&1===d.length&&"string"===typeof d[0]?b.push(B(d[0],c.type)):Array.isArray(d)&&b.push(...T(d))});return b}
22
+ function da(a,b){a=t.$getNodeByKey(a);if(M(a)&&a.isAttached()){var c=t.$getSelection();if(t.$isRangeSelection(c)){c=c.anchor;var d=c.offset,f="element"===c.type&&t.$isLineBreakNode(a.getChildAtIndex(c.offset-1)),g=0;if(!f){let k=c.getNode();g=d+k.getPreviousSiblings().reduce((h,n)=>h+(t.$isLineBreakNode(n)?0:n.getTextContentSize()),0)}b()&&(f?c.getNode().select(d,d):a.getChildren().some(k=>{if(t.$isTextNode(k)){let h=k.getTextContentSize();if(h>=g)return k.select(g,g),!0;g-=h}return!1}))}else b()}}
23
+ function U(a,b){return C(a)&&C(b)?a.__text===b.__text&&a.__highlightType===b.__highlightType:t.$isLineBreakNode(a)&&t.$isLineBreakNode(b)?!0:!1}function V(a){var b=t.$getSelection();if(!t.$isRangeSelection(b)||b.isCollapsed())return!1;b=b.getNodes();for(var c=0;c<b.length;c++){var d=b[c];if(!C(d)&&!t.$isLineBreakNode(d))return!1}c=D(b[0]);null!=c&&W(c,a);for(c=1;c<b.length;c++)d=b[c],t.$isLineBreakNode(b[c-1])&&C(d)&&W(d,a);return!0}
24
+ function W(a,b){let c=a.getTextContent();b===t.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=B("\t"),a.insertBefore(b)):0===c.indexOf("\t")&&(1===c.length?a.remove():a.setTextContent(c.substring(1)))}
25
+ function X(a,b){let c=t.$getSelection();if(!t.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.offset,k=f.offset,h=d.getNode(),n=f.getNode();var l=a===t.KEY_ARROW_UP_COMMAND;if(!C(h)||!C(n))return!1;if(!b.altKey){if(c.isCollapsed())if(a=h.getParentOrThrow(),l&&0===g&&null===h.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!l&&g===h.getTextContentSize()&&null===h.getNextSibling()&&null===a.getNextSibling())return a.selectNext(),
26
+ b.preventDefault(),!0;return!1}var p=D(h);let x=E(n);if(null==p||null==x)return!1;let r=p.getNodesBetween(x);for(let q=0;q<r.length;q++){let Y=r[q];if(!C(Y)&&!t.$isLineBreakNode(Y))return!1}b.preventDefault();b.stopPropagation();b=l?p.getPreviousSibling():x.getNextSibling();if(!t.$isLineBreakNode(b))return!0;p=l?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;l=l?D(p):E(p);let y=null!=l?l:p;b.remove();r.forEach(q=>q.remove());a===t.KEY_ARROW_UP_COMMAND?(r.forEach(q=>y.insertBefore(q)),
27
+ y.insertBefore(b)):(y.insertAfter(b),y=b,r.forEach(q=>{y.insertAfter(q);y=q}));c.setTextNodeRange(h,g,n,k);return!0}function Z(a,b){let c=t.$getSelection();if(!t.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,g=d.getNode(),k=f.getNode();a=a===t.MOVE_TO_START;if(!C(g)||!C(k))return!1;let h,n;a?{node:h,offset:n}=O(k):{node:h,offset:n}=P(k);null!==h&&-1!==n&&c.setTextNodeRange(h,n,h,n);b.preventDefault();b.stopPropagation();return!0}exports.$createCodeHighlightNode=B;
28
+ exports.$createCodeNode=L;exports.$isCodeHighlightNode=C;exports.$isCodeNode=M;exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=u;exports.CODE_LANGUAGE_MAP=v;exports.CodeHighlightNode=z;exports.CodeNode=H;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=P;exports.getFirstCodeHighlightNodeOfLine=D;
29
+ exports.getLanguageFriendlyName=function(a){a=w(a);return u[a]||a};exports.getLastCodeHighlightNodeOfLine=E;exports.getStartOfCodeInLine=O;exports.normalizeCodeLang=w;
30
+ exports.registerCodeHighlighting=function(a){if(!a.hasNodes([H,z]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return m.mergeRegister(a.registerMutationListener(H,b=>{a.update(()=>{for(let [f,g]of b)if("destroyed"!==g){var c=t.$getNodeByKey(f);if(null!==c)a:{var d=c;c=a.getElementByKey(d.getKey());if(null===c)break a;d=d.getChildren();let k=d.length;if(k===c.__cachedChildrenLength)break a;c.__cachedChildrenLength=k;let h="1",n=1;for(let l=0;l<k;l++)t.$isLineBreakNode(d[l])&&
31
+ (h+="\n"+ ++n);c.setAttribute("data-gutter",h)}}})}),a.registerNodeTransform(H,b=>R(b,a)),a.registerNodeTransform(t.TextNode,b=>Q(b,a)),a.registerNodeTransform(z,b=>Q(b,a)),a.registerCommand(t.INDENT_CONTENT_COMMAND,()=>V(t.INDENT_CONTENT_COMMAND),t.COMMAND_PRIORITY_LOW),a.registerCommand(t.OUTDENT_CONTENT_COMMAND,()=>V(t.OUTDENT_CONTENT_COMMAND),t.COMMAND_PRIORITY_LOW),a.registerCommand(t.KEY_ARROW_UP_COMMAND,b=>X(t.KEY_ARROW_UP_COMMAND,b),t.COMMAND_PRIORITY_LOW),a.registerCommand(t.KEY_ARROW_DOWN_COMMAND,
32
+ b=>X(t.KEY_ARROW_DOWN_COMMAND,b),t.COMMAND_PRIORITY_LOW),a.registerCommand(t.MOVE_TO_END,b=>Z(t.MOVE_TO_END,b),t.COMMAND_PRIORITY_LOW),a.registerCommand(t.MOVE_TO_START,b=>Z(t.MOVE_TO_START,b),t.COMMAND_PRIORITY_LOW))}
package/package.json CHANGED
@@ -8,13 +8,13 @@
8
8
  "code"
9
9
  ],
10
10
  "license": "MIT",
11
- "version": "0.4.1",
11
+ "version": "0.5.1-next.0",
12
12
  "main": "LexicalCode.js",
13
13
  "peerDependencies": {
14
- "lexical": "0.4.1"
14
+ "lexical": "0.5.1-next.0"
15
15
  },
16
16
  "dependencies": {
17
- "@lexical/utils": "0.4.1",
17
+ "@lexical/utils": "0.5.1-next.0",
18
18
  "prismjs": "^1.27.0"
19
19
  },
20
20
  "repository": {