@mdxeditor/editor 0.0.0-development → 0.0.4-development

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 (103) hide show
  1. package/dist/MDXEditor.d.ts +11 -0
  2. package/dist/MDXEditor.js +3 -1
  3. package/dist/exportMarkdownFromLexical.d.ts +6 -1
  4. package/dist/exportMarkdownFromLexical.js +43 -6
  5. package/dist/gurx/realmFactory.d.ts +1 -1
  6. package/dist/icons/add_column.svg.js +1 -1
  7. package/dist/icons/add_photo.svg.js +1 -1
  8. package/dist/icons/add_row.svg.js +1 -1
  9. package/dist/icons/admonition.svg.js +1 -1
  10. package/dist/icons/arrow_drop_down.svg.js +1 -1
  11. package/dist/icons/check.svg.js +1 -1
  12. package/dist/icons/close.svg.js +1 -1
  13. package/dist/icons/code.svg.js +1 -1
  14. package/dist/icons/content_copy.svg.js +1 -1
  15. package/dist/icons/delete_big.svg.js +1 -1
  16. package/dist/icons/delete_small.svg.js +1 -1
  17. package/dist/icons/difference.svg.js +1 -1
  18. package/dist/icons/edit.svg.js +1 -1
  19. package/dist/icons/format_align_center.svg.js +1 -1
  20. package/dist/icons/format_align_left.svg.js +1 -1
  21. package/dist/icons/format_align_right.svg.js +1 -1
  22. package/dist/icons/format_bold.svg.js +1 -1
  23. package/dist/icons/format_italic.svg.js +1 -1
  24. package/dist/icons/format_list_bulleted.svg.js +1 -3
  25. package/dist/icons/format_list_checked.svg.js +1 -1
  26. package/dist/icons/format_list_numbered.svg.js +1 -1
  27. package/dist/icons/format_underlined.svg.js +1 -1
  28. package/dist/icons/frame_source.svg.js +5 -0
  29. package/dist/icons/frontmatter.svg.js +1 -1
  30. package/dist/icons/horizontal_rule.svg.js +1 -1
  31. package/dist/icons/insert_col_left.svg.js +1 -1
  32. package/dist/icons/insert_col_right.svg.js +1 -1
  33. package/dist/icons/insert_row_above.svg.js +1 -1
  34. package/dist/icons/insert_row_below.svg.js +1 -1
  35. package/dist/icons/link.svg.js +1 -1
  36. package/dist/icons/link_off.svg.js +1 -1
  37. package/dist/icons/markdown.svg.js +1 -1
  38. package/dist/icons/more_horiz.svg.js +1 -1
  39. package/dist/icons/more_vert.svg.js +1 -1
  40. package/dist/icons/open_in_new.svg.js +1 -1
  41. package/dist/icons/redo.svg.js +1 -1
  42. package/dist/icons/rich_text.svg.js +1 -1
  43. package/dist/icons/sandpack.svg.js +1 -1
  44. package/dist/icons/settings.svg.js +1 -3
  45. package/dist/icons/table.svg.js +1 -1
  46. package/dist/icons/undo.svg.js +1 -1
  47. package/dist/importMarkdownToLexical.d.ts +10 -0
  48. package/dist/importMarkdownToLexical.js +31 -7
  49. package/dist/index.d.ts +8 -0
  50. package/dist/index.js +41 -3
  51. package/dist/plugins/codeblock/index.d.ts +92 -2
  52. package/dist/plugins/codemirror/index.d.ts +128 -2
  53. package/dist/plugins/core/GenericHTMLNode.d.ts +38 -0
  54. package/dist/plugins/core/GenericHTMLNode.js +117 -0
  55. package/dist/plugins/core/Icon.d.ts +1 -1
  56. package/dist/plugins/core/Icon.js +2 -4
  57. package/dist/plugins/core/LexicalGenericHTMLNodeVisitor.d.ts +4 -0
  58. package/dist/plugins/core/LexicalGenericHTMLNodeVisitor.js +15 -0
  59. package/dist/plugins/core/LexicalTextVisitor.js +18 -1
  60. package/dist/plugins/core/MdastHTMLNode.d.ts +13 -0
  61. package/dist/plugins/core/MdastHTMLNode.js +122 -0
  62. package/dist/plugins/core/MdastHTMLVisitor.d.ts +3 -0
  63. package/dist/plugins/core/MdastHTMLVisitor.js +12 -0
  64. package/dist/plugins/core/NestedLexicalEditor.js +14 -9
  65. package/dist/plugins/core/index.d.ts +80 -3
  66. package/dist/plugins/core/index.js +90 -20
  67. package/dist/plugins/diff-source/DiffSourceWrapper.js +4 -1
  68. package/dist/plugins/diff-source/SourceEditor.js +7 -1
  69. package/dist/plugins/diff-source/index.d.ts +94 -4
  70. package/dist/plugins/diff-source/index.js +3 -4
  71. package/dist/plugins/directives/index.d.ts +92 -2
  72. package/dist/plugins/frontmatter/index.d.ts +92 -2
  73. package/dist/plugins/headings/index.d.ts +92 -2
  74. package/dist/plugins/image/index.d.ts +92 -2
  75. package/dist/plugins/jsx/LexicalJsxVisitor.js +12 -0
  76. package/dist/plugins/jsx/index.d.ts +114 -23
  77. package/dist/plugins/jsx/index.js +4 -0
  78. package/dist/plugins/link/index.d.ts +9 -0
  79. package/dist/plugins/link-dialog/index.d.ts +79 -5
  80. package/dist/plugins/link-dialog/index.js +2 -8
  81. package/dist/plugins/lists/index.d.ts +92 -2
  82. package/dist/plugins/lists/index.js +3 -0
  83. package/dist/plugins/markdown-shortcut/index.d.ts +9 -0
  84. package/dist/plugins/quote/index.d.ts +65 -2
  85. package/dist/plugins/sandpack/index.d.ts +128 -2
  86. package/dist/plugins/table/index.d.ts +92 -2
  87. package/dist/plugins/thematic-break/index.d.ts +92 -2
  88. package/dist/plugins/toolbar/components/ChangeAdmonitionType.js +1 -1
  89. package/dist/plugins/toolbar/components/InsertCodeBlock.js +1 -1
  90. package/dist/plugins/toolbar/index.d.ts +74 -2
  91. package/dist/style.css +210 -195
  92. package/dist/styles/ui.module.css.js +105 -102
  93. package/dist/utils/fp.js +31 -1
  94. package/dist/utils/lexicalHelpers.js +20 -2
  95. package/dist/utils/makeHslTransparent.d.ts +1 -0
  96. package/dist/utils/makeHslTransparent.js +6 -0
  97. package/dist/utils/mergeStyleAttributes.d.ts +1 -0
  98. package/dist/utils/mergeStyleAttributes.js +22 -0
  99. package/dist/utils/whitespaceConversion.d.ts +2 -0
  100. package/dist/utils/whitespaceConversion.js +9 -0
  101. package/package.json +17 -11
  102. package/dist/icons/check_small.svg.js +0 -5
  103. package/dist/icons/code_block.svg.js +0 -5
@@ -2,9 +2,9 @@ import { createEmptyHistoryState } from "@lexical/react/LexicalHistoryPlugin.js"
2
2
  import { $isHeadingNode } from "@lexical/rich-text";
3
3
  import { $setBlocksType } from "@lexical/selection";
4
4
  import { $findMatchingParent, $wrapNodeInElement, $insertNodeToNearestRoot } from "@lexical/utils";
5
- import { createCommand, SELECTION_CHANGE_COMMAND, $getRoot, COMMAND_PRIORITY_CRITICAL, $setSelection, BLUR_COMMAND, KEY_DOWN_COMMAND, $isDecoratorNode, FORMAT_TEXT_COMMAND, $isRootOrShadowRoot, $getSelection, $isRangeSelection, $insertNodes, $createParagraphNode, ParagraphNode, TextNode } from "lexical";
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
6
  import { exportMarkdownFromLexical } from "../../exportMarkdownFromLexical.js";
7
- import { importMarkdownToLexical } from "../../importMarkdownToLexical.js";
7
+ import { importMarkdownToLexical, MarkdownParseError, UnrecognizedMarkdownConstructError } from "../../importMarkdownToLexical.js";
8
8
  import { LexicalLinebreakVisitor } from "./LexicalLinebreakVisitor.js";
9
9
  import { LexicalParagraphVisitor } from "./LexicalParagraphVisitor.js";
10
10
  import { LexicalRootVisitor } from "./LexicalRootVisitor.js";
@@ -18,6 +18,12 @@ import { SharedHistoryPlugin } from "./SharedHistoryPlugin.js";
18
18
  import { noop } from "../../utils/fp.js";
19
19
  import { controlOrMeta } from "../../utils/detectMac.js";
20
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";
21
27
  import { system } from "../../gurx/realmFactory.js";
22
28
  import { realmPlugin } from "../../gurx/react.js";
23
29
  const NESTED_EDITOR_UPDATED_COMMAND = createCommand("NESTED_EDITOR_UPDATED_COMMAND");
@@ -47,6 +53,15 @@ const coreSystem = system((r) => {
47
53
  const autoFocus = r.node(false);
48
54
  const inFocus = r.node(false, true);
49
55
  const currentFormat = r.node(0, true);
56
+ const markdownProcessingError = r.node(null);
57
+ const markdownErrorSignal = r.node();
58
+ r.link(
59
+ r.pipe(
60
+ markdownProcessingError,
61
+ r.o.filter((e) => e !== null)
62
+ ),
63
+ markdownErrorSignal
64
+ );
50
65
  const applyFormat = r.node();
51
66
  const currentSelection = r.node(null);
52
67
  const activeEditorSubscriptions = r.node([]);
@@ -102,6 +117,10 @@ const coreSystem = system((r) => {
102
117
  });
103
118
  r.pub(createRootEditorSubscription, (theRootEditor) => {
104
119
  return theRootEditor.registerUpdateListener(({ dirtyElements, dirtyLeaves, editorState }) => {
120
+ const err = r.getValue(markdownProcessingError);
121
+ if (err !== null) {
122
+ return;
123
+ }
105
124
  if (dirtyElements.size === 0 && dirtyLeaves.size === 0) {
106
125
  return;
107
126
  }
@@ -121,6 +140,8 @@ const coreSystem = system((r) => {
121
140
  });
122
141
  const initialMarkdown = r.node("");
123
142
  const markdown = r.node("", true);
143
+ const markdownSignal = r.node();
144
+ r.link(markdown, markdownSignal);
124
145
  r.link(initialMarkdown, markdown);
125
146
  const importVisitors = r.node([]);
126
147
  const syntaxExtensions = r.node([]);
@@ -139,20 +160,46 @@ const coreSystem = system((r) => {
139
160
  const addExportVisitor = createAppendNodeFor(exportVisitors);
140
161
  const addToMarkdownExtension = createAppendNodeFor(toMarkdownExtensions);
141
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
+ }
185
+ }
186
+ }
142
187
  r.sub(
143
- r.pipe(setMarkdown, r.o.withLatestFrom(rootEditor, importVisitors, mdastExtensions, syntaxExtensions, inFocus)),
144
- ([theNewMarkdownValue, editor, importVisitors2, mdastExtensions2, syntaxExtensions2, inFocus2]) => {
188
+ r.pipe(
189
+ setMarkdown,
190
+ r.o.withLatestFrom(markdown, rootEditor, inFocus),
191
+ r.o.filter(([newMarkdown, oldMarkdown]) => {
192
+ return newMarkdown.trim() !== oldMarkdown.trim();
193
+ })
194
+ ),
195
+ ([theNewMarkdownValue, , editor, inFocus2]) => {
145
196
  editor == null ? void 0 : editor.update(() => {
146
197
  $getRoot().clear();
147
- importMarkdownToLexical({
148
- root: $getRoot(),
149
- visitors: importVisitors2,
150
- mdastExtensions: mdastExtensions2,
151
- markdown: theNewMarkdownValue,
152
- syntaxExtensions: syntaxExtensions2
153
- });
198
+ tryImportingMarkdown(theNewMarkdownValue);
154
199
  if (!inFocus2) {
155
200
  $setSelection(null);
201
+ } else {
202
+ editor.focus();
156
203
  }
157
204
  });
158
205
  }
@@ -160,13 +207,7 @@ const coreSystem = system((r) => {
160
207
  const initialRootEditorState = r.node((theRootEditor) => {
161
208
  r.pub(rootEditor, theRootEditor);
162
209
  r.pub(activeEditor, theRootEditor);
163
- importMarkdownToLexical({
164
- root: $getRoot(),
165
- visitors: r.getValue(importVisitors),
166
- mdastExtensions: r.getValue(mdastExtensions),
167
- markdown: r.getValue(initialMarkdown),
168
- syntaxExtensions: r.getValue(syntaxExtensions)
169
- });
210
+ tryImportingMarkdown(r.getValue(initialMarkdown));
170
211
  const autoFocusValue = r.getValue(autoFocus);
171
212
  if (autoFocusValue) {
172
213
  if (autoFocusValue === true) {
@@ -207,6 +248,16 @@ const coreSystem = system((r) => {
207
248
  COMMAND_PRIORITY_CRITICAL
208
249
  );
209
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
+ );
260
+ });
210
261
  r.pub(createRootEditorSubscription, (theRootEditor) => {
211
262
  return theRootEditor.registerCommand(
212
263
  KEY_DOWN_COMMAND,
@@ -304,6 +355,9 @@ const coreSystem = system((r) => {
304
355
  setTimeout(() => node.select());
305
356
  }
306
357
  });
358
+ setTimeout(() => {
359
+ theEditor.dispatchCommand(NESTED_EDITOR_UPDATED_COMMAND, void 0);
360
+ });
307
361
  }
308
362
  }
309
363
  });
@@ -347,6 +401,7 @@ const coreSystem = system((r) => {
347
401
  initialMarkdown,
348
402
  setMarkdown,
349
403
  markdown,
404
+ markdownSignal,
350
405
  // DOM
351
406
  editorRootElementRef,
352
407
  contentEditableClassName,
@@ -372,7 +427,10 @@ const coreSystem = system((r) => {
372
427
  insertDecoratorNode,
373
428
  // Events
374
429
  onBlur,
375
- iconComponentFor
430
+ iconComponentFor,
431
+ // error handling
432
+ markdownProcessingError,
433
+ markdownErrorSignal
376
434
  };
377
435
  }, []);
378
436
  const [
@@ -391,8 +449,9 @@ const [
391
449
  placeholder: params.placeholder,
392
450
  readOnly: params.readOnly
393
451
  });
394
- realm.singletonSubKey("markdown", params.onChange);
452
+ realm.singletonSubKey("markdownSignal", params.onChange);
395
453
  realm.singletonSubKey("onBlur", params.onBlur);
454
+ realm.singletonSubKey("markdownErrorSignal", params.onError);
396
455
  },
397
456
  init(realm, params) {
398
457
  realm.pubKey("initialMarkdown", params.initialMarkdown.trim());
@@ -405,14 +464,25 @@ const [
405
464
  realm.pubKey("addImportVisitor", MdastBreakVisitor);
406
465
  realm.pubKey("addLexicalNode", ParagraphNode);
407
466
  realm.pubKey("addLexicalNode", TextNode);
467
+ realm.pubKey("addLexicalNode", GenericHTMLNode);
408
468
  realm.pubKey("addExportVisitor", LexicalRootVisitor);
409
469
  realm.pubKey("addExportVisitor", LexicalParagraphVisitor);
410
470
  realm.pubKey("addExportVisitor", LexicalTextVisitor);
411
471
  realm.pubKey("addExportVisitor", LexicalLinebreakVisitor);
472
+ realm.pubKey("addExportVisitor", LexicalGenericHTMLVisitor);
412
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);
479
+ }
413
480
  }
414
481
  });
415
482
  export {
483
+ $createGenericHTMLNode,
484
+ $isGenericHTMLNode,
485
+ GenericHTMLNode,
416
486
  NESTED_EDITOR_UPDATED_COMMAND,
417
487
  corePlugin,
418
488
  corePluginHooks,
@@ -2,9 +2,12 @@ import React__default from "react";
2
2
  import { diffSourcePluginHooks } from "./index.js";
3
3
  import { DiffViewer } from "./DiffViewer.js";
4
4
  import { SourceEditor } from "./SourceEditor.js";
5
+ import { corePluginHooks } from "../core/index.js";
6
+ import styles from "../../styles/ui.module.css.js";
5
7
  const DiffSourceWrapper = ({ children }) => {
8
+ const [error] = corePluginHooks.useEmitterValues("markdownProcessingError");
6
9
  const [viewMode] = diffSourcePluginHooks.useEmitterValues("viewMode");
7
- return /* @__PURE__ */ React__default.createElement("div", null, /* @__PURE__ */ React__default.createElement("div", { style: { display: viewMode === "rich-text" ? "block" : "none" } }, children), viewMode === "diff" ? /* @__PURE__ */ React__default.createElement(DiffViewer, null) : null, viewMode === "source" ? /* @__PURE__ */ React__default.createElement(SourceEditor, null) : null);
10
+ return /* @__PURE__ */ React__default.createElement("div", null, error ? /* @__PURE__ */ React__default.createElement("div", { className: styles.markdownParseError }, /* @__PURE__ */ React__default.createElement("p", null, error.error, "."), /* @__PURE__ */ React__default.createElement("p", null, "You can fix the errors in source mode and switch to rich text mode when you are ready.")) : null, /* @__PURE__ */ React__default.createElement("div", { style: { display: viewMode === "rich-text" && error == null ? "block" : "none" } }, children), viewMode === "diff" ? /* @__PURE__ */ React__default.createElement(DiffViewer, null) : null, viewMode === "source" ? /* @__PURE__ */ React__default.createElement(SourceEditor, null) : null);
8
11
  };
9
12
  export {
10
13
  DiffSourceWrapper
@@ -6,7 +6,13 @@ import { basicSetup } from "codemirror";
6
6
  import React__default from "react";
7
7
  import { diffSourcePluginHooks } from "./index.js";
8
8
  import { corePluginHooks } from "../core/index.js";
9
- const COMMON_STATE_CONFIG_EXTENSIONS = [basicSetup, basicLight, markdown(), lineNumbers()];
9
+ const COMMON_STATE_CONFIG_EXTENSIONS = [
10
+ basicSetup,
11
+ basicLight,
12
+ markdown(),
13
+ lineNumbers(),
14
+ EditorView.lineWrapping
15
+ ];
10
16
  const SourceEditor = () => {
11
17
  const [markdown2, readOnly] = corePluginHooks.useEmitterValues("markdown", "readOnly");
12
18
  const [cmExtensions] = diffSourcePluginHooks.useEmitterValues("cmExtensions");
@@ -43,6 +43,7 @@ export declare const diffSourceSystem: SystemSpec<[SystemSpec<[], (r: Realm) =>
43
43
  initialMarkdown: RealmNode<string>;
44
44
  setMarkdown: RealmNode<string>;
45
45
  markdown: RealmNode<string>;
46
+ markdownSignal: RealmNode<string>;
46
47
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
47
48
  contentEditableClassName: RealmNode<string>;
48
49
  placeholder: RealmNode<ReactNode>;
@@ -72,7 +73,15 @@ export declare const diffSourceSystem: SystemSpec<[SystemSpec<[], (r: Realm) =>
72
73
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
73
74
  onBlur: RealmNode<FocusEvent>;
74
75
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
75
- }>], (r: Realm, [{ markdown, setMarkdown }]: [{
76
+ markdownProcessingError: RealmNode<{
77
+ error: string;
78
+ source: string;
79
+ } | null>;
80
+ markdownErrorSignal: RealmNode<{
81
+ error: string;
82
+ source: string;
83
+ }>;
84
+ }>], (r: Realm, [{ markdown, setMarkdown, markdownSignal }]: [{
76
85
  activeEditor: RealmNode<LexicalEditor | null>;
77
86
  inFocus: RealmNode<boolean>;
78
87
  historyState: RealmNode<HistoryState>;
@@ -99,6 +108,7 @@ export declare const diffSourceSystem: SystemSpec<[SystemSpec<[], (r: Realm) =>
99
108
  initialMarkdown: RealmNode<string>;
100
109
  setMarkdown: RealmNode<string>;
101
110
  markdown: RealmNode<string>;
111
+ markdownSignal: RealmNode<string>;
102
112
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
103
113
  contentEditableClassName: RealmNode<string>;
104
114
  placeholder: RealmNode<ReactNode>;
@@ -128,6 +138,14 @@ export declare const diffSourceSystem: SystemSpec<[SystemSpec<[], (r: Realm) =>
128
138
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
129
139
  onBlur: RealmNode<FocusEvent>;
130
140
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
141
+ markdownProcessingError: RealmNode<{
142
+ error: string;
143
+ source: string;
144
+ } | null>;
145
+ markdownErrorSignal: RealmNode<{
146
+ error: string;
147
+ source: string;
148
+ }>;
131
149
  }]) => {
132
150
  viewMode: RealmNode<ViewMode>;
133
151
  diffMarkdown: RealmNode<string>;
@@ -168,6 +186,7 @@ diffSourcePlugin: PluginConstructor<SystemSpec<[SystemSpec<[], (r: Realm) => {
168
186
  initialMarkdown: RealmNode<string>;
169
187
  setMarkdown: RealmNode<string>;
170
188
  markdown: RealmNode<string>;
189
+ markdownSignal: RealmNode<string>;
171
190
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
172
191
  contentEditableClassName: RealmNode<string>;
173
192
  placeholder: RealmNode<ReactNode>;
@@ -197,7 +216,15 @@ diffSourcePlugin: PluginConstructor<SystemSpec<[SystemSpec<[], (r: Realm) => {
197
216
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
198
217
  onBlur: RealmNode<FocusEvent>;
199
218
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
200
- }>], (r: Realm, [{ markdown, setMarkdown }]: [{
219
+ markdownProcessingError: RealmNode<{
220
+ error: string;
221
+ source: string;
222
+ } | null>;
223
+ markdownErrorSignal: RealmNode<{
224
+ error: string;
225
+ source: string;
226
+ }>;
227
+ }>], (r: Realm, [{ markdown, setMarkdown, markdownSignal }]: [{
201
228
  activeEditor: RealmNode<LexicalEditor | null>;
202
229
  inFocus: RealmNode<boolean>;
203
230
  historyState: RealmNode<HistoryState>;
@@ -224,6 +251,7 @@ diffSourcePlugin: PluginConstructor<SystemSpec<[SystemSpec<[], (r: Realm) => {
224
251
  initialMarkdown: RealmNode<string>;
225
252
  setMarkdown: RealmNode<string>;
226
253
  markdown: RealmNode<string>;
254
+ markdownSignal: RealmNode<string>;
227
255
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
228
256
  contentEditableClassName: RealmNode<string>;
229
257
  placeholder: RealmNode<ReactNode>;
@@ -253,6 +281,14 @@ diffSourcePlugin: PluginConstructor<SystemSpec<[SystemSpec<[], (r: Realm) => {
253
281
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
254
282
  onBlur: RealmNode<FocusEvent>;
255
283
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
284
+ markdownProcessingError: RealmNode<{
285
+ error: string;
286
+ source: string;
287
+ } | null>;
288
+ markdownErrorSignal: RealmNode<{
289
+ error: string;
290
+ source: string;
291
+ }>;
256
292
  }]) => {
257
293
  viewMode: RealmNode<ViewMode>;
258
294
  diffMarkdown: RealmNode<string>;
@@ -293,6 +329,7 @@ diffSourcePluginHooks: {
293
329
  initialMarkdown: RealmNode<string>;
294
330
  setMarkdown: RealmNode<string>;
295
331
  markdown: RealmNode<string>;
332
+ markdownSignal: RealmNode<string>;
296
333
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
297
334
  contentEditableClassName: RealmNode<string>;
298
335
  placeholder: RealmNode<ReactNode>;
@@ -322,8 +359,16 @@ diffSourcePluginHooks: {
322
359
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
323
360
  onBlur: RealmNode<FocusEvent>;
324
361
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
362
+ markdownProcessingError: RealmNode<{
363
+ error: string;
364
+ source: string;
365
+ } | null>;
366
+ markdownErrorSignal: RealmNode<{
367
+ error: string;
368
+ source: string;
369
+ }>;
325
370
  }>;
326
- useEmitter: <K extends "jsxComponentDescriptors" | "jsxIsAvailable" | "toMarkdownOptions" | "toMarkdownExtensions" | "mdastExtensions" | "syntaxExtensions" | "markdown" | "activeEditor" | "inFocus" | "historyState" | "currentSelection" | "initialRootEditorState" | "rootEditor" | "createRootEditorSubscription" | "createActiveEditorSubscription" | "importVisitors" | "usedLexicalNodes" | "addImportVisitor" | "addLexicalNode" | "addSyntaxExtension" | "addMdastExtension" | "addToMarkdownExtension" | "addExportVisitor" | "exportVisitors" | "initialMarkdown" | "setMarkdown" | "editorRootElementRef" | "contentEditableClassName" | "placeholder" | "autoFocus" | "readOnly" | "composerChildren" | "addComposerChild" | "topAreaChildren" | "addTopAreaChild" | "nestedEditorChildren" | "addNestedEditorChild" | "editorWrappers" | "addEditorWrapper" | "currentFormat" | "editorInFocus" | "applyFormat" | "currentBlockType" | "applyBlockType" | "convertSelectionToNode" | "insertDecoratorNode" | "onBlur" | "iconComponentFor" | "markdownSourceEditorValue" | "viewMode" | "diffMarkdown" | "cmExtensions">(key: K, callback: (value: ValueForKey<{
371
+ useEmitter: <K extends "jsxComponentDescriptors" | "jsxIsAvailable" | "toMarkdownOptions" | "toMarkdownExtensions" | "mdastExtensions" | "syntaxExtensions" | "markdown" | "activeEditor" | "inFocus" | "historyState" | "currentSelection" | "initialRootEditorState" | "rootEditor" | "createRootEditorSubscription" | "createActiveEditorSubscription" | "importVisitors" | "usedLexicalNodes" | "addImportVisitor" | "addLexicalNode" | "addSyntaxExtension" | "addMdastExtension" | "addToMarkdownExtension" | "addExportVisitor" | "exportVisitors" | "initialMarkdown" | "setMarkdown" | "markdownSignal" | "editorRootElementRef" | "contentEditableClassName" | "placeholder" | "autoFocus" | "readOnly" | "composerChildren" | "addComposerChild" | "topAreaChildren" | "addTopAreaChild" | "nestedEditorChildren" | "addNestedEditorChild" | "editorWrappers" | "addEditorWrapper" | "currentFormat" | "editorInFocus" | "applyFormat" | "currentBlockType" | "applyBlockType" | "convertSelectionToNode" | "insertDecoratorNode" | "onBlur" | "iconComponentFor" | "markdownProcessingError" | "markdownErrorSignal" | "markdownSourceEditorValue" | "viewMode" | "diffMarkdown" | "cmExtensions">(key: K, callback: (value: ValueForKey<{
327
372
  viewMode: RealmNode<ViewMode>;
328
373
  diffMarkdown: RealmNode<string>;
329
374
  markdownSourceEditorValue: RealmNode<string>;
@@ -355,6 +400,7 @@ diffSourcePluginHooks: {
355
400
  initialMarkdown: RealmNode<string>;
356
401
  setMarkdown: RealmNode<string>;
357
402
  markdown: RealmNode<string>;
403
+ markdownSignal: RealmNode<string>;
358
404
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
359
405
  contentEditableClassName: RealmNode<string>;
360
406
  placeholder: RealmNode<ReactNode>;
@@ -384,6 +430,14 @@ diffSourcePluginHooks: {
384
430
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
385
431
  onBlur: RealmNode<FocusEvent>;
386
432
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
433
+ markdownProcessingError: RealmNode<{
434
+ error: string;
435
+ source: string;
436
+ } | null>;
437
+ markdownErrorSignal: RealmNode<{
438
+ error: string;
439
+ source: string;
440
+ }>;
387
441
  }, K>) => void) => void;
388
442
  useEmitterValues: <K_1 extends SystemKeys<{
389
443
  viewMode: RealmNode<ViewMode>;
@@ -417,6 +471,7 @@ diffSourcePluginHooks: {
417
471
  initialMarkdown: RealmNode<string>;
418
472
  setMarkdown: RealmNode<string>;
419
473
  markdown: RealmNode<string>;
474
+ markdownSignal: RealmNode<string>;
420
475
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
421
476
  contentEditableClassName: RealmNode<string>;
422
477
  placeholder: RealmNode<ReactNode>;
@@ -446,6 +501,14 @@ diffSourcePluginHooks: {
446
501
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
447
502
  onBlur: RealmNode<FocusEvent>;
448
503
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
504
+ markdownProcessingError: RealmNode<{
505
+ error: string;
506
+ source: string;
507
+ } | null>;
508
+ markdownErrorSignal: RealmNode<{
509
+ error: string;
510
+ source: string;
511
+ }>;
449
512
  }>>(...keys: K_1) => ValuesForKeys<{
450
513
  viewMode: RealmNode<ViewMode>;
451
514
  diffMarkdown: RealmNode<string>;
@@ -478,6 +541,7 @@ diffSourcePluginHooks: {
478
541
  initialMarkdown: RealmNode<string>;
479
542
  setMarkdown: RealmNode<string>;
480
543
  markdown: RealmNode<string>;
544
+ markdownSignal: RealmNode<string>;
481
545
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
482
546
  contentEditableClassName: RealmNode<string>;
483
547
  placeholder: RealmNode<ReactNode>;
@@ -507,6 +571,14 @@ diffSourcePluginHooks: {
507
571
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
508
572
  onBlur: RealmNode<FocusEvent>;
509
573
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
574
+ markdownProcessingError: RealmNode<{
575
+ error: string;
576
+ source: string;
577
+ } | null>;
578
+ markdownErrorSignal: RealmNode<{
579
+ error: string;
580
+ source: string;
581
+ }>;
510
582
  }, K_1>;
511
583
  usePubKeys: () => (values: SystemDict<{
512
584
  viewMode: RealmNode<ViewMode>;
@@ -540,6 +612,7 @@ diffSourcePluginHooks: {
540
612
  initialMarkdown: RealmNode<string>;
541
613
  setMarkdown: RealmNode<string>;
542
614
  markdown: RealmNode<string>;
615
+ markdownSignal: RealmNode<string>;
543
616
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
544
617
  contentEditableClassName: RealmNode<string>;
545
618
  placeholder: RealmNode<ReactNode>;
@@ -569,8 +642,16 @@ diffSourcePluginHooks: {
569
642
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
570
643
  onBlur: RealmNode<FocusEvent>;
571
644
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
645
+ markdownProcessingError: RealmNode<{
646
+ error: string;
647
+ source: string;
648
+ } | null>;
649
+ markdownErrorSignal: RealmNode<{
650
+ error: string;
651
+ source: string;
652
+ }>;
572
653
  }>) => void;
573
- usePublisher: <K_2 extends "jsxComponentDescriptors" | "jsxIsAvailable" | "toMarkdownOptions" | "toMarkdownExtensions" | "mdastExtensions" | "syntaxExtensions" | "markdown" | "activeEditor" | "inFocus" | "historyState" | "currentSelection" | "initialRootEditorState" | "rootEditor" | "createRootEditorSubscription" | "createActiveEditorSubscription" | "importVisitors" | "usedLexicalNodes" | "addImportVisitor" | "addLexicalNode" | "addSyntaxExtension" | "addMdastExtension" | "addToMarkdownExtension" | "addExportVisitor" | "exportVisitors" | "initialMarkdown" | "setMarkdown" | "editorRootElementRef" | "contentEditableClassName" | "placeholder" | "autoFocus" | "readOnly" | "composerChildren" | "addComposerChild" | "topAreaChildren" | "addTopAreaChild" | "nestedEditorChildren" | "addNestedEditorChild" | "editorWrappers" | "addEditorWrapper" | "currentFormat" | "editorInFocus" | "applyFormat" | "currentBlockType" | "applyBlockType" | "convertSelectionToNode" | "insertDecoratorNode" | "onBlur" | "iconComponentFor" | "markdownSourceEditorValue" | "viewMode" | "diffMarkdown" | "cmExtensions">(key: K_2) => (value: ValueForKey<{
654
+ usePublisher: <K_2 extends "jsxComponentDescriptors" | "jsxIsAvailable" | "toMarkdownOptions" | "toMarkdownExtensions" | "mdastExtensions" | "syntaxExtensions" | "markdown" | "activeEditor" | "inFocus" | "historyState" | "currentSelection" | "initialRootEditorState" | "rootEditor" | "createRootEditorSubscription" | "createActiveEditorSubscription" | "importVisitors" | "usedLexicalNodes" | "addImportVisitor" | "addLexicalNode" | "addSyntaxExtension" | "addMdastExtension" | "addToMarkdownExtension" | "addExportVisitor" | "exportVisitors" | "initialMarkdown" | "setMarkdown" | "markdownSignal" | "editorRootElementRef" | "contentEditableClassName" | "placeholder" | "autoFocus" | "readOnly" | "composerChildren" | "addComposerChild" | "topAreaChildren" | "addTopAreaChild" | "nestedEditorChildren" | "addNestedEditorChild" | "editorWrappers" | "addEditorWrapper" | "currentFormat" | "editorInFocus" | "applyFormat" | "currentBlockType" | "applyBlockType" | "convertSelectionToNode" | "insertDecoratorNode" | "onBlur" | "iconComponentFor" | "markdownProcessingError" | "markdownErrorSignal" | "markdownSourceEditorValue" | "viewMode" | "diffMarkdown" | "cmExtensions">(key: K_2) => (value: ValueForKey<{
574
655
  viewMode: RealmNode<ViewMode>;
575
656
  diffMarkdown: RealmNode<string>;
576
657
  markdownSourceEditorValue: RealmNode<string>;
@@ -602,6 +683,7 @@ diffSourcePluginHooks: {
602
683
  initialMarkdown: RealmNode<string>;
603
684
  setMarkdown: RealmNode<string>;
604
685
  markdown: RealmNode<string>;
686
+ markdownSignal: RealmNode<string>;
605
687
  editorRootElementRef: RealmNode<RefObject<HTMLDivElement> | null>;
606
688
  contentEditableClassName: RealmNode<string>;
607
689
  placeholder: RealmNode<ReactNode>;
@@ -631,5 +713,13 @@ diffSourcePluginHooks: {
631
713
  insertDecoratorNode: RealmNode<() => DecoratorNode<unknown>>;
632
714
  onBlur: RealmNode<FocusEvent>;
633
715
  iconComponentFor: RealmNode<(name: IconKey) => ReactNode>;
716
+ markdownProcessingError: RealmNode<{
717
+ error: string;
718
+ source: string;
719
+ } | null>;
720
+ markdownErrorSignal: RealmNode<{
721
+ error: string;
722
+ source: string;
723
+ }>;
634
724
  }, K_2>) => void;
635
725
  };
@@ -3,11 +3,12 @@ import { DiffSourceWrapper } from "./DiffSourceWrapper.js";
3
3
  import { system } from "../../gurx/realmFactory.js";
4
4
  import { realmPlugin } from "../../gurx/react.js";
5
5
  const diffSourceSystem = system(
6
- (r, [{ markdown, setMarkdown }]) => {
6
+ (r, [{ markdown, setMarkdown, markdownSignal }]) => {
7
7
  const diffMarkdown = r.node("");
8
8
  const markdownSourceEditorValue = r.node("");
9
9
  const cmExtensions = r.node([]);
10
10
  r.link(markdown, markdownSourceEditorValue);
11
+ r.link(markdownSourceEditorValue, markdownSignal);
11
12
  const viewMode = r.node("rich-text");
12
13
  r.sub(
13
14
  r.pipe(
@@ -41,13 +42,11 @@ const [
41
42
  ] = realmPlugin({
42
43
  id: "diff-source",
43
44
  systemSpec: diffSourceSystem,
44
- applyParamsToSystem(r, params) {
45
- r.pubKey("viewMode", (params == null ? void 0 : params.viewMode) || "rich-text");
46
- },
47
45
  init(r, params) {
48
46
  r.pubKey("diffMarkdown", (params == null ? void 0 : params.diffMarkdown) || "");
49
47
  r.pubKey("cmExtensions", (params == null ? void 0 : params.codeMirrorExtensions) || []);
50
48
  r.pubKey("addEditorWrapper", DiffSourceWrapper);
49
+ r.pubKey("viewMode", (params == null ? void 0 : params.viewMode) || "rich-text");
51
50
  }
52
51
  });
53
52
  export {