@lexical/code 0.3.9 → 0.3.10
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/CodeNode.d.ts +1 -1
- package/LexicalCode.dev.js +2 -2
- package/LexicalCode.prod.js +11 -11
- package/package.json +3 -3
package/CodeNode.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
import type { DOMConversionMap, EditorConfig, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread } from 'lexical';
|
|
9
|
+
import type { CodeHighlightNode } from '@lexical/code';
|
|
9
10
|
import 'prismjs/components/prism-clike';
|
|
10
11
|
import 'prismjs/components/prism-javascript';
|
|
11
12
|
import 'prismjs/components/prism-markup';
|
|
@@ -18,7 +19,6 @@ import 'prismjs/components/prism-python';
|
|
|
18
19
|
import 'prismjs/components/prism-rust';
|
|
19
20
|
import 'prismjs/components/prism-swift';
|
|
20
21
|
import { ElementNode } from 'lexical';
|
|
21
|
-
import { CodeHighlightNode } from '@lexical/code';
|
|
22
22
|
declare type SerializedCodeNode = Spread<{
|
|
23
23
|
language: string | null | undefined;
|
|
24
24
|
type: 'code';
|
package/LexicalCode.dev.js
CHANGED
|
@@ -952,7 +952,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
952
952
|
|
|
953
953
|
|
|
954
954
|
const anchor = selection.anchor.getNode();
|
|
955
|
-
const firstNode =
|
|
955
|
+
const firstNode = getFirstCodeHighlightNodeOfLine(anchor);
|
|
956
956
|
|
|
957
957
|
if (firstNode != null) {
|
|
958
958
|
let leadingWhitespace = 0;
|
|
@@ -964,7 +964,7 @@ class CodeNode extends lexical.ElementNode {
|
|
|
964
964
|
|
|
965
965
|
if (leadingWhitespace > 0) {
|
|
966
966
|
const whitespace = firstNodeText.substring(0, leadingWhitespace);
|
|
967
|
-
const indentedChild =
|
|
967
|
+
const indentedChild = $createCodeHighlightNode(whitespace);
|
|
968
968
|
anchor.insertAfter(indentedChild);
|
|
969
969
|
selection.insertNodes([lexical.$createLineBreakNode()]);
|
|
970
970
|
indentedChild.select();
|
package/LexicalCode.prod.js
CHANGED
|
@@ -17,20 +17,20 @@ function F(a,b){return v.$isCodeHighlightNode(a)&&v.$isCodeHighlightNode(b)?a.__
|
|
|
17
17
|
function G(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(!v.$isCodeHighlightNode(d)&&!r.$isLineBreakNode(d))return!1}c=v.getFirstCodeHighlightNodeOfLine(b[0]);null!=c&&H(c,a);for(c=1;c<b.length;c++)d=b[c],r.$isLineBreakNode(b[c-1])&&v.$isCodeHighlightNode(d)&&H(d,a);return!0}
|
|
18
18
|
function H(a,b){let c=a.getTextContent();b===r.INDENT_CONTENT_COMMAND?0<c.length&&/\s/.test(c[0])?a.setTextContent("\t"+c):(b=v.$createCodeHighlightNode("\t"),a.insertBefore(b)):0===c.indexOf("\t")&&(1===c.length?a.remove():a.setTextContent(c.substring(1)))}
|
|
19
19
|
function I(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,h=d.offset,m=f.offset,k=d.getNode(),l=f.getNode();var n=a===r.KEY_ARROW_UP_COMMAND;if(!v.$isCodeHighlightNode(k)||!v.$isCodeHighlightNode(l))return!1;if(!b.altKey){if(c.isCollapsed())if(a=k.getParentOrThrow(),n&&0===h&&null===k.getPreviousSibling()){if(null===a.getPreviousSibling())return a.selectPrevious(),b.preventDefault(),!0}else if(!n&&h===k.getTextContentSize()&&null===k.getNextSibling()&&null===
|
|
20
|
-
a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}var p=v.getFirstCodeHighlightNodeOfLine(k);let t=v.getLastCodeHighlightNodeOfLine(l);if(null==p||null==t)return!1;let w=p.getNodesBetween(t);for(let q=0;q<w.length;q++){let
|
|
20
|
+
a.getNextSibling())return a.selectNext(),b.preventDefault(),!0;return!1}var p=v.getFirstCodeHighlightNodeOfLine(k);let t=v.getLastCodeHighlightNodeOfLine(l);if(null==p||null==t)return!1;let w=p.getNodesBetween(t);for(let q=0;q<w.length;q++){let P=w[q];if(!v.$isCodeHighlightNode(P)&&!r.$isLineBreakNode(P))return!1}b.preventDefault();b.stopPropagation();b=n?p.getPreviousSibling():t.getNextSibling();if(!r.$isLineBreakNode(b))return!0;p=n?b.getPreviousSibling():b.getNextSibling();if(null==p)return!0;
|
|
21
21
|
n=n?v.getFirstCodeHighlightNodeOfLine(p):v.getLastCodeHighlightNodeOfLine(p);let u=null!=n?n:p;b.remove();w.forEach(q=>q.remove());a===r.KEY_ARROW_UP_COMMAND?(w.forEach(q=>u.insertBefore(q)),u.insertBefore(b)):(u.insertAfter(b),u=b,w.forEach(q=>{u.insertAfter(q);u=q}));c.setTextNodeRange(k,h,l,m);return!0}
|
|
22
22
|
function J(a,b){let c=r.$getSelection();if(!r.$isRangeSelection(c))return!1;let {anchor:d,focus:f}=c,h=d.getNode(),m=f.getNode();a=a===r.MOVE_TO_START;if(!v.$isCodeHighlightNode(h)||!v.$isCodeHighlightNode(m))return!1;let k,l;a?{node:k,offset:l}=y(m):{node:k,offset:l}=z(m);null!==k&&-1!==l&&c.setTextNodeRange(k,l,k,l);b.preventDefault();b.stopPropagation();return!0}
|
|
23
23
|
let K={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"},L={javascript:"js",md:"markdown",plaintext:"plain",python:"py",text:"plain"};function M(a){return L[a]||a}
|
|
24
|
-
class N extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new N(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=
|
|
25
|
-
a),c&&g.addClassNamesToElement(b,c));return d}static importJSON(a){let b=Q(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
|
|
26
|
-
let
|
|
27
|
-
class
|
|
28
|
-
return!1}static importDOM(){return{code:a=>null!=a.textContent&&/\r?\n/.test(a.textContent)?{conversion:
|
|
29
|
-
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=
|
|
30
|
-
d
|
|
31
|
-
function Z(a){return new
|
|
32
|
-
exports.$createCodeHighlightNode=Q;exports.$createCodeNode=Z;exports.$isCodeHighlightNode=R;exports.$isCodeNode=function(a){return a instanceof
|
|
33
|
-
exports.getFirstCodeHighlightNodeOfLine=
|
|
24
|
+
class N extends r.TextNode{constructor(a,b,c){super(a,c);this.__highlightType=b}static getType(){return"code-highlight"}static clone(a){return new N(a.__text,a.__highlightType||void 0,a.__key)}getHighlightType(){return this.getLatest().__highlightType}createDOM(a){let b=super.createDOM(a);a=O(a.theme,this.__highlightType);g.addClassNamesToElement(b,a);return b}updateDOM(a,b,c){let d=super.updateDOM(a,b,c);a=O(c.theme,a.__highlightType);c=O(c.theme,this.__highlightType);a!==c&&(a&&g.removeClassNamesFromElement(b,
|
|
25
|
+
a),c&&g.addClassNamesToElement(b,c));return d}static importJSON(a){let b=Q(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 O(a,b){return b&&a&&a.codeHighlight&&a.codeHighlight[b]}function Q(a,b){return new N(a,b)}function R(a){return a instanceof N}
|
|
26
|
+
function S(a){let b=null,c=a.getPreviousSiblings();for(c.push(a);0<c.length&&(a=c.pop(),R(a)&&(b=a),!r.$isLineBreakNode(a)););return b}let T=a=>null!=a&&e.languages.hasOwnProperty(a)?a:void 0;
|
|
27
|
+
class U extends r.ElementNode{static getType(){return"code"}static clone(a){return new U(a.__language,a.__key)}constructor(a,b){super(b);this.__language=T(a)}createDOM(a){let b=document.createElement("code");g.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");
|
|
28
|
+
return!1}static importDOM(){return{code:a=>null!=a.textContent&&/\r?\n/.test(a.textContent)?{conversion:V,priority:1}:null,div:()=>({conversion:W,priority:1}),pre:()=>({conversion:V,priority:0}),table:a=>X(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&&X(b)?{conversion:Y,priority:4}:null},tr:a=>(a=a.closest("table"))&&X(a)?{conversion:Y,priority:4}:null}}static importJSON(a){let b=Z(a.language);b.setFormat(a.format);
|
|
29
|
+
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=S(b);if(null!=d){c=0;for(d=d.getTextContent();c<
|
|
30
|
+
d.length&&/[\t ]/.test(d[c]);)c+=1;if(0<c)return c=d.substring(0,c),c=Q(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=T(a)}getLanguage(){return this.getLatest().__language}}
|
|
31
|
+
function Z(a){return new U(a)}function V(){return{node:Z()}}function W(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")?Z():null}}function aa(){return{node:Z()}}function Y(){return{node:null}}function ba(a){return{after:b=>{a.parentNode&&a.parentNode.nextSibling&&b.push(r.$createLineBreakNode());return b},node:null}}function X(a){return a.classList.contains("js-file-line-container")}
|
|
32
|
+
exports.$createCodeHighlightNode=Q;exports.$createCodeNode=Z;exports.$isCodeHighlightNode=R;exports.$isCodeNode=function(a){return a instanceof U};exports.CODE_LANGUAGE_FRIENDLY_NAME_MAP=K;exports.CODE_LANGUAGE_MAP=L;exports.CodeHighlightNode=N;exports.CodeNode=U;exports.DEFAULT_CODE_LANGUAGE="javascript";exports.getCodeLanguages=()=>Object.keys(e.languages).filter(a=>"function"!==typeof e.languages[a]).sort();exports.getDefaultCodeLanguage=()=>"javascript";exports.getEndOfCodeInLine=z;
|
|
33
|
+
exports.getFirstCodeHighlightNodeOfLine=S;exports.getLanguageFriendlyName=function(a){a=M(a);return K[a]||a};exports.getLastCodeHighlightNodeOfLine=function(a){let b=null,c=a.getNextSiblings();for(c.unshift(a);0<c.length&&(a=c.shift(),R(a)&&(b=a),!r.$isLineBreakNode(a)););return b};exports.getStartOfCodeInLine=y;exports.normalizeCodeLang=M;
|
|
34
34
|
exports.registerCodeHighlighting=function(a){if(!a.hasNodes([v.CodeNode,v.CodeHighlightNode]))throw Error("CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor");return g.mergeRegister(a.registerMutationListener(v.CodeNode,b=>{a.update(()=>{for(let [f,h]of b)if("destroyed"!==h){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 m=d.length;if(m===c.__cachedChildrenLength)break a;c.__cachedChildrenLength=m;
|
|
35
35
|
let k="1",l=1;for(let n=0;n<m;n++)r.$isLineBreakNode(d[n])&&(k+="\n"+ ++l);c.setAttribute("data-gutter",k)}}})}),a.registerNodeTransform(v.CodeNode,b=>B(b,a)),a.registerNodeTransform(r.TextNode,b=>A(b,a)),a.registerNodeTransform(v.CodeHighlightNode,b=>A(b,a)),a.registerCommand(r.INDENT_CONTENT_COMMAND,()=>G(r.INDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.OUTDENT_CONTENT_COMMAND,()=>G(r.OUTDENT_CONTENT_COMMAND),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_UP_COMMAND,
|
|
36
36
|
b=>I(r.KEY_ARROW_UP_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.KEY_ARROW_DOWN_COMMAND,b=>I(r.KEY_ARROW_DOWN_COMMAND,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_END,b=>J(r.MOVE_TO_END,b),r.COMMAND_PRIORITY_LOW),a.registerCommand(r.MOVE_TO_START,b=>J(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.3.
|
|
11
|
+
"version": "0.3.10",
|
|
12
12
|
"main": "LexicalCode.js",
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"lexical": "0.3.
|
|
14
|
+
"lexical": "0.3.10"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@lexical/utils": "0.3.
|
|
17
|
+
"@lexical/utils": "0.3.10",
|
|
18
18
|
"prismjs": "^1.27.0"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|