@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.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/lib/components/InsertEquationDialog.d.ts +6 -0
- package/lib/components/InsertEquationDialog.js +17 -0
- package/lib/components/InsertEquationDialog.js.map +1 -0
- package/lib/components/InsertImageDialog.d.ts +13 -0
- package/lib/components/InsertImageDialog.js +48 -0
- package/lib/components/InsertImageDialog.js.map +1 -0
- package/lib/components/JupyterCellComponent.d.ts +2 -0
- package/lib/components/JupyterCellComponent.js +12 -0
- package/lib/components/JupyterCellComponent.js.map +1 -0
- package/lib/components/JupyterOutputComponent.d.ts +13 -0
- package/lib/components/JupyterOutputComponent.js +8 -0
- package/lib/components/JupyterOutputComponent.js.map +1 -0
- package/lib/convert/LexicalToNbFormat.d.ts +4 -0
- package/lib/convert/LexicalToNbFormat.js +100 -0
- package/lib/convert/LexicalToNbFormat.js.map +1 -0
- package/lib/convert/NbFormatToLexical.d.ts +4 -0
- package/lib/convert/NbFormatToLexical.js +31 -0
- package/lib/convert/NbFormatToLexical.js.map +1 -0
- package/lib/convert/markdown/MarkdownExport.d.ts +11 -0
- package/lib/convert/markdown/MarkdownExport.js +129 -0
- package/lib/convert/markdown/MarkdownExport.js.map +1 -0
- package/lib/convert/markdown/MarkdownImport.d.ts +2 -0
- package/lib/convert/markdown/MarkdownImport.js +246 -0
- package/lib/convert/markdown/MarkdownImport.js.map +1 -0
- package/lib/convert/markdown/MarkdownShortcuts.d.ts +10 -0
- package/lib/convert/markdown/MarkdownShortcuts.js +254 -0
- package/lib/convert/markdown/MarkdownShortcuts.js.map +1 -0
- package/lib/convert/markdown/MarkdownTransformers.d.ts +39 -0
- package/lib/convert/markdown/MarkdownTransformers.js +242 -0
- package/lib/convert/markdown/MarkdownTransformers.js.map +1 -0
- package/lib/convert/markdown/convertToMarkdown.d.ts +1 -0
- package/lib/convert/markdown/convertToMarkdown.js +126 -0
- package/lib/convert/markdown/convertToMarkdown.js.map +1 -0
- package/lib/convert/markdown/index.d.ts +17 -0
- package/lib/convert/markdown/index.js +46 -0
- package/lib/convert/markdown/index.js.map +1 -0
- package/lib/convert/markdown/utils.d.ts +24 -0
- package/lib/convert/markdown/utils.js +303 -0
- package/lib/convert/markdown/utils.js.map +1 -0
- package/lib/convert/transformers/MarkdownTransformers.d.ts +13 -0
- package/lib/convert/transformers/MarkdownTransformers.js +178 -0
- package/lib/convert/transformers/MarkdownTransformers.js.map +1 -0
- package/lib/examples/App.d.ts +1 -0
- package/lib/examples/App.js +22 -0
- package/lib/examples/App.js.map +1 -0
- package/lib/examples/Editor.d.ts +9 -0
- package/lib/examples/Editor.js +81 -0
- package/lib/examples/Editor.js.map +1 -0
- package/lib/examples/Example.d.ts +1 -0
- package/lib/examples/Example.js +11 -0
- package/lib/examples/Example.js.map +1 -0
- package/lib/examples/content/Example.ipynb.json +98 -0
- package/lib/examples/content/Example.lexical.json +259 -0
- package/lib/examples/context/LexicalContext.d.ts +13 -0
- package/lib/examples/context/LexicalContext.js +22 -0
- package/lib/examples/context/LexicalContext.js.map +1 -0
- package/lib/examples/plugins/ToolbarPlugin.d.ts +2 -0
- package/lib/examples/plugins/ToolbarPlugin.js +448 -0
- package/lib/examples/plugins/ToolbarPlugin.js.map +1 -0
- package/lib/examples/plugins/TreeViewPlugin.d.ts +2 -0
- package/lib/examples/plugins/TreeViewPlugin.js +13 -0
- package/lib/examples/plugins/TreeViewPlugin.js.map +1 -0
- package/lib/examples/themes/Theme.d.ts +10 -0
- package/lib/examples/themes/Theme.js +94 -0
- package/lib/examples/themes/Theme.js.map +1 -0
- package/lib/hooks/useModal.d.ts +2 -0
- package/lib/hooks/useModal.js +39 -0
- package/lib/hooks/useModal.js.map +1 -0
- package/lib/images/yellow-flower-small.jpg +0 -0
- package/lib/index.d.ts +40 -0
- package/lib/index.js +55 -0
- package/lib/index.js.map +1 -0
- package/lib/jupyter/index.d.ts +0 -0
- package/lib/jupyter/index.js +6 -0
- package/lib/jupyter/index.js.map +1 -0
- package/lib/jupyter/lab/Example.d.ts +1 -0
- package/lib/jupyter/lab/Example.js +11 -0
- package/lib/jupyter/lab/Example.js.map +1 -0
- package/lib/jupyter/lab/__tests__/datalayer.spec.d.ts +0 -0
- package/lib/jupyter/lab/__tests__/datalayer.spec.js +11 -0
- package/lib/jupyter/lab/__tests__/datalayer.spec.js.map +1 -0
- package/lib/jupyter/lab/component/MockComponent.d.ts +2 -0
- package/lib/jupyter/lab/component/MockComponent.js +17 -0
- package/lib/jupyter/lab/component/MockComponent.js.map +1 -0
- package/lib/jupyter/lab/component/MockTab1.d.ts +2 -0
- package/lib/jupyter/lab/component/MockTab1.js +14 -0
- package/lib/jupyter/lab/component/MockTab1.js.map +1 -0
- package/lib/jupyter/lab/handler.d.ts +8 -0
- package/lib/jupyter/lab/handler.js +41 -0
- package/lib/jupyter/lab/handler.js.map +1 -0
- package/lib/jupyter/lab/index.d.ts +7 -0
- package/lib/jupyter/lab/index.js +73 -0
- package/lib/jupyter/lab/index.js.map +1 -0
- package/lib/jupyter/lab/widget.d.ts +6 -0
- package/lib/jupyter/lab/widget.js +18 -0
- package/lib/jupyter/lab/widget.js.map +1 -0
- package/lib/nodes/EquationNode.d.ts +31 -0
- package/lib/nodes/EquationNode.js +118 -0
- package/lib/nodes/EquationNode.js.map +1 -0
- package/lib/nodes/ImageNode.css +50 -0
- package/lib/nodes/ImageNode.d.ts +58 -0
- package/lib/nodes/ImageNode.js +275 -0
- package/lib/nodes/ImageNode.js.map +1 -0
- package/lib/nodes/JupyterCodeHighlightNode.d.ts +49 -0
- package/lib/nodes/JupyterCodeHighlightNode.js +165 -0
- package/lib/nodes/JupyterCodeHighlightNode.js.map +1 -0
- package/lib/nodes/JupyterCodeHighlighter.d.ts +28 -0
- package/lib/nodes/JupyterCodeHighlighter.js +522 -0
- package/lib/nodes/JupyterCodeHighlighter.js.map +1 -0
- package/lib/nodes/JupyterCodeNode.d.ts +50 -0
- package/lib/nodes/JupyterCodeNode.js +277 -0
- package/lib/nodes/JupyterCodeNode.js.map +1 -0
- package/lib/nodes/JupyterOutputNode.d.ts +58 -0
- package/lib/nodes/JupyterOutputNode.js +144 -0
- package/lib/nodes/JupyterOutputNode.js.map +1 -0
- package/lib/nodes/YouTubeNode.d.ts +28 -0
- package/lib/nodes/YouTubeNode.js +56 -0
- package/lib/nodes/YouTubeNode.js.map +1 -0
- package/lib/plugins/AutoEmbedPlugin.d.ts +17 -0
- package/lib/plugins/AutoEmbedPlugin.js +110 -0
- package/lib/plugins/AutoEmbedPlugin.js.map +1 -0
- package/lib/plugins/AutoLinkPlugin.d.ts +2 -0
- package/lib/plugins/AutoLinkPlugin.js +34 -0
- package/lib/plugins/AutoLinkPlugin.js.map +1 -0
- package/lib/plugins/CodeActionMenuPlugin.css +52 -0
- package/lib/plugins/CodeActionMenuPlugin.d.ts +12 -0
- package/lib/plugins/CodeActionMenuPlugin.js +108 -0
- package/lib/plugins/CodeActionMenuPlugin.js.map +1 -0
- package/lib/plugins/ComponentPickerMenuPlugin.d.ts +2 -0
- package/lib/plugins/ComponentPickerMenuPlugin.js +244 -0
- package/lib/plugins/ComponentPickerMenuPlugin.js.map +1 -0
- package/lib/plugins/EquationsPlugin.d.ts +21 -0
- package/lib/plugins/EquationsPlugin.js +48 -0
- package/lib/plugins/EquationsPlugin.js.map +1 -0
- package/lib/plugins/HorizontalRulePlugin.d.ts +2 -0
- package/lib/plugins/HorizontalRulePlugin.js +40 -0
- package/lib/plugins/HorizontalRulePlugin.js.map +1 -0
- package/lib/plugins/ImagesPlugin.d.ts +25 -0
- package/lib/plugins/ImagesPlugin.js +212 -0
- package/lib/plugins/ImagesPlugin.js.map +1 -0
- package/lib/plugins/JupyterPlugin.css +13 -0
- package/lib/plugins/JupyterPlugin.d.ts +16 -0
- package/lib/plugins/JupyterPlugin.js +169 -0
- package/lib/plugins/JupyterPlugin.js.map +1 -0
- package/lib/plugins/ListMaxIndentLevelPlugin.d.ts +4 -0
- package/lib/plugins/ListMaxIndentLevelPlugin.js +49 -0
- package/lib/plugins/ListMaxIndentLevelPlugin.js.map +1 -0
- package/lib/plugins/MardownPlugin.d.ts +2 -0
- package/lib/plugins/MardownPlugin.js +20 -0
- package/lib/plugins/MardownPlugin.js.map +1 -0
- package/lib/plugins/NbformatContentPlugin.d.ts +6 -0
- package/lib/plugins/NbformatContentPlugin.js +20 -0
- package/lib/plugins/NbformatContentPlugin.js.map +1 -0
- package/lib/plugins/TableOfContentsPlugin.css +87 -0
- package/lib/plugins/TableOfContentsPlugin.d.ts +3 -0
- package/lib/plugins/TableOfContentsPlugin.js +115 -0
- package/lib/plugins/TableOfContentsPlugin.js.map +1 -0
- package/lib/plugins/YouTubePlugin.d.ts +4 -0
- package/lib/plugins/YouTubePlugin.js +34 -0
- package/lib/plugins/YouTubePlugin.js.map +1 -0
- package/lib/ui/Button.css +40 -0
- package/lib/ui/Button.d.ts +18 -0
- package/lib/ui/Button.js +8 -0
- package/lib/ui/Button.js.map +1 -0
- package/lib/ui/ContentEditable.css +24 -0
- package/lib/ui/ContentEditable.d.ts +5 -0
- package/lib/ui/ContentEditable.js +20 -0
- package/lib/ui/ContentEditable.js.map +1 -0
- package/lib/ui/CopyButton.d.ts +7 -0
- package/lib/ui/CopyButton.js +47 -0
- package/lib/ui/CopyButton.js.map +1 -0
- package/lib/ui/Dialog.css +23 -0
- package/lib/ui/Dialog.d.ts +16 -0
- package/lib/ui/Dialog.js +21 -0
- package/lib/ui/Dialog.js.map +1 -0
- package/lib/ui/DropDown.d.ts +23 -0
- package/lib/ui/DropDown.js +119 -0
- package/lib/ui/DropDown.js.map +1 -0
- package/lib/ui/EquationEditor.css +42 -0
- package/lib/ui/EquationEditor.d.ts +18 -0
- package/lib/ui/EquationEditor.js +31 -0
- package/lib/ui/EquationEditor.js.map +1 -0
- package/lib/ui/FileInput.d.ts +15 -0
- package/lib/ui/FileInput.js +18 -0
- package/lib/ui/FileInput.js.map +1 -0
- package/lib/ui/ImageResizer.d.ts +16 -0
- package/lib/ui/ImageResizer.js +166 -0
- package/lib/ui/ImageResizer.js.map +1 -0
- package/lib/ui/Input.css +37 -0
- package/lib/ui/KatexEquationAlterer.css +45 -0
- package/lib/ui/KatexEquationAlterer.d.ts +7 -0
- package/lib/ui/KatexEquationAlterer.js +33 -0
- package/lib/ui/KatexEquationAlterer.js.map +1 -0
- package/lib/ui/KatexRenderer.d.ts +6 -0
- package/lib/ui/KatexRenderer.js +36 -0
- package/lib/ui/KatexRenderer.js.map +1 -0
- package/lib/ui/Modal.css +67 -0
- package/lib/ui/Modal.d.ts +15 -0
- package/lib/ui/Modal.js +58 -0
- package/lib/ui/Modal.js.map +1 -0
- package/lib/ui/Placeholder.css +29 -0
- package/lib/ui/Placeholder.d.ts +14 -0
- package/lib/ui/Placeholder.js +7 -0
- package/lib/ui/Placeholder.js.map +1 -0
- package/lib/ui/PrettierButton.css +20 -0
- package/lib/ui/PrettierButton.tsx_tmp +133 -0
- package/lib/ui/TextInput.d.ts +16 -0
- package/lib/ui/TextInput.js +20 -0
- package/lib/ui/TextInput.js.map +1 -0
- package/lib/utils/canUseDOM.d.ts +8 -0
- package/lib/utils/canUseDOM.js +16 -0
- package/lib/utils/canUseDOM.js.map +1 -0
- package/lib/utils/debouncer.d.ts +1 -0
- package/lib/utils/debouncer.js +24 -0
- package/lib/utils/debouncer.js.map +1 -0
- package/lib/utils/invariant.d.ts +8 -0
- package/lib/utils/invariant.js +23 -0
- package/lib/utils/invariant.js.map +1 -0
- package/lib/utils/join.d.ts +8 -0
- package/lib/utils/join.js +16 -0
- package/lib/utils/join.js.map +1 -0
- package/lib/utils/selection.d.ts +8 -0
- package/lib/utils/selection.js +14 -0
- package/lib/utils/selection.js.map +1 -0
- package/lib/utils/useLayoutEffect.d.ts +10 -0
- package/lib/utils/useLayoutEffect.js +19 -0
- package/lib/utils/useLayoutEffect.js.map +1 -0
- package/package.json +166 -0
- package/style/base.css +16 -0
- package/style/index.css +7 -0
- 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 {};
|