@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,242 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { $createJupyterCodeNode, $isJupyterCodeNode, JupyterCodeNode } from './../../nodes/JupyterCodeNode';
7
+ import { $createLinkNode, $isLinkNode, LinkNode } from '@lexical/link';
8
+ import { $createListItemNode, $createListNode, $isListItemNode, $isListNode, ListItemNode, ListNode, } from '@lexical/list';
9
+ import { $createHeadingNode, $createQuoteNode, $isHeadingNode, $isQuoteNode, HeadingNode, QuoteNode, } from '@lexical/rich-text';
10
+ import { $createLineBreakNode, $createTextNode, $isTextNode } from 'lexical';
11
+ const replaceWithBlock = (createNode) => {
12
+ return (parentNode, children, match) => {
13
+ const node = createNode(match);
14
+ node.append(...children);
15
+ parentNode.replace(node);
16
+ node.select(0, 0);
17
+ };
18
+ };
19
+ // Amount of spaces that define indentation level
20
+ // TODO: should be an option
21
+ const LIST_INDENT_SIZE = 4;
22
+ const listReplace = (listType) => {
23
+ return (parentNode, children, match) => {
24
+ const previousNode = parentNode.getPreviousSibling();
25
+ const listItem = $createListItemNode(listType === 'check' ? match[3] === 'x' : undefined);
26
+ if ($isListNode(previousNode) && previousNode.getListType() === listType) {
27
+ previousNode.append(listItem);
28
+ parentNode.remove();
29
+ }
30
+ else {
31
+ const list = $createListNode(listType, listType === 'number' ? Number(match[2]) : undefined);
32
+ list.append(listItem);
33
+ parentNode.replace(list);
34
+ }
35
+ listItem.append(...children);
36
+ listItem.select(0, 0);
37
+ const indent = Math.floor(match[1].length / LIST_INDENT_SIZE);
38
+ if (indent) {
39
+ listItem.setIndent(indent);
40
+ }
41
+ };
42
+ };
43
+ const listExport = (listNode, exportChildren, depth) => {
44
+ const output = [];
45
+ const children = listNode.getChildren();
46
+ let index = 0;
47
+ for (const listItemNode of children) {
48
+ if ($isListItemNode(listItemNode)) {
49
+ if (listItemNode.getChildrenSize() === 1) {
50
+ const firstChild = listItemNode.getFirstChild();
51
+ if ($isListNode(firstChild)) {
52
+ output.push(listExport(firstChild, exportChildren, depth + 1));
53
+ continue;
54
+ }
55
+ }
56
+ const indent = ' '.repeat(depth * LIST_INDENT_SIZE);
57
+ const listType = listNode.getListType();
58
+ const prefix = listType === 'number'
59
+ ? `${listNode.getStart() + index}. `
60
+ : listType === 'check'
61
+ ? `- [${listItemNode.getChecked() ? 'x' : ' '}] `
62
+ : '- ';
63
+ output.push(indent + prefix + exportChildren(listItemNode));
64
+ index++;
65
+ }
66
+ }
67
+ return output.join('\n');
68
+ };
69
+ export const HEADING = {
70
+ dependencies: [HeadingNode],
71
+ export: (node, exportChildren) => {
72
+ if (!$isHeadingNode(node)) {
73
+ return null;
74
+ }
75
+ const level = Number(node.getTag().slice(1));
76
+ return '#'.repeat(level) + ' ' + exportChildren(node);
77
+ },
78
+ regExp: /^(#{1,6})\s/,
79
+ replace: replaceWithBlock((match) => {
80
+ const tag = ('h' + match[1].length);
81
+ return $createHeadingNode(tag);
82
+ }),
83
+ type: 'element',
84
+ };
85
+ export const QUOTE = {
86
+ dependencies: [QuoteNode],
87
+ export: (node, exportChildren) => {
88
+ if (!$isQuoteNode(node)) {
89
+ return null;
90
+ }
91
+ const lines = exportChildren(node).split('\n');
92
+ const output = [];
93
+ for (const line of lines) {
94
+ output.push('> ' + line);
95
+ }
96
+ return output.join('\n');
97
+ },
98
+ regExp: /^>\s/,
99
+ replace: (parentNode, children, _match, isImport) => {
100
+ if (isImport) {
101
+ const previousNode = parentNode.getPreviousSibling();
102
+ if ($isQuoteNode(previousNode)) {
103
+ previousNode.splice(previousNode.getChildrenSize(), 0, [
104
+ $createLineBreakNode(),
105
+ ...children,
106
+ ]);
107
+ previousNode.select(0, 0);
108
+ parentNode.remove();
109
+ return;
110
+ }
111
+ }
112
+ const node = $createQuoteNode();
113
+ node.append(...children);
114
+ parentNode.replace(node);
115
+ node.select(0, 0);
116
+ },
117
+ type: 'element',
118
+ };
119
+ export const CODE = {
120
+ dependencies: [JupyterCodeNode],
121
+ export: (node) => {
122
+ if (!$isJupyterCodeNode(node)) {
123
+ return null;
124
+ }
125
+ const textContent = node.getTextContent();
126
+ return ('```' +
127
+ (node.getLanguage() || '') +
128
+ (textContent ? '\n' + textContent : '') +
129
+ '\n' +
130
+ '```');
131
+ },
132
+ regExp: /^```(\w{1,10})?\s/,
133
+ replace: replaceWithBlock((match) => {
134
+ return $createJupyterCodeNode(match ? match[1] : undefined);
135
+ }),
136
+ type: 'element',
137
+ };
138
+ export const UNORDERED_LIST = {
139
+ dependencies: [ListNode, ListItemNode],
140
+ export: (node, exportChildren) => {
141
+ return $isListNode(node) ? listExport(node, exportChildren, 0) : null;
142
+ },
143
+ regExp: /^(\s*)[-*+]\s/,
144
+ replace: listReplace('bullet'),
145
+ type: 'element',
146
+ };
147
+ export const CHECK_LIST = {
148
+ dependencies: [ListNode, ListItemNode],
149
+ export: (node, exportChildren) => {
150
+ return $isListNode(node) ? listExport(node, exportChildren, 0) : null;
151
+ },
152
+ regExp: /^(\s*)(?:-\s)?\s?(\[(\s|x)?\])\s/i,
153
+ replace: listReplace('check'),
154
+ type: 'element',
155
+ };
156
+ export const ORDERED_LIST = {
157
+ dependencies: [ListNode, ListItemNode],
158
+ export: (node, exportChildren) => {
159
+ return $isListNode(node) ? listExport(node, exportChildren, 0) : null;
160
+ },
161
+ regExp: /^(\s*)(\d{1,})\.\s/,
162
+ replace: listReplace('number'),
163
+ type: 'element',
164
+ };
165
+ export const INLINE_CODE = {
166
+ format: ['code'],
167
+ tag: '`',
168
+ type: 'text-format',
169
+ };
170
+ export const BOLD_ITALIC_STAR = {
171
+ format: ['bold', 'italic'],
172
+ tag: '***',
173
+ type: 'text-format',
174
+ };
175
+ export const BOLD_ITALIC_UNDERSCORE = {
176
+ format: ['bold', 'italic'],
177
+ intraword: false,
178
+ tag: '___',
179
+ type: 'text-format',
180
+ };
181
+ export const BOLD_STAR = {
182
+ format: ['bold'],
183
+ tag: '**',
184
+ type: 'text-format',
185
+ };
186
+ export const BOLD_UNDERSCORE = {
187
+ format: ['bold'],
188
+ intraword: false,
189
+ tag: '__',
190
+ type: 'text-format',
191
+ };
192
+ export const STRIKETHROUGH = {
193
+ format: ['strikethrough'],
194
+ tag: '~~',
195
+ type: 'text-format',
196
+ };
197
+ export const ITALIC_STAR = {
198
+ format: ['italic'],
199
+ tag: '*',
200
+ type: 'text-format',
201
+ };
202
+ export const ITALIC_UNDERSCORE = {
203
+ format: ['italic'],
204
+ intraword: false,
205
+ tag: '_',
206
+ type: 'text-format',
207
+ };
208
+ // Order of text transformers matters:
209
+ //
210
+ // - code should go first as it prevents any transformations inside
211
+ // - then longer tags match (e.g. ** or __ should go before * or _)
212
+ export const LINK = {
213
+ dependencies: [LinkNode],
214
+ export: (node, exportChildren, exportFormat) => {
215
+ if (!$isLinkNode(node)) {
216
+ return null;
217
+ }
218
+ const linkContent = `[${node.getTextContent()}](${node.getURL()})`;
219
+ const firstChild = node.getFirstChild();
220
+ // Add text styles only if link has single text node inside. If it's more
221
+ // then one we ignore it as markdown does not support nested styles for links
222
+ if (node.getChildrenSize() === 1 && $isTextNode(firstChild)) {
223
+ return exportFormat(firstChild, linkContent);
224
+ }
225
+ else {
226
+ return linkContent;
227
+ }
228
+ },
229
+ importRegExp: /(?:\[([^[]+)\])(?:\(([^(]+)\))/,
230
+ regExp: /(?:\[([^[]+)\])(?:\(([^(]+)\))$/,
231
+ replace: (textNode, match) => {
232
+ const [, linkText, linkUrl] = match;
233
+ const linkNode = $createLinkNode(linkUrl);
234
+ const linkTextNode = $createTextNode(linkText);
235
+ linkTextNode.setFormat(textNode.getFormat());
236
+ linkNode.append(linkTextNode);
237
+ textNode.replace(linkNode);
238
+ },
239
+ trigger: ')',
240
+ type: 'text-match',
241
+ };
242
+ //# sourceMappingURL=MarkdownTransformers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownTransformers.js","sourceRoot":"","sources":["../../../src/convert/markdown/MarkdownTransformers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function $convertToMarkdownString(): string;
@@ -0,0 +1,126 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { $isLinkNode } from '@lexical/link';
7
+ import { $getRoot, $isElementNode, $isLineBreakNode, $isTextNode } from 'lexical';
8
+ import { getAllMarkdownCriteriaForParagraphs, getAllMarkdownCriteriaForTextNodes, } from './utils';
9
+ export function $convertToMarkdownString() {
10
+ const output = [];
11
+ const children = $getRoot().getChildren();
12
+ for (const child of children) {
13
+ const result = exportTopLevelElementOrDecorator(child);
14
+ if (result != null) {
15
+ output.push(result);
16
+ }
17
+ }
18
+ return output.join('\n');
19
+ }
20
+ function exportTopLevelElementOrDecorator(node) {
21
+ const elementTransformers = getAllMarkdownCriteriaForParagraphs();
22
+ for (const transformer of elementTransformers) {
23
+ if (transformer.export != null) {
24
+ const result = transformer.export(node, (_node) => exportChildren(_node));
25
+ if (result != null) {
26
+ return result;
27
+ }
28
+ }
29
+ }
30
+ return $isElementNode(node) ? exportChildren(node) : null;
31
+ }
32
+ function exportChildren(node) {
33
+ const output = [];
34
+ const children = node.getChildren();
35
+ for (const child of children) {
36
+ if ($isLineBreakNode(child)) {
37
+ output.push('\n');
38
+ }
39
+ else if ($isTextNode(child)) {
40
+ output.push(exportTextNode(child, child.getTextContent(), node));
41
+ }
42
+ else if ($isLinkNode(child)) {
43
+ const linkContent = `[${child.getTextContent()}](${child.getURL()})`;
44
+ const firstChild = child.getFirstChild();
45
+ // Add text styles only if link has single text node inside. If it's more
46
+ // then one we either ignore it and have single <a> to cover whole link,
47
+ // or process them, but then have link cut into multiple <a>.
48
+ // For now choosing the first option.
49
+ if (child.getChildrenSize() === 1 && $isTextNode(firstChild)) {
50
+ output.push(exportTextNode(firstChild, linkContent, child));
51
+ }
52
+ else {
53
+ output.push(linkContent);
54
+ }
55
+ }
56
+ else if ($isElementNode(child)) {
57
+ output.push(exportChildren(child));
58
+ }
59
+ }
60
+ return output.join('');
61
+ }
62
+ function exportTextNode(node, textContent, parentNode) {
63
+ let output = textContent;
64
+ const applied = new Set();
65
+ const textTransformers = getAllMarkdownCriteriaForTextNodes();
66
+ for (const transformer of textTransformers) {
67
+ const { exportFormat: format, exportTag: tag, exportTagClose: tagClose = tag, } = transformer;
68
+ if (format != null &&
69
+ tag != null &&
70
+ tagClose != null &&
71
+ hasFormat(node, format) &&
72
+ !applied.has(format)) {
73
+ // Multiple tags might be used for the same format (*, _)
74
+ applied.add(format);
75
+ // Prevent adding extra wrapping tags if it's already
76
+ // added by a previous sibling (or will be closed by the next one)
77
+ const previousNode = getTextSibling(node, true);
78
+ if (!hasFormat(previousNode, format)) {
79
+ output = tag + output;
80
+ }
81
+ const nextNode = getTextSibling(node, false);
82
+ if (!hasFormat(nextNode, format)) {
83
+ output += tagClose;
84
+ }
85
+ }
86
+ }
87
+ return output;
88
+ }
89
+ // Finds text sibling including cases for inline elements
90
+ function getTextSibling(node, backward) {
91
+ let sibling = backward ? node.getPreviousSibling() : node.getNextSibling();
92
+ if (!sibling) {
93
+ const parent = node.getParentOrThrow();
94
+ if (parent.isInline()) {
95
+ sibling = backward
96
+ ? parent.getPreviousSibling()
97
+ : parent.getNextSibling();
98
+ }
99
+ }
100
+ while (sibling) {
101
+ if ($isElementNode(sibling)) {
102
+ if (!sibling.isInline()) {
103
+ break;
104
+ }
105
+ const descendant = backward
106
+ ? sibling.getLastDescendant()
107
+ : sibling.getFirstDescendant();
108
+ if ($isTextNode(descendant)) {
109
+ return descendant;
110
+ }
111
+ else {
112
+ sibling = backward
113
+ ? sibling.getPreviousSibling()
114
+ : sibling.getNextSibling();
115
+ }
116
+ }
117
+ if ($isTextNode(sibling)) {
118
+ return sibling;
119
+ }
120
+ }
121
+ return null;
122
+ }
123
+ function hasFormat(node, format) {
124
+ return $isTextNode(node) && node.hasFormat(format);
125
+ }
126
+ //# sourceMappingURL=convertToMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertToMarkdown.js","sourceRoot":"","sources":["../../../src/convert/markdown/convertToMarkdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
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
+ */
8
+ import type { ElementTransformer, TextFormatTransformer, TextMatchTransformer, Transformer } from './MarkdownTransformers';
9
+ import { registerMarkdownShortcuts } from './MarkdownShortcuts';
10
+ import { BOLD_ITALIC_STAR, BOLD_ITALIC_UNDERSCORE, BOLD_STAR, BOLD_UNDERSCORE, CHECK_LIST, CODE, HEADING, INLINE_CODE, ITALIC_STAR, ITALIC_UNDERSCORE, LINK, ORDERED_LIST, QUOTE, STRIKETHROUGH, UNORDERED_LIST } from './MarkdownTransformers';
11
+ declare const ELEMENT_TRANSFORMERS: Array<ElementTransformer>;
12
+ declare const TEXT_FORMAT_TRANSFORMERS: Array<TextFormatTransformer>;
13
+ declare const TEXT_MATCH_TRANSFORMERS: Array<TextMatchTransformer>;
14
+ declare const TRANSFORMERS: Array<Transformer>;
15
+ declare function $convertFromMarkdownString(markdown: string, transformers?: Array<Transformer>): void;
16
+ declare function $convertToMarkdownString(transformers?: Array<Transformer>): string;
17
+ export { $convertFromMarkdownString, $convertToMarkdownString, BOLD_ITALIC_STAR, BOLD_ITALIC_UNDERSCORE, BOLD_STAR, BOLD_UNDERSCORE, CHECK_LIST, CODE, ELEMENT_TRANSFORMERS, ElementTransformer, HEADING, INLINE_CODE, ITALIC_STAR, ITALIC_UNDERSCORE, LINK, ORDERED_LIST, QUOTE, registerMarkdownShortcuts, STRIKETHROUGH, TEXT_FORMAT_TRANSFORMERS, TEXT_MATCH_TRANSFORMERS, TextFormatTransformer, TextMatchTransformer, Transformer, TRANSFORMERS, UNORDERED_LIST, };
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright (c) 2021-2023 Datalayer, Inc.
3
+ *
4
+ * MIT License
5
+ */
6
+ import { createMarkdownExport } from './MarkdownExport';
7
+ import { createMarkdownImport } from './MarkdownImport';
8
+ import { registerMarkdownShortcuts } from './MarkdownShortcuts';
9
+ import { BOLD_ITALIC_STAR, BOLD_ITALIC_UNDERSCORE, BOLD_STAR, BOLD_UNDERSCORE, CHECK_LIST, CODE, HEADING, INLINE_CODE, ITALIC_STAR, ITALIC_UNDERSCORE, LINK, ORDERED_LIST, QUOTE, STRIKETHROUGH, UNORDERED_LIST, } from './MarkdownTransformers';
10
+ const ELEMENT_TRANSFORMERS = [
11
+ HEADING,
12
+ QUOTE,
13
+ CODE,
14
+ UNORDERED_LIST,
15
+ ORDERED_LIST,
16
+ ];
17
+ // Order of text format transformers matters:
18
+ //
19
+ // - code should go first as it prevents any transformations inside
20
+ // - then longer tags match (e.g. ** or __ should go before * or _)
21
+ const TEXT_FORMAT_TRANSFORMERS = [
22
+ INLINE_CODE,
23
+ BOLD_ITALIC_STAR,
24
+ BOLD_ITALIC_UNDERSCORE,
25
+ BOLD_STAR,
26
+ BOLD_UNDERSCORE,
27
+ ITALIC_STAR,
28
+ ITALIC_UNDERSCORE,
29
+ STRIKETHROUGH,
30
+ ];
31
+ const TEXT_MATCH_TRANSFORMERS = [LINK];
32
+ const TRANSFORMERS = [
33
+ ...ELEMENT_TRANSFORMERS,
34
+ ...TEXT_FORMAT_TRANSFORMERS,
35
+ ...TEXT_MATCH_TRANSFORMERS,
36
+ ];
37
+ function $convertFromMarkdownString(markdown, transformers = TRANSFORMERS) {
38
+ const importMarkdown = createMarkdownImport(transformers);
39
+ return importMarkdown(markdown);
40
+ }
41
+ function $convertToMarkdownString(transformers = TRANSFORMERS) {
42
+ const exportMarkdown = createMarkdownExport(transformers);
43
+ return exportMarkdown();
44
+ }
45
+ export { $convertFromMarkdownString, $convertToMarkdownString, BOLD_ITALIC_STAR, BOLD_ITALIC_UNDERSCORE, BOLD_STAR, BOLD_UNDERSCORE, CHECK_LIST, CODE, ELEMENT_TRANSFORMERS, HEADING, INLINE_CODE, ITALIC_STAR, ITALIC_UNDERSCORE, LINK, ORDERED_LIST, QUOTE, registerMarkdownShortcuts, STRIKETHROUGH, TEXT_FORMAT_TRANSFORMERS, TEXT_MATCH_TRANSFORMERS, TRANSFORMERS, UNORDERED_LIST, };
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/convert/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,eAAe,EACf,UAAU,EACV,IAAI,EACJ,OAAO,EACP,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,aAAa,EACb,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,MAAM,oBAAoB,GAA8B;IACtD,OAAO;IACP,KAAK;IACL,IAAI;IACJ,cAAc;IACd,YAAY;CACb,CAAC;AAEF,6CAA6C;AAC7C,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,MAAM,wBAAwB,GAAiC;IAC7D,WAAW;IACX,gBAAgB;IAChB,sBAAsB;IACtB,SAAS;IACT,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,aAAa;CACd,CAAC;AAEF,MAAM,uBAAuB,GAAgC,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,YAAY,GAAuB;IACvC,GAAG,oBAAoB;IACvB,GAAG,wBAAwB;IAC3B,GAAG,uBAAuB;CAC3B,CAAC;AAEF,SAAS,0BAA0B,CACjC,QAAgB,EAChB,eAAmC,YAAY;IAE/C,MAAM,cAAc,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,wBAAwB,CAC/B,eAAmC,YAAY;IAE/C,MAAM,cAAc,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC1D,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,EACT,eAAe,EACf,UAAU,EACV,IAAI,EACJ,oBAAoB,EAEpB,OAAO,EACP,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,yBAAyB,EACzB,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EAIvB,YAAY,EACZ,cAAc,GACf,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ElementTransformer, TextFormatTransformer, TextMatchTransformer, Transformer } from '.';
2
+ import type { ElementNode, LexicalNode, TextFormatType } from 'lexical';
3
+ type MarkdownFormatKind = 'noTransformation' | 'paragraphH1' | 'paragraphH2' | 'paragraphH3' | 'paragraphH4' | 'paragraphH5' | 'paragraphH6' | 'paragraphBlockQuote' | 'paragraphUnorderedList' | 'paragraphOrderedList' | 'paragraphCodeBlock' | 'horizontalRule' | 'bold' | 'code' | 'italic' | 'underline' | 'strikethrough' | 'italic_bold' | 'strikethrough_italic' | 'strikethrough_bold' | 'strikethrough_italic_bold' | 'link';
4
+ type MarkdownCriteria = Readonly<{
5
+ export?: (node: LexicalNode, traverseChildren: (elementNode: ElementNode) => string) => string | null;
6
+ exportFormat?: TextFormatType;
7
+ exportTag?: string;
8
+ exportTagClose?: string;
9
+ markdownFormatKind: MarkdownFormatKind | null | undefined;
10
+ regEx: RegExp;
11
+ regExForAutoFormatting: RegExp;
12
+ requiresParagraphStart: boolean | null | undefined;
13
+ }>;
14
+ type MarkdownCriteriaArray = Array<MarkdownCriteria>;
15
+ export declare function getAllMarkdownCriteriaForParagraphs(): MarkdownCriteriaArray;
16
+ export declare function getAllMarkdownCriteriaForTextNodes(): MarkdownCriteriaArray;
17
+ export declare function indexBy<T>(list: Array<T>, callback: (arg0: T) => string): Readonly<Record<string, Array<T>>>;
18
+ export declare function transformersByType(transformers: Array<Transformer>): Readonly<{
19
+ element: Array<ElementTransformer>;
20
+ textFormat: Array<TextFormatTransformer>;
21
+ textMatch: Array<TextMatchTransformer>;
22
+ }>;
23
+ export declare const PUNCTUATION_OR_SPACE: RegExp;
24
+ export {};