@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,277 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { $createLineBreakNode, $createParagraphNode, $getSelection, $isRangeSelection, ElementNode, } from 'lexical';
7
+ import { addClassNamesToElement } from '@lexical/utils';
8
+ import { UUID } from '@lumino/coreutils';
9
+ import { $createJupyterCodeHighlightNode, getFirstJupyterCodeHighlightNodeOfLine } from './JupyterCodeHighlightNode';
10
+ import { CODE_UUID_TO_CODE_KEY } from "../plugins/JupyterPlugin";
11
+ import * as Prism from 'prismjs';
12
+ import 'prismjs/components/prism-clike';
13
+ import 'prismjs/components/prism-javascript';
14
+ import 'prismjs/components/prism-markup';
15
+ import 'prismjs/components/prism-markdown';
16
+ import 'prismjs/components/prism-c';
17
+ import 'prismjs/components/prism-css';
18
+ import 'prismjs/components/prism-objectivec';
19
+ import 'prismjs/components/prism-sql';
20
+ import 'prismjs/components/prism-python';
21
+ import 'prismjs/components/prism-rust';
22
+ import 'prismjs/components/prism-swift';
23
+ const mapToPrismLanguage = (language) => {
24
+ // eslint-disable-next-line no-prototype-builtins
25
+ return language != null && Prism.languages.hasOwnProperty(language)
26
+ ? language
27
+ : undefined;
28
+ };
29
+ const LANGUAGE_DATA_ATTRIBUTE = 'data-highlight-language';
30
+ export class JupyterCodeNode extends ElementNode {
31
+ /** @internal */
32
+ __language;
33
+ __codeNodeUuid;
34
+ static getType() {
35
+ return 'jupyter-code';
36
+ }
37
+ static clone(node) {
38
+ return new JupyterCodeNode(node.__language, node.__codeNodeUuid, node.__key);
39
+ }
40
+ constructor(language, codeNodeUuid, key) {
41
+ super(key);
42
+ this.__language = mapToPrismLanguage(language);
43
+ this.__codeNodeUuid = codeNodeUuid || UUID.uuid4();
44
+ CODE_UUID_TO_CODE_KEY.set(this.__codeNodeUuid, this.__key);
45
+ }
46
+ setCodeNodeUuid(codeNodeUuid) {
47
+ const self = this.getWritable();
48
+ self.__codeNodeUuid = codeNodeUuid;
49
+ }
50
+ getCodeNodeUuid() {
51
+ const self = this.getLatest();
52
+ return self.__codeNodeUuid;
53
+ }
54
+ // View
55
+ createDOM(config) {
56
+ const element = document.createElement('code');
57
+ addClassNamesToElement(element, config.theme.code);
58
+ element.setAttribute('spellcheck', 'false');
59
+ const language = this.getLanguage();
60
+ if (language) {
61
+ element.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
62
+ }
63
+ return element;
64
+ }
65
+ updateDOM(prevNode, dom) {
66
+ const language = this.__language;
67
+ const prevLanguage = prevNode.__language;
68
+ if (language) {
69
+ if (language !== prevLanguage) {
70
+ dom.setAttribute(LANGUAGE_DATA_ATTRIBUTE, language);
71
+ }
72
+ }
73
+ else if (prevLanguage) {
74
+ dom.removeAttribute(LANGUAGE_DATA_ATTRIBUTE);
75
+ }
76
+ return false;
77
+ }
78
+ static importDOM() {
79
+ return {
80
+ // Typically <pre> is used for code blocks, and <code> for inline code styles
81
+ // but if it's a multi line <code> we'll create a block. Pass through to
82
+ // inline format handled by TextNode otherwise
83
+ code: (node) => {
84
+ const isMultiLine = node.textContent != null && /\r?\n/.test(node.textContent);
85
+ return isMultiLine
86
+ ? {
87
+ conversion: convertPreElement,
88
+ priority: 1,
89
+ }
90
+ : null;
91
+ },
92
+ div: (node) => ({
93
+ conversion: convertDivElement,
94
+ priority: 1,
95
+ }),
96
+ pre: (node) => ({
97
+ conversion: convertPreElement,
98
+ priority: 0,
99
+ }),
100
+ table: (node) => {
101
+ const table = node;
102
+ // domNode is a <table> since we matched it by nodeName
103
+ if (isGitHubCodeTable(table)) {
104
+ return {
105
+ conversion: convertTableElement,
106
+ priority: 4,
107
+ };
108
+ }
109
+ return null;
110
+ },
111
+ td: (node) => {
112
+ // element is a <td> since we matched it by nodeName
113
+ const td = node;
114
+ const table = td.closest('table');
115
+ if (isGitHubCodeCell(td)) {
116
+ return {
117
+ conversion: convertTableCellElement,
118
+ priority: 4,
119
+ };
120
+ }
121
+ if (table && isGitHubCodeTable(table)) {
122
+ // Return a no-op if it's a table cell in a code table, but not a code line.
123
+ // Otherwise it'll fall back to the T
124
+ return {
125
+ conversion: convertCodeNoop,
126
+ priority: 4,
127
+ };
128
+ }
129
+ return null;
130
+ },
131
+ tr: (node) => {
132
+ // element is a <tr> since we matched it by nodeName
133
+ const tr = node;
134
+ const table = tr.closest('table');
135
+ if (table && isGitHubCodeTable(table)) {
136
+ return {
137
+ conversion: convertCodeNoop,
138
+ priority: 4,
139
+ };
140
+ }
141
+ return null;
142
+ },
143
+ };
144
+ }
145
+ static importJSON(serializedNode) {
146
+ const node = $createJupyterCodeNode(serializedNode.language, serializedNode.codeNodeUuid);
147
+ node.setFormat(serializedNode.format);
148
+ node.setIndent(serializedNode.indent);
149
+ node.setDirection(serializedNode.direction);
150
+ return node;
151
+ }
152
+ exportJSON() {
153
+ return {
154
+ ...super.exportJSON(),
155
+ type: 'jupyter-code',
156
+ language: this.getLanguage(),
157
+ codeNodeUuid: this.getCodeNodeUuid(),
158
+ version: 1,
159
+ };
160
+ }
161
+ // Mutation
162
+ insertNewAfter(selection) {
163
+ const children = this.getChildren();
164
+ const childrenLength = children.length;
165
+ if (childrenLength >= 2 &&
166
+ children[childrenLength - 1].getTextContent() === '\n' &&
167
+ children[childrenLength - 2].getTextContent() === '\n' &&
168
+ selection.isCollapsed() &&
169
+ selection.anchor.key === this.__key &&
170
+ selection.anchor.offset === childrenLength) {
171
+ children[childrenLength - 1].remove();
172
+ children[childrenLength - 2].remove();
173
+ const newElement = $createParagraphNode();
174
+ this.insertAfter(newElement);
175
+ return newElement;
176
+ }
177
+ // If the selection is within the codeblock, find all leading tabs and
178
+ // spaces of the current line. Create a new line that has all those
179
+ // tabs and spaces, such that leading indentation is preserved.
180
+ const anchor = selection.anchor.getNode();
181
+ const firstNode = getFirstJupyterCodeHighlightNodeOfLine(anchor);
182
+ if (firstNode != null) {
183
+ let leadingWhitespace = 0;
184
+ const firstNodeText = firstNode.getTextContent();
185
+ while (leadingWhitespace < firstNodeText.length &&
186
+ /[\t ]/.test(firstNodeText[leadingWhitespace])) {
187
+ leadingWhitespace += 1;
188
+ }
189
+ if (leadingWhitespace > 0) {
190
+ const whitespace = firstNodeText.substring(0, leadingWhitespace);
191
+ const indentedChild = $createJupyterCodeHighlightNode(whitespace);
192
+ anchor.insertAfter(indentedChild);
193
+ selection.insertNodes([$createLineBreakNode()]);
194
+ indentedChild.select();
195
+ return indentedChild;
196
+ }
197
+ }
198
+ return null;
199
+ }
200
+ canInsertTab() {
201
+ const selection = $getSelection();
202
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
203
+ return false;
204
+ }
205
+ return true;
206
+ }
207
+ canIndent() {
208
+ return false;
209
+ }
210
+ collapseAtStart() {
211
+ const paragraph = $createParagraphNode();
212
+ const children = this.getChildren();
213
+ children.forEach((child) => paragraph.append(child));
214
+ this.replace(paragraph);
215
+ return true;
216
+ }
217
+ setLanguage(language) {
218
+ const writable = this.getWritable();
219
+ writable.__language = mapToPrismLanguage(language);
220
+ }
221
+ getLanguage() {
222
+ return this.getLatest().__language;
223
+ }
224
+ }
225
+ export function $createJupyterCodeNode(language, codeNodeUuid) {
226
+ return new JupyterCodeNode(language, codeNodeUuid);
227
+ }
228
+ export function $isJupyterCodeNode(node) {
229
+ return node instanceof JupyterCodeNode;
230
+ }
231
+ function convertPreElement(domNode) {
232
+ return { node: $createJupyterCodeNode("python") };
233
+ }
234
+ function convertDivElement(domNode) {
235
+ // domNode is a <div> since we matched it by nodeName
236
+ const div = domNode;
237
+ return {
238
+ after: (childLexicalNodes) => {
239
+ const domParent = domNode.parentNode;
240
+ if (domParent != null && domNode !== domParent.lastChild) {
241
+ childLexicalNodes.push($createLineBreakNode());
242
+ }
243
+ return childLexicalNodes;
244
+ },
245
+ node: isCodeElement(div) ? $createJupyterCodeNode("python") : null,
246
+ };
247
+ }
248
+ function convertTableElement() {
249
+ return { node: $createJupyterCodeNode("python") };
250
+ }
251
+ function convertCodeNoop() {
252
+ return { node: null };
253
+ }
254
+ function convertTableCellElement(domNode) {
255
+ // domNode is a <td> since we matched it by nodeName
256
+ const cell = domNode;
257
+ return {
258
+ after: (childLexicalNodes) => {
259
+ if (cell.parentNode && cell.parentNode.nextSibling) {
260
+ // Append newline between code lines
261
+ childLexicalNodes.push($createLineBreakNode());
262
+ }
263
+ return childLexicalNodes;
264
+ },
265
+ node: null,
266
+ };
267
+ }
268
+ function isCodeElement(div) {
269
+ return div.style.fontFamily.match('monospace') !== null;
270
+ }
271
+ function isGitHubCodeCell(cell) {
272
+ return cell.classList.contains('js-file-line');
273
+ }
274
+ function isGitHubCodeTable(table) {
275
+ return table.classList.contains('js-file-line-container');
276
+ }
277
+ //# sourceMappingURL=JupyterCodeNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JupyterCodeNode.js","sourceRoot":"","sources":["../../src/nodes/JupyterCodeNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /// <reference types="react" />
2
+ import { LexicalEditor, EditorConfig, DecoratorNode, LexicalNode, NodeKey, Spread, SerializedLexicalNode } from "lexical";
3
+ import { IOutput } from '@jupyterlab/nbformat';
4
+ import { OutputAdapter } from "@datalayer/jupyter-react";
5
+ export type SerializedJupyterOutputNode = Spread<{
6
+ type: "jupyter-output";
7
+ source: string;
8
+ outputs: IOutput[];
9
+ codeNodeUuid: string;
10
+ outputNodeUuid: string;
11
+ version: 1;
12
+ }, SerializedLexicalNode>;
13
+ export declare class JupyterOutputNode extends DecoratorNode<JSX.Element> {
14
+ __code: string;
15
+ __outputs: IOutput[];
16
+ __outputAdapter: OutputAdapter;
17
+ __codeNodeUuid: string;
18
+ __outputNodeUuid: string;
19
+ __executeTrigger: number;
20
+ /** @override */
21
+ static getType(): string;
22
+ /** @override */
23
+ static clone(node: JupyterOutputNode): JupyterOutputNode;
24
+ /** @override */
25
+ static importJSON(serializedNode: SerializedJupyterOutputNode): JupyterOutputNode;
26
+ /** @override */
27
+ constructor(source: string, outputAdapter: OutputAdapter, outputs: IOutput[], autoRun: boolean, codeNodeUuid?: string, outputNodeUuid?: string, key?: NodeKey);
28
+ setCode(code: string): void;
29
+ getCode(): string;
30
+ setCodeNodeUuid(codeNodeUuid: string): void;
31
+ getCodeNodeUuid(): string;
32
+ setOutputNodeUuid(outputNodeUuid: string): void;
33
+ getOutputNodeUuid(): string;
34
+ setExecuteTrigger(executeTrigger: number): void;
35
+ getExecuteTrigger(): number;
36
+ setAutoRun(autoRun: boolean): void;
37
+ getAutoRun(): boolean;
38
+ setOutputs(outputs: IOutput[]): void;
39
+ getOutputs(): IOutput[];
40
+ /** @override */
41
+ createDOM(): HTMLElement;
42
+ /** @override */
43
+ updateDOM(): false;
44
+ /** @override */
45
+ isTopLevel(): boolean;
46
+ /** @override */
47
+ isIsolated(): boolean;
48
+ /** @override */
49
+ decorate(_editor: LexicalEditor, _config: EditorConfig): import("react/jsx-runtime").JSX.Element;
50
+ /** @override */
51
+ exportJSON(): SerializedJupyterOutputNode;
52
+ /** @override */
53
+ remove(_preserveEmptyParent?: boolean): void;
54
+ removeForce(): void;
55
+ executeCode(code: string): void;
56
+ }
57
+ export declare function $createJupyterOutputNode(code: string, outputAdapter: OutputAdapter, outputs: IOutput[], autoRun: boolean, codeNodeUuid: string, outputNodeUuid: string): JupyterOutputNode;
58
+ export declare function $isJupyterOutputNode(node: LexicalNode): boolean;
@@ -0,0 +1,144 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /*
3
+ * Copyright (c) 2021-2023 Datalayer, Inc.
4
+ *
5
+ * MIT License
6
+ */
7
+ import { DecoratorNode } from "lexical";
8
+ import { UUID } from '@lumino/coreutils';
9
+ import { OUTPUT_UUID_TO_CODE_UUID, CODE_UUID_TO_OUTPUT_KEY, CODE_UUID_TO_OUTPUT_UUID, OUTPUT_UUID_TO_OUTPUT_KEY } from "../plugins/JupyterPlugin";
10
+ import { OutputAdapter } from "@datalayer/jupyter-react";
11
+ import JupyterOutputComponent from "../components/JupyterOutputComponent";
12
+ export class JupyterOutputNode extends DecoratorNode {
13
+ __code;
14
+ __outputs;
15
+ __outputAdapter;
16
+ __codeNodeUuid;
17
+ __outputNodeUuid;
18
+ __executeTrigger;
19
+ /** @override */
20
+ static getType() {
21
+ return "jupyter-output";
22
+ }
23
+ /** @override */
24
+ static clone(node) {
25
+ return new JupyterOutputNode(node.getCode(), node.__outputAdapter, node.__outputs, node.__autoRun, node.__codeNodeUuid, node.__outputNodeUuid, node.__key);
26
+ }
27
+ /** @override */
28
+ static importJSON(serializedNode) {
29
+ return $createJupyterOutputNode(serializedNode.source, new OutputAdapter(undefined, []), serializedNode.outputs, false, serializedNode.codeNodeUuid, serializedNode.outputNodeUuid);
30
+ }
31
+ /** @override */
32
+ constructor(source, outputAdapter, outputs, autoRun, codeNodeUuid, outputNodeUuid, key) {
33
+ super(key);
34
+ this.__codeNodeUuid = codeNodeUuid || UUID.uuid4();
35
+ this.__outputNodeUuid = outputNodeUuid || UUID.uuid4();
36
+ this.__code = source;
37
+ this.__outputs = outputs;
38
+ this.__outputAdapter = outputAdapter;
39
+ this.__executeTrigger = 0;
40
+ this.__autoRun = autoRun;
41
+ OUTPUT_UUID_TO_CODE_UUID.set(this.__outputNodeUuid, codeNodeUuid);
42
+ CODE_UUID_TO_OUTPUT_KEY.set(this.__codeNodeUuid, this.__key);
43
+ CODE_UUID_TO_OUTPUT_UUID.set(this.__codeNodeUuid, this.__outputNodeUuid);
44
+ OUTPUT_UUID_TO_OUTPUT_KEY.set(this.__outputNodeUuid, this.__key);
45
+ }
46
+ setCode(code) {
47
+ const self = this.getWritable();
48
+ self.__code = code;
49
+ }
50
+ getCode() {
51
+ const self = this.getLatest();
52
+ return self.__code;
53
+ }
54
+ setCodeNodeUuid(codeNodeUuid) {
55
+ const self = this.getWritable();
56
+ self.__codeNodeUuid = codeNodeUuid;
57
+ }
58
+ getCodeNodeUuid() {
59
+ const self = this.getLatest();
60
+ return self.__codeNodeUuid;
61
+ }
62
+ setOutputNodeUuid(outputNodeUuid) {
63
+ const self = this.getWritable();
64
+ self.__outputNodeUuid = outputNodeUuid;
65
+ }
66
+ getOutputNodeUuid() {
67
+ const self = this.getLatest();
68
+ return self.__outputNodeUuid;
69
+ }
70
+ setExecuteTrigger(executeTrigger) {
71
+ const self = this.getWritable();
72
+ self.__executeTrigger = executeTrigger;
73
+ }
74
+ getExecuteTrigger() {
75
+ const self = this.getLatest();
76
+ return self.__executeTrigger;
77
+ }
78
+ setAutoRun(autoRun) {
79
+ const self = this.getWritable();
80
+ self.__autoRun = autoRun;
81
+ }
82
+ getAutoRun() {
83
+ const self = this.getLatest();
84
+ return self.__autoRun;
85
+ }
86
+ setOutputs(outputs) {
87
+ const self = this.getWritable();
88
+ self.__outputs = outputs;
89
+ }
90
+ getOutputs() {
91
+ const self = this.getLatest();
92
+ return self.__outputs;
93
+ }
94
+ /** @override */
95
+ createDOM() {
96
+ return document.createElement('span');
97
+ }
98
+ /** @override */
99
+ updateDOM() {
100
+ return false;
101
+ }
102
+ /** @override */
103
+ isTopLevel() {
104
+ return true;
105
+ }
106
+ /** @override */
107
+ isIsolated() {
108
+ return false;
109
+ }
110
+ /** @override */
111
+ decorate(_editor, _config) {
112
+ return _jsx(JupyterOutputComponent, { code: this.getCode(), outputs: this.__outputs, outputAdapter: this.__outputAdapter, codeNodeUuid: this.__codeNodeUuid, outputNodeUuid: this.__outputNodeUuid, executeTrigger: this.getExecuteTrigger(), autoRun: this.__autoRun });
113
+ }
114
+ /** @override */
115
+ exportJSON() {
116
+ return {
117
+ type: "jupyter-output",
118
+ source: this.getCode(),
119
+ outputs: this.__outputAdapter.outputArea.model.toJSON(),
120
+ codeNodeUuid: this.getCodeNodeUuid(),
121
+ outputNodeUuid: this.getOutputNodeUuid(),
122
+ version: 1,
123
+ };
124
+ }
125
+ /** @override */
126
+ remove(_preserveEmptyParent) {
127
+ // Do not delete JupyterOutputNode.
128
+ }
129
+ removeForce() {
130
+ super.remove(false);
131
+ }
132
+ executeCode(code) {
133
+ this.setCode(code);
134
+ this.__outputAdapter.execute(code);
135
+ // this.setExecuteTrigger(this.getExecuteTrigger() + 1);
136
+ }
137
+ }
138
+ export function $createJupyterOutputNode(code, outputAdapter, outputs, autoRun, codeNodeUuid, outputNodeUuid) {
139
+ return new JupyterOutputNode(code, outputAdapter, outputs, autoRun, codeNodeUuid, outputNodeUuid);
140
+ }
141
+ export function $isJupyterOutputNode(node) {
142
+ return node instanceof JupyterOutputNode;
143
+ }
144
+ //# sourceMappingURL=JupyterOutputNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JupyterOutputNode.js","sourceRoot":"","sources":["../../src/nodes/JupyterOutputNode.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import type { EditorConfig, ElementFormatType, LexicalEditor, LexicalNode, NodeKey, Spread } from 'lexical';
9
+ import { DecoratorBlockNode, SerializedDecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode';
10
+ export type SerializedYouTubeNode = Spread<{
11
+ videoID: string;
12
+ type: 'youtube';
13
+ version: 1;
14
+ }, SerializedDecoratorBlockNode>;
15
+ export declare class YouTubeNode extends DecoratorBlockNode {
16
+ __id: string;
17
+ static getType(): string;
18
+ static clone(node: YouTubeNode): YouTubeNode;
19
+ static importJSON(serializedNode: SerializedYouTubeNode): YouTubeNode;
20
+ exportJSON(): SerializedYouTubeNode;
21
+ constructor(id: string, format?: ElementFormatType, key?: NodeKey);
22
+ updateDOM(): false;
23
+ getId(): string;
24
+ decorate(_editor: LexicalEditor, config: EditorConfig): JSX.Element;
25
+ isTopLevel(): true;
26
+ }
27
+ export declare function $createYouTubeNode(videoID: string): YouTubeNode;
28
+ export declare function $isYouTubeNode(node: YouTubeNode | LexicalNode | null | undefined): node is YouTubeNode;
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { BlockWithAlignableContents } from '@lexical/react/LexicalBlockWithAlignableContents';
3
+ import { DecoratorBlockNode } from '@lexical/react/LexicalDecoratorBlockNode';
4
+ function YouTubeComponent({ className, format, nodeKey, videoID, }) {
5
+ return (_jsx(BlockWithAlignableContents, { className: className, format: format, nodeKey: nodeKey, children: _jsx("iframe", { width: "560", height: "315", src: `https://www.youtube.com/embed/${videoID}`, frameBorder: "0", allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", allowFullScreen: true, title: "YouTube video" }) }));
6
+ }
7
+ export class YouTubeNode extends DecoratorBlockNode {
8
+ __id;
9
+ static getType() {
10
+ return 'youtube';
11
+ }
12
+ static clone(node) {
13
+ return new YouTubeNode(node.__id, node.__format, node.__key);
14
+ }
15
+ static importJSON(serializedNode) {
16
+ const node = $createYouTubeNode(serializedNode.videoID);
17
+ node.setFormat(serializedNode.format);
18
+ return node;
19
+ }
20
+ exportJSON() {
21
+ return {
22
+ ...super.exportJSON(),
23
+ type: 'youtube',
24
+ version: 1,
25
+ videoID: this.__id,
26
+ };
27
+ }
28
+ constructor(id, format, key) {
29
+ super(format, key);
30
+ this.__id = id;
31
+ }
32
+ updateDOM() {
33
+ return false;
34
+ }
35
+ getId() {
36
+ return this.__id;
37
+ }
38
+ decorate(_editor, config) {
39
+ const embedBlockTheme = config.theme.embedBlock || {};
40
+ const className = {
41
+ base: embedBlockTheme.base || '',
42
+ focus: embedBlockTheme.focus || '',
43
+ };
44
+ return (_jsx(YouTubeComponent, { className: className, format: this.__format, nodeKey: this.getKey(), videoID: this.__id }));
45
+ }
46
+ isTopLevel() {
47
+ return true;
48
+ }
49
+ }
50
+ export function $createYouTubeNode(videoID) {
51
+ return new YouTubeNode(videoID);
52
+ }
53
+ export function $isYouTubeNode(node) {
54
+ return node instanceof YouTubeNode;
55
+ }
56
+ //# sourceMappingURL=YouTubeNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YouTubeNode.js","sourceRoot":"","sources":["../../src/nodes/YouTubeNode.tsx"],"names":[],"mappings":";AAqBA,OAAO,EAAC,0BAA0B,EAAC,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAgC,MAAM,0CAA0C,CAAC;AAY5G,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,GACe;IACtB,OAAO,CACL,KAAC,0BAA0B,IACzB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,YAChB,iBACE,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,KAAK,EACZ,GAAG,EAAE,iCAAiC,OAAO,EAAE,EAC/C,WAAW,EAAC,GAAG,EACf,KAAK,EAAC,0FAA0F,EAChG,eAAe,EAAE,IAAI,EACrB,KAAK,EAAC,eAAe,GACrB,GACyB,CAC9B,CAAC;AACJ,CAAC;AAWD,MAAM,OAAO,WAAY,SAAQ,kBAAkB;IACjD,IAAI,CAAS;IAEb,MAAM,CAAC,OAAO;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAiB;QAC5B,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,cAAqC;QACrD,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QACR,OAAO;YACL,GAAG,KAAK,CAAC,UAAU,EAAE;YACrB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC;IACJ,CAAC;IAED,YAAY,EAAU,EAAE,MAA0B,EAAE,GAAa;QAC/D,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,SAAS;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,QAAQ,CAAC,OAAsB,EAAE,MAAoB;QACnD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;YAChC,KAAK,EAAE,eAAe,CAAC,KAAK,IAAI,EAAE;SACnC,CAAC;QACF,OAAO,CACL,KAAC,gBAAgB,IACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,CAAC,QAAQ,EACrB,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EACtB,OAAO,EAAE,IAAI,CAAC,IAAI,GAClB,CACH,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAkD;IAElD,OAAO,IAAI,YAAY,WAAW,CAAC;AACrC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { EmbedConfig } from '@lexical/react/LexicalAutoEmbedPlugin';
3
+ interface PlaygroundEmbedConfig extends EmbedConfig {
4
+ contentName: string;
5
+ icon?: JSX.Element;
6
+ exampleUrl: string;
7
+ keywords: Array<string>;
8
+ description?: string;
9
+ }
10
+ export declare const YoutubeEmbedConfig: PlaygroundEmbedConfig;
11
+ export declare const EmbedConfigs: PlaygroundEmbedConfig[];
12
+ export declare function AutoEmbedDialog({ embedConfig, onClose, }: {
13
+ embedConfig: PlaygroundEmbedConfig;
14
+ onClose: () => void;
15
+ }): JSX.Element;
16
+ export declare const AutoEmbedPlugin: () => JSX.Element;
17
+ export default AutoEmbedPlugin;