@dxos/react-ui-editor 0.6.14-main.7bd9c89 → 0.6.14-main.f49f251
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 +650 -479
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +726 -545
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +650 -478
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +1 -1
- package/dist/types/src/extensions/comments.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/focus.d.ts +7 -0
- package/dist/types/src/extensions/focus.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/markdown/image.d.ts +3 -6
- package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
- package/dist/types/src/extensions/selection.d.ts +24 -0
- package/dist/types/src/extensions/selection.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/src/{state → util}/cursor.d.ts +7 -1
- package/dist/types/src/util/cursor.d.ts.map +1 -0
- package/dist/types/src/{util.d.ts → util/debug.d.ts} +6 -2
- package/dist/types/src/util/debug.d.ts.map +1 -0
- package/dist/types/src/util/dom.d.ts.map +1 -0
- package/dist/types/src/{state/util.d.ts → util/facet.d.ts} +1 -1
- package/dist/types/src/util/facet.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +6 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/src/util/react.d.ts.map +1 -0
- package/package.json +28 -42
- package/src/TextEditor.stories.tsx +8 -6
- package/src/extensions/annotations.ts +1 -1
- package/src/extensions/automerge/automerge.ts +1 -1
- package/src/extensions/automerge/cursor.ts +1 -1
- package/src/extensions/awareness/awareness.ts +1 -1
- package/src/extensions/command/hint.ts +1 -1
- package/src/extensions/command/state.ts +1 -1
- package/src/extensions/comments.ts +3 -4
- package/src/extensions/factories.ts +5 -1
- package/src/extensions/focus.ts +35 -0
- package/src/extensions/folding.tsx +1 -1
- package/src/extensions/index.ts +2 -0
- package/src/extensions/markdown/decorate.ts +1 -1
- package/src/extensions/markdown/image.ts +53 -42
- package/src/extensions/modes.ts +1 -1
- package/src/{state/state.ts → extensions/selection.ts} +22 -22
- package/src/hooks/useTextEditor.ts +2 -3
- package/src/index.ts +1 -1
- package/src/{state → util}/cursor.ts +9 -3
- package/src/{util.ts → util/debug.ts} +15 -2
- package/src/{extensions/util → util}/index.ts +3 -2
- package/dist/lib/browser/chunk-CIQSMP7K.mjs +0 -148
- package/dist/lib/browser/chunk-CIQSMP7K.mjs.map +0 -7
- package/dist/lib/browser/state/index.mjs +0 -17
- package/dist/lib/browser/state/index.mjs.map +0 -7
- package/dist/lib/node/chunk-GZWIENFM.cjs +0 -169
- package/dist/lib/node/chunk-GZWIENFM.cjs.map +0 -7
- package/dist/lib/node/state/index.cjs +0 -39
- package/dist/lib/node/state/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-GP5RCZ3X.mjs +0 -150
- package/dist/lib/node-esm/chunk-GP5RCZ3X.mjs.map +0 -7
- package/dist/lib/node-esm/state/index.mjs +0 -18
- package/dist/lib/node-esm/state/index.mjs.map +0 -7
- package/dist/types/src/extensions/util/dom.d.ts.map +0 -1
- package/dist/types/src/extensions/util/error.d.ts +0 -2
- package/dist/types/src/extensions/util/error.d.ts.map +0 -1
- package/dist/types/src/extensions/util/index.d.ts +0 -5
- package/dist/types/src/extensions/util/index.d.ts.map +0 -1
- package/dist/types/src/extensions/util/overlap.d.ts +0 -8
- package/dist/types/src/extensions/util/overlap.d.ts.map +0 -1
- package/dist/types/src/extensions/util/react.d.ts.map +0 -1
- package/dist/types/src/state/cursor.d.ts.map +0 -1
- package/dist/types/src/state/doc.d.ts +0 -5
- package/dist/types/src/state/doc.d.ts.map +0 -1
- package/dist/types/src/state/index.d.ts +0 -6
- package/dist/types/src/state/index.d.ts.map +0 -1
- package/dist/types/src/state/state.d.ts +0 -20
- package/dist/types/src/state/state.d.ts.map +0 -1
- package/dist/types/src/state/types.d.ts.map +0 -1
- package/dist/types/src/state/util.d.ts.map +0 -1
- package/dist/types/src/util.d.ts.map +0 -1
- package/src/extensions/util/error.ts +0 -15
- package/src/extensions/util/overlap.ts +0 -12
- package/src/state/doc.ts +0 -10
- package/src/state/index.ts +0 -11
- /package/dist/types/src/{state/types.d.ts → types.d.ts} +0 -0
- /package/dist/types/src/{extensions/util → util}/dom.d.ts +0 -0
- /package/dist/types/src/{extensions/util → util}/react.d.ts +0 -0
- /package/src/{state/types.ts → types.ts} +0 -0
- /package/src/{extensions/util → util}/dom.ts +0 -0
- /package/src/{state/util.ts → util/facet.ts} +0 -0
- /package/src/{extensions/util → util}/react.tsx +0 -0
package/dist/lib/node/index.cjs
CHANGED
@@ -28,7 +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
|
-
Cursor: () =>
|
31
|
+
Cursor: () => Cursor,
|
32
32
|
EditorInputModes: () => EditorInputModes,
|
33
33
|
EditorViewModes: () => EditorViewModes,
|
34
34
|
Inline: () => Inline,
|
@@ -50,6 +50,7 @@ __export(node_exports, {
|
|
50
50
|
awarenessProvider: () => awarenessProvider,
|
51
51
|
blast: () => blast,
|
52
52
|
callbackWrapper: () => callbackWrapper,
|
53
|
+
clientRectsFor: () => clientRectsFor,
|
53
54
|
command: () => command,
|
54
55
|
comments: () => comments,
|
55
56
|
commentsState: () => commentsState,
|
@@ -57,7 +58,9 @@ __export(node_exports, {
|
|
57
58
|
createBasicExtensions: () => createBasicExtensions,
|
58
59
|
createComment: () => createComment,
|
59
60
|
createDataExtensions: () => createDataExtensions,
|
60
|
-
|
61
|
+
createEditorStateStore: () => createEditorStateStore,
|
62
|
+
createEditorStateTransaction: () => createEditorStateTransaction,
|
63
|
+
createElement: () => createElement,
|
61
64
|
createExternalCommentSync: () => createExternalCommentSync,
|
62
65
|
createMarkdownExtensions: () => createMarkdownExtensions,
|
63
66
|
createThemeExtensions: () => createThemeExtensions,
|
@@ -66,7 +69,7 @@ __export(node_exports, {
|
|
66
69
|
debugTree: () => debugTree,
|
67
70
|
decorateMarkdown: () => decorateMarkdown,
|
68
71
|
defaultOptions: () => defaultOptions,
|
69
|
-
documentId: () =>
|
72
|
+
documentId: () => documentId,
|
70
73
|
dropFile: () => dropFile,
|
71
74
|
editorContent: () => editorContent,
|
72
75
|
editorFullWidth: () => editorFullWidth,
|
@@ -74,23 +77,25 @@ __export(node_exports, {
|
|
74
77
|
editorInputMode: () => editorInputMode,
|
75
78
|
editorMonospace: () => editorMonospace,
|
76
79
|
editorWithToolbarLayout: () => editorWithToolbarLayout,
|
80
|
+
flattenRect: () => flattenRect,
|
81
|
+
focus: () => focus,
|
77
82
|
focusEvent: () => focusEvent,
|
83
|
+
focusField: () => focusField,
|
78
84
|
folding: () => folding,
|
79
85
|
formattingEquals: () => formattingEquals,
|
80
86
|
formattingKeymap: () => formattingKeymap,
|
81
87
|
getFormatting: () => getFormatting,
|
82
88
|
image: () => image,
|
83
|
-
imageUpload: () => imageUpload,
|
84
89
|
insertTable: () => insertTable,
|
85
90
|
keymap: () => import_view.keymap,
|
86
91
|
linkTooltip: () => linkTooltip,
|
87
92
|
listener: () => listener,
|
88
|
-
localStorageStateStoreAdapter: () => import_chunk_GZWIENFM.localStorageStateStoreAdapter,
|
89
93
|
logChanges: () => logChanges,
|
90
94
|
markdownHighlightStyle: () => markdownHighlightStyle,
|
91
95
|
markdownTags: () => markdownTags,
|
92
96
|
markdownTagsExtensions: () => markdownTagsExtensions,
|
93
97
|
mention: () => mention,
|
98
|
+
overlap: () => overlap,
|
94
99
|
preventNewline: () => preventNewline,
|
95
100
|
processAction: () => processAction,
|
96
101
|
removeBlockquote: () => removeBlockquote,
|
@@ -98,17 +103,19 @@ __export(node_exports, {
|
|
98
103
|
removeLink: () => removeLink,
|
99
104
|
removeList: () => removeList,
|
100
105
|
removeStyle: () => removeStyle,
|
106
|
+
renderRoot: () => renderRoot,
|
101
107
|
scrollThreadIntoView: () => scrollThreadIntoView,
|
102
108
|
selectionOverlapsComment: () => selectionOverlapsComment,
|
109
|
+
selectionState: () => selectionState,
|
103
110
|
setBlockquote: () => setBlockquote,
|
104
111
|
setComments: () => setComments,
|
105
112
|
setHeading: () => setHeading,
|
106
113
|
setSelection: () => setSelection,
|
107
114
|
setStyle: () => setStyle,
|
108
|
-
singleValueFacet: () =>
|
109
|
-
state: () => import_chunk_GZWIENFM.state,
|
115
|
+
singleValueFacet: () => singleValueFacet,
|
110
116
|
table: () => table,
|
111
117
|
tags: () => import_highlight.tags,
|
118
|
+
textRange: () => textRange,
|
112
119
|
toggleBlockquote: () => toggleBlockquote,
|
113
120
|
toggleCodeblock: () => toggleCodeblock,
|
114
121
|
toggleEmphasis: () => toggleEmphasis,
|
@@ -125,10 +132,10 @@ __export(node_exports, {
|
|
125
132
|
useComments: () => useComments,
|
126
133
|
useFormattingState: () => useFormattingState,
|
127
134
|
useTextEditor: () => useTextEditor,
|
128
|
-
useToolbarContext: () => useToolbarContext
|
135
|
+
useToolbarContext: () => useToolbarContext,
|
136
|
+
wrapWithCatch: () => wrapWithCatch
|
129
137
|
});
|
130
138
|
module.exports = __toCommonJS(node_exports);
|
131
|
-
var import_chunk_GZWIENFM = require("./chunk-GZWIENFM.cjs");
|
132
139
|
var import_view = require("@codemirror/view");
|
133
140
|
var import_highlight = require("@lezer/highlight");
|
134
141
|
var import_text = require("@dxos/protocols/proto/dxos/echo/model/text");
|
@@ -141,76 +148,83 @@ var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
141
148
|
var import_state = require("@codemirror/state");
|
142
149
|
var import_view2 = require("@codemirror/view");
|
143
150
|
var import_util = require("@dxos/util");
|
151
|
+
var import_state2 = require("@codemirror/state");
|
152
|
+
var import_log = require("@dxos/log");
|
153
|
+
var import_react3 = __toESM(require("react"));
|
154
|
+
var import_client = require("react-dom/client");
|
155
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
156
|
+
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
144
157
|
var import_autocomplete = require("@codemirror/autocomplete");
|
145
158
|
var import_lang_markdown = require("@codemirror/lang-markdown");
|
146
159
|
var import_view3 = require("@codemirror/view");
|
147
|
-
var
|
160
|
+
var import_state3 = require("@codemirror/state");
|
148
161
|
var import_view4 = require("@codemirror/view");
|
149
162
|
var import_automerge = require("@dxos/automerge/automerge");
|
150
|
-
var
|
163
|
+
var import_log2 = require("@dxos/log");
|
151
164
|
var import_echo = require("@dxos/react-client/echo");
|
152
|
-
var
|
165
|
+
var import_state4 = require("@codemirror/state");
|
153
166
|
var import_automerge2 = require("@dxos/automerge/automerge");
|
154
167
|
var import_automerge3 = require("@dxos/automerge/automerge");
|
155
|
-
var import_state4 = require("@codemirror/state");
|
156
168
|
var import_state5 = require("@codemirror/state");
|
169
|
+
var import_state6 = require("@codemirror/state");
|
157
170
|
var import_view5 = require("@codemirror/view");
|
158
171
|
var import_async = require("@dxos/async");
|
159
172
|
var import_context = require("@dxos/context");
|
160
173
|
var import_async2 = require("@dxos/async");
|
161
174
|
var import_context2 = require("@dxos/context");
|
162
175
|
var import_invariant = require("@dxos/invariant");
|
163
|
-
var
|
176
|
+
var import_log3 = require("@dxos/log");
|
164
177
|
var import_view6 = require("@codemirror/view");
|
165
178
|
var import_lodash = __toESM(require("lodash.defaultsdeep"));
|
166
179
|
var import_invariant2 = require("@dxos/invariant");
|
167
180
|
var import_view7 = require("@codemirror/view");
|
168
|
-
var import_state6 = require("@codemirror/state");
|
169
|
-
var import_view8 = require("@codemirror/view");
|
170
181
|
var import_state7 = require("@codemirror/state");
|
182
|
+
var import_view8 = require("@codemirror/view");
|
183
|
+
var import_state8 = require("@codemirror/state");
|
171
184
|
var import_view9 = require("@codemirror/view");
|
172
|
-
var import_log3 = require("@dxos/log");
|
173
|
-
var import_react3 = __toESM(require("react"));
|
174
|
-
var import_client = require("react-dom/client");
|
175
|
-
var import_react_ui2 = require("@dxos/react-ui");
|
176
|
-
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
177
185
|
var import_commands = require("@codemirror/commands");
|
178
|
-
var
|
186
|
+
var import_state9 = require("@codemirror/state");
|
179
187
|
var import_view10 = require("@codemirror/view");
|
180
188
|
var import_lodash2 = __toESM(require("lodash.sortby"));
|
181
189
|
var import_react4 = require("react");
|
182
190
|
var import_async3 = require("@dxos/async");
|
183
191
|
var import_log4 = require("@dxos/log");
|
184
192
|
var import_util2 = require("@dxos/util");
|
185
|
-
var
|
186
|
-
var import_language = require("@codemirror/language");
|
187
|
-
var import_state9 = require("@codemirror/state");
|
193
|
+
var import_state10 = require("@codemirror/state");
|
188
194
|
var import_view11 = require("@codemirror/view");
|
195
|
+
var import_async4 = require("@dxos/async");
|
196
|
+
var import_invariant3 = require("@dxos/invariant");
|
197
|
+
var import_util3 = require("@dxos/util");
|
198
|
+
var import_language = require("@codemirror/language");
|
199
|
+
var import_state11 = require("@codemirror/state");
|
200
|
+
var import_view12 = require("@codemirror/view");
|
189
201
|
var import_autocomplete2 = require("@codemirror/autocomplete");
|
190
202
|
var import_commands2 = require("@codemirror/commands");
|
191
203
|
var import_language2 = require("@codemirror/language");
|
192
204
|
var import_search = require("@codemirror/search");
|
193
|
-
var
|
205
|
+
var import_state12 = require("@codemirror/state");
|
194
206
|
var import_theme_one_dark = require("@codemirror/theme-one-dark");
|
195
|
-
var
|
207
|
+
var import_view13 = require("@codemirror/view");
|
196
208
|
var import_lodash3 = __toESM(require("lodash.defaultsdeep"));
|
197
209
|
var import_lodash4 = __toESM(require("lodash.merge"));
|
198
210
|
var import_display_name = require("@dxos/display-name");
|
199
|
-
var
|
211
|
+
var import_log5 = require("@dxos/log");
|
200
212
|
var import_react_ui_theme3 = require("@dxos/react-ui-theme");
|
201
|
-
var
|
213
|
+
var import_util4 = require("@dxos/util");
|
214
|
+
var import_state13 = require("@codemirror/state");
|
215
|
+
var import_view14 = require("@codemirror/view");
|
202
216
|
var import_react_ui_theme4 = require("@dxos/react-ui-theme");
|
203
217
|
var import_lodash5 = __toESM(require("lodash.get"));
|
204
218
|
var import_react_ui_theme5 = require("@dxos/react-ui-theme");
|
205
219
|
var import_language3 = require("@codemirror/language");
|
206
|
-
var
|
220
|
+
var import_view15 = require("@codemirror/view");
|
207
221
|
var import_react5 = __toESM(require("react"));
|
208
222
|
var import_react_ui3 = require("@dxos/react-ui");
|
209
|
-
var
|
223
|
+
var import_view16 = require("@codemirror/view");
|
210
224
|
var import_autocomplete3 = require("@codemirror/autocomplete");
|
211
225
|
var import_language4 = require("@codemirror/language");
|
212
|
-
var
|
213
|
-
var
|
226
|
+
var import_state14 = require("@codemirror/state");
|
227
|
+
var import_view17 = require("@codemirror/view");
|
214
228
|
var import_react6 = require("react");
|
215
229
|
var import_autocomplete4 = require("@codemirror/autocomplete");
|
216
230
|
var import_commands3 = require("@codemirror/commands");
|
@@ -218,45 +232,45 @@ var import_lang_markdown2 = require("@codemirror/lang-markdown");
|
|
218
232
|
var import_language5 = require("@codemirror/language");
|
219
233
|
var import_language_data = require("@codemirror/language-data");
|
220
234
|
var import_lint = require("@codemirror/lint");
|
221
|
-
var
|
235
|
+
var import_view18 = require("@codemirror/view");
|
222
236
|
var import_lang_markdown3 = require("@codemirror/lang-markdown");
|
223
237
|
var import_language6 = require("@codemirror/language");
|
224
238
|
var import_highlight2 = require("@lezer/highlight");
|
225
239
|
var import_markdown = require("@lezer/markdown");
|
226
240
|
var import_language7 = require("@codemirror/language");
|
227
|
-
var
|
241
|
+
var import_state15 = require("@codemirror/state");
|
228
242
|
var import_language8 = require("@codemirror/language");
|
229
|
-
var
|
230
|
-
var
|
231
|
-
var
|
243
|
+
var import_state16 = require("@codemirror/state");
|
244
|
+
var import_view19 = require("@codemirror/view");
|
245
|
+
var import_invariant4 = require("@dxos/invariant");
|
232
246
|
var import_react_ui_theme6 = require("@dxos/react-ui-theme");
|
233
247
|
var import_language9 = require("@codemirror/language");
|
234
|
-
var
|
235
|
-
var import_view18 = require("@codemirror/view");
|
236
|
-
var import_language10 = require("@codemirror/language");
|
237
|
-
var import_state15 = require("@codemirror/state");
|
238
|
-
var import_view19 = require("@codemirror/view");
|
248
|
+
var import_state17 = require("@codemirror/state");
|
239
249
|
var import_view20 = require("@codemirror/view");
|
240
|
-
var
|
241
|
-
var
|
250
|
+
var import_language10 = require("@codemirror/language");
|
251
|
+
var import_state18 = require("@codemirror/state");
|
242
252
|
var import_view21 = require("@codemirror/view");
|
243
|
-
var import_language12 = require("@codemirror/language");
|
244
253
|
var import_view22 = require("@codemirror/view");
|
254
|
+
var import_language11 = require("@codemirror/language");
|
255
|
+
var import_state19 = require("@codemirror/state");
|
256
|
+
var import_view23 = require("@codemirror/view");
|
257
|
+
var import_language12 = require("@codemirror/language");
|
258
|
+
var import_view24 = require("@codemirror/view");
|
245
259
|
var import_react_ui_theme7 = require("@dxos/react-ui-theme");
|
246
260
|
var import_autocomplete5 = require("@codemirror/autocomplete");
|
247
|
-
var
|
248
|
-
var
|
261
|
+
var import_log6 = require("@dxos/log");
|
262
|
+
var import_view25 = require("@codemirror/view");
|
249
263
|
var import_codemirror_vim = require("@replit/codemirror-vim");
|
250
264
|
var import_codemirror_vscode_keymap = require("@replit/codemirror-vscode-keymap");
|
251
|
-
var import_view24 = require("@codemirror/view");
|
252
|
-
var import_view25 = require("@codemirror/view");
|
253
|
-
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
254
|
-
var import_state17 = require("@codemirror/state");
|
255
265
|
var import_view26 = require("@codemirror/view");
|
266
|
+
var import_view27 = require("@codemirror/view");
|
267
|
+
var import_react_ui_theme8 = require("@dxos/react-ui-theme");
|
268
|
+
var import_state20 = require("@codemirror/state");
|
269
|
+
var import_view28 = require("@codemirror/view");
|
256
270
|
var import_react_tabster = require("@fluentui/react-tabster");
|
257
271
|
var import_react7 = require("react");
|
258
|
-
var
|
259
|
-
var
|
272
|
+
var import_log7 = require("@dxos/log");
|
273
|
+
var import_util5 = require("@dxos/util");
|
260
274
|
var translationKey = "react-ui-editor";
|
261
275
|
var translations_default = [
|
262
276
|
{
|
@@ -290,19 +304,158 @@ var translations_default = [
|
|
290
304
|
}
|
291
305
|
}
|
292
306
|
];
|
307
|
+
var singleValueFacet = (defaultValue) => import_state2.Facet.define({
|
308
|
+
// Called immediately.
|
309
|
+
combine: (providers) => {
|
310
|
+
return providers[0] ?? defaultValue;
|
311
|
+
}
|
312
|
+
});
|
313
|
+
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
314
|
+
var defaultCursorConverter = {
|
315
|
+
toCursor: (position) => position.toString(),
|
316
|
+
fromCursor: (cursor) => parseInt(cursor)
|
317
|
+
};
|
318
|
+
var Cursor = class _Cursor {
|
319
|
+
static {
|
320
|
+
this.converter = singleValueFacet(defaultCursorConverter);
|
321
|
+
}
|
322
|
+
static {
|
323
|
+
this.getCursorFromRange = (state, range) => {
|
324
|
+
const cursorConverter2 = state.facet(_Cursor.converter);
|
325
|
+
const from = cursorConverter2.toCursor(range.from);
|
326
|
+
const to = cursorConverter2.toCursor(range.to, -1);
|
327
|
+
return [
|
328
|
+
from,
|
329
|
+
to
|
330
|
+
].join(":");
|
331
|
+
};
|
332
|
+
}
|
333
|
+
static {
|
334
|
+
this.getRangeFromCursor = (state, cursor) => {
|
335
|
+
const cursorConverter2 = state.facet(_Cursor.converter);
|
336
|
+
const parts = cursor.split(":");
|
337
|
+
const from = cursorConverter2.fromCursor(parts[0]);
|
338
|
+
const to = cursorConverter2.fromCursor(parts[1]);
|
339
|
+
return from !== void 0 && to !== void 0 ? {
|
340
|
+
from,
|
341
|
+
to
|
342
|
+
} : void 0;
|
343
|
+
};
|
344
|
+
}
|
345
|
+
};
|
346
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
|
347
|
+
var wrapWithCatch = (fn) => {
|
348
|
+
return (...args) => {
|
349
|
+
try {
|
350
|
+
return fn(...args);
|
351
|
+
} catch (err) {
|
352
|
+
import_log.log.catch(err, void 0, {
|
353
|
+
F: __dxlog_file,
|
354
|
+
L: 15,
|
355
|
+
S: void 0,
|
356
|
+
C: (f, a) => f(...a)
|
357
|
+
});
|
358
|
+
}
|
359
|
+
};
|
360
|
+
};
|
361
|
+
var callbackWrapper = (fn) => (...args) => {
|
362
|
+
try {
|
363
|
+
return fn(...args);
|
364
|
+
} catch (err) {
|
365
|
+
import_log.log.catch(err, void 0, {
|
366
|
+
F: __dxlog_file,
|
367
|
+
L: 29,
|
368
|
+
S: void 0,
|
369
|
+
C: (f, a) => f(...a)
|
370
|
+
});
|
371
|
+
}
|
372
|
+
};
|
373
|
+
var debugDispatcher = (trs, view) => {
|
374
|
+
logChanges(trs);
|
375
|
+
view.update(trs);
|
376
|
+
};
|
377
|
+
var logChanges = (trs) => {
|
378
|
+
const changes = trs.flatMap((tr) => {
|
379
|
+
if (tr.changes.empty) {
|
380
|
+
return void 0;
|
381
|
+
}
|
382
|
+
const changes2 = [];
|
383
|
+
tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
|
384
|
+
fromA,
|
385
|
+
toA,
|
386
|
+
fromB,
|
387
|
+
toB,
|
388
|
+
inserted: inserted.toString()
|
389
|
+
})));
|
390
|
+
return changes2;
|
391
|
+
}).filter(Boolean);
|
392
|
+
if (changes.length) {
|
393
|
+
import_log.log.info("changes", {
|
394
|
+
changes
|
395
|
+
}, {
|
396
|
+
F: __dxlog_file,
|
397
|
+
L: 62,
|
398
|
+
S: void 0,
|
399
|
+
C: (f, a) => f(...a)
|
400
|
+
});
|
401
|
+
}
|
402
|
+
};
|
403
|
+
var flattenRect = (rect, left) => {
|
404
|
+
const x = left ? rect.left : rect.right;
|
405
|
+
return {
|
406
|
+
left: x,
|
407
|
+
right: x,
|
408
|
+
top: rect.top,
|
409
|
+
bottom: rect.bottom
|
410
|
+
};
|
411
|
+
};
|
412
|
+
var scratchRange;
|
413
|
+
var textRange = (node, from, to = from) => {
|
414
|
+
const range = scratchRange || (scratchRange = document.createRange());
|
415
|
+
range.setEnd(node, to);
|
416
|
+
range.setStart(node, from);
|
417
|
+
return range;
|
418
|
+
};
|
419
|
+
var clientRectsFor = (dom) => {
|
420
|
+
if (dom.nodeType === 3) {
|
421
|
+
return textRange(dom, 0, dom.nodeValue.length).getClientRects();
|
422
|
+
} else if (dom.nodeType === 1) {
|
423
|
+
return dom.getClientRects();
|
424
|
+
} else {
|
425
|
+
return [];
|
426
|
+
}
|
427
|
+
};
|
428
|
+
var createElement = (tag, options, children) => {
|
429
|
+
const el = document.createElement(tag);
|
430
|
+
if (options?.className) {
|
431
|
+
el.className = options.className;
|
432
|
+
}
|
433
|
+
if (children) {
|
434
|
+
el.append(...Array.isArray(children) ? children : [
|
435
|
+
children
|
436
|
+
]);
|
437
|
+
}
|
438
|
+
return el;
|
439
|
+
};
|
440
|
+
var renderRoot = (root, node) => {
|
441
|
+
(0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ThemeProvider, {
|
442
|
+
tx: import_react_ui_theme2.defaultTx
|
443
|
+
}, node));
|
444
|
+
return root;
|
445
|
+
};
|
293
446
|
var annotationMark = import_view2.Decoration.mark({
|
294
447
|
class: "cm-annotation"
|
295
448
|
});
|
296
449
|
var annotations = (options = {}) => {
|
297
|
-
const match = (
|
450
|
+
const match = (state) => {
|
298
451
|
const annotations2 = [];
|
299
|
-
const text =
|
452
|
+
const text = state.doc.toString();
|
300
453
|
if (options.match) {
|
301
454
|
const matches = text.matchAll(options.match);
|
302
455
|
for (const match2 of matches) {
|
303
456
|
const from = match2.index;
|
304
457
|
const to = from + match2[0].length;
|
305
|
-
const cursor =
|
458
|
+
const cursor = Cursor.getCursorFromRange(state, {
|
306
459
|
from,
|
307
460
|
to
|
308
461
|
});
|
@@ -314,8 +467,8 @@ var annotations = (options = {}) => {
|
|
314
467
|
return annotations2;
|
315
468
|
};
|
316
469
|
const annotationsState = import_state.StateField.define({
|
317
|
-
create: (
|
318
|
-
return match(
|
470
|
+
create: (state) => {
|
471
|
+
return match(state);
|
319
472
|
},
|
320
473
|
update: (value, tr) => {
|
321
474
|
if (!tr.changes.empty) {
|
@@ -328,10 +481,10 @@ var annotations = (options = {}) => {
|
|
328
481
|
annotationsState,
|
329
482
|
import_view2.EditorView.decorations.compute([
|
330
483
|
annotationsState
|
331
|
-
], (
|
332
|
-
const annotations2 =
|
484
|
+
], (state) => {
|
485
|
+
const annotations2 = state.field(annotationsState);
|
333
486
|
const decorations = annotations2.map((annotation) => {
|
334
|
-
const range =
|
487
|
+
const range = Cursor.getRangeFromCursor(state, annotation.cursor);
|
335
488
|
return range && annotationMark.range(range.from, range.to);
|
336
489
|
}).filter(import_util.isNotFalsy);
|
337
490
|
return import_view2.Decoration.set(decorations);
|
@@ -382,14 +535,14 @@ var autocomplete = ({ activateOnTyping, override, onSearch } = {}) => {
|
|
382
535
|
}
|
383
536
|
return extensions;
|
384
537
|
};
|
385
|
-
var
|
538
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
|
386
539
|
var cursorConverter = (accessor) => ({
|
387
540
|
toCursor: (pos, assoc) => {
|
388
541
|
try {
|
389
542
|
return (0, import_echo.toCursor)(accessor, pos, assoc);
|
390
543
|
} catch (err) {
|
391
|
-
|
392
|
-
F:
|
544
|
+
import_log2.log.catch(err, void 0, {
|
545
|
+
F: __dxlog_file2,
|
393
546
|
L: 15,
|
394
547
|
S: void 0,
|
395
548
|
C: (f, a) => f(...a)
|
@@ -401,8 +554,8 @@ var cursorConverter = (accessor) => ({
|
|
401
554
|
try {
|
402
555
|
return (0, import_echo.fromCursor)(accessor, cursor);
|
403
556
|
} catch (err) {
|
404
|
-
|
405
|
-
F:
|
557
|
+
import_log2.log.catch(err, void 0, {
|
558
|
+
F: __dxlog_file2,
|
406
559
|
L: 24,
|
407
560
|
S: void 0,
|
408
561
|
C: (f, a) => f(...a)
|
@@ -411,18 +564,18 @@ var cursorConverter = (accessor) => ({
|
|
411
564
|
}
|
412
565
|
}
|
413
566
|
});
|
414
|
-
var getPath = (
|
415
|
-
var getLastHeads = (
|
416
|
-
var updateHeadsEffect =
|
567
|
+
var getPath = (state, field) => state.field(field).path;
|
568
|
+
var getLastHeads = (state, field) => state.field(field).lastHeads;
|
569
|
+
var updateHeadsEffect = import_state4.StateEffect.define({});
|
417
570
|
var updateHeads = (newHeads) => updateHeadsEffect.of({
|
418
571
|
newHeads
|
419
572
|
});
|
420
|
-
var reconcileAnnotation =
|
573
|
+
var reconcileAnnotation = import_state4.Annotation.define();
|
421
574
|
var isReconcile = (tr) => {
|
422
575
|
return !!tr.annotation(reconcileAnnotation);
|
423
576
|
};
|
424
|
-
var updateAutomerge = (field, handle, transactions,
|
425
|
-
const { lastHeads, path } =
|
577
|
+
var updateAutomerge = (field, handle, transactions, state) => {
|
578
|
+
const { lastHeads, path } = state.field(field);
|
426
579
|
let hasChanges = false;
|
427
580
|
for (const tr of transactions) {
|
428
581
|
tr.changes.iterChanges(() => {
|
@@ -453,7 +606,7 @@ var updateCodeMirror = (view, selection, target, patches) => {
|
|
453
606
|
for (const patch of patches) {
|
454
607
|
const changeSpec = handlePatch(patch, target, view.state);
|
455
608
|
if (changeSpec != null) {
|
456
|
-
const changeSet =
|
609
|
+
const changeSet = import_state5.ChangeSet.of(changeSpec, view.state.doc.length, "\n");
|
457
610
|
selection = selection.map(changeSet, 1);
|
458
611
|
view.dispatch({
|
459
612
|
changes: changeSet,
|
@@ -466,7 +619,7 @@ var updateCodeMirror = (view, selection, target, patches) => {
|
|
466
619
|
annotations: reconcileAnnotation.of(false)
|
467
620
|
});
|
468
621
|
};
|
469
|
-
var handlePatch = (patch, target,
|
622
|
+
var handlePatch = (patch, target, state) => {
|
470
623
|
if (patch.action === "insert") {
|
471
624
|
return handleInsert(target, patch);
|
472
625
|
} else if (patch.action === "splice") {
|
@@ -474,7 +627,7 @@ var handlePatch = (patch, target, state2) => {
|
|
474
627
|
} else if (patch.action === "del") {
|
475
628
|
return handleDel(target, patch);
|
476
629
|
} else if (patch.action === "put") {
|
477
|
-
return handlePut(target, patch,
|
630
|
+
return handlePut(target, patch, state);
|
478
631
|
} else {
|
479
632
|
return null;
|
480
633
|
}
|
@@ -518,7 +671,7 @@ var handleDel = (target, patch) => {
|
|
518
671
|
}
|
519
672
|
];
|
520
673
|
};
|
521
|
-
var handlePut = (target, patch,
|
674
|
+
var handlePut = (target, patch, state) => {
|
522
675
|
const index = charPath(target, [
|
523
676
|
...patch.path,
|
524
677
|
0
|
@@ -526,7 +679,7 @@ var handlePut = (target, patch, state2) => {
|
|
526
679
|
if (index == null) {
|
527
680
|
return [];
|
528
681
|
}
|
529
|
-
const length =
|
682
|
+
const length = state.doc.length;
|
530
683
|
if (typeof patch.value !== "string") {
|
531
684
|
return [];
|
532
685
|
}
|
@@ -596,7 +749,7 @@ var Syncer = class {
|
|
596
749
|
}
|
597
750
|
};
|
598
751
|
var automerge = (accessor) => {
|
599
|
-
const syncState =
|
752
|
+
const syncState = import_state3.StateField.define({
|
600
753
|
create: () => ({
|
601
754
|
path: accessor.path.slice(),
|
602
755
|
lastHeads: import_automerge.next.getHeads(accessor.handle.docSync()),
|
@@ -627,7 +780,7 @@ var automerge = (accessor) => {
|
|
627
780
|
});
|
628
781
|
const syncer = new Syncer(accessor.handle, syncState);
|
629
782
|
return [
|
630
|
-
|
783
|
+
Cursor.converter.of(cursorConverter(accessor)),
|
631
784
|
// Track heads.
|
632
785
|
syncState,
|
633
786
|
// Reconcile external updates.
|
@@ -651,7 +804,7 @@ var automerge = (accessor) => {
|
|
651
804
|
})
|
652
805
|
];
|
653
806
|
};
|
654
|
-
var
|
807
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness.ts";
|
655
808
|
var dummyProvider = {
|
656
809
|
remoteStateChange: new import_async.Event(),
|
657
810
|
open: () => {
|
@@ -662,8 +815,8 @@ var dummyProvider = {
|
|
662
815
|
update: () => {
|
663
816
|
}
|
664
817
|
};
|
665
|
-
var awarenessProvider =
|
666
|
-
var RemoteSelectionChangedAnnotation =
|
818
|
+
var awarenessProvider = singleValueFacet(dummyProvider);
|
819
|
+
var RemoteSelectionChangedAnnotation = import_state6.Annotation.define();
|
667
820
|
var awareness = (provider = dummyProvider) => {
|
668
821
|
return [
|
669
822
|
awarenessProvider.of(provider),
|
@@ -676,11 +829,11 @@ var awareness = (provider = dummyProvider) => {
|
|
676
829
|
var RemoteSelectionsDecorator = class {
|
677
830
|
constructor(view) {
|
678
831
|
this._ctx = new import_context.Context(void 0, {
|
679
|
-
F:
|
832
|
+
F: __dxlog_file3,
|
680
833
|
L: 80
|
681
834
|
});
|
682
|
-
this.decorations =
|
683
|
-
this._cursorConverter = view.state.facet(
|
835
|
+
this.decorations = import_state6.RangeSet.of([]);
|
836
|
+
this._cursorConverter = view.state.facet(Cursor.converter);
|
684
837
|
this._provider = view.state.facet(awarenessProvider);
|
685
838
|
this._provider.open();
|
686
839
|
this._provider.remoteStateChange.on(this._ctx, () => {
|
@@ -715,9 +868,9 @@ var RemoteSelectionsDecorator = class {
|
|
715
868
|
_updateRemoteSelections(view) {
|
716
869
|
const decorations = [];
|
717
870
|
const awarenessStates = this._provider.getRemoteStates();
|
718
|
-
for (const
|
719
|
-
const anchor =
|
720
|
-
const head =
|
871
|
+
for (const state of awarenessStates) {
|
872
|
+
const anchor = state.position?.anchor ? this._cursorConverter.fromCursor(state.position.anchor) : null;
|
873
|
+
const head = state.position?.head ? this._cursorConverter.fromCursor(state.position.head) : null;
|
721
874
|
if (anchor == null || head == null) {
|
722
875
|
continue;
|
723
876
|
}
|
@@ -725,8 +878,8 @@ var RemoteSelectionsDecorator = class {
|
|
725
878
|
const end = Math.min(Math.max(anchor, head), view.state.doc.length);
|
726
879
|
const startLine = view.state.doc.lineAt(start);
|
727
880
|
const endLine = view.state.doc.lineAt(end);
|
728
|
-
const darkColor =
|
729
|
-
const lightColor =
|
881
|
+
const darkColor = state.info.darkColor;
|
882
|
+
const lightColor = state.info.lightColor;
|
730
883
|
if (startLine.number === endLine.number) {
|
731
884
|
decorations.push({
|
732
885
|
from: start,
|
@@ -779,7 +932,7 @@ var RemoteSelectionsDecorator = class {
|
|
779
932
|
value: import_view5.Decoration.widget({
|
780
933
|
side: head - anchor > 0 ? -1 : 1,
|
781
934
|
block: false,
|
782
|
-
widget: new RemoteCaretWidget(
|
935
|
+
widget: new RemoteCaretWidget(state.info.displayName ?? "Anonymous", darkColor)
|
783
936
|
})
|
784
937
|
});
|
785
938
|
}
|
@@ -879,7 +1032,7 @@ var styles2 = import_view5.EditorView.theme({
|
|
879
1032
|
transitionDelay: "0s"
|
880
1033
|
}
|
881
1034
|
});
|
882
|
-
var
|
1035
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness-provider.ts";
|
883
1036
|
var DEBOUNCE_INTERVAL = 100;
|
884
1037
|
var SpaceAwarenessProvider = class {
|
885
1038
|
constructor(params) {
|
@@ -892,7 +1045,7 @@ var SpaceAwarenessProvider = class {
|
|
892
1045
|
}
|
893
1046
|
open() {
|
894
1047
|
this._ctx = new import_context2.Context(void 0, {
|
895
|
-
F:
|
1048
|
+
F: __dxlog_file4,
|
896
1049
|
L: 57
|
897
1050
|
});
|
898
1051
|
this._postTask = new import_async2.DeferredTask(this._ctx, async () => {
|
@@ -919,10 +1072,10 @@ var SpaceAwarenessProvider = class {
|
|
919
1072
|
void this._space.postMessage(this._channel, {
|
920
1073
|
kind: "query"
|
921
1074
|
}).catch((err) => {
|
922
|
-
|
1075
|
+
import_log3.log.debug("failed to query awareness", {
|
923
1076
|
err
|
924
1077
|
}, {
|
925
|
-
F:
|
1078
|
+
F: __dxlog_file4,
|
926
1079
|
L: 91,
|
927
1080
|
S: this,
|
928
1081
|
C: (f, a) => f(...a)
|
@@ -939,7 +1092,7 @@ var SpaceAwarenessProvider = class {
|
|
939
1092
|
}
|
940
1093
|
update(position) {
|
941
1094
|
(0, import_invariant.invariant)(this._postTask, void 0, {
|
942
|
-
F:
|
1095
|
+
F: __dxlog_file4,
|
943
1096
|
L: 106,
|
944
1097
|
S: this,
|
945
1098
|
A: [
|
@@ -956,7 +1109,7 @@ var SpaceAwarenessProvider = class {
|
|
956
1109
|
}
|
957
1110
|
_handleQueryMessage() {
|
958
1111
|
(0, import_invariant.invariant)(this._postTask, void 0, {
|
959
|
-
F:
|
1112
|
+
F: __dxlog_file4,
|
960
1113
|
L: 117,
|
961
1114
|
S: this,
|
962
1115
|
A: [
|
@@ -968,7 +1121,7 @@ var SpaceAwarenessProvider = class {
|
|
968
1121
|
}
|
969
1122
|
_handlePostMessage(message) {
|
970
1123
|
(0, import_invariant.invariant)(message.kind === "post", void 0, {
|
971
|
-
F:
|
1124
|
+
F: __dxlog_file4,
|
972
1125
|
L: 122,
|
973
1126
|
S: this,
|
974
1127
|
A: [
|
@@ -980,7 +1133,7 @@ var SpaceAwarenessProvider = class {
|
|
980
1133
|
this.remoteStateChange.emit();
|
981
1134
|
}
|
982
1135
|
};
|
983
|
-
var
|
1136
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
|
984
1137
|
var defaultOptions = {
|
985
1138
|
effect: 2,
|
986
1139
|
maxParticles: 200,
|
@@ -1107,7 +1260,7 @@ var Blaster = class {
|
|
1107
1260
|
}
|
1108
1261
|
initialize() {
|
1109
1262
|
(0, import_invariant2.invariant)(!this._canvas && !this._ctx, void 0, {
|
1110
|
-
F:
|
1263
|
+
F: __dxlog_file5,
|
1111
1264
|
L: 141,
|
1112
1265
|
S: this,
|
1113
1266
|
A: [
|
@@ -1144,7 +1297,7 @@ var Blaster = class {
|
|
1144
1297
|
}
|
1145
1298
|
start() {
|
1146
1299
|
(0, import_invariant2.invariant)(this._canvas && this._ctx, void 0, {
|
1147
|
-
F:
|
1300
|
+
F: __dxlog_file5,
|
1148
1301
|
L: 180,
|
1149
1302
|
S: this,
|
1150
1303
|
A: [
|
@@ -1285,10 +1438,10 @@ var random = (min, max) => {
|
|
1285
1438
|
}
|
1286
1439
|
return min + ~~(Math.random() * (max - min + 1));
|
1287
1440
|
};
|
1288
|
-
var commandConfig =
|
1289
|
-
var commandState =
|
1441
|
+
var commandConfig = singleValueFacet();
|
1442
|
+
var commandState = import_state8.StateField.define({
|
1290
1443
|
create: () => ({}),
|
1291
|
-
update: (
|
1444
|
+
update: (state, tr) => {
|
1292
1445
|
for (const effect of tr.effects) {
|
1293
1446
|
if (effect.is(closeEffect)) {
|
1294
1447
|
return {};
|
@@ -1339,14 +1492,14 @@ var commandState = import_state7.StateField.define({
|
|
1339
1492
|
};
|
1340
1493
|
}
|
1341
1494
|
}
|
1342
|
-
return
|
1495
|
+
return state;
|
1343
1496
|
},
|
1344
1497
|
provide: (field) => [
|
1345
1498
|
import_view9.showTooltip.from(field, (value) => value.tooltip ?? null)
|
1346
1499
|
]
|
1347
1500
|
});
|
1348
|
-
var openEffect =
|
1349
|
-
var closeEffect =
|
1501
|
+
var openEffect = import_state8.StateEffect.define();
|
1502
|
+
var closeEffect = import_state8.StateEffect.define();
|
1350
1503
|
var openCommand = (view) => {
|
1351
1504
|
if (view.state.field(commandState, false)) {
|
1352
1505
|
const selection = view.state.selection.main;
|
@@ -1382,65 +1535,6 @@ var commandKeyBindings = [
|
|
1382
1535
|
run: closeCommand
|
1383
1536
|
}
|
1384
1537
|
];
|
1385
|
-
var flattenRect = (rect, left) => {
|
1386
|
-
const x = left ? rect.left : rect.right;
|
1387
|
-
return {
|
1388
|
-
left: x,
|
1389
|
-
right: x,
|
1390
|
-
top: rect.top,
|
1391
|
-
bottom: rect.bottom
|
1392
|
-
};
|
1393
|
-
};
|
1394
|
-
var scratchRange;
|
1395
|
-
var textRange = (node, from, to = from) => {
|
1396
|
-
const range = scratchRange || (scratchRange = document.createRange());
|
1397
|
-
range.setEnd(node, to);
|
1398
|
-
range.setStart(node, from);
|
1399
|
-
return range;
|
1400
|
-
};
|
1401
|
-
var clientRectsFor = (dom) => {
|
1402
|
-
if (dom.nodeType === 3) {
|
1403
|
-
return textRange(dom, 0, dom.nodeValue.length).getClientRects();
|
1404
|
-
} else if (dom.nodeType === 1) {
|
1405
|
-
return dom.getClientRects();
|
1406
|
-
} else {
|
1407
|
-
return [];
|
1408
|
-
}
|
1409
|
-
};
|
1410
|
-
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/util/error.ts";
|
1411
|
-
var wrapWithCatch = (fn) => {
|
1412
|
-
return (...args) => {
|
1413
|
-
try {
|
1414
|
-
return fn(...args);
|
1415
|
-
} catch (err) {
|
1416
|
-
import_log3.log.catch(err, void 0, {
|
1417
|
-
F: __dxlog_file5,
|
1418
|
-
L: 12,
|
1419
|
-
S: void 0,
|
1420
|
-
C: (f, a) => f(...a)
|
1421
|
-
});
|
1422
|
-
}
|
1423
|
-
};
|
1424
|
-
};
|
1425
|
-
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
1426
|
-
var createElement = (tag, options, children) => {
|
1427
|
-
const el = document.createElement(tag);
|
1428
|
-
if (options?.className) {
|
1429
|
-
el.className = options.className;
|
1430
|
-
}
|
1431
|
-
if (children) {
|
1432
|
-
el.append(...Array.isArray(children) ? children : [
|
1433
|
-
children
|
1434
|
-
]);
|
1435
|
-
}
|
1436
|
-
return el;
|
1437
|
-
};
|
1438
|
-
var renderRoot = (root, node) => {
|
1439
|
-
(0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ThemeProvider, {
|
1440
|
-
tx: import_react_ui_theme2.defaultTx
|
1441
|
-
}, node));
|
1442
|
-
return root;
|
1443
|
-
};
|
1444
1538
|
var CommandHint = class extends import_view8.WidgetType {
|
1445
1539
|
constructor(content) {
|
1446
1540
|
super();
|
@@ -1485,7 +1579,7 @@ var hintViewPlugin = ({ onHint }) => import_view8.ViewPlugin.fromClass(class {
|
|
1485
1579
|
this.deco = import_view8.Decoration.none;
|
1486
1580
|
}
|
1487
1581
|
update(update2) {
|
1488
|
-
const builder = new
|
1582
|
+
const builder = new import_state7.RangeSetBuilder();
|
1489
1583
|
const cState = update2.view.state.field(commandState, false);
|
1490
1584
|
if (!cState?.tooltip) {
|
1491
1585
|
const selection = update2.view.state.selection.main;
|
@@ -1517,56 +1611,99 @@ var command = (options) => {
|
|
1517
1611
|
})
|
1518
1612
|
];
|
1519
1613
|
};
|
1520
|
-
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/
|
1521
|
-
var
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1614
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
|
1615
|
+
var documentId = singleValueFacet();
|
1616
|
+
var stateRestoreAnnotation = "dxos.org/cm/state-restore";
|
1617
|
+
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
1618
|
+
return {
|
1619
|
+
selection,
|
1620
|
+
scrollIntoView: !scrollTo,
|
1621
|
+
effects: scrollTo ? import_view11.EditorView.scrollIntoView(scrollTo, {
|
1622
|
+
yMargin: 96
|
1623
|
+
}) : void 0,
|
1624
|
+
annotations: import_state10.Transaction.userEvent.of(stateRestoreAnnotation)
|
1625
|
+
};
|
1626
|
+
};
|
1627
|
+
var createEditorStateStore = (keyPrefix) => ({
|
1628
|
+
getState: (id) => {
|
1629
|
+
(0, import_invariant3.invariant)(id, void 0, {
|
1526
1630
|
F: __dxlog_file6,
|
1527
|
-
L:
|
1631
|
+
L: 47,
|
1528
1632
|
S: void 0,
|
1529
|
-
|
1633
|
+
A: [
|
1634
|
+
"id",
|
1635
|
+
""
|
1636
|
+
]
|
1530
1637
|
});
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
};
|
1537
|
-
var logChanges = (trs) => {
|
1538
|
-
const changes = trs.flatMap((tr) => {
|
1539
|
-
if (tr.changes.empty) {
|
1540
|
-
return void 0;
|
1541
|
-
}
|
1542
|
-
const changes2 = [];
|
1543
|
-
tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
|
1544
|
-
fromA,
|
1545
|
-
toA,
|
1546
|
-
fromB,
|
1547
|
-
toB,
|
1548
|
-
inserted: inserted.toString()
|
1549
|
-
})));
|
1550
|
-
return changes2;
|
1551
|
-
}).filter(Boolean);
|
1552
|
-
if (changes.length) {
|
1553
|
-
import_log5.log.info("changes", {
|
1554
|
-
changes
|
1555
|
-
}, {
|
1638
|
+
const state = localStorage.getItem(`${keyPrefix}/${id}`);
|
1639
|
+
return state ? JSON.parse(state) : void 0;
|
1640
|
+
},
|
1641
|
+
setState: (id, state) => {
|
1642
|
+
(0, import_invariant3.invariant)(id, void 0, {
|
1556
1643
|
F: __dxlog_file6,
|
1557
|
-
L:
|
1644
|
+
L: 53,
|
1558
1645
|
S: void 0,
|
1559
|
-
|
1646
|
+
A: [
|
1647
|
+
"id",
|
1648
|
+
""
|
1649
|
+
]
|
1560
1650
|
});
|
1651
|
+
localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
|
1561
1652
|
}
|
1653
|
+
});
|
1654
|
+
var selectionState = ({ getState, setState } = {}) => {
|
1655
|
+
const setStateDebounced = (0, import_async4.debounce)(setState, 1e3);
|
1656
|
+
return [
|
1657
|
+
// TODO(burdon): Track scrolling (currently only updates when cursor moves).
|
1658
|
+
// EditorView.domEventHandlers({
|
1659
|
+
// scroll: (event) => {
|
1660
|
+
// setStateDebounced(id, {});
|
1661
|
+
// },
|
1662
|
+
// }),
|
1663
|
+
import_view11.EditorView.updateListener.of(({ view, transactions }) => {
|
1664
|
+
const id = view.state.facet(documentId);
|
1665
|
+
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
1666
|
+
return;
|
1667
|
+
}
|
1668
|
+
if (setState) {
|
1669
|
+
const { scrollTop } = view.scrollDOM;
|
1670
|
+
const pos = view.posAtCoords({
|
1671
|
+
x: 0,
|
1672
|
+
y: scrollTop
|
1673
|
+
});
|
1674
|
+
if (pos !== null) {
|
1675
|
+
const { anchor, head } = view.state.selection.main;
|
1676
|
+
setStateDebounced(id, {
|
1677
|
+
scrollTo: pos,
|
1678
|
+
selection: {
|
1679
|
+
anchor,
|
1680
|
+
head
|
1681
|
+
}
|
1682
|
+
});
|
1683
|
+
}
|
1684
|
+
}
|
1685
|
+
}),
|
1686
|
+
getState && import_view11.keymap.of([
|
1687
|
+
{
|
1688
|
+
key: "ctrl-r",
|
1689
|
+
run: (view) => {
|
1690
|
+
const state = getState(view.state.facet(documentId));
|
1691
|
+
if (state) {
|
1692
|
+
view.dispatch(createEditorStateTransaction(state));
|
1693
|
+
}
|
1694
|
+
return true;
|
1695
|
+
}
|
1696
|
+
}
|
1697
|
+
])
|
1698
|
+
].filter(import_util3.isNotFalsy);
|
1562
1699
|
};
|
1563
1700
|
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
1564
|
-
var setComments =
|
1565
|
-
var setSelection =
|
1566
|
-
var setCommentState =
|
1567
|
-
var commentsState =
|
1568
|
-
create: (
|
1569
|
-
id:
|
1701
|
+
var setComments = import_state9.StateEffect.define();
|
1702
|
+
var setSelection = import_state9.StateEffect.define();
|
1703
|
+
var setCommentState = import_state9.StateEffect.define();
|
1704
|
+
var commentsState = import_state9.StateField.define({
|
1705
|
+
create: (state) => ({
|
1706
|
+
id: state.facet(documentId),
|
1570
1707
|
comments: [],
|
1571
1708
|
selection: {}
|
1572
1709
|
}),
|
@@ -1584,7 +1721,7 @@ var commentsState = import_state8.StateField.define({
|
|
1584
1721
|
if (!comment.cursor) {
|
1585
1722
|
return void 0;
|
1586
1723
|
}
|
1587
|
-
const range =
|
1724
|
+
const range = Cursor.getRangeFromCursor(tr.state, comment.cursor);
|
1588
1725
|
return range && {
|
1589
1726
|
comment,
|
1590
1727
|
range
|
@@ -1624,14 +1761,14 @@ var createCommentMark = (id, isCurrent) => import_view10.Decoration.mark({
|
|
1624
1761
|
});
|
1625
1762
|
var commentsDecorations = import_view10.EditorView.decorations.compute([
|
1626
1763
|
commentsState
|
1627
|
-
], (
|
1628
|
-
const { selection: { current }, comments: comments2 } =
|
1764
|
+
], (state) => {
|
1765
|
+
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
1629
1766
|
const decorations = (0, import_lodash2.default)(comments2 ?? [], (range) => range.range.from)?.flatMap((comment) => {
|
1630
1767
|
const range = comment.range;
|
1631
1768
|
if (!range) {
|
1632
1769
|
import_log4.log.warn("Invalid range:", range, {
|
1633
1770
|
F: __dxlog_file7,
|
1634
|
-
L:
|
1771
|
+
L: 142,
|
1635
1772
|
S: void 0,
|
1636
1773
|
C: (f, a) => f(...a)
|
1637
1774
|
});
|
@@ -1644,7 +1781,7 @@ var commentsDecorations = import_view10.EditorView.decorations.compute([
|
|
1644
1781
|
}).filter(import_util2.nonNullable);
|
1645
1782
|
return import_view10.Decoration.set(decorations);
|
1646
1783
|
});
|
1647
|
-
var commentClickedEffect =
|
1784
|
+
var commentClickedEffect = import_state9.StateEffect.define();
|
1648
1785
|
var handleCommentClick = import_view10.EditorView.domEventHandlers({
|
1649
1786
|
click: (event, view) => {
|
1650
1787
|
let target = event.target;
|
@@ -1747,7 +1884,7 @@ var trackPastedComments = (onUpdate) => {
|
|
1747
1884
|
const { comments: comments2 } = update2.startState.field(commentsState);
|
1748
1885
|
const exists = comments2.some((c) => c.comment.id === comment.id && c.range.from < c.range.to);
|
1749
1886
|
if (!exists) {
|
1750
|
-
const cursor =
|
1887
|
+
const cursor = Cursor.getCursorFromRange(update2.state, comment);
|
1751
1888
|
onUpdate({
|
1752
1889
|
id: comment.id,
|
1753
1890
|
cursor
|
@@ -1762,7 +1899,7 @@ var mapTrackedComment = (comment, changes) => ({
|
|
1762
1899
|
from: changes.mapPos(comment.from, 1),
|
1763
1900
|
to: changes.mapPos(comment.to, 1)
|
1764
1901
|
});
|
1765
|
-
var restoreCommentEffect =
|
1902
|
+
var restoreCommentEffect = import_state9.StateEffect.define({
|
1766
1903
|
map: mapTrackedComment
|
1767
1904
|
});
|
1768
1905
|
var createComment = (view) => {
|
@@ -1779,7 +1916,7 @@ var createComment = (view) => {
|
|
1779
1916
|
}
|
1780
1917
|
});
|
1781
1918
|
}
|
1782
|
-
const cursor =
|
1919
|
+
const cursor = Cursor.getCursorFromRange(view.state, {
|
1783
1920
|
from,
|
1784
1921
|
to
|
1785
1922
|
});
|
@@ -1793,13 +1930,13 @@ var createComment = (view) => {
|
|
1793
1930
|
}
|
1794
1931
|
return false;
|
1795
1932
|
};
|
1796
|
-
var optionsFacet =
|
1933
|
+
var optionsFacet = singleValueFacet();
|
1797
1934
|
var comments = (options = {}) => {
|
1798
1935
|
const { key: shortcut = "meta-'" } = options;
|
1799
|
-
const handleSelect = (0, import_async3.debounce)((
|
1936
|
+
const handleSelect = (0, import_async3.debounce)((state) => options.onSelect?.(state), 200);
|
1800
1937
|
return [
|
1801
1938
|
optionsFacet.of(options),
|
1802
|
-
options.id ?
|
1939
|
+
options.id ? documentId.of(options.id) : void 0,
|
1803
1940
|
commentsState,
|
1804
1941
|
commentsDecorations,
|
1805
1942
|
handleCommentClick,
|
@@ -1846,13 +1983,13 @@ var comments = (options = {}) => {
|
|
1846
1983
|
//
|
1847
1984
|
// Track deleted ranges and update ranges for decorations.
|
1848
1985
|
//
|
1849
|
-
import_view10.EditorView.updateListener.of(({ view, state
|
1986
|
+
import_view10.EditorView.updateListener.of(({ view, state, changes }) => {
|
1850
1987
|
let mod = false;
|
1851
|
-
const { comments: comments2, ...value } =
|
1988
|
+
const { comments: comments2, ...value } = state.field(commentsState);
|
1852
1989
|
changes.iterChanges((from, to, from2, to2) => {
|
1853
1990
|
comments2.forEach(({ comment, range }) => {
|
1854
1991
|
if (from2 === to2) {
|
1855
|
-
const newRange =
|
1992
|
+
const newRange = Cursor.getRangeFromCursor(view.state, comment.cursor);
|
1856
1993
|
if (!newRange || newRange.to - newRange.from === 0) {
|
1857
1994
|
options.onDelete?.({
|
1858
1995
|
id: comment.id
|
@@ -1860,7 +1997,7 @@ var comments = (options = {}) => {
|
|
1860
1997
|
}
|
1861
1998
|
}
|
1862
1999
|
if (from <= range.to) {
|
1863
|
-
const newRange =
|
2000
|
+
const newRange = Cursor.getRangeFromCursor(view.state, comment.cursor);
|
1864
2001
|
Object.assign(range, newRange);
|
1865
2002
|
mod = true;
|
1866
2003
|
}
|
@@ -1878,10 +2015,10 @@ var comments = (options = {}) => {
|
|
1878
2015
|
//
|
1879
2016
|
// Track selection/proximity.
|
1880
2017
|
//
|
1881
|
-
import_view10.EditorView.updateListener.of(({ view, state
|
2018
|
+
import_view10.EditorView.updateListener.of(({ view, state }) => {
|
1882
2019
|
let min = Infinity;
|
1883
|
-
const { selection: { current, closest }, comments: comments2 } =
|
1884
|
-
const { head } =
|
2020
|
+
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2021
|
+
const { head } = state.selection.main;
|
1885
2022
|
const selection = {};
|
1886
2023
|
comments2.forEach(({ comment, range }) => {
|
1887
2024
|
if (head >= range.from && head <= range.to) {
|
@@ -1902,7 +2039,7 @@ var comments = (options = {}) => {
|
|
1902
2039
|
});
|
1903
2040
|
handleSelect({
|
1904
2041
|
selection,
|
1905
|
-
id:
|
2042
|
+
id: state.facet(documentId),
|
1906
2043
|
comments: comments2.map(({ comment, range }) => ({
|
1907
2044
|
comment,
|
1908
2045
|
range,
|
@@ -1919,7 +2056,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
1919
2056
|
if (!comment?.comment.cursor) {
|
1920
2057
|
return;
|
1921
2058
|
}
|
1922
|
-
const range =
|
2059
|
+
const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
|
1923
2060
|
if (range) {
|
1924
2061
|
const currentSelection = view.state.selection.main;
|
1925
2062
|
const currentScrollPosition = view.scrollDOM.scrollTop;
|
@@ -1943,12 +2080,12 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
1943
2080
|
}
|
1944
2081
|
}
|
1945
2082
|
};
|
1946
|
-
var selectionOverlapsComment = (
|
1947
|
-
const commentState =
|
2083
|
+
var selectionOverlapsComment = (state) => {
|
2084
|
+
const commentState = state.field(commentsState, false);
|
1948
2085
|
if (commentState === void 0) {
|
1949
2086
|
return false;
|
1950
2087
|
}
|
1951
|
-
const { selection } =
|
2088
|
+
const { selection } = state;
|
1952
2089
|
for (const range of selection.ranges) {
|
1953
2090
|
if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {
|
1954
2091
|
return true;
|
@@ -1956,8 +2093,8 @@ var selectionOverlapsComment = (state2) => {
|
|
1956
2093
|
}
|
1957
2094
|
return false;
|
1958
2095
|
};
|
1959
|
-
var hasActiveSelection = (
|
1960
|
-
return
|
2096
|
+
var hasActiveSelection = (state) => {
|
2097
|
+
return state.selection.ranges.some((range) => !range.empty);
|
1961
2098
|
};
|
1962
2099
|
var ExternalCommentSync = class {
|
1963
2100
|
constructor(view, id, subscribe, getComments) {
|
@@ -1966,7 +2103,7 @@ var ExternalCommentSync = class {
|
|
1966
2103
|
};
|
1967
2104
|
const updateComments = () => {
|
1968
2105
|
const comments2 = getComments();
|
1969
|
-
if (id === view.state.facet(
|
2106
|
+
if (id === view.state.facet(documentId)) {
|
1970
2107
|
queueMicrotask(() => view.dispatch({
|
1971
2108
|
effects: setComments.of({
|
1972
2109
|
id,
|
@@ -1984,7 +2121,7 @@ var createExternalCommentSync = (id, subscribe, getComments) => import_view10.Vi
|
|
1984
2121
|
}
|
1985
2122
|
});
|
1986
2123
|
var useCommentState = () => {
|
1987
|
-
const [
|
2124
|
+
const [state, setState] = (0, import_react4.useState)({
|
1988
2125
|
comment: false,
|
1989
2126
|
selection: false
|
1990
2127
|
});
|
@@ -1997,14 +2134,14 @@ var useCommentState = () => {
|
|
1997
2134
|
}
|
1998
2135
|
}), []);
|
1999
2136
|
return [
|
2000
|
-
|
2137
|
+
state,
|
2001
2138
|
observer
|
2002
2139
|
];
|
2003
2140
|
};
|
2004
2141
|
var useComments = (view, id, comments2) => {
|
2005
2142
|
(0, import_react4.useEffect)(() => {
|
2006
2143
|
if (view) {
|
2007
|
-
if (id === view.state.facet(
|
2144
|
+
if (id === view.state.facet(documentId)) {
|
2008
2145
|
view.dispatch({
|
2009
2146
|
effects: setComments.of({
|
2010
2147
|
id,
|
@@ -2028,16 +2165,16 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2028
2165
|
onCommentClick
|
2029
2166
|
]);
|
2030
2167
|
};
|
2031
|
-
var debugNodeLogger = (
|
2032
|
-
const logTokens = (
|
2033
|
-
enter: (node) =>
|
2168
|
+
var debugNodeLogger = (log8 = console.log) => {
|
2169
|
+
const logTokens = (state) => (0, import_language.syntaxTree)(state).iterate({
|
2170
|
+
enter: (node) => log8(node.type)
|
2034
2171
|
});
|
2035
|
-
return
|
2036
|
-
create: (
|
2172
|
+
return import_state11.StateField.define({
|
2173
|
+
create: (state) => logTokens(state),
|
2037
2174
|
update: (_, tr) => logTokens(tr.state)
|
2038
2175
|
});
|
2039
2176
|
};
|
2040
|
-
var styles4 =
|
2177
|
+
var styles4 = import_view12.EditorView.theme({
|
2041
2178
|
".cm-dropCursor": {
|
2042
2179
|
borderLeft: "2px solid var(--dx-accentText)",
|
2043
2180
|
color: "var(--dx-accentText)",
|
@@ -2050,8 +2187,8 @@ var styles4 = import_view11.EditorView.theme({
|
|
2050
2187
|
var dropFile = (options = {}) => {
|
2051
2188
|
return [
|
2052
2189
|
styles4,
|
2053
|
-
(0,
|
2054
|
-
|
2190
|
+
(0, import_view12.dropCursor)(),
|
2191
|
+
import_view12.EditorView.domEventHandlers({
|
2055
2192
|
drop: (event, view) => {
|
2056
2193
|
event.preventDefault();
|
2057
2194
|
const files = event.dataTransfer?.files;
|
@@ -2070,6 +2207,33 @@ var dropFile = (options = {}) => {
|
|
2070
2207
|
})
|
2071
2208
|
];
|
2072
2209
|
};
|
2210
|
+
var focusEffect = import_state13.StateEffect.define();
|
2211
|
+
var focusField = import_state13.StateField.define({
|
2212
|
+
create: () => false,
|
2213
|
+
update: (value, tr) => {
|
2214
|
+
for (const effect of tr.effects) {
|
2215
|
+
if (effect.is(focusEffect)) {
|
2216
|
+
return effect.value;
|
2217
|
+
}
|
2218
|
+
}
|
2219
|
+
return value;
|
2220
|
+
}
|
2221
|
+
});
|
2222
|
+
var focus = [
|
2223
|
+
focusField,
|
2224
|
+
import_view14.EditorView.domEventHandlers({
|
2225
|
+
focus: (event, view) => {
|
2226
|
+
setTimeout(() => view.dispatch({
|
2227
|
+
effects: focusEffect.of(true)
|
2228
|
+
}));
|
2229
|
+
},
|
2230
|
+
blur: (event, view) => {
|
2231
|
+
setTimeout(() => view.dispatch({
|
2232
|
+
effects: focusEffect.of(false)
|
2233
|
+
}));
|
2234
|
+
}
|
2235
|
+
})
|
2236
|
+
];
|
2073
2237
|
var headings = {
|
2074
2238
|
1: "text-4xl",
|
2075
2239
|
2: "text-3xl",
|
@@ -2290,13 +2454,14 @@ var defaultTheme = {
|
|
2290
2454
|
}
|
2291
2455
|
};
|
2292
2456
|
var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2293
|
-
var preventNewline =
|
2457
|
+
var preventNewline = import_state12.EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2294
2458
|
var defaultBasicOptions = {
|
2295
2459
|
allowMultipleSelections: true,
|
2296
2460
|
bracketMatching: true,
|
2297
2461
|
closeBrackets: true,
|
2298
2462
|
drawSelection: true,
|
2299
2463
|
editable: true,
|
2464
|
+
focus: true,
|
2300
2465
|
history: true,
|
2301
2466
|
keymap: "standard",
|
2302
2467
|
lineWrapping: true,
|
@@ -2312,34 +2477,35 @@ var createBasicExtensions = (_props) => {
|
|
2312
2477
|
const props = (0, import_lodash3.default)({}, _props, defaultBasicOptions);
|
2313
2478
|
return [
|
2314
2479
|
// NOTE: Doesn't catch errors in keymap functions.
|
2315
|
-
|
2316
|
-
|
2480
|
+
import_view13.EditorView.exceptionSink.of((err) => {
|
2481
|
+
import_log5.log.catch(err, void 0, {
|
2317
2482
|
F: __dxlog_file8,
|
2318
|
-
L:
|
2483
|
+
L: 96,
|
2319
2484
|
S: void 0,
|
2320
2485
|
C: (f, a) => f(...a)
|
2321
2486
|
});
|
2322
2487
|
}),
|
2323
|
-
props.allowMultipleSelections &&
|
2488
|
+
props.allowMultipleSelections && import_state12.EditorState.allowMultipleSelections.of(true),
|
2324
2489
|
props.bracketMatching && (0, import_language2.bracketMatching)(),
|
2325
2490
|
props.closeBrackets && (0, import_autocomplete2.closeBrackets)(),
|
2326
|
-
props.dropCursor && (0,
|
2327
|
-
props.drawSelection && (0,
|
2491
|
+
props.dropCursor && (0, import_view13.dropCursor)(),
|
2492
|
+
props.drawSelection && (0, import_view13.drawSelection)({
|
2328
2493
|
cursorBlinkRate: 1200
|
2329
2494
|
}),
|
2330
|
-
props.
|
2495
|
+
props.focus && focus,
|
2496
|
+
props.highlightActiveLine && (0, import_view13.highlightActiveLine)(),
|
2331
2497
|
props.history && (0, import_commands2.history)(),
|
2332
|
-
props.lineNumbers && (0,
|
2333
|
-
props.lineWrapping &&
|
2334
|
-
props.placeholder && (0,
|
2498
|
+
props.lineNumbers && (0, import_view13.lineNumbers)(),
|
2499
|
+
props.lineWrapping && import_view13.EditorView.lineWrapping,
|
2500
|
+
props.placeholder && (0, import_view13.placeholder)(props.placeholder),
|
2335
2501
|
props.readonly && [
|
2336
|
-
|
2337
|
-
|
2502
|
+
import_state12.EditorState.readOnly.of(true),
|
2503
|
+
import_view13.EditorView.editable.of(false)
|
2338
2504
|
],
|
2339
|
-
props.scrollPastEnd && (0,
|
2340
|
-
props.tabSize &&
|
2505
|
+
props.scrollPastEnd && (0, import_view13.scrollPastEnd)(),
|
2506
|
+
props.tabSize && import_state12.EditorState.tabSize.of(props.tabSize),
|
2341
2507
|
// https://codemirror.net/docs/ref/#view.KeyBinding
|
2342
|
-
|
2508
|
+
import_view13.keymap.of([
|
2343
2509
|
...(props.keymap && keymaps[props.keymap]) ?? [],
|
2344
2510
|
// NOTE: Tabs are also configured by markdown extension.
|
2345
2511
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
@@ -2352,8 +2518,8 @@ var createBasicExtensions = (_props) => {
|
|
2352
2518
|
...props.history ? import_commands2.historyKeymap : [],
|
2353
2519
|
// https://codemirror.net/docs/ref/#search.searchKeymap
|
2354
2520
|
...props.search ? import_search.searchKeymap : []
|
2355
|
-
].filter(
|
2356
|
-
].filter(
|
2521
|
+
].filter(import_util4.isNotFalsy))
|
2522
|
+
].filter(import_util4.isNotFalsy);
|
2357
2523
|
};
|
2358
2524
|
var defaultThemeSlots = {
|
2359
2525
|
editor: {
|
@@ -2363,17 +2529,17 @@ var defaultThemeSlots = {
|
|
2363
2529
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2364
2530
|
const slots = (0, import_lodash3.default)({}, _slots, defaultThemeSlots);
|
2365
2531
|
return [
|
2366
|
-
|
2367
|
-
|
2532
|
+
import_view13.EditorView.darkTheme.of(themeMode === "dark"),
|
2533
|
+
import_view13.EditorView.baseTheme(styles5 ? (0, import_lodash4.default)({}, defaultTheme, styles5) : defaultTheme),
|
2368
2534
|
// https://github.com/codemirror/theme-one-dark
|
2369
2535
|
_syntaxHighlighting && (themeMode === "dark" ? (0, import_language2.syntaxHighlighting)(import_theme_one_dark.oneDarkHighlightStyle) : (0, import_language2.syntaxHighlighting)(import_language2.defaultHighlightStyle)),
|
2370
|
-
slots.editor?.className &&
|
2536
|
+
slots.editor?.className && import_view13.EditorView.editorAttributes.of({
|
2371
2537
|
class: slots.editor.className
|
2372
2538
|
}),
|
2373
|
-
slots.content?.className &&
|
2539
|
+
slots.content?.className && import_view13.EditorView.contentAttributes.of({
|
2374
2540
|
class: slots.content.className
|
2375
2541
|
})
|
2376
|
-
].filter(
|
2542
|
+
].filter(import_util4.isNotFalsy);
|
2377
2543
|
};
|
2378
2544
|
var createDataExtensions = ({ id, text, space, identity }) => {
|
2379
2545
|
const extensions = [];
|
@@ -2382,7 +2548,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2382
2548
|
}
|
2383
2549
|
if (space && identity) {
|
2384
2550
|
const peerId = identity?.identityKey.toHex();
|
2385
|
-
const { cursorLightValue, cursorDarkValue } = import_react_ui_theme3.hueTokens[identity?.profile?.data?.hue ?? (0,
|
2551
|
+
const { cursorLightValue, cursorDarkValue } = import_react_ui_theme3.hueTokens[identity?.profile?.data?.hue ?? (0, import_util4.hexToHue)(peerId ?? "0")];
|
2386
2552
|
extensions.push(awareness(new SpaceAwarenessProvider({
|
2387
2553
|
space,
|
2388
2554
|
channel: `awareness.${id}`,
|
@@ -2417,7 +2583,7 @@ var folding = (_props = {}) => [
|
|
2417
2583
|
}));
|
2418
2584
|
}
|
2419
2585
|
}),
|
2420
|
-
|
2586
|
+
import_view15.EditorView.theme({
|
2421
2587
|
".cm-foldGutter": {
|
2422
2588
|
opacity: 0.3,
|
2423
2589
|
transition: "opacity 0.3s",
|
@@ -2430,11 +2596,11 @@ var folding = (_props = {}) => [
|
|
2430
2596
|
];
|
2431
2597
|
var listener = ({ onFocus, onChange }) => {
|
2432
2598
|
const extensions = [];
|
2433
|
-
onFocus && extensions.push(
|
2599
|
+
onFocus && extensions.push(import_view16.EditorView.focusChangeEffect.of((_, focusing) => {
|
2434
2600
|
onFocus(focusing);
|
2435
2601
|
return null;
|
2436
2602
|
}));
|
2437
|
-
onChange && extensions.push(
|
2603
|
+
onChange && extensions.push(import_view16.EditorView.updateListener.of((update2) => {
|
2438
2604
|
onChange(update2.state.doc.toString());
|
2439
2605
|
}));
|
2440
2606
|
return extensions;
|
@@ -2454,13 +2620,13 @@ var List;
|
|
2454
2620
|
List2[List2["Task"] = 2] = "Task";
|
2455
2621
|
})(List || (List = {}));
|
2456
2622
|
var setHeading = (level) => {
|
2457
|
-
return ({ state
|
2458
|
-
const { selection: { ranges }, doc } =
|
2623
|
+
return ({ state, dispatch }) => {
|
2624
|
+
const { selection: { ranges }, doc } = state;
|
2459
2625
|
const changes = [];
|
2460
2626
|
let prevBlock = -1;
|
2461
2627
|
for (const range of ranges) {
|
2462
2628
|
let sawBlock = false;
|
2463
|
-
(0, import_language4.syntaxTree)(
|
2629
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
2464
2630
|
from: range.from,
|
2465
2631
|
to: range.to,
|
2466
2632
|
enter: (node) => {
|
@@ -2513,7 +2679,7 @@ var setHeading = (level) => {
|
|
2513
2679
|
}
|
2514
2680
|
});
|
2515
2681
|
let line;
|
2516
|
-
if (!sawBlock && range.empty && level > 0 && !/\S/.test((line =
|
2682
|
+
if (!sawBlock && range.empty && level > 0 && !/\S/.test((line = state.doc.lineAt(range.from)).text)) {
|
2517
2683
|
changes.push({
|
2518
2684
|
from: line.from,
|
2519
2685
|
to: line.to,
|
@@ -2524,10 +2690,10 @@ var setHeading = (level) => {
|
|
2524
2690
|
if (!changes.length) {
|
2525
2691
|
return false;
|
2526
2692
|
}
|
2527
|
-
const changeSet =
|
2528
|
-
dispatch(
|
2693
|
+
const changeSet = state.changes(changes);
|
2694
|
+
dispatch(state.update({
|
2529
2695
|
changes: changeSet,
|
2530
|
-
selection:
|
2696
|
+
selection: state.selection.map(changeSet, 1),
|
2531
2697
|
userEvent: "format.setHeading",
|
2532
2698
|
scrollIntoView: true
|
2533
2699
|
}));
|
@@ -2535,14 +2701,14 @@ var setHeading = (level) => {
|
|
2535
2701
|
};
|
2536
2702
|
};
|
2537
2703
|
var setStyle = (type, enable) => {
|
2538
|
-
return ({ state
|
2704
|
+
return ({ state, dispatch }) => {
|
2539
2705
|
const marker = inlineMarkerText(type);
|
2540
|
-
const changes =
|
2706
|
+
const changes = state.changeByRange((range) => {
|
2541
2707
|
if (!enable && range.empty) {
|
2542
|
-
const after =
|
2708
|
+
const after = state.doc.sliceString(range.head, range.head + 6);
|
2543
2709
|
const found = after.indexOf(marker);
|
2544
2710
|
if (found >= 0 && /^[*~`]*$/.test(after.slice(0, found))) {
|
2545
|
-
const before =
|
2711
|
+
const before = state.doc.sliceString(range.head - 6, range.head);
|
2546
2712
|
if (before.slice(before.length - found - marker.length, before.length - found) === marker && [
|
2547
2713
|
...before.slice(before.length - found)
|
2548
2714
|
].reverse().join("") === after.slice(0, found)) {
|
@@ -2557,7 +2723,7 @@ var setStyle = (type, enable) => {
|
|
2557
2723
|
to: range.head + found + marker.length
|
2558
2724
|
}
|
2559
2725
|
],
|
2560
|
-
range:
|
2726
|
+
range: import_state14.EditorSelection.cursor(range.from - marker.length)
|
2561
2727
|
};
|
2562
2728
|
}
|
2563
2729
|
}
|
@@ -2569,14 +2735,14 @@ var setStyle = (type, enable) => {
|
|
2569
2735
|
let startCovered = false;
|
2570
2736
|
let endCovered = false;
|
2571
2737
|
let { from, to } = range;
|
2572
|
-
(0, import_language4.syntaxTree)(
|
2738
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
2573
2739
|
from,
|
2574
2740
|
to,
|
2575
2741
|
enter: (node) => {
|
2576
2742
|
const { name } = node;
|
2577
2743
|
if (Object.hasOwn(Textblocks, name) && Textblocks[name] !== "codeblock") {
|
2578
2744
|
blockStart = blockContentStart(node);
|
2579
|
-
blockEnd = blockContentEnd(node,
|
2745
|
+
blockEnd = blockContentEnd(node, state.doc);
|
2580
2746
|
startCovered = endCovered = false;
|
2581
2747
|
} else if (name === "Link" || name === "Image" && enable) {
|
2582
2748
|
if (from < node.from && to > node.from && to <= node.to) {
|
@@ -2621,7 +2787,7 @@ var setStyle = (type, enable) => {
|
|
2621
2787
|
});
|
2622
2788
|
if (markType !== type && closeStart >= to) {
|
2623
2789
|
changesAtEnd.push({
|
2624
|
-
from: skipSpaces(Math.min(to, blockEnd),
|
2790
|
+
from: skipSpaces(Math.min(to, blockEnd), state.doc, 1, blockEnd),
|
2625
2791
|
insert: inlineMarkerText(markType)
|
2626
2792
|
});
|
2627
2793
|
}
|
@@ -2633,7 +2799,7 @@ var setStyle = (type, enable) => {
|
|
2633
2799
|
});
|
2634
2800
|
if (markType !== type && openEnd <= from) {
|
2635
2801
|
changes2.push({
|
2636
|
-
from: skipSpaces(Math.max(from, blockStart),
|
2802
|
+
from: skipSpaces(Math.max(from, blockStart), state.doc, -1, blockStart),
|
2637
2803
|
insert: inlineMarkerText(markType)
|
2638
2804
|
});
|
2639
2805
|
}
|
@@ -2663,7 +2829,7 @@ var setStyle = (type, enable) => {
|
|
2663
2829
|
changes2.push(startCovered);
|
2664
2830
|
} else if (startCovered) {
|
2665
2831
|
changes2.push({
|
2666
|
-
from: skipSpaces(rangeStart,
|
2832
|
+
from: skipSpaces(rangeStart, state.doc, -1, blockStart),
|
2667
2833
|
insert: marker
|
2668
2834
|
});
|
2669
2835
|
}
|
@@ -2671,7 +2837,7 @@ var setStyle = (type, enable) => {
|
|
2671
2837
|
changes2.push(endCovered);
|
2672
2838
|
} else if (endCovered) {
|
2673
2839
|
changes2.push({
|
2674
|
-
from: skipSpaces(rangeEnd,
|
2840
|
+
from: skipSpaces(rangeEnd, state.doc, 1, blockEnd),
|
2675
2841
|
insert: marker
|
2676
2842
|
});
|
2677
2843
|
}
|
@@ -2679,22 +2845,22 @@ var setStyle = (type, enable) => {
|
|
2679
2845
|
}
|
2680
2846
|
}
|
2681
2847
|
});
|
2682
|
-
if (blockStart < 0 && range.empty && enable && !/\S/.test(
|
2848
|
+
if (blockStart < 0 && range.empty && enable && !/\S/.test(state.doc.lineAt(range.from).text)) {
|
2683
2849
|
return {
|
2684
2850
|
changes: {
|
2685
2851
|
from: range.head,
|
2686
2852
|
insert: marker + marker
|
2687
2853
|
},
|
2688
|
-
range:
|
2854
|
+
range: import_state14.EditorSelection.cursor(range.head + marker.length)
|
2689
2855
|
};
|
2690
2856
|
}
|
2691
|
-
const changeSet =
|
2857
|
+
const changeSet = state.changes(changes2.concat(changesAtEnd));
|
2692
2858
|
return {
|
2693
2859
|
changes: changeSet,
|
2694
|
-
range: range.empty && !changeSet.empty ?
|
2860
|
+
range: range.empty && !changeSet.empty ? import_state14.EditorSelection.cursor(range.head + marker.length) : import_state14.EditorSelection.range(changeSet.mapPos(range.from, 1), changeSet.mapPos(range.to, -1))
|
2695
2861
|
};
|
2696
2862
|
});
|
2697
|
-
dispatch(
|
2863
|
+
dispatch(state.update(changes, {
|
2698
2864
|
userEvent: enable ? "format.style.add" : "format.style.remove",
|
2699
2865
|
scrollIntoView: true
|
2700
2866
|
}));
|
@@ -2771,8 +2937,8 @@ var insertTable = (view) => {
|
|
2771
2937
|
const { from } = doc.line(number);
|
2772
2938
|
snippets.table(view, null, from, from);
|
2773
2939
|
};
|
2774
|
-
var removeLinkInner = (from, to, changes,
|
2775
|
-
(0, import_language4.syntaxTree)(
|
2940
|
+
var removeLinkInner = (from, to, changes, state) => {
|
2941
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
2776
2942
|
from,
|
2777
2943
|
to,
|
2778
2944
|
enter: (node) => {
|
@@ -2786,8 +2952,8 @@ var removeLinkInner = (from, to, changes, state2) => {
|
|
2786
2952
|
});
|
2787
2953
|
} else if (name === "LinkTitle" || name === "URL") {
|
2788
2954
|
changes.push({
|
2789
|
-
from: skipSpaces(node2.from,
|
2790
|
-
to: skipSpaces(node2.to,
|
2955
|
+
from: skipSpaces(node2.from, state.doc, -1),
|
2956
|
+
to: skipSpaces(node2.to, state.doc, 1)
|
2791
2957
|
});
|
2792
2958
|
}
|
2793
2959
|
});
|
@@ -2796,15 +2962,15 @@ var removeLinkInner = (from, to, changes, state2) => {
|
|
2796
2962
|
}
|
2797
2963
|
});
|
2798
2964
|
};
|
2799
|
-
var removeLink = ({ state
|
2965
|
+
var removeLink = ({ state, dispatch }) => {
|
2800
2966
|
const changes = [];
|
2801
|
-
for (const { from, to } of
|
2802
|
-
removeLinkInner(from, to, changes,
|
2967
|
+
for (const { from, to } of state.selection.ranges) {
|
2968
|
+
removeLinkInner(from, to, changes, state);
|
2803
2969
|
}
|
2804
2970
|
if (!changes) {
|
2805
2971
|
return false;
|
2806
2972
|
}
|
2807
|
-
dispatch(
|
2973
|
+
dispatch(state.update({
|
2808
2974
|
changes,
|
2809
2975
|
userEvent: "format.link.remove",
|
2810
2976
|
scrollIntoView: true
|
@@ -2812,17 +2978,17 @@ var removeLink = ({ state: state2, dispatch }) => {
|
|
2812
2978
|
return true;
|
2813
2979
|
};
|
2814
2980
|
var addLink = ({ url, image: image2 } = {}) => {
|
2815
|
-
return ({ state
|
2816
|
-
const changes =
|
2981
|
+
return ({ state, dispatch }) => {
|
2982
|
+
const changes = state.changeByRange((range) => {
|
2817
2983
|
let { from, to } = range;
|
2818
2984
|
const cutStyles = [];
|
2819
2985
|
let okay = null;
|
2820
|
-
(0, import_language4.syntaxTree)(
|
2986
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
2821
2987
|
from,
|
2822
2988
|
to,
|
2823
2989
|
enter: (node) => {
|
2824
2990
|
if (Object.hasOwn(Textblocks, node.name)) {
|
2825
|
-
okay = Textblocks[node.name] !== "codeblock" && from >= blockContentStart(node) && to <= blockContentEnd(node,
|
2991
|
+
okay = Textblocks[node.name] !== "codeblock" && from >= blockContentStart(node) && to <= blockContentEnd(node, state.doc);
|
2826
2992
|
} else if (Object.hasOwn(InlineMarker, node.name)) {
|
2827
2993
|
const sNode = node.node;
|
2828
2994
|
if (node.from < from && node.to <= to) {
|
@@ -2842,7 +3008,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
2842
3008
|
}
|
2843
3009
|
});
|
2844
3010
|
if (okay === null) {
|
2845
|
-
const line =
|
3011
|
+
const line = state.doc.lineAt(from);
|
2846
3012
|
okay = to <= line.to && !/\S/.test(line.text.slice(from - line.from));
|
2847
3013
|
}
|
2848
3014
|
if (!okay) {
|
@@ -2852,26 +3018,26 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
2852
3018
|
}
|
2853
3019
|
const changes2 = [];
|
2854
3020
|
const changesAfter = [];
|
2855
|
-
removeLinkInner(from, to, changesAfter,
|
3021
|
+
removeLinkInner(from, to, changesAfter, state);
|
2856
3022
|
let cursorOffset = 1;
|
2857
3023
|
for (const style of cutStyles) {
|
2858
3024
|
const type = InlineMarker[style.name];
|
2859
3025
|
const mark = inlineMarkerText(type);
|
2860
3026
|
if (style.from < from) {
|
2861
3027
|
changes2.push({
|
2862
|
-
from: skipSpaces(from,
|
3028
|
+
from: skipSpaces(from, state.doc, -1),
|
2863
3029
|
insert: mark
|
2864
3030
|
});
|
2865
3031
|
changesAfter.push({
|
2866
|
-
from: skipSpaces(from,
|
3032
|
+
from: skipSpaces(from, state.doc, 1, to),
|
2867
3033
|
insert: mark
|
2868
3034
|
});
|
2869
3035
|
} else {
|
2870
3036
|
changes2.push({
|
2871
|
-
from: skipSpaces(to,
|
3037
|
+
from: skipSpaces(to, state.doc, -1, from),
|
2872
3038
|
insert: mark
|
2873
3039
|
});
|
2874
|
-
const after = skipSpaces(to,
|
3040
|
+
const after = skipSpaces(to, state.doc, 1);
|
2875
3041
|
if (after === to) {
|
2876
3042
|
cursorOffset += mark.length;
|
2877
3043
|
}
|
@@ -2888,16 +3054,16 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
2888
3054
|
from: to,
|
2889
3055
|
insert: `](${url ?? ""})`
|
2890
3056
|
});
|
2891
|
-
const changeSet =
|
3057
|
+
const changeSet = state.changes(changes2.concat(changesAfter));
|
2892
3058
|
return {
|
2893
3059
|
changes: changeSet,
|
2894
|
-
range:
|
3060
|
+
range: import_state14.EditorSelection.cursor(changeSet.mapPos(to, 1) - cursorOffset - (url ? url.length + 2 : 0))
|
2895
3061
|
};
|
2896
3062
|
});
|
2897
3063
|
if (changes.changes.empty) {
|
2898
3064
|
return false;
|
2899
3065
|
}
|
2900
|
-
dispatch(
|
3066
|
+
dispatch(state.update(changes, {
|
2901
3067
|
userEvent: "format.link.add",
|
2902
3068
|
scrollIntoView: true
|
2903
3069
|
}));
|
@@ -2905,14 +3071,14 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
2905
3071
|
};
|
2906
3072
|
};
|
2907
3073
|
var addList = (type) => {
|
2908
|
-
return ({ state
|
3074
|
+
return ({ state, dispatch }) => {
|
2909
3075
|
let lastBlock = -1;
|
2910
3076
|
let counter = 1;
|
2911
3077
|
let first = true;
|
2912
3078
|
let parentColumn = null;
|
2913
3079
|
const blocks = [];
|
2914
|
-
for (const { from, to } of
|
2915
|
-
(0, import_language4.syntaxTree)(
|
3080
|
+
for (const { from, to } of state.selection.ranges) {
|
3081
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
2916
3082
|
from,
|
2917
3083
|
to,
|
2918
3084
|
enter: (node) => {
|
@@ -2924,7 +3090,7 @@ var addList = (type) => {
|
|
2924
3090
|
}
|
2925
3091
|
if (before?.name === (type === 0 ? "OrderedList" : "BulletList")) {
|
2926
3092
|
const item = before.lastChild;
|
2927
|
-
const itemLine =
|
3093
|
+
const itemLine = state.doc.lineAt(item.from);
|
2928
3094
|
const itemText = itemLine.text.slice(item.from - itemLine.from);
|
2929
3095
|
parentColumn = item.from - itemLine.from + /^\s*/.exec(itemText)[0].length;
|
2930
3096
|
if (type === 0) {
|
@@ -2959,10 +3125,10 @@ var addList = (type) => {
|
|
2959
3125
|
});
|
2960
3126
|
}
|
2961
3127
|
if (!blocks.length) {
|
2962
|
-
const { from, to } =
|
3128
|
+
const { from, to } = state.doc.lineAt(state.selection.main.anchor);
|
2963
3129
|
if (from === to) {
|
2964
3130
|
const insert = type === 1 ? "- " : type === 0 ? "1. " : "- [ ] ";
|
2965
|
-
dispatch(
|
3131
|
+
dispatch(state.update({
|
2966
3132
|
changes: [
|
2967
3133
|
{
|
2968
3134
|
from,
|
@@ -2983,11 +3149,11 @@ var addList = (type) => {
|
|
2983
3149
|
for (let i = 0; i < blocks.length; i++) {
|
2984
3150
|
const { node, counter: counter2, parentColumn: parentColumn2 } = blocks[i];
|
2985
3151
|
const nodeFrom = node.name === "CodeBlock" ? node.from - 4 : node.from;
|
2986
|
-
let padding = nodeFrom > 0 && !/\s/.test(
|
3152
|
+
let padding = nodeFrom > 0 && !/\s/.test(state.doc.sliceString(nodeFrom - 1, nodeFrom)) ? 1 : 0;
|
2987
3153
|
if (type === 0) {
|
2988
3154
|
padding += String(counter2).length;
|
2989
3155
|
}
|
2990
|
-
let line =
|
3156
|
+
let line = state.doc.lineAt(nodeFrom);
|
2991
3157
|
const column = nodeFrom - line.from;
|
2992
3158
|
if (parentColumn2 !== null && parentColumn2 > column) {
|
2993
3159
|
padding = Math.max(padding, parentColumn2 - column);
|
@@ -3012,7 +3178,7 @@ var addList = (type) => {
|
|
3012
3178
|
insert: mark
|
3013
3179
|
});
|
3014
3180
|
while (line.to < node.to) {
|
3015
|
-
line =
|
3181
|
+
line = state.doc.lineAt(line.to + 1);
|
3016
3182
|
const open = /^[\s>]*/.exec(line.text)[0].length;
|
3017
3183
|
changes.push({
|
3018
3184
|
from: line.from + Math.min(open, column),
|
@@ -3027,13 +3193,13 @@ var addList = (type) => {
|
|
3027
3193
|
next = next.nextSibling;
|
3028
3194
|
}
|
3029
3195
|
if (next?.name === "OrderedList") {
|
3030
|
-
renumberListItems(next.firstChild, last.counter + 1, changes,
|
3196
|
+
renumberListItems(next.firstChild, last.counter + 1, changes, state.doc);
|
3031
3197
|
}
|
3032
3198
|
}
|
3033
|
-
const changeSet =
|
3034
|
-
dispatch(
|
3199
|
+
const changeSet = state.changes(changes);
|
3200
|
+
dispatch(state.update({
|
3035
3201
|
changes: changeSet,
|
3036
|
-
selection:
|
3202
|
+
selection: state.selection.map(changeSet, 1),
|
3037
3203
|
userEvent: "format.list.add",
|
3038
3204
|
scrollIntoView: true
|
3039
3205
|
}));
|
@@ -3041,13 +3207,13 @@ var addList = (type) => {
|
|
3041
3207
|
};
|
3042
3208
|
};
|
3043
3209
|
var removeList = (type) => {
|
3044
|
-
return ({ state
|
3210
|
+
return ({ state, dispatch }) => {
|
3045
3211
|
let lastBlock = -1;
|
3046
3212
|
const changes = [];
|
3047
3213
|
const stack = [];
|
3048
3214
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3049
|
-
for (const { from, to } of
|
3050
|
-
(0, import_language4.syntaxTree)(
|
3215
|
+
for (const { from, to } of state.selection.ranges) {
|
3216
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3051
3217
|
from,
|
3052
3218
|
to,
|
3053
3219
|
enter: (node) => {
|
@@ -3064,7 +3230,7 @@ var removeList = (type) => {
|
|
3064
3230
|
stack.pop();
|
3065
3231
|
} else if (name === "ListItem" && stack[stack.length - 1] === targetNodeType && node.from !== lastBlock) {
|
3066
3232
|
lastBlock = node.from;
|
3067
|
-
let line =
|
3233
|
+
let line = state.doc.lineAt(node.from);
|
3068
3234
|
const mark = /^\s*(\d+[.)] |[-*+] (\[[ x]\] )?)/.exec(line.text.slice(node.from - line.from));
|
3069
3235
|
if (!mark) {
|
3070
3236
|
return false;
|
@@ -3075,7 +3241,7 @@ var removeList = (type) => {
|
|
3075
3241
|
to: node.from + mark[0].length
|
3076
3242
|
});
|
3077
3243
|
while (line.to < node.to) {
|
3078
|
-
line =
|
3244
|
+
line = state.doc.lineAt(line.to + 1);
|
3079
3245
|
const open = /^[\s>]*/.exec(line.text)[0].length;
|
3080
3246
|
if (open > column) {
|
3081
3247
|
changes.push({
|
@@ -3085,7 +3251,7 @@ var removeList = (type) => {
|
|
3085
3251
|
}
|
3086
3252
|
}
|
3087
3253
|
if (node.to >= to) {
|
3088
|
-
renumberListItems(node.node.nextSibling, 1, changes,
|
3254
|
+
renumberListItems(node.node.nextSibling, 1, changes, state.doc);
|
3089
3255
|
}
|
3090
3256
|
return false;
|
3091
3257
|
}
|
@@ -3095,7 +3261,7 @@ var removeList = (type) => {
|
|
3095
3261
|
if (!changes.length) {
|
3096
3262
|
return false;
|
3097
3263
|
}
|
3098
|
-
dispatch(
|
3264
|
+
dispatch(state.update({
|
3099
3265
|
changes,
|
3100
3266
|
userEvent: "format.list.remove",
|
3101
3267
|
scrollIntoView: true
|
@@ -3129,12 +3295,12 @@ var renumberListItems = (item, counter, changes, doc) => {
|
|
3129
3295
|
}
|
3130
3296
|
};
|
3131
3297
|
var setBlockquote = (enable) => {
|
3132
|
-
return ({ state
|
3298
|
+
return ({ state, dispatch }) => {
|
3133
3299
|
const lines = [];
|
3134
3300
|
let lastBlock = -1;
|
3135
|
-
for (const { from, to } of
|
3301
|
+
for (const { from, to } of state.selection.ranges) {
|
3136
3302
|
const sawBlock = false;
|
3137
|
-
(0, import_language4.syntaxTree)(
|
3303
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3138
3304
|
from,
|
3139
3305
|
to,
|
3140
3306
|
enter: (node) => {
|
@@ -3143,9 +3309,9 @@ var setBlockquote = (enable) => {
|
|
3143
3309
|
return false;
|
3144
3310
|
}
|
3145
3311
|
lastBlock = node.from;
|
3146
|
-
let line2 =
|
3312
|
+
let line2 = state.doc.lineAt(node.from);
|
3147
3313
|
if (line2.number > 1) {
|
3148
|
-
const prevLine =
|
3314
|
+
const prevLine = state.doc.line(line2.number - 1);
|
3149
3315
|
if (/^[>\s]*$/.test(prevLine.text)) {
|
3150
3316
|
if (!enable || lines.length && lines[lines.length - 1].number === prevLine.number - 1) {
|
3151
3317
|
lines.push(prevLine);
|
@@ -3157,10 +3323,10 @@ var setBlockquote = (enable) => {
|
|
3157
3323
|
if (line2.to >= node.to) {
|
3158
3324
|
break;
|
3159
3325
|
}
|
3160
|
-
line2 =
|
3326
|
+
line2 = state.doc.line(line2.number + 1);
|
3161
3327
|
}
|
3162
|
-
if (!enable && line2.number <
|
3163
|
-
const nextLine =
|
3328
|
+
if (!enable && line2.number < state.doc.lines) {
|
3329
|
+
const nextLine = state.doc.line(line2.number + 1);
|
3164
3330
|
if (/^[>\s]*$/.test(nextLine.text)) {
|
3165
3331
|
lines.push(nextLine);
|
3166
3332
|
}
|
@@ -3170,7 +3336,7 @@ var setBlockquote = (enable) => {
|
|
3170
3336
|
}
|
3171
3337
|
});
|
3172
3338
|
let line;
|
3173
|
-
if (!sawBlock && enable && from === to && !/\S/.test((line =
|
3339
|
+
if (!sawBlock && enable && from === to && !/\S/.test((line = state.doc.lineAt(from)).text)) {
|
3174
3340
|
lines.push(line);
|
3175
3341
|
}
|
3176
3342
|
}
|
@@ -3194,10 +3360,10 @@ var setBlockquote = (enable) => {
|
|
3194
3360
|
if (!changes.length) {
|
3195
3361
|
return false;
|
3196
3362
|
}
|
3197
|
-
const changeSet =
|
3198
|
-
dispatch(
|
3363
|
+
const changeSet = state.changes(changes);
|
3364
|
+
dispatch(state.update({
|
3199
3365
|
changes: changeSet,
|
3200
|
-
selection:
|
3366
|
+
selection: state.selection.map(changeSet, 1),
|
3201
3367
|
userEvent: enable ? "format.blockquote.add" : "format.blockquote.remove",
|
3202
3368
|
scrollIntoView: true
|
3203
3369
|
}));
|
@@ -3210,11 +3376,11 @@ var toggleBlockquote = (target) => {
|
|
3210
3376
|
return (getFormatting(target.state).blockQuote ? removeBlockquote : addBlockquote)(target);
|
3211
3377
|
};
|
3212
3378
|
var addCodeblock = (target) => {
|
3213
|
-
const { state
|
3214
|
-
const { selection } =
|
3379
|
+
const { state, dispatch } = target;
|
3380
|
+
const { selection } = state;
|
3215
3381
|
if (selection.ranges.length === 1 && selection.main.empty) {
|
3216
3382
|
const { head } = selection.main;
|
3217
|
-
const line =
|
3383
|
+
const line = state.doc.lineAt(head);
|
3218
3384
|
if (!/\S/.test(line.text) && head === line.from) {
|
3219
3385
|
snippets.codeblock(target, null, line.from, line.to);
|
3220
3386
|
return true;
|
@@ -3224,7 +3390,7 @@ var addCodeblock = (target) => {
|
|
3224
3390
|
for (const { from, to } of selection.ranges) {
|
3225
3391
|
let blockFrom = from;
|
3226
3392
|
let blockTo = to;
|
3227
|
-
(0, import_language4.syntaxTree)(
|
3393
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3228
3394
|
from,
|
3229
3395
|
to,
|
3230
3396
|
enter: (node) => {
|
@@ -3233,8 +3399,8 @@ var addCodeblock = (target) => {
|
|
3233
3399
|
blockFrom = node.from;
|
3234
3400
|
blockTo = node.to;
|
3235
3401
|
} else {
|
3236
|
-
blockFrom = Math.min(blockFrom,
|
3237
|
-
blockTo = Math.max(blockTo,
|
3402
|
+
blockFrom = Math.min(blockFrom, state.doc.lineAt(node.from).from);
|
3403
|
+
blockTo = Math.max(blockTo, state.doc.lineAt(node.to).to);
|
3238
3404
|
}
|
3239
3405
|
}
|
3240
3406
|
}
|
@@ -3252,7 +3418,7 @@ var addCodeblock = (target) => {
|
|
3252
3418
|
return false;
|
3253
3419
|
}
|
3254
3420
|
const changes = ranges.map(({ from, to }) => {
|
3255
|
-
const column = from -
|
3421
|
+
const column = from - state.doc.lineAt(from).from;
|
3256
3422
|
return [
|
3257
3423
|
{
|
3258
3424
|
from,
|
@@ -3264,30 +3430,30 @@ var addCodeblock = (target) => {
|
|
3264
3430
|
}
|
3265
3431
|
];
|
3266
3432
|
});
|
3267
|
-
dispatch(
|
3433
|
+
dispatch(state.update({
|
3268
3434
|
changes,
|
3269
3435
|
userEvent: "format.codeblock.add",
|
3270
3436
|
scrollIntoView: true
|
3271
3437
|
}));
|
3272
3438
|
return true;
|
3273
3439
|
};
|
3274
|
-
var removeCodeblock = ({ state
|
3440
|
+
var removeCodeblock = ({ state, dispatch }) => {
|
3275
3441
|
let lastBlock = -1;
|
3276
3442
|
const changes = [];
|
3277
|
-
for (const { from, to } of
|
3278
|
-
(0, import_language4.syntaxTree)(
|
3443
|
+
for (const { from, to } of state.selection.ranges) {
|
3444
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3279
3445
|
from,
|
3280
3446
|
to,
|
3281
3447
|
enter: (node) => {
|
3282
3448
|
if (Textblocks[node.name] === "codeblock" && lastBlock !== node.from) {
|
3283
3449
|
lastBlock = node.from;
|
3284
|
-
const firstLine =
|
3450
|
+
const firstLine = state.doc.lineAt(node.from);
|
3285
3451
|
if (node.name === "FencedCode") {
|
3286
3452
|
changes.push({
|
3287
3453
|
from: node.from,
|
3288
3454
|
to: firstLine.to + 1 + node.from - firstLine.from
|
3289
3455
|
});
|
3290
|
-
const lastLine =
|
3456
|
+
const lastLine = state.doc.lineAt(node.to);
|
3291
3457
|
if (/^([\s>]|[-*+] |\d+[).])*`+$/.test(lastLine.text)) {
|
3292
3458
|
changes.push({
|
3293
3459
|
from: lastLine.from - (lastLine.number === firstLine.number + 1 ? 0 : 1),
|
@@ -3296,7 +3462,7 @@ var removeCodeblock = ({ state: state2, dispatch }) => {
|
|
3296
3462
|
}
|
3297
3463
|
} else {
|
3298
3464
|
const column = node.from - firstLine.from;
|
3299
|
-
for (let line = firstLine; ; line =
|
3465
|
+
for (let line = firstLine; ; line = state.doc.line(line.number + 1)) {
|
3300
3466
|
changes.push({
|
3301
3467
|
from: line.from + column - 4,
|
3302
3468
|
to: line.from + column
|
@@ -3313,7 +3479,7 @@ var removeCodeblock = ({ state: state2, dispatch }) => {
|
|
3313
3479
|
if (!changes.length) {
|
3314
3480
|
return false;
|
3315
3481
|
}
|
3316
|
-
dispatch(
|
3482
|
+
dispatch(state.update({
|
3317
3483
|
changes,
|
3318
3484
|
userEvent: "format.codeblock.remove",
|
3319
3485
|
scrollIntoView: true
|
@@ -3325,7 +3491,7 @@ var toggleCodeblock = (target) => {
|
|
3325
3491
|
};
|
3326
3492
|
var formattingKeymap = (_options = {}) => {
|
3327
3493
|
return [
|
3328
|
-
|
3494
|
+
import_view17.keymap.of([
|
3329
3495
|
{
|
3330
3496
|
key: "meta-b",
|
3331
3497
|
run: toggleStrong
|
@@ -3376,7 +3542,7 @@ var Textblocks = {
|
|
3376
3542
|
TableCell: "tablecell",
|
3377
3543
|
Task: "paragraph"
|
3378
3544
|
};
|
3379
|
-
var getFormatting = (
|
3545
|
+
var getFormatting = (state) => {
|
3380
3546
|
let blockType = null;
|
3381
3547
|
const inline = [
|
3382
3548
|
null,
|
@@ -3402,7 +3568,7 @@ var getFormatting = (state2) => {
|
|
3402
3568
|
continue;
|
3403
3569
|
} else if (currentBlock.active[i]) {
|
3404
3570
|
inline[i] = true;
|
3405
|
-
} else if (/\S/.test(
|
3571
|
+
} else if (/\S/.test(state.doc.sliceString(currentBlock.pos, upto))) {
|
3406
3572
|
inline[i] = false;
|
3407
3573
|
}
|
3408
3574
|
}
|
@@ -3413,12 +3579,12 @@ var getFormatting = (state2) => {
|
|
3413
3579
|
currentBlock.pos = Math.min(upto, currentBlock.end);
|
3414
3580
|
}
|
3415
3581
|
};
|
3416
|
-
const { selection } =
|
3582
|
+
const { selection } = state;
|
3417
3583
|
for (const range of selection.ranges) {
|
3418
3584
|
if (range.empty && inline.some((v) => v === null)) {
|
3419
3585
|
const contextSize = Math.min(range.head, 6);
|
3420
|
-
const contextBefore =
|
3421
|
-
let contextAfter =
|
3586
|
+
const contextBefore = state.doc.sliceString(range.head - contextSize, range.head);
|
3587
|
+
let contextAfter = state.doc.sliceString(range.head, range.head + contextSize);
|
3422
3588
|
for (let i = 0; i < contextSize; i++) {
|
3423
3589
|
const ch = contextAfter[i];
|
3424
3590
|
if (ch !== contextBefore[contextBefore.length - 1 - i] || !/[~`*]/.test(ch)) {
|
@@ -3437,7 +3603,7 @@ var getFormatting = (state2) => {
|
|
3437
3603
|
}
|
3438
3604
|
}
|
3439
3605
|
}
|
3440
|
-
(0, import_language4.syntaxTree)(
|
3606
|
+
(0, import_language4.syntaxTree)(state).iterate({
|
3441
3607
|
from: range.from,
|
3442
3608
|
to: range.to,
|
3443
3609
|
enter: (node) => {
|
@@ -3511,7 +3677,7 @@ var getFormatting = (state2) => {
|
|
3511
3677
|
}
|
3512
3678
|
});
|
3513
3679
|
}
|
3514
|
-
const { from, to } =
|
3680
|
+
const { from, to } = state.doc.lineAt(selection.main.anchor);
|
3515
3681
|
const blankLine = from === to;
|
3516
3682
|
return {
|
3517
3683
|
blankLine,
|
@@ -3526,8 +3692,8 @@ var getFormatting = (state2) => {
|
|
3526
3692
|
};
|
3527
3693
|
};
|
3528
3694
|
var useFormattingState = () => {
|
3529
|
-
const [
|
3530
|
-
const observer = (0, import_react6.useMemo)(() =>
|
3695
|
+
const [state, setState] = (0, import_react6.useState)();
|
3696
|
+
const observer = (0, import_react6.useMemo)(() => import_view17.EditorView.updateListener.of((update2) => {
|
3531
3697
|
if (update2.docChanged || update2.selectionSet) {
|
3532
3698
|
setState((prevState) => {
|
3533
3699
|
const newState = getFormatting(update2.state);
|
@@ -3539,7 +3705,7 @@ var useFormattingState = () => {
|
|
3539
3705
|
}
|
3540
3706
|
}), []);
|
3541
3707
|
return [
|
3542
|
-
|
3708
|
+
state,
|
3543
3709
|
observer
|
3544
3710
|
];
|
3545
3711
|
};
|
@@ -3787,7 +3953,7 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
3787
3953
|
}),
|
3788
3954
|
// Custom styles.
|
3789
3955
|
(0, import_language5.syntaxHighlighting)(markdownHighlightStyle()),
|
3790
|
-
|
3956
|
+
import_view18.keymap.of([
|
3791
3957
|
// https://codemirror.net/docs/ref/#commands.indentWithTab
|
3792
3958
|
import_commands3.indentWithTab,
|
3793
3959
|
// https://codemirror.net/docs/ref/#commands.defaultKeymap
|
@@ -3797,17 +3963,17 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
3797
3963
|
])
|
3798
3964
|
];
|
3799
3965
|
};
|
3800
|
-
var debugTree = (cb) =>
|
3801
|
-
create: (
|
3966
|
+
var debugTree = (cb) => import_state15.StateField.define({
|
3967
|
+
create: (state) => cb(convertTreeToJson(state)),
|
3802
3968
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
3803
3969
|
});
|
3804
|
-
var convertTreeToJson = (
|
3970
|
+
var convertTreeToJson = (state) => {
|
3805
3971
|
const treeToJson = (cursor) => {
|
3806
3972
|
const node = {
|
3807
3973
|
type: cursor.type.name,
|
3808
3974
|
from: cursor.from,
|
3809
3975
|
to: cursor.to,
|
3810
|
-
text:
|
3976
|
+
text: state.doc.slice(cursor.from, cursor.to).toString(),
|
3811
3977
|
children: []
|
3812
3978
|
};
|
3813
3979
|
if (cursor.firstChild()) {
|
@@ -3818,15 +3984,15 @@ var convertTreeToJson = (state2) => {
|
|
3818
3984
|
}
|
3819
3985
|
return node;
|
3820
3986
|
};
|
3821
|
-
return treeToJson((0, import_language7.syntaxTree)(
|
3987
|
+
return treeToJson((0, import_language7.syntaxTree)(state).cursor());
|
3822
3988
|
};
|
3823
3989
|
var adjustChanges = () => {
|
3824
|
-
return
|
3990
|
+
return import_view20.ViewPlugin.fromClass(class {
|
3825
3991
|
update(update2) {
|
3826
3992
|
const tree = (0, import_language9.syntaxTree)(update2.state);
|
3827
3993
|
const adjustments = [];
|
3828
3994
|
for (const tr of update2.transactions) {
|
3829
|
-
const event = tr.annotation(
|
3995
|
+
const event = tr.annotation(import_state17.Transaction.userEvent);
|
3830
3996
|
switch (event) {
|
3831
3997
|
//
|
3832
3998
|
// Enter
|
@@ -3960,33 +4126,35 @@ var getValidUrl = (str) => {
|
|
3960
4126
|
}
|
3961
4127
|
};
|
3962
4128
|
var image = (_options = {}) => {
|
3963
|
-
return
|
3964
|
-
|
3965
|
-
|
3966
|
-
|
3967
|
-
|
3968
|
-
|
3969
|
-
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
3973
|
-
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
|
3987
|
-
|
3988
|
-
|
3989
|
-
|
4129
|
+
return [
|
4130
|
+
import_state18.StateField.define({
|
4131
|
+
create: (state) => {
|
4132
|
+
return import_view21.Decoration.set(buildDecorations(0, state.doc.length, state));
|
4133
|
+
},
|
4134
|
+
update: (value, tr) => {
|
4135
|
+
if (!tr.docChanged && !tr.selection) {
|
4136
|
+
return value;
|
4137
|
+
}
|
4138
|
+
const cursor = tr.state.selection.main.head;
|
4139
|
+
const oldCursor = tr.changes.mapPos(tr.startState.selection.main.head);
|
4140
|
+
let from = Math.min(cursor, oldCursor);
|
4141
|
+
let to = Math.max(cursor, oldCursor);
|
4142
|
+
tr.changes.iterChangedRanges((fromA, toA, fromB, toB) => {
|
4143
|
+
from = Math.min(from, fromB);
|
4144
|
+
to = Math.max(to, toB);
|
4145
|
+
});
|
4146
|
+
from = tr.state.doc.lineAt(from).from;
|
4147
|
+
to = tr.state.doc.lineAt(to).to;
|
4148
|
+
return value.map(tr.changes).update({
|
4149
|
+
filterFrom: from,
|
4150
|
+
filterTo: to,
|
4151
|
+
filter: () => false,
|
4152
|
+
add: buildDecorations(from, to, tr.state)
|
4153
|
+
});
|
4154
|
+
},
|
4155
|
+
provide: (field) => import_view21.EditorView.decorations.from(field)
|
4156
|
+
})
|
4157
|
+
];
|
3990
4158
|
};
|
3991
4159
|
var preloaded = /* @__PURE__ */ new Set();
|
3992
4160
|
var preloadImage = (url) => {
|
@@ -3996,18 +4164,21 @@ var preloadImage = (url) => {
|
|
3996
4164
|
preloaded.add(url);
|
3997
4165
|
}
|
3998
4166
|
};
|
3999
|
-
var buildDecorations = (from, to,
|
4167
|
+
var buildDecorations = (from, to, state) => {
|
4000
4168
|
const decorations = [];
|
4001
|
-
const cursor =
|
4002
|
-
(0, import_language10.syntaxTree)(
|
4169
|
+
const cursor = state.selection.main.head;
|
4170
|
+
(0, import_language10.syntaxTree)(state).iterate({
|
4003
4171
|
enter: (node) => {
|
4004
4172
|
if (node.name === "Image") {
|
4005
4173
|
const urlNode = node.node.getChild("URL");
|
4006
4174
|
if (urlNode) {
|
4007
|
-
const hide2 =
|
4008
|
-
const url =
|
4175
|
+
const hide2 = state.readOnly || cursor < node.from || cursor > node.to || !state.field(focusField);
|
4176
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
4177
|
+
if (url.match(/^https?:\/\//) === null && url.match(/^file?:\/\//) === null) {
|
4178
|
+
return;
|
4179
|
+
}
|
4009
4180
|
preloadImage(url);
|
4010
|
-
decorations.push(
|
4181
|
+
decorations.push(import_view21.Decoration.replace({
|
4011
4182
|
block: true,
|
4012
4183
|
widget: new ImageWidget(url)
|
4013
4184
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4019,7 +4190,7 @@ var buildDecorations = (from, to, state2) => {
|
|
4019
4190
|
});
|
4020
4191
|
return decorations;
|
4021
4192
|
};
|
4022
|
-
var ImageWidget = class extends
|
4193
|
+
var ImageWidget = class extends import_view21.WidgetType {
|
4023
4194
|
constructor(_url) {
|
4024
4195
|
super();
|
4025
4196
|
this._url = _url;
|
@@ -4031,15 +4202,17 @@ var ImageWidget = class extends import_view19.WidgetType {
|
|
4031
4202
|
const img = document.createElement("img");
|
4032
4203
|
img.setAttribute("src", this._url);
|
4033
4204
|
img.setAttribute("class", "cm-image");
|
4034
|
-
|
4205
|
+
if (view.state.field(focusField)) {
|
4206
|
+
img.onload = () => img.classList.add("cm-loaded-image");
|
4207
|
+
} else {
|
4208
|
+
img.classList.add("cm-loaded-image");
|
4209
|
+
}
|
4035
4210
|
return img;
|
4036
4211
|
}
|
4037
4212
|
};
|
4038
|
-
var imageUpload = (options = {}) => {
|
4039
|
-
};
|
4040
4213
|
var bulletListIndentationWidth = 24;
|
4041
4214
|
var orderedListIndentationWidth = 36;
|
4042
|
-
var formattingStyles =
|
4215
|
+
var formattingStyles = import_view22.EditorView.theme({
|
4043
4216
|
/**
|
4044
4217
|
* Horizontal rule.
|
4045
4218
|
*/
|
@@ -4136,22 +4309,22 @@ var formattingStyles = import_view20.EditorView.theme({
|
|
4136
4309
|
}
|
4137
4310
|
});
|
4138
4311
|
var table = (options = {}) => {
|
4139
|
-
return
|
4140
|
-
create: (
|
4312
|
+
return import_state19.StateField.define({
|
4313
|
+
create: (state) => update(state, options),
|
4141
4314
|
update: (_, tr) => update(tr.state, options),
|
4142
|
-
provide: (field) =>
|
4315
|
+
provide: (field) => import_view23.EditorView.decorations.from(field)
|
4143
4316
|
});
|
4144
4317
|
};
|
4145
|
-
var update = (
|
4146
|
-
const builder = new
|
4147
|
-
const cursor =
|
4318
|
+
var update = (state, _options) => {
|
4319
|
+
const builder = new import_state19.RangeSetBuilder();
|
4320
|
+
const cursor = state.selection.main.head;
|
4148
4321
|
const tables = [];
|
4149
4322
|
const getTable = () => tables[tables.length - 1];
|
4150
4323
|
const getRow = () => {
|
4151
4324
|
const table2 = getTable();
|
4152
4325
|
return table2.rows?.[table2.rows.length - 1];
|
4153
4326
|
};
|
4154
|
-
(0, import_language11.syntaxTree)(
|
4327
|
+
(0, import_language11.syntaxTree)(state).iterate({
|
4155
4328
|
enter: (node) => {
|
4156
4329
|
switch (node.name) {
|
4157
4330
|
case "Table": {
|
@@ -4172,9 +4345,9 @@ var update = (state2, _options) => {
|
|
4172
4345
|
case "TableCell": {
|
4173
4346
|
const row = getRow();
|
4174
4347
|
if (row) {
|
4175
|
-
row.push(
|
4348
|
+
row.push(state.sliceDoc(node.from, node.to));
|
4176
4349
|
} else {
|
4177
|
-
getTable().header?.push(
|
4350
|
+
getTable().header?.push(state.sliceDoc(node.from, node.to));
|
4178
4351
|
}
|
4179
4352
|
break;
|
4180
4353
|
}
|
@@ -4182,21 +4355,21 @@ var update = (state2, _options) => {
|
|
4182
4355
|
}
|
4183
4356
|
});
|
4184
4357
|
tables.forEach((table2) => {
|
4185
|
-
const replace =
|
4358
|
+
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4186
4359
|
if (replace) {
|
4187
|
-
builder.add(table2.from, table2.to,
|
4360
|
+
builder.add(table2.from, table2.to, import_view23.Decoration.replace({
|
4188
4361
|
block: true,
|
4189
4362
|
widget: new TableWidget(table2)
|
4190
4363
|
}));
|
4191
4364
|
} else {
|
4192
|
-
builder.add(table2.from, table2.to,
|
4365
|
+
builder.add(table2.from, table2.to, import_view23.Decoration.mark({
|
4193
4366
|
class: "cm-table"
|
4194
4367
|
}));
|
4195
4368
|
}
|
4196
4369
|
});
|
4197
4370
|
return builder.finish();
|
4198
4371
|
};
|
4199
|
-
var TableWidget = class extends
|
4372
|
+
var TableWidget = class extends import_view23.WidgetType {
|
4200
4373
|
constructor(_table) {
|
4201
4374
|
super();
|
4202
4375
|
this._table = _table;
|
@@ -4236,14 +4409,14 @@ var Unicode = {
|
|
4236
4409
|
bulletSmall: "\u2219",
|
4237
4410
|
bulletSquare: "\u2B1D"
|
4238
4411
|
};
|
4239
|
-
var HorizontalRuleWidget = class extends
|
4412
|
+
var HorizontalRuleWidget = class extends import_view19.WidgetType {
|
4240
4413
|
toDOM() {
|
4241
4414
|
const el = document.createElement("span");
|
4242
4415
|
el.className = "cm-hr";
|
4243
4416
|
return el;
|
4244
4417
|
}
|
4245
4418
|
};
|
4246
|
-
var LinkButton = class extends
|
4419
|
+
var LinkButton = class extends import_view19.WidgetType {
|
4247
4420
|
constructor(url, render) {
|
4248
4421
|
super();
|
4249
4422
|
this.url = url;
|
@@ -4259,7 +4432,7 @@ var LinkButton = class extends import_view17.WidgetType {
|
|
4259
4432
|
return el;
|
4260
4433
|
}
|
4261
4434
|
};
|
4262
|
-
var CheckboxWidget = class extends
|
4435
|
+
var CheckboxWidget = class extends import_view19.WidgetType {
|
4263
4436
|
constructor(_checked) {
|
4264
4437
|
super();
|
4265
4438
|
this._checked = _checked;
|
@@ -4304,7 +4477,7 @@ var CheckboxWidget = class extends import_view17.WidgetType {
|
|
4304
4477
|
return false;
|
4305
4478
|
}
|
4306
4479
|
};
|
4307
|
-
var TextWidget = class extends
|
4480
|
+
var TextWidget = class extends import_view19.WidgetType {
|
4308
4481
|
constructor(text, className) {
|
4309
4482
|
super();
|
4310
4483
|
this.text = text;
|
@@ -4319,34 +4492,34 @@ var TextWidget = class extends import_view17.WidgetType {
|
|
4319
4492
|
return el;
|
4320
4493
|
}
|
4321
4494
|
};
|
4322
|
-
var hide =
|
4323
|
-
var blockQuote =
|
4495
|
+
var hide = import_view19.Decoration.replace({});
|
4496
|
+
var blockQuote = import_view19.Decoration.line({
|
4324
4497
|
class: (0, import_react_ui_theme6.mx)("cm-blockquote")
|
4325
4498
|
});
|
4326
|
-
var fencedCodeLine =
|
4499
|
+
var fencedCodeLine = import_view19.Decoration.line({
|
4327
4500
|
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line")
|
4328
4501
|
});
|
4329
|
-
var fencedCodeLineFirst =
|
4502
|
+
var fencedCodeLineFirst = import_view19.Decoration.line({
|
4330
4503
|
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line", "cm-codeblock-first")
|
4331
4504
|
});
|
4332
|
-
var fencedCodeLineLast =
|
4505
|
+
var fencedCodeLineLast = import_view19.Decoration.line({
|
4333
4506
|
class: (0, import_react_ui_theme6.mx)("cm-code cm-codeblock-line", "cm-codeblock-last")
|
4334
4507
|
});
|
4335
4508
|
var commentBlockLine = fencedCodeLine;
|
4336
4509
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4337
4510
|
var commentBlockLineLast = fencedCodeLineLast;
|
4338
|
-
var horizontalRule =
|
4511
|
+
var horizontalRule = import_view19.Decoration.replace({
|
4339
4512
|
widget: new HorizontalRuleWidget()
|
4340
4513
|
});
|
4341
|
-
var checkedTask =
|
4514
|
+
var checkedTask = import_view19.Decoration.replace({
|
4342
4515
|
widget: new CheckboxWidget(true)
|
4343
4516
|
});
|
4344
|
-
var uncheckedTask =
|
4517
|
+
var uncheckedTask = import_view19.Decoration.replace({
|
4345
4518
|
widget: new CheckboxWidget(false)
|
4346
4519
|
});
|
4347
|
-
var editingRange = (
|
4348
|
-
const { readOnly, selection: { main: { head } } } =
|
4349
|
-
return
|
4520
|
+
var editingRange = (state, range, focus2) => {
|
4521
|
+
const { readOnly, selection: { main: { head } } } = state;
|
4522
|
+
return focus2 && !readOnly && head >= range.from && head <= range.to;
|
4350
4523
|
};
|
4351
4524
|
var autoHideTags = /* @__PURE__ */ new Set([
|
4352
4525
|
"CodeMark",
|
@@ -4356,13 +4529,13 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4356
4529
|
"SubscriptMark",
|
4357
4530
|
"SuperscriptMark"
|
4358
4531
|
]);
|
4359
|
-
var buildDecorations2 = (view, options,
|
4360
|
-
const deco = new
|
4361
|
-
const atomicDeco = new
|
4362
|
-
const { state
|
4532
|
+
var buildDecorations2 = (view, options, focus2) => {
|
4533
|
+
const deco = new import_state16.RangeSetBuilder();
|
4534
|
+
const atomicDeco = new import_state16.RangeSetBuilder();
|
4535
|
+
const { state } = view;
|
4363
4536
|
const headerLevels = [];
|
4364
4537
|
const getHeaderLevels = (node, level) => {
|
4365
|
-
(0,
|
4538
|
+
(0, import_invariant4.invariant)(level > 0, void 0, {
|
4366
4539
|
F: __dxlog_file9,
|
4367
4540
|
L: 178,
|
4368
4541
|
S: void 0,
|
@@ -4401,7 +4574,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4401
4574
|
listLevels.pop();
|
4402
4575
|
};
|
4403
4576
|
const getCurrentListLevel = () => {
|
4404
|
-
(0,
|
4577
|
+
(0, import_invariant4.invariant)(listLevels.length, void 0, {
|
4405
4578
|
F: __dxlog_file9,
|
4406
4579
|
L: 200,
|
4407
4580
|
S: void 0,
|
@@ -4428,7 +4601,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4428
4601
|
if (options.numberedHeadings?.from !== void 0) {
|
4429
4602
|
headers[level - 1].number++;
|
4430
4603
|
}
|
4431
|
-
const editing = editingRange(
|
4604
|
+
const editing = editingRange(state, node, focus2);
|
4432
4605
|
if (editing) {
|
4433
4606
|
break;
|
4434
4607
|
}
|
@@ -4442,7 +4615,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4442
4615
|
} else {
|
4443
4616
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
4444
4617
|
if (num.length) {
|
4445
|
-
atomicDeco.add(mark.from, mark.from + len,
|
4618
|
+
atomicDeco.add(mark.from, mark.from + len, import_view19.Decoration.replace({
|
4446
4619
|
widget: new TextWidget(num, theme.heading(level))
|
4447
4620
|
}));
|
4448
4621
|
}
|
@@ -4460,14 +4633,14 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4460
4633
|
break;
|
4461
4634
|
}
|
4462
4635
|
case "ListItem": {
|
4463
|
-
const line =
|
4636
|
+
const line = state.doc.lineAt(node.from);
|
4464
4637
|
const list = getCurrentListLevel();
|
4465
4638
|
const width = list.type === "OrderedList" ? orderedListIndentationWidth : bulletListIndentationWidth;
|
4466
4639
|
const offset = ((list.level ?? 0) + 1) * width;
|
4467
4640
|
if (node.from === line.to - 1) {
|
4468
4641
|
return false;
|
4469
4642
|
}
|
4470
|
-
deco.add(line.from, line.from,
|
4643
|
+
deco.add(line.from, line.from, import_view19.Decoration.line({
|
4471
4644
|
class: "cm-list-item",
|
4472
4645
|
attributes: {
|
4473
4646
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -4482,17 +4655,17 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4482
4655
|
break;
|
4483
4656
|
}
|
4484
4657
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
4485
|
-
const line =
|
4486
|
-
const to =
|
4487
|
-
atomicDeco.add(line.from, to,
|
4658
|
+
const line = state.doc.lineAt(node.from);
|
4659
|
+
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
4660
|
+
atomicDeco.add(line.from, to, import_view19.Decoration.replace({
|
4488
4661
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
4489
4662
|
}));
|
4490
4663
|
break;
|
4491
4664
|
}
|
4492
4665
|
case "TaskMarker": {
|
4493
|
-
const checked =
|
4494
|
-
const line =
|
4495
|
-
const to =
|
4666
|
+
const checked = state.doc.sliceString(node.from + 1, node.to - 1) === "x";
|
4667
|
+
const line = state.doc.lineAt(node.from);
|
4668
|
+
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
4496
4669
|
atomicDeco.add(line.from, to, checked ? checkedTask : uncheckedTask);
|
4497
4670
|
break;
|
4498
4671
|
}
|
@@ -4500,7 +4673,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4500
4673
|
// Blockquote > QuoteMark > Paragraph
|
4501
4674
|
//
|
4502
4675
|
case "Blockquote": {
|
4503
|
-
const editing = editingRange(
|
4676
|
+
const editing = editingRange(state, node, focus2);
|
4504
4677
|
const quoteMark = node.node.getChild("QuoteMark");
|
4505
4678
|
const paragraph = node.node.getChild("Paragraph");
|
4506
4679
|
if (!editing && quoteMark && paragraph) {
|
@@ -4521,7 +4694,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4521
4694
|
// CommentBlock
|
4522
4695
|
//
|
4523
4696
|
case "CommentBlock": {
|
4524
|
-
const editing = editingRange(
|
4697
|
+
const editing = editingRange(state, node, focus2);
|
4525
4698
|
for (const block of view.viewportLineBlocks) {
|
4526
4699
|
if (block.to < node.from) {
|
4527
4700
|
continue;
|
@@ -4530,7 +4703,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4530
4703
|
break;
|
4531
4704
|
}
|
4532
4705
|
const isFirst = block.from <= node.from;
|
4533
|
-
const isLast = block.to >= node.to && /^(\s>)*-->$/.test(
|
4706
|
+
const isLast = block.to >= node.to && /^(\s>)*-->$/.test(state.doc.sliceString(block.from, block.to));
|
4534
4707
|
deco.add(block.from, block.from, isFirst ? commentBlockLineFirst : isLast ? commentBlockLineLast : commentBlockLine);
|
4535
4708
|
if (!editing && (isFirst || isLast)) {
|
4536
4709
|
atomicDeco.add(block.from, block.to, hide);
|
@@ -4550,9 +4723,9 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4550
4723
|
break;
|
4551
4724
|
}
|
4552
4725
|
const first = block.from <= node.from;
|
4553
|
-
const last = block.to >= node.to && /^(\s>)*```$/.test(
|
4726
|
+
const last = block.to >= node.to && /^(\s>)*```$/.test(state.doc.sliceString(block.from, block.to));
|
4554
4727
|
deco.add(block.from, block.from, first ? fencedCodeLineFirst : last ? fencedCodeLineLast : fencedCodeLine);
|
4555
|
-
const editing = editingRange(
|
4728
|
+
const editing = editingRange(state, node, focus2);
|
4556
4729
|
if (!editing && (first || last)) {
|
4557
4730
|
atomicDeco.add(block.from, block.to, hide);
|
4558
4731
|
}
|
@@ -4565,13 +4738,13 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4565
4738
|
case "Link": {
|
4566
4739
|
const marks = node.node.getChildren("LinkMark");
|
4567
4740
|
const urlNode = node.node.getChild("URL");
|
4568
|
-
const editing = editingRange(
|
4741
|
+
const editing = editingRange(state, node, focus2);
|
4569
4742
|
if (urlNode && marks.length >= 2) {
|
4570
|
-
const url =
|
4743
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
4571
4744
|
if (!editing) {
|
4572
4745
|
atomicDeco.add(node.from, marks[0].to, hide);
|
4573
4746
|
}
|
4574
|
-
deco.add(marks[0].to, marks[1].from,
|
4747
|
+
deco.add(marks[0].to, marks[1].from, import_view19.Decoration.mark({
|
4575
4748
|
tagName: "a",
|
4576
4749
|
attributes: {
|
4577
4750
|
class: "cm-link",
|
@@ -4581,7 +4754,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4581
4754
|
}
|
4582
4755
|
}));
|
4583
4756
|
if (!editing) {
|
4584
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
4757
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? import_view19.Decoration.replace({
|
4585
4758
|
widget: new LinkButton(url, options.renderLinkButton)
|
4586
4759
|
}) : hide);
|
4587
4760
|
}
|
@@ -4592,14 +4765,14 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4592
4765
|
// HR
|
4593
4766
|
//
|
4594
4767
|
case "HorizontalRule": {
|
4595
|
-
if (!editingRange(
|
4768
|
+
if (!editingRange(state, node, focus2)) {
|
4596
4769
|
deco.add(node.from, node.to, horizontalRule);
|
4597
4770
|
}
|
4598
4771
|
break;
|
4599
4772
|
}
|
4600
4773
|
default: {
|
4601
4774
|
if (autoHideTags.has(node.name)) {
|
4602
|
-
if (!editingRange(
|
4775
|
+
if (!editingRange(state, node.node.parent, focus2)) {
|
4603
4776
|
atomicDeco.add(node.from, node.to, hide);
|
4604
4777
|
}
|
4605
4778
|
}
|
@@ -4615,7 +4788,7 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4615
4788
|
}
|
4616
4789
|
}
|
4617
4790
|
};
|
4618
|
-
const tree = (0, import_language8.syntaxTree)(
|
4791
|
+
const tree = (0, import_language8.syntaxTree)(state);
|
4619
4792
|
if (options.numberedHeadings?.from === void 0) {
|
4620
4793
|
for (const { from, to } of view.visibleRanges) {
|
4621
4794
|
tree.iterate({
|
@@ -4636,10 +4809,10 @@ var buildDecorations2 = (view, options, focus) => {
|
|
4636
4809
|
atomicDeco: atomicDeco.finish()
|
4637
4810
|
};
|
4638
4811
|
};
|
4639
|
-
var forceUpdate =
|
4812
|
+
var forceUpdate = import_state16.StateEffect.define();
|
4640
4813
|
var decorateMarkdown = (options = {}) => {
|
4641
4814
|
return [
|
4642
|
-
|
4815
|
+
import_view19.ViewPlugin.fromClass(class {
|
4643
4816
|
constructor(view) {
|
4644
4817
|
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
|
4645
4818
|
}
|
@@ -4671,9 +4844,9 @@ var decorateMarkdown = (options = {}) => {
|
|
4671
4844
|
}
|
4672
4845
|
}, {
|
4673
4846
|
provide: (plugin) => [
|
4674
|
-
|
4675
|
-
|
4676
|
-
|
4847
|
+
import_view19.EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view19.Decoration.none),
|
4848
|
+
import_view19.EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? import_view19.Decoration.none),
|
4849
|
+
import_view19.EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? import_view19.Decoration.none)
|
4677
4850
|
]
|
4678
4851
|
}),
|
4679
4852
|
image(),
|
@@ -4683,7 +4856,7 @@ var decorateMarkdown = (options = {}) => {
|
|
4683
4856
|
];
|
4684
4857
|
};
|
4685
4858
|
var linkTooltip = (render) => {
|
4686
|
-
return (0,
|
4859
|
+
return (0, import_view24.hoverTooltip)((view, pos, side) => {
|
4687
4860
|
const syntax = (0, import_language12.syntaxTree)(view.state).resolveInner(pos, side);
|
4688
4861
|
let link = null;
|
4689
4862
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
@@ -4725,7 +4898,7 @@ var mention = ({ onSearch }) => {
|
|
4725
4898
|
icons: false,
|
4726
4899
|
override: [
|
4727
4900
|
(context) => {
|
4728
|
-
|
4901
|
+
import_log6.log.info("completion context", {
|
4729
4902
|
context
|
4730
4903
|
}, {
|
4731
4904
|
F: __dxlog_file10,
|
@@ -4758,7 +4931,7 @@ var EditorInputModes = [
|
|
4758
4931
|
"vim",
|
4759
4932
|
"vscode"
|
4760
4933
|
];
|
4761
|
-
var editorInputMode =
|
4934
|
+
var editorInputMode = singleValueFacet({});
|
4762
4935
|
var InputModeExtensions = {
|
4763
4936
|
default: [],
|
4764
4937
|
vscode: [
|
@@ -4766,7 +4939,7 @@ var InputModeExtensions = {
|
|
4766
4939
|
editorInputMode.of({
|
4767
4940
|
type: "vscode"
|
4768
4941
|
}),
|
4769
|
-
|
4942
|
+
import_view25.keymap.of(import_codemirror_vscode_keymap.vscodeKeymap)
|
4770
4943
|
],
|
4771
4944
|
vim: [
|
4772
4945
|
// https://github.com/replit/codemirror-vim
|
@@ -4775,7 +4948,7 @@ var InputModeExtensions = {
|
|
4775
4948
|
type: "vim",
|
4776
4949
|
noTabster: true
|
4777
4950
|
}),
|
4778
|
-
|
4951
|
+
import_view25.keymap.of([
|
4779
4952
|
{
|
4780
4953
|
key: "Alt-Escape",
|
4781
4954
|
run: (view) => {
|
@@ -4797,7 +4970,7 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
4797
4970
|
let t;
|
4798
4971
|
let idx = 0;
|
4799
4972
|
return [
|
4800
|
-
|
4973
|
+
import_view26.keymap.of([
|
4801
4974
|
{
|
4802
4975
|
// Reset.
|
4803
4976
|
key: "alt-meta-'",
|
@@ -4853,10 +5026,10 @@ var ToolbarSeparator = () => /* @__PURE__ */ import_react2.default.createElement
|
|
4853
5026
|
className: "grow"
|
4854
5027
|
});
|
4855
5028
|
var [ToolbarContextProvider, useToolbarContext] = (0, import_react_context.createContext)("Toolbar");
|
4856
|
-
var ToolbarRoot = ({ children, onAction, classNames, state
|
5029
|
+
var ToolbarRoot = ({ children, onAction, classNames, state }) => {
|
4857
5030
|
return /* @__PURE__ */ import_react2.default.createElement(ToolbarContextProvider, {
|
4858
5031
|
onAction,
|
4859
|
-
state
|
5032
|
+
state
|
4860
5033
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.ElevationProvider, {
|
4861
5034
|
elevation: "chrome"
|
4862
5035
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toolbar.Root, {
|
@@ -4906,8 +5079,8 @@ var HeadingIcons = {
|
|
4906
5079
|
};
|
4907
5080
|
var MarkdownHeading = () => {
|
4908
5081
|
const { t } = (0, import_react_ui.useTranslation)(translationKey);
|
4909
|
-
const { onAction, state
|
4910
|
-
const blockType =
|
5082
|
+
const { onAction, state } = useToolbarContext("MarkdownFormatting");
|
5083
|
+
const blockType = state ? state.blockType : "paragraph";
|
4911
5084
|
const header = blockType && /heading(\d)/.exec(blockType);
|
4912
5085
|
const value = header ? header[1] : blockType === "paragraph" || !blockType ? "0" : void 0;
|
4913
5086
|
const HeadingIcon = HeadingIcons[value ?? "0"];
|
@@ -4971,43 +5144,43 @@ var markdownStyles = [
|
|
4971
5144
|
{
|
4972
5145
|
type: "strong",
|
4973
5146
|
Icon: import_react.TextB,
|
4974
|
-
getState: (
|
5147
|
+
getState: (state) => !!state?.strong
|
4975
5148
|
},
|
4976
5149
|
{
|
4977
5150
|
type: "emphasis",
|
4978
5151
|
Icon: import_react.TextItalic,
|
4979
|
-
getState: (
|
5152
|
+
getState: (state) => !!state?.emphasis
|
4980
5153
|
},
|
4981
5154
|
{
|
4982
5155
|
type: "strikethrough",
|
4983
5156
|
Icon: import_react.TextStrikethrough,
|
4984
|
-
getState: (
|
5157
|
+
getState: (state) => !!state?.strikethrough
|
4985
5158
|
},
|
4986
5159
|
{
|
4987
5160
|
type: "code",
|
4988
5161
|
Icon: import_react.Code,
|
4989
|
-
getState: (
|
5162
|
+
getState: (state) => !!state?.code
|
4990
5163
|
},
|
4991
5164
|
{
|
4992
5165
|
type: "link",
|
4993
5166
|
Icon: import_react.Link,
|
4994
|
-
getState: (
|
5167
|
+
getState: (state) => !!state?.link
|
4995
5168
|
}
|
4996
5169
|
];
|
4997
5170
|
var MarkdownStyles = () => {
|
4998
|
-
const { onAction, state
|
5171
|
+
const { onAction, state } = useToolbarContext("MarkdownStyles");
|
4999
5172
|
const { t } = (0, import_react_ui.useTranslation)(translationKey);
|
5000
5173
|
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toolbar.ToggleGroup, {
|
5001
5174
|
type: "multiple",
|
5002
|
-
value: markdownStyles.filter(({ getState }) =>
|
5175
|
+
value: markdownStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)
|
5003
5176
|
}, markdownStyles.map(({ type, getState, Icon: Icon2 }) => /* @__PURE__ */ import_react2.default.createElement(ToolbarToggleButton, {
|
5004
5177
|
key: type,
|
5005
5178
|
value: type,
|
5006
5179
|
Icon: Icon2,
|
5007
|
-
disabled:
|
5008
|
-
onClick:
|
5180
|
+
disabled: state?.blockType === "codeblock",
|
5181
|
+
onClick: state ? () => onAction?.({
|
5009
5182
|
type,
|
5010
|
-
data: !getState(
|
5183
|
+
data: !getState(state)
|
5011
5184
|
}) : void 0
|
5012
5185
|
}, t(`${type} label`))));
|
5013
5186
|
};
|
@@ -5015,32 +5188,32 @@ var markdownLists = [
|
|
5015
5188
|
{
|
5016
5189
|
type: "list-bullet",
|
5017
5190
|
Icon: import_react.ListBullets,
|
5018
|
-
getState: (
|
5191
|
+
getState: (state) => state.listStyle === "bullet"
|
5019
5192
|
},
|
5020
5193
|
{
|
5021
5194
|
type: "list-ordered",
|
5022
5195
|
Icon: import_react.ListNumbers,
|
5023
|
-
getState: (
|
5196
|
+
getState: (state) => state.listStyle === "ordered"
|
5024
5197
|
},
|
5025
5198
|
{
|
5026
5199
|
type: "list-task",
|
5027
5200
|
Icon: import_react.ListChecks,
|
5028
|
-
getState: (
|
5201
|
+
getState: (state) => state.listStyle === "task"
|
5029
5202
|
}
|
5030
5203
|
];
|
5031
5204
|
var MarkdownLists = () => {
|
5032
|
-
const { onAction, state
|
5205
|
+
const { onAction, state } = useToolbarContext("MarkdownStyles");
|
5033
5206
|
const { t } = (0, import_react_ui.useTranslation)(translationKey);
|
5034
5207
|
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toolbar.ToggleGroup, {
|
5035
5208
|
type: "single",
|
5036
|
-
value:
|
5209
|
+
value: state?.listStyle ? `list-${state.listStyle}` : ""
|
5037
5210
|
}, markdownLists.map(({ type, getState, Icon: Icon2 }) => /* @__PURE__ */ import_react2.default.createElement(ToolbarToggleButton, {
|
5038
5211
|
key: type,
|
5039
5212
|
value: type,
|
5040
5213
|
Icon: Icon2,
|
5041
|
-
onClick:
|
5214
|
+
onClick: state ? () => onAction?.({
|
5042
5215
|
type,
|
5043
|
-
data: !getState(
|
5216
|
+
data: !getState(state)
|
5044
5217
|
}) : void 0
|
5045
5218
|
}, t(`${type} label`))));
|
5046
5219
|
};
|
@@ -5048,24 +5221,24 @@ var markdownBlocks = [
|
|
5048
5221
|
{
|
5049
5222
|
type: "blockquote",
|
5050
5223
|
Icon: import_react.Quotes,
|
5051
|
-
getState: (
|
5224
|
+
getState: (state) => !!state?.blockQuote
|
5052
5225
|
},
|
5053
5226
|
{
|
5054
5227
|
type: "codeblock",
|
5055
5228
|
Icon: import_react.CodeBlock,
|
5056
|
-
getState: (
|
5229
|
+
getState: (state) => state.blockType === "codeblock"
|
5057
5230
|
},
|
5058
5231
|
{
|
5059
5232
|
type: "table",
|
5060
5233
|
Icon: import_react.Table,
|
5061
|
-
getState: (
|
5062
|
-
disabled: (
|
5234
|
+
getState: (state) => state.blockType === "tablecell",
|
5235
|
+
disabled: (state) => !state.blankLine
|
5063
5236
|
}
|
5064
5237
|
];
|
5065
5238
|
var MarkdownBlocks = () => {
|
5066
|
-
const { onAction, state
|
5239
|
+
const { onAction, state } = useToolbarContext("MarkdownStyles");
|
5067
5240
|
const { t } = (0, import_react_ui.useTranslation)(translationKey);
|
5068
|
-
const value = markdownBlocks.find(({ getState }) =>
|
5241
|
+
const value = markdownBlocks.find(({ getState }) => state && getState(state));
|
5069
5242
|
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Toolbar.ToggleGroup, {
|
5070
5243
|
type: "single",
|
5071
5244
|
value: value?.type ?? ""
|
@@ -5073,10 +5246,10 @@ var MarkdownBlocks = () => {
|
|
5073
5246
|
key: type,
|
5074
5247
|
value: type,
|
5075
5248
|
Icon: Icon2,
|
5076
|
-
disabled: !
|
5077
|
-
onClick:
|
5249
|
+
disabled: !state || disabled?.(state),
|
5250
|
+
onClick: state ? () => onAction?.({
|
5078
5251
|
type,
|
5079
|
-
data: !getState(
|
5252
|
+
data: !getState(state)
|
5080
5253
|
}) : void 0
|
5081
5254
|
}, t(`${type} label`))));
|
5082
5255
|
};
|
@@ -5189,12 +5362,12 @@ var MarkdownView = ({ mode }) => {
|
|
5189
5362
|
})), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Arrow, null)))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Portal, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Content, tooltipProps, t("view mode label"), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Arrow, null))));
|
5190
5363
|
};
|
5191
5364
|
var MarkdownActions = () => {
|
5192
|
-
const { onAction, state
|
5365
|
+
const { onAction, state } = useToolbarContext("MarkdownActions");
|
5193
5366
|
const { t } = (0, import_react_ui.useTranslation)(translationKey);
|
5194
5367
|
let commentToolTipKey = "comment label";
|
5195
|
-
if (
|
5368
|
+
if (state?.comment) {
|
5196
5369
|
commentToolTipKey = "selection overlaps existing comment label";
|
5197
|
-
} else if (
|
5370
|
+
} else if (state?.selection === false) {
|
5198
5371
|
commentToolTipKey = "select text to comment label";
|
5199
5372
|
}
|
5200
5373
|
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(ToolbarButton, {
|
@@ -5210,7 +5383,7 @@ var MarkdownActions = () => {
|
|
5210
5383
|
onClick: () => onAction?.({
|
5211
5384
|
type: "comment"
|
5212
5385
|
}),
|
5213
|
-
disabled: !
|
5386
|
+
disabled: !state || state.comment || !state.selection
|
5214
5387
|
}, t(commentToolTipKey)));
|
5215
5388
|
};
|
5216
5389
|
var Toolbar = {
|
@@ -5226,14 +5399,14 @@ var margin = "!mt-[1rem]";
|
|
5226
5399
|
var editorContent = (0, import_react_ui_theme8.mx)(margin, "!mli-auto w-full max-w-[min(50rem,100%-2rem)]");
|
5227
5400
|
var editorFullWidth = (0, import_react_ui_theme8.mx)(margin);
|
5228
5401
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
5229
|
-
var editorGutter =
|
5402
|
+
var editorGutter = import_view27.EditorView.theme({
|
5230
5403
|
// Match margin from content.
|
5231
5404
|
".cm-gutters": {
|
5232
5405
|
marginTop: "16px",
|
5233
5406
|
paddingRight: "1rem"
|
5234
5407
|
}
|
5235
5408
|
});
|
5236
|
-
var editorMonospace =
|
5409
|
+
var editorMonospace = import_view27.EditorView.theme({
|
5237
5410
|
".cm-content": {
|
5238
5411
|
fontFamily: fontMono
|
5239
5412
|
}
|
@@ -5244,20 +5417,20 @@ var useActionHandler = (view) => {
|
|
5244
5417
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5245
5418
|
var instanceCount = 0;
|
5246
5419
|
var useTextEditor = (props = {}, deps = []) => {
|
5247
|
-
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react7.useMemo)(() => (0,
|
5420
|
+
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = (0, import_react7.useMemo)(() => (0, import_util5.getProviderValue)(props), deps ?? []);
|
5248
5421
|
const [instanceId] = (0, import_react7.useState)(() => `text-editor-${++instanceCount}`);
|
5249
5422
|
const [view, setView] = (0, import_react7.useState)();
|
5250
5423
|
const parentRef = (0, import_react7.useRef)(null);
|
5251
5424
|
(0, import_react7.useEffect)(() => {
|
5252
5425
|
let view2;
|
5253
5426
|
if (parentRef.current) {
|
5254
|
-
(0,
|
5427
|
+
(0, import_log7.log)("create", {
|
5255
5428
|
id,
|
5256
5429
|
instanceId,
|
5257
5430
|
doc: initialValue?.length ?? 0
|
5258
5431
|
}, {
|
5259
5432
|
F: __dxlog_file11,
|
5260
|
-
L:
|
5433
|
+
L: 75,
|
5261
5434
|
S: void 0,
|
5262
5435
|
C: (f, a) => f(...a)
|
5263
5436
|
});
|
@@ -5273,27 +5446,27 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5273
5446
|
anchor
|
5274
5447
|
};
|
5275
5448
|
}
|
5276
|
-
const
|
5449
|
+
const state = import_state20.EditorState.create({
|
5277
5450
|
doc: initialValue,
|
5278
5451
|
// selection: initialSelection,
|
5279
5452
|
extensions: [
|
5280
|
-
id &&
|
5453
|
+
id && documentId.of(id),
|
5281
5454
|
extensions,
|
5282
5455
|
// NOTE: This doesn't catch errors in keymap functions.
|
5283
|
-
|
5284
|
-
|
5456
|
+
import_view28.EditorView.exceptionSink.of((err) => {
|
5457
|
+
import_log7.log.catch(err, void 0, {
|
5285
5458
|
F: __dxlog_file11,
|
5286
|
-
L:
|
5459
|
+
L: 97,
|
5287
5460
|
S: void 0,
|
5288
5461
|
C: (f, a) => f(...a)
|
5289
5462
|
});
|
5290
5463
|
})
|
5291
|
-
].filter(
|
5464
|
+
].filter(import_util5.isNotFalsy)
|
5292
5465
|
});
|
5293
|
-
view2 = new
|
5466
|
+
view2 = new import_view28.EditorView({
|
5294
5467
|
parent: parentRef.current,
|
5295
|
-
state
|
5296
|
-
scrollTo: scrollTo ?
|
5468
|
+
state,
|
5469
|
+
scrollTo: scrollTo ? import_view28.EditorView.scrollIntoView(scrollTo, {
|
5297
5470
|
yMargin: 96
|
5298
5471
|
}) : void 0,
|
5299
5472
|
dispatchTransactions: debug ? debugDispatcher : void 0
|
@@ -5311,11 +5484,11 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5311
5484
|
setView(view2);
|
5312
5485
|
}
|
5313
5486
|
return () => {
|
5314
|
-
(0,
|
5487
|
+
(0, import_log7.log)("destroy", {
|
5315
5488
|
id
|
5316
5489
|
}, {
|
5317
5490
|
F: __dxlog_file11,
|
5318
|
-
L:
|
5491
|
+
L: 134,
|
5319
5492
|
S: void 0,
|
5320
5493
|
C: (f, a) => f(...a)
|
5321
5494
|
});
|
@@ -5329,19 +5502,19 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5329
5502
|
}
|
5330
5503
|
if (scrollTo || selection) {
|
5331
5504
|
if (selection && selection.anchor > view.state.doc.length) {
|
5332
|
-
|
5505
|
+
import_log7.log.warn("invalid selection", {
|
5333
5506
|
length: view.state.doc.length,
|
5334
5507
|
scrollTo,
|
5335
5508
|
selection
|
5336
5509
|
}, {
|
5337
5510
|
F: __dxlog_file11,
|
5338
|
-
L:
|
5511
|
+
L: 148,
|
5339
5512
|
S: void 0,
|
5340
5513
|
C: (f, a) => f(...a)
|
5341
5514
|
});
|
5342
5515
|
return;
|
5343
5516
|
}
|
5344
|
-
view.dispatch(
|
5517
|
+
view.dispatch(createEditorStateTransaction({
|
5345
5518
|
scrollTo,
|
5346
5519
|
selection
|
5347
5520
|
}));
|
@@ -5411,6 +5584,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5411
5584
|
awarenessProvider,
|
5412
5585
|
blast,
|
5413
5586
|
callbackWrapper,
|
5587
|
+
clientRectsFor,
|
5414
5588
|
command,
|
5415
5589
|
comments,
|
5416
5590
|
commentsState,
|
@@ -5418,7 +5592,9 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5418
5592
|
createBasicExtensions,
|
5419
5593
|
createComment,
|
5420
5594
|
createDataExtensions,
|
5595
|
+
createEditorStateStore,
|
5421
5596
|
createEditorStateTransaction,
|
5597
|
+
createElement,
|
5422
5598
|
createExternalCommentSync,
|
5423
5599
|
createMarkdownExtensions,
|
5424
5600
|
createThemeExtensions,
|
@@ -5435,23 +5611,25 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5435
5611
|
editorInputMode,
|
5436
5612
|
editorMonospace,
|
5437
5613
|
editorWithToolbarLayout,
|
5614
|
+
flattenRect,
|
5615
|
+
focus,
|
5438
5616
|
focusEvent,
|
5617
|
+
focusField,
|
5439
5618
|
folding,
|
5440
5619
|
formattingEquals,
|
5441
5620
|
formattingKeymap,
|
5442
5621
|
getFormatting,
|
5443
5622
|
image,
|
5444
|
-
imageUpload,
|
5445
5623
|
insertTable,
|
5446
5624
|
keymap,
|
5447
5625
|
linkTooltip,
|
5448
5626
|
listener,
|
5449
|
-
localStorageStateStoreAdapter,
|
5450
5627
|
logChanges,
|
5451
5628
|
markdownHighlightStyle,
|
5452
5629
|
markdownTags,
|
5453
5630
|
markdownTagsExtensions,
|
5454
5631
|
mention,
|
5632
|
+
overlap,
|
5455
5633
|
preventNewline,
|
5456
5634
|
processAction,
|
5457
5635
|
removeBlockquote,
|
@@ -5459,17 +5637,19 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5459
5637
|
removeLink,
|
5460
5638
|
removeList,
|
5461
5639
|
removeStyle,
|
5640
|
+
renderRoot,
|
5462
5641
|
scrollThreadIntoView,
|
5463
5642
|
selectionOverlapsComment,
|
5643
|
+
selectionState,
|
5464
5644
|
setBlockquote,
|
5465
5645
|
setComments,
|
5466
5646
|
setHeading,
|
5467
5647
|
setSelection,
|
5468
5648
|
setStyle,
|
5469
5649
|
singleValueFacet,
|
5470
|
-
state,
|
5471
5650
|
table,
|
5472
5651
|
tags,
|
5652
|
+
textRange,
|
5473
5653
|
toggleBlockquote,
|
5474
5654
|
toggleCodeblock,
|
5475
5655
|
toggleEmphasis,
|
@@ -5486,6 +5666,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5486
5666
|
useComments,
|
5487
5667
|
useFormattingState,
|
5488
5668
|
useTextEditor,
|
5489
|
-
useToolbarContext
|
5669
|
+
useToolbarContext,
|
5670
|
+
wrapWithCatch
|
5490
5671
|
});
|
5491
5672
|
//# sourceMappingURL=index.cjs.map
|