@bendyline/squisq-editor-react 1.2.1 → 1.3.0

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 (105) hide show
  1. package/dist/EditorContext.d.ts +65 -1
  2. package/dist/EditorContext.d.ts.map +1 -1
  3. package/dist/EditorContext.js +31 -4
  4. package/dist/EditorContext.js.map +1 -1
  5. package/dist/EditorShell.d.ts +101 -2
  6. package/dist/EditorShell.d.ts.map +1 -1
  7. package/dist/EditorShell.js +20 -8
  8. package/dist/EditorShell.js.map +1 -1
  9. package/dist/ImageNodeView.d.ts.map +1 -1
  10. package/dist/ImageNodeView.js +12 -2
  11. package/dist/ImageNodeView.js.map +1 -1
  12. package/dist/MediaBin.d.ts.map +1 -1
  13. package/dist/MediaBin.js +16 -1
  14. package/dist/MediaBin.js.map +1 -1
  15. package/dist/MentionExtension.d.ts +22 -0
  16. package/dist/MentionExtension.d.ts.map +1 -0
  17. package/dist/MentionExtension.js +242 -0
  18. package/dist/MentionExtension.js.map +1 -0
  19. package/dist/PreviewPanel.d.ts +3 -8
  20. package/dist/PreviewPanel.d.ts.map +1 -1
  21. package/dist/PreviewPanel.js +4 -282
  22. package/dist/PreviewPanel.js.map +1 -1
  23. package/dist/RawEditor.d.ts +8 -1
  24. package/dist/RawEditor.d.ts.map +1 -1
  25. package/dist/RawEditor.js +167 -30
  26. package/dist/RawEditor.js.map +1 -1
  27. package/dist/TemplateAnnotation.d.ts.map +1 -1
  28. package/dist/TemplateAnnotation.js +4 -2
  29. package/dist/TemplateAnnotation.js.map +1 -1
  30. package/dist/Toolbar.d.ts +7 -1
  31. package/dist/Toolbar.d.ts.map +1 -1
  32. package/dist/Toolbar.js +57 -18
  33. package/dist/Toolbar.js.map +1 -1
  34. package/dist/Tooltip.d.ts +10 -0
  35. package/dist/Tooltip.d.ts.map +1 -0
  36. package/dist/Tooltip.js +104 -0
  37. package/dist/Tooltip.js.map +1 -0
  38. package/dist/ViewSwitcher.d.ts +1 -1
  39. package/dist/ViewSwitcher.d.ts.map +1 -1
  40. package/dist/ViewSwitcher.js +10 -4
  41. package/dist/ViewSwitcher.js.map +1 -1
  42. package/dist/WysiwygEditor.d.ts +13 -2
  43. package/dist/WysiwygEditor.d.ts.map +1 -1
  44. package/dist/WysiwygEditor.js +239 -4
  45. package/dist/WysiwygEditor.js.map +1 -1
  46. package/dist/__tests__/detectMarkdown.test.d.ts +2 -0
  47. package/dist/__tests__/detectMarkdown.test.d.ts.map +1 -0
  48. package/dist/__tests__/detectMarkdown.test.js +69 -0
  49. package/dist/__tests__/detectMarkdown.test.js.map +1 -0
  50. package/dist/__tests__/fileKind.test.d.ts +2 -0
  51. package/dist/__tests__/fileKind.test.d.ts.map +1 -0
  52. package/dist/__tests__/fileKind.test.js +81 -0
  53. package/dist/__tests__/fileKind.test.js.map +1 -0
  54. package/dist/__tests__/tiptapBridge.test.js +36 -0
  55. package/dist/__tests__/tiptapBridge.test.js.map +1 -1
  56. package/dist/buildPreviewDoc.d.ts +22 -0
  57. package/dist/buildPreviewDoc.d.ts.map +1 -0
  58. package/dist/buildPreviewDoc.js +212 -0
  59. package/dist/buildPreviewDoc.js.map +1 -0
  60. package/dist/detectMarkdown.d.ts +20 -0
  61. package/dist/detectMarkdown.d.ts.map +1 -0
  62. package/dist/detectMarkdown.js +61 -0
  63. package/dist/detectMarkdown.js.map +1 -0
  64. package/dist/fileKind.d.ts +30 -0
  65. package/dist/fileKind.d.ts.map +1 -0
  66. package/dist/fileKind.js +123 -0
  67. package/dist/fileKind.js.map +1 -0
  68. package/dist/hooks/useFileDrop.d.ts.map +1 -1
  69. package/dist/hooks/useFileDrop.js +9 -7
  70. package/dist/hooks/useFileDrop.js.map +1 -1
  71. package/dist/index.d.ts +5 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/mediaDragMime.d.ts +17 -0
  76. package/dist/mediaDragMime.d.ts.map +1 -0
  77. package/dist/mediaDragMime.js +22 -0
  78. package/dist/mediaDragMime.js.map +1 -0
  79. package/dist/tiptapBridge.d.ts.map +1 -1
  80. package/dist/tiptapBridge.js +58 -2
  81. package/dist/tiptapBridge.js.map +1 -1
  82. package/package.json +9 -7
  83. package/src/EditorContext.tsx +106 -3
  84. package/src/EditorShell.tsx +195 -15
  85. package/src/ImageNodeView.tsx +15 -2
  86. package/src/MediaBin.tsx +23 -1
  87. package/src/MentionExtension.tsx +258 -0
  88. package/src/PreviewPanel.tsx +5 -333
  89. package/src/RawEditor.tsx +193 -37
  90. package/src/TemplateAnnotation.ts +4 -2
  91. package/src/Toolbar.tsx +111 -48
  92. package/src/Tooltip.tsx +124 -0
  93. package/src/ViewSwitcher.tsx +15 -5
  94. package/src/WysiwygEditor.tsx +270 -5
  95. package/src/__tests__/detectMarkdown.test.ts +88 -0
  96. package/src/__tests__/fileKind.test.ts +96 -0
  97. package/src/__tests__/tiptapBridge.test.ts +44 -0
  98. package/src/buildPreviewDoc.ts +254 -0
  99. package/src/detectMarkdown.ts +62 -0
  100. package/src/fileKind.ts +134 -0
  101. package/src/hooks/useFileDrop.ts +10 -6
  102. package/src/index.ts +14 -0
  103. package/src/mediaDragMime.ts +32 -0
  104. package/src/styles/editor.css +214 -8
  105. package/src/tiptapBridge.ts +66 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentionExtension.d.ts","sourceRoot":"","sources":["../src/MentionExtension.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBzE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,eAAe,GAAG,IAAI,mJAwF9E"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * MentionExtension
3
+ *
4
+ * Tiptap mention configuration paired with a small absolutely-positioned
5
+ * suggestion popover. Shares a caller-supplied async provider (see
6
+ * `MentionProvider` in EditorContext) with the Monaco `@` completion
7
+ * provider in `RawEditor`, so both editing modes surface the same roster.
8
+ *
9
+ * The mention chip renders as `<span data-mention data-kind data-id
10
+ * data-label class="mention">@Label</span>`, matching the wire format that
11
+ * `tiptapBridge` emits when converting markdown → Tiptap HTML. On serialize
12
+ * back to markdown, the bridge emits `@[Label](kind:id)`.
13
+ */
14
+ import Mention from '@tiptap/extension-mention';
15
+ import { PluginKey } from '@tiptap/pm/state';
16
+ /**
17
+ * Fallback namespace for defensive code paths — used when a mention node
18
+ * somehow lacks a `kind` attribute (e.g. legacy HTML parsed without one).
19
+ * Inserts from the suggestion popover always carry the candidate's own
20
+ * `scheme`, so this only surfaces for malformed/legacy content.
21
+ */
22
+ const FALLBACK_KIND = 'mention';
23
+ /**
24
+ * Build the Tiptap mention extension for an editor. The returned extension
25
+ * captures a reference to `getProvider` at configure-time and calls it on
26
+ * every keystroke — keep the reference stable so we don't recreate the
27
+ * editor just to change who answers the `@` query.
28
+ */
29
+ export function buildMentionExtension(getProvider) {
30
+ return Mention.configure({
31
+ HTMLAttributes: {
32
+ class: 'mention',
33
+ 'data-mention': 'true',
34
+ },
35
+ renderHTML({ options, node }) {
36
+ const label = node.attrs.label ?? node.attrs.id ?? '';
37
+ const id = node.attrs.id ?? '';
38
+ const kind = node.attrs.kind ?? FALLBACK_KIND;
39
+ return [
40
+ 'span',
41
+ {
42
+ ...options.HTMLAttributes,
43
+ 'data-kind': kind,
44
+ 'data-id': id,
45
+ 'data-label': label,
46
+ },
47
+ `@${label}`,
48
+ ];
49
+ },
50
+ renderText({ node }) {
51
+ const label = node.attrs.label ?? node.attrs.id ?? '';
52
+ const id = node.attrs.id ?? '';
53
+ const kind = node.attrs.kind ?? FALLBACK_KIND;
54
+ return `@[${label}](${kind}:${id})`;
55
+ },
56
+ }).extend({
57
+ addAttributes() {
58
+ return {
59
+ id: {
60
+ default: null,
61
+ parseHTML: (el) => el.getAttribute('data-id'),
62
+ renderHTML: (attrs) => (attrs.id ? { 'data-id': attrs.id } : {}),
63
+ },
64
+ label: {
65
+ default: null,
66
+ parseHTML: (el) => el.getAttribute('data-label'),
67
+ renderHTML: (attrs) => (attrs.label ? { 'data-label': attrs.label } : {}),
68
+ },
69
+ kind: {
70
+ default: FALLBACK_KIND,
71
+ parseHTML: (el) => el.getAttribute('data-kind') ?? FALLBACK_KIND,
72
+ renderHTML: (attrs) => ({ 'data-kind': attrs.kind ?? FALLBACK_KIND }),
73
+ },
74
+ };
75
+ },
76
+ addOptions() {
77
+ return {
78
+ ...(this.parent?.() ?? {}),
79
+ suggestion: {
80
+ char: '@',
81
+ // Custom plugin key so the mention suggestion doesn't collide
82
+ // with any future `:` or `/` popovers.
83
+ pluginKey: new PluginKey('mentionSuggestion'),
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ command: ({ editor, range, props }) => {
86
+ const id = props?.id ?? '';
87
+ const label = props?.label ?? id;
88
+ const kind = props?.kind ?? FALLBACK_KIND;
89
+ editor
90
+ .chain()
91
+ .focus()
92
+ .insertContentAt(range, [
93
+ {
94
+ type: 'mention',
95
+ attrs: { id, label, kind },
96
+ },
97
+ { type: 'text', text: ' ' },
98
+ ])
99
+ .run();
100
+ },
101
+ items: async ({ query }) => {
102
+ const provider = getProvider();
103
+ if (!provider)
104
+ return [];
105
+ try {
106
+ return await provider(query);
107
+ }
108
+ catch {
109
+ return [];
110
+ }
111
+ },
112
+ render: renderSuggestionFactory(),
113
+ },
114
+ };
115
+ },
116
+ });
117
+ }
118
+ /**
119
+ * Lightweight suggestion popover. Uses a plain absolutely-positioned div
120
+ * anchored to the caret rect — no tippy.js needed. Keyboard nav handled via
121
+ * the `onKeyDown` hook Tiptap wires up.
122
+ */
123
+ function renderSuggestionFactory() {
124
+ return () => {
125
+ let container = null;
126
+ let state = { items: [], selected: 0 };
127
+ let currentProps = null;
128
+ const update = () => {
129
+ if (!container || !currentProps)
130
+ return;
131
+ container.innerHTML = '';
132
+ if (state.items.length === 0) {
133
+ container.style.display = 'none';
134
+ return;
135
+ }
136
+ container.style.display = 'block';
137
+ for (let i = 0; i < state.items.length; i++) {
138
+ const item = state.items[i];
139
+ const btn = document.createElement('button');
140
+ btn.type = 'button';
141
+ btn.className = 'squisq-mention-item' + (i === state.selected ? ' is-selected' : '');
142
+ btn.dataset.index = String(i);
143
+ btn.innerHTML = '';
144
+ const label = document.createElement('span');
145
+ label.className = 'squisq-mention-label';
146
+ label.textContent = item.label;
147
+ btn.appendChild(label);
148
+ if (item.description) {
149
+ const desc = document.createElement('span');
150
+ desc.className = 'squisq-mention-desc';
151
+ desc.textContent = item.description;
152
+ btn.appendChild(desc);
153
+ }
154
+ btn.addEventListener('mousedown', (ev) => {
155
+ ev.preventDefault();
156
+ selectAt(i);
157
+ });
158
+ container.appendChild(btn);
159
+ }
160
+ positionTo(container, currentProps.clientRect);
161
+ };
162
+ const selectAt = (index) => {
163
+ const item = state.items[index];
164
+ if (!item || !currentProps)
165
+ return;
166
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
+ const command = currentProps.command;
168
+ if (typeof command === 'function') {
169
+ command({ id: item.id, label: item.label, kind: item.scheme });
170
+ }
171
+ };
172
+ return {
173
+ onStart: (props) => {
174
+ currentProps = props;
175
+ state = { items: props.items ?? [], selected: 0 };
176
+ if (!container) {
177
+ container = document.createElement('div');
178
+ container.className = 'squisq-mention-popover';
179
+ container.style.position = 'absolute';
180
+ container.style.zIndex = '10000';
181
+ document.body.appendChild(container);
182
+ }
183
+ update();
184
+ },
185
+ onUpdate: (props) => {
186
+ currentProps = props;
187
+ if (Array.isArray(props.items)) {
188
+ state = { items: props.items, selected: 0 };
189
+ }
190
+ update();
191
+ },
192
+ onKeyDown: ({ event }) => {
193
+ if (!state.items.length)
194
+ return false;
195
+ if (event.key === 'ArrowDown') {
196
+ state.selected = (state.selected + 1) % state.items.length;
197
+ update();
198
+ return true;
199
+ }
200
+ if (event.key === 'ArrowUp') {
201
+ state.selected = (state.selected - 1 + state.items.length) % state.items.length;
202
+ update();
203
+ return true;
204
+ }
205
+ if (event.key === 'Enter' || event.key === 'Tab') {
206
+ selectAt(state.selected);
207
+ return true;
208
+ }
209
+ if (event.key === 'Escape') {
210
+ state = { items: [], selected: 0 };
211
+ update();
212
+ return true;
213
+ }
214
+ return false;
215
+ },
216
+ onExit: () => {
217
+ if (container?.parentNode)
218
+ container.parentNode.removeChild(container);
219
+ container = null;
220
+ currentProps = null;
221
+ },
222
+ };
223
+ };
224
+ }
225
+ function positionTo(el, clientRect) {
226
+ const rect = clientRect?.();
227
+ if (!rect)
228
+ return;
229
+ // Anchor just below the caret; fall back to above when there's no room.
230
+ const viewportH = window.innerHeight;
231
+ const below = rect.bottom + 4;
232
+ const estH = Math.min(240, el.offsetHeight || 200);
233
+ const fitsBelow = below + estH < viewportH;
234
+ el.style.left = `${rect.left + window.scrollX}px`;
235
+ if (fitsBelow) {
236
+ el.style.top = `${below + window.scrollY}px`;
237
+ }
238
+ else {
239
+ el.style.top = `${rect.top + window.scrollY - estH - 4}px`;
240
+ }
241
+ }
242
+ //# sourceMappingURL=MentionExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentionExtension.js","sourceRoot":"","sources":["../src/MentionExtension.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAO7C;;;;;GAKG;AACH,MAAM,aAAa,GAAG,SAAS,CAAC;AAOhC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAyC;IAC7E,OAAO,OAAO,CAAC,SAAS,CAAC;QACvB,cAAc,EAAE;YACd,KAAK,EAAE,SAAS;YAChB,cAAc,EAAE,MAAM;SACvB;QACD,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1B,MAAM,KAAK,GACR,IAAI,CAAC,KAAK,CAAC,KAA4B,IAAK,IAAI,CAAC,KAAK,CAAC,EAAyB,IAAI,EAAE,CAAC;YAC1F,MAAM,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,EAAyB,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,IAA2B,IAAI,aAAa,CAAC;YACtE,OAAO;gBACL,MAAM;gBACN;oBACE,GAAG,OAAO,CAAC,cAAc;oBACzB,WAAW,EAAE,IAAI;oBACjB,SAAS,EAAE,EAAE;oBACb,YAAY,EAAE,KAAK;iBACpB;gBACD,IAAI,KAAK,EAAE;aACZ,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,EAAE,IAAI,EAAE;YACjB,MAAM,KAAK,GACR,IAAI,CAAC,KAAK,CAAC,KAA4B,IAAK,IAAI,CAAC,KAAK,CAAC,EAAyB,IAAI,EAAE,CAAC;YAC1F,MAAM,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC,EAAyB,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,IAA2B,IAAI,aAAa,CAAC;YACtE,OAAO,KAAK,KAAK,KAAK,IAAI,IAAI,EAAE,GAAG,CAAC;QACtC,CAAC;KACF,CAAC,CAAC,MAAM,CAAC;QACR,aAAa;YACX,OAAO;gBACL,EAAE,EAAE;oBACF,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC;oBAC7C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC;oBAChD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1E;gBACD,IAAI,EAAE;oBACJ,OAAO,EAAE,aAAa;oBACtB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,aAAa;oBAChE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,aAAa,EAAE,CAAC;iBACtE;aACF,CAAC;QACJ,CAAC;QACD,UAAU;YACR,OAAO;gBACL,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC1B,UAAU,EAAE;oBACV,IAAI,EAAE,GAAG;oBACT,8DAA8D;oBAC9D,uCAAuC;oBACvC,SAAS,EAAE,IAAI,SAAS,CAAC,mBAAmB,CAAC;oBAC7C,8DAA8D;oBAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAgD,EAAE,EAAE;wBAClF,MAAM,EAAE,GAAI,KAAK,EAAE,EAAoB,IAAI,EAAE,CAAC;wBAC9C,MAAM,KAAK,GAAI,KAAK,EAAE,KAAuB,IAAI,EAAE,CAAC;wBACpD,MAAM,IAAI,GAAI,KAAK,EAAE,IAA2B,IAAI,aAAa,CAAC;wBAClE,MAAM;6BACH,KAAK,EAAE;6BACP,KAAK,EAAE;6BACP,eAAe,CAAC,KAAK,EAAE;4BACtB;gCACE,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;6BAC3B;4BACD,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;yBAC5B,CAAC;6BACD,GAAG,EAAE,CAAC;oBACX,CAAC;oBACD,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAqB,EAAE,EAAE;wBAC5C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;wBAC/B,IAAI,CAAC,QAAQ;4BAAE,OAAO,EAAE,CAAC;wBACzB,IAAI,CAAC;4BACH,OAAO,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC/B,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;oBACD,MAAM,EAAE,uBAAuB,EAAE;iBAClC;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB;IAC9B,OAAO,GAAG,EAAE;QACV,IAAI,SAAS,GAA0B,IAAI,CAAC;QAC5C,IAAI,KAAK,GAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,YAAY,GAA2B,IAAI,CAAC;QAEhD,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;gBAAE,OAAO;YACxC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC7C,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACpB,GAAG,CAAC,SAAS,GAAG,qBAAqB,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrF,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC9B,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAC7C,KAAK,CAAC,SAAS,GAAG,sBAAsB,CAAC;gBACzC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC/B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC;oBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBACpC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBACD,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;oBACvC,EAAE,CAAC,cAAc,EAAE,CAAC;oBACpB,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YAED,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO;YACnC,8DAA8D;YAC9D,MAAM,OAAO,GAAI,YAAoB,CAAC,OAAO,CAAC;YAC9C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,KAAsB,EAAE,EAAE;gBAClC,YAAY,GAAG,KAAK,CAAC;gBACrB,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC1C,SAAS,CAAC,SAAS,GAAG,wBAAwB,CAAC;oBAC/C,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;oBACtC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC;YACD,QAAQ,EAAE,CAAC,KAAsB,EAAE,EAAE;gBACnC,YAAY,GAAG,KAAK,CAAC;gBACrB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAC9C,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC;YACD,SAAS,EAAE,CAAC,EAAE,KAAK,EAA4B,EAAE,EAAE;gBACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC;gBACtC,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oBAC9B,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC3D,MAAM,EAAE,CAAC;oBACT,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;oBAC5B,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;oBAChF,MAAM,EAAE,CAAC;oBACT,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBACjD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC3B,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;oBACnC,MAAM,EAAE,CAAC;oBACT,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,SAAS,EAAE,UAAU;oBAAE,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBACvE,SAAS,GAAG,IAAI,CAAC;gBACjB,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,EAAkB,EAClB,UAAqD;IAErD,MAAM,IAAI,GAAG,UAAU,EAAE,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,wEAAwE;IACxE,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;IAClD,IAAI,SAAS,EAAE,CAAC;QACd,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -6,14 +6,9 @@
6
6
  *
7
7
  * The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
8
8
  * with template names, heading text, and body content — but no audio or
9
- * visual layers. This component bridges the gap by:
10
- *
11
- * 1. Flattening the block tree into a linear slide sequence
12
- * 2. Converting each block into a TemplateBlock-compatible object
13
- * (mapping heading text → title, templateOverrides → template fields)
14
- * 3. Synthesizing a dummy audio segment so DocPlayer's timing works
15
- * (the player enters fallback-timer mode when audio can't load)
16
- * 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
9
+ * visual layers. This component bridges the gap by using buildPreviewDoc()
10
+ * to flatten blocks, convert them to TemplateBlock slides with interleaved
11
+ * images, and synthesize timing.
17
12
  */
18
13
  import type { ContentContainer } from '@bendyline/squisq/storage';
19
14
  export interface PreviewPanelProps {
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACrC;AAmUD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA2HvF"}
1
+ {"version":3,"file":"PreviewPanel.d.ts","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAKlE,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACrC;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAc,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CA2HvF"}
@@ -7,295 +7,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
7
  *
8
8
  * The markdown-derived Doc (from markdownToDoc) contains hierarchical blocks
9
9
  * with template names, heading text, and body content — but no audio or
10
- * visual layers. This component bridges the gap by:
11
- *
12
- * 1. Flattening the block tree into a linear slide sequence
13
- * 2. Converting each block into a TemplateBlock-compatible object
14
- * (mapping heading text → title, templateOverrides → template fields)
15
- * 3. Synthesizing a dummy audio segment so DocPlayer's timing works
16
- * (the player enters fallback-timer mode when audio can't load)
17
- * 4. Passing the prepared Doc to DocPlayer for SVG-based rendering
10
+ * visual layers. This component bridges the gap by using buildPreviewDoc()
11
+ * to flatten blocks, convert them to TemplateBlock slides with interleaved
12
+ * images, and synthesize timing.
18
13
  */
19
14
  import { useState, useEffect } from 'react';
20
15
  import { DocPlayer, LinearDocView } from '@bendyline/squisq-react';
21
- import { flattenBlocks } from '@bendyline/squisq/doc';
22
- import { hasTemplate } from '@bendyline/squisq/doc';
23
- import { extractPlainText } from '@bendyline/squisq/markdown';
24
- import { getChildren } from '@bendyline/squisq/markdown';
25
16
  import { applyTransform } from '@bendyline/squisq/transform';
26
17
  import { resolveAudioMapping } from '@bendyline/squisq/doc';
27
18
  import { useEditorContext } from './EditorContext';
28
19
  import { usePreviewSettings } from './PreviewControls';
29
- // ── Helpers ────────────────────────────────────────────────────────
30
- /**
31
- * Extract plain text from an array of markdown block nodes.
32
- * Walks paragraphs, blockquotes, and list items to collect all text.
33
- */
34
- function extractBodyText(contents) {
35
- if (!contents || contents.length === 0)
36
- return '';
37
- const parts = [];
38
- for (const node of contents) {
39
- parts.push(extractPlainText(node));
40
- }
41
- return parts.join('\n').trim();
42
- }
43
- /**
44
- * Extract images from a block's markdown contents.
45
- * Walks the node tree recursively to find all MarkdownImage nodes.
46
- */
47
- function extractBlockImages(contents) {
48
- if (!contents || contents.length === 0)
49
- return [];
50
- const images = [];
51
- function walk(node) {
52
- if ('type' in node && node.type === 'image' && 'url' in node) {
53
- const img = node;
54
- if (img.url) {
55
- images.push({ src: img.url, alt: img.alt ?? '' });
56
- }
57
- }
58
- for (const child of getChildren(node)) {
59
- walk(child);
60
- }
61
- }
62
- for (const node of contents) {
63
- walk(node);
64
- }
65
- return images;
66
- }
67
- /**
68
- * Collect all unique images from an entire Doc's block tree.
69
- * Walks nested children to find every image across all blocks.
70
- */
71
- function collectAllDocImages(blocks) {
72
- const seen = new Set();
73
- const images = [];
74
- function walkBlocks(blockList) {
75
- for (const block of blockList) {
76
- for (const img of extractBlockImages(block.contents)) {
77
- if (!seen.has(img.src)) {
78
- seen.add(img.src);
79
- images.push(img);
80
- }
81
- }
82
- if (block.children) {
83
- walkBlocks(block.children);
84
- }
85
- }
86
- }
87
- walkBlocks(blocks);
88
- return images;
89
- }
90
- /**
91
- * Extract list items from markdown body content.
92
- * Returns an array of plain text strings for each list item found.
93
- */
94
- function extractListItems(contents) {
95
- if (!contents)
96
- return [];
97
- const items = [];
98
- for (const node of contents) {
99
- if (node.type === 'list') {
100
- for (const item of node.children) {
101
- const text = extractPlainText(item).trim();
102
- if (text)
103
- items.push(text);
104
- }
105
- }
106
- }
107
- return items;
108
- }
109
- /**
110
- * Provide sensible default fields for templates that require more than
111
- * just a `title`. This prevents crashes from undefined required fields
112
- * when the markdown annotations don't supply all template-specific values.
113
- */
114
- function getTemplateDefaults(templateName, headingText, block) {
115
- const body = extractBodyText(block.contents);
116
- switch (templateName) {
117
- case 'statHighlight':
118
- return {
119
- stat: headingText,
120
- description: body || headingText,
121
- };
122
- case 'quoteBlock':
123
- case 'fullBleedQuote':
124
- case 'pullQuote':
125
- return {
126
- quote: body || headingText,
127
- };
128
- case 'factCard':
129
- return {
130
- fact: headingText,
131
- explanation: body || headingText,
132
- };
133
- case 'comparisonBar':
134
- return {
135
- leftLabel: 'A',
136
- leftValue: 60,
137
- rightLabel: 'B',
138
- rightValue: 40,
139
- };
140
- case 'listBlock':
141
- return {
142
- items: extractListItems(block.contents) || ['Item 1', 'Item 2', 'Item 3'],
143
- };
144
- case 'definitionCard':
145
- return {
146
- term: headingText,
147
- definition: body || headingText,
148
- };
149
- case 'dateEvent':
150
- return {
151
- date: headingText,
152
- description: body || headingText,
153
- };
154
- default:
155
- return {};
156
- }
157
- }
158
- /**
159
- * Convert a markdown-derived Block into a TemplateBlock-compatible object.
160
- *
161
- * The block's heading text becomes `title` (works for sectionHeader,
162
- * titleBlock, factCard, etc.). Any templateOverrides from annotation
163
- * syntax `{[template key=value]}` are spread on top so template-specific
164
- * fields (stat, quote, description, …) are available.
165
- *
166
- * If the requested template doesn't exist in the registry, falls back
167
- * to `sectionHeader` to avoid "Unknown template" warnings.
168
- */
169
- function blockToSlide(block, index) {
170
- const headingText = block.sourceHeading
171
- ? extractPlainText(block.sourceHeading)
172
- : block.title || block.id || `Slide ${index + 1}`;
173
- // Validate template name — fall back to sectionHeader for unknowns
174
- const requestedTemplate = block.template || 'sectionHeader';
175
- const template = hasTemplate(requestedTemplate) ? requestedTemplate : 'sectionHeader';
176
- // Get sensible defaults for templates that need more than just `title`
177
- const defaults = getTemplateDefaults(template, headingText, block);
178
- // Spread the block itself to pick up any template-specific fields
179
- // placed directly on the block by applyTransform (e.g. stat, description,
180
- // quote, colorScheme). These are not in templateOverrides — they live
181
- // on the block object because the transform produces hybrid Block+Template
182
- // objects via the timing allocator.
183
- const { id: _id, startTime: _st, duration: _d, audioSegment: _as, layers: _l, transition: _tr, template: _t, title: _ti, children: _c, contents: _co, sourceHeading: _sh, templateOverrides: _to, ...extraFields } = block;
184
- return {
185
- id: block.id,
186
- template,
187
- duration: block.duration,
188
- audioSegment: 0,
189
- transition: index > 0 ? { type: 'fade', duration: 0.5 } : undefined,
190
- // Provide heading text as title — consumed by sectionHeader, titleBlock, etc.
191
- title: headingText,
192
- // Template-specific defaults (safe fallbacks for required fields)
193
- ...defaults,
194
- // Template-specific fields from transform (stat, description, quote, etc.)
195
- ...extraFields,
196
- // Spread annotation overrides last so explicit values win
197
- ...block.templateOverrides,
198
- };
199
- }
200
- /** Ambient motions to rotate on image slides. */
201
- const IMAGE_MOTIONS = [
202
- 'zoomIn',
203
- 'zoomOut',
204
- 'panLeft',
205
- 'panRight',
206
- ];
207
- /**
208
- * Build a player-ready Doc from the markdown-derived Doc.
209
- *
210
- * Flattens hierarchical blocks, converts each to a TemplateBlock-compatible
211
- * slide, recalculates timing, and adds a synthetic audio segment.
212
- *
213
- * Images found in the markdown are used in two ways:
214
- * 1. Per-block: if a block has images, its first image becomes the background
215
- * (via imageWithCaption template) or an accent image on text templates.
216
- * 2. Global: remaining images are interleaved as standalone image slides
217
- * for visual variety.
218
- */
219
- function buildPreviewDoc(doc) {
220
- const flat = flattenBlocks(doc.blocks);
221
- // Collect all images from the doc for global interleaving
222
- const allImages = collectAllDocImages(doc.blocks);
223
- // Track which images are used per-block so we can interleave the rest
224
- const usedImageSrcs = new Set();
225
- // First pass: convert blocks to slides, using per-block images
226
- const slides = [];
227
- let motionIndex = 0;
228
- for (let i = 0; i < flat.length; i++) {
229
- const block = flat[i];
230
- const blockImages = extractBlockImages(block.contents);
231
- const slide = blockToSlide(block, i);
232
- // If the block has images and is using the default sectionHeader template,
233
- // upgrade it to imageWithCaption so the image becomes the slide background.
234
- if (blockImages.length > 0 && slide.template === 'sectionHeader') {
235
- const img = blockImages[0];
236
- usedImageSrcs.add(img.src);
237
- slide.template = 'imageWithCaption';
238
- slide.imageSrc = img.src;
239
- slide.imageAlt = img.alt;
240
- slide.caption = slide.title;
241
- slide.captionPosition = 'bottom';
242
- slide.ambientMotion = IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length];
243
- }
244
- else if (blockImages.length > 0) {
245
- // For other templates, add the first image as an accent
246
- const img = blockImages[0];
247
- usedImageSrcs.add(img.src);
248
- if (!slide.accentImage) {
249
- slide.accentImage = {
250
- src: img.src,
251
- alt: img.alt,
252
- position: 'left-strip',
253
- ambientMotion: IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length],
254
- };
255
- }
256
- }
257
- slides.push(slide);
258
- }
259
- // Second pass: interleave unused images as standalone imageWithCaption slides.
260
- // Spread them evenly through the sequence for visual variety.
261
- const unusedImages = allImages.filter((img) => !usedImageSrcs.has(img.src));
262
- if (unusedImages.length > 0 && slides.length > 0) {
263
- const interval = Math.max(2, Math.floor(slides.length / (unusedImages.length + 1)));
264
- let insertOffset = 0;
265
- for (let imgIdx = 0; imgIdx < unusedImages.length; imgIdx++) {
266
- const insertAt = Math.min((imgIdx + 1) * interval + insertOffset, slides.length);
267
- const img = unusedImages[imgIdx];
268
- slides.splice(insertAt, 0, {
269
- id: `img-interleave-${imgIdx}`,
270
- template: 'imageWithCaption',
271
- duration: 5,
272
- audioSegment: 0,
273
- imageSrc: img.src,
274
- imageAlt: img.alt,
275
- ambientMotion: IMAGE_MOTIONS[motionIndex++ % IMAGE_MOTIONS.length],
276
- transition: { type: 'fade', duration: 0.5 },
277
- });
278
- insertOffset++;
279
- }
280
- }
281
- // Recalculate sequential timing
282
- let t = 0;
283
- for (const slide of slides) {
284
- slide.startTime = t;
285
- t += slide.duration;
286
- }
287
- return {
288
- articleId: doc.articleId,
289
- duration: t,
290
- blocks: slides,
291
- audio: {
292
- // Synthetic segment — audio will fail to load and DocPlayer will use
293
- // its fallback timer to advance currentTime via requestAnimationFrame.
294
- segments: t > 0 ? [{ src: '', name: 'preview', duration: t, startTime: 0 }] : [],
295
- },
296
- ...(doc.captions ? { captions: doc.captions } : {}),
297
- };
298
- }
20
+ import { buildPreviewDoc } from './buildPreviewDoc';
299
21
  // ── Component ──────────────────────────────────────────────────────
300
22
  /**
301
23
  * Live preview panel that renders the current document as a slideshow
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewPanel.js","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PreviewPanel.js","sourceRoot":"","sources":["../src/PreviewPanel.tsx"],"names":[],"mappings":"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"}
@@ -16,10 +16,17 @@ export interface RawEditorProps {
16
16
  wordWrap?: 'on' | 'off' | 'wordWrapColumn' | 'bounded';
17
17
  /** Additional class name for the container */
18
18
  className?: string;
19
+ /**
20
+ * Chat-composer mode: Enter fires this callback (submit) and Cmd/Ctrl+Enter
21
+ * inserts a newline. When undefined, behaves normally.
22
+ */
23
+ submitOnEnter?: () => void;
24
+ /** Make Monaco read-only (no edits, no cursor blink). */
25
+ readOnly?: boolean;
19
26
  }
20
27
  /**
21
28
  * Raw markdown editor using Monaco Editor.
22
29
  * Binds to the shared EditorContext for source synchronization.
23
30
  */
24
- export declare function RawEditor({ theme, minimap, fontSize, wordWrap, className, }: RawEditorProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function RawEditor({ theme, minimap, fontSize, wordWrap, className, submitOnEnter, readOnly, }: RawEditorProps): import("react/jsx-runtime").JSX.Element;
25
32
  //# sourceMappingURL=RawEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvD,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAY,EACZ,OAAe,EACf,QAAa,EACb,QAAe,EACf,SAAS,GACV,EAAE,cAAc,2CA8GhB"}
1
+ {"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvD,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAY,EACZ,OAAe,EACf,QAAa,EACb,QAAe,EACf,SAAS,EACT,aAAa,EACb,QAAgB,GACjB,EAAE,cAAc,2CAgQhB"}