@bendyline/squisq-editor-react 1.2.2 → 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.
- package/dist/EditorContext.d.ts +65 -1
- package/dist/EditorContext.d.ts.map +1 -1
- package/dist/EditorContext.js +31 -4
- package/dist/EditorContext.js.map +1 -1
- package/dist/EditorShell.d.ts +101 -2
- package/dist/EditorShell.d.ts.map +1 -1
- package/dist/EditorShell.js +20 -8
- package/dist/EditorShell.js.map +1 -1
- package/dist/ImageNodeView.d.ts.map +1 -1
- package/dist/ImageNodeView.js +12 -2
- package/dist/ImageNodeView.js.map +1 -1
- package/dist/MediaBin.d.ts.map +1 -1
- package/dist/MediaBin.js +16 -1
- package/dist/MediaBin.js.map +1 -1
- package/dist/MentionExtension.d.ts +22 -0
- package/dist/MentionExtension.d.ts.map +1 -0
- package/dist/MentionExtension.js +242 -0
- package/dist/MentionExtension.js.map +1 -0
- package/dist/RawEditor.d.ts +8 -1
- package/dist/RawEditor.d.ts.map +1 -1
- package/dist/RawEditor.js +167 -30
- package/dist/RawEditor.js.map +1 -1
- package/dist/TemplateAnnotation.d.ts.map +1 -1
- package/dist/TemplateAnnotation.js +4 -2
- package/dist/TemplateAnnotation.js.map +1 -1
- package/dist/Toolbar.d.ts +7 -1
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +57 -18
- package/dist/Toolbar.js.map +1 -1
- package/dist/Tooltip.d.ts +10 -0
- package/dist/Tooltip.d.ts.map +1 -0
- package/dist/Tooltip.js +104 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/ViewSwitcher.d.ts +1 -1
- package/dist/ViewSwitcher.d.ts.map +1 -1
- package/dist/ViewSwitcher.js +10 -4
- package/dist/ViewSwitcher.js.map +1 -1
- package/dist/WysiwygEditor.d.ts +13 -2
- package/dist/WysiwygEditor.d.ts.map +1 -1
- package/dist/WysiwygEditor.js +239 -4
- package/dist/WysiwygEditor.js.map +1 -1
- package/dist/__tests__/detectMarkdown.test.d.ts +2 -0
- package/dist/__tests__/detectMarkdown.test.d.ts.map +1 -0
- package/dist/__tests__/detectMarkdown.test.js +69 -0
- package/dist/__tests__/detectMarkdown.test.js.map +1 -0
- package/dist/__tests__/fileKind.test.d.ts +2 -0
- package/dist/__tests__/fileKind.test.d.ts.map +1 -0
- package/dist/__tests__/fileKind.test.js +81 -0
- package/dist/__tests__/fileKind.test.js.map +1 -0
- package/dist/__tests__/tiptapBridge.test.js +36 -0
- package/dist/__tests__/tiptapBridge.test.js.map +1 -1
- package/dist/detectMarkdown.d.ts +20 -0
- package/dist/detectMarkdown.d.ts.map +1 -0
- package/dist/detectMarkdown.js +61 -0
- package/dist/detectMarkdown.js.map +1 -0
- package/dist/fileKind.d.ts +30 -0
- package/dist/fileKind.d.ts.map +1 -0
- package/dist/fileKind.js +123 -0
- package/dist/fileKind.js.map +1 -0
- package/dist/hooks/useFileDrop.d.ts.map +1 -1
- package/dist/hooks/useFileDrop.js +9 -7
- package/dist/hooks/useFileDrop.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mediaDragMime.d.ts +17 -0
- package/dist/mediaDragMime.d.ts.map +1 -0
- package/dist/mediaDragMime.js +22 -0
- package/dist/mediaDragMime.js.map +1 -0
- package/dist/tiptapBridge.d.ts.map +1 -1
- package/dist/tiptapBridge.js +58 -2
- package/dist/tiptapBridge.js.map +1 -1
- package/package.json +9 -7
- package/src/EditorContext.tsx +106 -3
- package/src/EditorShell.tsx +195 -15
- package/src/ImageNodeView.tsx +15 -2
- package/src/MediaBin.tsx +23 -1
- package/src/MentionExtension.tsx +258 -0
- package/src/RawEditor.tsx +193 -37
- package/src/TemplateAnnotation.ts +4 -2
- package/src/Toolbar.tsx +111 -48
- package/src/Tooltip.tsx +124 -0
- package/src/ViewSwitcher.tsx +15 -5
- package/src/WysiwygEditor.tsx +270 -5
- package/src/__tests__/detectMarkdown.test.ts +88 -0
- package/src/__tests__/fileKind.test.ts +96 -0
- package/src/__tests__/tiptapBridge.test.ts +44 -0
- package/src/detectMarkdown.ts +62 -0
- package/src/fileKind.ts +134 -0
- package/src/hooks/useFileDrop.ts +10 -6
- package/src/index.ts +11 -0
- package/src/mediaDragMime.ts +32 -0
- package/src/styles/editor.css +214 -8
- 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":"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"}
|
package/dist/RawEditor.d.ts
CHANGED
|
@@ -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
|
package/dist/RawEditor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawEditor.d.ts","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
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"}
|
package/dist/RawEditor.js
CHANGED
|
@@ -11,6 +11,7 @@ import Editor, { loader } from '@monaco-editor/react';
|
|
|
11
11
|
import * as monaco from 'monaco-editor';
|
|
12
12
|
import { useEditorContext } from './EditorContext';
|
|
13
13
|
import { getAvailableTemplates } from '@bendyline/squisq/doc';
|
|
14
|
+
import { SQUISQ_MEDIA_MIME, parseSquisqMediaPayload } from './mediaDragMime';
|
|
14
15
|
// Use locally installed monaco-editor instead of CDN.
|
|
15
16
|
//
|
|
16
17
|
// NOTE: By default this imports the full monaco-editor with all 80+ languages
|
|
@@ -26,51 +27,185 @@ loader.config({ monaco });
|
|
|
26
27
|
* Raw markdown editor using Monaco Editor.
|
|
27
28
|
* Binds to the shared EditorContext for source synchronization.
|
|
28
29
|
*/
|
|
29
|
-
export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWrap = 'on', className, }) {
|
|
30
|
-
const { markdownSource, setMarkdownSource, setMonacoEditor } = useEditorContext();
|
|
30
|
+
export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWrap = 'on', className, submitOnEnter, readOnly = false, }) {
|
|
31
|
+
const { markdownSource, setMarkdownSource, setMonacoEditor, language, mentionProvider } = useEditorContext();
|
|
31
32
|
const editorRef = useRef(null);
|
|
32
33
|
const isExternalUpdate = useRef(false);
|
|
33
34
|
const completionDisposable = useRef(null);
|
|
35
|
+
const mentionCompletionDisposable = useRef(null);
|
|
36
|
+
const dropCleanupRef = useRef(null);
|
|
37
|
+
const keyDisposable = useRef(null);
|
|
38
|
+
// Ref so the keydown handler always sees the latest callback.
|
|
39
|
+
const submitOnEnterRef = useRef(submitOnEnter);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
submitOnEnterRef.current = submitOnEnter;
|
|
42
|
+
}, [submitOnEnter]);
|
|
43
|
+
// Ref so the completion provider — registered once at mount — always
|
|
44
|
+
// sees the latest mentionProvider without needing to unregister.
|
|
45
|
+
const mentionProviderRef = useRef(mentionProvider);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
mentionProviderRef.current = mentionProvider;
|
|
48
|
+
}, [mentionProvider]);
|
|
34
49
|
const handleMount = useCallback((editor, monaco) => {
|
|
35
50
|
editorRef.current = editor;
|
|
36
51
|
setMonacoEditor(editor);
|
|
37
52
|
editor.focus();
|
|
38
53
|
// Dispose any previous completion provider (from a prior mount)
|
|
39
54
|
completionDisposable.current?.dispose();
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
range,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
completionDisposable.current = null;
|
|
56
|
+
mentionCompletionDisposable.current?.dispose();
|
|
57
|
+
mentionCompletionDisposable.current = null;
|
|
58
|
+
// Register the `{[template]}` completion provider only for markdown
|
|
59
|
+
// files — it's meaningless for TypeScript, JSON, Python, etc.
|
|
60
|
+
if (language === 'markdown') {
|
|
61
|
+
const templates = getAvailableTemplates();
|
|
62
|
+
completionDisposable.current = monaco.languages.registerCompletionItemProvider('markdown', {
|
|
63
|
+
triggerCharacters: ['['],
|
|
64
|
+
provideCompletionItems(model, position) {
|
|
65
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
66
|
+
// Only trigger inside a heading line that has {[ before the cursor
|
|
67
|
+
if (!/^#{1,6}\s/.test(lineContent))
|
|
68
|
+
return { suggestions: [] };
|
|
69
|
+
const textBeforeCursor = lineContent.substring(0, position.column - 1);
|
|
70
|
+
const bracketIdx = textBeforeCursor.lastIndexOf('{[');
|
|
71
|
+
if (bracketIdx === -1)
|
|
72
|
+
return { suggestions: [] };
|
|
73
|
+
// The range to replace: from after {[ to the cursor
|
|
74
|
+
const startCol = bracketIdx + 3; // after {[
|
|
75
|
+
const range = new monaco.Range(position.lineNumber, startCol, position.lineNumber, position.column);
|
|
76
|
+
const suggestions = templates.map((name) => ({
|
|
77
|
+
label: name,
|
|
78
|
+
kind: monaco.languages.CompletionItemKind.Value,
|
|
79
|
+
insertText: name + ']}',
|
|
80
|
+
range,
|
|
81
|
+
detail: 'Block template',
|
|
82
|
+
sortText: name,
|
|
83
|
+
}));
|
|
84
|
+
return { suggestions };
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
// `@mention` completion — queries the shared MentionProvider. Keep
|
|
88
|
+
// this in its own registration so we can dispose it independently
|
|
89
|
+
// of the template provider, and so the trigger character is just
|
|
90
|
+
// `@` (not `[`).
|
|
91
|
+
mentionCompletionDisposable.current = monaco.languages.registerCompletionItemProvider('markdown', {
|
|
92
|
+
triggerCharacters: ['@'],
|
|
93
|
+
async provideCompletionItems(model, position) {
|
|
94
|
+
const provider = mentionProviderRef.current;
|
|
95
|
+
if (!provider)
|
|
96
|
+
return { suggestions: [] };
|
|
97
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
98
|
+
const textBeforeCursor = lineContent.substring(0, position.column - 1);
|
|
99
|
+
const atIdx = textBeforeCursor.lastIndexOf('@');
|
|
100
|
+
if (atIdx === -1)
|
|
101
|
+
return { suggestions: [] };
|
|
102
|
+
// `@` must be at line start or preceded by whitespace/punct —
|
|
103
|
+
// skip e.g. email addresses like `foo@bar`.
|
|
104
|
+
if (atIdx > 0) {
|
|
105
|
+
const prevChar = textBeforeCursor[atIdx - 1];
|
|
106
|
+
if (!/[\s\p{P}]/u.test(prevChar))
|
|
107
|
+
return { suggestions: [] };
|
|
108
|
+
}
|
|
109
|
+
const query = textBeforeCursor.slice(atIdx + 1);
|
|
110
|
+
// Only fire for short queries — once the user has typed
|
|
111
|
+
// a full word, the popover gets noisy.
|
|
112
|
+
if (query.length > 40)
|
|
113
|
+
return { suggestions: [] };
|
|
114
|
+
if (/\s/.test(query))
|
|
115
|
+
return { suggestions: [] };
|
|
116
|
+
let candidates;
|
|
117
|
+
try {
|
|
118
|
+
candidates = await provider(query);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return { suggestions: [] };
|
|
122
|
+
}
|
|
123
|
+
const range = new monaco.Range(position.lineNumber, atIdx + 1, position.lineNumber, position.column);
|
|
124
|
+
return {
|
|
125
|
+
suggestions: candidates.map((c) => ({
|
|
126
|
+
label: `@${c.label}`,
|
|
127
|
+
kind: monaco.languages.CompletionItemKind.User,
|
|
128
|
+
insertText: `@[${c.label}](${c.scheme}:${c.id}) `,
|
|
129
|
+
range,
|
|
130
|
+
...(c.description ? { detail: c.description } : {}),
|
|
131
|
+
sortText: c.label,
|
|
132
|
+
})),
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Chat-composer mode: intercept Enter before Monaco inserts a newline.
|
|
138
|
+
// Cmd/Ctrl+Enter falls through so the native newline still works.
|
|
139
|
+
keyDisposable.current?.dispose();
|
|
140
|
+
keyDisposable.current = editor.onKeyDown((e) => {
|
|
141
|
+
if (e.keyCode !== monaco.KeyCode.Enter)
|
|
142
|
+
return;
|
|
143
|
+
if (!submitOnEnterRef.current)
|
|
144
|
+
return;
|
|
145
|
+
if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey)
|
|
146
|
+
return;
|
|
147
|
+
e.preventDefault();
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
submitOnEnterRef.current();
|
|
66
150
|
});
|
|
67
|
-
|
|
151
|
+
// Attach native drop listeners for in-app MediaBin drags. Monaco's own
|
|
152
|
+
// drop handling doesn't know about our custom MIME type, so we insert
|
|
153
|
+
// markdown image syntax explicitly in the capture phase.
|
|
154
|
+
dropCleanupRef.current?.();
|
|
155
|
+
const domNode = editor.getDomNode();
|
|
156
|
+
if (domNode) {
|
|
157
|
+
const onDragOver = (e) => {
|
|
158
|
+
if (e.dataTransfer?.types.includes(SQUISQ_MEDIA_MIME)) {
|
|
159
|
+
e.preventDefault();
|
|
160
|
+
e.dataTransfer.dropEffect = 'copy';
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const onDrop = (e) => {
|
|
164
|
+
const dt = e.dataTransfer;
|
|
165
|
+
if (!dt)
|
|
166
|
+
return;
|
|
167
|
+
const raw = dt.getData(SQUISQ_MEDIA_MIME);
|
|
168
|
+
if (!raw)
|
|
169
|
+
return;
|
|
170
|
+
const payload = parseSquisqMediaPayload(raw);
|
|
171
|
+
if (!payload || !payload.mimeType.startsWith('image/'))
|
|
172
|
+
return;
|
|
173
|
+
e.preventDefault();
|
|
174
|
+
e.stopPropagation();
|
|
175
|
+
const target = editor.getTargetAtClientPoint(e.clientX, e.clientY);
|
|
176
|
+
const position = target?.position ?? editor.getPosition();
|
|
177
|
+
if (!position)
|
|
178
|
+
return;
|
|
179
|
+
const markdown = ``;
|
|
180
|
+
editor.executeEdits('squisq-media-drop', [
|
|
181
|
+
{
|
|
182
|
+
range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),
|
|
183
|
+
text: markdown,
|
|
184
|
+
forceMoveMarkers: true,
|
|
185
|
+
},
|
|
186
|
+
]);
|
|
187
|
+
editor.focus();
|
|
188
|
+
};
|
|
189
|
+
domNode.addEventListener('dragover', onDragOver, true);
|
|
190
|
+
domNode.addEventListener('drop', onDrop, true);
|
|
191
|
+
dropCleanupRef.current = () => {
|
|
192
|
+
domNode.removeEventListener('dragover', onDragOver, true);
|
|
193
|
+
domNode.removeEventListener('drop', onDrop, true);
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}, [setMonacoEditor, language]);
|
|
68
197
|
// Unregister on unmount
|
|
69
198
|
useEffect(() => {
|
|
70
199
|
return () => {
|
|
71
200
|
setMonacoEditor(null);
|
|
72
201
|
completionDisposable.current?.dispose();
|
|
73
202
|
completionDisposable.current = null;
|
|
203
|
+
mentionCompletionDisposable.current?.dispose();
|
|
204
|
+
mentionCompletionDisposable.current = null;
|
|
205
|
+
dropCleanupRef.current?.();
|
|
206
|
+
dropCleanupRef.current = null;
|
|
207
|
+
keyDisposable.current?.dispose();
|
|
208
|
+
keyDisposable.current = null;
|
|
74
209
|
};
|
|
75
210
|
}, [setMonacoEditor]);
|
|
76
211
|
const handleChange = useCallback((value) => {
|
|
@@ -92,7 +227,7 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
92
227
|
}
|
|
93
228
|
}
|
|
94
229
|
}, [markdownSource]);
|
|
95
|
-
return (_jsx("div", { className: className, style: { width: '100%', height: '100%' }, "data-testid": "raw-editor", children: _jsx(Editor, { defaultLanguage:
|
|
230
|
+
return (_jsx("div", { className: className, style: { width: '100%', height: '100%' }, "data-testid": "raw-editor", children: _jsx(Editor, { defaultLanguage: language, value: markdownSource, theme: theme, onMount: handleMount, onChange: handleChange, options: {
|
|
96
231
|
fontSize,
|
|
97
232
|
wordWrap,
|
|
98
233
|
minimap: { enabled: minimap },
|
|
@@ -104,6 +239,8 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
104
239
|
bracketPairColorization: { enabled: true },
|
|
105
240
|
guides: { indentation: true },
|
|
106
241
|
padding: { top: 12, bottom: 12 },
|
|
242
|
+
readOnly,
|
|
243
|
+
domReadOnly: readOnly,
|
|
107
244
|
} }) }));
|
|
108
245
|
}
|
|
109
246
|
//# sourceMappingURL=RawEditor.js.map
|
package/dist/RawEditor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,MAAM,EAAE,EAAE,MAAM,EAA+B,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateAnnotation.d.ts","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"TemplateAnnotation.d.ts","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,sFAmD9B,CAAC"}
|
|
@@ -46,7 +46,10 @@ export const HeadingWithTemplate = Heading.extend({
|
|
|
46
46
|
const tag = `h${level}`;
|
|
47
47
|
const templateName = HTMLAttributes['data-template'];
|
|
48
48
|
if (templateName) {
|
|
49
|
-
// Render heading with a trailing badge span
|
|
49
|
+
// Render heading with a trailing badge span. The badge has no text
|
|
50
|
+
// content — its label is painted via CSS `content: attr(data-template)`
|
|
51
|
+
// so the template name never becomes part of the serialized heading
|
|
52
|
+
// text (which would leak into markdown on round-trip).
|
|
50
53
|
return [
|
|
51
54
|
tag,
|
|
52
55
|
HTMLAttributes,
|
|
@@ -58,7 +61,6 @@ export const HeadingWithTemplate = Heading.extend({
|
|
|
58
61
|
contenteditable: 'false',
|
|
59
62
|
'data-template': templateName,
|
|
60
63
|
},
|
|
61
|
-
templateName,
|
|
62
64
|
],
|
|
63
65
|
];
|
|
64
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateAnnotation.js","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,IAAI;gBAClF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,YAAY;wBAAE,OAAO,EAAE,CAAC;oBACxC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;gBACtD,CAAC;aACF;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,IAAI;gBACzF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,kBAAkB;wBAAE,OAAO,EAAE,CAAC;oBAC9C,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBACnE,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,YAAY,EAAE,CAAC;YACjB,
|
|
1
|
+
{"version":3,"file":"TemplateAnnotation.js","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,IAAI;gBAClF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,YAAY;wBAAE,OAAO,EAAE,CAAC;oBACxC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;gBACtD,CAAC;aACF;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,IAAI;gBACzF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,kBAAkB;wBAAE,OAAO,EAAE,CAAC;oBAC9C,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBACnE,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,YAAY,EAAE,CAAC;YACjB,mEAAmE;YACnE,wEAAwE;YACxE,oEAAoE;YACpE,uDAAuD;YACvD,OAAO;gBACL,GAAG;gBACH,cAAc;gBACd,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;gBAChD;oBACE,MAAM;oBACN;wBACE,KAAK,EAAE,uBAAuB;wBAC9B,eAAe,EAAE,OAAO;wBACxB,eAAe,EAAE,YAAY;qBAC9B;iBACF;aACF,CAAC;QACJ,CAAC;QAED,yCAAyC;QACzC,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;CACF,CAAC,CAAC"}
|
package/dist/Toolbar.d.ts
CHANGED
|
@@ -20,11 +20,17 @@ export interface ToolbarProps {
|
|
|
20
20
|
slotAfterActions?: ReactNode;
|
|
21
21
|
/** Content rendered at the rightmost end of the toolbar, after all other elements. */
|
|
22
22
|
slotRight?: ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Whether to include the "Play" (preview) tab in the view switcher.
|
|
25
|
+
* Defaults to true. Hosts that don't want the slideshow preview — e.g.
|
|
26
|
+
* editing free-form prompts — can pass false to suppress it.
|
|
27
|
+
*/
|
|
28
|
+
showPlayTab?: boolean;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* Formatting toolbar.
|
|
26
32
|
* - WYSIWYG: calls Tiptap chain commands (toggleBold, etc.)
|
|
27
33
|
* - Raw: appends markdown syntax to the source
|
|
28
34
|
*/
|
|
29
|
-
export declare function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAfterActions, slotRight, }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare function Toolbar({ className, showFiles, onToggleFiles, slotLeft, slotAfterActions, slotRight, showPlayTab, }: ToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
30
36
|
//# sourceMappingURL=Toolbar.d.ts.map
|
package/dist/Toolbar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/Toolbar.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,sFAAsF;IACtF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA8FD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,SAAS,EACT,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,WAAkB,GACnB,EAAE,YAAY,2CAi1Bd"}
|