@dxos/react-ui-editor 0.8.2 → 0.8.3-main.7f5a14c
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 +936 -274
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +981 -314
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +936 -274
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/EditorToolbar/util.d.ts +2 -2
- package/dist/types/src/components/Popover/CommandMenu.d.ts +34 -0
- package/dist/types/src/components/Popover/CommandMenu.d.ts.map +1 -0
- package/dist/types/src/components/Popover/RefPopover.d.ts +19 -6
- package/dist/types/src/components/Popover/RefPopover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/index.d.ts +1 -0
- package/dist/types/src/components/Popover/index.d.ts.map +1 -1
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +40 -0
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +1 -0
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/hashtag.d.ts +3 -0
- package/dist/types/src/extensions/hashtag.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +2 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/json.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/debug.d.ts +2 -2
- package/dist/types/src/extensions/markdown/debug.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts +1 -3
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
- package/dist/types/src/extensions/placeholder.d.ts +4 -0
- package/dist/types/src/extensions/placeholder.d.ts.map +1 -0
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts +8 -9
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/stories/Command.stories.d.ts +1 -1
- package/dist/types/src/stories/Command.stories.d.ts.map +1 -1
- package/dist/types/src/stories/CommandMenu.stories.d.ts +12 -0
- package/dist/types/src/stories/CommandMenu.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Comments.stories.d.ts +1 -1
- package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Experimental.stories.d.ts +1 -1
- package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Markdown.stories.d.ts +1 -1
- package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Preview.stories.d.ts +1 -1
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/stories/TextEditor.stories.d.ts +1 -1
- package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts +43 -0
- package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -0
- package/dist/types/src/stories/components/index.d.ts +3 -0
- package/dist/types/src/stories/components/index.d.ts.map +1 -0
- package/dist/types/src/stories/{util.d.ts → components/util.d.ts} +3 -18
- package/dist/types/src/stories/components/util.d.ts.map +1 -0
- package/package.json +31 -27
- package/src/components/Popover/CommandMenu.tsx +279 -0
- package/src/components/Popover/RefPopover.tsx +44 -22
- package/src/components/Popover/index.ts +1 -0
- package/src/defaults.ts +1 -0
- package/src/extensions/command/menu.ts +334 -23
- package/src/extensions/factories.ts +4 -1
- package/src/extensions/hashtag.tsx +68 -0
- package/src/extensions/index.ts +2 -0
- package/src/extensions/json.ts +2 -1
- package/src/extensions/markdown/debug.ts +2 -2
- package/src/extensions/outliner/outliner.ts +6 -8
- package/src/extensions/placeholder.ts +82 -0
- package/src/extensions/preview/preview.ts +3 -6
- package/src/hooks/useTextEditor.ts +11 -12
- package/src/stories/Command.stories.tsx +1 -1
- package/src/stories/CommandMenu.stories.tsx +143 -0
- package/src/stories/Comments.stories.tsx +2 -2
- package/src/stories/Experimental.stories.tsx +2 -2
- package/src/stories/Markdown.stories.tsx +2 -2
- package/src/stories/Outliner.stories.tsx +19 -7
- package/src/stories/Preview.stories.tsx +34 -32
- package/src/stories/TextEditor.stories.tsx +3 -3
- package/src/stories/components/EditorStory.tsx +135 -0
- package/src/stories/components/index.ts +6 -0
- package/src/stories/{util.tsx → components/util.tsx} +5 -100
- package/dist/types/src/stories/util.d.ts.map +0 -1
package/dist/lib/node/index.cjs
CHANGED
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
29
|
var node_exports = {};
|
30
30
|
__export(node_exports, {
|
31
|
+
CommandMenu: () => CommandMenu,
|
31
32
|
Cursor: () => Cursor,
|
32
33
|
EditorInputMode: () => EditorInputMode,
|
33
34
|
EditorInputModes: () => EditorInputModes,
|
@@ -39,6 +40,7 @@ __export(node_exports, {
|
|
39
40
|
Inline: () => Inline,
|
40
41
|
InputModeExtensions: () => InputModeExtensions,
|
41
42
|
List: () => List,
|
43
|
+
PreviewProvider: () => PreviewProvider,
|
42
44
|
RefDropdownMenu: () => RefDropdownMenu,
|
43
45
|
RefPopover: () => RefPopover,
|
44
46
|
RemoteSelectionsDecorator: () => RemoteSelectionsDecorator,
|
@@ -62,11 +64,14 @@ __export(node_exports, {
|
|
62
64
|
closeEffect: () => closeEffect,
|
63
65
|
command: () => command,
|
64
66
|
commandKeyBindings: () => commandKeyBindings,
|
67
|
+
commandMenu: () => commandMenu,
|
68
|
+
commandRangeEffect: () => commandRangeEffect,
|
65
69
|
commands: () => commands,
|
66
70
|
commentClickedEffect: () => commentClickedEffect,
|
67
71
|
comments: () => comments,
|
68
72
|
commentsState: () => commentsState,
|
69
73
|
convertTreeToJson: () => convertTreeToJson,
|
74
|
+
coreSlashCommands: () => coreSlashCommands,
|
70
75
|
createBasicExtensions: () => createBasicExtensions,
|
71
76
|
createComment: () => createComment,
|
72
77
|
createDataExtensions: () => createDataExtensions,
|
@@ -94,6 +99,7 @@ __export(node_exports, {
|
|
94
99
|
editorSlots: () => editorSlots,
|
95
100
|
editorWidth: () => editorWidth,
|
96
101
|
editorWithToolbarLayout: () => editorWithToolbarLayout,
|
102
|
+
filterItems: () => filterItems,
|
97
103
|
flattenRect: () => flattenRect,
|
98
104
|
floatingMenu: () => floatingMenu,
|
99
105
|
focus: () => focus,
|
@@ -102,14 +108,21 @@ __export(node_exports, {
|
|
102
108
|
formattingEquals: () => formattingEquals,
|
103
109
|
formattingKeymap: () => formattingKeymap,
|
104
110
|
getFormatting: () => getFormatting,
|
111
|
+
getItem: () => getItem,
|
105
112
|
getListItemContent: () => getListItemContent,
|
113
|
+
getNextItem: () => getNextItem,
|
114
|
+
getPreviousItem: () => getPreviousItem,
|
106
115
|
getRange: () => getRange,
|
116
|
+
hashtag: () => hashtag,
|
107
117
|
image: () => image,
|
108
118
|
indentItemLess: () => indentItemLess,
|
109
119
|
indentItemMore: () => indentItemMore,
|
120
|
+
insertAtCursor: () => insertAtCursor,
|
121
|
+
insertAtLineStart: () => insertAtLineStart,
|
110
122
|
insertTable: () => insertTable,
|
111
123
|
itemToJSON: () => itemToJSON,
|
112
124
|
keymap: () => import_view.keymap,
|
125
|
+
linkSlashCommands: () => linkSlashCommands,
|
113
126
|
linkTooltip: () => linkTooltip,
|
114
127
|
listItemToString: () => listItemToString,
|
115
128
|
listener: () => listener,
|
@@ -121,6 +134,7 @@ __export(node_exports, {
|
|
121
134
|
mention: () => mention,
|
122
135
|
moveItemDown: () => moveItemDown,
|
123
136
|
moveItemUp: () => moveItemUp,
|
137
|
+
multilinePlaceholder: () => multilinePlaceholder,
|
124
138
|
openCommand: () => openCommand,
|
125
139
|
openEffect: () => openEffect,
|
126
140
|
outliner: () => outliner,
|
@@ -163,6 +177,7 @@ __export(node_exports, {
|
|
163
177
|
treeFacet: () => treeFacet,
|
164
178
|
typeahead: () => typeahead,
|
165
179
|
typewriter: () => typewriter,
|
180
|
+
useCommandMenu: () => useCommandMenu,
|
166
181
|
useComments: () => useComments,
|
167
182
|
useEditorToolbarState: () => useEditorToolbarState,
|
168
183
|
useFormattingState: () => useFormattingState,
|
@@ -223,130 +238,139 @@ var import_view7 = require("@codemirror/view");
|
|
223
238
|
var import_view8 = require("@codemirror/view");
|
224
239
|
var import_state10 = require("@codemirror/state");
|
225
240
|
var import_view9 = require("@codemirror/view");
|
226
|
-
var import_view10 = require("@codemirror/view");
|
227
241
|
var import_state11 = require("@codemirror/state");
|
242
|
+
var import_view10 = require("@codemirror/view");
|
243
|
+
var import_react4 = require("react");
|
244
|
+
var import_async3 = require("@dxos/async");
|
228
245
|
var import_view11 = require("@codemirror/view");
|
229
|
-
var import_commands = require("@codemirror/commands");
|
230
246
|
var import_state12 = require("@codemirror/state");
|
231
247
|
var import_view12 = require("@codemirror/view");
|
232
|
-
var
|
233
|
-
var import_react4 = require("react");
|
234
|
-
var import_async3 = require("@dxos/async");
|
235
|
-
var import_log4 = require("@dxos/log");
|
236
|
-
var import_util = require("@dxos/util");
|
248
|
+
var import_commands = require("@codemirror/commands");
|
237
249
|
var import_state13 = require("@codemirror/state");
|
238
250
|
var import_view13 = require("@codemirror/view");
|
251
|
+
var import_lodash2 = __toESM(require("lodash.sortby"));
|
252
|
+
var import_react5 = require("react");
|
239
253
|
var import_async4 = require("@dxos/async");
|
254
|
+
var import_log4 = require("@dxos/log");
|
255
|
+
var import_util = require("@dxos/util");
|
256
|
+
var import_state14 = require("@codemirror/state");
|
257
|
+
var import_view14 = require("@codemirror/view");
|
258
|
+
var import_async5 = require("@dxos/async");
|
240
259
|
var import_invariant3 = require("@dxos/invariant");
|
241
260
|
var import_util2 = require("@dxos/util");
|
242
261
|
var import_language = require("@codemirror/language");
|
243
|
-
var
|
244
|
-
var
|
262
|
+
var import_state15 = require("@codemirror/state");
|
263
|
+
var import_view15 = require("@codemirror/view");
|
245
264
|
var import_autocomplete2 = require("@codemirror/autocomplete");
|
246
265
|
var import_commands2 = require("@codemirror/commands");
|
247
266
|
var import_language2 = require("@codemirror/language");
|
248
267
|
var import_search = require("@codemirror/search");
|
249
|
-
var
|
268
|
+
var import_state16 = require("@codemirror/state");
|
250
269
|
var import_theme_one_dark = require("@codemirror/theme-one-dark");
|
251
|
-
var
|
270
|
+
var import_view16 = require("@codemirror/view");
|
252
271
|
var import_lodash3 = __toESM(require("lodash.defaultsdeep"));
|
253
272
|
var import_lodash4 = __toESM(require("lodash.merge"));
|
254
273
|
var import_display_name = require("@dxos/display-name");
|
255
274
|
var import_log5 = require("@dxos/log");
|
256
275
|
var import_util3 = require("@dxos/util");
|
257
|
-
var
|
258
|
-
var
|
276
|
+
var import_state17 = require("@codemirror/state");
|
277
|
+
var import_view17 = require("@codemirror/view");
|
278
|
+
var import_view18 = require("@codemirror/view");
|
259
279
|
var import_react_ui_theme3 = require("@dxos/react-ui-theme");
|
260
280
|
var import_react_ui_theme4 = require("@dxos/react-ui-theme");
|
281
|
+
var import_react_ui_theme5 = require("@dxos/react-ui-theme");
|
261
282
|
var import_util4 = require("@dxos/util");
|
262
283
|
var import_language3 = require("@codemirror/language");
|
263
|
-
var
|
264
|
-
var
|
284
|
+
var import_view19 = require("@codemirror/view");
|
285
|
+
var import_react6 = __toESM(require("react"));
|
265
286
|
var import_react_ui3 = require("@dxos/react-ui");
|
287
|
+
var import_view20 = require("@codemirror/view");
|
288
|
+
var import_react_ui_theme6 = require("@dxos/react-ui-theme");
|
266
289
|
var import_lang_json = require("@codemirror/lang-json");
|
267
290
|
var import_lint = require("@codemirror/lint");
|
268
291
|
var import_ajv = __toESM(require("ajv"));
|
269
|
-
var
|
292
|
+
var import_view21 = require("@codemirror/view");
|
270
293
|
var import_autocomplete3 = require("@codemirror/autocomplete");
|
271
294
|
var import_language4 = require("@codemirror/language");
|
272
|
-
var
|
273
|
-
var
|
274
|
-
var
|
295
|
+
var import_state18 = require("@codemirror/state");
|
296
|
+
var import_view22 = require("@codemirror/view");
|
297
|
+
var import_react7 = require("react");
|
275
298
|
var import_autocomplete4 = require("@codemirror/autocomplete");
|
276
299
|
var import_commands3 = require("@codemirror/commands");
|
277
300
|
var import_lang_markdown2 = require("@codemirror/lang-markdown");
|
278
301
|
var import_language5 = require("@codemirror/language");
|
279
302
|
var import_language_data = require("@codemirror/language-data");
|
280
303
|
var import_lint2 = require("@codemirror/lint");
|
281
|
-
var
|
304
|
+
var import_view23 = require("@codemirror/view");
|
282
305
|
var import_util5 = require("@dxos/util");
|
283
306
|
var import_lang_markdown3 = require("@codemirror/lang-markdown");
|
284
307
|
var import_language6 = require("@codemirror/language");
|
285
308
|
var import_highlight2 = require("@lezer/highlight");
|
286
309
|
var import_markdown = require("@lezer/markdown");
|
287
310
|
var import_language7 = require("@codemirror/language");
|
288
|
-
var import_state18 = require("@codemirror/state");
|
289
|
-
var import_language8 = require("@codemirror/language");
|
290
311
|
var import_state19 = require("@codemirror/state");
|
291
|
-
var
|
312
|
+
var import_language8 = require("@codemirror/language");
|
313
|
+
var import_state20 = require("@codemirror/state");
|
314
|
+
var import_view24 = require("@codemirror/view");
|
292
315
|
var import_invariant4 = require("@dxos/invariant");
|
293
|
-
var
|
316
|
+
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
294
317
|
var import_language9 = require("@codemirror/language");
|
295
|
-
var import_state20 = require("@codemirror/state");
|
296
|
-
var import_view22 = require("@codemirror/view");
|
297
|
-
var import_language10 = require("@codemirror/language");
|
298
318
|
var import_state21 = require("@codemirror/state");
|
299
|
-
var import_view23 = require("@codemirror/view");
|
300
|
-
var import_view24 = require("@codemirror/view");
|
301
|
-
var import_language11 = require("@codemirror/language");
|
302
|
-
var import_state22 = require("@codemirror/state");
|
303
319
|
var import_view25 = require("@codemirror/view");
|
304
|
-
var
|
320
|
+
var import_language10 = require("@codemirror/language");
|
321
|
+
var import_state22 = require("@codemirror/state");
|
305
322
|
var import_view26 = require("@codemirror/view");
|
306
|
-
var
|
323
|
+
var import_view27 = require("@codemirror/view");
|
324
|
+
var import_language11 = require("@codemirror/language");
|
325
|
+
var import_state23 = require("@codemirror/state");
|
326
|
+
var import_view28 = require("@codemirror/view");
|
327
|
+
var import_language12 = require("@codemirror/language");
|
328
|
+
var import_view29 = require("@codemirror/view");
|
329
|
+
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
307
330
|
var import_autocomplete5 = require("@codemirror/autocomplete");
|
308
331
|
var import_log6 = require("@dxos/log");
|
309
|
-
var
|
332
|
+
var import_view30 = require("@codemirror/view");
|
310
333
|
var import_codemirror_vim = require("@replit/codemirror-vim");
|
311
334
|
var import_codemirror_vscode_keymap = require("@replit/codemirror-vscode-keymap");
|
312
335
|
var import_effect = require("effect");
|
313
336
|
var import_commands4 = require("@codemirror/commands");
|
314
337
|
var import_language13 = require("@codemirror/language");
|
315
|
-
var import_state23 = require("@codemirror/state");
|
316
|
-
var import_view28 = require("@codemirror/view");
|
317
338
|
var import_state24 = require("@codemirror/state");
|
318
|
-
var
|
339
|
+
var import_view31 = require("@codemirror/view");
|
319
340
|
var import_state25 = require("@codemirror/state");
|
341
|
+
var import_language14 = require("@codemirror/language");
|
320
342
|
var import_state26 = require("@codemirror/state");
|
321
|
-
var import_invariant5 = require("@dxos/invariant");
|
322
343
|
var import_state27 = require("@codemirror/state");
|
323
|
-
var
|
324
|
-
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
344
|
+
var import_invariant5 = require("@dxos/invariant");
|
325
345
|
var import_state28 = require("@codemirror/state");
|
326
|
-
var
|
346
|
+
var import_view32 = require("@codemirror/view");
|
347
|
+
var import_react_ui_theme9 = require("@dxos/react-ui-theme");
|
348
|
+
var import_state29 = require("@codemirror/state");
|
349
|
+
var import_view33 = require("@codemirror/view");
|
327
350
|
var import_log7 = require("@dxos/log");
|
328
351
|
var import_dx_ref_tag = require("@dxos/lit-ui/dx-ref-tag.pcss");
|
329
352
|
var import_language15 = require("@codemirror/language");
|
330
|
-
var
|
331
|
-
var
|
332
|
-
var
|
353
|
+
var import_state30 = require("@codemirror/state");
|
354
|
+
var import_view34 = require("@codemirror/view");
|
355
|
+
var import_view35 = require("@codemirror/view");
|
333
356
|
var import_search2 = require("@codemirror/search");
|
334
|
-
var import_view33 = require("@codemirror/view");
|
335
|
-
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
336
357
|
var import_tracking2 = require("@preact-signals/safe-react/tracking");
|
337
|
-
var
|
338
|
-
var import_react7 = __toESM(require("react"));
|
339
|
-
var import_async5 = require("@dxos/async");
|
358
|
+
var import_react8 = __toESM(require("react"));
|
340
359
|
var import_react_ui4 = require("@dxos/react-ui");
|
341
360
|
var import_tracking3 = require("@preact-signals/safe-react/tracking");
|
342
|
-
var
|
343
|
-
var
|
361
|
+
var import_react_context = require("@radix-ui/react-context");
|
362
|
+
var import_react9 = __toESM(require("react"));
|
344
363
|
var import_async6 = require("@dxos/async");
|
345
364
|
var import_react_ui5 = require("@dxos/react-ui");
|
346
|
-
var
|
347
|
-
var
|
365
|
+
var import_tracking4 = require("@preact-signals/safe-react/tracking");
|
366
|
+
var import_react_context2 = require("@radix-ui/react-context");
|
367
|
+
var import_react10 = __toESM(require("react"));
|
368
|
+
var import_async7 = require("@dxos/async");
|
369
|
+
var import_react_ui6 = require("@dxos/react-ui");
|
370
|
+
var import_state31 = require("@codemirror/state");
|
371
|
+
var import_view36 = require("@codemirror/view");
|
348
372
|
var import_react_tabster = require("@fluentui/react-tabster");
|
349
|
-
var
|
373
|
+
var import_react11 = require("react");
|
350
374
|
var import_log8 = require("@dxos/log");
|
351
375
|
var import_util6 = require("@dxos/util");
|
352
376
|
var translationKey = "react-ui-editor";
|
@@ -1701,26 +1725,98 @@ var command = (options = {}) => {
|
|
1701
1725
|
})
|
1702
1726
|
];
|
1703
1727
|
};
|
1728
|
+
var Placeholder = class extends import_view11.WidgetType {
|
1729
|
+
constructor(content) {
|
1730
|
+
super(), this.content = content;
|
1731
|
+
}
|
1732
|
+
toDOM(view) {
|
1733
|
+
const wrap = document.createElement("span");
|
1734
|
+
wrap.className = "cm-placeholder";
|
1735
|
+
wrap.style.pointerEvents = "none";
|
1736
|
+
wrap.appendChild(typeof this.content === "string" ? document.createTextNode(this.content) : typeof this.content === "function" ? this.content(view) : this.content.cloneNode(true));
|
1737
|
+
wrap.setAttribute("aria-hidden", "true");
|
1738
|
+
return wrap;
|
1739
|
+
}
|
1740
|
+
coordsAt(dom) {
|
1741
|
+
const rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];
|
1742
|
+
if (!rects.length) {
|
1743
|
+
return null;
|
1744
|
+
}
|
1745
|
+
const style = window.getComputedStyle(dom.parentNode);
|
1746
|
+
const rect = flattenRect(rects[0], style.direction !== "rtl");
|
1747
|
+
const lineHeight = parseInt(style.lineHeight);
|
1748
|
+
if (rect.bottom - rect.top > lineHeight * 1.5) {
|
1749
|
+
return {
|
1750
|
+
left: rect.left,
|
1751
|
+
right: rect.right,
|
1752
|
+
top: rect.top,
|
1753
|
+
bottom: rect.top + lineHeight
|
1754
|
+
};
|
1755
|
+
}
|
1756
|
+
return rect;
|
1757
|
+
}
|
1758
|
+
ignoreEvent() {
|
1759
|
+
return false;
|
1760
|
+
}
|
1761
|
+
};
|
1762
|
+
function multilinePlaceholder(content) {
|
1763
|
+
const plugin = import_view11.ViewPlugin.fromClass(class {
|
1764
|
+
constructor(view) {
|
1765
|
+
this.view = view;
|
1766
|
+
}
|
1767
|
+
get decorations() {
|
1768
|
+
const activeLine = this.view.state.doc.lineAt(this.view.state.selection.main.head);
|
1769
|
+
const isEmpty = activeLine.text.trim() === "";
|
1770
|
+
if (!isEmpty || !content) {
|
1771
|
+
return import_view11.Decoration.none;
|
1772
|
+
}
|
1773
|
+
const lineStart = activeLine.from;
|
1774
|
+
return import_view11.Decoration.set([
|
1775
|
+
import_view11.Decoration.widget({
|
1776
|
+
widget: new Placeholder(content),
|
1777
|
+
side: 1
|
1778
|
+
}).range(lineStart)
|
1779
|
+
]);
|
1780
|
+
}
|
1781
|
+
}, {
|
1782
|
+
decorations: (v) => v.decorations
|
1783
|
+
});
|
1784
|
+
return typeof content === "string" ? [
|
1785
|
+
plugin,
|
1786
|
+
import_view11.EditorView.contentAttributes.of({
|
1787
|
+
"aria-placeholder": content
|
1788
|
+
})
|
1789
|
+
] : plugin;
|
1790
|
+
}
|
1704
1791
|
var floatingMenu = (options = {}) => [
|
1705
1792
|
import_view10.ViewPlugin.fromClass(class {
|
1706
1793
|
constructor(view) {
|
1707
|
-
this.rafId = null;
|
1708
1794
|
this.view = view;
|
1709
1795
|
const container = view.scrollDOM;
|
1710
1796
|
if (getComputedStyle(container).position === "static") {
|
1711
1797
|
container.style.position = "relative";
|
1712
1798
|
}
|
1713
|
-
|
1714
|
-
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1799
|
+
{
|
1800
|
+
const icon = document.createElement("dx-icon");
|
1801
|
+
icon.setAttribute("icon", options.icon ?? "ph--dots-three-vertical--regular");
|
1802
|
+
const button = document.createElement("button");
|
1803
|
+
button.appendChild(icon);
|
1804
|
+
this.tag = document.createElement("dx-ref-tag");
|
1805
|
+
this.tag.classList.add("cm-ref-tag");
|
1806
|
+
this.tag.appendChild(button);
|
1807
|
+
}
|
1720
1808
|
container.appendChild(this.tag);
|
1721
|
-
|
1809
|
+
const handler = () => this.scheduleUpdate();
|
1810
|
+
this.cleanup = (0, import_async3.addEventListener)(container, "scroll", handler);
|
1722
1811
|
this.scheduleUpdate();
|
1723
1812
|
}
|
1813
|
+
destroy() {
|
1814
|
+
this.cleanup?.();
|
1815
|
+
this.tag.remove();
|
1816
|
+
if (this.rafId != null) {
|
1817
|
+
cancelAnimationFrame(this.rafId);
|
1818
|
+
}
|
1819
|
+
}
|
1724
1820
|
update(update2) {
|
1725
1821
|
this.tag.dataset.focused = update2.view.hasFocus ? "true" : "false";
|
1726
1822
|
if (!update2.view.hasFocus) {
|
@@ -1757,20 +1853,16 @@ var floatingMenu = (options = {}) => [
|
|
1757
1853
|
}
|
1758
1854
|
this.rafId = requestAnimationFrame(this.updateButtonPosition.bind(this));
|
1759
1855
|
}
|
1760
|
-
destroy() {
|
1761
|
-
this.tag.remove();
|
1762
|
-
if (this.rafId != null) {
|
1763
|
-
cancelAnimationFrame(this.rafId);
|
1764
|
-
}
|
1765
|
-
}
|
1766
1856
|
}),
|
1767
1857
|
import_view10.EditorView.theme({
|
1768
1858
|
".cm-ref-tag": {
|
1769
1859
|
position: "fixed",
|
1770
1860
|
padding: "0",
|
1771
1861
|
border: "none",
|
1772
|
-
|
1773
|
-
|
1862
|
+
opacity: "0"
|
1863
|
+
},
|
1864
|
+
"[data-has-focus] & .cm-ref-tag": {
|
1865
|
+
opacity: "1"
|
1774
1866
|
},
|
1775
1867
|
".cm-ref-tag button": {
|
1776
1868
|
display: "grid",
|
@@ -1778,12 +1870,258 @@ var floatingMenu = (options = {}) => [
|
|
1778
1870
|
justifyContent: "center",
|
1779
1871
|
width: "2rem",
|
1780
1872
|
height: "2rem"
|
1781
|
-
},
|
1782
|
-
'.cm-ref-tag[data-focused="true"]': {
|
1783
|
-
opacity: 1
|
1784
1873
|
}
|
1785
1874
|
})
|
1786
1875
|
];
|
1876
|
+
var commandRangeEffect = import_state11.StateEffect.define();
|
1877
|
+
var commandMenuState = import_state11.StateField.define({
|
1878
|
+
create: () => null,
|
1879
|
+
update: (value, tr) => {
|
1880
|
+
let newValue = value;
|
1881
|
+
for (const effect of tr.effects) {
|
1882
|
+
if (effect.is(commandRangeEffect)) {
|
1883
|
+
newValue = effect.value;
|
1884
|
+
}
|
1885
|
+
}
|
1886
|
+
return newValue;
|
1887
|
+
}
|
1888
|
+
});
|
1889
|
+
var commandMenu = (options) => {
|
1890
|
+
const commandMenuPlugin = import_view10.ViewPlugin.fromClass(class {
|
1891
|
+
constructor(view) {
|
1892
|
+
this.view = view;
|
1893
|
+
this.decorations = import_view10.Decoration.none;
|
1894
|
+
}
|
1895
|
+
// TODO(wittjosiah): The decorations are repainted on every update, this occasionally causes menu to flicker.
|
1896
|
+
update(update2) {
|
1897
|
+
const builder = new import_state11.RangeSetBuilder();
|
1898
|
+
const selection = update2.view.state.selection.main;
|
1899
|
+
const { range: activeRange, trigger } = update2.view.state.field(commandMenuState) ?? {};
|
1900
|
+
const shouldShowWidget = activeRange && selection.head >= activeRange.from && selection.head <= activeRange.to;
|
1901
|
+
if (shouldShowWidget) {
|
1902
|
+
builder.add(activeRange.from, activeRange.to, import_view10.Decoration.mark({
|
1903
|
+
tagName: "dx-ref-tag",
|
1904
|
+
class: "cm-ref-tag",
|
1905
|
+
attributes: {
|
1906
|
+
"data-auto-trigger": "true",
|
1907
|
+
"data-trigger": trigger
|
1908
|
+
}
|
1909
|
+
}));
|
1910
|
+
}
|
1911
|
+
const activeRangeChanged = update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(commandRangeEffect)));
|
1912
|
+
if (activeRange && activeRangeChanged && trigger) {
|
1913
|
+
const content = update2.view.state.sliceDoc(activeRange.from + 1, activeRange.to);
|
1914
|
+
options.onTextChange?.(trigger, content);
|
1915
|
+
}
|
1916
|
+
this.decorations = builder.finish();
|
1917
|
+
}
|
1918
|
+
}, {
|
1919
|
+
decorations: (v) => v.decorations
|
1920
|
+
});
|
1921
|
+
const triggers = Array.isArray(options.trigger) ? options.trigger : [
|
1922
|
+
options.trigger
|
1923
|
+
];
|
1924
|
+
const commandKeymap = import_view10.keymap.of([
|
1925
|
+
...triggers.map((trigger) => ({
|
1926
|
+
key: trigger,
|
1927
|
+
run: (view) => {
|
1928
|
+
const selection = view.state.selection.main;
|
1929
|
+
const line = view.state.doc.lineAt(selection.head);
|
1930
|
+
const shouldTrigger = line.text.trim() === "" || selection.head === line.from || selection.head > line.from && line.text[selection.head - line.from - 1] === " ";
|
1931
|
+
if (shouldTrigger) {
|
1932
|
+
view.dispatch({
|
1933
|
+
changes: {
|
1934
|
+
from: selection.head,
|
1935
|
+
insert: trigger
|
1936
|
+
},
|
1937
|
+
selection: {
|
1938
|
+
anchor: selection.head + 1,
|
1939
|
+
head: selection.head + 1
|
1940
|
+
},
|
1941
|
+
effects: commandRangeEffect.of({
|
1942
|
+
trigger,
|
1943
|
+
range: {
|
1944
|
+
from: selection.head,
|
1945
|
+
to: selection.head + 1
|
1946
|
+
}
|
1947
|
+
})
|
1948
|
+
});
|
1949
|
+
return true;
|
1950
|
+
}
|
1951
|
+
return false;
|
1952
|
+
}
|
1953
|
+
})),
|
1954
|
+
{
|
1955
|
+
key: "Enter",
|
1956
|
+
run: (view) => {
|
1957
|
+
const activeRange = view.state.field(commandMenuState)?.range;
|
1958
|
+
if (activeRange) {
|
1959
|
+
view.dispatch({
|
1960
|
+
changes: {
|
1961
|
+
from: activeRange.from,
|
1962
|
+
to: activeRange.to,
|
1963
|
+
insert: ""
|
1964
|
+
}
|
1965
|
+
});
|
1966
|
+
options.onEnter?.();
|
1967
|
+
return true;
|
1968
|
+
}
|
1969
|
+
return false;
|
1970
|
+
}
|
1971
|
+
},
|
1972
|
+
{
|
1973
|
+
key: "ArrowDown",
|
1974
|
+
run: (view) => {
|
1975
|
+
const activeRange = view.state.field(commandMenuState)?.range;
|
1976
|
+
if (activeRange) {
|
1977
|
+
options.onArrowDown?.();
|
1978
|
+
return true;
|
1979
|
+
}
|
1980
|
+
return false;
|
1981
|
+
}
|
1982
|
+
},
|
1983
|
+
{
|
1984
|
+
key: "ArrowUp",
|
1985
|
+
run: (view) => {
|
1986
|
+
const activeRange = view.state.field(commandMenuState)?.range;
|
1987
|
+
if (activeRange) {
|
1988
|
+
options.onArrowUp?.();
|
1989
|
+
return true;
|
1990
|
+
}
|
1991
|
+
return false;
|
1992
|
+
}
|
1993
|
+
}
|
1994
|
+
]);
|
1995
|
+
const updateListener = import_view10.EditorView.updateListener.of((update2) => {
|
1996
|
+
const { trigger, range: activeRange } = update2.view.state.field(commandMenuState) ?? {};
|
1997
|
+
if (!activeRange || !trigger) {
|
1998
|
+
return;
|
1999
|
+
}
|
2000
|
+
const selection = update2.view.state.selection.main;
|
2001
|
+
const firstChar = update2.view.state.doc.sliceString(activeRange.from, activeRange.from + 1);
|
2002
|
+
const shouldRemove = firstChar !== trigger || // Trigger deleted.
|
2003
|
+
selection.head < activeRange.from || // Cursor moved before the range.
|
2004
|
+
selection.head > activeRange.to + 1;
|
2005
|
+
const nextRange = shouldRemove ? null : update2.docChanged ? {
|
2006
|
+
from: activeRange.from,
|
2007
|
+
to: selection.head
|
2008
|
+
} : activeRange;
|
2009
|
+
if (nextRange !== activeRange) {
|
2010
|
+
update2.view.dispatch({
|
2011
|
+
effects: commandRangeEffect.of(nextRange ? {
|
2012
|
+
trigger,
|
2013
|
+
range: nextRange
|
2014
|
+
} : null)
|
2015
|
+
});
|
2016
|
+
}
|
2017
|
+
if (shouldRemove) {
|
2018
|
+
options.onDeactivate?.();
|
2019
|
+
}
|
2020
|
+
});
|
2021
|
+
return [
|
2022
|
+
multilinePlaceholder(options.placeholder ?? `Press '${Array.isArray(options.trigger) ? options.trigger[0] : options.trigger}' for commands`),
|
2023
|
+
import_state11.Prec.highest(commandKeymap),
|
2024
|
+
updateListener,
|
2025
|
+
commandMenuState,
|
2026
|
+
commandMenuPlugin
|
2027
|
+
];
|
2028
|
+
};
|
2029
|
+
var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder2, getGroups }) => {
|
2030
|
+
const triggerRef = (0, import_react4.useRef)(null);
|
2031
|
+
const currentRef = (0, import_react4.useRef)(null);
|
2032
|
+
const groupsRef = (0, import_react4.useRef)([]);
|
2033
|
+
const [currentItem, setCurrentItem] = (0, import_react4.useState)();
|
2034
|
+
const [open, setOpen] = (0, import_react4.useState)(false);
|
2035
|
+
const [_, update2] = (0, import_react4.useState)({});
|
2036
|
+
const handleOpenChange = (0, import_react4.useCallback)(async (open2, trigger2) => {
|
2037
|
+
if (open2 && trigger2) {
|
2038
|
+
groupsRef.current = await getGroups(trigger2);
|
2039
|
+
}
|
2040
|
+
setOpen(open2);
|
2041
|
+
if (!open2) {
|
2042
|
+
triggerRef.current = null;
|
2043
|
+
setCurrentItem(void 0);
|
2044
|
+
viewRef.current?.dispatch({
|
2045
|
+
effects: [
|
2046
|
+
commandRangeEffect.of(null)
|
2047
|
+
]
|
2048
|
+
});
|
2049
|
+
}
|
2050
|
+
}, [
|
2051
|
+
getGroups
|
2052
|
+
]);
|
2053
|
+
const handleActivate = (0, import_react4.useCallback)(async (event) => {
|
2054
|
+
const item = getItem(groupsRef.current, currentItem);
|
2055
|
+
if (item) {
|
2056
|
+
currentRef.current = item;
|
2057
|
+
}
|
2058
|
+
triggerRef.current = event.trigger;
|
2059
|
+
const triggerKey = event.trigger.getAttribute("data-trigger");
|
2060
|
+
if (!open && triggerKey) {
|
2061
|
+
await handleOpenChange(true, triggerKey);
|
2062
|
+
}
|
2063
|
+
}, [
|
2064
|
+
open,
|
2065
|
+
handleOpenChange
|
2066
|
+
]);
|
2067
|
+
const handleSelect = (0, import_react4.useCallback)((item) => {
|
2068
|
+
const view = viewRef.current;
|
2069
|
+
if (!view) {
|
2070
|
+
return;
|
2071
|
+
}
|
2072
|
+
const selection = view.state.selection.main;
|
2073
|
+
void item.onSelect?.(view, selection.head);
|
2074
|
+
}, []);
|
2075
|
+
const serializedTrigger = Array.isArray(trigger) ? trigger.join(",") : trigger;
|
2076
|
+
const _commandMenu = (0, import_react4.useMemo)(() => commandMenu({
|
2077
|
+
trigger,
|
2078
|
+
placeholder: placeholder2,
|
2079
|
+
onArrowDown: () => {
|
2080
|
+
setCurrentItem((currentItem2) => {
|
2081
|
+
const next = getNextItem(groupsRef.current, currentItem2);
|
2082
|
+
currentRef.current = next;
|
2083
|
+
return next.id;
|
2084
|
+
});
|
2085
|
+
},
|
2086
|
+
onArrowUp: () => {
|
2087
|
+
setCurrentItem((currentItem2) => {
|
2088
|
+
const previous = getPreviousItem(groupsRef.current, currentItem2);
|
2089
|
+
currentRef.current = previous;
|
2090
|
+
return previous.id;
|
2091
|
+
});
|
2092
|
+
},
|
2093
|
+
onDeactivate: () => handleOpenChange(false),
|
2094
|
+
onEnter: () => {
|
2095
|
+
if (currentRef.current) {
|
2096
|
+
handleSelect(currentRef.current);
|
2097
|
+
}
|
2098
|
+
},
|
2099
|
+
onTextChange: async (trigger2, text) => {
|
2100
|
+
groupsRef.current = await getGroups(trigger2, text);
|
2101
|
+
const firstItem = groupsRef.current.filter((group) => group.items.length > 0)[0]?.items[0];
|
2102
|
+
if (firstItem) {
|
2103
|
+
setCurrentItem(firstItem.id);
|
2104
|
+
currentRef.current = firstItem;
|
2105
|
+
}
|
2106
|
+
update2({});
|
2107
|
+
}
|
2108
|
+
}), [
|
2109
|
+
handleOpenChange,
|
2110
|
+
getGroups,
|
2111
|
+
serializedTrigger,
|
2112
|
+
placeholder2
|
2113
|
+
]);
|
2114
|
+
return {
|
2115
|
+
commandMenu: _commandMenu,
|
2116
|
+
currentItem,
|
2117
|
+
groupsRef,
|
2118
|
+
ref: triggerRef,
|
2119
|
+
open,
|
2120
|
+
onActivate: handleActivate,
|
2121
|
+
onOpenChange: setOpen,
|
2122
|
+
onSelect: handleSelect
|
2123
|
+
};
|
2124
|
+
};
|
1787
2125
|
var typeahead = ({ onComplete } = {}) => {
|
1788
2126
|
let hint;
|
1789
2127
|
const complete = (view) => {
|
@@ -1799,17 +2137,17 @@ var typeahead = ({ onComplete } = {}) => {
|
|
1799
2137
|
insert: hint
|
1800
2138
|
}
|
1801
2139
|
],
|
1802
|
-
selection:
|
2140
|
+
selection: import_state12.EditorSelection.cursor(selection.from + hint.length)
|
1803
2141
|
});
|
1804
2142
|
return true;
|
1805
2143
|
};
|
1806
2144
|
return [
|
1807
|
-
|
2145
|
+
import_view12.ViewPlugin.fromClass(class {
|
1808
2146
|
constructor() {
|
1809
|
-
this.decorations =
|
2147
|
+
this.decorations = import_view12.Decoration.none;
|
1810
2148
|
}
|
1811
2149
|
update(update2) {
|
1812
|
-
const builder = new
|
2150
|
+
const builder = new import_state12.RangeSetBuilder();
|
1813
2151
|
const selection = update2.view.state.selection.main;
|
1814
2152
|
const line = update2.view.state.doc.lineAt(selection.from);
|
1815
2153
|
if (selection.from === selection.to && selection.from === line.to) {
|
@@ -1818,7 +2156,7 @@ var typeahead = ({ onComplete } = {}) => {
|
|
1818
2156
|
line: str
|
1819
2157
|
});
|
1820
2158
|
if (hint) {
|
1821
|
-
builder.add(selection.from, selection.to,
|
2159
|
+
builder.add(selection.from, selection.to, import_view12.Decoration.widget({
|
1822
2160
|
widget: new Hint(hint)
|
1823
2161
|
}));
|
1824
2162
|
}
|
@@ -1829,7 +2167,7 @@ var typeahead = ({ onComplete } = {}) => {
|
|
1829
2167
|
decorations: (v) => v.decorations
|
1830
2168
|
}),
|
1831
2169
|
// Keys.
|
1832
|
-
|
2170
|
+
import_state12.Prec.highest(import_view12.keymap.of([
|
1833
2171
|
{
|
1834
2172
|
key: "Tab",
|
1835
2173
|
preventDefault: true,
|
@@ -1870,10 +2208,10 @@ var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
|
1870
2208
|
return {
|
1871
2209
|
selection,
|
1872
2210
|
scrollIntoView: !scrollTo,
|
1873
|
-
effects: scrollTo ?
|
2211
|
+
effects: scrollTo ? import_view14.EditorView.scrollIntoView(scrollTo, {
|
1874
2212
|
yMargin: 96
|
1875
2213
|
}) : void 0,
|
1876
|
-
annotations:
|
2214
|
+
annotations: import_state14.Transaction.userEvent.of(stateRestoreAnnotation)
|
1877
2215
|
};
|
1878
2216
|
};
|
1879
2217
|
var createEditorStateStore = (keyPrefix) => ({
|
@@ -1904,7 +2242,7 @@ var createEditorStateStore = (keyPrefix) => ({
|
|
1904
2242
|
}
|
1905
2243
|
});
|
1906
2244
|
var selectionState = ({ getState, setState } = {}) => {
|
1907
|
-
const setStateDebounced = (0,
|
2245
|
+
const setStateDebounced = (0, import_async5.debounce)(setState, 1e3);
|
1908
2246
|
return [
|
1909
2247
|
// TODO(burdon): Track scrolling (currently only updates when cursor moves).
|
1910
2248
|
// EditorView.domEventHandlers({
|
@@ -1912,7 +2250,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
1912
2250
|
// setStateDebounced(id, {});
|
1913
2251
|
// },
|
1914
2252
|
// }),
|
1915
|
-
|
2253
|
+
import_view14.EditorView.updateListener.of(({ view, transactions }) => {
|
1916
2254
|
const id = view.state.facet(documentId);
|
1917
2255
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
1918
2256
|
return;
|
@@ -1935,7 +2273,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
1935
2273
|
}
|
1936
2274
|
}
|
1937
2275
|
}),
|
1938
|
-
getState &&
|
2276
|
+
getState && import_view14.keymap.of([
|
1939
2277
|
{
|
1940
2278
|
key: "ctrl-r",
|
1941
2279
|
run: (view) => {
|
@@ -1950,10 +2288,10 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
1950
2288
|
].filter(import_util2.isNotFalsy);
|
1951
2289
|
};
|
1952
2290
|
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
1953
|
-
var setComments =
|
1954
|
-
var setSelection =
|
1955
|
-
var setCommentState =
|
1956
|
-
var commentsState =
|
2291
|
+
var setComments = import_state13.StateEffect.define();
|
2292
|
+
var setSelection = import_state13.StateEffect.define();
|
2293
|
+
var setCommentState = import_state13.StateEffect.define();
|
2294
|
+
var commentsState = import_state13.StateField.define({
|
1957
2295
|
create: (state) => ({
|
1958
2296
|
id: state.facet(documentId),
|
1959
2297
|
comments: [],
|
@@ -1991,7 +2329,7 @@ var commentsState = import_state12.StateField.define({
|
|
1991
2329
|
return value;
|
1992
2330
|
}
|
1993
2331
|
});
|
1994
|
-
var styles2 =
|
2332
|
+
var styles2 = import_view13.EditorView.theme({
|
1995
2333
|
".cm-comment, .cm-comment-current": {
|
1996
2334
|
margin: "0 -3px",
|
1997
2335
|
padding: "3px",
|
@@ -2004,14 +2342,14 @@ var styles2 = import_view12.EditorView.theme({
|
|
2004
2342
|
textDecoration: "underline"
|
2005
2343
|
}
|
2006
2344
|
});
|
2007
|
-
var createCommentMark = (id, isCurrent) =>
|
2345
|
+
var createCommentMark = (id, isCurrent) => import_view13.Decoration.mark({
|
2008
2346
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2009
2347
|
attributes: {
|
2010
2348
|
"data-testid": "cm-comment",
|
2011
2349
|
"data-comment-id": id
|
2012
2350
|
}
|
2013
2351
|
});
|
2014
|
-
var commentsDecorations =
|
2352
|
+
var commentsDecorations = import_view13.EditorView.decorations.compute([
|
2015
2353
|
commentsState
|
2016
2354
|
], (state) => {
|
2017
2355
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2031,10 +2369,10 @@ var commentsDecorations = import_view12.EditorView.decorations.compute([
|
|
2031
2369
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2032
2370
|
return mark.range(range.from, range.to);
|
2033
2371
|
}).filter(import_util.isNonNullable);
|
2034
|
-
return
|
2372
|
+
return import_view13.Decoration.set(decorations2);
|
2035
2373
|
});
|
2036
|
-
var commentClickedEffect =
|
2037
|
-
var handleCommentClick =
|
2374
|
+
var commentClickedEffect = import_state13.StateEffect.define();
|
2375
|
+
var handleCommentClick = import_view13.EditorView.domEventHandlers({
|
2038
2376
|
click: (event, view) => {
|
2039
2377
|
let target = event.target;
|
2040
2378
|
const editorRoot = view.dom;
|
@@ -2073,7 +2411,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2073
2411
|
}
|
2074
2412
|
};
|
2075
2413
|
return [
|
2076
|
-
|
2414
|
+
import_view13.EditorView.domEventHandlers({
|
2077
2415
|
cut: handleTrack,
|
2078
2416
|
copy: handleTrack
|
2079
2417
|
}),
|
@@ -2095,7 +2433,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2095
2433
|
return effects;
|
2096
2434
|
}),
|
2097
2435
|
// Handle paste or the undo of comment deletion.
|
2098
|
-
|
2436
|
+
import_view13.EditorView.updateListener.of((update2) => {
|
2099
2437
|
const restore = [];
|
2100
2438
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2101
2439
|
const tr = update2.transactions[i];
|
@@ -2151,7 +2489,7 @@ var mapTrackedComment = (comment, changes) => ({
|
|
2151
2489
|
from: changes.mapPos(comment.from, 1),
|
2152
2490
|
to: changes.mapPos(comment.to, 1)
|
2153
2491
|
});
|
2154
|
-
var restoreCommentEffect =
|
2492
|
+
var restoreCommentEffect = import_state13.StateEffect.define({
|
2155
2493
|
map: mapTrackedComment
|
2156
2494
|
});
|
2157
2495
|
var createComment = (view) => {
|
@@ -2185,7 +2523,7 @@ var createComment = (view) => {
|
|
2185
2523
|
var optionsFacet = singleValueFacet();
|
2186
2524
|
var comments = (options = {}) => {
|
2187
2525
|
const { key: shortcut = "meta-'" } = options;
|
2188
|
-
const handleSelect = (0,
|
2526
|
+
const handleSelect = (0, import_async4.debounce)((state) => options.onSelect?.(state), 200);
|
2189
2527
|
return [
|
2190
2528
|
optionsFacet.of(options),
|
2191
2529
|
options.id ? documentId.of(options.id) : void 0,
|
@@ -2196,7 +2534,7 @@ var comments = (options = {}) => {
|
|
2196
2534
|
//
|
2197
2535
|
// Keymap.
|
2198
2536
|
//
|
2199
|
-
options.onCreate &&
|
2537
|
+
options.onCreate && import_view13.keymap.of([
|
2200
2538
|
{
|
2201
2539
|
key: shortcut,
|
2202
2540
|
run: callbackWrapper(createComment)
|
@@ -2206,7 +2544,7 @@ var comments = (options = {}) => {
|
|
2206
2544
|
// Hover tooltip (for key shortcut hints, etc.)
|
2207
2545
|
// TODO(burdon): Factor out to generic hints extension for current selection/line.
|
2208
2546
|
//
|
2209
|
-
options.renderTooltip && (0,
|
2547
|
+
options.renderTooltip && (0, import_view13.hoverTooltip)((view, pos) => {
|
2210
2548
|
const selection = view.state.selection.main;
|
2211
2549
|
if (selection && pos >= selection.from && pos <= selection.to) {
|
2212
2550
|
return {
|
@@ -2237,7 +2575,7 @@ var comments = (options = {}) => {
|
|
2237
2575
|
//
|
2238
2576
|
// Track deleted ranges and update ranges for decorations.
|
2239
2577
|
//
|
2240
|
-
|
2578
|
+
import_view13.EditorView.updateListener.of(({ view, state, changes }) => {
|
2241
2579
|
let mod = false;
|
2242
2580
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2243
2581
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2269,7 +2607,7 @@ var comments = (options = {}) => {
|
|
2269
2607
|
//
|
2270
2608
|
// Track selection/proximity.
|
2271
2609
|
//
|
2272
|
-
|
2610
|
+
import_view13.EditorView.updateListener.of(({ view, state }) => {
|
2273
2611
|
let min = Infinity;
|
2274
2612
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2275
2613
|
const { head } = state.selection.main;
|
@@ -2323,7 +2661,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2323
2661
|
anchor: range.from
|
2324
2662
|
} : void 0,
|
2325
2663
|
effects: [
|
2326
|
-
needsScroll ?
|
2664
|
+
needsScroll ? import_view13.EditorView.scrollIntoView(range.from, center ? {
|
2327
2665
|
y: "center"
|
2328
2666
|
} : void 0) : [],
|
2329
2667
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2353,13 +2691,13 @@ var ExternalCommentSync = class {
|
|
2353
2691
|
this.unsubscribe = subscribe(updateComments);
|
2354
2692
|
}
|
2355
2693
|
};
|
2356
|
-
var createExternalCommentSync = (id, subscribe, getComments) =>
|
2694
|
+
var createExternalCommentSync = (id, subscribe, getComments) => import_view13.ViewPlugin.fromClass(class {
|
2357
2695
|
constructor(view) {
|
2358
2696
|
return new ExternalCommentSync(view, id, subscribe, getComments);
|
2359
2697
|
}
|
2360
2698
|
});
|
2361
2699
|
var useComments = (view, id, comments2) => {
|
2362
|
-
(0,
|
2700
|
+
(0, import_react5.useEffect)(() => {
|
2363
2701
|
if (view) {
|
2364
2702
|
if (id === view.state.facet(documentId)) {
|
2365
2703
|
view.dispatch({
|
@@ -2376,12 +2714,12 @@ var debugNodeLogger = (log9 = console.log) => {
|
|
2376
2714
|
const logTokens = (state) => (0, import_language.syntaxTree)(state).iterate({
|
2377
2715
|
enter: (node) => log9(node.type)
|
2378
2716
|
});
|
2379
|
-
return
|
2717
|
+
return import_state15.StateField.define({
|
2380
2718
|
create: (state) => logTokens(state),
|
2381
2719
|
update: (_, tr) => logTokens(tr.state)
|
2382
2720
|
});
|
2383
2721
|
};
|
2384
|
-
var styles3 =
|
2722
|
+
var styles3 = import_view15.EditorView.theme({
|
2385
2723
|
".cm-dropCursor": {
|
2386
2724
|
borderLeft: "2px solid var(--dx-accentText)",
|
2387
2725
|
color: "var(--dx-accentText)",
|
@@ -2394,8 +2732,8 @@ var styles3 = import_view14.EditorView.theme({
|
|
2394
2732
|
var dropFile = (options = {}) => {
|
2395
2733
|
return [
|
2396
2734
|
styles3,
|
2397
|
-
(0,
|
2398
|
-
|
2735
|
+
(0, import_view15.dropCursor)(),
|
2736
|
+
import_view15.EditorView.domEventHandlers({
|
2399
2737
|
drop: (event, view) => {
|
2400
2738
|
event.preventDefault();
|
2401
2739
|
const files = event.dataTransfer?.files;
|
@@ -2414,8 +2752,8 @@ var dropFile = (options = {}) => {
|
|
2414
2752
|
})
|
2415
2753
|
];
|
2416
2754
|
};
|
2417
|
-
var focusEffect =
|
2418
|
-
var focusField =
|
2755
|
+
var focusEffect = import_state17.StateEffect.define();
|
2756
|
+
var focusField = import_state17.StateField.define({
|
2419
2757
|
create: () => false,
|
2420
2758
|
update: (value, tr) => {
|
2421
2759
|
for (const effect of tr.effects) {
|
@@ -2428,7 +2766,7 @@ var focusField = import_state16.StateField.define({
|
|
2428
2766
|
});
|
2429
2767
|
var focus = [
|
2430
2768
|
focusField,
|
2431
|
-
|
2769
|
+
import_view17.EditorView.domEventHandlers({
|
2432
2770
|
focus: (event, view) => {
|
2433
2771
|
setTimeout(() => view.dispatch({
|
2434
2772
|
effects: focusEffect.of(true)
|
@@ -2454,11 +2792,11 @@ var theme = {
|
|
2454
2792
|
codeMark: "font-mono text-primary-500",
|
2455
2793
|
mark: "opacity-50",
|
2456
2794
|
heading: (level) => {
|
2457
|
-
return (0,
|
2795
|
+
return (0, import_react_ui_theme4.mx)(headings[level], "dark:text-primary-400");
|
2458
2796
|
}
|
2459
2797
|
};
|
2460
2798
|
var getToken = (path, defaultValue) => {
|
2461
|
-
const value = (0, import_util4.get)(
|
2799
|
+
const value = (0, import_util4.get)(import_react_ui_theme5.tokens, path, defaultValue);
|
2462
2800
|
return value?.toString() ?? "";
|
2463
2801
|
};
|
2464
2802
|
var fontBody = getToken("fontFamily.body");
|
@@ -2673,8 +3011,31 @@ var defaultTheme = {
|
|
2673
3011
|
borderTop: "1px solid var(--dx-separator)"
|
2674
3012
|
}
|
2675
3013
|
};
|
3014
|
+
var editorWidth = "!mli-auto is-full max-is-[min(50rem,100%-4rem)]";
|
3015
|
+
var editorSlots = {
|
3016
|
+
scroll: {
|
3017
|
+
className: "pbs-2"
|
3018
|
+
},
|
3019
|
+
content: {
|
3020
|
+
className: editorWidth
|
3021
|
+
}
|
3022
|
+
};
|
3023
|
+
var editorGutter = import_view18.EditorView.theme({
|
3024
|
+
".cm-gutters": {
|
3025
|
+
background: "var(--dx-baseSurface)",
|
3026
|
+
paddingRight: "1rem"
|
3027
|
+
}
|
3028
|
+
});
|
3029
|
+
var editorMonospace = import_view18.EditorView.theme({
|
3030
|
+
".cm-content": {
|
3031
|
+
fontFamily: fontMono
|
3032
|
+
}
|
3033
|
+
});
|
3034
|
+
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
3035
|
+
var stackItemContentEditorClassNames = (role) => (0, import_react_ui_theme3.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");
|
3036
|
+
var stackItemContentToolbarClassNames = (role) => (0, import_react_ui_theme3.mx)("relative z-[1] flex is-full bg-toolbarSurface border-be border-subduedSeparator", role === "section" && "sticky block-start-0 -mbe-px min-is-0");
|
2676
3037
|
var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2677
|
-
var preventNewline =
|
3038
|
+
var preventNewline = import_state16.EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2678
3039
|
var defaultBasicOptions = {
|
2679
3040
|
allowMultipleSelections: true,
|
2680
3041
|
bracketMatching: true,
|
@@ -2696,33 +3057,37 @@ var createBasicExtensions = (_props) => {
|
|
2696
3057
|
const props = (0, import_lodash3.default)({}, _props, defaultBasicOptions);
|
2697
3058
|
return [
|
2698
3059
|
// NOTE: Doesn't catch errors in keymap functions.
|
2699
|
-
|
3060
|
+
import_view16.EditorView.exceptionSink.of((err) => {
|
2700
3061
|
import_log5.log.catch(err, void 0, {
|
2701
3062
|
F: __dxlog_file8,
|
2702
|
-
L:
|
3063
|
+
L: 100,
|
2703
3064
|
S: void 0,
|
2704
3065
|
C: (f, a) => f(...a)
|
2705
3066
|
});
|
2706
3067
|
}),
|
2707
|
-
props.allowMultipleSelections &&
|
3068
|
+
props.allowMultipleSelections && import_state16.EditorState.allowMultipleSelections.of(true),
|
2708
3069
|
props.bracketMatching && (0, import_language2.bracketMatching)(),
|
2709
3070
|
props.closeBrackets && (0, import_autocomplete2.closeBrackets)(),
|
2710
|
-
props.dropCursor && (0,
|
2711
|
-
props.drawSelection && (0,
|
3071
|
+
props.dropCursor && (0, import_view16.dropCursor)(),
|
3072
|
+
props.drawSelection && (0, import_view16.drawSelection)({
|
2712
3073
|
cursorBlinkRate: 1200
|
2713
3074
|
}),
|
2714
|
-
props.editable !== void 0 &&
|
3075
|
+
props.editable !== void 0 && import_view16.EditorView.editable.of(props.editable),
|
2715
3076
|
props.focus && focus,
|
2716
|
-
props.highlightActiveLine && (0,
|
3077
|
+
props.highlightActiveLine && (0, import_view16.highlightActiveLine)(),
|
2717
3078
|
props.history && (0, import_commands2.history)(),
|
2718
|
-
props.lineNumbers &&
|
2719
|
-
|
2720
|
-
|
2721
|
-
|
2722
|
-
props.
|
2723
|
-
props.
|
3079
|
+
props.lineNumbers && [
|
3080
|
+
(0, import_view16.lineNumbers)(),
|
3081
|
+
editorGutter
|
3082
|
+
],
|
3083
|
+
props.lineWrapping && import_view16.EditorView.lineWrapping,
|
3084
|
+
props.monospace && editorMonospace,
|
3085
|
+
props.placeholder && (0, import_view16.placeholder)(props.placeholder),
|
3086
|
+
props.readOnly !== void 0 && import_state16.EditorState.readOnly.of(props.readOnly),
|
3087
|
+
props.scrollPastEnd && (0, import_view16.scrollPastEnd)(),
|
3088
|
+
props.tabSize && import_state16.EditorState.tabSize.of(props.tabSize),
|
2724
3089
|
// https://codemirror.net/docs/ref/#view.KeyBinding
|
2725
|
-
|
3090
|
+
import_view16.keymap.of([
|
2726
3091
|
...(props.keymap && keymaps[props.keymap]) ?? [],
|
2727
3092
|
// NOTE: Tabs are also configured by markdown extension.
|
2728
3093
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
@@ -2753,17 +3118,17 @@ var defaultThemeSlots = {
|
|
2753
3118
|
var createThemeExtensions = ({ themeMode, styles: styles4, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2754
3119
|
const slots = (0, import_lodash3.default)({}, _slots, defaultThemeSlots);
|
2755
3120
|
return [
|
2756
|
-
|
2757
|
-
|
3121
|
+
import_view16.EditorView.darkTheme.of(themeMode === "dark"),
|
3122
|
+
import_view16.EditorView.baseTheme(styles4 ? (0, import_lodash4.default)({}, defaultTheme, styles4) : defaultTheme),
|
2758
3123
|
// https://github.com/codemirror/theme-one-dark
|
2759
3124
|
_syntaxHighlighting && (themeMode === "dark" ? (0, import_language2.syntaxHighlighting)(import_theme_one_dark.oneDarkHighlightStyle) : (0, import_language2.syntaxHighlighting)(import_language2.defaultHighlightStyle)),
|
2760
|
-
slots.editor?.className &&
|
3125
|
+
slots.editor?.className && import_view16.EditorView.editorAttributes.of({
|
2761
3126
|
class: slots.editor.className
|
2762
3127
|
}),
|
2763
|
-
slots.content?.className &&
|
3128
|
+
slots.content?.className && import_view16.EditorView.contentAttributes.of({
|
2764
3129
|
class: slots.content.className
|
2765
3130
|
}),
|
2766
|
-
slots.scroll?.className &&
|
3131
|
+
slots.scroll?.className && import_view16.ViewPlugin.fromClass(class {
|
2767
3132
|
constructor(view) {
|
2768
3133
|
view.scrollDOM.classList.add(slots.scroll.className);
|
2769
3134
|
}
|
@@ -2802,7 +3167,7 @@ var folding = (_props = {}) => [
|
|
2802
3167
|
const el = createElement("div", {
|
2803
3168
|
className: "flex h-full items-center"
|
2804
3169
|
});
|
2805
|
-
return renderRoot(el, /* @__PURE__ */
|
3170
|
+
return renderRoot(el, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Icon, {
|
2806
3171
|
icon: "ph--caret-right--bold",
|
2807
3172
|
size: 3,
|
2808
3173
|
classNames: [
|
@@ -2812,7 +3177,7 @@ var folding = (_props = {}) => [
|
|
2812
3177
|
}));
|
2813
3178
|
}
|
2814
3179
|
}),
|
2815
|
-
|
3180
|
+
import_view19.EditorView.theme({
|
2816
3181
|
".cm-foldGutter": {
|
2817
3182
|
opacity: 0.3,
|
2818
3183
|
transition: "opacity 0.3s",
|
@@ -2823,11 +3188,51 @@ var folding = (_props = {}) => [
|
|
2823
3188
|
}
|
2824
3189
|
})
|
2825
3190
|
];
|
3191
|
+
var TagWidget = class extends import_view20.WidgetType {
|
3192
|
+
constructor(_text) {
|
3193
|
+
super(), this._text = _text;
|
3194
|
+
}
|
3195
|
+
toDOM() {
|
3196
|
+
const span = document.createElement("span");
|
3197
|
+
span.className = (0, import_react_ui_theme6.mx)("cm-tag", (0, import_react_ui_theme6.getHashColor)(this._text).tag);
|
3198
|
+
span.textContent = this._text;
|
3199
|
+
return span;
|
3200
|
+
}
|
3201
|
+
};
|
3202
|
+
var tagMatcher = new import_view20.MatchDecorator({
|
3203
|
+
regexp: /#(\w+)\W/g,
|
3204
|
+
decoration: (match) => import_view20.Decoration.replace({
|
3205
|
+
widget: new TagWidget(match[1])
|
3206
|
+
})
|
3207
|
+
});
|
3208
|
+
var hashtag = () => [
|
3209
|
+
import_view20.ViewPlugin.fromClass(class {
|
3210
|
+
constructor(view) {
|
3211
|
+
this.tags = tagMatcher.createDeco(view);
|
3212
|
+
}
|
3213
|
+
update(update2) {
|
3214
|
+
this.tags = tagMatcher.updateDeco(update2, this.tags);
|
3215
|
+
}
|
3216
|
+
}, {
|
3217
|
+
decorations: (instance) => instance.tags,
|
3218
|
+
provide: (plugin) => import_view20.EditorView.atomicRanges.of((view) => {
|
3219
|
+
return view.plugin(plugin)?.tags || import_view20.Decoration.none;
|
3220
|
+
})
|
3221
|
+
}),
|
3222
|
+
import_view20.EditorView.theme({
|
3223
|
+
".cm-tag": {
|
3224
|
+
borderRadius: "4px",
|
3225
|
+
marginRight: "6px",
|
3226
|
+
padding: "2px 6px"
|
3227
|
+
}
|
3228
|
+
})
|
3229
|
+
];
|
2826
3230
|
var createJsonExtensions = ({ schema } = {}) => {
|
2827
3231
|
let lintSource = (0, import_lang_json.jsonParseLinter)();
|
2828
3232
|
if (schema) {
|
2829
3233
|
const ajv = new import_ajv.default({
|
2830
|
-
allErrors: false
|
3234
|
+
allErrors: false,
|
3235
|
+
strict: false
|
2831
3236
|
});
|
2832
3237
|
const validate = ajv.compile(schema);
|
2833
3238
|
lintSource = schemaLinter(validate);
|
@@ -2864,11 +3269,11 @@ var schemaLinter = (validate) => (view) => {
|
|
2864
3269
|
};
|
2865
3270
|
var listener = ({ onFocus, onChange }) => {
|
2866
3271
|
const extensions = [];
|
2867
|
-
onFocus && extensions.push(
|
3272
|
+
onFocus && extensions.push(import_view21.EditorView.focusChangeEffect.of((_, focusing) => {
|
2868
3273
|
onFocus(focusing);
|
2869
3274
|
return null;
|
2870
3275
|
}));
|
2871
|
-
onChange && extensions.push(
|
3276
|
+
onChange && extensions.push(import_view21.EditorView.updateListener.of((update2) => {
|
2872
3277
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
2873
3278
|
}));
|
2874
3279
|
return extensions;
|
@@ -2991,7 +3396,7 @@ var setStyle = (type, enable) => {
|
|
2991
3396
|
to: range.head + found + marker.length
|
2992
3397
|
}
|
2993
3398
|
],
|
2994
|
-
range:
|
3399
|
+
range: import_state18.EditorSelection.cursor(range.from - marker.length)
|
2995
3400
|
};
|
2996
3401
|
}
|
2997
3402
|
}
|
@@ -3119,13 +3524,13 @@ var setStyle = (type, enable) => {
|
|
3119
3524
|
from: range.head,
|
3120
3525
|
insert: marker + marker
|
3121
3526
|
},
|
3122
|
-
range:
|
3527
|
+
range: import_state18.EditorSelection.cursor(range.head + marker.length)
|
3123
3528
|
};
|
3124
3529
|
}
|
3125
3530
|
const changeSet = state.changes(changes2.concat(changesAtEnd));
|
3126
3531
|
return {
|
3127
3532
|
changes: changeSet,
|
3128
|
-
range: range.empty && !changeSet.empty ?
|
3533
|
+
range: range.empty && !changeSet.empty ? import_state18.EditorSelection.cursor(range.head + marker.length) : import_state18.EditorSelection.range(changeSet.mapPos(range.from, 1), changeSet.mapPos(range.to, -1))
|
3129
3534
|
};
|
3130
3535
|
});
|
3131
3536
|
dispatch(state.update(changes, {
|
@@ -3325,7 +3730,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3325
3730
|
const changeSet = state.changes(changes2.concat(changesAfter));
|
3326
3731
|
return {
|
3327
3732
|
changes: changeSet,
|
3328
|
-
range:
|
3733
|
+
range: import_state18.EditorSelection.cursor(changeSet.mapPos(to, 1) - cursorOffset - (url ? url.length + 2 : 0))
|
3329
3734
|
};
|
3330
3735
|
});
|
3331
3736
|
if (changes.changes.empty) {
|
@@ -3759,7 +4164,7 @@ var toggleCodeblock = (target) => {
|
|
3759
4164
|
};
|
3760
4165
|
var formattingKeymap = (_options = {}) => {
|
3761
4166
|
return [
|
3762
|
-
|
4167
|
+
import_view22.keymap.of([
|
3763
4168
|
{
|
3764
4169
|
key: "meta-b",
|
3765
4170
|
run: toggleStrong
|
@@ -3960,7 +4365,7 @@ var getFormatting = (state) => {
|
|
3960
4365
|
};
|
3961
4366
|
};
|
3962
4367
|
var useFormattingState = (state) => {
|
3963
|
-
return (0,
|
4368
|
+
return (0, import_react7.useMemo)(() => import_view22.EditorView.updateListener.of((update2) => {
|
3964
4369
|
if (update2.docChanged || update2.selectionSet) {
|
3965
4370
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
3966
4371
|
state[key] = active;
|
@@ -4212,7 +4617,7 @@ var createMarkdownExtensions = (options = {}) => {
|
|
4212
4617
|
}),
|
4213
4618
|
// Custom styles.
|
4214
4619
|
(0, import_language5.syntaxHighlighting)(markdownHighlightStyle()),
|
4215
|
-
|
4620
|
+
import_view23.keymap.of([
|
4216
4621
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
4217
4622
|
options.indentWithTab !== false && import_commands3.indentWithTab,
|
4218
4623
|
// https://codemirror.net/docs/ref/#commands.defaultKeymap
|
@@ -4222,7 +4627,7 @@ var createMarkdownExtensions = (options = {}) => {
|
|
4222
4627
|
].filter(import_util5.isNotFalsy))
|
4223
4628
|
];
|
4224
4629
|
};
|
4225
|
-
var debugTree = (cb) =>
|
4630
|
+
var debugTree = (cb) => import_state19.StateField.define({
|
4226
4631
|
create: (state) => cb(convertTreeToJson(state)),
|
4227
4632
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
4228
4633
|
});
|
@@ -4246,12 +4651,12 @@ var convertTreeToJson = (state) => {
|
|
4246
4651
|
return treeToJson((0, import_language7.syntaxTree)(state).cursor());
|
4247
4652
|
};
|
4248
4653
|
var adjustChanges = () => {
|
4249
|
-
return
|
4654
|
+
return import_view25.ViewPlugin.fromClass(class {
|
4250
4655
|
update(update2) {
|
4251
4656
|
const tree = (0, import_language9.syntaxTree)(update2.state);
|
4252
4657
|
const adjustments = [];
|
4253
4658
|
for (const tr of update2.transactions) {
|
4254
|
-
const event = tr.annotation(
|
4659
|
+
const event = tr.annotation(import_state21.Transaction.userEvent);
|
4255
4660
|
switch (event) {
|
4256
4661
|
//
|
4257
4662
|
// Enter
|
@@ -4386,9 +4791,9 @@ var getValidUrl = (str) => {
|
|
4386
4791
|
};
|
4387
4792
|
var image = (_options = {}) => {
|
4388
4793
|
return [
|
4389
|
-
|
4794
|
+
import_state22.StateField.define({
|
4390
4795
|
create: (state) => {
|
4391
|
-
return
|
4796
|
+
return import_view26.Decoration.set(buildDecorations(0, state.doc.length, state));
|
4392
4797
|
},
|
4393
4798
|
update: (value, tr) => {
|
4394
4799
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4411,7 +4816,7 @@ var image = (_options = {}) => {
|
|
4411
4816
|
add: buildDecorations(from, to, tr.state)
|
4412
4817
|
});
|
4413
4818
|
},
|
4414
|
-
provide: (field) =>
|
4819
|
+
provide: (field) => import_view26.EditorView.decorations.from(field)
|
4415
4820
|
})
|
4416
4821
|
];
|
4417
4822
|
};
|
@@ -4429,7 +4834,7 @@ var buildDecorations = (from, to, state) => {
|
|
4429
4834
|
return;
|
4430
4835
|
}
|
4431
4836
|
preloadImage(url);
|
4432
|
-
decorations2.push(
|
4837
|
+
decorations2.push(import_view26.Decoration.replace({
|
4433
4838
|
block: true,
|
4434
4839
|
widget: new ImageWidget(url)
|
4435
4840
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4449,7 +4854,7 @@ var preloadImage = (url) => {
|
|
4449
4854
|
preloaded.add(url);
|
4450
4855
|
}
|
4451
4856
|
};
|
4452
|
-
var ImageWidget = class extends
|
4857
|
+
var ImageWidget = class extends import_view26.WidgetType {
|
4453
4858
|
constructor(_url) {
|
4454
4859
|
super(), this._url = _url;
|
4455
4860
|
}
|
@@ -4470,7 +4875,7 @@ var ImageWidget = class extends import_view23.WidgetType {
|
|
4470
4875
|
};
|
4471
4876
|
var bulletListIndentationWidth = 24;
|
4472
4877
|
var orderedListIndentationWidth = 36;
|
4473
|
-
var formattingStyles =
|
4878
|
+
var formattingStyles = import_view27.EditorView.theme({
|
4474
4879
|
/**
|
4475
4880
|
* Horizontal rule.
|
4476
4881
|
*/
|
@@ -4589,14 +4994,14 @@ var formattingStyles = import_view24.EditorView.theme({
|
|
4589
4994
|
}
|
4590
4995
|
});
|
4591
4996
|
var table = (options = {}) => {
|
4592
|
-
return
|
4997
|
+
return import_state23.StateField.define({
|
4593
4998
|
create: (state) => update(state, options),
|
4594
4999
|
update: (_, tr) => update(tr.state, options),
|
4595
|
-
provide: (field) =>
|
5000
|
+
provide: (field) => import_view28.EditorView.decorations.from(field)
|
4596
5001
|
});
|
4597
5002
|
};
|
4598
5003
|
var update = (state, _options) => {
|
4599
|
-
const builder = new
|
5004
|
+
const builder = new import_state23.RangeSetBuilder();
|
4600
5005
|
const cursor = state.selection.main.head;
|
4601
5006
|
const tables = [];
|
4602
5007
|
const getTable = () => tables[tables.length - 1];
|
@@ -4637,19 +5042,19 @@ var update = (state, _options) => {
|
|
4637
5042
|
tables.forEach((table2) => {
|
4638
5043
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4639
5044
|
if (replace) {
|
4640
|
-
builder.add(table2.from, table2.to,
|
5045
|
+
builder.add(table2.from, table2.to, import_view28.Decoration.replace({
|
4641
5046
|
block: true,
|
4642
5047
|
widget: new TableWidget(table2)
|
4643
5048
|
}));
|
4644
5049
|
} else {
|
4645
|
-
builder.add(table2.from, table2.to,
|
5050
|
+
builder.add(table2.from, table2.to, import_view28.Decoration.mark({
|
4646
5051
|
class: "cm-table"
|
4647
5052
|
}));
|
4648
5053
|
}
|
4649
5054
|
});
|
4650
5055
|
return builder.finish();
|
4651
5056
|
};
|
4652
|
-
var TableWidget = class extends
|
5057
|
+
var TableWidget = class extends import_view28.WidgetType {
|
4653
5058
|
constructor(_table) {
|
4654
5059
|
super(), this._table = _table;
|
4655
5060
|
}
|
@@ -4688,14 +5093,14 @@ var Unicode = {
|
|
4688
5093
|
bulletSmall: "\u2219",
|
4689
5094
|
bulletSquare: "\u2B1D"
|
4690
5095
|
};
|
4691
|
-
var HorizontalRuleWidget = class extends
|
5096
|
+
var HorizontalRuleWidget = class extends import_view24.WidgetType {
|
4692
5097
|
toDOM() {
|
4693
5098
|
const el = document.createElement("span");
|
4694
5099
|
el.className = "cm-hr";
|
4695
5100
|
return el;
|
4696
5101
|
}
|
4697
5102
|
};
|
4698
|
-
var LinkButton = class extends
|
5103
|
+
var LinkButton = class extends import_view24.WidgetType {
|
4699
5104
|
constructor(url, render) {
|
4700
5105
|
super(), this.url = url, this.render = render;
|
4701
5106
|
}
|
@@ -4711,7 +5116,7 @@ var LinkButton = class extends import_view21.WidgetType {
|
|
4711
5116
|
return el;
|
4712
5117
|
}
|
4713
5118
|
};
|
4714
|
-
var CheckboxWidget = class extends
|
5119
|
+
var CheckboxWidget = class extends import_view24.WidgetType {
|
4715
5120
|
constructor(_checked) {
|
4716
5121
|
super(), this._checked = _checked;
|
4717
5122
|
}
|
@@ -4755,7 +5160,7 @@ var CheckboxWidget = class extends import_view21.WidgetType {
|
|
4755
5160
|
return false;
|
4756
5161
|
}
|
4757
5162
|
};
|
4758
|
-
var TextWidget = class extends
|
5163
|
+
var TextWidget = class extends import_view24.WidgetType {
|
4759
5164
|
constructor(text, className) {
|
4760
5165
|
super(), this.text = text, this.className = className;
|
4761
5166
|
}
|
@@ -4768,29 +5173,29 @@ var TextWidget = class extends import_view21.WidgetType {
|
|
4768
5173
|
return el;
|
4769
5174
|
}
|
4770
5175
|
};
|
4771
|
-
var hide =
|
4772
|
-
var blockQuote =
|
5176
|
+
var hide = import_view24.Decoration.replace({});
|
5177
|
+
var blockQuote = import_view24.Decoration.line({
|
4773
5178
|
class: "cm-blockquote"
|
4774
5179
|
});
|
4775
|
-
var fencedCodeLine =
|
5180
|
+
var fencedCodeLine = import_view24.Decoration.line({
|
4776
5181
|
class: "cm-code cm-codeblock-line"
|
4777
5182
|
});
|
4778
|
-
var fencedCodeLineFirst =
|
4779
|
-
class: (0,
|
5183
|
+
var fencedCodeLineFirst = import_view24.Decoration.line({
|
5184
|
+
class: (0, import_react_ui_theme7.mx)("cm-code cm-codeblock-line", "cm-codeblock-start")
|
4780
5185
|
});
|
4781
|
-
var fencedCodeLineLast =
|
4782
|
-
class: (0,
|
5186
|
+
var fencedCodeLineLast = import_view24.Decoration.line({
|
5187
|
+
class: (0, import_react_ui_theme7.mx)("cm-code cm-codeblock-line", "cm-codeblock-end")
|
4783
5188
|
});
|
4784
5189
|
var commentBlockLine = fencedCodeLine;
|
4785
5190
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4786
5191
|
var commentBlockLineLast = fencedCodeLineLast;
|
4787
|
-
var horizontalRule =
|
5192
|
+
var horizontalRule = import_view24.Decoration.replace({
|
4788
5193
|
widget: new HorizontalRuleWidget()
|
4789
5194
|
});
|
4790
|
-
var checkedTask =
|
5195
|
+
var checkedTask = import_view24.Decoration.replace({
|
4791
5196
|
widget: new CheckboxWidget(true)
|
4792
5197
|
});
|
4793
|
-
var uncheckedTask =
|
5198
|
+
var uncheckedTask = import_view24.Decoration.replace({
|
4794
5199
|
widget: new CheckboxWidget(false)
|
4795
5200
|
});
|
4796
5201
|
var editingRange = (state, range, focus2) => {
|
@@ -4806,8 +5211,8 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4806
5211
|
"SuperscriptMark"
|
4807
5212
|
]);
|
4808
5213
|
var buildDecorations2 = (view, options, focus2) => {
|
4809
|
-
const deco = new
|
4810
|
-
const atomicDeco = new
|
5214
|
+
const deco = new import_state20.RangeSetBuilder();
|
5215
|
+
const atomicDeco = new import_state20.RangeSetBuilder();
|
4811
5216
|
const { state } = view;
|
4812
5217
|
const headerLevels = [];
|
4813
5218
|
const getHeaderLevels = (node, level) => {
|
@@ -4894,7 +5299,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4894
5299
|
} else {
|
4895
5300
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
4896
5301
|
if (num.length) {
|
4897
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5302
|
+
atomicDeco.add(mark.from, mark.from + len, import_view24.Decoration.replace({
|
4898
5303
|
widget: new TextWidget(num, theme.heading(level))
|
4899
5304
|
}));
|
4900
5305
|
}
|
@@ -4919,7 +5324,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4919
5324
|
if (node.from === line.to - 1) {
|
4920
5325
|
return false;
|
4921
5326
|
}
|
4922
|
-
deco.add(line.from, line.from,
|
5327
|
+
deco.add(line.from, line.from, import_view24.Decoration.line({
|
4923
5328
|
class: "cm-list-item",
|
4924
5329
|
attributes: {
|
4925
5330
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -4936,7 +5341,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4936
5341
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
4937
5342
|
const line = state.doc.lineAt(node.from);
|
4938
5343
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
4939
|
-
atomicDeco.add(line.from, to,
|
5344
|
+
atomicDeco.add(line.from, to, import_view24.Decoration.replace({
|
4940
5345
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
4941
5346
|
}));
|
4942
5347
|
break;
|
@@ -5023,7 +5428,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5023
5428
|
if (!editing) {
|
5024
5429
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5025
5430
|
}
|
5026
|
-
deco.add(marks[0].to, marks[1].from,
|
5431
|
+
deco.add(marks[0].to, marks[1].from, import_view24.Decoration.mark({
|
5027
5432
|
tagName: "a",
|
5028
5433
|
attributes: {
|
5029
5434
|
class: "cm-link",
|
@@ -5033,7 +5438,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5033
5438
|
}
|
5034
5439
|
}));
|
5035
5440
|
if (!editing) {
|
5036
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5441
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? import_view24.Decoration.replace({
|
5037
5442
|
widget: new LinkButton(url, options.renderLinkButton)
|
5038
5443
|
}) : hide);
|
5039
5444
|
}
|
@@ -5088,10 +5493,10 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5088
5493
|
atomicDeco: atomicDeco.finish()
|
5089
5494
|
};
|
5090
5495
|
};
|
5091
|
-
var forceUpdate =
|
5496
|
+
var forceUpdate = import_state20.StateEffect.define();
|
5092
5497
|
var decorateMarkdown = (options = {}) => {
|
5093
5498
|
return [
|
5094
|
-
|
5499
|
+
import_view24.ViewPlugin.fromClass(class {
|
5095
5500
|
constructor(view) {
|
5096
5501
|
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
|
5097
5502
|
}
|
@@ -5123,9 +5528,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5123
5528
|
}
|
5124
5529
|
}, {
|
5125
5530
|
provide: (plugin) => [
|
5126
|
-
|
5127
|
-
|
5128
|
-
|
5531
|
+
import_view24.EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view24.Decoration.none),
|
5532
|
+
import_view24.EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view24.Decoration.none),
|
5533
|
+
import_view24.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view24.Decoration.none)
|
5129
5534
|
]
|
5130
5535
|
}),
|
5131
5536
|
image(),
|
@@ -5135,7 +5540,7 @@ var decorateMarkdown = (options = {}) => {
|
|
5135
5540
|
];
|
5136
5541
|
};
|
5137
5542
|
var linkTooltip = (renderTooltip) => {
|
5138
|
-
return (0,
|
5543
|
+
return (0, import_view29.hoverTooltip)((view, pos, side) => {
|
5139
5544
|
const syntax = (0, import_language12.syntaxTree)(view.state).resolveInner(pos, side);
|
5140
5545
|
let link = null;
|
5141
5546
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
@@ -5153,7 +5558,7 @@ var linkTooltip = (renderTooltip) => {
|
|
5153
5558
|
// above: true,
|
5154
5559
|
create: () => {
|
5155
5560
|
const el = document.createElement("div");
|
5156
|
-
el.className = (0,
|
5561
|
+
el.className = (0, import_react_ui_theme8.tooltipContent)({});
|
5157
5562
|
renderTooltip(el, {
|
5158
5563
|
url: urlText
|
5159
5564
|
}, view);
|
@@ -5225,7 +5630,7 @@ var InputModeExtensions = {
|
|
5225
5630
|
editorInputMode.of({
|
5226
5631
|
type: "vscode"
|
5227
5632
|
}),
|
5228
|
-
|
5633
|
+
import_view30.keymap.of(import_codemirror_vscode_keymap.vscodeKeymap)
|
5229
5634
|
],
|
5230
5635
|
vim: [
|
5231
5636
|
// https://github.com/replit/codemirror-vim
|
@@ -5234,7 +5639,7 @@ var InputModeExtensions = {
|
|
5234
5639
|
type: "vim",
|
5235
5640
|
noTabster: true
|
5236
5641
|
}),
|
5237
|
-
|
5642
|
+
import_view30.keymap.of([
|
5238
5643
|
{
|
5239
5644
|
key: "Alt-Escape",
|
5240
5645
|
run: (view) => {
|
@@ -5374,7 +5779,7 @@ var format = (value) => JSON.stringify(value, (key, value2) => {
|
|
5374
5779
|
}
|
5375
5780
|
return value2;
|
5376
5781
|
}).replaceAll('"', "");
|
5377
|
-
var treeFacet =
|
5782
|
+
var treeFacet = import_state27.Facet.define({
|
5378
5783
|
combine: (values) => values[0]
|
5379
5784
|
});
|
5380
5785
|
var outlinerTree = (options = {}) => {
|
@@ -5523,7 +5928,7 @@ var outlinerTree = (options = {}) => {
|
|
5523
5928
|
return tree;
|
5524
5929
|
};
|
5525
5930
|
return [
|
5526
|
-
|
5931
|
+
import_state26.StateField.define({
|
5527
5932
|
create: (state) => {
|
5528
5933
|
return buildTree(state);
|
5529
5934
|
},
|
@@ -5539,10 +5944,10 @@ var outlinerTree = (options = {}) => {
|
|
5539
5944
|
};
|
5540
5945
|
var getSelection = (state) => state.selection.main;
|
5541
5946
|
var selectionEquals = (a, b) => a.length === b.length && a.every((i) => b.includes(i));
|
5542
|
-
var selectionFacet =
|
5947
|
+
var selectionFacet = import_state25.Facet.define({
|
5543
5948
|
combine: (values) => values[0]
|
5544
5949
|
});
|
5545
|
-
var selectionCompartment = new
|
5950
|
+
var selectionCompartment = new import_state25.Compartment();
|
5546
5951
|
var selectNone = (view) => {
|
5547
5952
|
view.dispatch({
|
5548
5953
|
effects: selectionCompartment.reconfigure(selectionFacet.of([]))
|
@@ -5623,7 +6028,7 @@ var moveItemDown = (view) => {
|
|
5623
6028
|
];
|
5624
6029
|
view.dispatch({
|
5625
6030
|
changes,
|
5626
|
-
selection:
|
6031
|
+
selection: import_state24.EditorSelection.cursor(pos + nextContent.length + 1),
|
5627
6032
|
scrollIntoView: true
|
5628
6033
|
});
|
5629
6034
|
}
|
@@ -5651,7 +6056,7 @@ var moveItemUp = (view) => {
|
|
5651
6056
|
];
|
5652
6057
|
view.dispatch({
|
5653
6058
|
changes,
|
5654
|
-
selection:
|
6059
|
+
selection: import_state24.EditorSelection.cursor(pos - prevContent.length - 1),
|
5655
6060
|
scrollIntoView: true
|
5656
6061
|
});
|
5657
6062
|
}
|
@@ -5663,7 +6068,7 @@ var deleteItem = (view) => {
|
|
5663
6068
|
const current = tree.find(pos);
|
5664
6069
|
if (current) {
|
5665
6070
|
view.dispatch({
|
5666
|
-
selection:
|
6071
|
+
selection: import_state24.EditorSelection.cursor(current.lineRange.from),
|
5667
6072
|
changes: [
|
5668
6073
|
{
|
5669
6074
|
from: current.lineRange.from,
|
@@ -5693,7 +6098,7 @@ var toggleTask = (view) => {
|
|
5693
6098
|
}
|
5694
6099
|
return true;
|
5695
6100
|
};
|
5696
|
-
var commands = () =>
|
6101
|
+
var commands = () => import_view31.keymap.of([
|
5697
6102
|
//
|
5698
6103
|
// Indentation.
|
5699
6104
|
//
|
@@ -5719,7 +6124,7 @@ var commands = () => import_view28.keymap.of([
|
|
5719
6124
|
insert
|
5720
6125
|
}
|
5721
6126
|
],
|
5722
|
-
selection:
|
6127
|
+
selection: import_state24.EditorSelection.cursor(pos + insert.length)
|
5723
6128
|
});
|
5724
6129
|
return true;
|
5725
6130
|
}
|
@@ -5737,7 +6142,7 @@ var commands = () => import_view28.keymap.of([
|
|
5737
6142
|
const next = tree.next(item);
|
5738
6143
|
if (next) {
|
5739
6144
|
view.dispatch({
|
5740
|
-
selection:
|
6145
|
+
selection: import_state24.EditorSelection.cursor(next.contentRange.from)
|
5741
6146
|
});
|
5742
6147
|
return true;
|
5743
6148
|
}
|
@@ -5800,7 +6205,7 @@ var commands = () => import_view28.keymap.of([
|
|
5800
6205
|
var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/outliner/editor.ts";
|
5801
6206
|
var LIST_ITEM_REGEX = /^\s*- (\[ \]|\[x\])? /;
|
5802
6207
|
var initialize = () => {
|
5803
|
-
return
|
6208
|
+
return import_view33.ViewPlugin.fromClass(class {
|
5804
6209
|
constructor(view) {
|
5805
6210
|
const first = view.state.doc.lineAt(0);
|
5806
6211
|
const text = view.state.sliceDoc(first.from, first.to);
|
@@ -5816,7 +6221,7 @@ var initialize = () => {
|
|
5816
6221
|
insert
|
5817
6222
|
}
|
5818
6223
|
],
|
5819
|
-
selection:
|
6224
|
+
selection: import_state29.EditorSelection.cursor(insert.length)
|
5820
6225
|
});
|
5821
6226
|
});
|
5822
6227
|
}
|
@@ -5825,7 +6230,7 @@ var initialize = () => {
|
|
5825
6230
|
};
|
5826
6231
|
var editor = () => [
|
5827
6232
|
initialize(),
|
5828
|
-
|
6233
|
+
import_state29.EditorState.transactionFilter.of((tr) => {
|
5829
6234
|
const tree = tr.state.facet(treeFacet);
|
5830
6235
|
if (!tr.docChanged) {
|
5831
6236
|
const current = getSelection(tr.state).from;
|
@@ -5840,20 +6245,20 @@ var editor = () => [
|
|
5840
6245
|
if (!prevItem) {
|
5841
6246
|
return [
|
5842
6247
|
{
|
5843
|
-
selection:
|
6248
|
+
selection: import_state29.EditorSelection.cursor(currentItem.contentRange.from)
|
5844
6249
|
}
|
5845
6250
|
];
|
5846
6251
|
} else {
|
5847
6252
|
if (currentItem.index < prevItem.index) {
|
5848
6253
|
return [
|
5849
6254
|
{
|
5850
|
-
selection:
|
6255
|
+
selection: import_state29.EditorSelection.cursor(currentItem.contentRange.to)
|
5851
6256
|
}
|
5852
6257
|
];
|
5853
6258
|
} else if (currentItem.index > prevItem.index) {
|
5854
6259
|
return [
|
5855
6260
|
{
|
5856
|
-
selection:
|
6261
|
+
selection: import_state29.EditorSelection.cursor(currentItem.contentRange.from)
|
5857
6262
|
}
|
5858
6263
|
];
|
5859
6264
|
} else {
|
@@ -5863,14 +6268,14 @@ var editor = () => [
|
|
5863
6268
|
} else {
|
5864
6269
|
return [
|
5865
6270
|
{
|
5866
|
-
selection:
|
6271
|
+
selection: import_state29.EditorSelection.cursor(currentItem.lineRange.from - 1)
|
5867
6272
|
}
|
5868
6273
|
];
|
5869
6274
|
}
|
5870
6275
|
} else {
|
5871
6276
|
return [
|
5872
6277
|
{
|
5873
|
-
selection:
|
6278
|
+
selection: import_state29.EditorSelection.cursor(currentItem.contentRange.to)
|
5874
6279
|
}
|
5875
6280
|
];
|
5876
6281
|
}
|
@@ -5983,7 +6388,7 @@ var editor = () => [
|
|
5983
6388
|
];
|
5984
6389
|
var outliner = (options = {}) => [
|
5985
6390
|
// Commands.
|
5986
|
-
|
6391
|
+
import_state28.Prec.highest(commands()),
|
5987
6392
|
// Selection.
|
5988
6393
|
selectionCompartment.of(selectionFacet.of([])),
|
5989
6394
|
// State.
|
@@ -5993,20 +6398,20 @@ var outliner = (options = {}) => [
|
|
5993
6398
|
// Floating menu.
|
5994
6399
|
floatingMenu(),
|
5995
6400
|
// Line decorations.
|
5996
|
-
decorations(
|
6401
|
+
decorations(),
|
5997
6402
|
// Default markdown decorations.
|
5998
6403
|
decorateMarkdown({
|
5999
6404
|
listPaddingLeft: 8
|
6000
6405
|
}),
|
6001
6406
|
// Researve space for menu.
|
6002
|
-
|
6407
|
+
import_view32.EditorView.contentAttributes.of({
|
6003
6408
|
class: "is-full !mr-[3rem]"
|
6004
6409
|
})
|
6005
6410
|
];
|
6006
|
-
var decorations = (
|
6007
|
-
|
6411
|
+
var decorations = () => [
|
6412
|
+
import_view32.ViewPlugin.fromClass(class {
|
6008
6413
|
constructor(view) {
|
6009
|
-
this.decorations =
|
6414
|
+
this.decorations = import_view32.Decoration.none;
|
6010
6415
|
this.updateDecorations(view.state, view);
|
6011
6416
|
}
|
6012
6417
|
update(update2) {
|
@@ -6028,18 +6433,18 @@ var decorations = (options) => [
|
|
6028
6433
|
const lineFrom = doc.lineAt(item.contentRange.from);
|
6029
6434
|
const lineTo = doc.lineAt(item.contentRange.to);
|
6030
6435
|
const isSelected = selection.includes(item.index) || item === current;
|
6031
|
-
decorations2.push(
|
6032
|
-
class: (0,
|
6436
|
+
decorations2.push(import_view32.Decoration.line({
|
6437
|
+
class: (0, import_react_ui_theme9.mx)("cm-list-item", lineFrom.number === line.number && "cm-list-item-start", lineTo.number === line.number && "cm-list-item-end", isSelected && (hasFocus ? "cm-list-item-focused" : "cm-list-item-selected"))
|
6033
6438
|
}).range(line.from, line.from));
|
6034
6439
|
}
|
6035
6440
|
}
|
6036
|
-
this.decorations =
|
6441
|
+
this.decorations = import_view32.Decoration.set(decorations2);
|
6037
6442
|
}
|
6038
6443
|
}, {
|
6039
6444
|
decorations: (v) => v.decorations
|
6040
6445
|
}),
|
6041
6446
|
// Theme.
|
6042
|
-
|
6447
|
+
import_view32.EditorView.theme(Object.assign({
|
6043
6448
|
".cm-list-item": {
|
6044
6449
|
borderLeftWidth: "1px",
|
6045
6450
|
borderRightWidth: "1px",
|
@@ -6063,11 +6468,11 @@ var decorations = (options) => [
|
|
6063
6468
|
paddingBottom: "4px",
|
6064
6469
|
marginBottom: "2px"
|
6065
6470
|
},
|
6066
|
-
".cm-list-item-selected": {
|
6067
|
-
borderColor: options.showSelected ? "var(--dx-separator)" : void 0
|
6068
|
-
},
|
6069
6471
|
".cm-list-item-focused": {
|
6070
6472
|
borderColor: "var(--dx-accentFocusIndicator)"
|
6473
|
+
},
|
6474
|
+
"[data-has-focus] & .cm-list-item-selected": {
|
6475
|
+
borderColor: "var(--dx-separator)"
|
6071
6476
|
}
|
6072
6477
|
}))
|
6073
6478
|
];
|
@@ -6075,22 +6480,19 @@ var preview = (options = {}) => {
|
|
6075
6480
|
return [
|
6076
6481
|
// NOTE: Atomic block decorations must be created from a state field, now a widget, otherwise it results in the following error:
|
6077
6482
|
// "Block decorations may not be specified via plugins"
|
6078
|
-
|
6483
|
+
import_state30.StateField.define({
|
6079
6484
|
create: (state) => buildDecorations3(state, options),
|
6080
6485
|
update: (_, tr) => buildDecorations3(tr.state, options),
|
6081
6486
|
provide: (field) => [
|
6082
|
-
|
6083
|
-
|
6487
|
+
import_view34.EditorView.decorations.from(field),
|
6488
|
+
import_view34.EditorView.atomicRanges.of((view) => view.state.field(field))
|
6084
6489
|
]
|
6085
6490
|
}),
|
6086
|
-
|
6491
|
+
import_view34.EditorView.theme({
|
6087
6492
|
".cm-preview-block": {
|
6088
|
-
|
6089
|
-
|
6090
|
-
|
6091
|
-
borderRadius: "0.5rem",
|
6092
|
-
background: "var(--dx-modalSurface)",
|
6093
|
-
border: "1px solid var(--dx-separator)"
|
6493
|
+
"--dx-card-spacing-inline": "var(--dx-trimMd)",
|
6494
|
+
"--dx-card-spacing-block": "var(--dx-trimMd)",
|
6495
|
+
marginInline: "calc(-1*var(--dx-trimMd))"
|
6094
6496
|
}
|
6095
6497
|
})
|
6096
6498
|
];
|
@@ -6109,7 +6511,7 @@ var getLinkRef = (state, node) => {
|
|
6109
6511
|
}
|
6110
6512
|
};
|
6111
6513
|
var buildDecorations3 = (state, options) => {
|
6112
|
-
const builder = new
|
6514
|
+
const builder = new import_state30.RangeSetBuilder();
|
6113
6515
|
(0, import_language15.syntaxTree)(state).iterate({
|
6114
6516
|
enter: (node) => {
|
6115
6517
|
switch (node.name) {
|
@@ -6120,7 +6522,7 @@ var buildDecorations3 = (state, options) => {
|
|
6120
6522
|
case "Link": {
|
6121
6523
|
const link = getLinkRef(state, node.node);
|
6122
6524
|
if (link) {
|
6123
|
-
builder.add(node.from, node.to,
|
6525
|
+
builder.add(node.from, node.to, import_view34.Decoration.replace({
|
6124
6526
|
widget: new PreviewInlineWidget(options, link)
|
6125
6527
|
}));
|
6126
6528
|
}
|
@@ -6133,7 +6535,7 @@ var buildDecorations3 = (state, options) => {
|
|
6133
6535
|
case "Image": {
|
6134
6536
|
const link = getLinkRef(state, node.node);
|
6135
6537
|
if (options.renderBlock && link) {
|
6136
|
-
builder.add(node.from, node.to,
|
6538
|
+
builder.add(node.from, node.to, import_view34.Decoration.replace({
|
6137
6539
|
block: true,
|
6138
6540
|
// atomic: true,
|
6139
6541
|
widget: new PreviewBlockWidget(options, link)
|
@@ -6146,7 +6548,7 @@ var buildDecorations3 = (state, options) => {
|
|
6146
6548
|
});
|
6147
6549
|
return builder.finish();
|
6148
6550
|
};
|
6149
|
-
var PreviewInlineWidget = class extends
|
6551
|
+
var PreviewInlineWidget = class extends import_view34.WidgetType {
|
6150
6552
|
constructor(_options, _link) {
|
6151
6553
|
super(), this._options = _options, this._link = _link;
|
6152
6554
|
}
|
@@ -6163,7 +6565,7 @@ var PreviewInlineWidget = class extends import_view31.WidgetType {
|
|
6163
6565
|
return root;
|
6164
6566
|
}
|
6165
6567
|
};
|
6166
|
-
var PreviewBlockWidget = class extends
|
6568
|
+
var PreviewBlockWidget = class extends import_view34.WidgetType {
|
6167
6569
|
constructor(_options, _link) {
|
6168
6570
|
super(), this._options = _options, this._link = _link;
|
6169
6571
|
}
|
@@ -6229,7 +6631,7 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
6229
6631
|
let t;
|
6230
6632
|
let idx = 0;
|
6231
6633
|
return [
|
6232
|
-
|
6634
|
+
import_view35.keymap.of([
|
6233
6635
|
{
|
6234
6636
|
// Reset.
|
6235
6637
|
key: "alt-meta-'",
|
@@ -6556,28 +6958,6 @@ var createViewMode = (state, onViewModeChange) => {
|
|
6556
6958
|
]
|
6557
6959
|
};
|
6558
6960
|
};
|
6559
|
-
var editorWidth = "!mli-auto is-full max-is-[min(50rem,100%-4rem)]";
|
6560
|
-
var editorSlots = {
|
6561
|
-
scroll: {
|
6562
|
-
className: "pbs-2"
|
6563
|
-
},
|
6564
|
-
content: {
|
6565
|
-
className: editorWidth
|
6566
|
-
}
|
6567
|
-
};
|
6568
|
-
var editorGutter = import_view33.EditorView.theme({
|
6569
|
-
".cm-gutters": {
|
6570
|
-
paddingRight: "1rem"
|
6571
|
-
}
|
6572
|
-
});
|
6573
|
-
var editorMonospace = import_view33.EditorView.theme({
|
6574
|
-
".cm-content": {
|
6575
|
-
fontFamily: fontMono
|
6576
|
-
}
|
6577
|
-
});
|
6578
|
-
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
6579
|
-
var stackItemContentEditorClassNames = (role) => (0, import_react_ui_theme8.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");
|
6580
|
-
var stackItemContentToolbarClassNames = (role) => (0, import_react_ui_theme8.mx)("relative z-[1] flex is-full bg-toolbarSurface border-be border-subduedSeparator", role === "section" && "sticky block-start-0 -mbe-px min-is-0");
|
6581
6961
|
var createToolbar = ({ getView, state, customActions, ...features }) => {
|
6582
6962
|
return import_rx_react.Rx.make((get2) => {
|
6583
6963
|
const nodes = [];
|
@@ -6679,20 +7059,304 @@ var EditorToolbar = /* @__PURE__ */ (0, import_react.memo)(({ classNames, attend
|
|
6679
7059
|
_effect.f();
|
6680
7060
|
}
|
6681
7061
|
});
|
7062
|
+
var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
7063
|
+
var _effect = (0, import_tracking2.useSignals)();
|
7064
|
+
try {
|
7065
|
+
const { tx } = (0, import_react_ui4.useThemeContext)();
|
7066
|
+
const groupsWithItems = groups.filter((group) => group.items.length > 0);
|
7067
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Popover.Portal, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Popover.Content, {
|
7068
|
+
align: "start",
|
7069
|
+
onOpenAutoFocus: (event) => event.preventDefault(),
|
7070
|
+
classNames: tx("menu.content", "menu--exotic-unfocusable", {
|
7071
|
+
elevation: "positioned"
|
7072
|
+
}, [
|
7073
|
+
"max-h-[300px] overflow-y-auto"
|
7074
|
+
])
|
7075
|
+
}, /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Popover.Viewport, {
|
7076
|
+
classNames: tx("menu.viewport", "menu__viewport--exotic-unfocusable", {})
|
7077
|
+
}, /* @__PURE__ */ import_react8.default.createElement("ul", null, groupsWithItems.map((group, index) => /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, {
|
7078
|
+
key: group.id
|
7079
|
+
}, /* @__PURE__ */ import_react8.default.createElement(CommandGroup, {
|
7080
|
+
group,
|
7081
|
+
currentItem,
|
7082
|
+
onSelect
|
7083
|
+
}), index < groupsWithItems.length - 1 && /* @__PURE__ */ import_react8.default.createElement("div", {
|
7084
|
+
className: tx("menu.separator", "menu__item", {})
|
7085
|
+
})))))));
|
7086
|
+
} finally {
|
7087
|
+
_effect.f();
|
7088
|
+
}
|
7089
|
+
};
|
7090
|
+
var CommandGroup = ({ group, currentItem, onSelect }) => {
|
7091
|
+
var _effect = (0, import_tracking2.useSignals)();
|
7092
|
+
try {
|
7093
|
+
const { tx } = (0, import_react_ui4.useThemeContext)();
|
7094
|
+
const { t } = (0, import_react_ui4.useTranslation)();
|
7095
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, group.label && /* @__PURE__ */ import_react8.default.createElement("div", {
|
7096
|
+
className: tx("menu.groupLabel", "menu__group__label", {})
|
7097
|
+
}, /* @__PURE__ */ import_react8.default.createElement("span", null, (0, import_react_ui4.toLocalizedString)(group.label, t))), group.items.map((item) => /* @__PURE__ */ import_react8.default.createElement(CommandItem, {
|
7098
|
+
key: item.id,
|
7099
|
+
item,
|
7100
|
+
current: currentItem === item.id,
|
7101
|
+
onSelect
|
7102
|
+
})));
|
7103
|
+
} finally {
|
7104
|
+
_effect.f();
|
7105
|
+
}
|
7106
|
+
};
|
7107
|
+
var CommandItem = ({ item, current, onSelect }) => {
|
7108
|
+
var _effect = (0, import_tracking2.useSignals)();
|
7109
|
+
try {
|
7110
|
+
const ref = (0, import_react8.useRef)(null);
|
7111
|
+
const { tx } = (0, import_react_ui4.useThemeContext)();
|
7112
|
+
const { t } = (0, import_react_ui4.useTranslation)();
|
7113
|
+
const handleSelect = (0, import_react8.useCallback)(() => onSelect(item), [
|
7114
|
+
item,
|
7115
|
+
onSelect
|
7116
|
+
]);
|
7117
|
+
(0, import_react8.useEffect)(() => {
|
7118
|
+
if (current && ref.current) {
|
7119
|
+
ref.current.scrollIntoView({
|
7120
|
+
behavior: "smooth",
|
7121
|
+
block: "nearest"
|
7122
|
+
});
|
7123
|
+
}
|
7124
|
+
}, [
|
7125
|
+
current
|
7126
|
+
]);
|
7127
|
+
return /* @__PURE__ */ import_react8.default.createElement("li", {
|
7128
|
+
ref,
|
7129
|
+
className: tx("menu.item", "menu__item--exotic-unfocusable", {}, [
|
7130
|
+
current && "bg-hoverSurface"
|
7131
|
+
]),
|
7132
|
+
onClick: handleSelect
|
7133
|
+
}, item.icon && /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Icon, {
|
7134
|
+
icon: item.icon,
|
7135
|
+
size: 5
|
7136
|
+
}), /* @__PURE__ */ import_react8.default.createElement("span", {
|
7137
|
+
className: "grow truncate"
|
7138
|
+
}, (0, import_react_ui4.toLocalizedString)(item.label, t)));
|
7139
|
+
} finally {
|
7140
|
+
_effect.f();
|
7141
|
+
}
|
7142
|
+
};
|
7143
|
+
var getItem = (groups, id) => {
|
7144
|
+
return groups.flatMap((group) => group.items).find((item) => item.id === id);
|
7145
|
+
};
|
7146
|
+
var getNextItem = (groups, id) => {
|
7147
|
+
const items = groups.flatMap((group) => group.items);
|
7148
|
+
const index = items.findIndex((item) => item.id === id);
|
7149
|
+
return items[(index + 1) % items.length];
|
7150
|
+
};
|
7151
|
+
var getPreviousItem = (groups, id) => {
|
7152
|
+
const items = groups.flatMap((group) => group.items);
|
7153
|
+
const index = items.findIndex((item) => item.id === id);
|
7154
|
+
return items[(index - 1 + items.length) % items.length];
|
7155
|
+
};
|
7156
|
+
var filterItems = (groups, filter) => {
|
7157
|
+
return groups.map((group) => ({
|
7158
|
+
...group,
|
7159
|
+
items: group.items.filter(filter)
|
7160
|
+
}));
|
7161
|
+
};
|
7162
|
+
var insertAtCursor = (view, head, insert) => {
|
7163
|
+
view.dispatch({
|
7164
|
+
changes: {
|
7165
|
+
from: head,
|
7166
|
+
to: head,
|
7167
|
+
insert
|
7168
|
+
},
|
7169
|
+
selection: {
|
7170
|
+
anchor: head + insert.length,
|
7171
|
+
head: head + insert.length
|
7172
|
+
}
|
7173
|
+
});
|
7174
|
+
};
|
7175
|
+
var insertAtLineStart = (view, head, insert) => {
|
7176
|
+
const line = view.state.doc.lineAt(head);
|
7177
|
+
if (line.from === head) {
|
7178
|
+
insertAtCursor(view, head, insert);
|
7179
|
+
} else {
|
7180
|
+
insert = "\n" + insert;
|
7181
|
+
view.dispatch({
|
7182
|
+
changes: {
|
7183
|
+
from: line.to,
|
7184
|
+
to: line.to,
|
7185
|
+
insert
|
7186
|
+
},
|
7187
|
+
selection: {
|
7188
|
+
anchor: line.to + insert.length,
|
7189
|
+
head: line.to + insert.length
|
7190
|
+
}
|
7191
|
+
});
|
7192
|
+
}
|
7193
|
+
};
|
7194
|
+
var coreSlashCommands = {
|
7195
|
+
id: "markdown",
|
7196
|
+
label: "Markdown",
|
7197
|
+
items: [
|
7198
|
+
{
|
7199
|
+
id: "heading-1",
|
7200
|
+
label: "Heading 1",
|
7201
|
+
icon: "ph--text-h-one--regular",
|
7202
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "# ")
|
7203
|
+
},
|
7204
|
+
{
|
7205
|
+
id: "heading-2",
|
7206
|
+
label: "Heading 2",
|
7207
|
+
icon: "ph--text-h-two--regular",
|
7208
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "## ")
|
7209
|
+
},
|
7210
|
+
{
|
7211
|
+
id: "heading-3",
|
7212
|
+
label: "Heading 3",
|
7213
|
+
icon: "ph--text-h-three--regular",
|
7214
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "### ")
|
7215
|
+
},
|
7216
|
+
{
|
7217
|
+
id: "heading-4",
|
7218
|
+
label: "Heading 4",
|
7219
|
+
icon: "ph--text-h-four--regular",
|
7220
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "#### ")
|
7221
|
+
},
|
7222
|
+
{
|
7223
|
+
id: "heading-5",
|
7224
|
+
label: "Heading 5",
|
7225
|
+
icon: "ph--text-h-five--regular",
|
7226
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "##### ")
|
7227
|
+
},
|
7228
|
+
{
|
7229
|
+
id: "heading-6",
|
7230
|
+
label: "Heading 6",
|
7231
|
+
icon: "ph--text-h-six--regular",
|
7232
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "###### ")
|
7233
|
+
},
|
7234
|
+
{
|
7235
|
+
id: "bullet-list",
|
7236
|
+
label: "Bullet List",
|
7237
|
+
icon: "ph--list-bullets--regular",
|
7238
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "- ")
|
7239
|
+
},
|
7240
|
+
{
|
7241
|
+
id: "numbered-list",
|
7242
|
+
label: "Numbered List",
|
7243
|
+
icon: "ph--list-numbers--regular",
|
7244
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "1. ")
|
7245
|
+
},
|
7246
|
+
{
|
7247
|
+
id: "task-list",
|
7248
|
+
label: "Task List",
|
7249
|
+
icon: "ph--list-checks--regular",
|
7250
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "- [ ] ")
|
7251
|
+
},
|
7252
|
+
{
|
7253
|
+
id: "quote",
|
7254
|
+
label: "Quote",
|
7255
|
+
icon: "ph--quotes--regular",
|
7256
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "> ")
|
7257
|
+
},
|
7258
|
+
{
|
7259
|
+
id: "code-block",
|
7260
|
+
label: "Code Block",
|
7261
|
+
icon: "ph--code-block--regular",
|
7262
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "```\n\n```")
|
7263
|
+
},
|
7264
|
+
{
|
7265
|
+
id: "table",
|
7266
|
+
label: "Table",
|
7267
|
+
icon: "ph--table--regular",
|
7268
|
+
onSelect: (view, head) => insertAtLineStart(view, head, "| | | |\n|---|---|---|\n| | | |")
|
7269
|
+
}
|
7270
|
+
]
|
7271
|
+
};
|
7272
|
+
var linkSlashCommands = {
|
7273
|
+
id: "link",
|
7274
|
+
label: "Link",
|
7275
|
+
items: [
|
7276
|
+
{
|
7277
|
+
id: "inline-link",
|
7278
|
+
label: "Inline link",
|
7279
|
+
icon: "ph--link--regular",
|
7280
|
+
onSelect: (view, head) => view.dispatch({
|
7281
|
+
changes: {
|
7282
|
+
from: head,
|
7283
|
+
insert: "@"
|
7284
|
+
},
|
7285
|
+
selection: {
|
7286
|
+
anchor: head + 1,
|
7287
|
+
head: head + 1
|
7288
|
+
},
|
7289
|
+
effects: commandRangeEffect.of({
|
7290
|
+
trigger: "@",
|
7291
|
+
range: {
|
7292
|
+
from: head,
|
7293
|
+
to: head + 1
|
7294
|
+
}
|
7295
|
+
})
|
7296
|
+
})
|
7297
|
+
},
|
7298
|
+
{
|
7299
|
+
id: "block-embed",
|
7300
|
+
label: "Block embed",
|
7301
|
+
icon: "ph--lego--regular",
|
7302
|
+
onSelect: (view, head) => view.dispatch({
|
7303
|
+
changes: {
|
7304
|
+
from: head,
|
7305
|
+
insert: "@@"
|
7306
|
+
},
|
7307
|
+
selection: {
|
7308
|
+
anchor: head + 2,
|
7309
|
+
head: head + 2
|
7310
|
+
},
|
7311
|
+
effects: commandRangeEffect.of({
|
7312
|
+
trigger: "@",
|
7313
|
+
range: {
|
7314
|
+
from: head,
|
7315
|
+
to: head + 2
|
7316
|
+
}
|
7317
|
+
})
|
7318
|
+
})
|
7319
|
+
}
|
7320
|
+
]
|
7321
|
+
};
|
6682
7322
|
var customEventOptions = {
|
6683
7323
|
capture: true,
|
6684
7324
|
passive: false
|
6685
7325
|
};
|
7326
|
+
var RefPopover = /* @__PURE__ */ (0, import_react9.forwardRef)(({ children, open, onOpenChange, modal, onActivate }, ref) => {
|
7327
|
+
var _effect = (0, import_tracking3.useSignals)();
|
7328
|
+
try {
|
7329
|
+
const [rootRef, setRootRef] = (0, import_react9.useState)(null);
|
7330
|
+
(0, import_react9.useEffect)(() => {
|
7331
|
+
return rootRef && onActivate ? (0, import_async6.addEventListener)(rootRef, "dx-ref-tag-activate", onActivate, customEventOptions) : void 0;
|
7332
|
+
}, [
|
7333
|
+
rootRef,
|
7334
|
+
onActivate
|
7335
|
+
]);
|
7336
|
+
return /* @__PURE__ */ import_react9.default.createElement(import_react_ui5.Popover.Root, {
|
7337
|
+
open,
|
7338
|
+
onOpenChange,
|
7339
|
+
modal
|
7340
|
+
}, /* @__PURE__ */ import_react9.default.createElement(import_react_ui5.Popover.VirtualTrigger, {
|
7341
|
+
virtualRef: ref
|
7342
|
+
}), /* @__PURE__ */ import_react9.default.createElement("div", {
|
7343
|
+
role: "none",
|
7344
|
+
className: "contents",
|
7345
|
+
ref: setRootRef
|
7346
|
+
}, children));
|
7347
|
+
} finally {
|
7348
|
+
_effect.f();
|
7349
|
+
}
|
7350
|
+
});
|
6686
7351
|
var REF_POPOVER = "RefPopover";
|
6687
7352
|
var [RefPopoverContextProvider, useRefPopover] = (0, import_react_context.createContext)(REF_POPOVER, {});
|
6688
|
-
var
|
6689
|
-
var _effect = (0,
|
7353
|
+
var PreviewProvider = ({ children, onLookup }) => {
|
7354
|
+
var _effect = (0, import_tracking3.useSignals)();
|
6690
7355
|
try {
|
6691
|
-
const trigger = (0,
|
6692
|
-
const [value, setValue] = (0,
|
6693
|
-
const [
|
6694
|
-
const
|
6695
|
-
const handleDxRefTagActivate = (0, import_react7.useCallback)((event) => {
|
7356
|
+
const trigger = (0, import_react9.useRef)(null);
|
7357
|
+
const [value, setValue] = (0, import_react9.useState)({});
|
7358
|
+
const [open, setOpen] = (0, import_react9.useState)(false);
|
7359
|
+
const handleDxRefTagActivate = (0, import_react9.useCallback)((event) => {
|
6696
7360
|
const { refId, label, trigger: dxTrigger } = event;
|
6697
7361
|
setValue((value2) => ({
|
6698
7362
|
...value2,
|
@@ -6715,32 +7379,20 @@ var RefPopoverProvider = ({ children, onLookup }) => {
|
|
6715
7379
|
}, [
|
6716
7380
|
onLookup
|
6717
7381
|
]);
|
6718
|
-
|
6719
|
-
return rootRef ? (0, import_async5.addEventListener)(rootRef, "dx-ref-tag-activate", handleDxRefTagActivate, customEventOptions) : void 0;
|
6720
|
-
}, [
|
6721
|
-
rootRef
|
6722
|
-
]);
|
6723
|
-
return /* @__PURE__ */ import_react7.default.createElement(RefPopoverContextProvider, {
|
7382
|
+
return /* @__PURE__ */ import_react9.default.createElement(RefPopoverContextProvider, {
|
6724
7383
|
pending: value.pending,
|
6725
7384
|
link: value.link,
|
6726
7385
|
target: value.target
|
6727
|
-
}, /* @__PURE__ */
|
7386
|
+
}, /* @__PURE__ */ import_react9.default.createElement(RefPopover, {
|
7387
|
+
ref: trigger,
|
6728
7388
|
open,
|
6729
|
-
onOpenChange: setOpen
|
6730
|
-
|
6731
|
-
|
6732
|
-
}), /* @__PURE__ */ import_react7.default.createElement("div", {
|
6733
|
-
role: "none",
|
6734
|
-
className: "contents",
|
6735
|
-
ref: setRootRef
|
6736
|
-
}, children)));
|
7389
|
+
onOpenChange: setOpen,
|
7390
|
+
onActivate: handleDxRefTagActivate
|
7391
|
+
}, children));
|
6737
7392
|
} finally {
|
6738
7393
|
_effect.f();
|
6739
7394
|
}
|
6740
7395
|
};
|
6741
|
-
var RefPopover = {
|
6742
|
-
Provider: RefPopoverProvider
|
6743
|
-
};
|
6744
7396
|
var customEventOptions2 = {
|
6745
7397
|
capture: true,
|
6746
7398
|
passive: false
|
@@ -6748,13 +7400,13 @@ var customEventOptions2 = {
|
|
6748
7400
|
var REF_DROPDOWN_MENU = "RefDropdownMenu";
|
6749
7401
|
var [RefDropdownMenuContextProvider, useRefDropdownMenu] = (0, import_react_context2.createContext)(REF_DROPDOWN_MENU, {});
|
6750
7402
|
var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
6751
|
-
var _effect = (0,
|
7403
|
+
var _effect = (0, import_tracking4.useSignals)();
|
6752
7404
|
try {
|
6753
|
-
const trigger = (0,
|
6754
|
-
const [value, setValue] = (0,
|
6755
|
-
const [rootRef, setRootRef] = (0,
|
6756
|
-
const [open, setOpen] = (0,
|
6757
|
-
const handleDxRefTagActivate = (0,
|
7405
|
+
const trigger = (0, import_react10.useRef)(null);
|
7406
|
+
const [value, setValue] = (0, import_react10.useState)({});
|
7407
|
+
const [rootRef, setRootRef] = (0, import_react10.useState)(null);
|
7408
|
+
const [open, setOpen] = (0, import_react10.useState)(false);
|
7409
|
+
const handleDxRefTagActivate = (0, import_react10.useCallback)((event) => {
|
6758
7410
|
const { refId, label, trigger: dxTrigger } = event;
|
6759
7411
|
setValue((value2) => ({
|
6760
7412
|
...value2,
|
@@ -6777,21 +7429,21 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
6777
7429
|
}, [
|
6778
7430
|
onLookup
|
6779
7431
|
]);
|
6780
|
-
(0,
|
6781
|
-
return rootRef ? (0,
|
7432
|
+
(0, import_react10.useEffect)(() => {
|
7433
|
+
return rootRef ? (0, import_async7.addEventListener)(rootRef, "dx-ref-tag-activate", handleDxRefTagActivate, customEventOptions2) : void 0;
|
6782
7434
|
}, [
|
6783
7435
|
rootRef
|
6784
7436
|
]);
|
6785
|
-
return /* @__PURE__ */
|
7437
|
+
return /* @__PURE__ */ import_react10.default.createElement(RefDropdownMenuContextProvider, {
|
6786
7438
|
pending: value.pending,
|
6787
7439
|
link: value.link,
|
6788
7440
|
target: value.target
|
6789
|
-
}, /* @__PURE__ */
|
7441
|
+
}, /* @__PURE__ */ import_react10.default.createElement(import_react_ui6.DropdownMenu.Root, {
|
6790
7442
|
open,
|
6791
7443
|
onOpenChange: setOpen
|
6792
|
-
}, /* @__PURE__ */
|
7444
|
+
}, /* @__PURE__ */ import_react10.default.createElement(import_react_ui6.DropdownMenu.VirtualTrigger, {
|
6793
7445
|
virtualRef: trigger
|
6794
|
-
}), /* @__PURE__ */
|
7446
|
+
}), /* @__PURE__ */ import_react10.default.createElement("div", {
|
6795
7447
|
role: "none",
|
6796
7448
|
className: "contents",
|
6797
7449
|
ref: setRootRef
|
@@ -6806,11 +7458,11 @@ var RefDropdownMenu = {
|
|
6806
7458
|
var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
6807
7459
|
var instanceCount = 0;
|
6808
7460
|
var useTextEditor = (props = {}, deps = []) => {
|
6809
|
-
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0,
|
6810
|
-
const [instanceId] = (0,
|
6811
|
-
const [view, setView] = (0,
|
6812
|
-
const parentRef = (0,
|
6813
|
-
(0,
|
7461
|
+
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react11.useMemo)(() => (0, import_util6.getProviderValue)(props), deps ?? []);
|
7462
|
+
const [instanceId] = (0, import_react11.useState)(() => `text-editor-${++instanceCount}`);
|
7463
|
+
const [view, setView] = (0, import_react11.useState)();
|
7464
|
+
const parentRef = (0, import_react11.useRef)(null);
|
7465
|
+
(0, import_react11.useEffect)(() => {
|
6814
7466
|
let view2;
|
6815
7467
|
if (parentRef.current) {
|
6816
7468
|
(0, import_log8.log)("create", {
|
@@ -6819,7 +7471,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6819
7471
|
doc: initialValue?.length ?? 0
|
6820
7472
|
}, {
|
6821
7473
|
F: __dxlog_file13,
|
6822
|
-
L:
|
7474
|
+
L: 75,
|
6823
7475
|
S: void 0,
|
6824
7476
|
C: (f, a) => f(...a)
|
6825
7477
|
});
|
@@ -6835,27 +7487,27 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6835
7487
|
anchor
|
6836
7488
|
};
|
6837
7489
|
}
|
6838
|
-
const state =
|
7490
|
+
const state = import_state31.EditorState.create({
|
6839
7491
|
doc: doc ?? initialValue,
|
6840
7492
|
// selection: initialSelection,
|
6841
7493
|
extensions: [
|
6842
7494
|
id && documentId.of(id),
|
6843
7495
|
extensions,
|
6844
7496
|
// NOTE: This doesn't catch errors in keymap functions.
|
6845
|
-
|
7497
|
+
import_view36.EditorView.exceptionSink.of((err) => {
|
6846
7498
|
import_log8.log.catch(err, void 0, {
|
6847
7499
|
F: __dxlog_file13,
|
6848
|
-
L:
|
7500
|
+
L: 97,
|
6849
7501
|
S: void 0,
|
6850
7502
|
C: (f, a) => f(...a)
|
6851
7503
|
});
|
6852
7504
|
})
|
6853
7505
|
].filter(import_util6.isNotFalsy)
|
6854
7506
|
});
|
6855
|
-
view2 = new
|
7507
|
+
view2 = new import_view36.EditorView({
|
6856
7508
|
parent: parentRef.current,
|
6857
7509
|
state,
|
6858
|
-
scrollTo: scrollTo ?
|
7510
|
+
scrollTo: scrollTo ? import_view36.EditorView.scrollIntoView(scrollTo, {
|
6859
7511
|
yMargin: 96
|
6860
7512
|
}) : void 0,
|
6861
7513
|
dispatchTransactions: debug ? debugDispatcher : void 0
|
@@ -6877,14 +7529,14 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6877
7529
|
id
|
6878
7530
|
}, {
|
6879
7531
|
F: __dxlog_file13,
|
6880
|
-
L:
|
7532
|
+
L: 134,
|
6881
7533
|
S: void 0,
|
6882
7534
|
C: (f, a) => f(...a)
|
6883
7535
|
});
|
6884
7536
|
view2?.destroy();
|
6885
7537
|
};
|
6886
7538
|
}, deps);
|
6887
|
-
(0,
|
7539
|
+
(0, import_react11.useEffect)(() => {
|
6888
7540
|
if (view) {
|
6889
7541
|
if (scrollTo || selection) {
|
6890
7542
|
if (selection && selection.anchor > view.state.doc.length) {
|
@@ -6894,7 +7546,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6894
7546
|
selection
|
6895
7547
|
}, {
|
6896
7548
|
F: __dxlog_file13,
|
6897
|
-
L:
|
7549
|
+
L: 143,
|
6898
7550
|
S: void 0,
|
6899
7551
|
C: (f, a) => f(...a)
|
6900
7552
|
});
|
@@ -6911,7 +7563,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6911
7563
|
scrollTo,
|
6912
7564
|
selection
|
6913
7565
|
]);
|
6914
|
-
(0,
|
7566
|
+
(0, import_react11.useEffect)(() => {
|
6915
7567
|
if (view && autoFocus) {
|
6916
7568
|
view.focus();
|
6917
7569
|
}
|
@@ -6925,7 +7577,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6925
7577
|
Escape: view?.state.facet(editorInputMode).noTabster
|
6926
7578
|
}
|
6927
7579
|
});
|
6928
|
-
const handleKeyUp = (0,
|
7580
|
+
const handleKeyUp = (0, import_react11.useCallback)((event) => {
|
6929
7581
|
const { key, target, currentTarget } = event;
|
6930
7582
|
if (target === currentTarget) {
|
6931
7583
|
switch (key) {
|
@@ -6950,6 +7602,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6950
7602
|
};
|
6951
7603
|
// Annotate the CommonJS export names for ESM import in node:
|
6952
7604
|
0 && (module.exports = {
|
7605
|
+
CommandMenu,
|
6953
7606
|
Cursor,
|
6954
7607
|
EditorInputMode,
|
6955
7608
|
EditorInputModes,
|
@@ -6961,6 +7614,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6961
7614
|
Inline,
|
6962
7615
|
InputModeExtensions,
|
6963
7616
|
List,
|
7617
|
+
PreviewProvider,
|
6964
7618
|
RefDropdownMenu,
|
6965
7619
|
RefPopover,
|
6966
7620
|
RemoteSelectionsDecorator,
|
@@ -6984,11 +7638,14 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
6984
7638
|
closeEffect,
|
6985
7639
|
command,
|
6986
7640
|
commandKeyBindings,
|
7641
|
+
commandMenu,
|
7642
|
+
commandRangeEffect,
|
6987
7643
|
commands,
|
6988
7644
|
commentClickedEffect,
|
6989
7645
|
comments,
|
6990
7646
|
commentsState,
|
6991
7647
|
convertTreeToJson,
|
7648
|
+
coreSlashCommands,
|
6992
7649
|
createBasicExtensions,
|
6993
7650
|
createComment,
|
6994
7651
|
createDataExtensions,
|
@@ -7016,6 +7673,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
7016
7673
|
editorSlots,
|
7017
7674
|
editorWidth,
|
7018
7675
|
editorWithToolbarLayout,
|
7676
|
+
filterItems,
|
7019
7677
|
flattenRect,
|
7020
7678
|
floatingMenu,
|
7021
7679
|
focus,
|
@@ -7024,14 +7682,21 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
7024
7682
|
formattingEquals,
|
7025
7683
|
formattingKeymap,
|
7026
7684
|
getFormatting,
|
7685
|
+
getItem,
|
7027
7686
|
getListItemContent,
|
7687
|
+
getNextItem,
|
7688
|
+
getPreviousItem,
|
7028
7689
|
getRange,
|
7690
|
+
hashtag,
|
7029
7691
|
image,
|
7030
7692
|
indentItemLess,
|
7031
7693
|
indentItemMore,
|
7694
|
+
insertAtCursor,
|
7695
|
+
insertAtLineStart,
|
7032
7696
|
insertTable,
|
7033
7697
|
itemToJSON,
|
7034
7698
|
keymap,
|
7699
|
+
linkSlashCommands,
|
7035
7700
|
linkTooltip,
|
7036
7701
|
listItemToString,
|
7037
7702
|
listener,
|
@@ -7043,6 +7708,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
7043
7708
|
mention,
|
7044
7709
|
moveItemDown,
|
7045
7710
|
moveItemUp,
|
7711
|
+
multilinePlaceholder,
|
7046
7712
|
openCommand,
|
7047
7713
|
openEffect,
|
7048
7714
|
outliner,
|
@@ -7085,6 +7751,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
7085
7751
|
treeFacet,
|
7086
7752
|
typeahead,
|
7087
7753
|
typewriter,
|
7754
|
+
useCommandMenu,
|
7088
7755
|
useComments,
|
7089
7756
|
useEditorToolbarState,
|
7090
7757
|
useFormattingState,
|