@datalayer/jupyter-lexical 0.0.1

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.
Files changed (233) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/lib/components/InsertEquationDialog.d.ts +6 -0
  4. package/lib/components/InsertEquationDialog.js +17 -0
  5. package/lib/components/InsertEquationDialog.js.map +1 -0
  6. package/lib/components/InsertImageDialog.d.ts +13 -0
  7. package/lib/components/InsertImageDialog.js +48 -0
  8. package/lib/components/InsertImageDialog.js.map +1 -0
  9. package/lib/components/JupyterCellComponent.d.ts +2 -0
  10. package/lib/components/JupyterCellComponent.js +12 -0
  11. package/lib/components/JupyterCellComponent.js.map +1 -0
  12. package/lib/components/JupyterOutputComponent.d.ts +13 -0
  13. package/lib/components/JupyterOutputComponent.js +8 -0
  14. package/lib/components/JupyterOutputComponent.js.map +1 -0
  15. package/lib/convert/LexicalToNbFormat.d.ts +4 -0
  16. package/lib/convert/LexicalToNbFormat.js +100 -0
  17. package/lib/convert/LexicalToNbFormat.js.map +1 -0
  18. package/lib/convert/NbFormatToLexical.d.ts +4 -0
  19. package/lib/convert/NbFormatToLexical.js +31 -0
  20. package/lib/convert/NbFormatToLexical.js.map +1 -0
  21. package/lib/convert/markdown/MarkdownExport.d.ts +11 -0
  22. package/lib/convert/markdown/MarkdownExport.js +129 -0
  23. package/lib/convert/markdown/MarkdownExport.js.map +1 -0
  24. package/lib/convert/markdown/MarkdownImport.d.ts +2 -0
  25. package/lib/convert/markdown/MarkdownImport.js +246 -0
  26. package/lib/convert/markdown/MarkdownImport.js.map +1 -0
  27. package/lib/convert/markdown/MarkdownShortcuts.d.ts +10 -0
  28. package/lib/convert/markdown/MarkdownShortcuts.js +254 -0
  29. package/lib/convert/markdown/MarkdownShortcuts.js.map +1 -0
  30. package/lib/convert/markdown/MarkdownTransformers.d.ts +39 -0
  31. package/lib/convert/markdown/MarkdownTransformers.js +242 -0
  32. package/lib/convert/markdown/MarkdownTransformers.js.map +1 -0
  33. package/lib/convert/markdown/convertToMarkdown.d.ts +1 -0
  34. package/lib/convert/markdown/convertToMarkdown.js +126 -0
  35. package/lib/convert/markdown/convertToMarkdown.js.map +1 -0
  36. package/lib/convert/markdown/index.d.ts +17 -0
  37. package/lib/convert/markdown/index.js +46 -0
  38. package/lib/convert/markdown/index.js.map +1 -0
  39. package/lib/convert/markdown/utils.d.ts +24 -0
  40. package/lib/convert/markdown/utils.js +303 -0
  41. package/lib/convert/markdown/utils.js.map +1 -0
  42. package/lib/convert/transformers/MarkdownTransformers.d.ts +13 -0
  43. package/lib/convert/transformers/MarkdownTransformers.js +178 -0
  44. package/lib/convert/transformers/MarkdownTransformers.js.map +1 -0
  45. package/lib/examples/App.d.ts +1 -0
  46. package/lib/examples/App.js +22 -0
  47. package/lib/examples/App.js.map +1 -0
  48. package/lib/examples/Editor.d.ts +9 -0
  49. package/lib/examples/Editor.js +81 -0
  50. package/lib/examples/Editor.js.map +1 -0
  51. package/lib/examples/Example.d.ts +1 -0
  52. package/lib/examples/Example.js +11 -0
  53. package/lib/examples/Example.js.map +1 -0
  54. package/lib/examples/content/Example.ipynb.json +98 -0
  55. package/lib/examples/content/Example.lexical.json +259 -0
  56. package/lib/examples/context/LexicalContext.d.ts +13 -0
  57. package/lib/examples/context/LexicalContext.js +22 -0
  58. package/lib/examples/context/LexicalContext.js.map +1 -0
  59. package/lib/examples/plugins/ToolbarPlugin.d.ts +2 -0
  60. package/lib/examples/plugins/ToolbarPlugin.js +448 -0
  61. package/lib/examples/plugins/ToolbarPlugin.js.map +1 -0
  62. package/lib/examples/plugins/TreeViewPlugin.d.ts +2 -0
  63. package/lib/examples/plugins/TreeViewPlugin.js +13 -0
  64. package/lib/examples/plugins/TreeViewPlugin.js.map +1 -0
  65. package/lib/examples/themes/Theme.d.ts +10 -0
  66. package/lib/examples/themes/Theme.js +94 -0
  67. package/lib/examples/themes/Theme.js.map +1 -0
  68. package/lib/hooks/useModal.d.ts +2 -0
  69. package/lib/hooks/useModal.js +39 -0
  70. package/lib/hooks/useModal.js.map +1 -0
  71. package/lib/images/yellow-flower-small.jpg +0 -0
  72. package/lib/index.d.ts +40 -0
  73. package/lib/index.js +55 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/jupyter/index.d.ts +0 -0
  76. package/lib/jupyter/index.js +6 -0
  77. package/lib/jupyter/index.js.map +1 -0
  78. package/lib/jupyter/lab/Example.d.ts +1 -0
  79. package/lib/jupyter/lab/Example.js +11 -0
  80. package/lib/jupyter/lab/Example.js.map +1 -0
  81. package/lib/jupyter/lab/__tests__/datalayer.spec.d.ts +0 -0
  82. package/lib/jupyter/lab/__tests__/datalayer.spec.js +11 -0
  83. package/lib/jupyter/lab/__tests__/datalayer.spec.js.map +1 -0
  84. package/lib/jupyter/lab/component/MockComponent.d.ts +2 -0
  85. package/lib/jupyter/lab/component/MockComponent.js +17 -0
  86. package/lib/jupyter/lab/component/MockComponent.js.map +1 -0
  87. package/lib/jupyter/lab/component/MockTab1.d.ts +2 -0
  88. package/lib/jupyter/lab/component/MockTab1.js +14 -0
  89. package/lib/jupyter/lab/component/MockTab1.js.map +1 -0
  90. package/lib/jupyter/lab/handler.d.ts +8 -0
  91. package/lib/jupyter/lab/handler.js +41 -0
  92. package/lib/jupyter/lab/handler.js.map +1 -0
  93. package/lib/jupyter/lab/index.d.ts +7 -0
  94. package/lib/jupyter/lab/index.js +73 -0
  95. package/lib/jupyter/lab/index.js.map +1 -0
  96. package/lib/jupyter/lab/widget.d.ts +6 -0
  97. package/lib/jupyter/lab/widget.js +18 -0
  98. package/lib/jupyter/lab/widget.js.map +1 -0
  99. package/lib/nodes/EquationNode.d.ts +31 -0
  100. package/lib/nodes/EquationNode.js +118 -0
  101. package/lib/nodes/EquationNode.js.map +1 -0
  102. package/lib/nodes/ImageNode.css +50 -0
  103. package/lib/nodes/ImageNode.d.ts +58 -0
  104. package/lib/nodes/ImageNode.js +275 -0
  105. package/lib/nodes/ImageNode.js.map +1 -0
  106. package/lib/nodes/JupyterCodeHighlightNode.d.ts +49 -0
  107. package/lib/nodes/JupyterCodeHighlightNode.js +165 -0
  108. package/lib/nodes/JupyterCodeHighlightNode.js.map +1 -0
  109. package/lib/nodes/JupyterCodeHighlighter.d.ts +28 -0
  110. package/lib/nodes/JupyterCodeHighlighter.js +522 -0
  111. package/lib/nodes/JupyterCodeHighlighter.js.map +1 -0
  112. package/lib/nodes/JupyterCodeNode.d.ts +50 -0
  113. package/lib/nodes/JupyterCodeNode.js +277 -0
  114. package/lib/nodes/JupyterCodeNode.js.map +1 -0
  115. package/lib/nodes/JupyterOutputNode.d.ts +58 -0
  116. package/lib/nodes/JupyterOutputNode.js +144 -0
  117. package/lib/nodes/JupyterOutputNode.js.map +1 -0
  118. package/lib/nodes/YouTubeNode.d.ts +28 -0
  119. package/lib/nodes/YouTubeNode.js +56 -0
  120. package/lib/nodes/YouTubeNode.js.map +1 -0
  121. package/lib/plugins/AutoEmbedPlugin.d.ts +17 -0
  122. package/lib/plugins/AutoEmbedPlugin.js +110 -0
  123. package/lib/plugins/AutoEmbedPlugin.js.map +1 -0
  124. package/lib/plugins/AutoLinkPlugin.d.ts +2 -0
  125. package/lib/plugins/AutoLinkPlugin.js +34 -0
  126. package/lib/plugins/AutoLinkPlugin.js.map +1 -0
  127. package/lib/plugins/CodeActionMenuPlugin.css +52 -0
  128. package/lib/plugins/CodeActionMenuPlugin.d.ts +12 -0
  129. package/lib/plugins/CodeActionMenuPlugin.js +108 -0
  130. package/lib/plugins/CodeActionMenuPlugin.js.map +1 -0
  131. package/lib/plugins/ComponentPickerMenuPlugin.d.ts +2 -0
  132. package/lib/plugins/ComponentPickerMenuPlugin.js +244 -0
  133. package/lib/plugins/ComponentPickerMenuPlugin.js.map +1 -0
  134. package/lib/plugins/EquationsPlugin.d.ts +21 -0
  135. package/lib/plugins/EquationsPlugin.js +48 -0
  136. package/lib/plugins/EquationsPlugin.js.map +1 -0
  137. package/lib/plugins/HorizontalRulePlugin.d.ts +2 -0
  138. package/lib/plugins/HorizontalRulePlugin.js +40 -0
  139. package/lib/plugins/HorizontalRulePlugin.js.map +1 -0
  140. package/lib/plugins/ImagesPlugin.d.ts +25 -0
  141. package/lib/plugins/ImagesPlugin.js +212 -0
  142. package/lib/plugins/ImagesPlugin.js.map +1 -0
  143. package/lib/plugins/JupyterPlugin.css +13 -0
  144. package/lib/plugins/JupyterPlugin.d.ts +16 -0
  145. package/lib/plugins/JupyterPlugin.js +169 -0
  146. package/lib/plugins/JupyterPlugin.js.map +1 -0
  147. package/lib/plugins/ListMaxIndentLevelPlugin.d.ts +4 -0
  148. package/lib/plugins/ListMaxIndentLevelPlugin.js +49 -0
  149. package/lib/plugins/ListMaxIndentLevelPlugin.js.map +1 -0
  150. package/lib/plugins/MardownPlugin.d.ts +2 -0
  151. package/lib/plugins/MardownPlugin.js +20 -0
  152. package/lib/plugins/MardownPlugin.js.map +1 -0
  153. package/lib/plugins/NbformatContentPlugin.d.ts +6 -0
  154. package/lib/plugins/NbformatContentPlugin.js +20 -0
  155. package/lib/plugins/NbformatContentPlugin.js.map +1 -0
  156. package/lib/plugins/TableOfContentsPlugin.css +87 -0
  157. package/lib/plugins/TableOfContentsPlugin.d.ts +3 -0
  158. package/lib/plugins/TableOfContentsPlugin.js +115 -0
  159. package/lib/plugins/TableOfContentsPlugin.js.map +1 -0
  160. package/lib/plugins/YouTubePlugin.d.ts +4 -0
  161. package/lib/plugins/YouTubePlugin.js +34 -0
  162. package/lib/plugins/YouTubePlugin.js.map +1 -0
  163. package/lib/ui/Button.css +40 -0
  164. package/lib/ui/Button.d.ts +18 -0
  165. package/lib/ui/Button.js +8 -0
  166. package/lib/ui/Button.js.map +1 -0
  167. package/lib/ui/ContentEditable.css +24 -0
  168. package/lib/ui/ContentEditable.d.ts +5 -0
  169. package/lib/ui/ContentEditable.js +20 -0
  170. package/lib/ui/ContentEditable.js.map +1 -0
  171. package/lib/ui/CopyButton.d.ts +7 -0
  172. package/lib/ui/CopyButton.js +47 -0
  173. package/lib/ui/CopyButton.js.map +1 -0
  174. package/lib/ui/Dialog.css +23 -0
  175. package/lib/ui/Dialog.d.ts +16 -0
  176. package/lib/ui/Dialog.js +21 -0
  177. package/lib/ui/Dialog.js.map +1 -0
  178. package/lib/ui/DropDown.d.ts +23 -0
  179. package/lib/ui/DropDown.js +119 -0
  180. package/lib/ui/DropDown.js.map +1 -0
  181. package/lib/ui/EquationEditor.css +42 -0
  182. package/lib/ui/EquationEditor.d.ts +18 -0
  183. package/lib/ui/EquationEditor.js +31 -0
  184. package/lib/ui/EquationEditor.js.map +1 -0
  185. package/lib/ui/FileInput.d.ts +15 -0
  186. package/lib/ui/FileInput.js +18 -0
  187. package/lib/ui/FileInput.js.map +1 -0
  188. package/lib/ui/ImageResizer.d.ts +16 -0
  189. package/lib/ui/ImageResizer.js +166 -0
  190. package/lib/ui/ImageResizer.js.map +1 -0
  191. package/lib/ui/Input.css +37 -0
  192. package/lib/ui/KatexEquationAlterer.css +45 -0
  193. package/lib/ui/KatexEquationAlterer.d.ts +7 -0
  194. package/lib/ui/KatexEquationAlterer.js +33 -0
  195. package/lib/ui/KatexEquationAlterer.js.map +1 -0
  196. package/lib/ui/KatexRenderer.d.ts +6 -0
  197. package/lib/ui/KatexRenderer.js +36 -0
  198. package/lib/ui/KatexRenderer.js.map +1 -0
  199. package/lib/ui/Modal.css +67 -0
  200. package/lib/ui/Modal.d.ts +15 -0
  201. package/lib/ui/Modal.js +58 -0
  202. package/lib/ui/Modal.js.map +1 -0
  203. package/lib/ui/Placeholder.css +29 -0
  204. package/lib/ui/Placeholder.d.ts +14 -0
  205. package/lib/ui/Placeholder.js +7 -0
  206. package/lib/ui/Placeholder.js.map +1 -0
  207. package/lib/ui/PrettierButton.css +20 -0
  208. package/lib/ui/PrettierButton.tsx_tmp +133 -0
  209. package/lib/ui/TextInput.d.ts +16 -0
  210. package/lib/ui/TextInput.js +20 -0
  211. package/lib/ui/TextInput.js.map +1 -0
  212. package/lib/utils/canUseDOM.d.ts +8 -0
  213. package/lib/utils/canUseDOM.js +16 -0
  214. package/lib/utils/canUseDOM.js.map +1 -0
  215. package/lib/utils/debouncer.d.ts +1 -0
  216. package/lib/utils/debouncer.js +24 -0
  217. package/lib/utils/debouncer.js.map +1 -0
  218. package/lib/utils/invariant.d.ts +8 -0
  219. package/lib/utils/invariant.js +23 -0
  220. package/lib/utils/invariant.js.map +1 -0
  221. package/lib/utils/join.d.ts +8 -0
  222. package/lib/utils/join.js +16 -0
  223. package/lib/utils/join.js.map +1 -0
  224. package/lib/utils/selection.d.ts +8 -0
  225. package/lib/utils/selection.js +14 -0
  226. package/lib/utils/selection.js.map +1 -0
  227. package/lib/utils/useLayoutEffect.d.ts +10 -0
  228. package/lib/utils/useLayoutEffect.js +19 -0
  229. package/lib/utils/useLayoutEffect.js.map +1 -0
  230. package/package.json +166 -0
  231. package/style/base.css +16 -0
  232. package/style/index.css +7 -0
  233. package/style/index.js +7 -0
@@ -0,0 +1,522 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import * as Prism from 'prismjs';
7
+ import 'prismjs/components/prism-clike';
8
+ import 'prismjs/components/prism-javascript';
9
+ import 'prismjs/components/prism-markup';
10
+ import 'prismjs/components/prism-markdown';
11
+ import 'prismjs/components/prism-c';
12
+ import 'prismjs/components/prism-css';
13
+ import 'prismjs/components/prism-objectivec';
14
+ import 'prismjs/components/prism-sql';
15
+ import 'prismjs/components/prism-python';
16
+ import 'prismjs/components/prism-rust';
17
+ import 'prismjs/components/prism-swift';
18
+ import { mergeRegister } from '@lexical/utils';
19
+ import { $createLineBreakNode, $createTextNode, $getNodeByKey, $getSelection, $isLineBreakNode, $isRangeSelection, $isTextNode, COMMAND_PRIORITY_LOW, INDENT_CONTENT_COMMAND, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, MOVE_TO_END, MOVE_TO_START, OUTDENT_CONTENT_COMMAND, TextNode, } from 'lexical';
20
+ import { $createJupyterCodeHighlightNode, $isJupyterCodeHighlightNode, JupyterCodeHighlightNode, DEFAULT_CODE_LANGUAGE, getFirstJupyterCodeHighlightNodeOfLine, getLastJupyterCodeHighlightNodeOfLine, } from './JupyterCodeHighlightNode';
21
+ import { $isJupyterCodeNode, JupyterCodeNode } from './JupyterCodeNode';
22
+ function isSpaceOrTabChar(char) {
23
+ return char === ' ' || char === '\t';
24
+ }
25
+ function findFirstNotSpaceOrTabCharAtText(text, isForward) {
26
+ const length = text.length;
27
+ let offset = -1;
28
+ if (isForward) {
29
+ for (let i = 0; i < length; i++) {
30
+ const char = text[i];
31
+ if (!isSpaceOrTabChar(char)) {
32
+ offset = i;
33
+ break;
34
+ }
35
+ }
36
+ }
37
+ else {
38
+ for (let i = length - 1; i > -1; i--) {
39
+ const char = text[i];
40
+ if (!isSpaceOrTabChar(char)) {
41
+ offset = i;
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ return offset;
47
+ }
48
+ export function getStartOfCodeInLine(anchor) {
49
+ let currentNode = null;
50
+ let currentNodeOffset = -1;
51
+ const previousSiblings = anchor.getPreviousSiblings();
52
+ previousSiblings.push(anchor);
53
+ while (previousSiblings.length > 0) {
54
+ const node = previousSiblings.pop();
55
+ if ($isJupyterCodeHighlightNode(node)) {
56
+ const text = node.getTextContent();
57
+ const offset = findFirstNotSpaceOrTabCharAtText(text, true);
58
+ if (offset !== -1) {
59
+ currentNode = node;
60
+ currentNodeOffset = offset;
61
+ }
62
+ }
63
+ if ($isLineBreakNode(node)) {
64
+ break;
65
+ }
66
+ }
67
+ if (currentNode === null) {
68
+ const nextSiblings = anchor.getNextSiblings();
69
+ while (nextSiblings.length > 0) {
70
+ const node = nextSiblings.shift();
71
+ if ($isJupyterCodeHighlightNode(node)) {
72
+ const text = node.getTextContent();
73
+ const offset = findFirstNotSpaceOrTabCharAtText(text, true);
74
+ if (offset !== -1) {
75
+ currentNode = node;
76
+ currentNodeOffset = offset;
77
+ break;
78
+ }
79
+ }
80
+ if ($isLineBreakNode(node)) {
81
+ break;
82
+ }
83
+ }
84
+ }
85
+ return {
86
+ node: currentNode,
87
+ offset: currentNodeOffset,
88
+ };
89
+ }
90
+ export function getEndOfJupyterCodeInLine(anchor) {
91
+ let currentNode = null;
92
+ let currentNodeOffset = -1;
93
+ const nextSiblings = anchor.getNextSiblings();
94
+ nextSiblings.unshift(anchor);
95
+ while (nextSiblings.length > 0) {
96
+ const node = nextSiblings.shift();
97
+ if ($isJupyterCodeHighlightNode(node)) {
98
+ const text = node.getTextContent();
99
+ const offset = findFirstNotSpaceOrTabCharAtText(text, false);
100
+ if (offset !== -1) {
101
+ currentNode = node;
102
+ currentNodeOffset = offset + 1;
103
+ }
104
+ }
105
+ if ($isLineBreakNode(node)) {
106
+ break;
107
+ }
108
+ }
109
+ if (currentNode === null) {
110
+ const previousSiblings = anchor.getPreviousSiblings();
111
+ while (previousSiblings.length > 0) {
112
+ const node = previousSiblings.pop();
113
+ if ($isJupyterCodeHighlightNode(node)) {
114
+ const text = node.getTextContent();
115
+ const offset = findFirstNotSpaceOrTabCharAtText(text, false);
116
+ if (offset !== -1) {
117
+ currentNode = node;
118
+ currentNodeOffset = offset + 1;
119
+ break;
120
+ }
121
+ }
122
+ if ($isLineBreakNode(node)) {
123
+ break;
124
+ }
125
+ }
126
+ }
127
+ return {
128
+ node: currentNode,
129
+ offset: currentNodeOffset,
130
+ };
131
+ }
132
+ function textNodeTransform(node, editor) {
133
+ // Since CodeNode has flat children structure we only need to check
134
+ // if node's parent is a code node and run highlighting if so
135
+ const parentNode = node.getParent();
136
+ if ($isJupyterCodeNode(parentNode)) {
137
+ codeNodeTransform(parentNode, editor);
138
+ }
139
+ else if ($isJupyterCodeHighlightNode(node)) {
140
+ // When code block converted into paragraph or other element
141
+ // code highlight nodes converted back to normal text
142
+ node.replace($createTextNode(node.__text));
143
+ }
144
+ }
145
+ function updateCodeGutter(node, editor) {
146
+ const codeElement = editor.getElementByKey(node.getKey());
147
+ if (codeElement === null) {
148
+ return;
149
+ }
150
+ const children = node.getChildren();
151
+ const childrenLength = children.length;
152
+ // @ts-ignore: internal field
153
+ if (childrenLength === codeElement.__cachedChildrenLength) {
154
+ // Avoid updating the attribute if the children length hasn't changed.
155
+ return;
156
+ }
157
+ // @ts-ignore:: internal field
158
+ codeElement.__cachedChildrenLength = childrenLength;
159
+ let gutter = '1';
160
+ let count = 1;
161
+ for (let i = 0; i < childrenLength; i++) {
162
+ if ($isLineBreakNode(children[i])) {
163
+ gutter += '\n' + ++count;
164
+ }
165
+ }
166
+ codeElement.setAttribute('data-gutter', gutter);
167
+ }
168
+ // Using `skipTransforms` to prevent extra transforms since reformatting the code
169
+ // will not affect code block content itself.
170
+ //
171
+ // Using extra flag (`isHighlighting`) since both CodeNode and CodeHighlightNode
172
+ // transforms might be called at the same time (e.g. new CodeHighlight node inserted) and
173
+ // in both cases we'll rerun whole reformatting over CodeNode, which is redundant.
174
+ // Especially when pasting code into CodeBlock.
175
+ let isHighlighting = false;
176
+ function codeNodeTransform(node, editor) {
177
+ if (isHighlighting) {
178
+ return;
179
+ }
180
+ isHighlighting = true;
181
+ // When new code block inserted it might not have language selected
182
+ if (node.getLanguage() === undefined) {
183
+ node.setLanguage(DEFAULT_CODE_LANGUAGE);
184
+ }
185
+ // Using nested update call to pass `skipTransforms` since we don't want
186
+ // each individual codehighlight node to be transformed again as it's already
187
+ // in its final state
188
+ editor.update(() => {
189
+ updateAndRetainSelection(node, () => {
190
+ const code = node.getTextContent();
191
+ const tokens = Prism.tokenize(code, Prism.languages[node.getLanguage() || ''] ||
192
+ Prism.languages[DEFAULT_CODE_LANGUAGE]);
193
+ const highlightNodes = getHighlightNodes(tokens);
194
+ const diffRange = getDiffRange(node.getChildren(), highlightNodes);
195
+ const { from, to, nodesForReplacement } = diffRange;
196
+ if (from !== to || nodesForReplacement.length) {
197
+ node.splice(from, to - from, nodesForReplacement);
198
+ return true;
199
+ }
200
+ return false;
201
+ });
202
+ }, {
203
+ onUpdate: () => {
204
+ isHighlighting = false;
205
+ },
206
+ skipTransforms: true,
207
+ });
208
+ }
209
+ function getHighlightNodes(tokens) {
210
+ const nodes = [];
211
+ tokens.forEach((token) => {
212
+ if (typeof token === 'string') {
213
+ const partials = token.split('\n');
214
+ for (let i = 0; i < partials.length; i++) {
215
+ const text = partials[i];
216
+ if (text.length) {
217
+ nodes.push($createJupyterCodeHighlightNode(text));
218
+ }
219
+ if (i < partials.length - 1) {
220
+ nodes.push($createLineBreakNode());
221
+ }
222
+ }
223
+ }
224
+ else {
225
+ const { content } = token;
226
+ if (typeof content === 'string') {
227
+ nodes.push($createJupyterCodeHighlightNode(content, token.type));
228
+ }
229
+ else if (Array.isArray(content) &&
230
+ content.length === 1 &&
231
+ typeof content[0] === 'string') {
232
+ nodes.push($createJupyterCodeHighlightNode(content[0], token.type));
233
+ }
234
+ else if (Array.isArray(content)) {
235
+ nodes.push(...getHighlightNodes(content));
236
+ }
237
+ }
238
+ });
239
+ return nodes;
240
+ }
241
+ // Wrapping update function into selection retainer, that tries to keep cursor at the same
242
+ // position as before.
243
+ function updateAndRetainSelection(node, updateFn) {
244
+ const selection = $getSelection();
245
+ if (!$isRangeSelection(selection) || !selection.anchor) {
246
+ return;
247
+ }
248
+ const anchor = selection.anchor;
249
+ const anchorOffset = anchor.offset;
250
+ const isNewLineAnchor = anchor.type === 'element' &&
251
+ $isLineBreakNode(node.getChildAtIndex(anchor.offset - 1));
252
+ let textOffset = 0;
253
+ // Calculating previous text offset (all text node prior to anchor + anchor own text offset)
254
+ if (!isNewLineAnchor) {
255
+ const anchorNode = anchor.getNode();
256
+ textOffset =
257
+ anchorOffset +
258
+ anchorNode.getPreviousSiblings().reduce((offset, _node) => {
259
+ return (offset + ($isLineBreakNode(_node) ? 0 : _node.getTextContentSize()));
260
+ }, 0);
261
+ }
262
+ const hasChanges = updateFn();
263
+ if (!hasChanges) {
264
+ return;
265
+ }
266
+ // Non-text anchors only happen for line breaks, otherwise
267
+ // selection will be within text node (code highlight node)
268
+ if (isNewLineAnchor) {
269
+ anchor.getNode().select(anchorOffset, anchorOffset);
270
+ return;
271
+ }
272
+ // If it was non-element anchor then we walk through child nodes
273
+ // and looking for a position of original text offset
274
+ node.getChildren().some((_node) => {
275
+ if ($isTextNode(_node)) {
276
+ const textContentSize = _node.getTextContentSize();
277
+ if (textContentSize >= textOffset) {
278
+ _node.select(textOffset, textOffset);
279
+ return true;
280
+ }
281
+ textOffset -= textContentSize;
282
+ }
283
+ return false;
284
+ });
285
+ }
286
+ // Finds minimal diff range between two nodes lists. It returns from/to range boundaries of prevNodes
287
+ // that needs to be replaced with `nodes` (subset of nextNodes) to make prevNodes equal to nextNodes.
288
+ function getDiffRange(prevNodes, nextNodes) {
289
+ let leadingMatch = 0;
290
+ while (leadingMatch < prevNodes.length) {
291
+ if (!isEqual(prevNodes[leadingMatch], nextNodes[leadingMatch])) {
292
+ break;
293
+ }
294
+ leadingMatch++;
295
+ }
296
+ const prevNodesLength = prevNodes.length;
297
+ const nextNodesLength = nextNodes.length;
298
+ const maxTrailingMatch = Math.min(prevNodesLength, nextNodesLength) - leadingMatch;
299
+ let trailingMatch = 0;
300
+ while (trailingMatch < maxTrailingMatch) {
301
+ trailingMatch++;
302
+ if (!isEqual(prevNodes[prevNodesLength - trailingMatch], nextNodes[nextNodesLength - trailingMatch])) {
303
+ trailingMatch--;
304
+ break;
305
+ }
306
+ }
307
+ const from = leadingMatch;
308
+ const to = prevNodesLength - trailingMatch;
309
+ const nodesForReplacement = nextNodes.slice(leadingMatch, nextNodesLength - trailingMatch);
310
+ return {
311
+ from,
312
+ nodesForReplacement,
313
+ to,
314
+ };
315
+ }
316
+ function isEqual(nodeA, nodeB) {
317
+ // Only checking for code higlight nodes and linebreaks. If it's regular text node
318
+ // returning false so that it's transformed into code highlight node
319
+ if ($isJupyterCodeHighlightNode(nodeA) && $isJupyterCodeHighlightNode(nodeB)) {
320
+ return (nodeA.__text === nodeB.__text &&
321
+ nodeA.__highlightType === nodeB.__highlightType);
322
+ }
323
+ if ($isLineBreakNode(nodeA) && $isLineBreakNode(nodeB)) {
324
+ return true;
325
+ }
326
+ return false;
327
+ }
328
+ function handleMultilineIndent(type) {
329
+ const selection = $getSelection();
330
+ if (!$isRangeSelection(selection) || selection.isCollapsed()) {
331
+ return false;
332
+ }
333
+ // Only run multiline indent logic on selections exclusively composed of code highlights and linebreaks
334
+ const nodes = selection.getNodes();
335
+ for (let i = 0; i < nodes.length; i++) {
336
+ const node = nodes[i];
337
+ if (!$isJupyterCodeHighlightNode(node) && !$isLineBreakNode(node)) {
338
+ return false;
339
+ }
340
+ }
341
+ const startOfLine = getFirstJupyterCodeHighlightNodeOfLine(nodes[0]);
342
+ if (startOfLine != null) {
343
+ doIndent(startOfLine, type);
344
+ }
345
+ for (let i = 1; i < nodes.length; i++) {
346
+ const node = nodes[i];
347
+ if ($isLineBreakNode(nodes[i - 1]) && $isJupyterCodeHighlightNode(node)) {
348
+ doIndent(node, type);
349
+ }
350
+ }
351
+ return true;
352
+ }
353
+ function doIndent(node, type) {
354
+ const text = node.getTextContent();
355
+ if (type === INDENT_CONTENT_COMMAND) {
356
+ // If the codeblock node doesn't start with whitespace, we don't want to
357
+ // naively prepend a '\t'; Prism will then mangle all of our nodes when
358
+ // it separates the whitespace from the first non-whitespace node. This
359
+ // will lead to selection bugs when indenting lines that previously
360
+ // didn't start with a whitespace character
361
+ if (text.length > 0 && /\s/.test(text[0])) {
362
+ node.setTextContent('\t' + text);
363
+ }
364
+ else {
365
+ const indentNode = $createJupyterCodeHighlightNode('\t');
366
+ node.insertBefore(indentNode);
367
+ }
368
+ }
369
+ else {
370
+ if (text.indexOf('\t') === 0) {
371
+ // Same as above - if we leave empty text nodes lying around, the resulting
372
+ // selection will be mangled
373
+ if (text.length === 1) {
374
+ node.remove();
375
+ }
376
+ else {
377
+ node.setTextContent(text.substring(1));
378
+ }
379
+ }
380
+ }
381
+ }
382
+ function handleShiftLines(type, event) {
383
+ // We only care about the alt+arrow keys
384
+ const selection = $getSelection();
385
+ if (!$isRangeSelection(selection)) {
386
+ return false;
387
+ }
388
+ // I'm not quite sure why, but it seems like calling anchor.getNode() collapses the selection here
389
+ // So first, get the anchor and the focus, then get their nodes
390
+ const { anchor, focus } = selection;
391
+ const anchorOffset = anchor.offset;
392
+ const focusOffset = focus.offset;
393
+ const anchorNode = anchor.getNode();
394
+ const focusNode = focus.getNode();
395
+ const arrowIsUp = type === KEY_ARROW_UP_COMMAND;
396
+ // Ensure the selection is within the codeblock
397
+ if (!$isJupyterCodeHighlightNode(anchorNode) || !$isJupyterCodeHighlightNode(focusNode)) {
398
+ return false;
399
+ }
400
+ if (!event.altKey) {
401
+ // Handle moving selection out of the code block, given there are no
402
+ // sibling thats can natively take the selection.
403
+ if (selection.isCollapsed()) {
404
+ const codeNode = anchorNode.getParentOrThrow();
405
+ if (arrowIsUp &&
406
+ anchorOffset === 0 &&
407
+ anchorNode.getPreviousSibling() === null) {
408
+ const codeNodeSibling = codeNode.getPreviousSibling();
409
+ if (codeNodeSibling === null) {
410
+ codeNode.selectPrevious();
411
+ event.preventDefault();
412
+ return true;
413
+ }
414
+ }
415
+ else if (!arrowIsUp &&
416
+ anchorOffset === anchorNode.getTextContentSize() &&
417
+ anchorNode.getNextSibling() === null) {
418
+ const codeNodeSibling = codeNode.getNextSibling();
419
+ if (codeNodeSibling === null) {
420
+ codeNode.selectNext();
421
+ event.preventDefault();
422
+ return true;
423
+ }
424
+ }
425
+ }
426
+ return false;
427
+ }
428
+ const start = getFirstJupyterCodeHighlightNodeOfLine(anchorNode);
429
+ const end = getLastJupyterCodeHighlightNodeOfLine(focusNode);
430
+ if (start == null || end == null) {
431
+ return false;
432
+ }
433
+ const range = start.getNodesBetween(end);
434
+ for (let i = 0; i < range.length; i++) {
435
+ const node = range[i];
436
+ if (!$isJupyterCodeHighlightNode(node) && !$isLineBreakNode(node)) {
437
+ return false;
438
+ }
439
+ }
440
+ // After this point, we know the selection is within the codeblock. We may not be able to
441
+ // actually move the lines around, but we want to return true either way to prevent
442
+ // the event's default behavior
443
+ event.preventDefault();
444
+ event.stopPropagation(); // required to stop cursor movement under Firefox
445
+ const linebreak = arrowIsUp
446
+ ? start.getPreviousSibling()
447
+ : end.getNextSibling();
448
+ if (!$isLineBreakNode(linebreak)) {
449
+ return true;
450
+ }
451
+ const sibling = arrowIsUp
452
+ ? linebreak.getPreviousSibling()
453
+ : linebreak.getNextSibling();
454
+ if (sibling == null) {
455
+ return true;
456
+ }
457
+ const maybeInsertionPoint = arrowIsUp
458
+ ? getFirstJupyterCodeHighlightNodeOfLine(sibling)
459
+ : getLastJupyterCodeHighlightNodeOfLine(sibling);
460
+ let insertionPoint = maybeInsertionPoint != null ? maybeInsertionPoint : sibling;
461
+ linebreak.remove();
462
+ range.forEach((node) => node.remove());
463
+ if (type === KEY_ARROW_UP_COMMAND) {
464
+ range.forEach((node) => insertionPoint.insertBefore(node));
465
+ insertionPoint.insertBefore(linebreak);
466
+ }
467
+ else {
468
+ insertionPoint.insertAfter(linebreak);
469
+ insertionPoint = linebreak;
470
+ range.forEach((node) => {
471
+ insertionPoint.insertAfter(node);
472
+ insertionPoint = node;
473
+ });
474
+ }
475
+ selection.setTextNodeRange(anchorNode, anchorOffset, focusNode, focusOffset);
476
+ return true;
477
+ }
478
+ function handleMoveTo(type, event) {
479
+ const selection = $getSelection();
480
+ if (!$isRangeSelection(selection)) {
481
+ return false;
482
+ }
483
+ const { anchor, focus } = selection;
484
+ const anchorNode = anchor.getNode();
485
+ const focusNode = focus.getNode();
486
+ const isMoveToStart = type === MOVE_TO_START;
487
+ if (!$isJupyterCodeHighlightNode(anchorNode) || !$isJupyterCodeHighlightNode(focusNode)) {
488
+ return false;
489
+ }
490
+ let node;
491
+ let offset;
492
+ if (isMoveToStart) {
493
+ ({ node, offset } = getStartOfCodeInLine(focusNode));
494
+ }
495
+ else {
496
+ ({ node, offset } = getEndOfJupyterCodeInLine(focusNode));
497
+ }
498
+ if (node !== null && offset !== -1) {
499
+ selection.setTextNodeRange(node, offset, node, offset);
500
+ }
501
+ event.preventDefault();
502
+ event.stopPropagation();
503
+ return true;
504
+ }
505
+ export function registerCodeHighlighting(editor) {
506
+ if (!editor.hasNodes([JupyterCodeNode, JupyterCodeHighlightNode])) {
507
+ throw new Error('CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor');
508
+ }
509
+ return mergeRegister(editor.registerMutationListener(JupyterCodeNode, (mutations) => {
510
+ editor.update(() => {
511
+ for (const [key, type] of mutations) {
512
+ if (type !== 'destroyed') {
513
+ const node = $getNodeByKey(key);
514
+ if (node !== null) {
515
+ updateCodeGutter(node, editor);
516
+ }
517
+ }
518
+ }
519
+ });
520
+ }), editor.registerNodeTransform(JupyterCodeNode, (node) => codeNodeTransform(node, editor)), editor.registerNodeTransform(TextNode, (node) => textNodeTransform(node, editor)), editor.registerNodeTransform(JupyterCodeHighlightNode, (node) => textNodeTransform(node, editor)), editor.registerCommand(INDENT_CONTENT_COMMAND, (payload) => handleMultilineIndent(INDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(OUTDENT_CONTENT_COMMAND, (payload) => handleMultilineIndent(OUTDENT_CONTENT_COMMAND), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_UP_COMMAND, (payload) => handleShiftLines(KEY_ARROW_UP_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_DOWN_COMMAND, (payload) => handleShiftLines(KEY_ARROW_DOWN_COMMAND, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_END, (payload) => handleMoveTo(MOVE_TO_END, payload), COMMAND_PRIORITY_LOW), editor.registerCommand(MOVE_TO_START, (payload) => handleMoveTo(MOVE_TO_START, payload), COMMAND_PRIORITY_LOW));
521
+ }
522
+ //# sourceMappingURL=JupyterCodeHighlighter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JupyterCodeHighlighter.js","sourceRoot":"","sources":["../../src/nodes/JupyterCodeHighlighter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import type { DOMConversionMap, EditorConfig, LexicalNode, NodeKey, ParagraphNode, RangeSelection, SerializedElementNode, Spread } from 'lexical';
8
+ import { ElementNode } from 'lexical';
9
+ import type { JupyterCodeHighlightNode } from './JupyterCodeHighlightNode';
10
+ import 'prismjs/components/prism-clike';
11
+ import 'prismjs/components/prism-javascript';
12
+ import 'prismjs/components/prism-markup';
13
+ import 'prismjs/components/prism-markdown';
14
+ import 'prismjs/components/prism-c';
15
+ import 'prismjs/components/prism-css';
16
+ import 'prismjs/components/prism-objectivec';
17
+ import 'prismjs/components/prism-sql';
18
+ import 'prismjs/components/prism-python';
19
+ import 'prismjs/components/prism-rust';
20
+ import 'prismjs/components/prism-swift';
21
+ type SerializedCodeNode = Spread<{
22
+ language: string | null | undefined;
23
+ type: 'jupyter-code';
24
+ codeNodeUuid: string;
25
+ version: 1;
26
+ }, SerializedElementNode>;
27
+ export declare class JupyterCodeNode extends ElementNode {
28
+ /** @internal */
29
+ __language: string | null | undefined;
30
+ __codeNodeUuid: string;
31
+ static getType(): string;
32
+ static clone(node: JupyterCodeNode): JupyterCodeNode;
33
+ constructor(language?: string | null | undefined, codeNodeUuid?: string, key?: NodeKey);
34
+ setCodeNodeUuid(codeNodeUuid: string): void;
35
+ getCodeNodeUuid(): string;
36
+ createDOM(config: EditorConfig): HTMLElement;
37
+ updateDOM(prevNode: JupyterCodeNode, dom: HTMLElement): boolean;
38
+ static importDOM(): DOMConversionMap | null;
39
+ static importJSON(serializedNode: SerializedCodeNode): JupyterCodeNode;
40
+ exportJSON(): SerializedCodeNode;
41
+ insertNewAfter(selection: RangeSelection): null | ParagraphNode | JupyterCodeHighlightNode;
42
+ canInsertTab(): boolean;
43
+ canIndent(): false;
44
+ collapseAtStart(): true;
45
+ setLanguage(language: string): void;
46
+ getLanguage(): string | null | undefined;
47
+ }
48
+ export declare function $createJupyterCodeNode(language?: string | null | undefined, codeNodeUuid?: string): JupyterCodeNode;
49
+ export declare function $isJupyterCodeNode(node: LexicalNode | null | undefined): node is JupyterCodeNode;
50
+ export {};