@dxos/react-ui-editor 0.8.2-main.f11618f → 0.8.2-staging.7ac8446
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 +371 -499
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +379 -515
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +371 -499
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/{stories/InputMode.stories.d.ts → InputMode.stories.d.ts} +1 -1
- package/dist/types/src/InputMode.stories.d.ts.map +1 -0
- package/dist/types/src/{stories/TextEditorBasic.stories.d.ts → TextEditor.stories.d.ts} +35 -2
- package/dist/types/src/TextEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/util.d.ts +3 -3
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/{view-mode.d.ts → viewMode.d.ts} +1 -1
- package/dist/types/src/components/EditorToolbar/viewMode.d.ts.map +1 -0
- package/dist/types/src/defaults.d.ts +0 -1
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/command/command.d.ts +10 -5
- package/dist/types/src/extensions/command/command.d.ts.map +1 -1
- package/dist/types/src/extensions/command/hint.d.ts +2 -4
- package/dist/types/src/extensions/command/hint.d.ts.map +1 -1
- package/dist/types/src/extensions/command/index.d.ts +0 -1
- package/dist/types/src/extensions/command/index.d.ts.map +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +2 -7
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/command/preview.d.ts +12 -0
- package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
- package/dist/types/src/extensions/command/state.d.ts +11 -9
- package/dist/types/src/extensions/command/state.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +7 -9
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +0 -1
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts +1 -4
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts +2 -2
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts +1 -4
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/fragments.d.ts +3 -0
- package/dist/types/src/fragments.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextEditor.d.ts +1 -2
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +0 -5
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/react.d.ts +1 -6
- package/dist/types/src/util/react.d.ts.map +1 -1
- package/package.json +27 -33
- package/src/{stories/InputMode.stories.tsx → InputMode.stories.tsx} +4 -4
- package/src/TextEditor.stories.tsx +856 -0
- package/src/components/EditorToolbar/EditorToolbar.tsx +2 -2
- package/src/components/EditorToolbar/util.ts +3 -3
- package/src/defaults.ts +3 -5
- package/src/extensions/automerge/automerge.stories.tsx +11 -3
- package/src/extensions/command/command.ts +27 -9
- package/src/extensions/command/hint.ts +30 -33
- package/src/extensions/command/index.ts +0 -1
- package/src/extensions/command/menu.ts +8 -11
- package/src/extensions/command/preview.ts +79 -0
- package/src/extensions/command/state.ts +61 -41
- package/src/extensions/comments.ts +9 -9
- package/src/extensions/folding.tsx +1 -1
- package/src/extensions/index.ts +0 -1
- package/src/extensions/markdown/decorate.ts +3 -4
- package/src/extensions/markdown/formatting.ts +2 -2
- package/src/extensions/markdown/image.ts +11 -12
- package/src/extensions/markdown/link.ts +24 -33
- package/src/fragments.ts +19 -0
- package/src/hooks/useTextEditor.ts +3 -4
- package/src/types.ts +0 -7
- package/src/util/react.tsx +2 -20
- package/dist/lib/browser/testing/index.mjs +0 -67
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/node/testing/index.cjs +0 -101
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/testing/index.mjs +0 -69
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +0 -1
- package/dist/types/src/extensions/command/action.d.ts +0 -17
- package/dist/types/src/extensions/command/action.d.ts.map +0 -1
- package/dist/types/src/extensions/preview/index.d.ts +0 -2
- package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
- package/dist/types/src/extensions/preview/preview.d.ts +0 -39
- package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
- package/dist/types/src/stories/InputMode.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorBasic.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorComments.stories.d.ts +0 -13
- package/dist/types/src/stories/TextEditorComments.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts +0 -13
- package/dist/types/src/stories/TextEditorPreview.stories.d.ts.map +0 -1
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts +0 -19
- package/dist/types/src/stories/TextEditorSpecial.stories.d.ts.map +0 -1
- package/dist/types/src/stories/story-utils.d.ts +0 -53
- package/dist/types/src/stories/story-utils.d.ts.map +0 -1
- package/dist/types/src/testing/RefPopover.d.ts +0 -21
- package/dist/types/src/testing/RefPopover.d.ts.map +0 -1
- package/dist/types/src/testing/index.d.ts +0 -2
- package/dist/types/src/testing/index.d.ts.map +0 -1
- package/src/extensions/command/action.ts +0 -49
- package/src/extensions/preview/index.ts +0 -5
- package/src/extensions/preview/preview.ts +0 -271
- package/src/stories/TextEditorBasic.stories.tsx +0 -289
- package/src/stories/TextEditorComments.stories.tsx +0 -99
- package/src/stories/TextEditorPreview.stories.tsx +0 -239
- package/src/stories/TextEditorSpecial.stories.tsx +0 -107
- package/src/stories/story-utils.tsx +0 -329
- package/src/testing/RefPopover.tsx +0 -74
- package/src/testing/index.ts +0 -5
- /package/src/components/EditorToolbar/{view-mode.ts → viewMode.ts} +0 -0
@@ -49,10 +49,10 @@ import { textBlockWidth } from "@dxos/react-ui-theme";
|
|
49
49
|
|
50
50
|
// packages/ui/react-ui-editor/src/components/EditorToolbar/util.ts
|
51
51
|
import { useMemo } from "react";
|
52
|
-
import {
|
52
|
+
import { create } from "@dxos/live-object";
|
53
53
|
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
54
54
|
var useEditorToolbarState = (initialState = {}) => {
|
55
|
-
return useMemo(() =>
|
55
|
+
return useMemo(() => create(initialState), []);
|
56
56
|
};
|
57
57
|
var createEditorAction = (payload, icon, label = [
|
58
58
|
`${payload.type} label`,
|
@@ -268,7 +268,7 @@ var createLists = (state) => {
|
|
268
268
|
};
|
269
269
|
};
|
270
270
|
|
271
|
-
// packages/ui/react-ui-editor/src/components/EditorToolbar/
|
271
|
+
// packages/ui/react-ui-editor/src/components/EditorToolbar/viewMode.ts
|
272
272
|
var createViewModeGroupAction = (value) => createEditorActionGroup("viewMode", {
|
273
273
|
variant: "dropdownMenu",
|
274
274
|
applyActive: true,
|
@@ -313,12 +313,99 @@ var createViewMode = (state) => {
|
|
313
313
|
};
|
314
314
|
};
|
315
315
|
|
316
|
+
// packages/ui/react-ui-editor/src/fragments.ts
|
317
|
+
import { mx } from "@dxos/react-ui-theme";
|
318
|
+
var stackItemContentToolbarClassNames = (role) => mx("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
319
|
+
|
320
|
+
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
321
|
+
var createToolbar = ({ state, customActions, ...features }) => {
|
322
|
+
const nodes = [];
|
323
|
+
const edges = [];
|
324
|
+
if (features.headings ?? true) {
|
325
|
+
const headings2 = createHeadings(state);
|
326
|
+
nodes.push(...headings2.nodes);
|
327
|
+
edges.push(...headings2.edges);
|
328
|
+
}
|
329
|
+
if (features.formatting ?? true) {
|
330
|
+
const formatting = createFormatting(state);
|
331
|
+
nodes.push(...formatting.nodes);
|
332
|
+
edges.push(...formatting.edges);
|
333
|
+
}
|
334
|
+
if (features.lists ?? true) {
|
335
|
+
const lists = createLists(state);
|
336
|
+
nodes.push(...lists.nodes);
|
337
|
+
edges.push(...lists.edges);
|
338
|
+
}
|
339
|
+
if (features.blocks ?? true) {
|
340
|
+
const blocks = createBlocks(state);
|
341
|
+
nodes.push(...blocks.nodes);
|
342
|
+
edges.push(...blocks.edges);
|
343
|
+
}
|
344
|
+
if (customActions) {
|
345
|
+
const custom = customActions();
|
346
|
+
nodes.push(...custom.nodes);
|
347
|
+
edges.push(...custom.edges);
|
348
|
+
}
|
349
|
+
const editorToolbarGap = createGapSeparator();
|
350
|
+
nodes.push(...editorToolbarGap.nodes);
|
351
|
+
edges.push(...editorToolbarGap.edges);
|
352
|
+
if (features.comment ?? true) {
|
353
|
+
const comment = createComment(state);
|
354
|
+
nodes.push(...comment.nodes);
|
355
|
+
edges.push(...comment.edges);
|
356
|
+
}
|
357
|
+
if (features.search ?? true) {
|
358
|
+
nodes.push(editorToolbarSearch);
|
359
|
+
edges.push({
|
360
|
+
source: "root",
|
361
|
+
target: editorToolbarSearch.id
|
362
|
+
});
|
363
|
+
}
|
364
|
+
if (features.viewMode ?? true) {
|
365
|
+
const viewMode = createViewMode(state);
|
366
|
+
nodes.push(...viewMode.nodes);
|
367
|
+
edges.push(...viewMode.edges);
|
368
|
+
}
|
369
|
+
return {
|
370
|
+
nodes,
|
371
|
+
edges
|
372
|
+
};
|
373
|
+
};
|
374
|
+
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
375
|
+
const menuCreator = useCallback(() => createToolbar(props), [
|
376
|
+
props
|
377
|
+
]);
|
378
|
+
const { resolveGroupItems } = useMenuActions(menuCreator);
|
379
|
+
return {
|
380
|
+
resolveGroupItems,
|
381
|
+
onAction
|
382
|
+
};
|
383
|
+
};
|
384
|
+
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
385
|
+
const menuProps = useEditorToolbarActionGraph(props);
|
386
|
+
return /* @__PURE__ */ React.createElement("div", {
|
387
|
+
role: "none",
|
388
|
+
className: stackItemContentToolbarClassNames(role)
|
389
|
+
}, /* @__PURE__ */ React.createElement(ElevationProvider, {
|
390
|
+
elevation: role === "section" ? "positioned" : "base"
|
391
|
+
}, /* @__PURE__ */ React.createElement(MenuProvider, {
|
392
|
+
...menuProps,
|
393
|
+
attendableId
|
394
|
+
}, /* @__PURE__ */ React.createElement(ToolbarMenu, {
|
395
|
+
classNames: [
|
396
|
+
textBlockWidth,
|
397
|
+
"!bg-transparent",
|
398
|
+
classNames
|
399
|
+
]
|
400
|
+
}))));
|
401
|
+
};
|
402
|
+
|
316
403
|
// packages/ui/react-ui-editor/src/defaults.ts
|
317
404
|
import { EditorView } from "@codemirror/view";
|
318
|
-
import { mx as
|
405
|
+
import { mx as mx3 } from "@dxos/react-ui-theme";
|
319
406
|
|
320
407
|
// packages/ui/react-ui-editor/src/styles/markdown.ts
|
321
|
-
import { mx } from "@dxos/react-ui-theme";
|
408
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
322
409
|
var headings = {
|
323
410
|
1: "text-4xl",
|
324
411
|
2: "text-3xl",
|
@@ -332,7 +419,7 @@ var theme = {
|
|
332
419
|
codeMark: "font-mono text-primary-500",
|
333
420
|
mark: "opacity-50",
|
334
421
|
heading: (level) => {
|
335
|
-
return
|
422
|
+
return mx2(headings[level], "dark:text-primary-400");
|
336
423
|
}
|
337
424
|
};
|
338
425
|
|
@@ -551,9 +638,8 @@ var defaultTheme = {
|
|
551
638
|
|
552
639
|
// packages/ui/react-ui-editor/src/defaults.ts
|
553
640
|
var margin = "!mt-[1rem]";
|
554
|
-
var
|
555
|
-
var
|
556
|
-
var editorFullWidth = mx2(margin);
|
641
|
+
var editorContent = mx3(margin, "!mli-auto w-full max-w-[min(50rem,100%-4rem)]");
|
642
|
+
var editorFullWidth = mx3(margin);
|
557
643
|
var editorGutter = EditorView.theme({
|
558
644
|
// Match margin from content.
|
559
645
|
// Gutter = 2rem + 1rem margin.
|
@@ -568,91 +654,8 @@ var editorMonospace = EditorView.theme({
|
|
568
654
|
}
|
569
655
|
});
|
570
656
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
571
|
-
var stackItemContentEditorClassNames = (role) =>
|
572
|
-
var
|
573
|
-
|
574
|
-
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
575
|
-
var createToolbar = ({ state, customActions, ...features }) => {
|
576
|
-
const nodes = [];
|
577
|
-
const edges = [];
|
578
|
-
if (features.headings ?? true) {
|
579
|
-
const headings2 = createHeadings(state);
|
580
|
-
nodes.push(...headings2.nodes);
|
581
|
-
edges.push(...headings2.edges);
|
582
|
-
}
|
583
|
-
if (features.formatting ?? true) {
|
584
|
-
const formatting = createFormatting(state);
|
585
|
-
nodes.push(...formatting.nodes);
|
586
|
-
edges.push(...formatting.edges);
|
587
|
-
}
|
588
|
-
if (features.lists ?? true) {
|
589
|
-
const lists = createLists(state);
|
590
|
-
nodes.push(...lists.nodes);
|
591
|
-
edges.push(...lists.edges);
|
592
|
-
}
|
593
|
-
if (features.blocks ?? true) {
|
594
|
-
const blocks = createBlocks(state);
|
595
|
-
nodes.push(...blocks.nodes);
|
596
|
-
edges.push(...blocks.edges);
|
597
|
-
}
|
598
|
-
if (customActions) {
|
599
|
-
const custom = customActions();
|
600
|
-
nodes.push(...custom.nodes);
|
601
|
-
edges.push(...custom.edges);
|
602
|
-
}
|
603
|
-
const editorToolbarGap = createGapSeparator();
|
604
|
-
nodes.push(...editorToolbarGap.nodes);
|
605
|
-
edges.push(...editorToolbarGap.edges);
|
606
|
-
if (features.comment ?? true) {
|
607
|
-
const comment = createComment(state);
|
608
|
-
nodes.push(...comment.nodes);
|
609
|
-
edges.push(...comment.edges);
|
610
|
-
}
|
611
|
-
if (features.search ?? true) {
|
612
|
-
nodes.push(editorToolbarSearch);
|
613
|
-
edges.push({
|
614
|
-
source: "root",
|
615
|
-
target: editorToolbarSearch.id
|
616
|
-
});
|
617
|
-
}
|
618
|
-
if (features.viewMode ?? true) {
|
619
|
-
const viewMode = createViewMode(state);
|
620
|
-
nodes.push(...viewMode.nodes);
|
621
|
-
edges.push(...viewMode.edges);
|
622
|
-
}
|
623
|
-
return {
|
624
|
-
nodes,
|
625
|
-
edges
|
626
|
-
};
|
627
|
-
};
|
628
|
-
var useEditorToolbarActionGraph = ({ onAction, ...props }) => {
|
629
|
-
const menuCreator = useCallback(() => createToolbar(props), [
|
630
|
-
props
|
631
|
-
]);
|
632
|
-
const { resolveGroupItems } = useMenuActions(menuCreator);
|
633
|
-
return {
|
634
|
-
resolveGroupItems,
|
635
|
-
onAction
|
636
|
-
};
|
637
|
-
};
|
638
|
-
var EditorToolbar = ({ classNames, attendableId, role, ...props }) => {
|
639
|
-
const menuProps = useEditorToolbarActionGraph(props);
|
640
|
-
return /* @__PURE__ */ React.createElement("div", {
|
641
|
-
role: "none",
|
642
|
-
className: stackItemContentToolbarClassNames(role)
|
643
|
-
}, /* @__PURE__ */ React.createElement(ElevationProvider, {
|
644
|
-
elevation: role === "section" ? "positioned" : "base"
|
645
|
-
}, /* @__PURE__ */ React.createElement(MenuProvider, {
|
646
|
-
...menuProps,
|
647
|
-
attendableId
|
648
|
-
}, /* @__PURE__ */ React.createElement(ToolbarMenu, {
|
649
|
-
classNames: [
|
650
|
-
textBlockWidth,
|
651
|
-
"!bg-transparent",
|
652
|
-
classNames
|
653
|
-
]
|
654
|
-
}))));
|
655
|
-
};
|
657
|
+
var stackItemContentEditorClassNames = (role) => mx3("attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2", role === "section" ? "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24" : "min-bs-0");
|
658
|
+
var stackItemContentToolbarClassNames2 = (role) => mx3("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
656
659
|
|
657
660
|
// packages/ui/react-ui-editor/src/extensions/annotations.ts
|
658
661
|
import { StateField } from "@codemirror/state";
|
@@ -793,7 +796,7 @@ var clientRectsFor = (dom) => {
|
|
793
796
|
// packages/ui/react-ui-editor/src/util/react.tsx
|
794
797
|
import React2 from "react";
|
795
798
|
import { createRoot } from "react-dom/client";
|
796
|
-
import { ThemeProvider
|
799
|
+
import { ThemeProvider } from "@dxos/react-ui";
|
797
800
|
import { defaultTx } from "@dxos/react-ui-theme";
|
798
801
|
var createElement = (tag, options, children) => {
|
799
802
|
const el = document.createElement(tag);
|
@@ -813,11 +816,6 @@ var renderRoot = (root, node) => {
|
|
813
816
|
}, node));
|
814
817
|
return root;
|
815
818
|
};
|
816
|
-
var createRenderer = (Component) => (el, props) => {
|
817
|
-
renderRoot(el, /* @__PURE__ */ React2.createElement(ThemeProvider, {
|
818
|
-
tx: defaultTx
|
819
|
-
}, /* @__PURE__ */ React2.createElement(Tooltip.Provider, null, /* @__PURE__ */ React2.createElement(Component, props))));
|
820
|
-
};
|
821
819
|
|
822
820
|
// packages/ui/react-ui-editor/src/extensions/annotations.ts
|
823
821
|
var annotationMark = Decoration.mark({
|
@@ -1861,11 +1859,15 @@ var random = (min, max) => {
|
|
1861
1859
|
return min + ~~(Math.random() * (max - min + 1));
|
1862
1860
|
};
|
1863
1861
|
|
1864
|
-
// packages/ui/react-ui-editor/src/extensions/command/
|
1865
|
-
import {
|
1862
|
+
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
1863
|
+
import { EditorView as EditorView8, keymap as keymap3 } from "@codemirror/view";
|
1864
|
+
|
1865
|
+
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1866
|
+
import { RangeSetBuilder } from "@codemirror/state";
|
1867
|
+
import { Decoration as Decoration3, EditorView as EditorView6, ViewPlugin as ViewPlugin3, WidgetType as WidgetType2 } from "@codemirror/view";
|
1866
1868
|
|
1867
1869
|
// packages/ui/react-ui-editor/src/extensions/command/state.ts
|
1868
|
-
import { StateField as StateField3 } from "@codemirror/state";
|
1870
|
+
import { StateEffect as StateEffect2, StateField as StateField3 } from "@codemirror/state";
|
1869
1871
|
import { showTooltip } from "@codemirror/view";
|
1870
1872
|
var commandConfig = singleValueFacet();
|
1871
1873
|
var commandState = StateField3.define({
|
@@ -1875,8 +1877,8 @@ var commandState = StateField3.define({
|
|
1875
1877
|
if (effect.is(closeEffect)) {
|
1876
1878
|
return {};
|
1877
1879
|
}
|
1878
|
-
|
1879
|
-
|
1880
|
+
if (effect.is(openEffect)) {
|
1881
|
+
const options = tr.state.facet(commandConfig);
|
1880
1882
|
const { pos, fullWidth } = effect.value;
|
1881
1883
|
const tooltip = {
|
1882
1884
|
pos,
|
@@ -1884,39 +1886,34 @@ var commandState = StateField3.define({
|
|
1884
1886
|
arrow: false,
|
1885
1887
|
strictSide: true,
|
1886
1888
|
create: (view) => {
|
1887
|
-
const
|
1889
|
+
const dom = document.createElement("div");
|
1888
1890
|
const tooltipView = {
|
1889
|
-
dom
|
1891
|
+
dom,
|
1890
1892
|
mount: (view2) => {
|
1891
1893
|
if (fullWidth) {
|
1892
|
-
const parent =
|
1894
|
+
const parent = dom.parentElement;
|
1893
1895
|
const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
|
1894
1896
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
1895
|
-
|
1897
|
+
dom.style.width = `${widthWithoutPadding}px`;
|
1896
1898
|
}
|
1897
|
-
|
1898
|
-
|
1899
|
+
options.onRenderDialog(dom, (action) => {
|
1900
|
+
view2.dispatch({
|
1901
|
+
effects: closeEffect.of(null)
|
1902
|
+
});
|
1903
|
+
if (action?.insert?.length) {
|
1904
|
+
const text = action.insert + "\n";
|
1899
1905
|
view2.dispatch({
|
1900
|
-
|
1901
|
-
|
1902
|
-
|
1903
|
-
|
1904
|
-
|
1905
|
-
|
1906
|
-
changes: {
|
1907
|
-
from: pos,
|
1908
|
-
insert: text
|
1909
|
-
},
|
1910
|
-
selection: {
|
1911
|
-
anchor: pos + text.length
|
1912
|
-
}
|
1913
|
-
});
|
1914
|
-
break;
|
1906
|
+
changes: {
|
1907
|
+
from: pos,
|
1908
|
+
insert: text
|
1909
|
+
},
|
1910
|
+
selection: {
|
1911
|
+
anchor: pos + text.length
|
1915
1912
|
}
|
1916
|
-
}
|
1917
|
-
requestAnimationFrame(() => view2.focus());
|
1913
|
+
});
|
1918
1914
|
}
|
1919
|
-
|
1915
|
+
requestAnimationFrame(() => view2.focus());
|
1916
|
+
});
|
1920
1917
|
}
|
1921
1918
|
};
|
1922
1919
|
return tooltipView;
|
@@ -1933,8 +1930,6 @@ var commandState = StateField3.define({
|
|
1933
1930
|
showTooltip.from(field, (value) => value.tooltip ?? null)
|
1934
1931
|
]
|
1935
1932
|
});
|
1936
|
-
|
1937
|
-
// packages/ui/react-ui-editor/src/extensions/command/action.ts
|
1938
1933
|
var openEffect = StateEffect2.define();
|
1939
1934
|
var closeEffect = StateEffect2.define();
|
1940
1935
|
var openCommand = (view) => {
|
@@ -1973,38 +1968,7 @@ var commandKeyBindings = [
|
|
1973
1968
|
}
|
1974
1969
|
];
|
1975
1970
|
|
1976
|
-
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
1977
|
-
import { EditorView as EditorView7, keymap as keymap3 } from "@codemirror/view";
|
1978
|
-
|
1979
1971
|
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1980
|
-
import { RangeSetBuilder } from "@codemirror/state";
|
1981
|
-
import { Decoration as Decoration3, EditorView as EditorView6, ViewPlugin as ViewPlugin3, WidgetType as WidgetType2 } from "@codemirror/view";
|
1982
|
-
var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
|
1983
|
-
constructor() {
|
1984
|
-
this.deco = Decoration3.none;
|
1985
|
-
}
|
1986
|
-
update(update2) {
|
1987
|
-
const builder = new RangeSetBuilder();
|
1988
|
-
const cState = update2.view.state.field(commandState, false);
|
1989
|
-
if (!cState?.tooltip) {
|
1990
|
-
const selection = update2.view.state.selection.main;
|
1991
|
-
const line = update2.view.state.doc.lineAt(selection.from);
|
1992
|
-
if (selection.from === selection.to && line.from === line.to) {
|
1993
|
-
const hint = onHint();
|
1994
|
-
if (hint) {
|
1995
|
-
builder.add(selection.from, selection.to, Decoration3.widget({
|
1996
|
-
widget: new CommandHint(hint)
|
1997
|
-
}));
|
1998
|
-
}
|
1999
|
-
}
|
2000
|
-
}
|
2001
|
-
this.deco = builder.finish();
|
2002
|
-
}
|
2003
|
-
}, {
|
2004
|
-
provide: (plugin) => [
|
2005
|
-
EditorView6.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration3.none)
|
2006
|
-
]
|
2007
|
-
});
|
2008
1972
|
var CommandHint = class extends WidgetType2 {
|
2009
1973
|
constructor(content) {
|
2010
1974
|
super();
|
@@ -2044,6 +2008,32 @@ var CommandHint = class extends WidgetType2 {
|
|
2044
2008
|
return false;
|
2045
2009
|
}
|
2046
2010
|
};
|
2011
|
+
var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
|
2012
|
+
constructor() {
|
2013
|
+
this.deco = Decoration3.none;
|
2014
|
+
}
|
2015
|
+
update(update2) {
|
2016
|
+
const builder = new RangeSetBuilder();
|
2017
|
+
const cState = update2.view.state.field(commandState, false);
|
2018
|
+
if (!cState?.tooltip) {
|
2019
|
+
const selection = update2.view.state.selection.main;
|
2020
|
+
const line = update2.view.state.doc.lineAt(selection.from);
|
2021
|
+
if (selection.from === selection.to && line.from === line.to) {
|
2022
|
+
const hint = onHint();
|
2023
|
+
if (hint) {
|
2024
|
+
builder.add(selection.from, selection.to, Decoration3.widget({
|
2025
|
+
widget: new CommandHint(hint)
|
2026
|
+
}));
|
2027
|
+
}
|
2028
|
+
}
|
2029
|
+
}
|
2030
|
+
this.deco = builder.finish();
|
2031
|
+
}
|
2032
|
+
}, {
|
2033
|
+
provide: (plugin) => [
|
2034
|
+
EditorView6.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration3.none)
|
2035
|
+
]
|
2036
|
+
});
|
2047
2037
|
|
2048
2038
|
// packages/ui/react-ui-editor/src/extensions/command/menu.ts
|
2049
2039
|
import { ViewPlugin as ViewPlugin4 } from "@codemirror/view";
|
@@ -2059,11 +2049,11 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2059
2049
|
this.button.style.position = "absolute";
|
2060
2050
|
this.button.style.zIndex = "10";
|
2061
2051
|
this.button.style.display = "none";
|
2062
|
-
options.
|
2063
|
-
|
2064
|
-
}
|
2052
|
+
options.onRenderMenu(this.button, () => {
|
2053
|
+
openCommand(view);
|
2054
|
+
});
|
2065
2055
|
container.appendChild(this.button);
|
2066
|
-
container.addEventListener("scroll", this.scheduleUpdate
|
2056
|
+
container.addEventListener("scroll", this.scheduleUpdate);
|
2067
2057
|
this.scheduleUpdate();
|
2068
2058
|
}
|
2069
2059
|
update(update2) {
|
@@ -2079,7 +2069,7 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2079
2069
|
if (this.rafId != null) {
|
2080
2070
|
cancelAnimationFrame(this.rafId);
|
2081
2071
|
}
|
2082
|
-
this.rafId = requestAnimationFrame(this.updateButtonPosition
|
2072
|
+
this.rafId = requestAnimationFrame(() => this.updateButtonPosition());
|
2083
2073
|
}
|
2084
2074
|
updateButtonPosition() {
|
2085
2075
|
const pos = this.view.state.selection.main.head;
|
@@ -2109,24 +2099,83 @@ var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
|
2109
2099
|
}
|
2110
2100
|
});
|
2111
2101
|
|
2102
|
+
// packages/ui/react-ui-editor/src/extensions/command/preview.ts
|
2103
|
+
import { syntaxTree } from "@codemirror/language";
|
2104
|
+
import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField4 } from "@codemirror/state";
|
2105
|
+
import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3 } from "@codemirror/view";
|
2106
|
+
var preview = (options) => {
|
2107
|
+
return [
|
2108
|
+
StateField4.define({
|
2109
|
+
create: (state) => buildDecorations(state, options),
|
2110
|
+
update: (_, tr) => buildDecorations(tr.state, options),
|
2111
|
+
// TODO(burdon): Make atomic.
|
2112
|
+
provide: (field) => EditorView7.decorations.from(field)
|
2113
|
+
})
|
2114
|
+
];
|
2115
|
+
};
|
2116
|
+
var buildDecorations = (state, options) => {
|
2117
|
+
const builder = new RangeSetBuilder2();
|
2118
|
+
syntaxTree(state).iterate({
|
2119
|
+
enter: (node) => {
|
2120
|
+
if (node.name === "Link") {
|
2121
|
+
const urlNode = node.node.getChild("URL");
|
2122
|
+
if (urlNode) {
|
2123
|
+
const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
|
2124
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
2125
|
+
builder.add(node.from, node.to, Decoration4.replace({
|
2126
|
+
block: true,
|
2127
|
+
widget: new PreviewWidget(options.onRenderPreview, url, text)
|
2128
|
+
}));
|
2129
|
+
}
|
2130
|
+
}
|
2131
|
+
}
|
2132
|
+
});
|
2133
|
+
return builder.finish();
|
2134
|
+
};
|
2135
|
+
var PreviewWidget = class extends WidgetType3 {
|
2136
|
+
constructor(_onRenderPreview, _url, _text) {
|
2137
|
+
super();
|
2138
|
+
this._onRenderPreview = _onRenderPreview;
|
2139
|
+
this._url = _url;
|
2140
|
+
this._text = _text;
|
2141
|
+
}
|
2142
|
+
eq(other) {
|
2143
|
+
return this._url === other._url;
|
2144
|
+
}
|
2145
|
+
toDOM(view) {
|
2146
|
+
const root = document.createElement("div");
|
2147
|
+
root.classList.add("cm-preview");
|
2148
|
+
this._onRenderPreview(root, {
|
2149
|
+
url: this._url,
|
2150
|
+
text: this._text
|
2151
|
+
});
|
2152
|
+
return root;
|
2153
|
+
}
|
2154
|
+
};
|
2155
|
+
|
2112
2156
|
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
2113
|
-
var command = (options
|
2157
|
+
var command = (options) => {
|
2114
2158
|
return [
|
2115
|
-
keymap3.of(commandKeyBindings),
|
2116
2159
|
commandConfig.of(options),
|
2117
2160
|
commandState,
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2123
|
-
}) : [],
|
2124
|
-
EditorView7.focusChangeEffect.of((_, focusing) => {
|
2161
|
+
keymap3.of(commandKeyBindings),
|
2162
|
+
preview(options),
|
2163
|
+
floatingMenu(options),
|
2164
|
+
hintViewPlugin(options),
|
2165
|
+
EditorView8.focusChangeEffect.of((_, focusing) => {
|
2125
2166
|
return focusing ? closeEffect.of(null) : null;
|
2126
2167
|
}),
|
2127
|
-
|
2168
|
+
EditorView8.theme({
|
2128
2169
|
".cm-tooltip": {
|
2129
2170
|
background: "transparent"
|
2171
|
+
},
|
2172
|
+
".cm-preview": {
|
2173
|
+
marginLeft: "-1rem",
|
2174
|
+
marginRight: "-1rem",
|
2175
|
+
padding: "1rem",
|
2176
|
+
borderRadius: "1rem",
|
2177
|
+
background: "var(--dx-modalSurface)",
|
2178
|
+
border: "1px solid var(--dx-separator)"
|
2130
2179
|
}
|
2131
2180
|
})
|
2132
2181
|
];
|
@@ -2134,8 +2183,8 @@ var command = (options = {}) => {
|
|
2134
2183
|
|
2135
2184
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
2136
2185
|
import { invertedEffects } from "@codemirror/commands";
|
2137
|
-
import { StateEffect as StateEffect3, StateField as
|
2138
|
-
import { hoverTooltip, keymap as keymap5, Decoration as
|
2186
|
+
import { StateEffect as StateEffect3, StateField as StateField5 } from "@codemirror/state";
|
2187
|
+
import { hoverTooltip, keymap as keymap5, Decoration as Decoration5, EditorView as EditorView10, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
|
2139
2188
|
import sortBy from "lodash.sortby";
|
2140
2189
|
import { useEffect, useMemo as useMemo2 } from "react";
|
2141
2190
|
import { debounce as debounce2 } from "@dxos/async";
|
@@ -2144,7 +2193,7 @@ import { isNonNullable } from "@dxos/util";
|
|
2144
2193
|
|
2145
2194
|
// packages/ui/react-ui-editor/src/extensions/selection.ts
|
2146
2195
|
import { Transaction } from "@codemirror/state";
|
2147
|
-
import { EditorView as
|
2196
|
+
import { EditorView as EditorView9, keymap as keymap4 } from "@codemirror/view";
|
2148
2197
|
import { debounce } from "@dxos/async";
|
2149
2198
|
import { invariant as invariant3 } from "@dxos/invariant";
|
2150
2199
|
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
@@ -2155,7 +2204,7 @@ var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
|
2155
2204
|
return {
|
2156
2205
|
selection,
|
2157
2206
|
scrollIntoView: !scrollTo,
|
2158
|
-
effects: scrollTo ?
|
2207
|
+
effects: scrollTo ? EditorView9.scrollIntoView(scrollTo, {
|
2159
2208
|
yMargin: 96
|
2160
2209
|
}) : void 0,
|
2161
2210
|
annotations: Transaction.userEvent.of(stateRestoreAnnotation)
|
@@ -2197,7 +2246,7 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2197
2246
|
// setStateDebounced(id, {});
|
2198
2247
|
// },
|
2199
2248
|
// }),
|
2200
|
-
|
2249
|
+
EditorView9.updateListener.of(({ view, transactions }) => {
|
2201
2250
|
const id = view.state.facet(documentId);
|
2202
2251
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
2203
2252
|
return;
|
@@ -2240,7 +2289,7 @@ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src
|
|
2240
2289
|
var setComments = StateEffect3.define();
|
2241
2290
|
var setSelection = StateEffect3.define();
|
2242
2291
|
var setCommentState = StateEffect3.define();
|
2243
|
-
var commentsState =
|
2292
|
+
var commentsState = StateField5.define({
|
2244
2293
|
create: (state) => ({
|
2245
2294
|
id: state.facet(documentId),
|
2246
2295
|
comments: [],
|
@@ -2278,7 +2327,7 @@ var commentsState = StateField4.define({
|
|
2278
2327
|
return value;
|
2279
2328
|
}
|
2280
2329
|
});
|
2281
|
-
var styles3 =
|
2330
|
+
var styles3 = EditorView10.theme({
|
2282
2331
|
".cm-comment, .cm-comment-current": {
|
2283
2332
|
margin: "0 -3px",
|
2284
2333
|
padding: "3px",
|
@@ -2291,14 +2340,14 @@ var styles3 = EditorView9.theme({
|
|
2291
2340
|
textDecoration: "underline"
|
2292
2341
|
}
|
2293
2342
|
});
|
2294
|
-
var createCommentMark = (id, isCurrent) =>
|
2343
|
+
var createCommentMark = (id, isCurrent) => Decoration5.mark({
|
2295
2344
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2296
2345
|
attributes: {
|
2297
2346
|
"data-testid": "cm-comment",
|
2298
2347
|
"data-comment-id": id
|
2299
2348
|
}
|
2300
2349
|
});
|
2301
|
-
var commentsDecorations =
|
2350
|
+
var commentsDecorations = EditorView10.decorations.compute([
|
2302
2351
|
commentsState
|
2303
2352
|
], (state) => {
|
2304
2353
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2318,10 +2367,10 @@ var commentsDecorations = EditorView9.decorations.compute([
|
|
2318
2367
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2319
2368
|
return mark.range(range.from, range.to);
|
2320
2369
|
}).filter(isNonNullable);
|
2321
|
-
return
|
2370
|
+
return Decoration5.set(decorations);
|
2322
2371
|
});
|
2323
2372
|
var commentClickedEffect = StateEffect3.define();
|
2324
|
-
var handleCommentClick =
|
2373
|
+
var handleCommentClick = EditorView10.domEventHandlers({
|
2325
2374
|
click: (event, view) => {
|
2326
2375
|
let target = event.target;
|
2327
2376
|
const editorRoot = view.dom;
|
@@ -2360,7 +2409,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2360
2409
|
}
|
2361
2410
|
};
|
2362
2411
|
return [
|
2363
|
-
|
2412
|
+
EditorView10.domEventHandlers({
|
2364
2413
|
cut: handleTrack,
|
2365
2414
|
copy: handleTrack
|
2366
2415
|
}),
|
@@ -2382,7 +2431,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2382
2431
|
return effects;
|
2383
2432
|
}),
|
2384
2433
|
// Handle paste or the undo of comment deletion.
|
2385
|
-
|
2434
|
+
EditorView10.updateListener.of((update2) => {
|
2386
2435
|
const restore = [];
|
2387
2436
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2388
2437
|
const tr = update2.transactions[i];
|
@@ -2493,7 +2542,7 @@ var comments = (options = {}) => {
|
|
2493
2542
|
// Hover tooltip (for key shortcut hints, etc.)
|
2494
2543
|
// TODO(burdon): Factor out to generic hints extension for current selection/line.
|
2495
2544
|
//
|
2496
|
-
options.
|
2545
|
+
options.onHover && hoverTooltip((view, pos) => {
|
2497
2546
|
const selection = view.state.selection.main;
|
2498
2547
|
if (selection && pos >= selection.from && pos <= selection.to) {
|
2499
2548
|
return {
|
@@ -2502,9 +2551,7 @@ var comments = (options = {}) => {
|
|
2502
2551
|
above: true,
|
2503
2552
|
create: () => {
|
2504
2553
|
const el = document.createElement("div");
|
2505
|
-
options.
|
2506
|
-
shortcut
|
2507
|
-
}, view);
|
2554
|
+
options.onHover(el, shortcut);
|
2508
2555
|
return {
|
2509
2556
|
dom: el,
|
2510
2557
|
offset: {
|
@@ -2524,7 +2571,7 @@ var comments = (options = {}) => {
|
|
2524
2571
|
//
|
2525
2572
|
// Track deleted ranges and update ranges for decorations.
|
2526
2573
|
//
|
2527
|
-
|
2574
|
+
EditorView10.updateListener.of(({ view, state, changes }) => {
|
2528
2575
|
let mod = false;
|
2529
2576
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2530
2577
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2556,7 +2603,7 @@ var comments = (options = {}) => {
|
|
2556
2603
|
//
|
2557
2604
|
// Track selection/proximity.
|
2558
2605
|
//
|
2559
|
-
|
2606
|
+
EditorView10.updateListener.of(({ view, state }) => {
|
2560
2607
|
let min = Infinity;
|
2561
2608
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2562
2609
|
const { head } = state.selection.main;
|
@@ -2610,7 +2657,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2610
2657
|
anchor: range.from
|
2611
2658
|
} : void 0,
|
2612
2659
|
effects: [
|
2613
|
-
needsScroll ?
|
2660
|
+
needsScroll ? EditorView10.scrollIntoView(range.from, center ? {
|
2614
2661
|
y: "center"
|
2615
2662
|
} : void 0) : [],
|
2616
2663
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2662,7 +2709,7 @@ var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin5.from
|
|
2662
2709
|
}
|
2663
2710
|
});
|
2664
2711
|
var useCommentState = (state) => {
|
2665
|
-
return useMemo2(() =>
|
2712
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2666
2713
|
if (update2.docChanged || update2.selectionSet) {
|
2667
2714
|
state.comment = selectionOverlapsComment(update2.state);
|
2668
2715
|
state.selection = hasActiveSelection(update2.state);
|
@@ -2686,7 +2733,7 @@ var useComments = (view, id, comments2) => {
|
|
2686
2733
|
});
|
2687
2734
|
};
|
2688
2735
|
var useCommentClickListener = (onCommentClick) => {
|
2689
|
-
return useMemo2(() =>
|
2736
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2690
2737
|
update2.transactions.forEach((transaction) => {
|
2691
2738
|
transaction.effects.forEach((effect) => {
|
2692
2739
|
if (effect.is(commentClickedEffect)) {
|
@@ -2700,21 +2747,21 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2700
2747
|
};
|
2701
2748
|
|
2702
2749
|
// packages/ui/react-ui-editor/src/extensions/debug.ts
|
2703
|
-
import { syntaxTree } from "@codemirror/language";
|
2704
|
-
import { StateField as
|
2750
|
+
import { syntaxTree as syntaxTree2 } from "@codemirror/language";
|
2751
|
+
import { StateField as StateField6 } from "@codemirror/state";
|
2705
2752
|
var debugNodeLogger = (log8 = console.log) => {
|
2706
|
-
const logTokens = (state) =>
|
2753
|
+
const logTokens = (state) => syntaxTree2(state).iterate({
|
2707
2754
|
enter: (node) => log8(node.type)
|
2708
2755
|
});
|
2709
|
-
return
|
2756
|
+
return StateField6.define({
|
2710
2757
|
create: (state) => logTokens(state),
|
2711
2758
|
update: (_, tr) => logTokens(tr.state)
|
2712
2759
|
});
|
2713
2760
|
};
|
2714
2761
|
|
2715
2762
|
// packages/ui/react-ui-editor/src/extensions/dnd.ts
|
2716
|
-
import { dropCursor, EditorView as
|
2717
|
-
var styles4 =
|
2763
|
+
import { dropCursor, EditorView as EditorView11 } from "@codemirror/view";
|
2764
|
+
var styles4 = EditorView11.theme({
|
2718
2765
|
".cm-dropCursor": {
|
2719
2766
|
borderLeft: "2px solid var(--dx-accentText)",
|
2720
2767
|
color: "var(--dx-accentText)",
|
@@ -2728,7 +2775,7 @@ var dropFile = (options = {}) => {
|
|
2728
2775
|
return [
|
2729
2776
|
styles4,
|
2730
2777
|
dropCursor(),
|
2731
|
-
|
2778
|
+
EditorView11.domEventHandlers({
|
2732
2779
|
drop: (event, view) => {
|
2733
2780
|
event.preventDefault();
|
2734
2781
|
const files = event.dataTransfer?.files;
|
@@ -2755,7 +2802,7 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
|
|
2755
2802
|
import { searchKeymap } from "@codemirror/search";
|
2756
2803
|
import { EditorState } from "@codemirror/state";
|
2757
2804
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
2758
|
-
import { EditorView as
|
2805
|
+
import { EditorView as EditorView13, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
|
2759
2806
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
2760
2807
|
import merge from "lodash.merge";
|
2761
2808
|
import { generateName } from "@dxos/display-name";
|
@@ -2763,10 +2810,10 @@ import { log as log5 } from "@dxos/log";
|
|
2763
2810
|
import { hexToHue, isNotFalsy as isNotFalsy3 } from "@dxos/util";
|
2764
2811
|
|
2765
2812
|
// packages/ui/react-ui-editor/src/extensions/focus.ts
|
2766
|
-
import { StateEffect as StateEffect4, StateField as
|
2767
|
-
import { EditorView as
|
2813
|
+
import { StateEffect as StateEffect4, StateField as StateField7 } from "@codemirror/state";
|
2814
|
+
import { EditorView as EditorView12 } from "@codemirror/view";
|
2768
2815
|
var focusEffect = StateEffect4.define();
|
2769
|
-
var focusField =
|
2816
|
+
var focusField = StateField7.define({
|
2770
2817
|
create: () => false,
|
2771
2818
|
update: (value, tr) => {
|
2772
2819
|
for (const effect of tr.effects) {
|
@@ -2779,7 +2826,7 @@ var focusField = StateField6.define({
|
|
2779
2826
|
});
|
2780
2827
|
var focus = [
|
2781
2828
|
focusField,
|
2782
|
-
|
2829
|
+
EditorView12.domEventHandlers({
|
2783
2830
|
focus: (event, view) => {
|
2784
2831
|
setTimeout(() => view.dispatch({
|
2785
2832
|
effects: focusEffect.of(true)
|
@@ -2817,7 +2864,7 @@ var createBasicExtensions = (_props) => {
|
|
2817
2864
|
const props = defaultsDeep2({}, _props, defaultBasicOptions);
|
2818
2865
|
return [
|
2819
2866
|
// NOTE: Doesn't catch errors in keymap functions.
|
2820
|
-
|
2867
|
+
EditorView13.exceptionSink.of((err) => {
|
2821
2868
|
log5.catch(err, void 0, {
|
2822
2869
|
F: __dxlog_file8,
|
2823
2870
|
L: 96,
|
@@ -2832,12 +2879,12 @@ var createBasicExtensions = (_props) => {
|
|
2832
2879
|
props.drawSelection && drawSelection({
|
2833
2880
|
cursorBlinkRate: 1200
|
2834
2881
|
}),
|
2835
|
-
props.editable !== void 0 &&
|
2882
|
+
props.editable !== void 0 && EditorView13.editable.of(props.editable),
|
2836
2883
|
props.focus && focus,
|
2837
2884
|
props.highlightActiveLine && highlightActiveLine(),
|
2838
2885
|
props.history && history(),
|
2839
2886
|
props.lineNumbers && lineNumbers(),
|
2840
|
-
props.lineWrapping &&
|
2887
|
+
props.lineWrapping && EditorView13.lineWrapping,
|
2841
2888
|
props.placeholder && placeholder(props.placeholder),
|
2842
2889
|
props.readOnly !== void 0 && EditorState.readOnly.of(props.readOnly),
|
2843
2890
|
props.scrollPastEnd && scrollPastEnd(),
|
@@ -2874,14 +2921,14 @@ var defaultThemeSlots = {
|
|
2874
2921
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2875
2922
|
const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
|
2876
2923
|
return [
|
2877
|
-
|
2878
|
-
|
2924
|
+
EditorView13.darkTheme.of(themeMode === "dark"),
|
2925
|
+
EditorView13.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
|
2879
2926
|
// https://github.com/codemirror/theme-one-dark
|
2880
2927
|
_syntaxHighlighting && (themeMode === "dark" ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle)),
|
2881
|
-
slots.editor?.className &&
|
2928
|
+
slots.editor?.className && EditorView13.editorAttributes.of({
|
2882
2929
|
class: slots.editor.className
|
2883
2930
|
}),
|
2884
|
-
slots.content?.className &&
|
2931
|
+
slots.content?.className && EditorView13.contentAttributes.of({
|
2885
2932
|
class: slots.content.className
|
2886
2933
|
})
|
2887
2934
|
].filter(isNotFalsy3);
|
@@ -2910,7 +2957,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2910
2957
|
|
2911
2958
|
// packages/ui/react-ui-editor/src/extensions/folding.tsx
|
2912
2959
|
import { codeFolding, foldGutter } from "@codemirror/language";
|
2913
|
-
import { EditorView as
|
2960
|
+
import { EditorView as EditorView14 } from "@codemirror/view";
|
2914
2961
|
import React3 from "react";
|
2915
2962
|
import { Icon } from "@dxos/react-ui";
|
2916
2963
|
var folding = (_props = {}) => [
|
@@ -2925,7 +2972,7 @@ var folding = (_props = {}) => [
|
|
2925
2972
|
className: "flex h-full items-center"
|
2926
2973
|
});
|
2927
2974
|
return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
|
2928
|
-
icon: "ph--caret-right--
|
2975
|
+
icon: "ph--caret-right--regular",
|
2929
2976
|
size: 3,
|
2930
2977
|
classNames: [
|
2931
2978
|
"mx-3 cursor-pointer",
|
@@ -2934,7 +2981,7 @@ var folding = (_props = {}) => [
|
|
2934
2981
|
}));
|
2935
2982
|
}
|
2936
2983
|
}),
|
2937
|
-
|
2984
|
+
EditorView14.theme({
|
2938
2985
|
".cm-foldGutter": {
|
2939
2986
|
opacity: 0.3,
|
2940
2987
|
transition: "opacity 0.3s",
|
@@ -2947,14 +2994,14 @@ var folding = (_props = {}) => [
|
|
2947
2994
|
];
|
2948
2995
|
|
2949
2996
|
// packages/ui/react-ui-editor/src/extensions/listener.ts
|
2950
|
-
import { EditorView as
|
2997
|
+
import { EditorView as EditorView15 } from "@codemirror/view";
|
2951
2998
|
var listener = ({ onFocus, onChange }) => {
|
2952
2999
|
const extensions = [];
|
2953
|
-
onFocus && extensions.push(
|
3000
|
+
onFocus && extensions.push(EditorView15.focusChangeEffect.of((_, focusing) => {
|
2954
3001
|
onFocus(focusing);
|
2955
3002
|
return null;
|
2956
3003
|
}));
|
2957
|
-
onChange && extensions.push(
|
3004
|
+
onChange && extensions.push(EditorView15.updateListener.of((update2) => {
|
2958
3005
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
2959
3006
|
}));
|
2960
3007
|
return extensions;
|
@@ -2962,9 +3009,9 @@ var listener = ({ onFocus, onChange }) => {
|
|
2962
3009
|
|
2963
3010
|
// packages/ui/react-ui-editor/src/extensions/markdown/formatting.ts
|
2964
3011
|
import { snippet } from "@codemirror/autocomplete";
|
2965
|
-
import { syntaxTree as
|
3012
|
+
import { syntaxTree as syntaxTree3 } from "@codemirror/language";
|
2966
3013
|
import { EditorSelection } from "@codemirror/state";
|
2967
|
-
import { EditorView as
|
3014
|
+
import { EditorView as EditorView16, keymap as keymap7 } from "@codemirror/view";
|
2968
3015
|
import { useMemo as useMemo3 } from "react";
|
2969
3016
|
var formattingEquals = (a, b) => a.blockType === b.blockType && a.strong === b.strong && a.emphasis === b.emphasis && a.strikethrough === b.strikethrough && a.code === b.code && a.link === b.link && a.listStyle === b.listStyle && a.blockQuote === b.blockQuote;
|
2970
3017
|
var Inline;
|
@@ -2987,7 +3034,7 @@ var setHeading = (level) => {
|
|
2987
3034
|
let prevBlock = -1;
|
2988
3035
|
for (const range of ranges) {
|
2989
3036
|
let sawBlock = false;
|
2990
|
-
|
3037
|
+
syntaxTree3(state).iterate({
|
2991
3038
|
from: range.from,
|
2992
3039
|
to: range.to,
|
2993
3040
|
enter: (node) => {
|
@@ -3096,7 +3143,7 @@ var setStyle = (type, enable) => {
|
|
3096
3143
|
let startCovered = false;
|
3097
3144
|
let endCovered = false;
|
3098
3145
|
let { from, to } = range;
|
3099
|
-
|
3146
|
+
syntaxTree3(state).iterate({
|
3100
3147
|
from,
|
3101
3148
|
to,
|
3102
3149
|
enter: (node) => {
|
@@ -3299,7 +3346,7 @@ var insertTable = (view) => {
|
|
3299
3346
|
snippets.table(view, null, from, from);
|
3300
3347
|
};
|
3301
3348
|
var removeLinkInner = (from, to, changes, state) => {
|
3302
|
-
|
3349
|
+
syntaxTree3(state).iterate({
|
3303
3350
|
from,
|
3304
3351
|
to,
|
3305
3352
|
enter: (node) => {
|
@@ -3344,7 +3391,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3344
3391
|
let { from, to } = range;
|
3345
3392
|
const cutStyles = [];
|
3346
3393
|
let okay = null;
|
3347
|
-
|
3394
|
+
syntaxTree3(state).iterate({
|
3348
3395
|
from,
|
3349
3396
|
to,
|
3350
3397
|
enter: (node) => {
|
@@ -3439,7 +3486,7 @@ var addList = (type) => {
|
|
3439
3486
|
let parentColumn = null;
|
3440
3487
|
const blocks = [];
|
3441
3488
|
for (const { from, to } of state.selection.ranges) {
|
3442
|
-
|
3489
|
+
syntaxTree3(state).iterate({
|
3443
3490
|
from,
|
3444
3491
|
to,
|
3445
3492
|
enter: (node) => {
|
@@ -3574,7 +3621,7 @@ var removeList = (type) => {
|
|
3574
3621
|
const stack = [];
|
3575
3622
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3576
3623
|
for (const { from, to } of state.selection.ranges) {
|
3577
|
-
|
3624
|
+
syntaxTree3(state).iterate({
|
3578
3625
|
from,
|
3579
3626
|
to,
|
3580
3627
|
enter: (node) => {
|
@@ -3661,7 +3708,7 @@ var setBlockquote = (enable) => {
|
|
3661
3708
|
let lastBlock = -1;
|
3662
3709
|
for (const { from, to } of state.selection.ranges) {
|
3663
3710
|
const sawBlock = false;
|
3664
|
-
|
3711
|
+
syntaxTree3(state).iterate({
|
3665
3712
|
from,
|
3666
3713
|
to,
|
3667
3714
|
enter: (node) => {
|
@@ -3751,7 +3798,7 @@ var addCodeblock = (target) => {
|
|
3751
3798
|
for (const { from, to } of selection.ranges) {
|
3752
3799
|
let blockFrom = from;
|
3753
3800
|
let blockTo = to;
|
3754
|
-
|
3801
|
+
syntaxTree3(state).iterate({
|
3755
3802
|
from,
|
3756
3803
|
to,
|
3757
3804
|
enter: (node) => {
|
@@ -3802,7 +3849,7 @@ var removeCodeblock = ({ state, dispatch }) => {
|
|
3802
3849
|
let lastBlock = -1;
|
3803
3850
|
const changes = [];
|
3804
3851
|
for (const { from, to } of state.selection.ranges) {
|
3805
|
-
|
3852
|
+
syntaxTree3(state).iterate({
|
3806
3853
|
from,
|
3807
3854
|
to,
|
3808
3855
|
enter: (node) => {
|
@@ -3964,7 +4011,7 @@ var getFormatting = (state) => {
|
|
3964
4011
|
}
|
3965
4012
|
}
|
3966
4013
|
}
|
3967
|
-
|
4014
|
+
syntaxTree3(state).iterate({
|
3968
4015
|
from: range.from,
|
3969
4016
|
to: range.to,
|
3970
4017
|
enter: (node) => {
|
@@ -4053,7 +4100,7 @@ var getFormatting = (state) => {
|
|
4053
4100
|
};
|
4054
4101
|
};
|
4055
4102
|
var useFormattingState = (state) => {
|
4056
|
-
return useMemo3(() =>
|
4103
|
+
return useMemo3(() => EditorView16.updateListener.of((update2) => {
|
4057
4104
|
if (update2.docChanged || update2.selectionSet) {
|
4058
4105
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4059
4106
|
state[key] = active;
|
@@ -4336,9 +4383,9 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4336
4383
|
};
|
4337
4384
|
|
4338
4385
|
// packages/ui/react-ui-editor/src/extensions/markdown/debug.ts
|
4339
|
-
import { syntaxTree as
|
4340
|
-
import { StateField as
|
4341
|
-
var debugTree = (cb) =>
|
4386
|
+
import { syntaxTree as syntaxTree4 } from "@codemirror/language";
|
4387
|
+
import { StateField as StateField8 } from "@codemirror/state";
|
4388
|
+
var debugTree = (cb) => StateField8.define({
|
4342
4389
|
create: (state) => cb(convertTreeToJson(state)),
|
4343
4390
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
4344
4391
|
});
|
@@ -4359,24 +4406,24 @@ var convertTreeToJson = (state) => {
|
|
4359
4406
|
}
|
4360
4407
|
return node;
|
4361
4408
|
};
|
4362
|
-
return treeToJson(
|
4409
|
+
return treeToJson(syntaxTree4(state).cursor());
|
4363
4410
|
};
|
4364
4411
|
|
4365
4412
|
// packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
|
4366
|
-
import { syntaxTree as
|
4367
|
-
import { RangeSetBuilder as
|
4368
|
-
import { EditorView as
|
4413
|
+
import { syntaxTree as syntaxTree8 } from "@codemirror/language";
|
4414
|
+
import { RangeSetBuilder as RangeSetBuilder4, StateEffect as StateEffect5 } from "@codemirror/state";
|
4415
|
+
import { EditorView as EditorView20, Decoration as Decoration8, WidgetType as WidgetType6, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
|
4369
4416
|
import { invariant as invariant4 } from "@dxos/invariant";
|
4370
|
-
import { mx as
|
4417
|
+
import { mx as mx4 } from "@dxos/react-ui-theme";
|
4371
4418
|
|
4372
4419
|
// packages/ui/react-ui-editor/src/extensions/markdown/changes.ts
|
4373
|
-
import { syntaxTree as
|
4420
|
+
import { syntaxTree as syntaxTree5 } from "@codemirror/language";
|
4374
4421
|
import { Transaction as Transaction2 } from "@codemirror/state";
|
4375
4422
|
import { ViewPlugin as ViewPlugin6 } from "@codemirror/view";
|
4376
4423
|
var adjustChanges = () => {
|
4377
4424
|
return ViewPlugin6.fromClass(class {
|
4378
4425
|
update(update2) {
|
4379
|
-
const tree =
|
4426
|
+
const tree = syntaxTree5(update2.state);
|
4380
4427
|
const adjustments = [];
|
4381
4428
|
for (const tr of update2.transactions) {
|
4382
4429
|
const event = tr.annotation(Transaction2.userEvent);
|
@@ -4514,14 +4561,14 @@ var getValidUrl = (str) => {
|
|
4514
4561
|
};
|
4515
4562
|
|
4516
4563
|
// packages/ui/react-ui-editor/src/extensions/markdown/image.ts
|
4517
|
-
import { syntaxTree as
|
4518
|
-
import { StateField as
|
4519
|
-
import { Decoration as
|
4564
|
+
import { syntaxTree as syntaxTree6 } from "@codemirror/language";
|
4565
|
+
import { StateField as StateField9 } from "@codemirror/state";
|
4566
|
+
import { Decoration as Decoration6, EditorView as EditorView17, WidgetType as WidgetType4 } from "@codemirror/view";
|
4520
4567
|
var image = (_options = {}) => {
|
4521
4568
|
return [
|
4522
|
-
|
4569
|
+
StateField9.define({
|
4523
4570
|
create: (state) => {
|
4524
|
-
return
|
4571
|
+
return Decoration6.set(buildDecorations2(0, state.doc.length, state));
|
4525
4572
|
},
|
4526
4573
|
update: (value, tr) => {
|
4527
4574
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4541,17 +4588,25 @@ var image = (_options = {}) => {
|
|
4541
4588
|
filterFrom: from,
|
4542
4589
|
filterTo: to,
|
4543
4590
|
filter: () => false,
|
4544
|
-
add:
|
4591
|
+
add: buildDecorations2(from, to, tr.state)
|
4545
4592
|
});
|
4546
4593
|
},
|
4547
|
-
provide: (field) =>
|
4594
|
+
provide: (field) => EditorView17.decorations.from(field)
|
4548
4595
|
})
|
4549
4596
|
];
|
4550
4597
|
};
|
4551
|
-
var
|
4598
|
+
var preloaded = /* @__PURE__ */ new Set();
|
4599
|
+
var preloadImage = (url) => {
|
4600
|
+
if (!preloaded.has(url)) {
|
4601
|
+
const img = document.createElement("img");
|
4602
|
+
img.src = url;
|
4603
|
+
preloaded.add(url);
|
4604
|
+
}
|
4605
|
+
};
|
4606
|
+
var buildDecorations2 = (from, to, state) => {
|
4552
4607
|
const decorations = [];
|
4553
4608
|
const cursor = state.selection.main.head;
|
4554
|
-
|
4609
|
+
syntaxTree6(state).iterate({
|
4555
4610
|
enter: (node) => {
|
4556
4611
|
if (node.name === "Image") {
|
4557
4612
|
const urlNode = node.node.getChild("URL");
|
@@ -4562,7 +4617,7 @@ var buildDecorations = (from, to, state) => {
|
|
4562
4617
|
return;
|
4563
4618
|
}
|
4564
4619
|
preloadImage(url);
|
4565
|
-
decorations.push(
|
4620
|
+
decorations.push(Decoration6.replace({
|
4566
4621
|
block: true,
|
4567
4622
|
widget: new ImageWidget(url)
|
4568
4623
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4574,15 +4629,7 @@ var buildDecorations = (from, to, state) => {
|
|
4574
4629
|
});
|
4575
4630
|
return decorations;
|
4576
4631
|
};
|
4577
|
-
var
|
4578
|
-
var preloadImage = (url) => {
|
4579
|
-
if (!preloaded.has(url)) {
|
4580
|
-
const img = document.createElement("img");
|
4581
|
-
img.src = url;
|
4582
|
-
preloaded.add(url);
|
4583
|
-
}
|
4584
|
-
};
|
4585
|
-
var ImageWidget = class extends WidgetType3 {
|
4632
|
+
var ImageWidget = class extends WidgetType4 {
|
4586
4633
|
constructor(_url) {
|
4587
4634
|
super();
|
4588
4635
|
this._url = _url;
|
@@ -4604,10 +4651,10 @@ var ImageWidget = class extends WidgetType3 {
|
|
4604
4651
|
};
|
4605
4652
|
|
4606
4653
|
// packages/ui/react-ui-editor/src/extensions/markdown/styles.ts
|
4607
|
-
import { EditorView as
|
4654
|
+
import { EditorView as EditorView18 } from "@codemirror/view";
|
4608
4655
|
var bulletListIndentationWidth = 24;
|
4609
4656
|
var orderedListIndentationWidth = 36;
|
4610
|
-
var formattingStyles =
|
4657
|
+
var formattingStyles = EditorView18.theme({
|
4611
4658
|
/**
|
4612
4659
|
* Horizontal rule.
|
4613
4660
|
*/
|
@@ -4726,18 +4773,18 @@ var formattingStyles = EditorView17.theme({
|
|
4726
4773
|
});
|
4727
4774
|
|
4728
4775
|
// packages/ui/react-ui-editor/src/extensions/markdown/table.ts
|
4729
|
-
import { syntaxTree as
|
4730
|
-
import { RangeSetBuilder as
|
4731
|
-
import { Decoration as
|
4776
|
+
import { syntaxTree as syntaxTree7 } from "@codemirror/language";
|
4777
|
+
import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField10 } from "@codemirror/state";
|
4778
|
+
import { Decoration as Decoration7, EditorView as EditorView19, WidgetType as WidgetType5 } from "@codemirror/view";
|
4732
4779
|
var table = (options = {}) => {
|
4733
|
-
return
|
4780
|
+
return StateField10.define({
|
4734
4781
|
create: (state) => update(state, options),
|
4735
4782
|
update: (_, tr) => update(tr.state, options),
|
4736
|
-
provide: (field) =>
|
4783
|
+
provide: (field) => EditorView19.decorations.from(field)
|
4737
4784
|
});
|
4738
4785
|
};
|
4739
4786
|
var update = (state, _options) => {
|
4740
|
-
const builder = new
|
4787
|
+
const builder = new RangeSetBuilder3();
|
4741
4788
|
const cursor = state.selection.main.head;
|
4742
4789
|
const tables = [];
|
4743
4790
|
const getTable = () => tables[tables.length - 1];
|
@@ -4745,7 +4792,7 @@ var update = (state, _options) => {
|
|
4745
4792
|
const table2 = getTable();
|
4746
4793
|
return table2.rows?.[table2.rows.length - 1];
|
4747
4794
|
};
|
4748
|
-
|
4795
|
+
syntaxTree7(state).iterate({
|
4749
4796
|
enter: (node) => {
|
4750
4797
|
switch (node.name) {
|
4751
4798
|
case "Table": {
|
@@ -4778,19 +4825,19 @@ var update = (state, _options) => {
|
|
4778
4825
|
tables.forEach((table2) => {
|
4779
4826
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4780
4827
|
if (replace) {
|
4781
|
-
builder.add(table2.from, table2.to,
|
4828
|
+
builder.add(table2.from, table2.to, Decoration7.replace({
|
4782
4829
|
block: true,
|
4783
4830
|
widget: new TableWidget(table2)
|
4784
4831
|
}));
|
4785
4832
|
} else {
|
4786
|
-
builder.add(table2.from, table2.to,
|
4833
|
+
builder.add(table2.from, table2.to, Decoration7.mark({
|
4787
4834
|
class: "cm-table"
|
4788
4835
|
}));
|
4789
4836
|
}
|
4790
4837
|
});
|
4791
4838
|
return builder.finish();
|
4792
4839
|
};
|
4793
|
-
var TableWidget = class extends
|
4840
|
+
var TableWidget = class extends WidgetType5 {
|
4794
4841
|
constructor(_table) {
|
4795
4842
|
super();
|
4796
4843
|
this._table = _table;
|
@@ -4832,14 +4879,14 @@ var Unicode = {
|
|
4832
4879
|
bulletSmall: "\u2219",
|
4833
4880
|
bulletSquare: "\u2B1D"
|
4834
4881
|
};
|
4835
|
-
var HorizontalRuleWidget = class extends
|
4882
|
+
var HorizontalRuleWidget = class extends WidgetType6 {
|
4836
4883
|
toDOM() {
|
4837
4884
|
const el = document.createElement("span");
|
4838
4885
|
el.className = "cm-hr";
|
4839
4886
|
return el;
|
4840
4887
|
}
|
4841
4888
|
};
|
4842
|
-
var LinkButton = class extends
|
4889
|
+
var LinkButton = class extends WidgetType6 {
|
4843
4890
|
constructor(url, render) {
|
4844
4891
|
super();
|
4845
4892
|
this.url = url;
|
@@ -4851,13 +4898,11 @@ var LinkButton = class extends WidgetType5 {
|
|
4851
4898
|
// TODO(burdon): Create icon and link directly without react?
|
4852
4899
|
toDOM(view) {
|
4853
4900
|
const el = document.createElement("span");
|
4854
|
-
this.render(el,
|
4855
|
-
url: this.url
|
4856
|
-
}, view);
|
4901
|
+
this.render(el, this.url);
|
4857
4902
|
return el;
|
4858
4903
|
}
|
4859
4904
|
};
|
4860
|
-
var CheckboxWidget = class extends
|
4905
|
+
var CheckboxWidget = class extends WidgetType6 {
|
4861
4906
|
constructor(_checked) {
|
4862
4907
|
super();
|
4863
4908
|
this._checked = _checked;
|
@@ -4902,7 +4947,7 @@ var CheckboxWidget = class extends WidgetType5 {
|
|
4902
4947
|
return false;
|
4903
4948
|
}
|
4904
4949
|
};
|
4905
|
-
var TextWidget = class extends
|
4950
|
+
var TextWidget = class extends WidgetType6 {
|
4906
4951
|
constructor(text, className) {
|
4907
4952
|
super();
|
4908
4953
|
this.text = text;
|
@@ -4917,29 +4962,29 @@ var TextWidget = class extends WidgetType5 {
|
|
4917
4962
|
return el;
|
4918
4963
|
}
|
4919
4964
|
};
|
4920
|
-
var hide =
|
4921
|
-
var blockQuote =
|
4922
|
-
class:
|
4965
|
+
var hide = Decoration8.replace({});
|
4966
|
+
var blockQuote = Decoration8.line({
|
4967
|
+
class: mx4("cm-blockquote")
|
4923
4968
|
});
|
4924
|
-
var fencedCodeLine =
|
4925
|
-
class:
|
4969
|
+
var fencedCodeLine = Decoration8.line({
|
4970
|
+
class: mx4("cm-code cm-codeblock-line")
|
4926
4971
|
});
|
4927
|
-
var fencedCodeLineFirst =
|
4928
|
-
class:
|
4972
|
+
var fencedCodeLineFirst = Decoration8.line({
|
4973
|
+
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-first")
|
4929
4974
|
});
|
4930
|
-
var fencedCodeLineLast =
|
4931
|
-
class:
|
4975
|
+
var fencedCodeLineLast = Decoration8.line({
|
4976
|
+
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-last")
|
4932
4977
|
});
|
4933
4978
|
var commentBlockLine = fencedCodeLine;
|
4934
4979
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4935
4980
|
var commentBlockLineLast = fencedCodeLineLast;
|
4936
|
-
var horizontalRule =
|
4981
|
+
var horizontalRule = Decoration8.replace({
|
4937
4982
|
widget: new HorizontalRuleWidget()
|
4938
4983
|
});
|
4939
|
-
var checkedTask =
|
4984
|
+
var checkedTask = Decoration8.replace({
|
4940
4985
|
widget: new CheckboxWidget(true)
|
4941
4986
|
});
|
4942
|
-
var uncheckedTask =
|
4987
|
+
var uncheckedTask = Decoration8.replace({
|
4943
4988
|
widget: new CheckboxWidget(false)
|
4944
4989
|
});
|
4945
4990
|
var editingRange = (state, range, focus2) => {
|
@@ -4954,15 +4999,15 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4954
4999
|
"SubscriptMark",
|
4955
5000
|
"SuperscriptMark"
|
4956
5001
|
]);
|
4957
|
-
var
|
4958
|
-
const deco = new
|
4959
|
-
const atomicDeco = new
|
5002
|
+
var buildDecorations3 = (view, options, focus2) => {
|
5003
|
+
const deco = new RangeSetBuilder4();
|
5004
|
+
const atomicDeco = new RangeSetBuilder4();
|
4960
5005
|
const { state } = view;
|
4961
5006
|
const headerLevels = [];
|
4962
5007
|
const getHeaderLevels = (node, level) => {
|
4963
5008
|
invariant4(level > 0, void 0, {
|
4964
5009
|
F: __dxlog_file9,
|
4965
|
-
L:
|
5010
|
+
L: 178,
|
4966
5011
|
S: void 0,
|
4967
5012
|
A: [
|
4968
5013
|
"level > 0",
|
@@ -5001,7 +5046,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5001
5046
|
const getCurrentListLevel = () => {
|
5002
5047
|
invariant4(listLevels.length, void 0, {
|
5003
5048
|
F: __dxlog_file9,
|
5004
|
-
L:
|
5049
|
+
L: 200,
|
5005
5050
|
S: void 0,
|
5006
5051
|
A: [
|
5007
5052
|
"listLevels.length",
|
@@ -5043,7 +5088,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5043
5088
|
} else {
|
5044
5089
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
5045
5090
|
if (num.length) {
|
5046
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5091
|
+
atomicDeco.add(mark.from, mark.from + len, Decoration8.replace({
|
5047
5092
|
widget: new TextWidget(num, theme.heading(level))
|
5048
5093
|
}));
|
5049
5094
|
}
|
@@ -5068,7 +5113,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5068
5113
|
if (node.from === line.to - 1) {
|
5069
5114
|
return false;
|
5070
5115
|
}
|
5071
|
-
deco.add(line.from, line.from,
|
5116
|
+
deco.add(line.from, line.from, Decoration8.line({
|
5072
5117
|
class: "cm-list-item",
|
5073
5118
|
attributes: {
|
5074
5119
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -5085,7 +5130,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5085
5130
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
5086
5131
|
const line = state.doc.lineAt(node.from);
|
5087
5132
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
5088
|
-
atomicDeco.add(line.from, to,
|
5133
|
+
atomicDeco.add(line.from, to, Decoration8.replace({
|
5089
5134
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
5090
5135
|
}));
|
5091
5136
|
break;
|
@@ -5172,7 +5217,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5172
5217
|
if (!editing) {
|
5173
5218
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5174
5219
|
}
|
5175
|
-
deco.add(marks[0].to, marks[1].from,
|
5220
|
+
deco.add(marks[0].to, marks[1].from, Decoration8.mark({
|
5176
5221
|
tagName: "a",
|
5177
5222
|
attributes: {
|
5178
5223
|
class: "cm-link",
|
@@ -5182,7 +5227,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5182
5227
|
}
|
5183
5228
|
}));
|
5184
5229
|
if (!editing) {
|
5185
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5230
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? Decoration8.replace({
|
5186
5231
|
widget: new LinkButton(url, options.renderLinkButton)
|
5187
5232
|
}) : hide);
|
5188
5233
|
}
|
@@ -5216,7 +5261,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5216
5261
|
}
|
5217
5262
|
}
|
5218
5263
|
};
|
5219
|
-
const tree =
|
5264
|
+
const tree = syntaxTree8(state);
|
5220
5265
|
if (options.numberedHeadings?.from === void 0) {
|
5221
5266
|
for (const { from, to } of view.visibleRanges) {
|
5222
5267
|
tree.iterate({
|
@@ -5242,11 +5287,11 @@ var decorateMarkdown = (options = {}) => {
|
|
5242
5287
|
return [
|
5243
5288
|
ViewPlugin7.fromClass(class {
|
5244
5289
|
constructor(view) {
|
5245
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5290
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(view, options, view.hasFocus));
|
5246
5291
|
}
|
5247
5292
|
update(update2) {
|
5248
5293
|
if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
|
5249
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5294
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(update2.view, options, update2.view.hasFocus));
|
5250
5295
|
this.clearUpdate();
|
5251
5296
|
} else if (update2.selectionSet) {
|
5252
5297
|
this.scheduleUpdate(update2.view);
|
@@ -5272,9 +5317,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5272
5317
|
}
|
5273
5318
|
}, {
|
5274
5319
|
provide: (plugin) => [
|
5275
|
-
|
5276
|
-
|
5277
|
-
|
5320
|
+
EditorView20.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5321
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5322
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration8.none)
|
5278
5323
|
]
|
5279
5324
|
}),
|
5280
5325
|
image(),
|
@@ -5285,12 +5330,12 @@ var decorateMarkdown = (options = {}) => {
|
|
5285
5330
|
};
|
5286
5331
|
|
5287
5332
|
// packages/ui/react-ui-editor/src/extensions/markdown/link.ts
|
5288
|
-
import { syntaxTree as
|
5333
|
+
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5289
5334
|
import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
|
5290
5335
|
import { tooltipContent } from "@dxos/react-ui-theme";
|
5291
|
-
var linkTooltip = (
|
5336
|
+
var linkTooltip = (render) => {
|
5292
5337
|
return hoverTooltip2((view, pos, side) => {
|
5293
|
-
const syntax =
|
5338
|
+
const syntax = syntaxTree9(view.state).resolveInner(pos, side);
|
5294
5339
|
let link = null;
|
5295
5340
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
5296
5341
|
link = node.name === "Link" ? node : null;
|
@@ -5303,14 +5348,11 @@ var linkTooltip = (renderTooltip) => {
|
|
5303
5348
|
return {
|
5304
5349
|
pos: link.from,
|
5305
5350
|
end: link.to,
|
5306
|
-
|
5307
|
-
// above: true,
|
5351
|
+
above: true,
|
5308
5352
|
create: () => {
|
5309
5353
|
const el = document.createElement("div");
|
5310
|
-
el.className = tooltipContent({});
|
5311
|
-
|
5312
|
-
url: urlText
|
5313
|
-
}, view);
|
5354
|
+
el.className = tooltipContent({}, "pli-2 plb-1");
|
5355
|
+
render(el, urlText);
|
5314
5356
|
return {
|
5315
5357
|
dom: el,
|
5316
5358
|
offset: {
|
@@ -5320,9 +5362,6 @@ var linkTooltip = (renderTooltip) => {
|
|
5320
5362
|
};
|
5321
5363
|
}
|
5322
5364
|
};
|
5323
|
-
}, {
|
5324
|
-
// NOTE: 0 = default of 300ms.
|
5325
|
-
hoverTime: 1
|
5326
5365
|
});
|
5327
5366
|
};
|
5328
5367
|
|
@@ -5410,165 +5449,6 @@ var InputModeExtensions = {
|
|
5410
5449
|
]
|
5411
5450
|
};
|
5412
5451
|
|
5413
|
-
// packages/ui/react-ui-editor/src/extensions/preview/preview.ts
|
5414
|
-
import "@dxos/lit-ui/dx-ref-tag.pcss";
|
5415
|
-
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5416
|
-
import { RangeSetBuilder as RangeSetBuilder4, StateField as StateField10 } from "@codemirror/state";
|
5417
|
-
import { Decoration as Decoration8, EditorView as EditorView20, WidgetType as WidgetType6 } from "@codemirror/view";
|
5418
|
-
var preview = (options = {}) => {
|
5419
|
-
return [
|
5420
|
-
// NOTE: Atomic block decorations must be created from a state field, now a widget, otherwise it results in the following error:
|
5421
|
-
// "Block decorations may not be specified via plugins"
|
5422
|
-
StateField10.define({
|
5423
|
-
create: (state) => buildDecorations3(state, options),
|
5424
|
-
update: (_, tr) => buildDecorations3(tr.state, options),
|
5425
|
-
provide: (field) => [
|
5426
|
-
EditorView20.decorations.from(field),
|
5427
|
-
EditorView20.atomicRanges.of((view) => view.state.field(field))
|
5428
|
-
]
|
5429
|
-
}),
|
5430
|
-
EditorView20.theme({
|
5431
|
-
".cm-preview-block": {
|
5432
|
-
marginLeft: "-1rem",
|
5433
|
-
marginRight: "-1rem",
|
5434
|
-
padding: "1rem",
|
5435
|
-
borderRadius: "0.5rem",
|
5436
|
-
background: "var(--dx-modalSurface)",
|
5437
|
-
border: "1px solid var(--dx-separator)"
|
5438
|
-
}
|
5439
|
-
})
|
5440
|
-
];
|
5441
|
-
};
|
5442
|
-
var getLinkRef = (state, node) => {
|
5443
|
-
const mark = node.getChild("LinkMark");
|
5444
|
-
const label = node.getChild("LinkLabel");
|
5445
|
-
if (mark && label) {
|
5446
|
-
const ref = state.sliceDoc(label.from + 1, label.to - 1);
|
5447
|
-
return {
|
5448
|
-
suggest: ref.startsWith("?"),
|
5449
|
-
block: state.sliceDoc(mark.from, mark.from + 1) === "!",
|
5450
|
-
label: state.sliceDoc(mark.to, label.from - 1),
|
5451
|
-
ref: ref.startsWith("?") ? ref.slice(1) : ref
|
5452
|
-
};
|
5453
|
-
}
|
5454
|
-
};
|
5455
|
-
var buildDecorations3 = (state, options) => {
|
5456
|
-
const builder = new RangeSetBuilder4();
|
5457
|
-
syntaxTree9(state).iterate({
|
5458
|
-
enter: (node) => {
|
5459
|
-
switch (node.name) {
|
5460
|
-
//
|
5461
|
-
// Decoration.
|
5462
|
-
// [Label][dxn:echo:123]
|
5463
|
-
//
|
5464
|
-
case "Link": {
|
5465
|
-
const link = getLinkRef(state, node.node);
|
5466
|
-
if (link) {
|
5467
|
-
builder.add(node.from, node.to, Decoration8.replace({
|
5468
|
-
widget: new PreviewInlineWidget(options, link)
|
5469
|
-
}));
|
5470
|
-
}
|
5471
|
-
break;
|
5472
|
-
}
|
5473
|
-
//
|
5474
|
-
// Block widget.
|
5475
|
-
// ![Label][dxn:echo:123]
|
5476
|
-
//
|
5477
|
-
case "Image": {
|
5478
|
-
const link = getLinkRef(state, node.node);
|
5479
|
-
if (options.renderBlock && link) {
|
5480
|
-
builder.add(node.from, node.to, Decoration8.replace({
|
5481
|
-
block: true,
|
5482
|
-
// atomic: true,
|
5483
|
-
widget: new PreviewBlockWidget(options, link)
|
5484
|
-
}));
|
5485
|
-
}
|
5486
|
-
break;
|
5487
|
-
}
|
5488
|
-
}
|
5489
|
-
}
|
5490
|
-
});
|
5491
|
-
return builder.finish();
|
5492
|
-
};
|
5493
|
-
var PreviewInlineWidget = class extends WidgetType6 {
|
5494
|
-
constructor(_options, _link) {
|
5495
|
-
super();
|
5496
|
-
this._options = _options;
|
5497
|
-
this._link = _link;
|
5498
|
-
}
|
5499
|
-
// override ignoreEvent() {
|
5500
|
-
// return false;
|
5501
|
-
// }
|
5502
|
-
eq(other) {
|
5503
|
-
return this._link.ref === other._link.ref && this._link.label === other._link.label;
|
5504
|
-
}
|
5505
|
-
toDOM(view) {
|
5506
|
-
const root = document.createElement("dx-ref-tag");
|
5507
|
-
root.textContent = this._link.label;
|
5508
|
-
root.setAttribute("ref", this._link.ref);
|
5509
|
-
return root;
|
5510
|
-
}
|
5511
|
-
};
|
5512
|
-
var PreviewBlockWidget = class extends WidgetType6 {
|
5513
|
-
constructor(_options, _link) {
|
5514
|
-
super();
|
5515
|
-
this._options = _options;
|
5516
|
-
this._link = _link;
|
5517
|
-
}
|
5518
|
-
// override ignoreEvent() {
|
5519
|
-
// return true;
|
5520
|
-
// }
|
5521
|
-
eq(other) {
|
5522
|
-
return this._link.ref === other._link.ref;
|
5523
|
-
}
|
5524
|
-
toDOM(view) {
|
5525
|
-
const root = document.createElement("div");
|
5526
|
-
root.classList.add("cm-preview-block");
|
5527
|
-
const handleAction = (action) => {
|
5528
|
-
const pos = view.posAtDOM(root);
|
5529
|
-
const node = syntaxTree9(view.state).resolve(pos + 1).node.parent;
|
5530
|
-
if (!node) {
|
5531
|
-
return;
|
5532
|
-
}
|
5533
|
-
const link = getLinkRef(view.state, node);
|
5534
|
-
if (link?.ref !== action.link.ref) {
|
5535
|
-
return;
|
5536
|
-
}
|
5537
|
-
switch (action.type) {
|
5538
|
-
// TODO(burdon): Should we dispatch to the view or mutate the document? (i.e., handle externally?)
|
5539
|
-
// Insert ref text.
|
5540
|
-
case "insert": {
|
5541
|
-
view.dispatch({
|
5542
|
-
changes: {
|
5543
|
-
from: node.from,
|
5544
|
-
to: node.to,
|
5545
|
-
insert: action.target.text
|
5546
|
-
}
|
5547
|
-
});
|
5548
|
-
break;
|
5549
|
-
}
|
5550
|
-
// Remove ref.
|
5551
|
-
case "delete": {
|
5552
|
-
view.dispatch({
|
5553
|
-
changes: {
|
5554
|
-
from: node.from,
|
5555
|
-
to: node.to
|
5556
|
-
}
|
5557
|
-
});
|
5558
|
-
break;
|
5559
|
-
}
|
5560
|
-
}
|
5561
|
-
};
|
5562
|
-
this._options.renderBlock(root, {
|
5563
|
-
readonly: view.state.readOnly,
|
5564
|
-
link: this._link,
|
5565
|
-
onAction: handleAction,
|
5566
|
-
onLookup: this._options.onLookup
|
5567
|
-
}, view);
|
5568
|
-
return root;
|
5569
|
-
}
|
5570
|
-
};
|
5571
|
-
|
5572
5452
|
// packages/ui/react-ui-editor/src/extensions/typewriter.ts
|
5573
5453
|
import { keymap as keymap10 } from "@codemirror/view";
|
5574
5454
|
var defaultItems = [
|
@@ -5644,7 +5524,7 @@ import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
|
5644
5524
|
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5645
5525
|
var instanceCount = 0;
|
5646
5526
|
var useTextEditor = (props = {}, deps = []) => {
|
5647
|
-
const { id,
|
5527
|
+
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo4(() => getProviderValue(props), deps ?? []);
|
5648
5528
|
const [instanceId] = useState(() => `text-editor-${++instanceCount}`);
|
5649
5529
|
const [view, setView] = useState();
|
5650
5530
|
const parentRef = useRef(null);
|
@@ -5657,7 +5537,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5657
5537
|
doc: initialValue?.length ?? 0
|
5658
5538
|
}, {
|
5659
5539
|
F: __dxlog_file11,
|
5660
|
-
L:
|
5540
|
+
L: 75,
|
5661
5541
|
S: void 0,
|
5662
5542
|
C: (f, a) => f(...a)
|
5663
5543
|
});
|
@@ -5674,7 +5554,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5674
5554
|
};
|
5675
5555
|
}
|
5676
5556
|
const state = EditorState2.create({
|
5677
|
-
doc:
|
5557
|
+
doc: initialValue,
|
5678
5558
|
// selection: initialSelection,
|
5679
5559
|
extensions: [
|
5680
5560
|
id && documentId.of(id),
|
@@ -5683,7 +5563,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5683
5563
|
EditorView21.exceptionSink.of((err) => {
|
5684
5564
|
log7.catch(err, void 0, {
|
5685
5565
|
F: __dxlog_file11,
|
5686
|
-
L:
|
5566
|
+
L: 97,
|
5687
5567
|
S: void 0,
|
5688
5568
|
C: (f, a) => f(...a)
|
5689
5569
|
});
|
@@ -5715,7 +5595,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5715
5595
|
id
|
5716
5596
|
}, {
|
5717
5597
|
F: __dxlog_file11,
|
5718
|
-
L:
|
5598
|
+
L: 134,
|
5719
5599
|
S: void 0,
|
5720
5600
|
C: (f, a) => f(...a)
|
5721
5601
|
});
|
@@ -5732,7 +5612,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5732
5612
|
selection
|
5733
5613
|
}, {
|
5734
5614
|
F: __dxlog_file11,
|
5735
|
-
L:
|
5615
|
+
L: 143,
|
5736
5616
|
S: void 0,
|
5737
5617
|
C: (f, a) => f(...a)
|
5738
5618
|
});
|
@@ -5814,10 +5694,7 @@ export {
|
|
5814
5694
|
blast,
|
5815
5695
|
callbackWrapper,
|
5816
5696
|
clientRectsFor,
|
5817
|
-
closeCommand,
|
5818
|
-
closeEffect,
|
5819
5697
|
command,
|
5820
|
-
commandKeyBindings,
|
5821
5698
|
comments,
|
5822
5699
|
commentsState,
|
5823
5700
|
convertTreeToJson,
|
@@ -5831,7 +5708,6 @@ export {
|
|
5831
5708
|
createElement,
|
5832
5709
|
createExternalCommentSync,
|
5833
5710
|
createMarkdownExtensions,
|
5834
|
-
createRenderer,
|
5835
5711
|
createThemeExtensions,
|
5836
5712
|
debugDispatcher,
|
5837
5713
|
debugNodeLogger,
|
@@ -5845,7 +5721,6 @@ export {
|
|
5845
5721
|
editorGutter,
|
5846
5722
|
editorInputMode,
|
5847
5723
|
editorMonospace,
|
5848
|
-
editorWidth,
|
5849
5724
|
editorWithToolbarLayout,
|
5850
5725
|
flattenRect,
|
5851
5726
|
focus,
|
@@ -5864,11 +5739,8 @@ export {
|
|
5864
5739
|
markdownTags,
|
5865
5740
|
markdownTagsExtensions,
|
5866
5741
|
mention,
|
5867
|
-
openCommand,
|
5868
|
-
openEffect,
|
5869
5742
|
overlap,
|
5870
5743
|
preventNewline,
|
5871
|
-
preview,
|
5872
5744
|
processEditorPayload,
|
5873
5745
|
removeBlockquote,
|
5874
5746
|
removeCodeblock,
|
@@ -5886,7 +5758,7 @@ export {
|
|
5886
5758
|
setStyle,
|
5887
5759
|
singleValueFacet,
|
5888
5760
|
stackItemContentEditorClassNames,
|
5889
|
-
stackItemContentToolbarClassNames,
|
5761
|
+
stackItemContentToolbarClassNames2 as stackItemContentToolbarClassNames,
|
5890
5762
|
table,
|
5891
5763
|
tags2 as tags,
|
5892
5764
|
textRange,
|