@mdxeditor/editor 1.14.3 → 2.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 (203) hide show
  1. package/dist/MDXEditor.js +19 -25
  2. package/dist/RealmWithPlugins.js +38 -0
  3. package/dist/directive-editors/GenericDirectiveEditor.js +7 -4
  4. package/dist/index.d.ts +2590 -62
  5. package/dist/index.js +138 -66
  6. package/dist/jsx-editors/GenericJsxEditor.js +12 -9
  7. package/dist/plugins/codeblock/CodeBlockNode.js +5 -5
  8. package/dist/plugins/codeblock/index.js +37 -63
  9. package/dist/plugins/codemirror/CodeMirrorEditor.js +3 -2
  10. package/dist/plugins/codemirror/index.js +28 -45
  11. package/dist/plugins/core/GenericHTMLNode.js +9 -1
  12. package/dist/plugins/core/MdastHTMLNode.js +0 -1
  13. package/dist/plugins/core/NestedLexicalEditor.js +11 -10
  14. package/dist/plugins/core/PropertyPopover.js +3 -2
  15. package/dist/plugins/core/SharedHistoryPlugin.js +3 -3
  16. package/dist/plugins/core/index.js +433 -384
  17. package/dist/plugins/core/ui/DownshiftAutoComplete.js +3 -2
  18. package/dist/plugins/core/ui/PopoverUtils.js +3 -2
  19. package/dist/plugins/diff-source/DiffSourceWrapper.js +3 -4
  20. package/dist/plugins/diff-source/DiffViewer.js +7 -7
  21. package/dist/plugins/diff-source/SourceEditor.js +6 -6
  22. package/dist/plugins/diff-source/index.js +17 -52
  23. package/dist/plugins/directives/DirectiveNode.js +28 -5
  24. package/dist/plugins/directives/index.js +36 -43
  25. package/dist/plugins/frontmatter/FrontmatterEditor.js +20 -16
  26. package/dist/plugins/frontmatter/index.js +51 -62
  27. package/dist/plugins/headings/index.js +43 -49
  28. package/dist/plugins/image/ImageDialog.js +11 -7
  29. package/dist/plugins/image/ImageEditor.js +12 -7
  30. package/dist/plugins/image/ImageNode.js +27 -5
  31. package/dist/plugins/image/index.js +65 -72
  32. package/dist/plugins/jsx/LexicalJsxNode.js +3 -2
  33. package/dist/plugins/jsx/index.js +48 -60
  34. package/dist/plugins/link/index.js +15 -20
  35. package/dist/plugins/link-dialog/LinkDialog.js +17 -16
  36. package/dist/plugins/link-dialog/index.js +194 -216
  37. package/dist/plugins/lists/LexicalListItemVisitor.js +2 -1
  38. package/dist/plugins/lists/index.js +50 -65
  39. package/dist/plugins/markdown-shortcut/index.js +12 -15
  40. package/dist/plugins/quote/index.js +11 -19
  41. package/dist/plugins/sandpack/SandpackEditor.js +3 -2
  42. package/dist/plugins/sandpack/index.js +34 -50
  43. package/dist/plugins/sandpack/useCodeMirrorRef.js +7 -6
  44. package/dist/plugins/table/TableEditor.js +20 -13
  45. package/dist/plugins/table/TableNode.js +28 -0
  46. package/dist/plugins/table/index.js +32 -39
  47. package/dist/plugins/thematic-break/index.js +19 -32
  48. package/dist/plugins/toolbar/components/BlockTypeSelect.js +9 -8
  49. package/dist/plugins/toolbar/components/BoldItalicUnderlineToggles.js +4 -4
  50. package/dist/plugins/toolbar/components/ChangeAdmonitionType.js +3 -2
  51. package/dist/plugins/toolbar/components/ChangeCodeMirrorLanguage.js +5 -5
  52. package/dist/plugins/toolbar/components/CodeToggle.js +4 -3
  53. package/dist/plugins/toolbar/components/CreateLink.js +6 -4
  54. package/dist/plugins/toolbar/components/DiffSourceToggleWrapper.js +5 -5
  55. package/dist/plugins/toolbar/components/InsertAdmonition.js +5 -3
  56. package/dist/plugins/toolbar/components/InsertCodeBlock.js +5 -3
  57. package/dist/plugins/toolbar/components/InsertFrontmatter.js +6 -5
  58. package/dist/plugins/toolbar/components/InsertImage.js +6 -5
  59. package/dist/plugins/toolbar/components/InsertSandpack.js +5 -4
  60. package/dist/plugins/toolbar/components/InsertTable.js +5 -3
  61. package/dist/plugins/toolbar/components/InsertThematicBreak.js +6 -4
  62. package/dist/plugins/toolbar/components/ListsToggle.js +5 -4
  63. package/dist/plugins/toolbar/components/ShowSandpackInfo.js +9 -4
  64. package/dist/plugins/toolbar/components/UndoRedo.js +3 -3
  65. package/dist/plugins/toolbar/index.js +15 -31
  66. package/dist/plugins/toolbar/primitives/DialogButton.js +23 -24
  67. package/dist/plugins/toolbar/primitives/TooltipWrap.js +3 -2
  68. package/dist/plugins/toolbar/primitives/select.js +5 -4
  69. package/dist/plugins/toolbar/primitives/toolbar.js +10 -4
  70. package/dist/style.css +935 -571
  71. package/dist/styles/globals.css.js +1 -4
  72. package/dist/styles/lexical-theme.module.css.js +25 -19
  73. package/dist/styles/ui.module.css.js +103 -103
  74. package/package.json +65 -317
  75. package/dist/FormatConstants.d.ts +0 -9
  76. package/dist/MDXEditor.d.ts +0 -103
  77. package/dist/directive-editors/AdmonitionDirectiveDescriptor.d.ts +0 -17
  78. package/dist/directive-editors/GenericDirectiveEditor.d.ts +0 -8
  79. package/dist/exportMarkdownFromLexical.d.ts +0 -138
  80. package/dist/gurx/index.d.ts +0 -3
  81. package/dist/gurx/react.d.ts +0 -152
  82. package/dist/gurx/react.js +0 -206
  83. package/dist/gurx/realm.d.ts +0 -148
  84. package/dist/gurx/realm.js +0 -489
  85. package/dist/gurx/realmFactory.d.ts +0 -79
  86. package/dist/gurx/realmFactory.js +0 -32
  87. package/dist/importMarkdownToLexical.d.ts +0 -101
  88. package/dist/jsx-editors/GenericJsxEditor.d.ts +0 -8
  89. package/dist/plugins/codeblock/CodeBlockNode.d.ts +0 -100
  90. package/dist/plugins/codeblock/CodeBlockVisitor.d.ts +0 -4
  91. package/dist/plugins/codeblock/MdastCodeVisitor.d.ts +0 -3
  92. package/dist/plugins/codeblock/index.d.ts +0 -787
  93. package/dist/plugins/codemirror/CodeMirrorEditor.d.ts +0 -3
  94. package/dist/plugins/codemirror/index.d.ts +0 -1038
  95. package/dist/plugins/core/GenericHTMLNode.d.ts +0 -38
  96. package/dist/plugins/core/Icon.d.ts +0 -6
  97. package/dist/plugins/core/LexicalGenericHTMLNodeVisitor.d.ts +0 -4
  98. package/dist/plugins/core/LexicalLinebreakVisitor.d.ts +0 -4
  99. package/dist/plugins/core/LexicalParagraphVisitor.d.ts +0 -4
  100. package/dist/plugins/core/LexicalRootVisitor.d.ts +0 -4
  101. package/dist/plugins/core/LexicalTextVisitor.d.ts +0 -5
  102. package/dist/plugins/core/MdastBreakVisitor.d.ts +0 -3
  103. package/dist/plugins/core/MdastFormattingVisitor.d.ts +0 -4
  104. package/dist/plugins/core/MdastHTMLNode.d.ts +0 -13
  105. package/dist/plugins/core/MdastHTMLVisitor.d.ts +0 -3
  106. package/dist/plugins/core/MdastInlineCodeVisitor.d.ts +0 -3
  107. package/dist/plugins/core/MdastParagraphVisitor.d.ts +0 -3
  108. package/dist/plugins/core/MdastRootVisitor.d.ts +0 -3
  109. package/dist/plugins/core/MdastTextVisitor.d.ts +0 -3
  110. package/dist/plugins/core/NestedLexicalEditor.d.ts +0 -92
  111. package/dist/plugins/core/PropertyPopover.d.ts +0 -23
  112. package/dist/plugins/core/SharedHistoryPlugin.d.ts +0 -2
  113. package/dist/plugins/core/index.d.ts +0 -583
  114. package/dist/plugins/core/ui/DownshiftAutoComplete.d.ts +0 -15
  115. package/dist/plugins/core/ui/PopoverUtils.d.ts +0 -4
  116. package/dist/plugins/diff-source/DiffSourceWrapper.d.ts +0 -4
  117. package/dist/plugins/diff-source/DiffViewer.d.ts +0 -2
  118. package/dist/plugins/diff-source/SourceEditor.d.ts +0 -4
  119. package/dist/plugins/diff-source/index.d.ts +0 -725
  120. package/dist/plugins/directives/DirectiveNode.d.ts +0 -51
  121. package/dist/plugins/directives/DirectiveVisitor.d.ts +0 -4
  122. package/dist/plugins/directives/MdastDirectiveVisitor.d.ts +0 -3
  123. package/dist/plugins/directives/index.d.ts +0 -773
  124. package/dist/plugins/frontmatter/FrontmatterEditor.d.ts +0 -6
  125. package/dist/plugins/frontmatter/FrontmatterNode.d.ts +0 -35
  126. package/dist/plugins/frontmatter/LexicalFrontmatterVisitor.d.ts +0 -4
  127. package/dist/plugins/frontmatter/MdastFrontmatterVisitor.d.ts +0 -3
  128. package/dist/plugins/frontmatter/index.d.ts +0 -717
  129. package/dist/plugins/headings/LexicalHeadingVisitor.d.ts +0 -4
  130. package/dist/plugins/headings/MdastHeadingVisitor.d.ts +0 -3
  131. package/dist/plugins/headings/index.d.ts +0 -707
  132. package/dist/plugins/image/ImageDialog.d.ts +0 -2
  133. package/dist/plugins/image/ImageEditor.d.ts +0 -10
  134. package/dist/plugins/image/ImageNode.d.ts +0 -65
  135. package/dist/plugins/image/ImageResizer.d.ts +0 -18
  136. package/dist/plugins/image/LexicalImageVisitor.d.ts +0 -4
  137. package/dist/plugins/image/MdastImageVisitor.d.ts +0 -6
  138. package/dist/plugins/image/index.d.ts +0 -804
  139. package/dist/plugins/jsx/LexicalJsxNode.d.ts +0 -54
  140. package/dist/plugins/jsx/LexicalJsxVisitor.d.ts +0 -4
  141. package/dist/plugins/jsx/MdastMdxJsEsmVisitor.d.ts +0 -3
  142. package/dist/plugins/jsx/MdastMdxJsxElementVisitor.d.ts +0 -3
  143. package/dist/plugins/jsx/index.d.ts +0 -779
  144. package/dist/plugins/link/AutoLinkPlugin.d.ts +0 -9
  145. package/dist/plugins/link/LexicalLinkVisitor.d.ts +0 -4
  146. package/dist/plugins/link/MdastLinkVisitor.d.ts +0 -3
  147. package/dist/plugins/link/index.d.ts +0 -101
  148. package/dist/plugins/link-dialog/LinkDialog.d.ts +0 -16
  149. package/dist/plugins/link-dialog/index.d.ts +0 -670
  150. package/dist/plugins/lists/LexicalListItemVisitor.d.ts +0 -4
  151. package/dist/plugins/lists/LexicalListVisitor.d.ts +0 -4
  152. package/dist/plugins/lists/MdastListItemVisitor.d.ts +0 -3
  153. package/dist/plugins/lists/MdastListVisitor.d.ts +0 -3
  154. package/dist/plugins/lists/index.d.ts +0 -703
  155. package/dist/plugins/markdown-shortcut/index.d.ts +0 -80
  156. package/dist/plugins/quote/LexicalQuoteVisitor.d.ts +0 -4
  157. package/dist/plugins/quote/MdastBlockQuoteVisitor.d.ts +0 -3
  158. package/dist/plugins/quote/index.d.ts +0 -480
  159. package/dist/plugins/sandpack/SandpackEditor.d.ts +0 -7
  160. package/dist/plugins/sandpack/index.d.ts +0 -1077
  161. package/dist/plugins/sandpack/useCodeMirrorRef.d.ts +0 -4
  162. package/dist/plugins/table/LexicalTableVisitor.d.ts +0 -4
  163. package/dist/plugins/table/MdastTableVisitor.d.ts +0 -3
  164. package/dist/plugins/table/TableEditor.d.ts +0 -21
  165. package/dist/plugins/table/TableNode.d.ts +0 -52
  166. package/dist/plugins/table/index.d.ts +0 -704
  167. package/dist/plugins/thematic-break/LexicalThematicBreakVisitor.d.ts +0 -4
  168. package/dist/plugins/thematic-break/MdastThematicBreakVisitor.d.ts +0 -3
  169. package/dist/plugins/thematic-break/index.d.ts +0 -693
  170. package/dist/plugins/toolbar/components/BlockTypeSelect.d.ts +0 -6
  171. package/dist/plugins/toolbar/components/BoldItalicUnderlineToggles.d.ts +0 -5
  172. package/dist/plugins/toolbar/components/ChangeAdmonitionType.d.ts +0 -6
  173. package/dist/plugins/toolbar/components/ChangeCodeMirrorLanguage.d.ts +0 -7
  174. package/dist/plugins/toolbar/components/CodeToggle.d.ts +0 -6
  175. package/dist/plugins/toolbar/components/CreateLink.d.ts +0 -6
  176. package/dist/plugins/toolbar/components/DiffSourceToggleWrapper.d.ts +0 -18
  177. package/dist/plugins/toolbar/components/InsertAdmonition.d.ts +0 -6
  178. package/dist/plugins/toolbar/components/InsertCodeBlock.d.ts +0 -7
  179. package/dist/plugins/toolbar/components/InsertFrontmatter.d.ts +0 -6
  180. package/dist/plugins/toolbar/components/InsertImage.d.ts +0 -6
  181. package/dist/plugins/toolbar/components/InsertSandpack.d.ts +0 -6
  182. package/dist/plugins/toolbar/components/InsertTable.d.ts +0 -6
  183. package/dist/plugins/toolbar/components/InsertThematicBreak.d.ts +0 -6
  184. package/dist/plugins/toolbar/components/KitchenSinkToolbar.d.ts +0 -7
  185. package/dist/plugins/toolbar/components/ListsToggle.d.ts +0 -7
  186. package/dist/plugins/toolbar/components/ShowSandpackInfo.d.ts +0 -7
  187. package/dist/plugins/toolbar/components/UndoRedo.d.ts +0 -5
  188. package/dist/plugins/toolbar/index.d.ts +0 -564
  189. package/dist/plugins/toolbar/primitives/DialogButton.d.ts +0 -40
  190. package/dist/plugins/toolbar/primitives/TooltipWrap.d.ts +0 -8
  191. package/dist/plugins/toolbar/primitives/select.d.ts +0 -50
  192. package/dist/plugins/toolbar/primitives/toolbar.d.ts +0 -163
  193. package/dist/styles/lexicalTheme.d.ts +0 -2
  194. package/dist/utils/detectMac.d.ts +0 -3
  195. package/dist/utils/fp.d.ts +0 -47
  196. package/dist/utils/isPartOftheEditorUI.d.ts +0 -1
  197. package/dist/utils/lexicalHelpers.d.ts +0 -11
  198. package/dist/utils/makeHslTransparent.d.ts +0 -1
  199. package/dist/utils/mergeStyleAttributes.d.ts +0 -1
  200. package/dist/utils/uuid4.d.ts +0 -1
  201. package/dist/utils/voidEmitter.d.ts +0 -14
  202. package/dist/utils/whitespaceConversion.d.ts +0 -2
  203. package/dist/utils/whitespaceConversion.js +0 -9
@@ -1,202 +1,117 @@
1
+ import { realmPlugin } from "../../RealmWithPlugins.js";
1
2
  import { createEmptyHistoryState } from "@lexical/react/LexicalHistoryPlugin.js";
2
3
  import { $isHeadingNode } from "@lexical/rich-text";
3
4
  import { $setBlocksType } from "@lexical/selection";
4
5
  import { $findMatchingParent, $wrapNodeInElement, $insertNodeToNearestRoot } from "@lexical/utils";
5
- import { createCommand, SELECTION_CHANGE_COMMAND, $getRoot, COMMAND_PRIORITY_CRITICAL, $setSelection, BLUR_COMMAND, FOCUS_COMMAND, KEY_DOWN_COMMAND, $isDecoratorNode, FORMAT_TEXT_COMMAND, $isRootOrShadowRoot, $getSelection, $isRangeSelection, $insertNodes, $createParagraphNode, ParagraphNode, TextNode } from "lexical";
6
+ import { Cell, withLatestFrom, Signal, filter, scan } from "@mdxeditor/gurx";
7
+ import { createCommand, FORMAT_TEXT_COMMAND, $isRootOrShadowRoot, $getRoot, $setSelection, SELECTION_CHANGE_COMMAND, COMMAND_PRIORITY_CRITICAL, FOCUS_COMMAND, KEY_DOWN_COMMAND, $isDecoratorNode, BLUR_COMMAND, $getSelection, $isRangeSelection, $insertNodes, $createParagraphNode, ParagraphNode, TextNode } from "lexical";
8
+ import { mdxJsxFromMarkdown, mdxJsxToMarkdown } from "mdast-util-mdx-jsx";
9
+ import { mdxJsx } from "micromark-extension-mdx-jsx";
10
+ import { mdxMd } from "micromark-extension-mdx-md";
6
11
  import { exportMarkdownFromLexical } from "../../exportMarkdownFromLexical.js";
7
12
  import { importMarkdownToLexical, MarkdownParseError, UnrecognizedMarkdownConstructError } from "../../importMarkdownToLexical.js";
13
+ import { controlOrMeta } from "../../utils/detectMac.js";
14
+ import { noop } from "../../utils/fp.js";
15
+ import { GenericHTMLNode } from "./GenericHTMLNode.js";
16
+ import { $createGenericHTMLNode, $isGenericHTMLNode, TYPE_NAME } from "./GenericHTMLNode.js";
17
+ import { LexicalGenericHTMLVisitor } from "./LexicalGenericHTMLNodeVisitor.js";
8
18
  import { LexicalLinebreakVisitor } from "./LexicalLinebreakVisitor.js";
9
19
  import { LexicalParagraphVisitor } from "./LexicalParagraphVisitor.js";
10
20
  import { LexicalRootVisitor } from "./LexicalRootVisitor.js";
11
21
  import { LexicalTextVisitor } from "./LexicalTextVisitor.js";
22
+ import { MdastBreakVisitor } from "./MdastBreakVisitor.js";
12
23
  import { MdastFormattingVisitor } from "./MdastFormattingVisitor.js";
24
+ import { MdastHTMLVisitor } from "./MdastHTMLVisitor.js";
13
25
  import { MdastInlineCodeVisitor } from "./MdastInlineCodeVisitor.js";
14
26
  import { MdastParagraphVisitor } from "./MdastParagraphVisitor.js";
15
27
  import { MdastRootVisitor } from "./MdastRootVisitor.js";
16
28
  import { MdastTextVisitor } from "./MdastTextVisitor.js";
17
29
  import { SharedHistoryPlugin } from "./SharedHistoryPlugin.js";
18
- import { noop } from "../../utils/fp.js";
19
- import { controlOrMeta } from "../../utils/detectMac.js";
20
- import { MdastBreakVisitor } from "./MdastBreakVisitor.js";
21
- import { mdxJsxFromMarkdown, mdxJsxToMarkdown } from "mdast-util-mdx-jsx";
22
- import { mdxJsx } from "micromark-extension-mdx-jsx";
23
- import { MdastHTMLVisitor } from "./MdastHTMLVisitor.js";
24
- import { GenericHTMLNode } from "./GenericHTMLNode.js";
25
- import { $createGenericHTMLNode, $isGenericHTMLNode } from "./GenericHTMLNode.js";
26
- import { LexicalGenericHTMLVisitor } from "./LexicalGenericHTMLNodeVisitor.js";
27
- import { system } from "../../gurx/realmFactory.js";
28
- import { realmPlugin } from "../../gurx/react.js";
29
30
  const NESTED_EDITOR_UPDATED_COMMAND = createCommand("NESTED_EDITOR_UPDATED_COMMAND");
30
- const coreSystem = system((r) => {
31
- function createAppendNodeFor(node) {
32
- const appendNode = r.node();
33
- r.link(
34
- r.pipe(
35
- appendNode,
36
- r.o.withLatestFrom(node),
37
- r.o.map(([newValue, values]) => {
38
- if (values.includes(newValue)) {
39
- return values;
40
- }
41
- return [...values, newValue];
42
- })
43
- ),
44
- node
45
- );
46
- return appendNode;
47
- }
48
- const rootEditor = r.node(null);
49
- const activeEditor = r.node(null, true);
50
- const contentEditableClassName = r.node("");
51
- const readOnly = r.node(false);
52
- const placeholder = r.node("");
53
- const autoFocus = r.node(false);
54
- const inFocus = r.node(false, true);
55
- const currentFormat = r.node(0, true);
56
- const markdownProcessingError = r.node(null);
57
- const markdownErrorSignal = r.node();
31
+ const rootEditor$ = Cell(null);
32
+ const activeEditor$ = Cell(null);
33
+ const contentEditableClassName$ = Cell("");
34
+ const readOnly$ = Cell(false, (r) => {
35
+ r.sub(r.pipe(readOnly$, withLatestFrom(rootEditor$)), ([readOnly, rootEditor]) => {
36
+ rootEditor == null ? void 0 : rootEditor.setEditable(!readOnly);
37
+ });
38
+ });
39
+ const placeholder$ = Cell("");
40
+ const autoFocus$ = Cell(false);
41
+ const inFocus$ = Cell(false);
42
+ const currentFormat$ = Cell(0);
43
+ const markdownProcessingError$ = Cell(null);
44
+ const markdownErrorSignal$ = Signal((r) => {
58
45
  r.link(
59
46
  r.pipe(
60
- markdownProcessingError,
61
- r.o.filter((e) => e !== null)
47
+ markdownProcessingError$,
48
+ filter((e) => e !== null)
62
49
  ),
63
- markdownErrorSignal
50
+ markdownErrorSignal$
64
51
  );
65
- const applyFormat = r.node();
66
- const currentSelection = r.node(null);
67
- const activeEditorSubscriptions = r.node([]);
68
- const rootEditorSubscriptions = r.node([]);
69
- const editorInFocus = r.node(null);
70
- const onBlur = r.node();
71
- const iconComponentFor = r.node((name) => {
72
- throw new Error(`No icon component for ${name}`);
52
+ });
53
+ const applyFormat$ = Signal((r) => {
54
+ r.sub(r.pipe(applyFormat$, withLatestFrom(activeEditor$)), ([format, theEditor]) => {
55
+ theEditor == null ? void 0 : theEditor.dispatchCommand(FORMAT_TEXT_COMMAND, format);
73
56
  });
74
- const rebind = () => r.o.scan((teardowns, [subs, activeEditorValue]) => {
75
- teardowns.forEach((teardown) => {
76
- if (!teardown) {
77
- throw new Error("You have a subscription that does not return a teardown");
78
- }
79
- teardown();
80
- });
81
- return activeEditorValue ? subs.map((s) => s(activeEditorValue)) : [];
82
- }, []);
83
- r.pipe(r.combine(activeEditorSubscriptions, activeEditor), rebind());
84
- r.pipe(r.combine(rootEditorSubscriptions, rootEditor), rebind());
85
- const createRootEditorSubscription = createAppendNodeFor(rootEditorSubscriptions);
86
- const createActiveEditorSubscription = createAppendNodeFor(activeEditorSubscriptions);
87
- function handleSelectionChange() {
88
- const selection = $getSelection();
89
- if ($isRangeSelection(selection)) {
90
- r.pubKeys({
91
- currentSelection: selection,
92
- currentFormat: selection.format
93
- });
57
+ });
58
+ const currentSelection$ = Cell(null, (r) => {
59
+ r.sub(r.pipe(currentSelection$, withLatestFrom(activeEditor$)), ([selection, theEditor]) => {
60
+ if (!selection || !theEditor) {
61
+ return;
94
62
  }
95
- }
96
- r.pub(createRootEditorSubscription, (theRootEditor) => {
97
- return theRootEditor.registerCommand(
98
- SELECTION_CHANGE_COMMAND,
99
- (_, theActiveEditor) => {
100
- r.pubIn({
101
- [activeEditor.key]: theActiveEditor,
102
- [inFocus.key]: true
103
- });
104
- if (theActiveEditor._parentEditor === null) {
105
- theActiveEditor.getEditorState().read(() => {
106
- r.pub(editorInFocus, {
107
- rootNode: $getRoot(),
108
- editorType: "lexical"
109
- });
110
- });
111
- }
112
- handleSelectionChange();
113
- return false;
114
- },
115
- COMMAND_PRIORITY_CRITICAL
116
- );
117
- });
118
- r.pub(createRootEditorSubscription, (theRootEditor) => {
119
- return theRootEditor.registerUpdateListener(({ dirtyElements, dirtyLeaves, editorState }) => {
120
- const err = r.getValue(markdownProcessingError);
121
- if (err !== null) {
122
- return;
123
- }
124
- if (dirtyElements.size === 0 && dirtyLeaves.size === 0) {
125
- return;
126
- }
127
- let theNewMarkdownValue;
128
- editorState.read(() => {
129
- theNewMarkdownValue = exportMarkdownFromLexical({
130
- root: $getRoot(),
131
- visitors: r.getValue(exportVisitors),
132
- jsxComponentDescriptors: r.getValue(jsxComponentDescriptors),
133
- toMarkdownExtensions: r.getValue(toMarkdownExtensions),
134
- toMarkdownOptions: r.getValue(toMarkdownOptions),
135
- jsxIsAvailable: r.getValue(jsxIsAvailable)
136
- });
137
- });
138
- r.pub(markdown, theNewMarkdownValue.trim());
63
+ const anchorNode = selection.anchor.getNode();
64
+ let element = anchorNode.getKey() === "root" ? anchorNode : $findMatchingParent(anchorNode, (e) => {
65
+ const parent = e.getParent();
66
+ return parent !== null && $isRootOrShadowRoot(parent);
139
67
  });
140
- });
141
- const initialMarkdown = r.node("");
142
- const markdown = r.node("", true);
143
- const markdownSignal = r.node();
144
- r.link(markdown, markdownSignal);
145
- r.link(initialMarkdown, markdown);
146
- const importVisitors = r.node([]);
147
- const syntaxExtensions = r.node([]);
148
- const mdastExtensions = r.node([]);
149
- const usedLexicalNodes = r.node([]);
150
- const exportVisitors = r.node([]);
151
- const toMarkdownExtensions = r.node([]);
152
- const toMarkdownOptions = r.node({}, true);
153
- const jsxIsAvailable = r.node(false);
154
- const jsxComponentDescriptors = r.node([]);
155
- const editorRootElementRef = r.node(null);
156
- const addLexicalNode = createAppendNodeFor(usedLexicalNodes);
157
- const addImportVisitor = createAppendNodeFor(importVisitors);
158
- const addSyntaxExtension = createAppendNodeFor(syntaxExtensions);
159
- const addMdastExtension = createAppendNodeFor(mdastExtensions);
160
- const addExportVisitor = createAppendNodeFor(exportVisitors);
161
- const addToMarkdownExtension = createAppendNodeFor(toMarkdownExtensions);
162
- const setMarkdown = r.node();
163
- function tryImportingMarkdown(markdownValue) {
164
- try {
165
- importMarkdownToLexical({
166
- root: $getRoot(),
167
- visitors: r.getValue(importVisitors),
168
- mdastExtensions: r.getValue(mdastExtensions),
169
- markdown: markdownValue,
170
- syntaxExtensions: r.getValue(syntaxExtensions)
171
- });
172
- r.pub(markdownProcessingError, null);
173
- } catch (e) {
174
- if (e instanceof MarkdownParseError || e instanceof UnrecognizedMarkdownConstructError) {
175
- r.pubIn({
176
- [markdown.key]: markdownValue,
177
- [markdownProcessingError.key]: {
178
- error: e.message,
179
- source: markdown
180
- }
181
- });
182
- } else {
183
- throw e;
184
- }
68
+ if (element === null) {
69
+ element = anchorNode.getTopLevelElementOrThrow();
185
70
  }
186
- }
71
+ const elementKey = element.getKey();
72
+ const elementDOM = theEditor.getElementByKey(elementKey);
73
+ if (elementDOM !== null) {
74
+ const blockType = $isHeadingNode(element) ? element.getTag() : element.getType();
75
+ r.pub(currentBlockType$, blockType);
76
+ }
77
+ });
78
+ });
79
+ const initialMarkdown$ = Cell("");
80
+ const markdown$ = Cell("");
81
+ const markdownSignal$ = Signal((r) => {
82
+ r.link(markdown$, markdownSignal$);
83
+ r.link(initialMarkdown$, markdown$);
84
+ });
85
+ const importVisitors$ = Cell([]);
86
+ const syntaxExtensions$ = Cell([]);
87
+ const mdastExtensions$ = Cell([]);
88
+ const usedLexicalNodes$ = Cell([]);
89
+ const exportVisitors$ = Cell([]);
90
+ const toMarkdownExtensions$ = Cell([]);
91
+ const toMarkdownOptions$ = Cell({});
92
+ const jsxIsAvailable$ = Cell(false);
93
+ const jsxComponentDescriptors$ = Cell([]);
94
+ const editorRootElementRef$ = Cell(null);
95
+ const addLexicalNode$ = Appender(usedLexicalNodes$);
96
+ const addImportVisitor$ = Appender(importVisitors$);
97
+ const addSyntaxExtension$ = Appender(syntaxExtensions$);
98
+ const addMdastExtension$ = Appender(mdastExtensions$);
99
+ const addExportVisitor$ = Appender(exportVisitors$);
100
+ const addToMarkdownExtension$ = Appender(toMarkdownExtensions$);
101
+ const setMarkdown$ = Signal((r) => {
187
102
  r.sub(
188
103
  r.pipe(
189
- setMarkdown,
190
- r.o.withLatestFrom(markdown, rootEditor, inFocus),
191
- r.o.filter(([newMarkdown, oldMarkdown]) => {
104
+ setMarkdown$,
105
+ withLatestFrom(markdown$, rootEditor$, inFocus$),
106
+ filter(([newMarkdown, oldMarkdown]) => {
192
107
  return newMarkdown.trim() !== oldMarkdown.trim();
193
108
  })
194
109
  ),
195
- ([theNewMarkdownValue, , editor, inFocus2]) => {
110
+ ([theNewMarkdownValue, , editor, inFocus]) => {
196
111
  editor == null ? void 0 : editor.update(() => {
197
112
  $getRoot().clear();
198
- tryImportingMarkdown(theNewMarkdownValue);
199
- if (!inFocus2) {
113
+ tryImportingMarkdown(r, theNewMarkdownValue);
114
+ if (!inFocus) {
200
115
  $setSelection(null);
201
116
  } else {
202
117
  editor.focus();
@@ -204,124 +119,232 @@ const coreSystem = system((r) => {
204
119
  });
205
120
  }
206
121
  );
207
- const initialRootEditorState = r.node((theRootEditor) => {
208
- r.pub(rootEditor, theRootEditor);
209
- r.pub(activeEditor, theRootEditor);
210
- tryImportingMarkdown(r.getValue(initialMarkdown));
211
- const autoFocusValue = r.getValue(autoFocus);
212
- if (autoFocusValue) {
213
- if (autoFocusValue === true) {
214
- setTimeout(() => theRootEditor.focus(noop, { defaultSelection: "rootStart" }));
215
- return;
122
+ });
123
+ function rebind() {
124
+ return scan((teardowns, [subs, activeEditorValue]) => {
125
+ teardowns.forEach((teardown) => {
126
+ if (!teardown) {
127
+ throw new Error("You have a subscription that does not return a teardown");
216
128
  }
217
- setTimeout(
218
- () => theRootEditor.focus(noop, {
219
- defaultSelection: autoFocusValue.defaultSelection ?? "rootStart"
220
- })
221
- );
222
- }
223
- });
224
- r.pub(createActiveEditorSubscription, (editor) => {
225
- return editor.registerUpdateListener(({ editorState }) => {
226
- editorState.read(() => {
227
- handleSelectionChange();
228
- });
129
+ teardown();
229
130
  });
230
- });
231
- r.pub(createActiveEditorSubscription, (theEditor) => {
232
- return theEditor.registerCommand(
233
- BLUR_COMMAND,
234
- (payload) => {
235
- var _a;
236
- const theRootEditor = r.getValue(rootEditor);
237
- if (theRootEditor) {
238
- const movingOutside = !((_a = theRootEditor.getRootElement()) == null ? void 0 : _a.contains(payload.relatedTarget));
239
- if (movingOutside) {
240
- r.pubIn({
241
- [inFocus.key]: false,
242
- [onBlur.key]: payload
243
- });
244
- }
131
+ return activeEditorValue ? subs.map((s) => s(activeEditorValue)) : [];
132
+ }, []);
133
+ }
134
+ const activeEditorSubscriptions$ = Cell([], (r) => {
135
+ r.pipe(r.combine(activeEditorSubscriptions$, activeEditor$), rebind());
136
+ });
137
+ const rootEditorSubscriptions$ = Cell([], (r) => {
138
+ r.pipe(r.combine(rootEditorSubscriptions$, rootEditor$), rebind());
139
+ });
140
+ const editorInFocus$ = Cell(null);
141
+ const onBlur$ = Signal();
142
+ const iconComponentFor$ = Cell((name) => {
143
+ throw new Error(`No icon component for ${name}`);
144
+ });
145
+ function Appender(cell$, init) {
146
+ return Signal((r, sig$) => {
147
+ r.changeWith(cell$, sig$, (values, newValue) => {
148
+ if (!Array.isArray(newValue)) {
149
+ newValue = [newValue];
150
+ }
151
+ let result = values;
152
+ for (const v of newValue) {
153
+ if (!values.includes(v)) {
154
+ result = [...result, v];
245
155
  }
246
- return false;
247
- },
248
- COMMAND_PRIORITY_CRITICAL
249
- );
250
- });
251
- r.pub(createRootEditorSubscription, (theEditor) => {
252
- return theEditor.registerCommand(
253
- FOCUS_COMMAND,
254
- () => {
255
- r.pub(inFocus, true);
256
- return false;
257
- },
258
- COMMAND_PRIORITY_CRITICAL
259
- );
156
+ }
157
+ return result;
158
+ });
159
+ init == null ? void 0 : init(r, sig$);
260
160
  });
261
- r.pub(createRootEditorSubscription, (theRootEditor) => {
262
- return theRootEditor.registerCommand(
263
- KEY_DOWN_COMMAND,
264
- (event) => {
265
- const { keyCode, ctrlKey, metaKey } = event;
266
- if (keyCode === 65 && controlOrMeta(metaKey, ctrlKey)) {
267
- let shouldOverride = false;
268
- theRootEditor.getEditorState().read(() => {
269
- shouldOverride = $isDecoratorNode($getRoot().getFirstChild()) || $isDecoratorNode($getRoot().getLastChild());
161
+ }
162
+ function handleSelectionChange(r) {
163
+ const selection = $getSelection();
164
+ if ($isRangeSelection(selection)) {
165
+ r.pubIn({
166
+ [currentSelection$]: selection,
167
+ [currentFormat$]: selection.format
168
+ });
169
+ }
170
+ }
171
+ const createRootEditorSubscription$ = Appender(rootEditorSubscriptions$, (r, sig$) => {
172
+ r.pub(sig$, [
173
+ (rootEditor) => {
174
+ return rootEditor.registerCommand(
175
+ SELECTION_CHANGE_COMMAND,
176
+ (_, theActiveEditor) => {
177
+ r.pubIn({
178
+ [activeEditor$]: theActiveEditor,
179
+ [inFocus$]: true
270
180
  });
271
- if (shouldOverride) {
272
- event.preventDefault();
273
- event.stopImmediatePropagation();
274
- theRootEditor.update(() => {
275
- var _a;
276
- const rootElement = theRootEditor.getRootElement();
277
- (_a = window.getSelection()) == null ? void 0 : _a.selectAllChildren(rootElement);
278
- rootElement.focus({
279
- preventScroll: true
181
+ if (theActiveEditor._parentEditor === null) {
182
+ theActiveEditor.getEditorState().read(() => {
183
+ r.pub(editorInFocus$, {
184
+ rootNode: $getRoot(),
185
+ editorType: "lexical"
280
186
  });
281
187
  });
282
- return true;
283
188
  }
189
+ handleSelectionChange(r);
190
+ return false;
191
+ },
192
+ COMMAND_PRIORITY_CRITICAL
193
+ );
194
+ },
195
+ // Export handler
196
+ (rootEditor) => {
197
+ return rootEditor.registerUpdateListener(({ dirtyElements, dirtyLeaves, editorState }) => {
198
+ const err = r.getValue(markdownProcessingError$);
199
+ if (err !== null) {
200
+ return;
284
201
  }
285
- return false;
286
- },
287
- COMMAND_PRIORITY_CRITICAL
288
- );
289
- });
290
- const composerChildren = r.node([]);
291
- const addComposerChild = createAppendNodeFor(composerChildren);
292
- const topAreaChildren = r.node([]);
293
- const addTopAreaChild = createAppendNodeFor(topAreaChildren);
294
- const editorWrappers = r.node([]);
295
- const addEditorWrapper = createAppendNodeFor(editorWrappers);
296
- const nestedEditorChildren = r.node([]);
297
- const addNestedEditorChild = createAppendNodeFor(nestedEditorChildren);
298
- const historyState = r.node(createEmptyHistoryState());
299
- r.sub(r.pipe(applyFormat, r.o.withLatestFrom(activeEditor)), ([format, theEditor]) => {
300
- theEditor == null ? void 0 : theEditor.dispatchCommand(FORMAT_TEXT_COMMAND, format);
301
- });
302
- const currentBlockType = r.node("");
303
- const applyBlockType = r.node();
304
- r.sub(r.pipe(currentSelection, r.o.withLatestFrom(activeEditor)), ([selection, theEditor]) => {
305
- if (!selection || !theEditor) {
306
- return;
202
+ if (dirtyElements.size === 0 && dirtyLeaves.size === 0) {
203
+ return;
204
+ }
205
+ let theNewMarkdownValue;
206
+ editorState.read(() => {
207
+ theNewMarkdownValue = exportMarkdownFromLexical({
208
+ root: $getRoot(),
209
+ visitors: r.getValue(exportVisitors$),
210
+ jsxComponentDescriptors: r.getValue(jsxComponentDescriptors$),
211
+ toMarkdownExtensions: r.getValue(toMarkdownExtensions$),
212
+ toMarkdownOptions: r.getValue(toMarkdownOptions$),
213
+ jsxIsAvailable: r.getValue(jsxIsAvailable$)
214
+ });
215
+ });
216
+ r.pub(markdown$, theNewMarkdownValue.trim());
217
+ });
218
+ },
219
+ (rootEditor) => {
220
+ return rootEditor.registerCommand(
221
+ FOCUS_COMMAND,
222
+ () => {
223
+ r.pub(inFocus$, true);
224
+ return false;
225
+ },
226
+ COMMAND_PRIORITY_CRITICAL
227
+ );
228
+ },
229
+ // Fixes select all when frontmatter is present
230
+ (rootEditor) => {
231
+ return rootEditor.registerCommand(
232
+ KEY_DOWN_COMMAND,
233
+ (event) => {
234
+ const { keyCode, ctrlKey, metaKey } = event;
235
+ if (keyCode === 65 && controlOrMeta(metaKey, ctrlKey)) {
236
+ let shouldOverride = false;
237
+ rootEditor.getEditorState().read(() => {
238
+ shouldOverride = $isDecoratorNode($getRoot().getFirstChild()) || $isDecoratorNode($getRoot().getLastChild());
239
+ });
240
+ if (shouldOverride) {
241
+ event.preventDefault();
242
+ event.stopImmediatePropagation();
243
+ rootEditor.update(() => {
244
+ var _a;
245
+ const rootElement = rootEditor.getRootElement();
246
+ (_a = window.getSelection()) == null ? void 0 : _a.selectAllChildren(rootElement);
247
+ rootElement.focus({
248
+ preventScroll: true
249
+ });
250
+ });
251
+ return true;
252
+ }
253
+ }
254
+ return false;
255
+ },
256
+ COMMAND_PRIORITY_CRITICAL
257
+ );
307
258
  }
308
- const anchorNode = selection.anchor.getNode();
309
- let element = anchorNode.getKey() === "root" ? anchorNode : $findMatchingParent(anchorNode, (e) => {
310
- const parent = e.getParent();
311
- return parent !== null && $isRootOrShadowRoot(parent);
259
+ ]);
260
+ });
261
+ const createActiveEditorSubscription$ = Appender(activeEditorSubscriptions$, (r, sig$) => {
262
+ r.pub(sig$, [
263
+ (editor) => {
264
+ return editor.registerUpdateListener(({ editorState }) => {
265
+ editorState.read(() => {
266
+ handleSelectionChange(r);
267
+ });
268
+ });
269
+ },
270
+ (editor) => {
271
+ return editor.registerCommand(
272
+ BLUR_COMMAND,
273
+ (payload) => {
274
+ var _a;
275
+ const theRootEditor = r.getValue(rootEditor$);
276
+ if (theRootEditor) {
277
+ const movingOutside = !((_a = theRootEditor.getRootElement()) == null ? void 0 : _a.contains(payload.relatedTarget));
278
+ if (movingOutside) {
279
+ r.pubIn({
280
+ [inFocus$]: false,
281
+ [onBlur$]: payload
282
+ });
283
+ }
284
+ }
285
+ return false;
286
+ },
287
+ COMMAND_PRIORITY_CRITICAL
288
+ );
289
+ }
290
+ ]);
291
+ });
292
+ function tryImportingMarkdown(r, markdownValue) {
293
+ try {
294
+ importMarkdownToLexical({
295
+ root: $getRoot(),
296
+ visitors: r.getValue(importVisitors$),
297
+ mdastExtensions: r.getValue(mdastExtensions$),
298
+ markdown: markdownValue,
299
+ syntaxExtensions: r.getValue(syntaxExtensions$)
312
300
  });
313
- if (element === null) {
314
- element = anchorNode.getTopLevelElementOrThrow();
301
+ r.pub(markdownProcessingError$, null);
302
+ } catch (e) {
303
+ if (e instanceof MarkdownParseError || e instanceof UnrecognizedMarkdownConstructError) {
304
+ r.pubIn({
305
+ [markdown$]: markdownValue,
306
+ [markdownProcessingError$]: {
307
+ error: e.message,
308
+ source: markdownValue
309
+ }
310
+ });
311
+ } else {
312
+ throw e;
315
313
  }
316
- const elementKey = element.getKey();
317
- const elementDOM = theEditor.getElementByKey(elementKey);
318
- if (elementDOM !== null) {
319
- const blockType = $isHeadingNode(element) ? element.getTag() : element.getType();
320
- r.pub(currentBlockType, blockType);
314
+ }
315
+ }
316
+ const initialRootEditorState$ = Cell(null, (r) => {
317
+ r.pub(initialRootEditorState$, (theRootEditor) => {
318
+ r.pub(rootEditor$, theRootEditor);
319
+ r.pub(activeEditor$, theRootEditor);
320
+ tryImportingMarkdown(r, r.getValue(initialMarkdown$));
321
+ const autoFocusValue = r.getValue(autoFocus$);
322
+ if (autoFocusValue) {
323
+ if (autoFocusValue === true) {
324
+ setTimeout(() => theRootEditor.focus(noop, { defaultSelection: "rootStart" }));
325
+ return;
326
+ }
327
+ setTimeout(
328
+ () => theRootEditor.focus(noop, {
329
+ defaultSelection: autoFocusValue.defaultSelection ?? "rootStart"
330
+ })
331
+ );
321
332
  }
322
333
  });
323
- const convertSelectionToNode = r.node();
324
- r.sub(r.pipe(convertSelectionToNode, r.o.withLatestFrom(activeEditor)), ([factory, editor]) => {
334
+ });
335
+ const composerChildren$ = Cell([]);
336
+ const addComposerChild$ = Appender(composerChildren$);
337
+ const topAreaChildren$ = Cell([]);
338
+ const addTopAreaChild$ = Appender(topAreaChildren$);
339
+ const editorWrappers$ = Cell([]);
340
+ const addEditorWrapper$ = Appender(editorWrappers$);
341
+ const nestedEditorChildren$ = Cell([]);
342
+ const addNestedEditorChild$ = Appender(nestedEditorChildren$);
343
+ const historyState$ = Cell(createEmptyHistoryState());
344
+ const currentBlockType$ = Cell("");
345
+ const applyBlockType$ = Signal();
346
+ const convertSelectionToNode$ = Signal((r) => {
347
+ r.sub(r.pipe(convertSelectionToNode$, withLatestFrom(activeEditor$)), ([factory, editor]) => {
325
348
  editor == null ? void 0 : editor.update(() => {
326
349
  const selection = $getSelection();
327
350
  if ($isRangeSelection(selection)) {
@@ -332,8 +355,9 @@ const coreSystem = system((r) => {
332
355
  }
333
356
  });
334
357
  });
335
- const insertDecoratorNode = r.node();
336
- r.sub(r.pipe(insertDecoratorNode, r.o.withLatestFrom(activeEditor)), ([nodeFactory, theEditor]) => {
358
+ });
359
+ const insertDecoratorNode$ = Signal((r) => {
360
+ r.sub(r.pipe(insertDecoratorNode$, withLatestFrom(activeEditor$)), ([nodeFactory, theEditor]) => {
337
361
  theEditor == null ? void 0 : theEditor.focus(
338
362
  () => {
339
363
  theEditor.getEditorState().read(() => {
@@ -365,126 +389,151 @@ const coreSystem = system((r) => {
365
389
  { defaultSelection: "rootEnd" }
366
390
  );
367
391
  });
368
- r.sub(r.pipe(readOnly, r.o.withLatestFrom(rootEditor)), ([readOnly2, theRootEditor]) => {
369
- theRootEditor == null ? void 0 : theRootEditor.setEditable(!readOnly2);
392
+ });
393
+ const viewMode$ = Cell("rich-text", (r) => {
394
+ function currentNextViewMode() {
395
+ return scan(
396
+ (prev, next) => {
397
+ return {
398
+ current: prev.next,
399
+ next
400
+ };
401
+ },
402
+ { current: "rich-text", next: "rich-text" }
403
+ );
404
+ }
405
+ r.sub(r.pipe(viewMode$, currentNextViewMode(), withLatestFrom(markdownSourceEditorValue$)), ([{ current }, markdownSourceFromEditor]) => {
406
+ if (current === "source" || current === "diff") {
407
+ r.pub(setMarkdown$, markdownSourceFromEditor);
408
+ }
370
409
  });
371
- return {
372
- // state
373
- activeEditor,
374
- inFocus,
375
- historyState,
376
- currentSelection,
377
- // jsx
378
- jsxIsAvailable,
379
- jsxComponentDescriptors,
380
- // lexical editor
381
- initialRootEditorState,
382
- rootEditor,
383
- createRootEditorSubscription,
384
- createActiveEditorSubscription,
385
- // import
386
- importVisitors,
387
- syntaxExtensions,
388
- mdastExtensions,
389
- usedLexicalNodes,
390
- addImportVisitor,
391
- addLexicalNode,
392
- addSyntaxExtension,
393
- addMdastExtension,
394
- // export
395
- toMarkdownExtensions,
396
- toMarkdownOptions,
397
- addToMarkdownExtension,
398
- addExportVisitor,
399
- exportVisitors,
400
- // markdown strings
401
- initialMarkdown,
402
- setMarkdown,
403
- markdown,
404
- markdownSignal,
405
- // DOM
406
- editorRootElementRef,
407
- contentEditableClassName,
408
- placeholder,
409
- autoFocus,
410
- readOnly,
411
- // child controls
412
- composerChildren,
413
- addComposerChild,
414
- topAreaChildren,
415
- addTopAreaChild,
416
- nestedEditorChildren,
417
- addNestedEditorChild,
418
- editorWrappers,
419
- addEditorWrapper,
420
- // editor content state and commands
421
- currentFormat,
422
- editorInFocus,
423
- applyFormat,
424
- currentBlockType,
425
- applyBlockType,
426
- convertSelectionToNode,
427
- insertDecoratorNode,
428
- // Events
429
- onBlur,
430
- iconComponentFor,
431
- // error handling
432
- markdownProcessingError,
433
- markdownErrorSignal
434
- };
435
- }, []);
436
- const [
437
- /** @internal */
438
- corePlugin,
439
- /** @internal */
440
- corePluginHooks
441
- ] = realmPlugin({
442
- id: "core",
443
- systemSpec: coreSystem,
444
- applyParamsToSystem(realm, params) {
445
- realm.pubKeys({
446
- contentEditableClassName: params.contentEditableClassName,
447
- toMarkdownOptions: params.toMarkdownOptions,
448
- autoFocus: params.autoFocus,
449
- placeholder: params.placeholder,
450
- readOnly: params.readOnly
410
+ r.sub(
411
+ r.pipe(
412
+ viewMode$,
413
+ currentNextViewMode(),
414
+ filter((mode) => mode.current === "rich-text"),
415
+ withLatestFrom(activeEditor$)
416
+ ),
417
+ ([mode, editor]) => {
418
+ editor == null ? void 0 : editor.dispatchCommand(NESTED_EDITOR_UPDATED_COMMAND, void 0);
419
+ }
420
+ );
421
+ });
422
+ const markdownSourceEditorValue$ = Cell("", (r) => {
423
+ r.link(markdown$, markdownSourceEditorValue$);
424
+ r.link(markdownSourceEditorValue$, markdownSignal$);
425
+ });
426
+ const activePlugins$ = Cell([]);
427
+ const addActivePlugin$ = Appender(activePlugins$);
428
+ const corePlugin = realmPlugin({
429
+ init(r, params) {
430
+ r.register(createRootEditorSubscription$);
431
+ r.register(createActiveEditorSubscription$);
432
+ r.pubIn({
433
+ [initialMarkdown$]: params == null ? void 0 : params.initialMarkdown.trim(),
434
+ [iconComponentFor$]: params == null ? void 0 : params.iconComponentFor,
435
+ [addImportVisitor$]: [
436
+ MdastRootVisitor,
437
+ MdastParagraphVisitor,
438
+ MdastTextVisitor,
439
+ MdastFormattingVisitor,
440
+ MdastInlineCodeVisitor,
441
+ MdastBreakVisitor
442
+ ],
443
+ [addLexicalNode$]: [ParagraphNode, TextNode, GenericHTMLNode],
444
+ [addExportVisitor$]: [
445
+ LexicalRootVisitor,
446
+ LexicalParagraphVisitor,
447
+ LexicalTextVisitor,
448
+ LexicalLinebreakVisitor,
449
+ LexicalGenericHTMLVisitor
450
+ ],
451
+ [addComposerChild$]: SharedHistoryPlugin
451
452
  });
452
- realm.singletonSubKey("markdownSignal", params.onChange);
453
- realm.singletonSubKey("onBlur", params.onBlur);
454
- realm.singletonSubKey("markdownErrorSignal", params.onError);
455
- },
456
- init(realm, params) {
457
- realm.pubKey("initialMarkdown", params.initialMarkdown.trim());
458
- realm.pubKey("iconComponentFor", params.iconComponentFor);
459
- realm.pubKey("addImportVisitor", MdastRootVisitor);
460
- realm.pubKey("addImportVisitor", MdastParagraphVisitor);
461
- realm.pubKey("addImportVisitor", MdastTextVisitor);
462
- realm.pubKey("addImportVisitor", MdastFormattingVisitor);
463
- realm.pubKey("addImportVisitor", MdastInlineCodeVisitor);
464
- realm.pubKey("addImportVisitor", MdastBreakVisitor);
465
- realm.pubKey("addLexicalNode", ParagraphNode);
466
- realm.pubKey("addLexicalNode", TextNode);
467
- realm.pubKey("addLexicalNode", GenericHTMLNode);
468
- realm.pubKey("addExportVisitor", LexicalRootVisitor);
469
- realm.pubKey("addExportVisitor", LexicalParagraphVisitor);
470
- realm.pubKey("addExportVisitor", LexicalTextVisitor);
471
- realm.pubKey("addExportVisitor", LexicalLinebreakVisitor);
472
- realm.pubKey("addExportVisitor", LexicalGenericHTMLVisitor);
473
- realm.pubKey("addComposerChild", SharedHistoryPlugin);
474
- if (!params.suppressHtmlProcessing) {
475
- realm.pubKey("addMdastExtension", mdxJsxFromMarkdown());
476
- realm.pubKey("addSyntaxExtension", mdxJsx());
477
- realm.pubKey("addToMarkdownExtension", mdxJsxToMarkdown());
478
- realm.pubKey("addImportVisitor", MdastHTMLVisitor);
453
+ if (!(params == null ? void 0 : params.suppressHtmlProcessing)) {
454
+ r.pubIn({
455
+ [addMdastExtension$]: mdxJsxFromMarkdown(),
456
+ [addSyntaxExtension$]: [mdxJsx(), mdxMd()],
457
+ [addToMarkdownExtension$]: mdxJsxToMarkdown(),
458
+ [addImportVisitor$]: MdastHTMLVisitor
459
+ });
479
460
  }
461
+ },
462
+ update(realm, params) {
463
+ realm.pubIn({
464
+ [contentEditableClassName$]: params == null ? void 0 : params.contentEditableClassName,
465
+ [toMarkdownOptions$]: params == null ? void 0 : params.toMarkdownOptions,
466
+ [autoFocus$]: params == null ? void 0 : params.autoFocus,
467
+ [placeholder$]: params == null ? void 0 : params.placeholder,
468
+ [readOnly$]: params == null ? void 0 : params.readOnly
469
+ });
470
+ realm.singletonSub(markdownSignal$, params == null ? void 0 : params.onChange);
471
+ realm.singletonSub(onBlur$, params == null ? void 0 : params.onBlur);
472
+ realm.singletonSub(markdownErrorSignal$, params == null ? void 0 : params.onError);
480
473
  }
481
474
  });
482
475
  export {
483
476
  $createGenericHTMLNode,
484
477
  $isGenericHTMLNode,
478
+ Appender,
485
479
  GenericHTMLNode,
486
480
  NESTED_EDITOR_UPDATED_COMMAND,
481
+ TYPE_NAME,
482
+ activeEditor$,
483
+ activeEditorSubscriptions$,
484
+ activePlugins$,
485
+ addActivePlugin$,
486
+ addComposerChild$,
487
+ addEditorWrapper$,
488
+ addExportVisitor$,
489
+ addImportVisitor$,
490
+ addLexicalNode$,
491
+ addMdastExtension$,
492
+ addNestedEditorChild$,
493
+ addSyntaxExtension$,
494
+ addToMarkdownExtension$,
495
+ addTopAreaChild$,
496
+ applyBlockType$,
497
+ applyFormat$,
498
+ autoFocus$,
499
+ composerChildren$,
500
+ contentEditableClassName$,
501
+ convertSelectionToNode$,
487
502
  corePlugin,
488
- corePluginHooks,
489
- coreSystem
503
+ createActiveEditorSubscription$,
504
+ createRootEditorSubscription$,
505
+ currentBlockType$,
506
+ currentFormat$,
507
+ currentSelection$,
508
+ editorInFocus$,
509
+ editorRootElementRef$,
510
+ editorWrappers$,
511
+ exportVisitors$,
512
+ historyState$,
513
+ iconComponentFor$,
514
+ importVisitors$,
515
+ inFocus$,
516
+ initialMarkdown$,
517
+ initialRootEditorState$,
518
+ insertDecoratorNode$,
519
+ jsxComponentDescriptors$,
520
+ jsxIsAvailable$,
521
+ markdown$,
522
+ markdownErrorSignal$,
523
+ markdownProcessingError$,
524
+ markdownSourceEditorValue$,
525
+ mdastExtensions$,
526
+ nestedEditorChildren$,
527
+ onBlur$,
528
+ placeholder$,
529
+ readOnly$,
530
+ rootEditor$,
531
+ rootEditorSubscriptions$,
532
+ setMarkdown$,
533
+ syntaxExtensions$,
534
+ toMarkdownExtensions$,
535
+ toMarkdownOptions$,
536
+ topAreaChildren$,
537
+ usedLexicalNodes$,
538
+ viewMode$
490
539
  };