@dxos/react-ui-editor 0.8.1-staging.9eaf14f → 0.8.2-main.12df754
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/lib/browser/index.mjs +499 -371
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +67 -0
- package/dist/lib/browser/testing/index.mjs.map +7 -0
- package/dist/lib/node/index.cjs +515 -379
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +101 -0
- package/dist/lib/node/testing/index.cjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +499 -371
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +69 -0
- package/dist/lib/node-esm/testing/index.mjs.map +7 -0
- package/dist/types/src/components/EditorToolbar/util.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/{viewMode.d.ts → view-mode.d.ts} +1 -1
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -0
- package/dist/types/src/defaults.d.ts +1 -0
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/command/action.d.ts +17 -0
- package/dist/types/src/extensions/command/action.d.ts.map +1 -0
- package/dist/types/src/extensions/command/command.d.ts +5 -10
- package/dist/types/src/extensions/command/command.d.ts.map +1 -1
- package/dist/types/src/extensions/command/hint.d.ts +4 -2
- package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
- package/dist/types/src/extensions/command/index.d.ts +1 -0
- package/dist/types/src/extensions/command/index.d.ts.map +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +7 -2
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/command/state.d.ts +9 -11
- package/dist/types/src/extensions/command/state.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +9 -7
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +1 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts +4 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +2 -2
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts +4 -1
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/extensions/preview/index.d.ts +2 -0
- package/dist/types/src/extensions/preview/index.d.ts.map +1 -0
- package/dist/types/src/extensions/preview/preview.d.ts +39 -0
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +2 -1
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/{InputMode.stories.d.ts → stories/InputMode.stories.d.ts} +1 -1
- package/dist/types/src/stories/InputMode.stories.d.ts.map +1 -0
- package/dist/types/src/{TextEditor.stories.d.ts → stories/TextEditorBasic.stories.d.ts} +2 -35
- package/dist/types/src/stories/TextEditorBasic.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TextEditorComments.stories.d.ts +13 -0
- package/dist/types/src/stories/TextEditorComments.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts +13 -0
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts +19 -0
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts.map +1 -0
- package/dist/types/src/stories/story-utils.d.ts +53 -0
- package/dist/types/src/stories/story-utils.d.ts.map +1 -0
- package/dist/types/src/testing/RefPopover.d.ts +21 -0
- package/dist/types/src/testing/RefPopover.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +5 -0
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/react.d.ts +6 -1
- package/dist/types/src/util/react.d.ts.map +1 -1
- package/package.json +33 -27
- package/src/components/EditorToolbar/EditorToolbar.tsx +2 -2
- package/src/components/EditorToolbar/util.ts +3 -3
- package/src/defaults.ts +5 -3
- package/src/extensions/automerge/automerge.stories.tsx +3 -11
- package/src/extensions/command/action.ts +49 -0
- package/src/extensions/command/command.ts +9 -27
- package/src/extensions/command/hint.ts +33 -30
- package/src/extensions/command/index.ts +1 -0
- package/src/extensions/command/menu.ts +11 -8
- package/src/extensions/command/state.ts +41 -61
- package/src/extensions/comments.ts +9 -9
- package/src/extensions/folding.tsx +1 -1
- package/src/extensions/index.ts +1 -0
- package/src/extensions/markdown/decorate.ts +4 -3
- package/src/extensions/markdown/formatting.ts +2 -2
- package/src/extensions/markdown/image.ts +12 -11
- package/src/extensions/markdown/link.ts +33 -24
- package/src/extensions/preview/index.ts +5 -0
- package/src/extensions/preview/preview.ts +271 -0
- package/src/hooks/useTextEditor.ts +4 -3
- package/src/{InputMode.stories.tsx → stories/InputMode.stories.tsx} +4 -4
- package/src/stories/TextEditorBasic.stories.tsx +289 -0
- package/src/stories/TextEditorComments.stories.tsx +99 -0
- package/src/stories/TextEditorPreview.stories.tsx +239 -0
- package/src/stories/TextEditorSpecial.stories.tsx +107 -0
- package/src/stories/story-utils.tsx +329 -0
- package/src/testing/RefPopover.tsx +74 -0
- package/src/testing/index.ts +5 -0
- package/src/types.ts +7 -0
- package/src/util/react.tsx +20 -2
- package/dist/types/src/InputMode.stories.d.ts.map +0 -1
- package/dist/types/src/TextEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/EditorToolbar/viewMode.d.ts.map +0 -1
- package/dist/types/src/extensions/command/preview.d.ts +0 -12
- package/dist/types/src/extensions/command/preview.d.ts.map +0 -1
- package/dist/types/src/fragments.d.ts +0 -3
- package/dist/types/src/fragments.d.ts.map +0 -1
- package/src/TextEditor.stories.tsx +0 -856
- package/src/extensions/command/preview.ts +0 -79
- package/src/fragments.ts +0 -19
- /package/src/components/EditorToolbar/{viewMode.ts → view-mode.ts} +0 -0
package/dist/lib/node/index.cjs
CHANGED
@@ -55,7 +55,10 @@ __export(node_exports, {
|
|
55
55
|
blast: () => blast,
|
56
56
|
callbackWrapper: () => callbackWrapper,
|
57
57
|
clientRectsFor: () => clientRectsFor,
|
58
|
+
closeCommand: () => closeCommand,
|
59
|
+
closeEffect: () => closeEffect,
|
58
60
|
command: () => command,
|
61
|
+
commandKeyBindings: () => commandKeyBindings,
|
59
62
|
comments: () => comments,
|
60
63
|
commentsState: () => commentsState,
|
61
64
|
convertTreeToJson: () => convertTreeToJson,
|
@@ -69,6 +72,7 @@ __export(node_exports, {
|
|
69
72
|
createElement: () => createElement,
|
70
73
|
createExternalCommentSync: () => createExternalCommentSync,
|
71
74
|
createMarkdownExtensions: () => createMarkdownExtensions,
|
75
|
+
createRenderer: () => createRenderer,
|
72
76
|
createThemeExtensions: () => createThemeExtensions,
|
73
77
|
debugDispatcher: () => debugDispatcher,
|
74
78
|
debugNodeLogger: () => debugNodeLogger,
|
@@ -82,6 +86,7 @@ __export(node_exports, {
|
|
82
86
|
editorGutter: () => editorGutter,
|
83
87
|
editorInputMode: () => editorInputMode,
|
84
88
|
editorMonospace: () => editorMonospace,
|
89
|
+
editorWidth: () => editorWidth,
|
85
90
|
editorWithToolbarLayout: () => editorWithToolbarLayout,
|
86
91
|
flattenRect: () => flattenRect,
|
87
92
|
focus: () => focus,
|
@@ -100,8 +105,11 @@ __export(node_exports, {
|
|
100
105
|
markdownTags: () => markdownTags,
|
101
106
|
markdownTagsExtensions: () => markdownTagsExtensions,
|
102
107
|
mention: () => mention,
|
108
|
+
openCommand: () => openCommand,
|
109
|
+
openEffect: () => openEffect,
|
103
110
|
overlap: () => overlap,
|
104
111
|
preventNewline: () => preventNewline,
|
112
|
+
preview: () => preview,
|
105
113
|
processEditorPayload: () => processEditorPayload,
|
106
114
|
removeBlockquote: () => removeBlockquote,
|
107
115
|
removeCodeblock: () => removeCodeblock,
|
@@ -119,7 +127,7 @@ __export(node_exports, {
|
|
119
127
|
setStyle: () => setStyle,
|
120
128
|
singleValueFacet: () => singleValueFacet,
|
121
129
|
stackItemContentEditorClassNames: () => stackItemContentEditorClassNames,
|
122
|
-
stackItemContentToolbarClassNames: () =>
|
130
|
+
stackItemContentToolbarClassNames: () => stackItemContentToolbarClassNames,
|
123
131
|
table: () => table,
|
124
132
|
tags: () => import_highlight.tags,
|
125
133
|
textRange: () => textRange,
|
@@ -154,12 +162,11 @@ var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
154
162
|
var import_react2 = require("react");
|
155
163
|
var import_live_object = require("@dxos/live-object");
|
156
164
|
var import_react_ui_menu2 = require("@dxos/react-ui-menu");
|
157
|
-
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
158
165
|
var import_view2 = require("@codemirror/view");
|
166
|
+
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
159
167
|
var import_react_ui_theme3 = require("@dxos/react-ui-theme");
|
160
|
-
var import_react_ui_theme4 = require("@dxos/react-ui-theme");
|
161
168
|
var import_lodash = __toESM(require("lodash.get"));
|
162
|
-
var
|
169
|
+
var import_react_ui_theme4 = require("@dxos/react-ui-theme");
|
163
170
|
var import_state2 = require("@codemirror/state");
|
164
171
|
var import_view3 = require("@codemirror/view");
|
165
172
|
var import_util = require("@dxos/util");
|
@@ -168,7 +175,7 @@ var import_log = require("@dxos/log");
|
|
168
175
|
var import_react3 = __toESM(require("react"));
|
169
176
|
var import_client = require("react-dom/client");
|
170
177
|
var import_react_ui2 = require("@dxos/react-ui");
|
171
|
-
var
|
178
|
+
var import_react_ui_theme5 = require("@dxos/react-ui-theme");
|
172
179
|
var import_autocomplete = require("@codemirror/autocomplete");
|
173
180
|
var import_lang_markdown = require("@codemirror/lang-markdown");
|
174
181
|
var import_view4 = require("@codemirror/view");
|
@@ -192,95 +199,97 @@ var import_log3 = require("@dxos/log");
|
|
192
199
|
var import_view7 = require("@codemirror/view");
|
193
200
|
var import_lodash2 = __toESM(require("lodash.defaultsdeep"));
|
194
201
|
var import_invariant2 = require("@dxos/invariant");
|
195
|
-
var import_view8 = require("@codemirror/view");
|
196
202
|
var import_state8 = require("@codemirror/state");
|
197
|
-
var import_view9 = require("@codemirror/view");
|
198
203
|
var import_state9 = require("@codemirror/state");
|
204
|
+
var import_view8 = require("@codemirror/view");
|
205
|
+
var import_view9 = require("@codemirror/view");
|
206
|
+
var import_state10 = require("@codemirror/state");
|
199
207
|
var import_view10 = require("@codemirror/view");
|
200
208
|
var import_view11 = require("@codemirror/view");
|
201
|
-
var import_language = require("@codemirror/language");
|
202
|
-
var import_state10 = require("@codemirror/state");
|
203
|
-
var import_view12 = require("@codemirror/view");
|
204
209
|
var import_commands = require("@codemirror/commands");
|
205
210
|
var import_state11 = require("@codemirror/state");
|
206
|
-
var
|
211
|
+
var import_view12 = require("@codemirror/view");
|
207
212
|
var import_lodash3 = __toESM(require("lodash.sortby"));
|
208
213
|
var import_react4 = require("react");
|
209
214
|
var import_async3 = require("@dxos/async");
|
210
215
|
var import_log4 = require("@dxos/log");
|
211
216
|
var import_util2 = require("@dxos/util");
|
212
217
|
var import_state12 = require("@codemirror/state");
|
213
|
-
var
|
218
|
+
var import_view13 = require("@codemirror/view");
|
214
219
|
var import_async4 = require("@dxos/async");
|
215
220
|
var import_invariant3 = require("@dxos/invariant");
|
216
221
|
var import_util3 = require("@dxos/util");
|
217
|
-
var
|
222
|
+
var import_language = require("@codemirror/language");
|
218
223
|
var import_state13 = require("@codemirror/state");
|
219
|
-
var
|
224
|
+
var import_view14 = require("@codemirror/view");
|
220
225
|
var import_autocomplete2 = require("@codemirror/autocomplete");
|
221
226
|
var import_commands2 = require("@codemirror/commands");
|
222
|
-
var
|
227
|
+
var import_language2 = require("@codemirror/language");
|
223
228
|
var import_search = require("@codemirror/search");
|
224
229
|
var import_state14 = require("@codemirror/state");
|
225
230
|
var import_theme_one_dark = require("@codemirror/theme-one-dark");
|
226
|
-
var
|
231
|
+
var import_view15 = require("@codemirror/view");
|
227
232
|
var import_lodash4 = __toESM(require("lodash.defaultsdeep"));
|
228
233
|
var import_lodash5 = __toESM(require("lodash.merge"));
|
229
234
|
var import_display_name = require("@dxos/display-name");
|
230
235
|
var import_log5 = require("@dxos/log");
|
231
236
|
var import_util4 = require("@dxos/util");
|
232
237
|
var import_state15 = require("@codemirror/state");
|
238
|
+
var import_view16 = require("@codemirror/view");
|
239
|
+
var import_language3 = require("@codemirror/language");
|
233
240
|
var import_view17 = require("@codemirror/view");
|
234
|
-
var import_language4 = require("@codemirror/language");
|
235
|
-
var import_view18 = require("@codemirror/view");
|
236
241
|
var import_react5 = __toESM(require("react"));
|
237
242
|
var import_react_ui3 = require("@dxos/react-ui");
|
238
|
-
var
|
243
|
+
var import_view18 = require("@codemirror/view");
|
239
244
|
var import_autocomplete3 = require("@codemirror/autocomplete");
|
240
|
-
var
|
245
|
+
var import_language4 = require("@codemirror/language");
|
241
246
|
var import_state16 = require("@codemirror/state");
|
242
|
-
var
|
247
|
+
var import_view19 = require("@codemirror/view");
|
243
248
|
var import_react6 = require("react");
|
244
249
|
var import_autocomplete4 = require("@codemirror/autocomplete");
|
245
250
|
var import_commands3 = require("@codemirror/commands");
|
246
251
|
var import_lang_markdown2 = require("@codemirror/lang-markdown");
|
247
|
-
var
|
252
|
+
var import_language5 = require("@codemirror/language");
|
248
253
|
var import_language_data = require("@codemirror/language-data");
|
249
254
|
var import_lint = require("@codemirror/lint");
|
250
|
-
var
|
255
|
+
var import_view20 = require("@codemirror/view");
|
251
256
|
var import_lang_markdown3 = require("@codemirror/lang-markdown");
|
252
|
-
var
|
257
|
+
var import_language6 = require("@codemirror/language");
|
253
258
|
var import_highlight2 = require("@lezer/highlight");
|
254
259
|
var import_markdown = require("@lezer/markdown");
|
255
|
-
var
|
260
|
+
var import_language7 = require("@codemirror/language");
|
256
261
|
var import_state17 = require("@codemirror/state");
|
257
|
-
var
|
262
|
+
var import_language8 = require("@codemirror/language");
|
258
263
|
var import_state18 = require("@codemirror/state");
|
259
|
-
var
|
264
|
+
var import_view21 = require("@codemirror/view");
|
260
265
|
var import_invariant4 = require("@dxos/invariant");
|
261
|
-
var
|
262
|
-
var
|
266
|
+
var import_react_ui_theme6 = require("@dxos/react-ui-theme");
|
267
|
+
var import_language9 = require("@codemirror/language");
|
263
268
|
var import_state19 = require("@codemirror/state");
|
264
|
-
var
|
265
|
-
var
|
269
|
+
var import_view22 = require("@codemirror/view");
|
270
|
+
var import_language10 = require("@codemirror/language");
|
266
271
|
var import_state20 = require("@codemirror/state");
|
272
|
+
var import_view23 = require("@codemirror/view");
|
267
273
|
var import_view24 = require("@codemirror/view");
|
274
|
+
var import_language11 = require("@codemirror/language");
|
275
|
+
var import_state21 = require("@codemirror/state");
|
268
276
|
var import_view25 = require("@codemirror/view");
|
269
277
|
var import_language12 = require("@codemirror/language");
|
270
|
-
var import_state21 = require("@codemirror/state");
|
271
278
|
var import_view26 = require("@codemirror/view");
|
272
|
-
var
|
273
|
-
var import_view27 = require("@codemirror/view");
|
274
|
-
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
279
|
+
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
275
280
|
var import_autocomplete5 = require("@codemirror/autocomplete");
|
276
281
|
var import_log6 = require("@dxos/log");
|
277
|
-
var
|
282
|
+
var import_view27 = require("@codemirror/view");
|
278
283
|
var import_codemirror_vim = require("@replit/codemirror-vim");
|
279
284
|
var import_codemirror_vscode_keymap = require("@replit/codemirror-vscode-keymap");
|
280
285
|
var import_echo_schema = require("@dxos/echo-schema");
|
286
|
+
var import_dx_ref_tag = require("@dxos/lit-ui/dx-ref-tag.pcss");
|
287
|
+
var import_language13 = require("@codemirror/language");
|
288
|
+
var import_state22 = require("@codemirror/state");
|
289
|
+
var import_view28 = require("@codemirror/view");
|
281
290
|
var import_view29 = require("@codemirror/view");
|
282
291
|
var import_react7 = require("react");
|
283
|
-
var
|
292
|
+
var import_state23 = require("@codemirror/state");
|
284
293
|
var import_view30 = require("@codemirror/view");
|
285
294
|
var import_react_tabster = require("@fluentui/react-tabster");
|
286
295
|
var import_react8 = require("react");
|
@@ -320,7 +329,7 @@ var translations_default = [
|
|
320
329
|
}
|
321
330
|
];
|
322
331
|
var useEditorToolbarState = (initialState = {}) => {
|
323
|
-
return (0, import_react2.useMemo)(() => (0, import_live_object.
|
332
|
+
return (0, import_react2.useMemo)(() => (0, import_live_object.live)(initialState), []);
|
324
333
|
};
|
325
334
|
var createEditorAction = (payload, icon, label = [
|
326
335
|
`${payload.type} label`,
|
@@ -568,88 +577,6 @@ var createViewMode = (state) => {
|
|
568
577
|
]
|
569
578
|
};
|
570
579
|
};
|
571
|
-
var stackItemContentToolbarClassNames = (role) => (0, import_react_ui_theme2.mx)("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
572
|
-
var createToolbar = ({ state, customActions, ...features }) => {
|
573
|
-
const nodes = [];
|
574
|
-
const edges = [];
|
575
|
-
if (features.headings ?? true) {
|
576
|
-
const headings2 = createHeadings(state);
|
577
|
-
nodes.push(...headings2.nodes);
|
578
|
-
edges.push(...headings2.edges);
|
579
|
-
}
|
580
|
-
if (features.formatting ?? true) {
|
581
|
-
const formatting = createFormatting(state);
|
582
|
-
nodes.push(...formatting.nodes);
|
583
|
-
edges.push(...formatting.edges);
|
584
|
-
}
|
585
|
-
if (features.lists ?? true) {
|
586
|
-
const lists = createLists(state);
|
587
|
-
nodes.push(...lists.nodes);
|
588
|
-
edges.push(...lists.edges);
|
589
|
-
}
|
590
|
-
if (features.blocks ?? true) {
|
591
|
-
const blocks = createBlocks(state);
|
592
|
-
nodes.push(...blocks.nodes);
|
593
|
-
edges.push(...blocks.edges);
|
594
|
-
}
|
595
|
-
if (customActions) {
|
596
|
-
const custom = customActions();
|
597
|
-
nodes.push(...custom.nodes);
|
598
|
-
edges.push(...custom.edges);
|
599
|
-
}
|
600
|
-
const editorToolbarGap = (0, import_react_ui_menu.createGapSeparator)();
|
601
|
-
nodes.push(...editorToolbarGap.nodes);
|
602
|
-
edges.push(...editorToolbarGap.edges);
|
603
|
-
if (features.comment ?? true) {
|
604
|
-
const comment = createComment(state);
|
605
|
-
nodes.push(...comment.nodes);
|
606
|
-
edges.push(...comment.edges);
|
607
|
-
}
|
608
|
-
if (features.search ?? true) {
|
609
|
-
nodes.push(editorToolbarSearch);
|
610
|
-
edges.push({
|
611
|
-
source: "root",
|
612
|
-
target: editorToolbarSearch.id
|
613
|
-
});
|
614
|
-
}
|
615
|
-
if (features.viewMode ?? true) {
|
616
|
-
const viewMode = createViewMode(state);
|
617
|
-
nodes.push(...viewMode.nodes);
|
618
|
-
edges.push(...viewMode.edges);
|
619
|
-
}
|
620
|
-
return {
|
621
|
-
nodes,
|
622
|
-
edges
|
623
|
-
};
|
624
|
-
};
|
625
|
-
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
626
|
-
const menuCreator = (0, import_react.useCallback)(() => createToolbar(props), [
|
627
|
-
props
|
628
|
-
]);
|
629
|
-
const { resolveGroupItems } = (0, import_react_ui_menu.useMenuActions)(menuCreator);
|
630
|
-
return {
|
631
|
-
resolveGroupItems,
|
632
|
-
onAction
|
633
|
-
};
|
634
|
-
};
|
635
|
-
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
636
|
-
const menuProps = useEditorToolbarActionGraph(props);
|
637
|
-
return /* @__PURE__ */ import_react.default.createElement("div", {
|
638
|
-
role: "none",
|
639
|
-
className: stackItemContentToolbarClassNames(role)
|
640
|
-
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ElevationProvider, {
|
641
|
-
elevation: role === "section" ? "positioned" : "base"
|
642
|
-
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.MenuProvider, {
|
643
|
-
...menuProps,
|
644
|
-
attendableId
|
645
|
-
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, {
|
646
|
-
classNames: [
|
647
|
-
import_react_ui_theme.textBlockWidth,
|
648
|
-
"!bg-transparent",
|
649
|
-
classNames
|
650
|
-
]
|
651
|
-
}))));
|
652
|
-
};
|
653
580
|
var headings = {
|
654
581
|
1: "text-4xl",
|
655
582
|
2: "text-3xl",
|
@@ -663,11 +590,11 @@ var theme = {
|
|
663
590
|
codeMark: "font-mono text-primary-500",
|
664
591
|
mark: "opacity-50",
|
665
592
|
heading: (level) => {
|
666
|
-
return (0,
|
593
|
+
return (0, import_react_ui_theme3.mx)(headings[level], "dark:text-primary-400");
|
667
594
|
}
|
668
595
|
};
|
669
596
|
var getToken = (path, defaultValue) => {
|
670
|
-
const value = (0, import_lodash.default)(
|
597
|
+
const value = (0, import_lodash.default)(import_react_ui_theme4.tokens, path, defaultValue);
|
671
598
|
return value?.toString() ?? "";
|
672
599
|
};
|
673
600
|
var fontBody = getToken("fontFamily.body");
|
@@ -874,8 +801,9 @@ var defaultTheme = {
|
|
874
801
|
}
|
875
802
|
};
|
876
803
|
var margin = "!mt-[1rem]";
|
877
|
-
var
|
878
|
-
var
|
804
|
+
var editorWidth = "!mli-auto is-full max-is-[min(50rem,100%-4rem)]";
|
805
|
+
var editorContent = (0, import_react_ui_theme2.mx)(margin, editorWidth);
|
806
|
+
var editorFullWidth = (0, import_react_ui_theme2.mx)(margin);
|
879
807
|
var editorGutter = import_view2.EditorView.theme({
|
880
808
|
// Match margin from content.
|
881
809
|
// Gutter = 2rem + 1rem margin.
|
@@ -890,8 +818,89 @@ var editorMonospace = import_view2.EditorView.theme({
|
|
890
818
|
}
|
891
819
|
});
|
892
820
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
893
|
-
var stackItemContentEditorClassNames = (role) => (0,
|
894
|
-
var
|
821
|
+
var stackItemContentEditorClassNames = (role) => (0, import_react_ui_theme2.mx)("attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2", role === "section" ? "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24" : "min-bs-0");
|
822
|
+
var stackItemContentToolbarClassNames = (role) => (0, import_react_ui_theme2.mx)("attention-surface is-full border-be !border-separator relative z-[1]", role === "section" && "sticky block-start-0 -mbe-px min-is-0");
|
823
|
+
var createToolbar = ({ state, customActions, ...features }) => {
|
824
|
+
const nodes = [];
|
825
|
+
const edges = [];
|
826
|
+
if (features.headings ?? true) {
|
827
|
+
const headings2 = createHeadings(state);
|
828
|
+
nodes.push(...headings2.nodes);
|
829
|
+
edges.push(...headings2.edges);
|
830
|
+
}
|
831
|
+
if (features.formatting ?? true) {
|
832
|
+
const formatting = createFormatting(state);
|
833
|
+
nodes.push(...formatting.nodes);
|
834
|
+
edges.push(...formatting.edges);
|
835
|
+
}
|
836
|
+
if (features.lists ?? true) {
|
837
|
+
const lists = createLists(state);
|
838
|
+
nodes.push(...lists.nodes);
|
839
|
+
edges.push(...lists.edges);
|
840
|
+
}
|
841
|
+
if (features.blocks ?? true) {
|
842
|
+
const blocks = createBlocks(state);
|
843
|
+
nodes.push(...blocks.nodes);
|
844
|
+
edges.push(...blocks.edges);
|
845
|
+
}
|
846
|
+
if (customActions) {
|
847
|
+
const custom = customActions();
|
848
|
+
nodes.push(...custom.nodes);
|
849
|
+
edges.push(...custom.edges);
|
850
|
+
}
|
851
|
+
const editorToolbarGap = (0, import_react_ui_menu.createGapSeparator)();
|
852
|
+
nodes.push(...editorToolbarGap.nodes);
|
853
|
+
edges.push(...editorToolbarGap.edges);
|
854
|
+
if (features.comment ?? true) {
|
855
|
+
const comment = createComment(state);
|
856
|
+
nodes.push(...comment.nodes);
|
857
|
+
edges.push(...comment.edges);
|
858
|
+
}
|
859
|
+
if (features.search ?? true) {
|
860
|
+
nodes.push(editorToolbarSearch);
|
861
|
+
edges.push({
|
862
|
+
source: "root",
|
863
|
+
target: editorToolbarSearch.id
|
864
|
+
});
|
865
|
+
}
|
866
|
+
if (features.viewMode ?? true) {
|
867
|
+
const viewMode = createViewMode(state);
|
868
|
+
nodes.push(...viewMode.nodes);
|
869
|
+
edges.push(...viewMode.edges);
|
870
|
+
}
|
871
|
+
return {
|
872
|
+
nodes,
|
873
|
+
edges
|
874
|
+
};
|
875
|
+
};
|
876
|
+
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
877
|
+
const menuCreator = (0, import_react.useCallback)(() => createToolbar(props), [
|
878
|
+
props
|
879
|
+
]);
|
880
|
+
const { resolveGroupItems } = (0, import_react_ui_menu.useMenuActions)(menuCreator);
|
881
|
+
return {
|
882
|
+
resolveGroupItems,
|
883
|
+
onAction
|
884
|
+
};
|
885
|
+
};
|
886
|
+
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
887
|
+
const menuProps = useEditorToolbarActionGraph(props);
|
888
|
+
return /* @__PURE__ */ import_react.default.createElement("div", {
|
889
|
+
role: "none",
|
890
|
+
className: stackItemContentToolbarClassNames(role)
|
891
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ElevationProvider, {
|
892
|
+
elevation: role === "section" ? "positioned" : "base"
|
893
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.MenuProvider, {
|
894
|
+
...menuProps,
|
895
|
+
attendableId
|
896
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, {
|
897
|
+
classNames: [
|
898
|
+
import_react_ui_theme.textBlockWidth,
|
899
|
+
"!bg-transparent",
|
900
|
+
classNames
|
901
|
+
]
|
902
|
+
}))));
|
903
|
+
};
|
895
904
|
var singleValueFacet = (defaultValue) => import_state3.Facet.define({
|
896
905
|
// Called immediately.
|
897
906
|
combine: (providers) => {
|
@@ -1027,10 +1036,15 @@ var createElement = (tag, options, children) => {
|
|
1027
1036
|
};
|
1028
1037
|
var renderRoot = (root, node) => {
|
1029
1038
|
(0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ThemeProvider, {
|
1030
|
-
tx:
|
1039
|
+
tx: import_react_ui_theme5.defaultTx
|
1031
1040
|
}, node));
|
1032
1041
|
return root;
|
1033
1042
|
};
|
1043
|
+
var createRenderer = (Component) => (el, props) => {
|
1044
|
+
renderRoot(el, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ThemeProvider, {
|
1045
|
+
tx: import_react_ui_theme5.defaultTx
|
1046
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Provider, null, /* @__PURE__ */ import_react3.default.createElement(Component, props))));
|
1047
|
+
};
|
1034
1048
|
var annotationMark = import_view3.Decoration.mark({
|
1035
1049
|
class: "cm-annotation"
|
1036
1050
|
});
|
@@ -2032,8 +2046,8 @@ var commandState = import_state9.StateField.define({
|
|
2032
2046
|
if (effect.is(closeEffect)) {
|
2033
2047
|
return {};
|
2034
2048
|
}
|
2035
|
-
|
2036
|
-
|
2049
|
+
const { renderDialog } = tr.state.facet(commandConfig);
|
2050
|
+
if (effect.is(openEffect) && renderDialog) {
|
2037
2051
|
const { pos, fullWidth } = effect.value;
|
2038
2052
|
const tooltip = {
|
2039
2053
|
pos,
|
@@ -2041,34 +2055,39 @@ var commandState = import_state9.StateField.define({
|
|
2041
2055
|
arrow: false,
|
2042
2056
|
strictSide: true,
|
2043
2057
|
create: (view) => {
|
2044
|
-
const
|
2058
|
+
const root = document.createElement("div");
|
2045
2059
|
const tooltipView = {
|
2046
|
-
dom,
|
2060
|
+
dom: root,
|
2047
2061
|
mount: (view2) => {
|
2048
2062
|
if (fullWidth) {
|
2049
|
-
const parent =
|
2063
|
+
const parent = root.parentElement;
|
2050
2064
|
const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
|
2051
2065
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
2052
|
-
|
2066
|
+
root.style.width = `${widthWithoutPadding}px`;
|
2053
2067
|
}
|
2054
|
-
|
2055
|
-
|
2056
|
-
effects: closeEffect.of(null)
|
2057
|
-
});
|
2058
|
-
if (action?.insert?.length) {
|
2059
|
-
const text = action.insert + "\n";
|
2068
|
+
renderDialog(root, {
|
2069
|
+
onAction: (action) => {
|
2060
2070
|
view2.dispatch({
|
2061
|
-
|
2062
|
-
from: pos,
|
2063
|
-
insert: text
|
2064
|
-
},
|
2065
|
-
selection: {
|
2066
|
-
anchor: pos + text.length
|
2067
|
-
}
|
2071
|
+
effects: closeEffect.of(null)
|
2068
2072
|
});
|
2073
|
+
switch (action?.type) {
|
2074
|
+
case "insert": {
|
2075
|
+
const text = action.text + "\n";
|
2076
|
+
view2.dispatch({
|
2077
|
+
changes: {
|
2078
|
+
from: pos,
|
2079
|
+
insert: text
|
2080
|
+
},
|
2081
|
+
selection: {
|
2082
|
+
anchor: pos + text.length
|
2083
|
+
}
|
2084
|
+
});
|
2085
|
+
break;
|
2086
|
+
}
|
2087
|
+
}
|
2088
|
+
requestAnimationFrame(() => view2.focus());
|
2069
2089
|
}
|
2070
|
-
|
2071
|
-
});
|
2090
|
+
}, view2);
|
2072
2091
|
}
|
2073
2092
|
};
|
2074
2093
|
return tooltipView;
|
@@ -2082,11 +2101,11 @@ var commandState = import_state9.StateField.define({
|
|
2082
2101
|
return state;
|
2083
2102
|
},
|
2084
2103
|
provide: (field) => [
|
2085
|
-
|
2104
|
+
import_view8.showTooltip.from(field, (value) => value.tooltip ?? null)
|
2086
2105
|
]
|
2087
2106
|
});
|
2088
|
-
var openEffect =
|
2089
|
-
var closeEffect =
|
2107
|
+
var openEffect = import_state8.StateEffect.define();
|
2108
|
+
var closeEffect = import_state8.StateEffect.define();
|
2090
2109
|
var openCommand = (view) => {
|
2091
2110
|
if (view.state.field(commandState, false)) {
|
2092
2111
|
const selection = view.state.selection.main;
|
@@ -2122,7 +2141,33 @@ var commandKeyBindings = [
|
|
2122
2141
|
run: closeCommand
|
2123
2142
|
}
|
2124
2143
|
];
|
2125
|
-
var
|
2144
|
+
var hintViewPlugin = ({ onHint }) => import_view10.ViewPlugin.fromClass(class {
|
2145
|
+
constructor() {
|
2146
|
+
this.deco = import_view10.Decoration.none;
|
2147
|
+
}
|
2148
|
+
update(update2) {
|
2149
|
+
const builder = new import_state10.RangeSetBuilder();
|
2150
|
+
const cState = update2.view.state.field(commandState, false);
|
2151
|
+
if (!cState?.tooltip) {
|
2152
|
+
const selection = update2.view.state.selection.main;
|
2153
|
+
const line = update2.view.state.doc.lineAt(selection.from);
|
2154
|
+
if (selection.from === selection.to && line.from === line.to) {
|
2155
|
+
const hint = onHint();
|
2156
|
+
if (hint) {
|
2157
|
+
builder.add(selection.from, selection.to, import_view10.Decoration.widget({
|
2158
|
+
widget: new CommandHint(hint)
|
2159
|
+
}));
|
2160
|
+
}
|
2161
|
+
}
|
2162
|
+
}
|
2163
|
+
this.deco = builder.finish();
|
2164
|
+
}
|
2165
|
+
}, {
|
2166
|
+
provide: (plugin) => [
|
2167
|
+
import_view10.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view10.Decoration.none)
|
2168
|
+
]
|
2169
|
+
});
|
2170
|
+
var CommandHint = class extends import_view10.WidgetType {
|
2126
2171
|
constructor(content) {
|
2127
2172
|
super();
|
2128
2173
|
this.content = content;
|
@@ -2161,32 +2206,6 @@ var CommandHint = class extends import_view9.WidgetType {
|
|
2161
2206
|
return false;
|
2162
2207
|
}
|
2163
2208
|
};
|
2164
|
-
var hintViewPlugin = ({ onHint }) => import_view9.ViewPlugin.fromClass(class {
|
2165
|
-
constructor() {
|
2166
|
-
this.deco = import_view9.Decoration.none;
|
2167
|
-
}
|
2168
|
-
update(update2) {
|
2169
|
-
const builder = new import_state8.RangeSetBuilder();
|
2170
|
-
const cState = update2.view.state.field(commandState, false);
|
2171
|
-
if (!cState?.tooltip) {
|
2172
|
-
const selection = update2.view.state.selection.main;
|
2173
|
-
const line = update2.view.state.doc.lineAt(selection.from);
|
2174
|
-
if (selection.from === selection.to && line.from === line.to) {
|
2175
|
-
const hint = onHint();
|
2176
|
-
if (hint) {
|
2177
|
-
builder.add(selection.from, selection.to, import_view9.Decoration.widget({
|
2178
|
-
widget: new CommandHint(hint)
|
2179
|
-
}));
|
2180
|
-
}
|
2181
|
-
}
|
2182
|
-
}
|
2183
|
-
this.deco = builder.finish();
|
2184
|
-
}
|
2185
|
-
}, {
|
2186
|
-
provide: (plugin) => [
|
2187
|
-
import_view9.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view9.Decoration.none)
|
2188
|
-
]
|
2189
|
-
});
|
2190
2209
|
var floatingMenu = (options) => import_view11.ViewPlugin.fromClass(class {
|
2191
2210
|
constructor(view) {
|
2192
2211
|
this.rafId = null;
|
@@ -2199,11 +2218,11 @@ var floatingMenu = (options) => import_view11.ViewPlugin.fromClass(class {
|
|
2199
2218
|
this.button.style.position = "absolute";
|
2200
2219
|
this.button.style.zIndex = "10";
|
2201
2220
|
this.button.style.display = "none";
|
2202
|
-
options.
|
2203
|
-
openCommand(view)
|
2204
|
-
});
|
2221
|
+
options.renderMenu(this.button, {
|
2222
|
+
onAction: () => openCommand(view)
|
2223
|
+
}, view);
|
2205
2224
|
container.appendChild(this.button);
|
2206
|
-
container.addEventListener("scroll", this.scheduleUpdate);
|
2225
|
+
container.addEventListener("scroll", this.scheduleUpdate.bind(this));
|
2207
2226
|
this.scheduleUpdate();
|
2208
2227
|
}
|
2209
2228
|
update(update2) {
|
@@ -2219,7 +2238,7 @@ var floatingMenu = (options) => import_view11.ViewPlugin.fromClass(class {
|
|
2219
2238
|
if (this.rafId != null) {
|
2220
2239
|
cancelAnimationFrame(this.rafId);
|
2221
2240
|
}
|
2222
|
-
this.rafId = requestAnimationFrame(
|
2241
|
+
this.rafId = requestAnimationFrame(this.updateButtonPosition.bind(this));
|
2223
2242
|
}
|
2224
2243
|
updateButtonPosition() {
|
2225
2244
|
const pos = this.view.state.selection.main.head;
|
@@ -2248,77 +2267,23 @@ var floatingMenu = (options) => import_view11.ViewPlugin.fromClass(class {
|
|
2248
2267
|
}
|
2249
2268
|
}
|
2250
2269
|
});
|
2251
|
-
var
|
2252
|
-
return [
|
2253
|
-
import_state10.StateField.define({
|
2254
|
-
create: (state) => buildDecorations(state, options),
|
2255
|
-
update: (_, tr) => buildDecorations(tr.state, options),
|
2256
|
-
// TODO(burdon): Make atomic.
|
2257
|
-
provide: (field) => import_view12.EditorView.decorations.from(field)
|
2258
|
-
})
|
2259
|
-
];
|
2260
|
-
};
|
2261
|
-
var buildDecorations = (state, options) => {
|
2262
|
-
const builder = new import_state10.RangeSetBuilder();
|
2263
|
-
(0, import_language.syntaxTree)(state).iterate({
|
2264
|
-
enter: (node) => {
|
2265
|
-
if (node.name === "Link") {
|
2266
|
-
const urlNode = node.node.getChild("URL");
|
2267
|
-
if (urlNode) {
|
2268
|
-
const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
|
2269
|
-
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
2270
|
-
builder.add(node.from, node.to, import_view12.Decoration.replace({
|
2271
|
-
block: true,
|
2272
|
-
widget: new PreviewWidget(options.onRenderPreview, url, text)
|
2273
|
-
}));
|
2274
|
-
}
|
2275
|
-
}
|
2276
|
-
}
|
2277
|
-
});
|
2278
|
-
return builder.finish();
|
2279
|
-
};
|
2280
|
-
var PreviewWidget = class extends import_view12.WidgetType {
|
2281
|
-
constructor(_onRenderPreview, _url, _text) {
|
2282
|
-
super();
|
2283
|
-
this._onRenderPreview = _onRenderPreview;
|
2284
|
-
this._url = _url;
|
2285
|
-
this._text = _text;
|
2286
|
-
}
|
2287
|
-
eq(other) {
|
2288
|
-
return this._url === other._url;
|
2289
|
-
}
|
2290
|
-
toDOM(view) {
|
2291
|
-
const root = document.createElement("div");
|
2292
|
-
root.classList.add("cm-preview");
|
2293
|
-
this._onRenderPreview(root, {
|
2294
|
-
url: this._url,
|
2295
|
-
text: this._text
|
2296
|
-
});
|
2297
|
-
return root;
|
2298
|
-
}
|
2299
|
-
};
|
2300
|
-
var command = (options) => {
|
2270
|
+
var command = (options = {}) => {
|
2301
2271
|
return [
|
2272
|
+
import_view9.keymap.of(commandKeyBindings),
|
2302
2273
|
commandConfig.of(options),
|
2303
2274
|
commandState,
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
hintViewPlugin(
|
2308
|
-
|
2275
|
+
options.renderMenu ? floatingMenu({
|
2276
|
+
renderMenu: options.renderMenu
|
2277
|
+
}) : [],
|
2278
|
+
options.onHint ? hintViewPlugin({
|
2279
|
+
onHint: options.onHint
|
2280
|
+
}) : [],
|
2281
|
+
import_view9.EditorView.focusChangeEffect.of((_, focusing) => {
|
2309
2282
|
return focusing ? closeEffect.of(null) : null;
|
2310
2283
|
}),
|
2311
|
-
|
2284
|
+
import_view9.EditorView.theme({
|
2312
2285
|
".cm-tooltip": {
|
2313
2286
|
background: "transparent"
|
2314
|
-
},
|
2315
|
-
".cm-preview": {
|
2316
|
-
marginLeft: "-1rem",
|
2317
|
-
marginRight: "-1rem",
|
2318
|
-
padding: "1rem",
|
2319
|
-
borderRadius: "1rem",
|
2320
|
-
background: "var(--dx-modalSurface)",
|
2321
|
-
border: "1px solid var(--dx-separator)"
|
2322
2287
|
}
|
2323
2288
|
})
|
2324
2289
|
];
|
@@ -2330,7 +2295,7 @@ var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
|
2330
2295
|
return {
|
2331
2296
|
selection,
|
2332
2297
|
scrollIntoView: !scrollTo,
|
2333
|
-
effects: scrollTo ?
|
2298
|
+
effects: scrollTo ? import_view13.EditorView.scrollIntoView(scrollTo, {
|
2334
2299
|
yMargin: 96
|
2335
2300
|
}) : void 0,
|
2336
2301
|
annotations: import_state12.Transaction.userEvent.of(stateRestoreAnnotation)
|
@@ -2372,7 +2337,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2372
2337
|
// setStateDebounced(id, {});
|
2373
2338
|
// },
|
2374
2339
|
// }),
|
2375
|
-
|
2340
|
+
import_view13.EditorView.updateListener.of(({ view, transactions }) => {
|
2376
2341
|
const id = view.state.facet(documentId);
|
2377
2342
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
2378
2343
|
return;
|
@@ -2395,7 +2360,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2395
2360
|
}
|
2396
2361
|
}
|
2397
2362
|
}),
|
2398
|
-
getState &&
|
2363
|
+
getState && import_view13.keymap.of([
|
2399
2364
|
{
|
2400
2365
|
key: "ctrl-r",
|
2401
2366
|
run: (view) => {
|
@@ -2451,7 +2416,7 @@ var commentsState = import_state11.StateField.define({
|
|
2451
2416
|
return value;
|
2452
2417
|
}
|
2453
2418
|
});
|
2454
|
-
var styles3 =
|
2419
|
+
var styles3 = import_view12.EditorView.theme({
|
2455
2420
|
".cm-comment, .cm-comment-current": {
|
2456
2421
|
margin: "0 -3px",
|
2457
2422
|
padding: "3px",
|
@@ -2464,14 +2429,14 @@ var styles3 = import_view13.EditorView.theme({
|
|
2464
2429
|
textDecoration: "underline"
|
2465
2430
|
}
|
2466
2431
|
});
|
2467
|
-
var createCommentMark = (id, isCurrent) =>
|
2432
|
+
var createCommentMark = (id, isCurrent) => import_view12.Decoration.mark({
|
2468
2433
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2469
2434
|
attributes: {
|
2470
2435
|
"data-testid": "cm-comment",
|
2471
2436
|
"data-comment-id": id
|
2472
2437
|
}
|
2473
2438
|
});
|
2474
|
-
var commentsDecorations =
|
2439
|
+
var commentsDecorations = import_view12.EditorView.decorations.compute([
|
2475
2440
|
commentsState
|
2476
2441
|
], (state) => {
|
2477
2442
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2491,10 +2456,10 @@ var commentsDecorations = import_view13.EditorView.decorations.compute([
|
|
2491
2456
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2492
2457
|
return mark.range(range.from, range.to);
|
2493
2458
|
}).filter(import_util2.isNonNullable);
|
2494
|
-
return
|
2459
|
+
return import_view12.Decoration.set(decorations);
|
2495
2460
|
});
|
2496
2461
|
var commentClickedEffect = import_state11.StateEffect.define();
|
2497
|
-
var handleCommentClick =
|
2462
|
+
var handleCommentClick = import_view12.EditorView.domEventHandlers({
|
2498
2463
|
click: (event, view) => {
|
2499
2464
|
let target = event.target;
|
2500
2465
|
const editorRoot = view.dom;
|
@@ -2533,7 +2498,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2533
2498
|
}
|
2534
2499
|
};
|
2535
2500
|
return [
|
2536
|
-
|
2501
|
+
import_view12.EditorView.domEventHandlers({
|
2537
2502
|
cut: handleTrack,
|
2538
2503
|
copy: handleTrack
|
2539
2504
|
}),
|
@@ -2555,7 +2520,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2555
2520
|
return effects;
|
2556
2521
|
}),
|
2557
2522
|
// Handle paste or the undo of comment deletion.
|
2558
|
-
|
2523
|
+
import_view12.EditorView.updateListener.of((update2) => {
|
2559
2524
|
const restore = [];
|
2560
2525
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2561
2526
|
const tr = update2.transactions[i];
|
@@ -2656,7 +2621,7 @@ var comments = (options = {}) => {
|
|
2656
2621
|
//
|
2657
2622
|
// Keymap.
|
2658
2623
|
//
|
2659
|
-
options.onCreate &&
|
2624
|
+
options.onCreate && import_view12.keymap.of([
|
2660
2625
|
{
|
2661
2626
|
key: shortcut,
|
2662
2627
|
run: callbackWrapper(createComment2)
|
@@ -2666,7 +2631,7 @@ var comments = (options = {}) => {
|
|
2666
2631
|
// Hover tooltip (for key shortcut hints, etc.)
|
2667
2632
|
// TODO(burdon): Factor out to generic hints extension for current selection/line.
|
2668
2633
|
//
|
2669
|
-
options.
|
2634
|
+
options.renderTooltip && (0, import_view12.hoverTooltip)((view, pos) => {
|
2670
2635
|
const selection = view.state.selection.main;
|
2671
2636
|
if (selection && pos >= selection.from && pos <= selection.to) {
|
2672
2637
|
return {
|
@@ -2675,7 +2640,9 @@ var comments = (options = {}) => {
|
|
2675
2640
|
above: true,
|
2676
2641
|
create: () => {
|
2677
2642
|
const el = document.createElement("div");
|
2678
|
-
options.
|
2643
|
+
options.renderTooltip(el, {
|
2644
|
+
shortcut
|
2645
|
+
}, view);
|
2679
2646
|
return {
|
2680
2647
|
dom: el,
|
2681
2648
|
offset: {
|
@@ -2695,7 +2662,7 @@ var comments = (options = {}) => {
|
|
2695
2662
|
//
|
2696
2663
|
// Track deleted ranges and update ranges for decorations.
|
2697
2664
|
//
|
2698
|
-
|
2665
|
+
import_view12.EditorView.updateListener.of(({ view, state, changes }) => {
|
2699
2666
|
let mod = false;
|
2700
2667
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2701
2668
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2727,7 +2694,7 @@ var comments = (options = {}) => {
|
|
2727
2694
|
//
|
2728
2695
|
// Track selection/proximity.
|
2729
2696
|
//
|
2730
|
-
|
2697
|
+
import_view12.EditorView.updateListener.of(({ view, state }) => {
|
2731
2698
|
let min = Infinity;
|
2732
2699
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2733
2700
|
const { head } = state.selection.main;
|
@@ -2781,7 +2748,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2781
2748
|
anchor: range.from
|
2782
2749
|
} : void 0,
|
2783
2750
|
effects: [
|
2784
|
-
needsScroll ?
|
2751
|
+
needsScroll ? import_view12.EditorView.scrollIntoView(range.from, center ? {
|
2785
2752
|
y: "center"
|
2786
2753
|
} : void 0) : [],
|
2787
2754
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2827,13 +2794,13 @@ var ExternalCommentSync = class {
|
|
2827
2794
|
this.unsubscribe = subscribe(updateComments);
|
2828
2795
|
}
|
2829
2796
|
};
|
2830
|
-
var createExternalCommentSync = (id, subscribe, getComments) =>
|
2797
|
+
var createExternalCommentSync = (id, subscribe, getComments) => import_view12.ViewPlugin.fromClass(class {
|
2831
2798
|
constructor(view) {
|
2832
2799
|
return new ExternalCommentSync(view, id, subscribe, getComments);
|
2833
2800
|
}
|
2834
2801
|
});
|
2835
2802
|
var useCommentState = (state) => {
|
2836
|
-
return (0, import_react4.useMemo)(() =>
|
2803
|
+
return (0, import_react4.useMemo)(() => import_view12.EditorView.updateListener.of((update2) => {
|
2837
2804
|
if (update2.docChanged || update2.selectionSet) {
|
2838
2805
|
state.comment = selectionOverlapsComment(update2.state);
|
2839
2806
|
state.selection = hasActiveSelection(update2.state);
|
@@ -2857,7 +2824,7 @@ var useComments = (view, id, comments2) => {
|
|
2857
2824
|
});
|
2858
2825
|
};
|
2859
2826
|
var useCommentClickListener = (onCommentClick) => {
|
2860
|
-
return (0, import_react4.useMemo)(() =>
|
2827
|
+
return (0, import_react4.useMemo)(() => import_view12.EditorView.updateListener.of((update2) => {
|
2861
2828
|
update2.transactions.forEach((transaction) => {
|
2862
2829
|
transaction.effects.forEach((effect) => {
|
2863
2830
|
if (effect.is(commentClickedEffect)) {
|
@@ -2870,7 +2837,7 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2870
2837
|
]);
|
2871
2838
|
};
|
2872
2839
|
var debugNodeLogger = (log8 = console.log) => {
|
2873
|
-
const logTokens = (state) => (0,
|
2840
|
+
const logTokens = (state) => (0, import_language.syntaxTree)(state).iterate({
|
2874
2841
|
enter: (node) => log8(node.type)
|
2875
2842
|
});
|
2876
2843
|
return import_state13.StateField.define({
|
@@ -2878,7 +2845,7 @@ var debugNodeLogger = (log8 = console.log) => {
|
|
2878
2845
|
update: (_, tr) => logTokens(tr.state)
|
2879
2846
|
});
|
2880
2847
|
};
|
2881
|
-
var styles4 =
|
2848
|
+
var styles4 = import_view14.EditorView.theme({
|
2882
2849
|
".cm-dropCursor": {
|
2883
2850
|
borderLeft: "2px solid var(--dx-accentText)",
|
2884
2851
|
color: "var(--dx-accentText)",
|
@@ -2891,8 +2858,8 @@ var styles4 = import_view15.EditorView.theme({
|
|
2891
2858
|
var dropFile = (options = {}) => {
|
2892
2859
|
return [
|
2893
2860
|
styles4,
|
2894
|
-
(0,
|
2895
|
-
|
2861
|
+
(0, import_view14.dropCursor)(),
|
2862
|
+
import_view14.EditorView.domEventHandlers({
|
2896
2863
|
drop: (event, view) => {
|
2897
2864
|
event.preventDefault();
|
2898
2865
|
const files = event.dataTransfer?.files;
|
@@ -2925,7 +2892,7 @@ var focusField = import_state15.StateField.define({
|
|
2925
2892
|
});
|
2926
2893
|
var focus = [
|
2927
2894
|
focusField,
|
2928
|
-
|
2895
|
+
import_view16.EditorView.domEventHandlers({
|
2929
2896
|
focus: (event, view) => {
|
2930
2897
|
setTimeout(() => view.dispatch({
|
2931
2898
|
effects: focusEffect.of(true)
|
@@ -2961,7 +2928,7 @@ var createBasicExtensions = (_props) => {
|
|
2961
2928
|
const props = (0, import_lodash4.default)({}, _props, defaultBasicOptions);
|
2962
2929
|
return [
|
2963
2930
|
// NOTE: Doesn't catch errors in keymap functions.
|
2964
|
-
|
2931
|
+
import_view15.EditorView.exceptionSink.of((err) => {
|
2965
2932
|
import_log5.log.catch(err, void 0, {
|
2966
2933
|
F: __dxlog_file8,
|
2967
2934
|
L: 96,
|
@@ -2970,24 +2937,24 @@ var createBasicExtensions = (_props) => {
|
|
2970
2937
|
});
|
2971
2938
|
}),
|
2972
2939
|
props.allowMultipleSelections && import_state14.EditorState.allowMultipleSelections.of(true),
|
2973
|
-
props.bracketMatching && (0,
|
2940
|
+
props.bracketMatching && (0, import_language2.bracketMatching)(),
|
2974
2941
|
props.closeBrackets && (0, import_autocomplete2.closeBrackets)(),
|
2975
|
-
props.dropCursor && (0,
|
2976
|
-
props.drawSelection && (0,
|
2942
|
+
props.dropCursor && (0, import_view15.dropCursor)(),
|
2943
|
+
props.drawSelection && (0, import_view15.drawSelection)({
|
2977
2944
|
cursorBlinkRate: 1200
|
2978
2945
|
}),
|
2979
|
-
props.editable !== void 0 &&
|
2946
|
+
props.editable !== void 0 && import_view15.EditorView.editable.of(props.editable),
|
2980
2947
|
props.focus && focus,
|
2981
|
-
props.highlightActiveLine && (0,
|
2948
|
+
props.highlightActiveLine && (0, import_view15.highlightActiveLine)(),
|
2982
2949
|
props.history && (0, import_commands2.history)(),
|
2983
|
-
props.lineNumbers && (0,
|
2984
|
-
props.lineWrapping &&
|
2985
|
-
props.placeholder && (0,
|
2950
|
+
props.lineNumbers && (0, import_view15.lineNumbers)(),
|
2951
|
+
props.lineWrapping && import_view15.EditorView.lineWrapping,
|
2952
|
+
props.placeholder && (0, import_view15.placeholder)(props.placeholder),
|
2986
2953
|
props.readOnly !== void 0 && import_state14.EditorState.readOnly.of(props.readOnly),
|
2987
|
-
props.scrollPastEnd && (0,
|
2954
|
+
props.scrollPastEnd && (0, import_view15.scrollPastEnd)(),
|
2988
2955
|
props.tabSize && import_state14.EditorState.tabSize.of(props.tabSize),
|
2989
2956
|
// https://codemirror.net/docs/ref/#view.KeyBinding
|
2990
|
-
|
2957
|
+
import_view15.keymap.of([
|
2991
2958
|
...(props.keymap && keymaps[props.keymap]) ?? [],
|
2992
2959
|
// NOTE: Tabs are also configured by markdown extension.
|
2993
2960
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
@@ -3018,14 +2985,14 @@ var defaultThemeSlots = {
|
|
3018
2985
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
3019
2986
|
const slots = (0, import_lodash4.default)({}, _slots, defaultThemeSlots);
|
3020
2987
|
return [
|
3021
|
-
|
3022
|
-
|
2988
|
+
import_view15.EditorView.darkTheme.of(themeMode === "dark"),
|
2989
|
+
import_view15.EditorView.baseTheme(styles5 ? (0, import_lodash5.default)({}, defaultTheme, styles5) : defaultTheme),
|
3023
2990
|
// https://github.com/codemirror/theme-one-dark
|
3024
|
-
_syntaxHighlighting && (themeMode === "dark" ? (0,
|
3025
|
-
slots.editor?.className &&
|
2991
|
+
_syntaxHighlighting && (themeMode === "dark" ? (0, import_language2.syntaxHighlighting)(import_theme_one_dark.oneDarkHighlightStyle) : (0, import_language2.syntaxHighlighting)(import_language2.defaultHighlightStyle)),
|
2992
|
+
slots.editor?.className && import_view15.EditorView.editorAttributes.of({
|
3026
2993
|
class: slots.editor.className
|
3027
2994
|
}),
|
3028
|
-
slots.content?.className &&
|
2995
|
+
slots.content?.className && import_view15.EditorView.contentAttributes.of({
|
3029
2996
|
class: slots.content.className
|
3030
2997
|
})
|
3031
2998
|
].filter(import_util4.isNotFalsy);
|
@@ -3052,18 +3019,18 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
3052
3019
|
return extensions;
|
3053
3020
|
};
|
3054
3021
|
var folding = (_props = {}) => [
|
3055
|
-
(0,
|
3022
|
+
(0, import_language3.codeFolding)({
|
3056
3023
|
placeholderDOM: () => {
|
3057
3024
|
return document.createElement("span");
|
3058
3025
|
}
|
3059
3026
|
}),
|
3060
|
-
(0,
|
3027
|
+
(0, import_language3.foldGutter)({
|
3061
3028
|
markerDOM: (open) => {
|
3062
3029
|
const el = createElement("div", {
|
3063
3030
|
className: "flex h-full items-center"
|
3064
3031
|
});
|
3065
3032
|
return renderRoot(el, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Icon, {
|
3066
|
-
icon: "ph--caret-right--
|
3033
|
+
icon: "ph--caret-right--bold",
|
3067
3034
|
size: 3,
|
3068
3035
|
classNames: [
|
3069
3036
|
"mx-3 cursor-pointer",
|
@@ -3072,7 +3039,7 @@ var folding = (_props = {}) => [
|
|
3072
3039
|
}));
|
3073
3040
|
}
|
3074
3041
|
}),
|
3075
|
-
|
3042
|
+
import_view17.EditorView.theme({
|
3076
3043
|
".cm-foldGutter": {
|
3077
3044
|
opacity: 0.3,
|
3078
3045
|
transition: "opacity 0.3s",
|
@@ -3085,11 +3052,11 @@ var folding = (_props = {}) => [
|
|
3085
3052
|
];
|
3086
3053
|
var listener = ({ onFocus, onChange }) => {
|
3087
3054
|
const extensions = [];
|
3088
|
-
onFocus && extensions.push(
|
3055
|
+
onFocus && extensions.push(import_view18.EditorView.focusChangeEffect.of((_, focusing) => {
|
3089
3056
|
onFocus(focusing);
|
3090
3057
|
return null;
|
3091
3058
|
}));
|
3092
|
-
onChange && extensions.push(
|
3059
|
+
onChange && extensions.push(import_view18.EditorView.updateListener.of((update2) => {
|
3093
3060
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
3094
3061
|
}));
|
3095
3062
|
return extensions;
|
@@ -3115,7 +3082,7 @@ var setHeading = (level) => {
|
|
3115
3082
|
let prevBlock = -1;
|
3116
3083
|
for (const range of ranges) {
|
3117
3084
|
let sawBlock = false;
|
3118
|
-
(0,
|
3085
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3119
3086
|
from: range.from,
|
3120
3087
|
to: range.to,
|
3121
3088
|
enter: (node) => {
|
@@ -3224,7 +3191,7 @@ var setStyle = (type, enable) => {
|
|
3224
3191
|
let startCovered = false;
|
3225
3192
|
let endCovered = false;
|
3226
3193
|
let { from, to } = range;
|
3227
|
-
(0,
|
3194
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3228
3195
|
from,
|
3229
3196
|
to,
|
3230
3197
|
enter: (node) => {
|
@@ -3427,7 +3394,7 @@ var insertTable = (view) => {
|
|
3427
3394
|
snippets.table(view, null, from, from);
|
3428
3395
|
};
|
3429
3396
|
var removeLinkInner = (from, to, changes, state) => {
|
3430
|
-
(0,
|
3397
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3431
3398
|
from,
|
3432
3399
|
to,
|
3433
3400
|
enter: (node) => {
|
@@ -3472,7 +3439,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3472
3439
|
let { from, to } = range;
|
3473
3440
|
const cutStyles = [];
|
3474
3441
|
let okay = null;
|
3475
|
-
(0,
|
3442
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3476
3443
|
from,
|
3477
3444
|
to,
|
3478
3445
|
enter: (node) => {
|
@@ -3567,7 +3534,7 @@ var addList = (type) => {
|
|
3567
3534
|
let parentColumn = null;
|
3568
3535
|
const blocks = [];
|
3569
3536
|
for (const { from, to } of state.selection.ranges) {
|
3570
|
-
(0,
|
3537
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3571
3538
|
from,
|
3572
3539
|
to,
|
3573
3540
|
enter: (node) => {
|
@@ -3702,7 +3669,7 @@ var removeList = (type) => {
|
|
3702
3669
|
const stack = [];
|
3703
3670
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3704
3671
|
for (const { from, to } of state.selection.ranges) {
|
3705
|
-
(0,
|
3672
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3706
3673
|
from,
|
3707
3674
|
to,
|
3708
3675
|
enter: (node) => {
|
@@ -3789,7 +3756,7 @@ var setBlockquote = (enable) => {
|
|
3789
3756
|
let lastBlock = -1;
|
3790
3757
|
for (const { from, to } of state.selection.ranges) {
|
3791
3758
|
const sawBlock = false;
|
3792
|
-
(0,
|
3759
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3793
3760
|
from,
|
3794
3761
|
to,
|
3795
3762
|
enter: (node) => {
|
@@ -3879,7 +3846,7 @@ var addCodeblock = (target) => {
|
|
3879
3846
|
for (const { from, to } of selection.ranges) {
|
3880
3847
|
let blockFrom = from;
|
3881
3848
|
let blockTo = to;
|
3882
|
-
(0,
|
3849
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3883
3850
|
from,
|
3884
3851
|
to,
|
3885
3852
|
enter: (node) => {
|
@@ -3930,7 +3897,7 @@ var removeCodeblock = ({ state, dispatch }) => {
|
|
3930
3897
|
let lastBlock = -1;
|
3931
3898
|
const changes = [];
|
3932
3899
|
for (const { from, to } of state.selection.ranges) {
|
3933
|
-
(0,
|
3900
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3934
3901
|
from,
|
3935
3902
|
to,
|
3936
3903
|
enter: (node) => {
|
@@ -3980,7 +3947,7 @@ var toggleCodeblock = (target) => {
|
|
3980
3947
|
};
|
3981
3948
|
var formattingKeymap = (_options = {}) => {
|
3982
3949
|
return [
|
3983
|
-
|
3950
|
+
import_view19.keymap.of([
|
3984
3951
|
{
|
3985
3952
|
key: "meta-b",
|
3986
3953
|
run: toggleStrong
|
@@ -4092,7 +4059,7 @@ var getFormatting = (state) => {
|
|
4092
4059
|
}
|
4093
4060
|
}
|
4094
4061
|
}
|
4095
|
-
(0,
|
4062
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
4096
4063
|
from: range.from,
|
4097
4064
|
to: range.to,
|
4098
4065
|
enter: (node) => {
|
@@ -4181,7 +4148,7 @@ var getFormatting = (state) => {
|
|
4181
4148
|
};
|
4182
4149
|
};
|
4183
4150
|
var useFormattingState = (state) => {
|
4184
|
-
return (0, import_react6.useMemo)(() =>
|
4151
|
+
return (0, import_react6.useMemo)(() => import_view19.EditorView.updateListener.of((update2) => {
|
4185
4152
|
if (update2.docChanged || update2.selectionSet) {
|
4186
4153
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4187
4154
|
state[key] = active;
|
@@ -4268,7 +4235,7 @@ var markdownTagsExtensions = [
|
|
4268
4235
|
}
|
4269
4236
|
];
|
4270
4237
|
var markdownHighlightStyle = (_options = {}) => {
|
4271
|
-
return
|
4238
|
+
return import_language6.HighlightStyle.define([
|
4272
4239
|
{
|
4273
4240
|
tag: [
|
4274
4241
|
import_highlight2.tags.keyword,
|
@@ -4432,8 +4399,8 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4432
4399
|
]
|
4433
4400
|
}),
|
4434
4401
|
// Custom styles.
|
4435
|
-
(0,
|
4436
|
-
|
4402
|
+
(0, import_language5.syntaxHighlighting)(markdownHighlightStyle()),
|
4403
|
+
import_view20.keymap.of([
|
4437
4404
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
4438
4405
|
import_commands3.indentWithTab,
|
4439
4406
|
// https://codemirror.net/docs/ref/#commands.defaultKeymap
|
@@ -4464,12 +4431,12 @@ var convertTreeToJson = (state) => {
|
|
4464
4431
|
}
|
4465
4432
|
return node;
|
4466
4433
|
};
|
4467
|
-
return treeToJson((0,
|
4434
|
+
return treeToJson((0, import_language7.syntaxTree)(state).cursor());
|
4468
4435
|
};
|
4469
4436
|
var adjustChanges = () => {
|
4470
|
-
return
|
4437
|
+
return import_view22.ViewPlugin.fromClass(class {
|
4471
4438
|
update(update2) {
|
4472
|
-
const tree = (0,
|
4439
|
+
const tree = (0, import_language9.syntaxTree)(update2.state);
|
4473
4440
|
const adjustments = [];
|
4474
4441
|
for (const tr of update2.transactions) {
|
4475
4442
|
const event = tr.annotation(import_state19.Transaction.userEvent);
|
@@ -4609,7 +4576,7 @@ var image = (_options = {}) => {
|
|
4609
4576
|
return [
|
4610
4577
|
import_state20.StateField.define({
|
4611
4578
|
create: (state) => {
|
4612
|
-
return
|
4579
|
+
return import_view23.Decoration.set(buildDecorations(0, state.doc.length, state));
|
4613
4580
|
},
|
4614
4581
|
update: (value, tr) => {
|
4615
4582
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4629,25 +4596,17 @@ var image = (_options = {}) => {
|
|
4629
4596
|
filterFrom: from,
|
4630
4597
|
filterTo: to,
|
4631
4598
|
filter: () => false,
|
4632
|
-
add:
|
4599
|
+
add: buildDecorations(from, to, tr.state)
|
4633
4600
|
});
|
4634
4601
|
},
|
4635
|
-
provide: (field) =>
|
4602
|
+
provide: (field) => import_view23.EditorView.decorations.from(field)
|
4636
4603
|
})
|
4637
4604
|
];
|
4638
4605
|
};
|
4639
|
-
var
|
4640
|
-
var preloadImage = (url) => {
|
4641
|
-
if (!preloaded.has(url)) {
|
4642
|
-
const img = document.createElement("img");
|
4643
|
-
img.src = url;
|
4644
|
-
preloaded.add(url);
|
4645
|
-
}
|
4646
|
-
};
|
4647
|
-
var buildDecorations2 = (from, to, state) => {
|
4606
|
+
var buildDecorations = (from, to, state) => {
|
4648
4607
|
const decorations = [];
|
4649
4608
|
const cursor = state.selection.main.head;
|
4650
|
-
(0,
|
4609
|
+
(0, import_language10.syntaxTree)(state).iterate({
|
4651
4610
|
enter: (node) => {
|
4652
4611
|
if (node.name === "Image") {
|
4653
4612
|
const urlNode = node.node.getChild("URL");
|
@@ -4658,7 +4617,7 @@ var buildDecorations2 = (from, to, state) => {
|
|
4658
4617
|
return;
|
4659
4618
|
}
|
4660
4619
|
preloadImage(url);
|
4661
|
-
decorations.push(
|
4620
|
+
decorations.push(import_view23.Decoration.replace({
|
4662
4621
|
block: true,
|
4663
4622
|
widget: new ImageWidget(url)
|
4664
4623
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4670,7 +4629,15 @@ var buildDecorations2 = (from, to, state) => {
|
|
4670
4629
|
});
|
4671
4630
|
return decorations;
|
4672
4631
|
};
|
4673
|
-
var
|
4632
|
+
var preloaded = /* @__PURE__ */ new Set();
|
4633
|
+
var preloadImage = (url) => {
|
4634
|
+
if (!preloaded.has(url)) {
|
4635
|
+
const img = document.createElement("img");
|
4636
|
+
img.src = url;
|
4637
|
+
preloaded.add(url);
|
4638
|
+
}
|
4639
|
+
};
|
4640
|
+
var ImageWidget = class extends import_view23.WidgetType {
|
4674
4641
|
constructor(_url) {
|
4675
4642
|
super();
|
4676
4643
|
this._url = _url;
|
@@ -4692,7 +4659,7 @@ var ImageWidget = class extends import_view24.WidgetType {
|
|
4692
4659
|
};
|
4693
4660
|
var bulletListIndentationWidth = 24;
|
4694
4661
|
var orderedListIndentationWidth = 36;
|
4695
|
-
var formattingStyles =
|
4662
|
+
var formattingStyles = import_view24.EditorView.theme({
|
4696
4663
|
/**
|
4697
4664
|
* Horizontal rule.
|
4698
4665
|
*/
|
@@ -4813,7 +4780,7 @@ var table = (options = {}) => {
|
|
4813
4780
|
return import_state21.StateField.define({
|
4814
4781
|
create: (state) => update(state, options),
|
4815
4782
|
update: (_, tr) => update(tr.state, options),
|
4816
|
-
provide: (field) =>
|
4783
|
+
provide: (field) => import_view25.EditorView.decorations.from(field)
|
4817
4784
|
});
|
4818
4785
|
};
|
4819
4786
|
var update = (state, _options) => {
|
@@ -4825,7 +4792,7 @@ var update = (state, _options) => {
|
|
4825
4792
|
const table2 = getTable();
|
4826
4793
|
return table2.rows?.[table2.rows.length - 1];
|
4827
4794
|
};
|
4828
|
-
(0,
|
4795
|
+
(0, import_language11.syntaxTree)(state).iterate({
|
4829
4796
|
enter: (node) => {
|
4830
4797
|
switch (node.name) {
|
4831
4798
|
case "Table": {
|
@@ -4858,19 +4825,19 @@ var update = (state, _options) => {
|
|
4858
4825
|
tables.forEach((table2) => {
|
4859
4826
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4860
4827
|
if (replace) {
|
4861
|
-
builder.add(table2.from, table2.to,
|
4828
|
+
builder.add(table2.from, table2.to, import_view25.Decoration.replace({
|
4862
4829
|
block: true,
|
4863
4830
|
widget: new TableWidget(table2)
|
4864
4831
|
}));
|
4865
4832
|
} else {
|
4866
|
-
builder.add(table2.from, table2.to,
|
4833
|
+
builder.add(table2.from, table2.to, import_view25.Decoration.mark({
|
4867
4834
|
class: "cm-table"
|
4868
4835
|
}));
|
4869
4836
|
}
|
4870
4837
|
});
|
4871
4838
|
return builder.finish();
|
4872
4839
|
};
|
4873
|
-
var TableWidget = class extends
|
4840
|
+
var TableWidget = class extends import_view25.WidgetType {
|
4874
4841
|
constructor(_table) {
|
4875
4842
|
super();
|
4876
4843
|
this._table = _table;
|
@@ -4910,14 +4877,14 @@ var Unicode = {
|
|
4910
4877
|
bulletSmall: "\u2219",
|
4911
4878
|
bulletSquare: "\u2B1D"
|
4912
4879
|
};
|
4913
|
-
var HorizontalRuleWidget = class extends
|
4880
|
+
var HorizontalRuleWidget = class extends import_view21.WidgetType {
|
4914
4881
|
toDOM() {
|
4915
4882
|
const el = document.createElement("span");
|
4916
4883
|
el.className = "cm-hr";
|
4917
4884
|
return el;
|
4918
4885
|
}
|
4919
4886
|
};
|
4920
|
-
var LinkButton = class extends
|
4887
|
+
var LinkButton = class extends import_view21.WidgetType {
|
4921
4888
|
constructor(url, render) {
|
4922
4889
|
super();
|
4923
4890
|
this.url = url;
|
@@ -4929,11 +4896,13 @@ var LinkButton = class extends import_view22.WidgetType {
|
|
4929
4896
|
// TODO(burdon): Create icon and link directly without react?
|
4930
4897
|
toDOM(view) {
|
4931
4898
|
const el = document.createElement("span");
|
4932
|
-
this.render(el,
|
4899
|
+
this.render(el, {
|
4900
|
+
url: this.url
|
4901
|
+
}, view);
|
4933
4902
|
return el;
|
4934
4903
|
}
|
4935
4904
|
};
|
4936
|
-
var CheckboxWidget = class extends
|
4905
|
+
var CheckboxWidget = class extends import_view21.WidgetType {
|
4937
4906
|
constructor(_checked) {
|
4938
4907
|
super();
|
4939
4908
|
this._checked = _checked;
|
@@ -4978,7 +4947,7 @@ var CheckboxWidget = class extends import_view22.WidgetType {
|
|
4978
4947
|
return false;
|
4979
4948
|
}
|
4980
4949
|
};
|
4981
|
-
var TextWidget = class extends
|
4950
|
+
var TextWidget = class extends import_view21.WidgetType {
|
4982
4951
|
constructor(text, className) {
|
4983
4952
|
super();
|
4984
4953
|
this.text = text;
|
@@ -4993,29 +4962,29 @@ var TextWidget = class extends import_view22.WidgetType {
|
|
4993
4962
|
return el;
|
4994
4963
|
}
|
4995
4964
|
};
|
4996
|
-
var hide =
|
4997
|
-
var blockQuote =
|
4998
|
-
class: (0,
|
4965
|
+
var hide = import_view21.Decoration.replace({});
|
4966
|
+
var blockQuote = import_view21.Decoration.line({
|
4967
|
+
class: (0, import_react_ui_theme6.mx)("cm-blockquote")
|
4999
4968
|
});
|
5000
|
-
var fencedCodeLine =
|
5001
|
-
class: (0,
|
4969
|
+
var fencedCodeLine = import_view21.Decoration.line({
|
4970
|
+
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line")
|
5002
4971
|
});
|
5003
|
-
var fencedCodeLineFirst =
|
5004
|
-
class: (0,
|
4972
|
+
var fencedCodeLineFirst = import_view21.Decoration.line({
|
4973
|
+
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line", "cm-codeblock-first")
|
5005
4974
|
});
|
5006
|
-
var fencedCodeLineLast =
|
5007
|
-
class: (0,
|
4975
|
+
var fencedCodeLineLast = import_view21.Decoration.line({
|
4976
|
+
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line", "cm-codeblock-last")
|
5008
4977
|
});
|
5009
4978
|
var commentBlockLine = fencedCodeLine;
|
5010
4979
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
5011
4980
|
var commentBlockLineLast = fencedCodeLineLast;
|
5012
|
-
var horizontalRule =
|
4981
|
+
var horizontalRule = import_view21.Decoration.replace({
|
5013
4982
|
widget: new HorizontalRuleWidget()
|
5014
4983
|
});
|
5015
|
-
var checkedTask =
|
4984
|
+
var checkedTask = import_view21.Decoration.replace({
|
5016
4985
|
widget: new CheckboxWidget(true)
|
5017
4986
|
});
|
5018
|
-
var uncheckedTask =
|
4987
|
+
var uncheckedTask = import_view21.Decoration.replace({
|
5019
4988
|
widget: new CheckboxWidget(false)
|
5020
4989
|
});
|
5021
4990
|
var editingRange = (state, range, focus2) => {
|
@@ -5030,7 +4999,7 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
5030
4999
|
"SubscriptMark",
|
5031
5000
|
"SuperscriptMark"
|
5032
5001
|
]);
|
5033
|
-
var
|
5002
|
+
var buildDecorations2 = (view, options, focus2) => {
|
5034
5003
|
const deco = new import_state18.RangeSetBuilder();
|
5035
5004
|
const atomicDeco = new import_state18.RangeSetBuilder();
|
5036
5005
|
const { state } = view;
|
@@ -5038,7 +5007,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5038
5007
|
const getHeaderLevels = (node, level) => {
|
5039
5008
|
(0, import_invariant4.invariant)(level > 0, void 0, {
|
5040
5009
|
F: __dxlog_file9,
|
5041
|
-
L:
|
5010
|
+
L: 179,
|
5042
5011
|
S: void 0,
|
5043
5012
|
A: [
|
5044
5013
|
"level > 0",
|
@@ -5077,7 +5046,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5077
5046
|
const getCurrentListLevel = () => {
|
5078
5047
|
(0, import_invariant4.invariant)(listLevels.length, void 0, {
|
5079
5048
|
F: __dxlog_file9,
|
5080
|
-
L:
|
5049
|
+
L: 201,
|
5081
5050
|
S: void 0,
|
5082
5051
|
A: [
|
5083
5052
|
"listLevels.length",
|
@@ -5119,7 +5088,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5119
5088
|
} else {
|
5120
5089
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
5121
5090
|
if (num.length) {
|
5122
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5091
|
+
atomicDeco.add(mark.from, mark.from + len, import_view21.Decoration.replace({
|
5123
5092
|
widget: new TextWidget(num, theme.heading(level))
|
5124
5093
|
}));
|
5125
5094
|
}
|
@@ -5144,7 +5113,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5144
5113
|
if (node.from === line.to - 1) {
|
5145
5114
|
return false;
|
5146
5115
|
}
|
5147
|
-
deco.add(line.from, line.from,
|
5116
|
+
deco.add(line.from, line.from, import_view21.Decoration.line({
|
5148
5117
|
class: "cm-list-item",
|
5149
5118
|
attributes: {
|
5150
5119
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -5161,7 +5130,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5161
5130
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
5162
5131
|
const line = state.doc.lineAt(node.from);
|
5163
5132
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
5164
|
-
atomicDeco.add(line.from, to,
|
5133
|
+
atomicDeco.add(line.from, to, import_view21.Decoration.replace({
|
5165
5134
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
5166
5135
|
}));
|
5167
5136
|
break;
|
@@ -5248,7 +5217,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5248
5217
|
if (!editing) {
|
5249
5218
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5250
5219
|
}
|
5251
|
-
deco.add(marks[0].to, marks[1].from,
|
5220
|
+
deco.add(marks[0].to, marks[1].from, import_view21.Decoration.mark({
|
5252
5221
|
tagName: "a",
|
5253
5222
|
attributes: {
|
5254
5223
|
class: "cm-link",
|
@@ -5258,7 +5227,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5258
5227
|
}
|
5259
5228
|
}));
|
5260
5229
|
if (!editing) {
|
5261
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5230
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? import_view21.Decoration.replace({
|
5262
5231
|
widget: new LinkButton(url, options.renderLinkButton)
|
5263
5232
|
}) : hide);
|
5264
5233
|
}
|
@@ -5292,7 +5261,7 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5292
5261
|
}
|
5293
5262
|
}
|
5294
5263
|
};
|
5295
|
-
const tree = (0,
|
5264
|
+
const tree = (0, import_language8.syntaxTree)(state);
|
5296
5265
|
if (options.numberedHeadings?.from === void 0) {
|
5297
5266
|
for (const { from, to } of view.visibleRanges) {
|
5298
5267
|
tree.iterate({
|
@@ -5316,13 +5285,13 @@ var buildDecorations3 = (view, options, focus2) => {
|
|
5316
5285
|
var forceUpdate = import_state18.StateEffect.define();
|
5317
5286
|
var decorateMarkdown = (options = {}) => {
|
5318
5287
|
return [
|
5319
|
-
|
5288
|
+
import_view21.ViewPlugin.fromClass(class {
|
5320
5289
|
constructor(view) {
|
5321
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5290
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
|
5322
5291
|
}
|
5323
5292
|
update(update2) {
|
5324
5293
|
if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
|
5325
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5294
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(update2.view, options, update2.view.hasFocus));
|
5326
5295
|
this.clearUpdate();
|
5327
5296
|
} else if (update2.selectionSet) {
|
5328
5297
|
this.scheduleUpdate(update2.view);
|
@@ -5348,9 +5317,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5348
5317
|
}
|
5349
5318
|
}, {
|
5350
5319
|
provide: (plugin) => [
|
5351
|
-
|
5352
|
-
|
5353
|
-
|
5320
|
+
import_view21.EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view21.Decoration.none),
|
5321
|
+
import_view21.EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view21.Decoration.none),
|
5322
|
+
import_view21.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view21.Decoration.none)
|
5354
5323
|
]
|
5355
5324
|
}),
|
5356
5325
|
image(),
|
@@ -5359,9 +5328,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5359
5328
|
formattingStyles
|
5360
5329
|
];
|
5361
5330
|
};
|
5362
|
-
var linkTooltip = (
|
5363
|
-
return (0,
|
5364
|
-
const syntax = (0,
|
5331
|
+
var linkTooltip = (renderTooltip) => {
|
5332
|
+
return (0, import_view26.hoverTooltip)((view, pos, side) => {
|
5333
|
+
const syntax = (0, import_language12.syntaxTree)(view.state).resolveInner(pos, side);
|
5365
5334
|
let link = null;
|
5366
5335
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
5367
5336
|
link = node.name === "Link" ? node : null;
|
@@ -5374,11 +5343,14 @@ var linkTooltip = (render) => {
|
|
5374
5343
|
return {
|
5375
5344
|
pos: link.from,
|
5376
5345
|
end: link.to,
|
5377
|
-
|
5346
|
+
// NOTE: Forcing above causes the tooltip to flicker.
|
5347
|
+
// above: true,
|
5378
5348
|
create: () => {
|
5379
5349
|
const el = document.createElement("div");
|
5380
|
-
el.className = (0,
|
5381
|
-
|
5350
|
+
el.className = (0, import_react_ui_theme7.tooltipContent)({});
|
5351
|
+
renderTooltip(el, {
|
5352
|
+
url: urlText
|
5353
|
+
}, view);
|
5382
5354
|
return {
|
5383
5355
|
dom: el,
|
5384
5356
|
offset: {
|
@@ -5388,6 +5360,9 @@ var linkTooltip = (render) => {
|
|
5388
5360
|
};
|
5389
5361
|
}
|
5390
5362
|
};
|
5363
|
+
}, {
|
5364
|
+
// NOTE: 0 = default of 300ms.
|
5365
|
+
hoverTime: 1
|
5391
5366
|
});
|
5392
5367
|
};
|
5393
5368
|
var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
|
@@ -5444,7 +5419,7 @@ var InputModeExtensions = {
|
|
5444
5419
|
editorInputMode.of({
|
5445
5420
|
type: "vscode"
|
5446
5421
|
}),
|
5447
|
-
|
5422
|
+
import_view27.keymap.of(import_codemirror_vscode_keymap.vscodeKeymap)
|
5448
5423
|
],
|
5449
5424
|
vim: [
|
5450
5425
|
// https://github.com/replit/codemirror-vim
|
@@ -5453,7 +5428,7 @@ var InputModeExtensions = {
|
|
5453
5428
|
type: "vim",
|
5454
5429
|
noTabster: true
|
5455
5430
|
}),
|
5456
|
-
|
5431
|
+
import_view27.keymap.of([
|
5457
5432
|
{
|
5458
5433
|
key: "Alt-Escape",
|
5459
5434
|
run: (view) => {
|
@@ -5464,6 +5439,159 @@ var InputModeExtensions = {
|
|
5464
5439
|
])
|
5465
5440
|
]
|
5466
5441
|
};
|
5442
|
+
var preview = (options = {}) => {
|
5443
|
+
return [
|
5444
|
+
// NOTE: Atomic block decorations must be created from a state field, now a widget, otherwise it results in the following error:
|
5445
|
+
// "Block decorations may not be specified via plugins"
|
5446
|
+
import_state22.StateField.define({
|
5447
|
+
create: (state) => buildDecorations3(state, options),
|
5448
|
+
update: (_, tr) => buildDecorations3(tr.state, options),
|
5449
|
+
provide: (field) => [
|
5450
|
+
import_view28.EditorView.decorations.from(field),
|
5451
|
+
import_view28.EditorView.atomicRanges.of((view) => view.state.field(field))
|
5452
|
+
]
|
5453
|
+
}),
|
5454
|
+
import_view28.EditorView.theme({
|
5455
|
+
".cm-preview-block": {
|
5456
|
+
marginLeft: "-1rem",
|
5457
|
+
marginRight: "-1rem",
|
5458
|
+
padding: "1rem",
|
5459
|
+
borderRadius: "0.5rem",
|
5460
|
+
background: "var(--dx-modalSurface)",
|
5461
|
+
border: "1px solid var(--dx-separator)"
|
5462
|
+
}
|
5463
|
+
})
|
5464
|
+
];
|
5465
|
+
};
|
5466
|
+
var getLinkRef = (state, node) => {
|
5467
|
+
const mark = node.getChild("LinkMark");
|
5468
|
+
const label = node.getChild("LinkLabel");
|
5469
|
+
if (mark && label) {
|
5470
|
+
const ref = state.sliceDoc(label.from + 1, label.to - 1);
|
5471
|
+
return {
|
5472
|
+
suggest: ref.startsWith("?"),
|
5473
|
+
block: state.sliceDoc(mark.from, mark.from + 1) === "!",
|
5474
|
+
label: state.sliceDoc(mark.to, label.from - 1),
|
5475
|
+
ref: ref.startsWith("?") ? ref.slice(1) : ref
|
5476
|
+
};
|
5477
|
+
}
|
5478
|
+
};
|
5479
|
+
var buildDecorations3 = (state, options) => {
|
5480
|
+
const builder = new import_state22.RangeSetBuilder();
|
5481
|
+
(0, import_language13.syntaxTree)(state).iterate({
|
5482
|
+
enter: (node) => {
|
5483
|
+
switch (node.name) {
|
5484
|
+
//
|
5485
|
+
// Decoration.
|
5486
|
+
// [Label][dxn:echo:123]
|
5487
|
+
//
|
5488
|
+
case "Link": {
|
5489
|
+
const link = getLinkRef(state, node.node);
|
5490
|
+
if (link) {
|
5491
|
+
builder.add(node.from, node.to, import_view28.Decoration.replace({
|
5492
|
+
widget: new PreviewInlineWidget(options, link)
|
5493
|
+
}));
|
5494
|
+
}
|
5495
|
+
break;
|
5496
|
+
}
|
5497
|
+
//
|
5498
|
+
// Block widget.
|
5499
|
+
// ![Label][dxn:echo:123]
|
5500
|
+
//
|
5501
|
+
case "Image": {
|
5502
|
+
const link = getLinkRef(state, node.node);
|
5503
|
+
if (options.renderBlock && link) {
|
5504
|
+
builder.add(node.from, node.to, import_view28.Decoration.replace({
|
5505
|
+
block: true,
|
5506
|
+
// atomic: true,
|
5507
|
+
widget: new PreviewBlockWidget(options, link)
|
5508
|
+
}));
|
5509
|
+
}
|
5510
|
+
break;
|
5511
|
+
}
|
5512
|
+
}
|
5513
|
+
}
|
5514
|
+
});
|
5515
|
+
return builder.finish();
|
5516
|
+
};
|
5517
|
+
var PreviewInlineWidget = class extends import_view28.WidgetType {
|
5518
|
+
constructor(_options, _link) {
|
5519
|
+
super();
|
5520
|
+
this._options = _options;
|
5521
|
+
this._link = _link;
|
5522
|
+
}
|
5523
|
+
// override ignoreEvent() {
|
5524
|
+
// return false;
|
5525
|
+
// }
|
5526
|
+
eq(other) {
|
5527
|
+
return this._link.ref === other._link.ref && this._link.label === other._link.label;
|
5528
|
+
}
|
5529
|
+
toDOM(view) {
|
5530
|
+
const root = document.createElement("dx-ref-tag");
|
5531
|
+
root.setAttribute("label", this._link.label);
|
5532
|
+
root.setAttribute("ref", this._link.ref);
|
5533
|
+
return root;
|
5534
|
+
}
|
5535
|
+
};
|
5536
|
+
var PreviewBlockWidget = class extends import_view28.WidgetType {
|
5537
|
+
constructor(_options, _link) {
|
5538
|
+
super();
|
5539
|
+
this._options = _options;
|
5540
|
+
this._link = _link;
|
5541
|
+
}
|
5542
|
+
// override ignoreEvent() {
|
5543
|
+
// return true;
|
5544
|
+
// }
|
5545
|
+
eq(other) {
|
5546
|
+
return this._link.ref === other._link.ref;
|
5547
|
+
}
|
5548
|
+
toDOM(view) {
|
5549
|
+
const root = document.createElement("div");
|
5550
|
+
root.classList.add("cm-preview-block");
|
5551
|
+
const handleAction = (action) => {
|
5552
|
+
const pos = view.posAtDOM(root);
|
5553
|
+
const node = (0, import_language13.syntaxTree)(view.state).resolve(pos + 1).node.parent;
|
5554
|
+
if (!node) {
|
5555
|
+
return;
|
5556
|
+
}
|
5557
|
+
const link = getLinkRef(view.state, node);
|
5558
|
+
if (link?.ref !== action.link.ref) {
|
5559
|
+
return;
|
5560
|
+
}
|
5561
|
+
switch (action.type) {
|
5562
|
+
// TODO(burdon): Should we dispatch to the view or mutate the document? (i.e., handle externally?)
|
5563
|
+
// Insert ref text.
|
5564
|
+
case "insert": {
|
5565
|
+
view.dispatch({
|
5566
|
+
changes: {
|
5567
|
+
from: node.from,
|
5568
|
+
to: node.to,
|
5569
|
+
insert: action.target.text
|
5570
|
+
}
|
5571
|
+
});
|
5572
|
+
break;
|
5573
|
+
}
|
5574
|
+
// Remove ref.
|
5575
|
+
case "delete": {
|
5576
|
+
view.dispatch({
|
5577
|
+
changes: {
|
5578
|
+
from: node.from,
|
5579
|
+
to: node.to
|
5580
|
+
}
|
5581
|
+
});
|
5582
|
+
break;
|
5583
|
+
}
|
5584
|
+
}
|
5585
|
+
};
|
5586
|
+
this._options.renderBlock(root, {
|
5587
|
+
readonly: view.state.readOnly,
|
5588
|
+
link: this._link,
|
5589
|
+
onAction: handleAction,
|
5590
|
+
onLookup: this._options.onLookup
|
5591
|
+
}, view);
|
5592
|
+
return root;
|
5593
|
+
}
|
5594
|
+
};
|
5467
5595
|
var defaultItems = [
|
5468
5596
|
"hello world!",
|
5469
5597
|
"this is a test.",
|
@@ -5526,7 +5654,7 @@ var useActionHandler = (view) => {
|
|
5526
5654
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5527
5655
|
var instanceCount = 0;
|
5528
5656
|
var useTextEditor = (props = {}, deps = []) => {
|
5529
|
-
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react8.useMemo)(() => (0, import_util5.getProviderValue)(props), deps ?? []);
|
5657
|
+
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react8.useMemo)(() => (0, import_util5.getProviderValue)(props), deps ?? []);
|
5530
5658
|
const [instanceId] = (0, import_react8.useState)(() => `text-editor-${++instanceCount}`);
|
5531
5659
|
const [view, setView] = (0, import_react8.useState)();
|
5532
5660
|
const parentRef = (0, import_react8.useRef)(null);
|
@@ -5539,7 +5667,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5539
5667
|
doc: initialValue?.length ?? 0
|
5540
5668
|
}, {
|
5541
5669
|
F: __dxlog_file11,
|
5542
|
-
L:
|
5670
|
+
L: 76,
|
5543
5671
|
S: void 0,
|
5544
5672
|
C: (f, a) => f(...a)
|
5545
5673
|
});
|
@@ -5555,8 +5683,8 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5555
5683
|
anchor
|
5556
5684
|
};
|
5557
5685
|
}
|
5558
|
-
const state =
|
5559
|
-
doc: initialValue,
|
5686
|
+
const state = import_state23.EditorState.create({
|
5687
|
+
doc: doc ?? initialValue,
|
5560
5688
|
// selection: initialSelection,
|
5561
5689
|
extensions: [
|
5562
5690
|
id && documentId.of(id),
|
@@ -5565,7 +5693,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5565
5693
|
import_view30.EditorView.exceptionSink.of((err) => {
|
5566
5694
|
import_log7.log.catch(err, void 0, {
|
5567
5695
|
F: __dxlog_file11,
|
5568
|
-
L:
|
5696
|
+
L: 98,
|
5569
5697
|
S: void 0,
|
5570
5698
|
C: (f, a) => f(...a)
|
5571
5699
|
});
|
@@ -5597,7 +5725,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5597
5725
|
id
|
5598
5726
|
}, {
|
5599
5727
|
F: __dxlog_file11,
|
5600
|
-
L:
|
5728
|
+
L: 135,
|
5601
5729
|
S: void 0,
|
5602
5730
|
C: (f, a) => f(...a)
|
5603
5731
|
});
|
@@ -5614,7 +5742,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5614
5742
|
selection
|
5615
5743
|
}, {
|
5616
5744
|
F: __dxlog_file11,
|
5617
|
-
L:
|
5745
|
+
L: 144,
|
5618
5746
|
S: void 0,
|
5619
5747
|
C: (f, a) => f(...a)
|
5620
5748
|
});
|
@@ -5697,7 +5825,10 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5697
5825
|
blast,
|
5698
5826
|
callbackWrapper,
|
5699
5827
|
clientRectsFor,
|
5828
|
+
closeCommand,
|
5829
|
+
closeEffect,
|
5700
5830
|
command,
|
5831
|
+
commandKeyBindings,
|
5701
5832
|
comments,
|
5702
5833
|
commentsState,
|
5703
5834
|
convertTreeToJson,
|
@@ -5711,6 +5842,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5711
5842
|
createElement,
|
5712
5843
|
createExternalCommentSync,
|
5713
5844
|
createMarkdownExtensions,
|
5845
|
+
createRenderer,
|
5714
5846
|
createThemeExtensions,
|
5715
5847
|
debugDispatcher,
|
5716
5848
|
debugNodeLogger,
|
@@ -5724,6 +5856,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5724
5856
|
editorGutter,
|
5725
5857
|
editorInputMode,
|
5726
5858
|
editorMonospace,
|
5859
|
+
editorWidth,
|
5727
5860
|
editorWithToolbarLayout,
|
5728
5861
|
flattenRect,
|
5729
5862
|
focus,
|
@@ -5742,8 +5875,11 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5742
5875
|
markdownTags,
|
5743
5876
|
markdownTagsExtensions,
|
5744
5877
|
mention,
|
5878
|
+
openCommand,
|
5879
|
+
openEffect,
|
5745
5880
|
overlap,
|
5746
5881
|
preventNewline,
|
5882
|
+
preview,
|
5747
5883
|
processEditorPayload,
|
5748
5884
|
removeBlockquote,
|
5749
5885
|
removeCodeblock,
|