@mx-space/cli 0.1.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.
- package/LICENSE +33 -0
- package/README.md +375 -0
- package/ROADMAP.md +42 -0
- package/bin/mxs.cjs +40 -0
- package/dist/Lexical.dev-DpU35QTu.mjs +10992 -0
- package/dist/Lexical.dev-DpU35QTu.mjs.map +1 -0
- package/dist/Lexical.node-gYNDt_p9.mjs +247 -0
- package/dist/Lexical.node-gYNDt_p9.mjs.map +1 -0
- package/dist/Lexical.prod-t4c3bHV3.mjs +5579 -0
- package/dist/Lexical.prod-t4c3bHV3.mjs.map +1 -0
- package/dist/LexicalClipboard.dev-CdeeWCIq.mjs +496 -0
- package/dist/LexicalClipboard.dev-CdeeWCIq.mjs.map +1 -0
- package/dist/LexicalClipboard.node-0e9GBL1g.mjs +26 -0
- package/dist/LexicalClipboard.node-0e9GBL1g.mjs.map +1 -0
- package/dist/LexicalClipboard.prod-CsCWYmV7.mjs +293 -0
- package/dist/LexicalClipboard.prod-CsCWYmV7.mjs.map +1 -0
- package/dist/LexicalCodeCore.dev-haI2cqH8.mjs +539 -0
- package/dist/LexicalCodeCore.dev-haI2cqH8.mjs.map +1 -0
- package/dist/LexicalCodeCore.prod-D_k7zuE5.mjs +383 -0
- package/dist/LexicalCodeCore.prod-D_k7zuE5.mjs.map +1 -0
- package/dist/LexicalDragon.dev-CAggdFh_.mjs +90 -0
- package/dist/LexicalDragon.dev-CAggdFh_.mjs.map +1 -0
- package/dist/LexicalDragon.node-QMR_wqJg.mjs +15 -0
- package/dist/LexicalDragon.node-QMR_wqJg.mjs.map +1 -0
- package/dist/LexicalDragon.prod-OssQhwS-.mjs +61 -0
- package/dist/LexicalDragon.prod-OssQhwS-.mjs.map +1 -0
- package/dist/LexicalExtension.dev-CtDZiMCU.mjs +1665 -0
- package/dist/LexicalExtension.dev-CtDZiMCU.mjs.map +1 -0
- package/dist/LexicalExtension.node-BM0gh8zu.mjs +51 -0
- package/dist/LexicalExtension.node-BM0gh8zu.mjs.map +1 -0
- package/dist/LexicalExtension.prod-Ug6emhEO.mjs +971 -0
- package/dist/LexicalExtension.prod-Ug6emhEO.mjs.map +1 -0
- package/dist/LexicalHeadless.dev-D4yQpl_s.mjs +45 -0
- package/dist/LexicalHeadless.dev-D4yQpl_s.mjs.map +1 -0
- package/dist/LexicalHeadless.prod-jeN65B3k.mjs +31 -0
- package/dist/LexicalHeadless.prod-jeN65B3k.mjs.map +1 -0
- package/dist/LexicalHtml.dev-BdU1_ITQ.mjs +686 -0
- package/dist/LexicalHtml.dev-BdU1_ITQ.mjs.map +1 -0
- package/dist/LexicalHtml.node-DLtAh00E.mjs +26 -0
- package/dist/LexicalHtml.node-DLtAh00E.mjs.map +1 -0
- package/dist/LexicalHtml.prod-DdLE1HHT.mjs +432 -0
- package/dist/LexicalHtml.prod-DdLE1HHT.mjs.map +1 -0
- package/dist/LexicalLink.dev-DK87Biuy.mjs +1084 -0
- package/dist/LexicalLink.dev-DK87Biuy.mjs.map +1 -0
- package/dist/LexicalLink.prod-fssuv6Sf.mjs +717 -0
- package/dist/LexicalLink.prod-fssuv6Sf.mjs.map +1 -0
- package/dist/LexicalList.dev-BJ4dr_rk.mjs +1352 -0
- package/dist/LexicalList.dev-BJ4dr_rk.mjs.map +1 -0
- package/dist/LexicalList.prod-jWBbaWfi.mjs +841 -0
- package/dist/LexicalList.prod-jWBbaWfi.mjs.map +1 -0
- package/dist/LexicalMarkdown.dev-C8e-eh6y.mjs +1207 -0
- package/dist/LexicalMarkdown.dev-C8e-eh6y.mjs.map +1 -0
- package/dist/LexicalMarkdown.prod-k73tZVb2.mjs +756 -0
- package/dist/LexicalMarkdown.prod-k73tZVb2.mjs.map +1 -0
- package/dist/LexicalRichText.dev-CrSqq3K-.mjs +645 -0
- package/dist/LexicalRichText.dev-CrSqq3K-.mjs.map +1 -0
- package/dist/LexicalRichText.node-B7k7wlQz.mjs +106 -0
- package/dist/LexicalRichText.node-B7k7wlQz.mjs.map +1 -0
- package/dist/LexicalRichText.prod-CqvyxQ9m.mjs +429 -0
- package/dist/LexicalRichText.prod-CqvyxQ9m.mjs.map +1 -0
- package/dist/LexicalSelection.dev-sNOHKHe_.mjs +725 -0
- package/dist/LexicalSelection.dev-sNOHKHe_.mjs.map +1 -0
- package/dist/LexicalSelection.node-Di7GwBCZ.mjs +38 -0
- package/dist/LexicalSelection.node-Di7GwBCZ.mjs.map +1 -0
- package/dist/LexicalSelection.prod-SWllPJop.mjs +388 -0
- package/dist/LexicalSelection.prod-SWllPJop.mjs.map +1 -0
- package/dist/LexicalTable.dev-CQkLHXJx.mjs +3262 -0
- package/dist/LexicalTable.dev-CQkLHXJx.mjs.map +1 -0
- package/dist/LexicalTable.prod-BtqCwKSi.mjs +2218 -0
- package/dist/LexicalTable.prod-BtqCwKSi.mjs.map +1 -0
- package/dist/LexicalUtils.dev-DiUpsXE8.mjs +850 -0
- package/dist/LexicalUtils.dev-DiUpsXE8.mjs.map +1 -0
- package/dist/LexicalUtils.node-CmK462d1.mjs +66 -0
- package/dist/LexicalUtils.node-CmK462d1.mjs.map +1 -0
- package/dist/LexicalUtils.prod-bWwV4GAF.mjs +377 -0
- package/dist/LexicalUtils.prod-bWwV4GAF.mjs.map +1 -0
- package/dist/auth-DIFZzoMm.mjs +211 -0
- package/dist/auth-DIFZzoMm.mjs.map +1 -0
- package/dist/bin/mxs.d.mts +927 -0
- package/dist/bin/mxs.mjs +3249 -0
- package/dist/bin/mxs.mjs.map +1 -0
- package/dist/chunk-hT5z_Zn9.mjs +35 -0
- package/dist/config-store-DIu7x0ao.mjs +121 -0
- package/dist/config-store-DIu7x0ao.mjs.map +1 -0
- package/dist/create-B2AOQL1e.mjs +24 -0
- package/dist/create-B2AOQL1e.mjs.map +1 -0
- package/dist/create-CwjGcv2n.mjs +23 -0
- package/dist/create-CwjGcv2n.mjs.map +1 -0
- package/dist/create-DT1l2hue.mjs +23 -0
- package/dist/create-DT1l2hue.mjs.map +1 -0
- package/dist/create-DjlRHPXy.mjs +23 -0
- package/dist/create-DjlRHPXy.mjs.map +1 -0
- package/dist/create-Dz6rJJSS.mjs +19 -0
- package/dist/create-Dz6rJJSS.mjs.map +1 -0
- package/dist/delete-B4dGrrus.mjs +22 -0
- package/dist/delete-B4dGrrus.mjs.map +1 -0
- package/dist/delete-BH6ZngTz.mjs +22 -0
- package/dist/delete-BH6ZngTz.mjs.map +1 -0
- package/dist/delete-BrY5zJ6S.mjs +22 -0
- package/dist/delete-BrY5zJ6S.mjs.map +1 -0
- package/dist/delete-CaG2d_xt.mjs +31 -0
- package/dist/delete-CaG2d_xt.mjs.map +1 -0
- package/dist/delete-YzRliRn8.mjs +31 -0
- package/dist/delete-YzRliRn8.mjs.map +1 -0
- package/dist/document-output-BVB8emLt.mjs +145 -0
- package/dist/document-output-BVB8emLt.mjs.map +1 -0
- package/dist/edit-Bb0Ze4w6.mjs +79 -0
- package/dist/edit-Bb0Ze4w6.mjs.map +1 -0
- package/dist/edit-BeFmC3XD.mjs +80 -0
- package/dist/edit-BeFmC3XD.mjs.map +1 -0
- package/dist/edit-DLDw_ZWX.mjs +86 -0
- package/dist/edit-DLDw_ZWX.mjs.map +1 -0
- package/dist/edit-z55ofr1S.mjs +40 -0
- package/dist/edit-z55ofr1S.mjs.map +1 -0
- package/dist/editor-xrF-j3UE.mjs +42 -0
- package/dist/editor-xrF-j3UE.mjs.map +1 -0
- package/dist/envelope-overlays-DPAlMNW1.mjs +26 -0
- package/dist/envelope-overlays-DPAlMNW1.mjs.map +1 -0
- package/dist/get-2qjq0wgG.mjs +28 -0
- package/dist/get-2qjq0wgG.mjs.map +1 -0
- package/dist/get-BGAk1Zmv.mjs +14 -0
- package/dist/get-BGAk1Zmv.mjs.map +1 -0
- package/dist/get-CRR13lgj.mjs +10 -0
- package/dist/get-CRR13lgj.mjs.map +1 -0
- package/dist/get-ClkpDBTL.mjs +13 -0
- package/dist/get-ClkpDBTL.mjs.map +1 -0
- package/dist/get-DJfUJ3sP.mjs +10 -0
- package/dist/get-DJfUJ3sP.mjs.map +1 -0
- package/dist/get-DiqaQvoS.mjs +14 -0
- package/dist/get-DiqaQvoS.mjs.map +1 -0
- package/dist/index.d.mts +338 -0
- package/dist/index.mjs +10 -0
- package/dist/list-BYzhflDg.mjs +14 -0
- package/dist/list-BYzhflDg.mjs.map +1 -0
- package/dist/list-DY-tPNG-.mjs +10 -0
- package/dist/list-DY-tPNG-.mjs.map +1 -0
- package/dist/list-DlQSkbqx.mjs +10 -0
- package/dist/list-DlQSkbqx.mjs.map +1 -0
- package/dist/list-DsrA5wIz.mjs +15 -0
- package/dist/list-DsrA5wIz.mjs.map +1 -0
- package/dist/list-Fp4nKfQb.mjs +10 -0
- package/dist/list-Fp4nKfQb.mjs.map +1 -0
- package/dist/list-s_tloiEX.mjs +10 -0
- package/dist/list-s_tloiEX.mjs.map +1 -0
- package/dist/litexml-codec-CDoRloiR.mjs +13451 -0
- package/dist/litexml-codec-CDoRloiR.mjs.map +1 -0
- package/dist/login-CLOJ-fTJ.mjs +579 -0
- package/dist/login-CLOJ-fTJ.mjs.map +1 -0
- package/dist/logout-v8ihxsim.mjs +11 -0
- package/dist/logout-v8ihxsim.mjs.map +1 -0
- package/dist/onboarding-640IldLz.mjs +888 -0
- package/dist/onboarding-640IldLz.mjs.map +1 -0
- package/dist/output-BM7aBFwt.mjs +120 -0
- package/dist/output-BM7aBFwt.mjs.map +1 -0
- package/dist/output-CTnO1lYt.d.mts +16 -0
- package/dist/payload-CN11pUto.mjs +547 -0
- package/dist/payload-CN11pUto.mjs.map +1 -0
- package/dist/publish-DkTYB-eK.mjs +23 -0
- package/dist/publish-DkTYB-eK.mjs.map +1 -0
- package/dist/publish-pRBfTJfe.mjs +23 -0
- package/dist/publish-pRBfTJfe.mjs.map +1 -0
- package/dist/resolve-BogJOR7R.mjs +119 -0
- package/dist/resolve-BogJOR7R.mjs.map +1 -0
- package/dist/resolve-Bp1AfBmM.mjs +26 -0
- package/dist/resolve-Bp1AfBmM.mjs.map +1 -0
- package/dist/resolve-Bw5Po9yK.mjs +16 -0
- package/dist/resolve-Bw5Po9yK.mjs.map +1 -0
- package/dist/resolve-CyjMlaoJ.mjs +23 -0
- package/dist/resolve-CyjMlaoJ.mjs.map +1 -0
- package/dist/resolve-helpers-CahPoJ0Y.mjs +30 -0
- package/dist/resolve-helpers-CahPoJ0Y.mjs.map +1 -0
- package/dist/set-BEGQz2si.mjs +43 -0
- package/dist/set-BEGQz2si.mjs.map +1 -0
- package/dist/shared-D0HVBDHI.mjs +39 -0
- package/dist/shared-D0HVBDHI.mjs.map +1 -0
- package/dist/status-LXrN9fI-.mjs +22 -0
- package/dist/status-LXrN9fI-.mjs.map +1 -0
- package/dist/update-B9ynFCdZ.mjs +30 -0
- package/dist/update-B9ynFCdZ.mjs.map +1 -0
- package/dist/update-BMZQPOvR.mjs +28 -0
- package/dist/update-BMZQPOvR.mjs.map +1 -0
- package/dist/update-BXz0l7Lz.mjs +36 -0
- package/dist/update-BXz0l7Lz.mjs.map +1 -0
- package/dist/update-Dx6AF8tf.mjs +30 -0
- package/dist/update-Dx6AF8tf.mjs.map +1 -0
- package/dist/update-q66TLS38.mjs +37 -0
- package/dist/update-q66TLS38.mjs.map +1 -0
- package/dist/whoami-CTkctOEd.mjs +22 -0
- package/dist/whoami-CTkctOEd.mjs.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
import { o as getPeerDependencyFromEditor } from "./LexicalExtension.node-BM0gh8zu.mjs";
|
|
2
|
+
import { At as COMMAND_PRIORITY_LOW, B as $getSiblingCaret, Gn as isHTMLElement, Ht as ElementNode, Mn as defineExtension, Qn as removeClassNamesFromElement, Rn as getTextDirection, Tn as addClassNamesToElement, Y as $isElementNode, ct as $isTextNode, er as setDOMStyleFromCSS, et as $isLineBreakNode, f as $createParagraphNode, g as $createTabNode, j as $getEditor, l as $create, n as $applyNodeReplacement, on as KEY_ENTER_COMMAND, rt as $isRangeSelection, st as $isTabNode, u as $createLineBreakNode, wn as TextNode, z as $getSelection } from "./Lexical.node-gYNDt_p9.mjs";
|
|
3
|
+
//#region ../../node_modules/.pnpm/@lexical+code-core@0.44.0/node_modules/@lexical/code-core/LexicalCodeCore.dev.mjs
|
|
4
|
+
/**
|
|
5
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
13
|
+
*
|
|
14
|
+
* This source code is licensed under the MIT license found in the
|
|
15
|
+
* LICENSE file in the root directory of this source tree.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
function warnOnlyOnce(message) {
|
|
19
|
+
{
|
|
20
|
+
let run = false;
|
|
21
|
+
return () => {
|
|
22
|
+
if (!run) console.warn(message);
|
|
23
|
+
run = true;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
29
|
+
*
|
|
30
|
+
* This source code is licensed under the MIT license found in the
|
|
31
|
+
* LICENSE file in the root directory of this source tree.
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
function formatDevErrorMessage(message) {
|
|
35
|
+
throw new Error(message);
|
|
36
|
+
}
|
|
37
|
+
function $getLastMatchingCodeNode(anchor, direction) {
|
|
38
|
+
let matchingNode = anchor;
|
|
39
|
+
for (let caret = $getSiblingCaret(anchor, direction); caret && ($isCodeHighlightNode(caret.origin) || $isTabNode(caret.origin)); caret = caret.getAdjacentCaret()) matchingNode = caret.origin;
|
|
40
|
+
return matchingNode;
|
|
41
|
+
}
|
|
42
|
+
function $getFirstCodeNodeOfLine(anchor) {
|
|
43
|
+
return $getLastMatchingCodeNode(anchor, "previous");
|
|
44
|
+
}
|
|
45
|
+
function $getLastCodeNodeOfLine(anchor) {
|
|
46
|
+
return $getLastMatchingCodeNode(anchor, "next");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Determines the visual writing direction of a code line.
|
|
50
|
+
*
|
|
51
|
+
* Scans the line segments (CodeHighlightNode/TabNode) from start to end
|
|
52
|
+
* and returns the first strong direction found ("ltr" or "rtl").
|
|
53
|
+
* If no strong character is found, falls back to the parent element's
|
|
54
|
+
* direction. Returns null if indeterminate.
|
|
55
|
+
*/
|
|
56
|
+
function $getCodeLineDirection(anchor) {
|
|
57
|
+
const start = $getFirstCodeNodeOfLine(anchor);
|
|
58
|
+
const end = $getLastCodeNodeOfLine(anchor);
|
|
59
|
+
let node = start;
|
|
60
|
+
while (node !== null) {
|
|
61
|
+
if ($isCodeHighlightNode(node)) {
|
|
62
|
+
const direction = getTextDirection(node.getTextContent());
|
|
63
|
+
if (direction !== null) return direction;
|
|
64
|
+
}
|
|
65
|
+
if (node === end) break;
|
|
66
|
+
node = node.getNextSibling();
|
|
67
|
+
}
|
|
68
|
+
const parent = start.getParent();
|
|
69
|
+
if ($isElementNode(parent)) {
|
|
70
|
+
const parentDirection = parent.getDirection();
|
|
71
|
+
if (parentDirection === "ltr" || parentDirection === "rtl") return parentDirection;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function $getStartOfCodeInLine(anchor, offset) {
|
|
76
|
+
let last = null;
|
|
77
|
+
let lastNonBlank = null;
|
|
78
|
+
let node = anchor;
|
|
79
|
+
let nodeOffset = offset;
|
|
80
|
+
let nodeTextContent = anchor.getTextContent();
|
|
81
|
+
while (true) {
|
|
82
|
+
if (nodeOffset === 0) {
|
|
83
|
+
node = node.getPreviousSibling();
|
|
84
|
+
if (node === null) break;
|
|
85
|
+
if (!($isCodeHighlightNode(node) || $isTabNode(node) || $isLineBreakNode(node))) formatDevErrorMessage(`Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode`);
|
|
86
|
+
if ($isLineBreakNode(node)) {
|
|
87
|
+
last = {
|
|
88
|
+
node,
|
|
89
|
+
offset: 1
|
|
90
|
+
};
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
nodeOffset = Math.max(0, node.getTextContentSize() - 1);
|
|
94
|
+
nodeTextContent = node.getTextContent();
|
|
95
|
+
} else nodeOffset--;
|
|
96
|
+
const character = nodeTextContent[nodeOffset];
|
|
97
|
+
if ($isCodeHighlightNode(node) && character !== " ") lastNonBlank = {
|
|
98
|
+
node,
|
|
99
|
+
offset: nodeOffset
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (lastNonBlank !== null) return lastNonBlank;
|
|
103
|
+
let codeCharacterAtAnchorOffset = null;
|
|
104
|
+
if (offset < anchor.getTextContentSize()) {
|
|
105
|
+
if ($isCodeHighlightNode(anchor)) codeCharacterAtAnchorOffset = anchor.getTextContent()[offset];
|
|
106
|
+
} else {
|
|
107
|
+
const nextSibling = anchor.getNextSibling();
|
|
108
|
+
if ($isCodeHighlightNode(nextSibling)) codeCharacterAtAnchorOffset = nextSibling.getTextContent()[0];
|
|
109
|
+
}
|
|
110
|
+
if (codeCharacterAtAnchorOffset !== null && codeCharacterAtAnchorOffset !== " ") return last;
|
|
111
|
+
else {
|
|
112
|
+
const nextNonBlank = findNextNonBlankInLine(anchor, offset);
|
|
113
|
+
if (nextNonBlank !== null) return nextNonBlank;
|
|
114
|
+
else return last;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function findNextNonBlankInLine(anchor, offset) {
|
|
118
|
+
let node = anchor;
|
|
119
|
+
let nodeOffset = offset;
|
|
120
|
+
let nodeTextContent = anchor.getTextContent();
|
|
121
|
+
let nodeTextContentSize = anchor.getTextContentSize();
|
|
122
|
+
while (true) {
|
|
123
|
+
if (!$isCodeHighlightNode(node) || nodeOffset === nodeTextContentSize) {
|
|
124
|
+
node = node.getNextSibling();
|
|
125
|
+
if (node === null || $isLineBreakNode(node)) return null;
|
|
126
|
+
if ($isCodeHighlightNode(node)) {
|
|
127
|
+
nodeOffset = 0;
|
|
128
|
+
nodeTextContent = node.getTextContent();
|
|
129
|
+
nodeTextContentSize = node.getTextContentSize();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if ($isCodeHighlightNode(node)) {
|
|
133
|
+
if (nodeTextContent[nodeOffset] !== " ") return {
|
|
134
|
+
node,
|
|
135
|
+
offset: nodeOffset
|
|
136
|
+
};
|
|
137
|
+
nodeOffset++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function $getEndOfCodeInLine(anchor) {
|
|
142
|
+
const lastNode = $getLastCodeNodeOfLine(anchor);
|
|
143
|
+
if (!!$isLineBreakNode(lastNode)) formatDevErrorMessage(`Unexpected lineBreakNode in getEndOfCodeInLine`);
|
|
144
|
+
return lastNode;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
148
|
+
*
|
|
149
|
+
* This source code is licensed under the MIT license found in the
|
|
150
|
+
* LICENSE file in the root directory of this source tree.
|
|
151
|
+
*
|
|
152
|
+
*/
|
|
153
|
+
const DEFAULT_CODE_LANGUAGE = "javascript";
|
|
154
|
+
const getDefaultCodeLanguage = () => DEFAULT_CODE_LANGUAGE;
|
|
155
|
+
function hasChildDOMNodeTag(node, tagName) {
|
|
156
|
+
for (const child of node.childNodes) {
|
|
157
|
+
if (isHTMLElement(child) && child.tagName === tagName) return true;
|
|
158
|
+
hasChildDOMNodeTag(child, tagName);
|
|
159
|
+
}
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const LANGUAGE_DATA_ATTRIBUTE = "data-language";
|
|
163
|
+
const HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE = "data-highlight-language";
|
|
164
|
+
const THEME_DATA_ATTRIBUTE = "data-theme";
|
|
165
|
+
const noExtensionDeprecation = warnOnlyOnce("Using CodeNode without CodeExtension is deprecated");
|
|
166
|
+
/** @noInheritDoc */
|
|
167
|
+
var CodeNode = class CodeNode extends ElementNode {
|
|
168
|
+
/** @internal */
|
|
169
|
+
__language;
|
|
170
|
+
/** @internal */
|
|
171
|
+
__theme;
|
|
172
|
+
/** @internal */
|
|
173
|
+
__isSyntaxHighlightSupported;
|
|
174
|
+
static getType() {
|
|
175
|
+
return "code";
|
|
176
|
+
}
|
|
177
|
+
static clone(node) {
|
|
178
|
+
return new CodeNode(node.__language, node.__key);
|
|
179
|
+
}
|
|
180
|
+
constructor(language, key) {
|
|
181
|
+
super(key);
|
|
182
|
+
this.__language = language || void 0;
|
|
183
|
+
this.__isSyntaxHighlightSupported = false;
|
|
184
|
+
this.__theme = void 0;
|
|
185
|
+
}
|
|
186
|
+
afterCloneFrom(prevNode) {
|
|
187
|
+
super.afterCloneFrom(prevNode);
|
|
188
|
+
this.__language = prevNode.__language;
|
|
189
|
+
this.__theme = prevNode.__theme;
|
|
190
|
+
this.__isSyntaxHighlightSupported = prevNode.__isSyntaxHighlightSupported;
|
|
191
|
+
}
|
|
192
|
+
createDOM(config) {
|
|
193
|
+
const element = document.createElement("code");
|
|
194
|
+
addClassNamesToElement(element, config.theme.code);
|
|
195
|
+
element.setAttribute("spellcheck", "false");
|
|
196
|
+
const language = this.getLanguage();
|
|
197
|
+
if (language) {
|
|
198
|
+
element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
|
|
199
|
+
if (this.getIsSyntaxHighlightSupported()) element.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);
|
|
200
|
+
}
|
|
201
|
+
const theme = this.getTheme();
|
|
202
|
+
if (theme) element.setAttribute(THEME_DATA_ATTRIBUTE, theme);
|
|
203
|
+
const style = this.getStyle();
|
|
204
|
+
if (style) setDOMStyleFromCSS(element.style, style);
|
|
205
|
+
return element;
|
|
206
|
+
}
|
|
207
|
+
updateDOM(prevNode, dom, config) {
|
|
208
|
+
const language = this.__language;
|
|
209
|
+
const prevLanguage = prevNode.__language;
|
|
210
|
+
if (language) {
|
|
211
|
+
if (language !== prevLanguage) dom.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
|
|
212
|
+
} else if (prevLanguage) dom.removeAttribute(LANGUAGE_DATA_ATTRIBUTE);
|
|
213
|
+
const isSyntaxHighlightSupported = this.__isSyntaxHighlightSupported;
|
|
214
|
+
if (prevNode.__isSyntaxHighlightSupported && prevLanguage) if (isSyntaxHighlightSupported && language) {
|
|
215
|
+
if (language !== prevLanguage) dom.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);
|
|
216
|
+
} else dom.removeAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE);
|
|
217
|
+
else if (isSyntaxHighlightSupported && language) dom.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);
|
|
218
|
+
const theme = this.__theme;
|
|
219
|
+
const prevTheme = prevNode.__theme;
|
|
220
|
+
if (theme) {
|
|
221
|
+
if (theme !== prevTheme) dom.setAttribute(THEME_DATA_ATTRIBUTE, theme);
|
|
222
|
+
} else if (prevTheme) dom.removeAttribute(THEME_DATA_ATTRIBUTE);
|
|
223
|
+
const style = this.__style;
|
|
224
|
+
const prevStyle = prevNode.__style;
|
|
225
|
+
if (style !== prevStyle) setDOMStyleFromCSS(dom.style, style, prevStyle);
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
exportDOM(editor) {
|
|
229
|
+
const element = document.createElement("pre");
|
|
230
|
+
addClassNamesToElement(element, editor._config.theme.code);
|
|
231
|
+
element.setAttribute("spellcheck", "false");
|
|
232
|
+
const language = this.getLanguage();
|
|
233
|
+
if (language) {
|
|
234
|
+
element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
|
|
235
|
+
if (this.getIsSyntaxHighlightSupported()) element.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);
|
|
236
|
+
}
|
|
237
|
+
const theme = this.getTheme();
|
|
238
|
+
if (theme) element.setAttribute(THEME_DATA_ATTRIBUTE, theme);
|
|
239
|
+
const style = this.getStyle();
|
|
240
|
+
if (style) setDOMStyleFromCSS(element.style, style);
|
|
241
|
+
return { element };
|
|
242
|
+
}
|
|
243
|
+
static importDOM() {
|
|
244
|
+
return {
|
|
245
|
+
code: (node) => {
|
|
246
|
+
return node.textContent != null && (/\r?\n/.test(node.textContent) || hasChildDOMNodeTag(node, "BR")) ? {
|
|
247
|
+
conversion: $convertPreElement,
|
|
248
|
+
priority: 1
|
|
249
|
+
} : null;
|
|
250
|
+
},
|
|
251
|
+
div: () => ({
|
|
252
|
+
conversion: $convertDivElement,
|
|
253
|
+
priority: 1
|
|
254
|
+
}),
|
|
255
|
+
pre: () => ({
|
|
256
|
+
conversion: $convertPreElement,
|
|
257
|
+
priority: 0
|
|
258
|
+
}),
|
|
259
|
+
table: (node) => {
|
|
260
|
+
if (isGitHubCodeTable(node)) return {
|
|
261
|
+
conversion: $convertTableElement,
|
|
262
|
+
priority: 3
|
|
263
|
+
};
|
|
264
|
+
return null;
|
|
265
|
+
},
|
|
266
|
+
td: (node) => {
|
|
267
|
+
const td = node;
|
|
268
|
+
const table = td.closest("table");
|
|
269
|
+
if (isGitHubCodeCell(td) || table && isGitHubCodeTable(table)) return {
|
|
270
|
+
conversion: convertCodeNoop,
|
|
271
|
+
priority: 3
|
|
272
|
+
};
|
|
273
|
+
return null;
|
|
274
|
+
},
|
|
275
|
+
tr: (node) => {
|
|
276
|
+
const table = node.closest("table");
|
|
277
|
+
if (table && isGitHubCodeTable(table)) return {
|
|
278
|
+
conversion: convertCodeNoop,
|
|
279
|
+
priority: 3
|
|
280
|
+
};
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
static importJSON(serializedNode) {
|
|
286
|
+
return $createCodeNode().updateFromJSON(serializedNode);
|
|
287
|
+
}
|
|
288
|
+
updateFromJSON(serializedNode) {
|
|
289
|
+
return super.updateFromJSON(serializedNode).setLanguage(serializedNode.language).setTheme(serializedNode.theme);
|
|
290
|
+
}
|
|
291
|
+
exportJSON() {
|
|
292
|
+
return {
|
|
293
|
+
...super.exportJSON(),
|
|
294
|
+
language: this.getLanguage(),
|
|
295
|
+
theme: this.getTheme()
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
insertNewAfter(selection, restoreSelection = true) {
|
|
299
|
+
if (!getPeerDependencyFromEditor($getEditor(), "@lexical/code")) {
|
|
300
|
+
noExtensionDeprecation();
|
|
301
|
+
const el = $exitCodeNodeOnEnter(selection);
|
|
302
|
+
if (el) return el;
|
|
303
|
+
}
|
|
304
|
+
const { anchor, focus } = selection;
|
|
305
|
+
const firstSelectionNode = (anchor.isBefore(focus) ? anchor : focus).getNode();
|
|
306
|
+
if ($isTextNode(firstSelectionNode)) {
|
|
307
|
+
let node = $getFirstCodeNodeOfLine(firstSelectionNode);
|
|
308
|
+
const insertNodes = [];
|
|
309
|
+
while (true) if ($isTabNode(node)) {
|
|
310
|
+
insertNodes.push($createTabNode());
|
|
311
|
+
node = node.getNextSibling();
|
|
312
|
+
} else if ($isCodeHighlightNode(node)) {
|
|
313
|
+
let spaces = 0;
|
|
314
|
+
const text = node.getTextContent();
|
|
315
|
+
const textSize = node.getTextContentSize();
|
|
316
|
+
while (spaces < textSize && text[spaces] === " ") spaces++;
|
|
317
|
+
if (spaces !== 0) insertNodes.push($createCodeHighlightNode(" ".repeat(spaces)));
|
|
318
|
+
if (spaces !== textSize) break;
|
|
319
|
+
node = node.getNextSibling();
|
|
320
|
+
} else break;
|
|
321
|
+
const split = firstSelectionNode.splitText(anchor.offset)[0];
|
|
322
|
+
const x = anchor.offset === 0 ? 0 : 1;
|
|
323
|
+
const index = split.getIndexWithinParent() + x;
|
|
324
|
+
const codeNode = firstSelectionNode.getParentOrThrow();
|
|
325
|
+
const nodesToInsert = [$createLineBreakNode(), ...insertNodes];
|
|
326
|
+
codeNode.splice(index, 0, nodesToInsert);
|
|
327
|
+
const last = insertNodes[insertNodes.length - 1];
|
|
328
|
+
if (last) last.select();
|
|
329
|
+
else if (anchor.offset === 0) split.selectPrevious();
|
|
330
|
+
else split.getNextSibling().selectNext(0, 0);
|
|
331
|
+
}
|
|
332
|
+
if ($isCodeNode(firstSelectionNode)) {
|
|
333
|
+
const { offset } = selection.anchor;
|
|
334
|
+
firstSelectionNode.splice(offset, 0, [$createLineBreakNode()]);
|
|
335
|
+
firstSelectionNode.select(offset + 1, offset + 1);
|
|
336
|
+
}
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
canIndent() {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
collapseAtStart() {
|
|
343
|
+
const paragraph = $createParagraphNode();
|
|
344
|
+
this.getChildren().forEach((child) => paragraph.append(child));
|
|
345
|
+
this.replace(paragraph);
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
setLanguage(language) {
|
|
349
|
+
const writable = this.getWritable();
|
|
350
|
+
writable.__language = language || void 0;
|
|
351
|
+
return writable;
|
|
352
|
+
}
|
|
353
|
+
getLanguage() {
|
|
354
|
+
return this.getLatest().__language;
|
|
355
|
+
}
|
|
356
|
+
setIsSyntaxHighlightSupported(isSupported) {
|
|
357
|
+
const writable = this.getWritable();
|
|
358
|
+
writable.__isSyntaxHighlightSupported = isSupported;
|
|
359
|
+
return writable;
|
|
360
|
+
}
|
|
361
|
+
getIsSyntaxHighlightSupported() {
|
|
362
|
+
return this.getLatest().__isSyntaxHighlightSupported;
|
|
363
|
+
}
|
|
364
|
+
setTheme(theme) {
|
|
365
|
+
const writable = this.getWritable();
|
|
366
|
+
writable.__theme = theme || void 0;
|
|
367
|
+
return writable;
|
|
368
|
+
}
|
|
369
|
+
getTheme() {
|
|
370
|
+
return this.getLatest().__theme;
|
|
371
|
+
}
|
|
372
|
+
};
|
|
373
|
+
function $createCodeNode(language, theme) {
|
|
374
|
+
return $create(CodeNode).setLanguage(language).setTheme(theme);
|
|
375
|
+
}
|
|
376
|
+
function $isCodeNode(node) {
|
|
377
|
+
return node instanceof CodeNode;
|
|
378
|
+
}
|
|
379
|
+
function $convertPreElement(domNode) {
|
|
380
|
+
return { node: $createCodeNode(domNode.getAttribute(LANGUAGE_DATA_ATTRIBUTE)) };
|
|
381
|
+
}
|
|
382
|
+
function $convertDivElement(domNode) {
|
|
383
|
+
const div = domNode;
|
|
384
|
+
const isCode = isCodeElement(div);
|
|
385
|
+
if (!isCode && !isCodeChildElement(div)) return { node: null };
|
|
386
|
+
return { node: isCode ? $createCodeNode() : null };
|
|
387
|
+
}
|
|
388
|
+
function $convertTableElement() {
|
|
389
|
+
return { node: $createCodeNode() };
|
|
390
|
+
}
|
|
391
|
+
function convertCodeNoop() {
|
|
392
|
+
return { node: null };
|
|
393
|
+
}
|
|
394
|
+
function isCodeElement(div) {
|
|
395
|
+
return div.style.fontFamily.match("monospace") !== null;
|
|
396
|
+
}
|
|
397
|
+
function isCodeChildElement(node) {
|
|
398
|
+
let parent = node.parentElement;
|
|
399
|
+
while (parent !== null) {
|
|
400
|
+
if (isCodeElement(parent)) return true;
|
|
401
|
+
parent = parent.parentElement;
|
|
402
|
+
}
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
function isGitHubCodeCell(cell) {
|
|
406
|
+
return cell.classList.contains("js-file-line");
|
|
407
|
+
}
|
|
408
|
+
function isGitHubCodeTable(table) {
|
|
409
|
+
return table.classList.contains("js-file-line-container");
|
|
410
|
+
}
|
|
411
|
+
function $exitCodeNodeOnEnter(selection) {
|
|
412
|
+
const { anchor } = selection;
|
|
413
|
+
if (selection.isCollapsed() && anchor.type === "element") {
|
|
414
|
+
const codeNode = anchor.getNode();
|
|
415
|
+
if ($isCodeNode(codeNode)) {
|
|
416
|
+
const childrenSize = codeNode.getChildrenSize();
|
|
417
|
+
if (childrenSize >= 2 && anchor.offset === childrenSize) {
|
|
418
|
+
const lastChild = codeNode.getLastChild();
|
|
419
|
+
if ($isLineBreakNode(lastChild) && $isLineBreakNode(lastChild.getPreviousSibling())) {
|
|
420
|
+
const newElement = $createParagraphNode();
|
|
421
|
+
codeNode.splice(childrenSize - 2, 2, []).insertAfter(newElement, false);
|
|
422
|
+
newElement.select();
|
|
423
|
+
return newElement;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
432
|
+
*
|
|
433
|
+
* This source code is licensed under the MIT license found in the
|
|
434
|
+
* LICENSE file in the root directory of this source tree.
|
|
435
|
+
*
|
|
436
|
+
*/
|
|
437
|
+
/** @noInheritDoc */
|
|
438
|
+
var CodeHighlightNode = class CodeHighlightNode extends TextNode {
|
|
439
|
+
/** @internal */
|
|
440
|
+
__highlightType;
|
|
441
|
+
constructor(text = "", highlightType, key) {
|
|
442
|
+
super(text, key);
|
|
443
|
+
this.__highlightType = highlightType;
|
|
444
|
+
}
|
|
445
|
+
static getType() {
|
|
446
|
+
return "code-highlight";
|
|
447
|
+
}
|
|
448
|
+
static clone(node) {
|
|
449
|
+
return new CodeHighlightNode(node.__text, node.__highlightType || void 0, node.__key);
|
|
450
|
+
}
|
|
451
|
+
afterCloneFrom(prevNode) {
|
|
452
|
+
super.afterCloneFrom(prevNode);
|
|
453
|
+
this.__highlightType = prevNode.__highlightType;
|
|
454
|
+
}
|
|
455
|
+
getHighlightType() {
|
|
456
|
+
return this.getLatest().__highlightType;
|
|
457
|
+
}
|
|
458
|
+
setHighlightType(highlightType) {
|
|
459
|
+
const self = this.getWritable();
|
|
460
|
+
self.__highlightType = highlightType || void 0;
|
|
461
|
+
return self;
|
|
462
|
+
}
|
|
463
|
+
canHaveFormat() {
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
createDOM(config) {
|
|
467
|
+
const element = super.createDOM(config);
|
|
468
|
+
addClassNamesToElement(element, getHighlightThemeClass(config.theme, this.__highlightType));
|
|
469
|
+
return element;
|
|
470
|
+
}
|
|
471
|
+
updateDOM(prevNode, dom, config) {
|
|
472
|
+
const update = super.updateDOM(prevNode, dom, config);
|
|
473
|
+
const prevClassName = getHighlightThemeClass(config.theme, prevNode.__highlightType);
|
|
474
|
+
const nextClassName = getHighlightThemeClass(config.theme, this.__highlightType);
|
|
475
|
+
if (prevClassName !== nextClassName) {
|
|
476
|
+
if (prevClassName) removeClassNamesFromElement(dom, prevClassName);
|
|
477
|
+
if (nextClassName) addClassNamesToElement(dom, nextClassName);
|
|
478
|
+
}
|
|
479
|
+
return update;
|
|
480
|
+
}
|
|
481
|
+
static importJSON(serializedNode) {
|
|
482
|
+
return $createCodeHighlightNode().updateFromJSON(serializedNode);
|
|
483
|
+
}
|
|
484
|
+
updateFromJSON(serializedNode) {
|
|
485
|
+
return super.updateFromJSON(serializedNode).setHighlightType(serializedNode.highlightType);
|
|
486
|
+
}
|
|
487
|
+
exportJSON() {
|
|
488
|
+
return {
|
|
489
|
+
...super.exportJSON(),
|
|
490
|
+
highlightType: this.getHighlightType()
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
setFormat(format) {
|
|
494
|
+
return this;
|
|
495
|
+
}
|
|
496
|
+
isParentRequired() {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
createParentElementNode() {
|
|
500
|
+
return $createCodeNode();
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
function getHighlightThemeClass(theme, highlightType) {
|
|
504
|
+
return highlightType && theme && theme.codeHighlight && theme.codeHighlight[highlightType];
|
|
505
|
+
}
|
|
506
|
+
function $createCodeHighlightNode(text = "", highlightType) {
|
|
507
|
+
return $applyNodeReplacement(new CodeHighlightNode(text, highlightType));
|
|
508
|
+
}
|
|
509
|
+
function $isCodeHighlightNode(node) {
|
|
510
|
+
return node instanceof CodeHighlightNode;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
514
|
+
*
|
|
515
|
+
* This source code is licensed under the MIT license found in the
|
|
516
|
+
* LICENSE file in the root directory of this source tree.
|
|
517
|
+
*
|
|
518
|
+
*/
|
|
519
|
+
/**
|
|
520
|
+
* Add code blocks to the editor (syntax highlighting provided separately)
|
|
521
|
+
*/
|
|
522
|
+
const CodeExtension = defineExtension({
|
|
523
|
+
name: "@lexical/code",
|
|
524
|
+
nodes: () => [CodeNode, CodeHighlightNode],
|
|
525
|
+
register(editor) {
|
|
526
|
+
return editor.registerCommand(KEY_ENTER_COMMAND, (event) => {
|
|
527
|
+
const selection = $getSelection();
|
|
528
|
+
if ($isRangeSelection(selection) && $exitCodeNodeOnEnter(selection)) {
|
|
529
|
+
event.preventDefault();
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
return false;
|
|
533
|
+
}, COMMAND_PRIORITY_LOW);
|
|
534
|
+
}
|
|
535
|
+
});
|
|
536
|
+
//#endregion
|
|
537
|
+
export { $createCodeHighlightNode, $createCodeNode, $getCodeLineDirection, $getEndOfCodeInLine, $getFirstCodeNodeOfLine, $getLastCodeNodeOfLine, $getStartOfCodeInLine, $isCodeHighlightNode, $isCodeNode, CodeExtension, CodeHighlightNode, CodeNode, DEFAULT_CODE_LANGUAGE, getDefaultCodeLanguage };
|
|
538
|
+
|
|
539
|
+
//# sourceMappingURL=LexicalCodeCore.dev-haI2cqH8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LexicalCodeCore.dev-haI2cqH8.mjs","names":["table","tr"],"sources":["../../../node_modules/.pnpm/@lexical+code-core@0.44.0/node_modules/@lexical/code-core/LexicalCodeCore.dev.mjs"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { getTextDirection, $isElementNode, $isTabNode, $isLineBreakNode, $getSiblingCaret, $create, ElementNode, addClassNamesToElement, setDOMStyleFromCSS, $getEditor, $isTextNode, $createTabNode, $createLineBreakNode, $createParagraphNode, isHTMLElement, $applyNodeReplacement, TextNode, removeClassNamesFromElement, defineExtension, KEY_ENTER_COMMAND, $getSelection, $isRangeSelection, COMMAND_PRIORITY_LOW } from 'lexical';\nimport { getPeerDependencyFromEditor } from '@lexical/extension';\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/*@__INLINE__*/\nfunction warnOnlyOnce(message) {\n {\n let run = false;\n return () => {\n if (!run) {\n console.warn(message);\n }\n run = true;\n };\n }\n}\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n// Do not require this module directly! Use normal `invariant` calls.\n\nfunction formatDevErrorMessage(message) {\n throw new Error(message);\n}\n\nfunction $getLastMatchingCodeNode(anchor, direction) {\n let matchingNode = anchor;\n for (let caret = $getSiblingCaret(anchor, direction); caret && ($isCodeHighlightNode(caret.origin) || $isTabNode(caret.origin)); caret = caret.getAdjacentCaret()) {\n matchingNode = caret.origin;\n }\n return matchingNode;\n}\nfunction $getFirstCodeNodeOfLine(anchor) {\n return $getLastMatchingCodeNode(anchor, 'previous');\n}\nfunction $getLastCodeNodeOfLine(anchor) {\n return $getLastMatchingCodeNode(anchor, 'next');\n}\n\n/**\n * Determines the visual writing direction of a code line.\n *\n * Scans the line segments (CodeHighlightNode/TabNode) from start to end\n * and returns the first strong direction found (\"ltr\" or \"rtl\").\n * If no strong character is found, falls back to the parent element's\n * direction. Returns null if indeterminate.\n */\nfunction $getCodeLineDirection(anchor) {\n const start = $getFirstCodeNodeOfLine(anchor);\n const end = $getLastCodeNodeOfLine(anchor);\n let node = start;\n while (node !== null) {\n if ($isCodeHighlightNode(node)) {\n const direction = getTextDirection(node.getTextContent());\n if (direction !== null) {\n return direction;\n }\n }\n if (node === end) {\n break;\n }\n node = node.getNextSibling();\n }\n const parent = start.getParent();\n if ($isElementNode(parent)) {\n const parentDirection = parent.getDirection();\n if (parentDirection === 'ltr' || parentDirection === 'rtl') {\n return parentDirection;\n }\n }\n return null;\n}\nfunction $getStartOfCodeInLine(anchor, offset) {\n let last = null;\n let lastNonBlank = null;\n let node = anchor;\n let nodeOffset = offset;\n let nodeTextContent = anchor.getTextContent();\n while (true) {\n if (nodeOffset === 0) {\n node = node.getPreviousSibling();\n if (node === null) {\n break;\n }\n if (!($isCodeHighlightNode(node) || $isTabNode(node) || $isLineBreakNode(node))) {\n formatDevErrorMessage(`Expected a valid Code Node: CodeHighlightNode, TabNode, LineBreakNode`);\n }\n if ($isLineBreakNode(node)) {\n last = {\n node,\n offset: 1\n };\n break;\n }\n nodeOffset = Math.max(0, node.getTextContentSize() - 1);\n nodeTextContent = node.getTextContent();\n } else {\n nodeOffset--;\n }\n const character = nodeTextContent[nodeOffset];\n if ($isCodeHighlightNode(node) && character !== ' ') {\n lastNonBlank = {\n node,\n offset: nodeOffset\n };\n }\n }\n // lastNonBlank !== null: anchor in the middle of code; move to line beginning\n if (lastNonBlank !== null) {\n return lastNonBlank;\n }\n // Spaces, tabs or nothing ahead of anchor\n let codeCharacterAtAnchorOffset = null;\n if (offset < anchor.getTextContentSize()) {\n if ($isCodeHighlightNode(anchor)) {\n codeCharacterAtAnchorOffset = anchor.getTextContent()[offset];\n }\n } else {\n const nextSibling = anchor.getNextSibling();\n if ($isCodeHighlightNode(nextSibling)) {\n codeCharacterAtAnchorOffset = nextSibling.getTextContent()[0];\n }\n }\n if (codeCharacterAtAnchorOffset !== null && codeCharacterAtAnchorOffset !== ' ') {\n // Borderline whitespace and code, move to line beginning\n return last;\n } else {\n const nextNonBlank = findNextNonBlankInLine(anchor, offset);\n if (nextNonBlank !== null) {\n return nextNonBlank;\n } else {\n return last;\n }\n }\n}\nfunction findNextNonBlankInLine(anchor, offset) {\n let node = anchor;\n let nodeOffset = offset;\n let nodeTextContent = anchor.getTextContent();\n let nodeTextContentSize = anchor.getTextContentSize();\n while (true) {\n if (!$isCodeHighlightNode(node) || nodeOffset === nodeTextContentSize) {\n node = node.getNextSibling();\n if (node === null || $isLineBreakNode(node)) {\n return null;\n }\n if ($isCodeHighlightNode(node)) {\n nodeOffset = 0;\n nodeTextContent = node.getTextContent();\n nodeTextContentSize = node.getTextContentSize();\n }\n }\n if ($isCodeHighlightNode(node)) {\n if (nodeTextContent[nodeOffset] !== ' ') {\n return {\n node,\n offset: nodeOffset\n };\n }\n nodeOffset++;\n }\n }\n}\nfunction $getEndOfCodeInLine(anchor) {\n const lastNode = $getLastCodeNodeOfLine(anchor);\n if (!!$isLineBreakNode(lastNode)) {\n formatDevErrorMessage(`Unexpected lineBreakNode in getEndOfCodeInLine`);\n }\n return lastNode;\n}\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nconst DEFAULT_CODE_LANGUAGE = 'javascript';\nconst getDefaultCodeLanguage = () => DEFAULT_CODE_LANGUAGE;\nfunction hasChildDOMNodeTag(node, tagName) {\n for (const child of node.childNodes) {\n if (isHTMLElement(child) && child.tagName === tagName) {\n return true;\n }\n hasChildDOMNodeTag(child, tagName);\n }\n return false;\n}\nconst LANGUAGE_DATA_ATTRIBUTE = 'data-language';\nconst HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE = 'data-highlight-language';\nconst THEME_DATA_ATTRIBUTE = 'data-theme';\nconst noExtensionDeprecation = warnOnlyOnce('Using CodeNode without CodeExtension is deprecated');\n\n/** @noInheritDoc */\nclass CodeNode extends ElementNode {\n /** @internal */\n __language;\n /** @internal */\n __theme;\n /** @internal */\n __isSyntaxHighlightSupported;\n static getType() {\n return 'code';\n }\n static clone(node) {\n return new CodeNode(node.__language, node.__key);\n }\n constructor(language, key) {\n super(key);\n this.__language = language || undefined;\n this.__isSyntaxHighlightSupported = false;\n this.__theme = undefined;\n }\n afterCloneFrom(prevNode) {\n super.afterCloneFrom(prevNode);\n this.__language = prevNode.__language;\n this.__theme = prevNode.__theme;\n this.__isSyntaxHighlightSupported = prevNode.__isSyntaxHighlightSupported;\n }\n\n // View\n createDOM(config) {\n const element = document.createElement('code');\n addClassNamesToElement(element, config.theme.code);\n element.setAttribute('spellcheck', 'false');\n const language = this.getLanguage();\n if (language) {\n element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);\n if (this.getIsSyntaxHighlightSupported()) {\n element.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);\n }\n }\n const theme = this.getTheme();\n if (theme) {\n element.setAttribute(THEME_DATA_ATTRIBUTE, theme);\n }\n const style = this.getStyle();\n if (style) {\n setDOMStyleFromCSS(element.style, style);\n }\n return element;\n }\n updateDOM(prevNode, dom, config) {\n const language = this.__language;\n const prevLanguage = prevNode.__language;\n if (language) {\n if (language !== prevLanguage) {\n dom.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);\n }\n } else if (prevLanguage) {\n dom.removeAttribute(LANGUAGE_DATA_ATTRIBUTE);\n }\n const isSyntaxHighlightSupported = this.__isSyntaxHighlightSupported;\n const prevIsSyntaxHighlightSupported = prevNode.__isSyntaxHighlightSupported;\n if (prevIsSyntaxHighlightSupported && prevLanguage) {\n if (isSyntaxHighlightSupported && language) {\n if (language !== prevLanguage) {\n dom.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);\n }\n } else {\n dom.removeAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE);\n }\n } else if (isSyntaxHighlightSupported && language) {\n dom.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);\n }\n const theme = this.__theme;\n const prevTheme = prevNode.__theme;\n if (theme) {\n if (theme !== prevTheme) {\n dom.setAttribute(THEME_DATA_ATTRIBUTE, theme);\n }\n } else if (prevTheme) {\n dom.removeAttribute(THEME_DATA_ATTRIBUTE);\n }\n const style = this.__style;\n const prevStyle = prevNode.__style;\n if (style !== prevStyle) {\n setDOMStyleFromCSS(dom.style, style, prevStyle);\n }\n return false;\n }\n exportDOM(editor) {\n const element = document.createElement('pre');\n addClassNamesToElement(element, editor._config.theme.code);\n element.setAttribute('spellcheck', 'false');\n const language = this.getLanguage();\n if (language) {\n element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);\n if (this.getIsSyntaxHighlightSupported()) {\n element.setAttribute(HIGHLIGHT_LANGUAGE_DATA_ATTRIBUTE, language);\n }\n }\n const theme = this.getTheme();\n if (theme) {\n element.setAttribute(THEME_DATA_ATTRIBUTE, theme);\n }\n const style = this.getStyle();\n if (style) {\n setDOMStyleFromCSS(element.style, style);\n }\n return {\n element\n };\n }\n static importDOM() {\n return {\n // Typically <pre> is used for code blocks, and <code> for inline code styles\n // but if it's a multi line <code> we'll create a block. Pass through to\n // inline format handled by TextNode otherwise.\n code: node => {\n const isMultiLine = node.textContent != null && (/\\r?\\n/.test(node.textContent) || hasChildDOMNodeTag(node, 'BR'));\n return isMultiLine ? {\n conversion: $convertPreElement,\n priority: 1\n } : null;\n },\n div: () => ({\n conversion: $convertDivElement,\n priority: 1\n }),\n pre: () => ({\n conversion: $convertPreElement,\n priority: 0\n }),\n table: node => {\n const table = node;\n // domNode is a <table> since we matched it by nodeName\n if (isGitHubCodeTable(table)) {\n return {\n conversion: $convertTableElement,\n priority: 3\n };\n }\n return null;\n },\n td: node => {\n // element is a <td> since we matched it by nodeName\n const td = node;\n const table = td.closest('table');\n if (isGitHubCodeCell(td) || table && isGitHubCodeTable(table)) {\n // Return a no-op if it's a table cell in a code table, but not a code line.\n // Otherwise it'll fall back to the T\n return {\n conversion: convertCodeNoop,\n priority: 3\n };\n }\n return null;\n },\n tr: node => {\n // element is a <tr> since we matched it by nodeName\n const tr = node;\n const table = tr.closest('table');\n if (table && isGitHubCodeTable(table)) {\n return {\n conversion: convertCodeNoop,\n priority: 3\n };\n }\n return null;\n }\n };\n }\n static importJSON(serializedNode) {\n return $createCodeNode().updateFromJSON(serializedNode);\n }\n updateFromJSON(serializedNode) {\n return super.updateFromJSON(serializedNode).setLanguage(serializedNode.language).setTheme(serializedNode.theme);\n }\n exportJSON() {\n return {\n ...super.exportJSON(),\n language: this.getLanguage(),\n theme: this.getTheme()\n };\n }\n\n // Mutation\n insertNewAfter(selection, restoreSelection = true) {\n if (!getPeerDependencyFromEditor($getEditor(), '@lexical/code')) {\n noExtensionDeprecation();\n const el = $exitCodeNodeOnEnter(selection);\n if (el) {\n return el;\n }\n }\n // If the selection is within the codeblock, find all leading tabs and\n // spaces of the current line. Create a new line that has all those\n // tabs and spaces, such that leading indentation is preserved.\n const {\n anchor,\n focus\n } = selection;\n const firstPoint = anchor.isBefore(focus) ? anchor : focus;\n const firstSelectionNode = firstPoint.getNode();\n if ($isTextNode(firstSelectionNode)) {\n let node = $getFirstCodeNodeOfLine(firstSelectionNode);\n const insertNodes = [];\n while (true) {\n if ($isTabNode(node)) {\n insertNodes.push($createTabNode());\n node = node.getNextSibling();\n } else if ($isCodeHighlightNode(node)) {\n let spaces = 0;\n const text = node.getTextContent();\n const textSize = node.getTextContentSize();\n while (spaces < textSize && text[spaces] === ' ') {\n spaces++;\n }\n if (spaces !== 0) {\n insertNodes.push($createCodeHighlightNode(' '.repeat(spaces)));\n }\n if (spaces !== textSize) {\n break;\n }\n node = node.getNextSibling();\n } else {\n break;\n }\n }\n const split = firstSelectionNode.splitText(anchor.offset)[0];\n const x = anchor.offset === 0 ? 0 : 1;\n const index = split.getIndexWithinParent() + x;\n const codeNode = firstSelectionNode.getParentOrThrow();\n const nodesToInsert = [$createLineBreakNode(), ...insertNodes];\n codeNode.splice(index, 0, nodesToInsert);\n const last = insertNodes[insertNodes.length - 1];\n if (last) {\n last.select();\n } else if (anchor.offset === 0) {\n split.selectPrevious();\n } else {\n split.getNextSibling().selectNext(0, 0);\n }\n }\n if ($isCodeNode(firstSelectionNode)) {\n const {\n offset\n } = selection.anchor;\n firstSelectionNode.splice(offset, 0, [$createLineBreakNode()]);\n firstSelectionNode.select(offset + 1, offset + 1);\n }\n return null;\n }\n canIndent() {\n return false;\n }\n collapseAtStart() {\n const paragraph = $createParagraphNode();\n const children = this.getChildren();\n children.forEach(child => paragraph.append(child));\n this.replace(paragraph);\n return true;\n }\n setLanguage(language) {\n const writable = this.getWritable();\n writable.__language = language || undefined;\n return writable;\n }\n getLanguage() {\n return this.getLatest().__language;\n }\n setIsSyntaxHighlightSupported(isSupported) {\n const writable = this.getWritable();\n writable.__isSyntaxHighlightSupported = isSupported;\n return writable;\n }\n getIsSyntaxHighlightSupported() {\n return this.getLatest().__isSyntaxHighlightSupported;\n }\n setTheme(theme) {\n const writable = this.getWritable();\n writable.__theme = theme || undefined;\n return writable;\n }\n getTheme() {\n return this.getLatest().__theme;\n }\n}\nfunction $createCodeNode(language, theme) {\n return $create(CodeNode).setLanguage(language).setTheme(theme);\n}\nfunction $isCodeNode(node) {\n return node instanceof CodeNode;\n}\nfunction $convertPreElement(domNode) {\n const language = domNode.getAttribute(LANGUAGE_DATA_ATTRIBUTE);\n return {\n node: $createCodeNode(language)\n };\n}\nfunction $convertDivElement(domNode) {\n // domNode is a <div> since we matched it by nodeName\n const div = domNode;\n const isCode = isCodeElement(div);\n if (!isCode && !isCodeChildElement(div)) {\n return {\n node: null\n };\n }\n return {\n node: isCode ? $createCodeNode() : null\n };\n}\nfunction $convertTableElement() {\n return {\n node: $createCodeNode()\n };\n}\nfunction convertCodeNoop() {\n return {\n node: null\n };\n}\nfunction isCodeElement(div) {\n return div.style.fontFamily.match('monospace') !== null;\n}\nfunction isCodeChildElement(node) {\n let parent = node.parentElement;\n while (parent !== null) {\n if (isCodeElement(parent)) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n}\nfunction isGitHubCodeCell(cell) {\n return cell.classList.contains('js-file-line');\n}\nfunction isGitHubCodeTable(table) {\n return table.classList.contains('js-file-line-container');\n}\nfunction $exitCodeNodeOnEnter(selection) {\n const {\n anchor\n } = selection;\n if (selection.isCollapsed() && anchor.type === 'element') {\n const codeNode = anchor.getNode();\n if ($isCodeNode(codeNode)) {\n const childrenSize = codeNode.getChildrenSize();\n if (childrenSize >= 2 && anchor.offset === childrenSize) {\n const lastChild = codeNode.getLastChild();\n if ($isLineBreakNode(lastChild) && $isLineBreakNode(lastChild.getPreviousSibling())) {\n const newElement = $createParagraphNode();\n codeNode.splice(childrenSize - 2, 2, []).insertAfter(newElement, false);\n newElement.select();\n return newElement;\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n/** @noInheritDoc */\nclass CodeHighlightNode extends TextNode {\n /** @internal */\n __highlightType;\n constructor(text = '', highlightType, key) {\n super(text, key);\n this.__highlightType = highlightType;\n }\n static getType() {\n return 'code-highlight';\n }\n static clone(node) {\n return new CodeHighlightNode(node.__text, node.__highlightType || undefined, node.__key);\n }\n afterCloneFrom(prevNode) {\n super.afterCloneFrom(prevNode);\n this.__highlightType = prevNode.__highlightType;\n }\n getHighlightType() {\n const self = this.getLatest();\n return self.__highlightType;\n }\n setHighlightType(highlightType) {\n const self = this.getWritable();\n self.__highlightType = highlightType || undefined;\n return self;\n }\n canHaveFormat() {\n return false;\n }\n createDOM(config) {\n const element = super.createDOM(config);\n const className = getHighlightThemeClass(config.theme, this.__highlightType);\n addClassNamesToElement(element, className);\n return element;\n }\n updateDOM(prevNode, dom, config) {\n const update = super.updateDOM(prevNode, dom, config);\n const prevClassName = getHighlightThemeClass(config.theme, prevNode.__highlightType);\n const nextClassName = getHighlightThemeClass(config.theme, this.__highlightType);\n if (prevClassName !== nextClassName) {\n if (prevClassName) {\n removeClassNamesFromElement(dom, prevClassName);\n }\n if (nextClassName) {\n addClassNamesToElement(dom, nextClassName);\n }\n }\n return update;\n }\n static importJSON(serializedNode) {\n return $createCodeHighlightNode().updateFromJSON(serializedNode);\n }\n updateFromJSON(serializedNode) {\n return super.updateFromJSON(serializedNode).setHighlightType(serializedNode.highlightType);\n }\n exportJSON() {\n return {\n ...super.exportJSON(),\n highlightType: this.getHighlightType()\n };\n }\n\n // Prevent formatting (bold, underline, etc)\n setFormat(format) {\n return this;\n }\n isParentRequired() {\n return true;\n }\n createParentElementNode() {\n return $createCodeNode();\n }\n}\nfunction getHighlightThemeClass(theme, highlightType) {\n return highlightType && theme && theme.codeHighlight && theme.codeHighlight[highlightType];\n}\nfunction $createCodeHighlightNode(text = '', highlightType) {\n return $applyNodeReplacement(new CodeHighlightNode(text, highlightType));\n}\nfunction $isCodeHighlightNode(node) {\n return node instanceof CodeHighlightNode;\n}\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n/**\n * Add code blocks to the editor (syntax highlighting provided separately)\n */\nconst CodeExtension = defineExtension({\n name: '@lexical/code',\n nodes: () => [CodeNode, CodeHighlightNode],\n register(editor) {\n return editor.registerCommand(KEY_ENTER_COMMAND, event => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) && $exitCodeNodeOnEnter(selection)) {\n event.preventDefault();\n return true;\n }\n return false;\n }, COMMAND_PRIORITY_LOW);\n }\n});\n\nexport { $createCodeHighlightNode, $createCodeNode, $getCodeLineDirection, $getEndOfCodeInLine, $getFirstCodeNodeOfLine, $getLastCodeNodeOfLine, $getStartOfCodeInLine, $isCodeHighlightNode, $isCodeNode, CodeExtension, CodeHighlightNode, CodeNode, DEFAULT_CODE_LANGUAGE, getDefaultCodeLanguage };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|