@dxos/plugin-markdown 0.8.2 → 0.8.3-main.7f5a14c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{MarkdownContainer-5IEINNQB.mjs → MarkdownContainer-3KTC7Q4C.mjs} +132 -18
- package/dist/lib/browser/MarkdownContainer-3KTC7Q4C.mjs.map +7 -0
- package/dist/lib/browser/{MarkdownPreview-YW5CS3ID.mjs → MarkdownPreview-F4PYFW5L.mjs} +15 -22
- package/dist/lib/browser/MarkdownPreview-F4PYFW5L.mjs.map +7 -0
- package/dist/lib/browser/{anchor-sort-VS4OZVPP.mjs → anchor-sort-BMAN2ABT.mjs} +4 -4
- package/dist/lib/browser/anchor-sort-BMAN2ABT.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-V6RLEHVY.mjs → app-graph-serializer-FLQI6GFL.mjs} +3 -3
- package/dist/lib/browser/{artifact-definition-5NAODQLG.mjs → artifact-definition-FQ2R6KPT.mjs} +6 -6
- package/dist/lib/browser/artifact-definition-FQ2R6KPT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-C5RABVIX.mjs → chunk-CX5GYZYO.mjs} +2 -2
- package/dist/lib/browser/{chunk-ACAID3XF.mjs → chunk-LCMXUTQB.mjs} +7 -7
- package/dist/lib/browser/{chunk-77NGW7EO.mjs → chunk-LXSRQPEP.mjs} +9 -9
- package/dist/lib/browser/chunk-LXSRQPEP.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ECSM56YC.mjs → chunk-N2D26K6W.mjs} +4 -5
- package/dist/lib/browser/chunk-N2D26K6W.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +7 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-4GDYST4Y.mjs → intent-resolver-6ZOABX2J.mjs} +6 -7
- package/dist/lib/browser/intent-resolver-6ZOABX2J.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-QE4SKXBT.mjs → react-surface-RJQKYJJQ.mjs} +8 -8
- package/dist/lib/browser/react-surface-RJQKYJJQ.mjs.map +7 -0
- package/dist/lib/browser/{settings-W5CK4PXP.mjs → settings-PLH54VC7.mjs} +4 -4
- package/dist/lib/browser/settings-PLH54VC7.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{MarkdownContainer-LSNNPNRB.cjs → MarkdownContainer-NG4H6AZJ.cjs} +181 -67
- package/dist/lib/node/MarkdownContainer-NG4H6AZJ.cjs.map +7 -0
- package/dist/lib/node/{MarkdownPreview-G34HSQEB.cjs → MarkdownPreview-GCJJCXY6.cjs} +24 -31
- package/dist/lib/node/MarkdownPreview-GCJJCXY6.cjs.map +7 -0
- package/dist/lib/node/{anchor-sort-NHVF23EU.cjs → anchor-sort-V3T4SFFI.cjs} +12 -12
- package/dist/lib/node/anchor-sort-V3T4SFFI.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-CLALIYN3.cjs → app-graph-serializer-BZPM7HHJ.cjs} +9 -9
- package/dist/lib/node/{artifact-definition-VEAHK7BX.cjs → artifact-definition-U27MH5SC.cjs} +16 -16
- package/dist/lib/node/artifact-definition-U27MH5SC.cjs.map +7 -0
- package/dist/lib/node/{chunk-RQS4KBMG.cjs → chunk-3HHV4MM6.cjs} +6 -7
- package/dist/lib/node/chunk-3HHV4MM6.cjs.map +7 -0
- package/dist/lib/node/{chunk-C4HR7UXE.cjs → chunk-4DYNEQG3.cjs} +10 -10
- package/dist/lib/node/{chunk-G7RBJX22.cjs → chunk-CJLYFGPI.cjs} +12 -12
- package/dist/lib/node/chunk-CJLYFGPI.cjs.map +7 -0
- package/dist/lib/node/{chunk-ZDTL47I7.cjs → chunk-SYEFGLXN.cjs} +6 -6
- package/dist/lib/node/index.cjs +26 -27
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-AUZVK3NZ.cjs → intent-resolver-OEFLRNEJ.cjs} +14 -15
- package/dist/lib/node/intent-resolver-OEFLRNEJ.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-WJZTEBYO.cjs → react-surface-5RKEWAXS.cjs} +15 -15
- package/dist/lib/node/react-surface-5RKEWAXS.cjs.map +7 -0
- package/dist/lib/node/{settings-IRKU3WPM.cjs → settings-E3NUTXJ4.cjs} +7 -7
- package/dist/lib/node/settings-E3NUTXJ4.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +7 -7
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{MarkdownContainer-UZSLXMWO.mjs → MarkdownContainer-DZPXCA6J.mjs} +132 -18
- package/dist/lib/node-esm/MarkdownContainer-DZPXCA6J.mjs.map +7 -0
- package/dist/lib/node-esm/{MarkdownPreview-TCV7BI32.mjs → MarkdownPreview-KFDRV4GC.mjs} +15 -22
- package/dist/lib/node-esm/MarkdownPreview-KFDRV4GC.mjs.map +7 -0
- package/dist/lib/node-esm/{anchor-sort-G2HLCYFK.mjs → anchor-sort-BXL7BE67.mjs} +4 -4
- package/dist/lib/node-esm/anchor-sort-BXL7BE67.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-C3RNTQGM.mjs → app-graph-serializer-EBH54X6Z.mjs} +3 -3
- package/dist/lib/node-esm/{artifact-definition-7TIJW2CO.mjs → artifact-definition-NQOHB6S5.mjs} +6 -6
- package/dist/lib/node-esm/artifact-definition-NQOHB6S5.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6RPARLIK.mjs → chunk-K26TX5V4.mjs} +9 -9
- package/dist/lib/node-esm/chunk-K26TX5V4.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TCFJNUAE.mjs → chunk-Q7WUBLL3.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-NCMPVEXO.mjs → chunk-T2Y2BT53.mjs} +4 -5
- package/dist/lib/node-esm/chunk-T2Y2BT53.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-EIUTPXGL.mjs → chunk-WANCCPU7.mjs} +7 -7
- package/dist/lib/node-esm/index.mjs +7 -8
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-FTNXUNI2.mjs → intent-resolver-CLMSVF2K.mjs} +6 -7
- package/dist/lib/node-esm/intent-resolver-CLMSVF2K.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-XNM3YDFB.mjs → react-surface-Z3DX37JV.mjs} +8 -8
- package/dist/lib/node-esm/react-surface-Z3DX37JV.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-MK7D7LHQ.mjs → settings-SIY33P3F.mjs} +4 -4
- package/dist/lib/node-esm/settings-SIY33P3F.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +4 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +1 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +2 -6
- package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +38 -39
- package/src/MarkdownPlugin.tsx +3 -5
- package/src/capabilities/anchor-sort.ts +2 -2
- package/src/capabilities/artifact-definition.ts +3 -3
- package/src/capabilities/intent-resolver.ts +4 -5
- package/src/capabilities/react-surface.tsx +4 -4
- package/src/capabilities/settings.ts +2 -2
- package/src/components/MarkdownContainer.tsx +61 -7
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +3 -3
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +196 -144
- package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +8 -7
- package/src/components/MarkdownPreview/MarkdownPreview.tsx +14 -28
- package/src/components/Suggestions.stories.tsx +8 -9
- package/src/components/Toolbar.stories.tsx +3 -3
- package/src/types/schema.ts +2 -3
- package/src/util.tsx +5 -7
- package/dist/lib/browser/MarkdownContainer-5IEINNQB.mjs.map +0 -7
- package/dist/lib/browser/MarkdownPreview-YW5CS3ID.mjs.map +0 -7
- package/dist/lib/browser/anchor-sort-VS4OZVPP.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-5NAODQLG.mjs.map +0 -7
- package/dist/lib/browser/chunk-77NGW7EO.mjs.map +0 -7
- package/dist/lib/browser/chunk-ECSM56YC.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-4GDYST4Y.mjs.map +0 -7
- package/dist/lib/browser/react-surface-QE4SKXBT.mjs.map +0 -7
- package/dist/lib/browser/settings-W5CK4PXP.mjs.map +0 -7
- package/dist/lib/node/MarkdownContainer-LSNNPNRB.cjs.map +0 -7
- package/dist/lib/node/MarkdownPreview-G34HSQEB.cjs.map +0 -7
- package/dist/lib/node/anchor-sort-NHVF23EU.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-VEAHK7BX.cjs.map +0 -7
- package/dist/lib/node/chunk-G7RBJX22.cjs.map +0 -7
- package/dist/lib/node/chunk-RQS4KBMG.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-AUZVK3NZ.cjs.map +0 -7
- package/dist/lib/node/react-surface-WJZTEBYO.cjs.map +0 -7
- package/dist/lib/node/settings-IRKU3WPM.cjs.map +0 -7
- package/dist/lib/node-esm/MarkdownContainer-UZSLXMWO.mjs.map +0 -7
- package/dist/lib/node-esm/MarkdownPreview-TCV7BI32.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-G2HLCYFK.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-7TIJW2CO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6RPARLIK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NCMPVEXO.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-FTNXUNI2.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-XNM3YDFB.mjs.map +0 -7
- package/dist/lib/node-esm/settings-MK7D7LHQ.mjs.map +0 -7
- /package/dist/lib/browser/{app-graph-serializer-V6RLEHVY.mjs.map → app-graph-serializer-FLQI6GFL.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-C5RABVIX.mjs.map → chunk-CX5GYZYO.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-ACAID3XF.mjs.map → chunk-LCMXUTQB.mjs.map} +0 -0
- /package/dist/lib/node/{app-graph-serializer-CLALIYN3.cjs.map → app-graph-serializer-BZPM7HHJ.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-C4HR7UXE.cjs.map → chunk-4DYNEQG3.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-ZDTL47I7.cjs.map → chunk-SYEFGLXN.cjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-serializer-C3RNTQGM.mjs.map → app-graph-serializer-EBH54X6Z.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-TCFJNUAE.mjs.map → chunk-Q7WUBLL3.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-EIUTPXGL.mjs.map → chunk-WANCCPU7.mjs.map} +0 -0
|
@@ -26,30 +26,33 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var MarkdownContainer_NG4H6AZJ_exports = {};
|
|
30
|
+
__export(MarkdownContainer_NG4H6AZJ_exports, {
|
|
31
31
|
DocumentEditor: () => DocumentEditor,
|
|
32
32
|
default: () => MarkdownContainer_default
|
|
33
33
|
});
|
|
34
|
-
module.exports = __toCommonJS(
|
|
35
|
-
var
|
|
34
|
+
module.exports = __toCommonJS(MarkdownContainer_NG4H6AZJ_exports);
|
|
35
|
+
var import_chunk_4DYNEQG3 = require("./chunk-4DYNEQG3.cjs");
|
|
36
36
|
var import_chunk_IFYSBQE5 = require("./chunk-IFYSBQE5.cjs");
|
|
37
|
-
var
|
|
38
|
-
var
|
|
37
|
+
var import_chunk_CJLYFGPI = require("./chunk-CJLYFGPI.cjs");
|
|
38
|
+
var import_chunk_3HHV4MM6 = require("./chunk-3HHV4MM6.cjs");
|
|
39
39
|
var import_chunk_ZU5OIHCY = require("./chunk-ZU5OIHCY.cjs");
|
|
40
40
|
var import_tracking = require("@preact-signals/safe-react/tracking");
|
|
41
41
|
var import_rx_react = require("@effect-rx/rx-react");
|
|
42
42
|
var import_react = __toESM(require("react"));
|
|
43
43
|
var import_app_framework = require("@dxos/app-framework");
|
|
44
|
-
var
|
|
45
|
-
var
|
|
44
|
+
var import_echo = require("@dxos/echo");
|
|
45
|
+
var import_plugin_space = require("@dxos/plugin-space");
|
|
46
|
+
var import_echo2 = require("@dxos/react-client/echo");
|
|
47
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
48
|
+
var import_react_ui_editor = require("@dxos/react-ui-editor");
|
|
46
49
|
var import_schema = require("@dxos/schema");
|
|
47
50
|
var import_tracking2 = require("@preact-signals/safe-react/tracking");
|
|
48
51
|
var import_react2 = __toESM(require("react"));
|
|
49
52
|
var import_react_dropzone = require("react-dropzone");
|
|
50
53
|
var import_invariant = require("@dxos/invariant");
|
|
51
|
-
var
|
|
52
|
-
var
|
|
54
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
55
|
+
var import_react_ui_editor2 = require("@dxos/react-ui-editor");
|
|
53
56
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
54
57
|
var import_util = require("@dxos/util");
|
|
55
58
|
var import_view = require("@codemirror/view");
|
|
@@ -57,15 +60,15 @@ var import_effect = require("effect");
|
|
|
57
60
|
var import_react3 = require("react");
|
|
58
61
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
59
62
|
var import_invariant2 = require("@dxos/invariant");
|
|
60
|
-
var
|
|
63
|
+
var import_react_ui_editor3 = require("@dxos/react-ui-editor");
|
|
61
64
|
var import_react4 = __toESM(require("react"));
|
|
62
65
|
var import_client = require("react-dom/client");
|
|
63
66
|
var import_app_framework3 = require("@dxos/app-framework");
|
|
64
67
|
var import_invariant3 = require("@dxos/invariant");
|
|
65
|
-
var
|
|
68
|
+
var import_echo3 = require("@dxos/react-client/echo");
|
|
66
69
|
var import_halo = require("@dxos/react-client/halo");
|
|
67
|
-
var
|
|
68
|
-
var
|
|
70
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
|
71
|
+
var import_react_ui_editor4 = require("@dxos/react-ui-editor");
|
|
69
72
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
70
73
|
var import_util2 = require("@dxos/util");
|
|
71
74
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/hooks/useSelectCurrentThread.tsx";
|
|
@@ -89,7 +92,7 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
89
92
|
"'Editor view is not defined.'"
|
|
90
93
|
]
|
|
91
94
|
});
|
|
92
|
-
const range =
|
|
95
|
+
const range = import_react_ui_editor3.Cursor.getRangeFromCursor(editorView.state, cursor);
|
|
93
96
|
if (range) {
|
|
94
97
|
const selection = editorView.state.selection.main.from !== range.from ? {
|
|
95
98
|
anchor: range.from
|
|
@@ -102,7 +105,7 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
102
105
|
})
|
|
103
106
|
];
|
|
104
107
|
if (selection) {
|
|
105
|
-
effects.push(
|
|
108
|
+
effects.push(import_react_ui_editor3.setSelection.of({
|
|
106
109
|
current: documentId2
|
|
107
110
|
}));
|
|
108
111
|
}
|
|
@@ -121,15 +124,67 @@ var useSelectCurrentThread = (editorView, documentId2) => {
|
|
|
121
124
|
(0, import_app_framework2.useIntentResolver)(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN, scrollIntoViewResolver);
|
|
122
125
|
};
|
|
123
126
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdown/src/components/MarkdownEditor/MarkdownEditor.tsx";
|
|
124
|
-
var MarkdownEditor = ({
|
|
127
|
+
var MarkdownEditor = ({ extensions: _extensions, slashCommandGroups, onLinkQuery, ...props }) => {
|
|
125
128
|
var _effect = (0, import_tracking2.useSignals)();
|
|
126
129
|
try {
|
|
127
|
-
const { t } = (0,
|
|
128
|
-
const
|
|
129
|
-
const
|
|
130
|
+
const { t } = (0, import_react_ui2.useTranslation)();
|
|
131
|
+
const viewRef = (0, import_react2.useRef)();
|
|
132
|
+
const getGroups = (0, import_react2.useCallback)((trigger, query) => {
|
|
133
|
+
switch (trigger) {
|
|
134
|
+
case "@":
|
|
135
|
+
return onLinkQuery?.(query) ?? [];
|
|
136
|
+
case "/":
|
|
137
|
+
default:
|
|
138
|
+
return (0, import_react_ui_editor2.filterItems)([
|
|
139
|
+
import_react_ui_editor2.coreSlashCommands,
|
|
140
|
+
import_react_ui_editor2.linkSlashCommands,
|
|
141
|
+
...slashCommandGroups ?? []
|
|
142
|
+
], (item) => query ? (0, import_react_ui2.toLocalizedString)(item.label, t).toLowerCase().includes(query.toLowerCase()) : true);
|
|
143
|
+
}
|
|
144
|
+
}, [
|
|
145
|
+
onLinkQuery,
|
|
146
|
+
slashCommandGroups
|
|
147
|
+
]);
|
|
148
|
+
const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = (0, import_react_ui_editor2.useCommandMenu)({
|
|
149
|
+
viewRef,
|
|
150
|
+
getGroups,
|
|
151
|
+
trigger: onLinkQuery ? [
|
|
152
|
+
"/",
|
|
153
|
+
"@"
|
|
154
|
+
] : "/"
|
|
155
|
+
});
|
|
156
|
+
const extensions = (0, import_react2.useMemo)(() => [
|
|
157
|
+
_extensions,
|
|
158
|
+
commandMenu
|
|
159
|
+
].filter(import_util.isNotFalsy), [
|
|
160
|
+
_extensions,
|
|
161
|
+
commandMenu
|
|
162
|
+
]);
|
|
163
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_editor2.RefPopover, {
|
|
164
|
+
modal: false,
|
|
165
|
+
...refPopoverProps
|
|
166
|
+
}, /* @__PURE__ */ import_react2.default.createElement(MarkdownEditorImpl, {
|
|
167
|
+
ref: viewRef,
|
|
168
|
+
...props,
|
|
169
|
+
extensions
|
|
170
|
+
}), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_editor2.CommandMenu, {
|
|
171
|
+
groups: groupsRef.current,
|
|
172
|
+
currentItem,
|
|
173
|
+
onSelect
|
|
174
|
+
}));
|
|
175
|
+
} finally {
|
|
176
|
+
_effect.f();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
var MarkdownEditorImpl = /* @__PURE__ */ (0, import_react2.forwardRef)(({ id, role = "article", initialValue, extensions, extensionProviders, scrollPastEnd, toolbar, customActions, viewMode, editorStateStore, onFileUpload, onViewModeChange }, forwardedRef) => {
|
|
180
|
+
var _effect = (0, import_tracking2.useSignals)();
|
|
181
|
+
try {
|
|
182
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_ZU5OIHCY.MARKDOWN_PLUGIN);
|
|
183
|
+
const { themeMode } = (0, import_react_ui2.useThemeContext)();
|
|
184
|
+
const toolbarState = (0, import_react_ui_editor2.useEditorToolbarState)({
|
|
130
185
|
viewMode
|
|
131
186
|
});
|
|
132
|
-
const formattingObserver = (0,
|
|
187
|
+
const formattingObserver = (0, import_react_ui_editor2.useFormattingState)(toolbarState);
|
|
133
188
|
const { scrollTo, selection } = (0, import_react2.useMemo)(() => editorStateStore?.getState(id) ?? {}, [
|
|
134
189
|
id
|
|
135
190
|
]);
|
|
@@ -140,31 +195,31 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
140
195
|
const file = files[0];
|
|
141
196
|
const info = file && onFileUpload ? await onFileUpload(file) : void 0;
|
|
142
197
|
if (info) {
|
|
143
|
-
(0,
|
|
198
|
+
(0, import_react_ui_editor2.processEditorPayload)(view, {
|
|
144
199
|
type: "image",
|
|
145
200
|
data: info.url
|
|
146
201
|
});
|
|
147
202
|
}
|
|
148
203
|
};
|
|
149
|
-
const { parentRef, view: editorView, focusAttributes } = (0,
|
|
204
|
+
const { parentRef, view: editorView, focusAttributes } = (0, import_react_ui_editor2.useTextEditor)(() => ({
|
|
150
205
|
initialValue,
|
|
151
206
|
extensions: [
|
|
152
207
|
formattingObserver,
|
|
153
|
-
(0,
|
|
208
|
+
(0, import_react_ui_editor2.createBasicExtensions)({
|
|
154
209
|
readOnly: viewMode === "readonly",
|
|
155
210
|
placeholder: t("editor placeholder"),
|
|
156
211
|
scrollPastEnd: role === "section" ? false : scrollPastEnd
|
|
157
212
|
}),
|
|
158
|
-
(0,
|
|
213
|
+
(0, import_react_ui_editor2.createMarkdownExtensions)({
|
|
159
214
|
themeMode
|
|
160
215
|
}),
|
|
161
|
-
(0,
|
|
216
|
+
(0, import_react_ui_editor2.createThemeExtensions)({
|
|
162
217
|
themeMode,
|
|
163
218
|
syntaxHighlighting: true,
|
|
164
|
-
slots:
|
|
219
|
+
slots: import_react_ui_editor2.editorSlots
|
|
165
220
|
}),
|
|
166
|
-
|
|
167
|
-
role !== "section" && onFileUpload && (0,
|
|
221
|
+
import_react_ui_editor2.editorGutter,
|
|
222
|
+
role !== "section" && onFileUpload && (0, import_react_ui_editor2.dropFile)({
|
|
168
223
|
onDrop: handleDrop
|
|
169
224
|
}),
|
|
170
225
|
providerExtensions,
|
|
@@ -186,6 +241,9 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
186
241
|
extensions,
|
|
187
242
|
providerExtensions
|
|
188
243
|
]);
|
|
244
|
+
(0, import_react2.useImperativeHandle)(forwardedRef, () => editorView, [
|
|
245
|
+
editorView
|
|
246
|
+
]);
|
|
189
247
|
useTest(editorView);
|
|
190
248
|
useSelectCurrentThread(editorView, id);
|
|
191
249
|
const { acceptedFiles, getInputProps, open } = (0, import_react_dropzone.useDropzone)({
|
|
@@ -212,7 +270,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
212
270
|
});
|
|
213
271
|
const info = await onFileUpload(file);
|
|
214
272
|
if (info) {
|
|
215
|
-
(0,
|
|
273
|
+
(0, import_react_ui_editor2.addLink)({
|
|
216
274
|
url: info.url,
|
|
217
275
|
image: true
|
|
218
276
|
})(editorView);
|
|
@@ -227,7 +285,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
227
285
|
const getView = (0, import_react2.useCallback)(() => {
|
|
228
286
|
(0, import_invariant.invariant)(editorView, void 0, {
|
|
229
287
|
F: __dxlog_file2,
|
|
230
|
-
L:
|
|
288
|
+
L: 216,
|
|
231
289
|
S: void 0,
|
|
232
290
|
A: [
|
|
233
291
|
"editorView",
|
|
@@ -251,7 +309,7 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
251
309
|
]);
|
|
252
310
|
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_stack.StackItem.Content, {
|
|
253
311
|
toolbar: !!toolbar
|
|
254
|
-
}, toolbar && /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(
|
|
312
|
+
}, toolbar && /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_editor2.EditorToolbar, {
|
|
255
313
|
attendableId: id,
|
|
256
314
|
role,
|
|
257
315
|
state: toolbarState,
|
|
@@ -264,14 +322,14 @@ var MarkdownEditor = ({ id, role = "article", initialValue, extensions, extensio
|
|
|
264
322
|
ref: parentRef,
|
|
265
323
|
"data-testid": "composer.markdownRoot",
|
|
266
324
|
"data-toolbar": toolbar ? "enabled" : "disabled",
|
|
267
|
-
className: (0,
|
|
325
|
+
className: (0, import_react_ui_editor2.stackItemContentEditorClassNames)(role),
|
|
268
326
|
"data-popover-collision-boundary": true,
|
|
269
327
|
...focusAttributes
|
|
270
328
|
}));
|
|
271
329
|
} finally {
|
|
272
330
|
_effect.f();
|
|
273
331
|
}
|
|
274
|
-
};
|
|
332
|
+
});
|
|
275
333
|
var useTest = (view) => {
|
|
276
334
|
(0, import_react2.useEffect)(() => {
|
|
277
335
|
const composer = window.composer;
|
|
@@ -286,7 +344,7 @@ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-markdow
|
|
|
286
344
|
var useExtensions = ({ document, id, text, settings, selectionManager, viewMode, editorStateStore }) => {
|
|
287
345
|
const { dispatchPromise: dispatch } = (0, import_app_framework3.useIntentDispatcher)();
|
|
288
346
|
const identity = (0, import_halo.useIdentity)();
|
|
289
|
-
const space = (0,
|
|
347
|
+
const space = (0, import_echo3.getSpace)(document) ?? (0, import_echo3.getSpace)(text);
|
|
290
348
|
const baseExtensions = (0, import_react4.useMemo)(() => createBaseExtensions({
|
|
291
349
|
document,
|
|
292
350
|
id,
|
|
@@ -329,25 +387,25 @@ var useExtensions = ({ document, id, text, settings, selectionManager, viewMode,
|
|
|
329
387
|
]);
|
|
330
388
|
return (0, import_react4.useMemo)(() => [
|
|
331
389
|
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
332
|
-
document && (0,
|
|
390
|
+
document && (0, import_react_ui_editor4.createDataExtensions)({
|
|
333
391
|
id: document.id,
|
|
334
|
-
text: document.content.target && (0,
|
|
392
|
+
text: document.content.target && (0, import_echo3.createDocAccessor)(document.content.target, [
|
|
335
393
|
"content"
|
|
336
394
|
]),
|
|
337
395
|
space,
|
|
338
396
|
identity
|
|
339
397
|
}),
|
|
340
|
-
text && id && (0,
|
|
398
|
+
text && id && (0, import_react_ui_editor4.createDataExtensions)({
|
|
341
399
|
id,
|
|
342
|
-
text: (0,
|
|
400
|
+
text: (0, import_echo3.createDocAccessor)(text, [
|
|
343
401
|
"content"
|
|
344
402
|
]),
|
|
345
403
|
space,
|
|
346
404
|
identity
|
|
347
405
|
}),
|
|
348
|
-
(0,
|
|
349
|
-
document && (0,
|
|
350
|
-
onChange: (text2) => (0,
|
|
406
|
+
(0, import_react_ui_editor4.selectionState)(editorStateStore),
|
|
407
|
+
document && (0, import_react_ui_editor4.listener)({
|
|
408
|
+
onChange: (text2) => (0, import_chunk_CJLYFGPI.setFallbackName)(document, text2)
|
|
351
409
|
}),
|
|
352
410
|
baseExtensions,
|
|
353
411
|
pluginExtensions
|
|
@@ -365,13 +423,13 @@ var useExtensions = ({ document, id, text, settings, selectionManager, viewMode,
|
|
|
365
423
|
var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager, query, viewMode }) => {
|
|
366
424
|
const extensions = [
|
|
367
425
|
selectionManager && selectionChange(selectionManager),
|
|
368
|
-
settings.editorInputMode &&
|
|
369
|
-
settings.folding && (0,
|
|
426
|
+
settings.editorInputMode && import_react_ui_editor4.InputModeExtensions[settings.editorInputMode],
|
|
427
|
+
settings.folding && (0, import_react_ui_editor4.folding)()
|
|
370
428
|
].filter(import_util2.isNotFalsy);
|
|
371
429
|
if (viewMode !== "source") {
|
|
372
430
|
extensions.push(...[
|
|
373
|
-
(0,
|
|
374
|
-
(0,
|
|
431
|
+
(0, import_react_ui_editor4.formattingKeymap)(),
|
|
432
|
+
(0, import_react_ui_editor4.decorateMarkdown)({
|
|
375
433
|
selectionChangeDelay: 100,
|
|
376
434
|
numberedHeadings: settings.numberedHeadings ? {
|
|
377
435
|
from: 2
|
|
@@ -384,22 +442,22 @@ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager
|
|
|
384
442
|
id2
|
|
385
443
|
],
|
|
386
444
|
options: {
|
|
387
|
-
pivotId: document ? (0,
|
|
445
|
+
pivotId: document ? (0, import_echo3.fullyQualifiedId)(document) : id2
|
|
388
446
|
}
|
|
389
447
|
}));
|
|
390
448
|
}) : void 0
|
|
391
449
|
}),
|
|
392
|
-
(0,
|
|
393
|
-
(0,
|
|
450
|
+
(0, import_react_ui_editor4.linkTooltip)(renderLinkTooltip),
|
|
451
|
+
(0, import_react_ui_editor4.preview)()
|
|
394
452
|
]);
|
|
395
453
|
}
|
|
396
454
|
if (query) {
|
|
397
|
-
extensions.push((0,
|
|
455
|
+
extensions.push((0, import_react_ui_editor4.autocomplete)({
|
|
398
456
|
onSearch: (text) => {
|
|
399
457
|
return query.objects.map((object) => object.name?.length && object.id !== document?.id ? {
|
|
400
458
|
label: object.name,
|
|
401
459
|
// TODO(burdon): Factor out URL builder.
|
|
402
|
-
apply: `[${object.name}](/${(0,
|
|
460
|
+
apply: `[${object.name}](/${(0, import_echo3.fullyQualifiedId)(object)})`
|
|
403
461
|
} : void 0).filter(import_util2.isNotFalsy);
|
|
404
462
|
}
|
|
405
463
|
}));
|
|
@@ -407,7 +465,7 @@ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager
|
|
|
407
465
|
if (settings.debug) {
|
|
408
466
|
const items = settings.typewriter?.split(/[,\n]/) ?? "";
|
|
409
467
|
if (items) {
|
|
410
|
-
extensions.push((0,
|
|
468
|
+
extensions.push((0, import_react_ui_editor4.typewriter)({
|
|
411
469
|
items
|
|
412
470
|
}));
|
|
413
471
|
}
|
|
@@ -415,10 +473,10 @@ var createBaseExtensions = ({ document, id, dispatch, settings, selectionManager
|
|
|
415
473
|
return extensions;
|
|
416
474
|
};
|
|
417
475
|
var selectionChange = (selectionManager) => {
|
|
418
|
-
return
|
|
476
|
+
return import_react_ui_editor4.EditorView.updateListener.of((update) => {
|
|
419
477
|
if (update.selectionSet) {
|
|
420
|
-
const id = update.state.facet(
|
|
421
|
-
const cursorConverter = update.state.facet(
|
|
478
|
+
const id = update.state.facet(import_react_ui_editor4.documentId);
|
|
479
|
+
const cursorConverter = update.state.facet(import_react_ui_editor4.Cursor.converter);
|
|
422
480
|
const selection = update.state.selection;
|
|
423
481
|
const ranges = selection.ranges.map((range) => ({
|
|
424
482
|
from: cursorConverter.toCursor(range.from),
|
|
@@ -457,7 +515,7 @@ var createLinkRenderer = (onSelectObject) => (el, { url }) => {
|
|
|
457
515
|
renderRoot(el, /* @__PURE__ */ import_react4.default.createElement("a", {
|
|
458
516
|
...options,
|
|
459
517
|
className: style.hover
|
|
460
|
-
}, /* @__PURE__ */ import_react4.default.createElement(
|
|
518
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
|
|
461
519
|
icon: isInternal ? "ph--arrow-square-down--bold" : "ph--arrow-square-out--bold",
|
|
462
520
|
size: 4,
|
|
463
521
|
classNames: style.icon
|
|
@@ -470,14 +528,14 @@ var renderLinkTooltip = (el, { url }) => {
|
|
|
470
528
|
rel: "noreferrer",
|
|
471
529
|
target: "_blank",
|
|
472
530
|
className: style.hover
|
|
473
|
-
}, web.origin, /* @__PURE__ */ import_react4.default.createElement(
|
|
531
|
+
}, web.origin, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
|
|
474
532
|
icon: "ph--arrow-square-out--bold",
|
|
475
533
|
size: 4,
|
|
476
534
|
classNames: style.icon
|
|
477
535
|
})));
|
|
478
536
|
};
|
|
479
537
|
var renderRoot = (root, node) => {
|
|
480
|
-
(0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react4.default.createElement(
|
|
538
|
+
(0, import_client.createRoot)(root).render(/* @__PURE__ */ import_react4.default.createElement(import_react_ui3.ThemeProvider, {
|
|
481
539
|
tx: import_react_ui_theme.defaultTx
|
|
482
540
|
}, node));
|
|
483
541
|
return root;
|
|
@@ -485,9 +543,10 @@ var renderRoot = (root, node) => {
|
|
|
485
543
|
var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMode, editorStateStore, onViewModeChange }) => {
|
|
486
544
|
var _effect = (0, import_tracking.useSignals)();
|
|
487
545
|
try {
|
|
546
|
+
const { t } = (0, import_react_ui.useTranslation)();
|
|
488
547
|
const scrollPastEnd = role === "article";
|
|
489
|
-
const doc =
|
|
490
|
-
const text =
|
|
548
|
+
const doc = import_echo.Obj.instanceOf(import_chunk_3HHV4MM6.DocumentType, object) ? object : void 0;
|
|
549
|
+
const text = import_echo.Obj.instanceOf(import_schema.DataType.Text, object) ? object : void 0;
|
|
491
550
|
const extensions = useExtensions({
|
|
492
551
|
document: doc,
|
|
493
552
|
text,
|
|
@@ -497,16 +556,69 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
497
556
|
viewMode,
|
|
498
557
|
editorStateStore
|
|
499
558
|
});
|
|
559
|
+
const manager = (0, import_app_framework.usePluginManager)();
|
|
560
|
+
const resolve = (0, import_react.useCallback)((typename) => manager.context.getCapabilities(import_app_framework.Capabilities.Metadata).find(({ id: id2 }) => id2 === typename)?.metadata ?? {}, [
|
|
561
|
+
manager
|
|
562
|
+
]);
|
|
563
|
+
const space = (0, import_echo2.getSpace)(object);
|
|
564
|
+
const objectForms = (0, import_app_framework.useCapabilities)(import_plugin_space.SpaceCapabilities.ObjectForm);
|
|
565
|
+
const filter = (0, import_react.useMemo)(() => import_echo.Filter.or(...objectForms.map((form) => import_echo.Filter.type(form.objectSchema))), [
|
|
566
|
+
objectForms
|
|
567
|
+
]);
|
|
568
|
+
const onLinkQuery = (0, import_react.useCallback)(async (query) => {
|
|
569
|
+
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
570
|
+
const results = await space?.db.query(import_echo.Query.select(filter)).run();
|
|
571
|
+
const getLabel = (object2) => {
|
|
572
|
+
const type = import_echo.Obj.getTypename(object2);
|
|
573
|
+
const metadata = resolve(type);
|
|
574
|
+
return metadata.label?.(object2) || object2.name || [
|
|
575
|
+
"object name placeholder",
|
|
576
|
+
{
|
|
577
|
+
ns: type,
|
|
578
|
+
default: "New object"
|
|
579
|
+
}
|
|
580
|
+
];
|
|
581
|
+
};
|
|
582
|
+
const items = results?.objects.filter((object2) => (0, import_react_ui.toLocalizedString)(getLabel(object2), t).toLowerCase().includes(name)).map((object2) => {
|
|
583
|
+
const metadata = resolve(import_echo.Obj.getTypename(object2));
|
|
584
|
+
const label = (0, import_react_ui.toLocalizedString)(getLabel(object2), t);
|
|
585
|
+
return {
|
|
586
|
+
id: object2.id,
|
|
587
|
+
label,
|
|
588
|
+
icon: metadata.icon,
|
|
589
|
+
onSelect: (view, head) => {
|
|
590
|
+
const link = `[${label}][${import_echo.Obj.getDXN(object2)}]`;
|
|
591
|
+
if (query?.startsWith("@")) {
|
|
592
|
+
(0, import_react_ui_editor.insertAtLineStart)(view, head, `!${link}
|
|
593
|
+
`);
|
|
594
|
+
} else {
|
|
595
|
+
(0, import_react_ui_editor.insertAtCursor)(view, head, `${link} `);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
}) ?? [];
|
|
600
|
+
return [
|
|
601
|
+
{
|
|
602
|
+
id: "echo",
|
|
603
|
+
items
|
|
604
|
+
}
|
|
605
|
+
];
|
|
606
|
+
}, [
|
|
607
|
+
filter,
|
|
608
|
+
resolve,
|
|
609
|
+
space
|
|
610
|
+
]);
|
|
500
611
|
if (doc) {
|
|
501
612
|
return /* @__PURE__ */ import_react.default.createElement(DocumentEditor, {
|
|
502
|
-
id: (0,
|
|
613
|
+
id: (0, import_echo2.fullyQualifiedId)(object),
|
|
503
614
|
role,
|
|
504
615
|
document: doc,
|
|
505
616
|
extensions,
|
|
506
617
|
viewMode,
|
|
507
618
|
settings,
|
|
508
619
|
scrollPastEnd,
|
|
509
|
-
onViewModeChange
|
|
620
|
+
onViewModeChange,
|
|
621
|
+
onLinkQuery: space ? onLinkQuery : void 0
|
|
510
622
|
});
|
|
511
623
|
} else if (text) {
|
|
512
624
|
return /* @__PURE__ */ import_react.default.createElement(MarkdownEditor, {
|
|
@@ -518,7 +630,8 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
518
630
|
toolbar: settings.toolbar,
|
|
519
631
|
inputMode: settings.editorInputMode,
|
|
520
632
|
scrollPastEnd,
|
|
521
|
-
onViewModeChange
|
|
633
|
+
onViewModeChange,
|
|
634
|
+
onLinkQuery: space ? onLinkQuery : void 0
|
|
522
635
|
});
|
|
523
636
|
} else {
|
|
524
637
|
return /* @__PURE__ */ import_react.default.createElement(MarkdownEditor, {
|
|
@@ -530,7 +643,8 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
530
643
|
toolbar: settings.toolbar,
|
|
531
644
|
inputMode: settings.editorInputMode,
|
|
532
645
|
scrollPastEnd,
|
|
533
|
-
onViewModeChange
|
|
646
|
+
onViewModeChange,
|
|
647
|
+
onLinkQuery: space ? onLinkQuery : void 0
|
|
534
648
|
});
|
|
535
649
|
}
|
|
536
650
|
} finally {
|
|
@@ -540,12 +654,12 @@ var MarkdownContainer = ({ id, role, object, settings, selectionManager, viewMod
|
|
|
540
654
|
var DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }) => {
|
|
541
655
|
var _effect = (0, import_tracking.useSignals)();
|
|
542
656
|
try {
|
|
543
|
-
const space = (0,
|
|
657
|
+
const space = (0, import_echo2.getSpace)(doc);
|
|
544
658
|
(0, import_react.useEffect)(() => {
|
|
545
659
|
if (typeof doc.fallbackName === "string") {
|
|
546
660
|
return;
|
|
547
661
|
}
|
|
548
|
-
const fallbackName = doc.content?.target?.content ? (0,
|
|
662
|
+
const fallbackName = doc.content?.target?.content ? (0, import_chunk_CJLYFGPI.getFallbackName)(doc.content.target.content) : void 0;
|
|
549
663
|
if (fallbackName) {
|
|
550
664
|
doc.fallbackName = fallbackName;
|
|
551
665
|
}
|
|
@@ -598,4 +712,4 @@ var MarkdownContainer_default = MarkdownContainer;
|
|
|
598
712
|
0 && (module.exports = {
|
|
599
713
|
DocumentEditor
|
|
600
714
|
});
|
|
601
|
-
//# sourceMappingURL=MarkdownContainer-
|
|
715
|
+
//# sourceMappingURL=MarkdownContainer-NG4H6AZJ.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/MarkdownContainer.tsx", "../../../src/components/MarkdownEditor/MarkdownEditor.tsx", "../../../src/hooks/useSelectCurrentThread.tsx", "../../../src/extensions.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { Capabilities, useAppGraph, useCapabilities, usePluginManager } from '@dxos/app-framework';\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport { type CommandMenuGroup, type CommandMenuItem, insertAtCursor, insertAtLineStart } from '@dxos/react-ui-editor';\nimport { DataType } from '@dxos/schema';\n\nimport { MarkdownEditor, type MarkdownEditorProps } from './MarkdownEditor';\nimport { useExtensions } from '../extensions';\nimport { DocumentType, type MarkdownSettingsProps } from '../types';\nimport { getFallbackName } from '../util';\n\nexport type MarkdownContainerProps = Pick<\n MarkdownEditorProps,\n 'role' | 'extensionProviders' | 'viewMode' | 'editorStateStore' | 'onViewModeChange'\n> & {\n id: string;\n object: DocumentType | DataType.Text | any;\n settings: MarkdownSettingsProps;\n selectionManager?: SelectionManager;\n};\n\nconst MarkdownContainer = ({\n id,\n role,\n object,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n onViewModeChange,\n}: MarkdownContainerProps) => {\n const { t } = useTranslation();\n const scrollPastEnd = role === 'article';\n const doc = Obj.instanceOf(DocumentType, object) ? object : undefined;\n const text = Obj.instanceOf(DataType.Text, object) ? object : undefined;\n const extensions = useExtensions({ document: doc, text, id, settings, selectionManager, viewMode, editorStateStore });\n\n // TODO(wittjosiah): Factor out.\n const manager = usePluginManager();\n const resolve = useCallback(\n (typename: string) =>\n manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {},\n [manager],\n );\n const space = getSpace(object);\n const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);\n const filter = useMemo(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema))), [objectForms]);\n const onLinkQuery = useCallback(\n async (query?: string): Promise<CommandMenuGroup[]> => {\n const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? '';\n const results = await space?.db.query(Query.select(filter)).run();\n // TODO(wittjosiah): Use `Obj.Any` type.\n const getLabel = (object: any) => {\n const type = Obj.getTypename(object)!;\n const metadata = resolve(type);\n return (\n metadata.label?.(object) || object.name || ['object name placeholder', { ns: type, default: 'New object' }]\n );\n };\n const items =\n results?.objects\n .filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))\n // TODO(wittjosiah): Remove `any` type.\n .map((object: any): CommandMenuItem => {\n const metadata = resolve(Obj.getTypename(object)!);\n const label = toLocalizedString(getLabel(object), t);\n return {\n id: object.id,\n label,\n icon: metadata.icon,\n onSelect: (view, head) => {\n const link = `[${label}][${Obj.getDXN(object)}]`;\n if (query?.startsWith('@')) {\n insertAtLineStart(view, head, `!${link}\\n`);\n } else {\n insertAtCursor(view, head, `${link} `);\n }\n },\n };\n }) ?? [];\n return [{ id: 'echo', items }];\n },\n [filter, resolve, space],\n );\n\n if (doc) {\n return (\n <DocumentEditor\n id={fullyQualifiedId(object)}\n role={role}\n document={doc}\n extensions={extensions}\n viewMode={viewMode}\n settings={settings}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n );\n } else if (text) {\n return (\n <MarkdownEditor\n id={id}\n role={role}\n initialValue={text.content}\n extensions={extensions}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n );\n } else {\n // TODO(burdon): Normalize with above.\n return (\n <MarkdownEditor\n id={id}\n role={role}\n initialValue={object.text}\n extensions={extensions}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n inputMode={settings.editorInputMode}\n scrollPastEnd={scrollPastEnd}\n onViewModeChange={onViewModeChange}\n onLinkQuery={space ? onLinkQuery : undefined}\n />\n );\n }\n};\n\ntype DocumentEditorProps = Omit<MarkdownContainerProps, 'object' | 'extensionProviders' | 'editorStateStore'> &\n Pick<MarkdownEditorProps, 'id' | 'scrollPastEnd' | 'extensions' | 'onLinkQuery'> & {\n document: DocumentType;\n };\n\nexport const DocumentEditor = ({ id, document: doc, settings, viewMode, ...props }: DocumentEditorProps) => {\n const space = getSpace(doc);\n\n // Migrate gradually to `fallbackName`.\n useEffect(() => {\n if (typeof doc.fallbackName === 'string') {\n return;\n }\n\n const fallbackName = doc.content?.target?.content ? getFallbackName(doc.content.target.content) : undefined;\n if (fallbackName) {\n doc.fallbackName = fallbackName;\n }\n }, [doc, doc.content]);\n\n // File dragging.\n const [upload] = useCapabilities(Capabilities.FileUploader);\n const handleFileUpload = useMemo(() => {\n if (space === undefined || upload === undefined) {\n return undefined;\n }\n\n // TODO(burdon): Re-order props: space, file.\n return async (file: File) => upload!(file, space);\n }, [space, upload]);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n return (\n <MarkdownEditor\n id={id}\n initialValue={doc.content?.target?.content}\n viewMode={viewMode}\n toolbar={settings.toolbar}\n customActions={customActions}\n inputMode={settings.editorInputMode}\n onFileUpload={handleFileUpload}\n {...props}\n />\n );\n};\n\nexport default MarkdownContainer;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport React, { useMemo, useEffect, useCallback, forwardRef, useImperativeHandle, useRef } from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { type FileInfo } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { toLocalizedString, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n addLink,\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n dropFile,\n editorGutter,\n editorSlots,\n EditorToolbar,\n processEditorPayload,\n RefPopover,\n stackItemContentEditorClassNames,\n type DNDOptions,\n type EditorInputMode,\n type EditorSelectionState,\n type EditorStateStore,\n type EditorToolbarActionGraphProps,\n type EditorViewMode,\n type CommandMenuGroup,\n type UseTextEditorProps,\n useEditorToolbarState,\n useFormattingState,\n useCommandMenu,\n useTextEditor,\n filterItems,\n coreSlashCommands,\n CommandMenu,\n linkSlashCommands,\n} from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { isNotFalsy, isNonNullable } from '@dxos/util';\n\nimport { useSelectCurrentThread } from '../../hooks';\nimport { MARKDOWN_PLUGIN } from '../../meta';\nimport { type MarkdownPluginState } from '../../types';\n\nexport type MarkdownEditorProps = {\n id: string;\n role?: string;\n inputMode?: EditorInputMode;\n scrollPastEnd?: boolean;\n slashCommandGroups?: CommandMenuGroup[];\n toolbar?: boolean;\n customActions?: EditorToolbarActionGraphProps['customActions'];\n // TODO(wittjosiah): Generalize custom toolbar actions (e.g. comment, upload, etc.)\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n onViewModeChange?: (id: string, mode: EditorViewMode) => void;\n onLinkQuery?: (query?: string) => Promise<CommandMenuGroup[]>;\n onFileUpload?: (file: File) => Promise<FileInfo | undefined>;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions'> &\n Partial<Pick<MarkdownPluginState, 'extensionProviders'>>;\n\n/**\n * Base markdown editor component.\n *\n * This component provides all the features of the markdown editor that do no depend on ECHO.\n * This allows it to be used as a common editor for markdown content on arbitrary backends (e.g. files).\n */\nexport const MarkdownEditor = ({\n extensions: _extensions,\n slashCommandGroups,\n onLinkQuery,\n ...props\n}: MarkdownEditorProps) => {\n const { t } = useTranslation();\n const viewRef = useRef<EditorView>();\n const getGroups = useCallback(\n (trigger: string, query?: string) => {\n switch (trigger) {\n case '@':\n return onLinkQuery?.(query) ?? [];\n case '/':\n default:\n return filterItems([coreSlashCommands, linkSlashCommands, ...(slashCommandGroups ?? [])], (item) =>\n query ? toLocalizedString(item.label, t).toLowerCase().includes(query.toLowerCase()) : true,\n );\n }\n },\n [onLinkQuery, slashCommandGroups],\n );\n const { commandMenu, groupsRef, currentItem, onSelect, ...refPopoverProps } = useCommandMenu({\n viewRef,\n getGroups,\n trigger: onLinkQuery ? ['/', '@'] : '/',\n });\n const extensions = useMemo(() => [_extensions, commandMenu].filter(isNotFalsy), [_extensions, commandMenu]);\n\n return (\n <RefPopover modal={false} {...refPopoverProps}>\n <MarkdownEditorImpl ref={viewRef} {...props} extensions={extensions} />\n <CommandMenu groups={groupsRef.current} currentItem={currentItem} onSelect={onSelect} />\n </RefPopover>\n );\n};\n\nconst MarkdownEditorImpl = forwardRef<EditorView | undefined, MarkdownEditorProps>(\n (\n {\n id,\n role = 'article',\n initialValue,\n extensions,\n extensionProviders,\n scrollPastEnd,\n toolbar,\n customActions,\n viewMode,\n editorStateStore,\n onFileUpload,\n onViewModeChange,\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(MARKDOWN_PLUGIN);\n const { themeMode } = useThemeContext();\n const toolbarState = useEditorToolbarState({ viewMode });\n const formattingObserver = useFormattingState(toolbarState);\n\n // Restore last selection and scroll point.\n const { scrollTo, selection } = useMemo<EditorSelectionState>(() => editorStateStore?.getState(id) ?? {}, [id]);\n\n // Extensions from other plugins.\n // TODO(burdon): Reconcile with DocumentEditor.useExtensions.\n const providerExtensions = useMemo(\n () => extensionProviders?.flatMap((provider) => provider({})).filter(isNonNullable),\n [extensionProviders],\n );\n\n // TODO(wittjosiah): Factor out to file uploader plugin.\n // Drag files.\n const handleDrop: DNDOptions['onDrop'] = async (view, { files }) => {\n const file = files[0];\n const info = file && onFileUpload ? await onFileUpload(file) : undefined;\n if (info) {\n processEditorPayload(view, { type: 'image', data: info.url });\n }\n };\n\n const {\n parentRef,\n view: editorView,\n focusAttributes,\n } = useTextEditor(\n () => ({\n initialValue,\n extensions: [\n formattingObserver,\n createBasicExtensions({\n readOnly: viewMode === 'readonly',\n placeholder: t('editor placeholder'),\n scrollPastEnd: role === 'section' ? false : scrollPastEnd,\n }),\n createMarkdownExtensions({ themeMode }),\n createThemeExtensions({ themeMode, syntaxHighlighting: true, slots: editorSlots }),\n editorGutter,\n role !== 'section' && onFileUpload && dropFile({ onDrop: handleDrop }),\n providerExtensions,\n extensions,\n ].filter(isNotFalsy),\n ...(role !== 'section' && {\n id,\n scrollTo,\n selection,\n // TODO(wittjosiah): Autofocus based on layout is racy.\n // autoFocus: layoutPlugin?.provides.layout ? layoutPlugin?.provides.layout.scrollIntoView === id : true,\n moveToEndOfLine: true,\n }),\n }),\n [id, formattingObserver, viewMode, themeMode, extensions, providerExtensions],\n );\n\n useImperativeHandle(forwardedRef, () => editorView, [editorView]);\n useTest(editorView);\n useSelectCurrentThread(editorView, id);\n\n // https://react-dropzone.js.org/#src\n const { acceptedFiles, getInputProps, open } = useDropzone({\n multiple: false,\n noDrag: true,\n accept: {\n 'image/*': ['.jpg', '.jpeg', '.png', '.gif'],\n },\n });\n\n useEffect(() => {\n if (editorView && onFileUpload && acceptedFiles.length) {\n requestAnimationFrame(async () => {\n // NOTE: Clone file since react-dropzone patches in a non-standard `path` property, which confuses IPFS.\n const f = acceptedFiles[0];\n const file = new File([f], f.name, {\n type: f.type,\n lastModified: f.lastModified,\n });\n\n const info = await onFileUpload(file);\n if (info) {\n addLink({ url: info.url, image: true })(editorView);\n }\n });\n }\n }, [acceptedFiles, editorView, onFileUpload]);\n\n const getView = useCallback(() => {\n invariant(editorView);\n return editorView;\n }, [editorView]);\n\n const handleViewModeChange = useCallback(\n (mode: EditorViewMode) => onViewModeChange?.(id, mode),\n [id, onViewModeChange],\n );\n\n const handleImageUpload = useCallback(() => {\n if (onFileUpload) {\n open();\n }\n }, [onFileUpload]);\n\n return (\n <StackItem.Content toolbar={!!toolbar}>\n {toolbar && (\n <>\n <EditorToolbar\n attendableId={id}\n role={role}\n state={toolbarState}\n customActions={customActions}\n getView={getView}\n image={handleImageUpload}\n viewMode={handleViewModeChange}\n />\n <input {...getInputProps()} />\n </>\n )}\n <div\n role='none'\n ref={parentRef}\n data-testid='composer.markdownRoot'\n data-toolbar={toolbar ? 'enabled' : 'disabled'}\n className={stackItemContentEditorClassNames(role)}\n data-popover-collision-boundary={true}\n {...focusAttributes}\n />\n </StackItem.Content>\n );\n },\n);\n\n// Expose editor view for playwright tests.\n// TODO(wittjosiah): Find a better way to expose this or find a way to limit it to test runs.\nconst useTest = (view?: EditorView) => {\n useEffect(() => {\n const composer = (window as any).composer;\n if (composer) {\n composer.editorView = view;\n }\n }, [view]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Schema } from 'effect';\nimport { useMemo } from 'react';\n\nimport { createResolver, LayoutAction, useIntentResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { Cursor, setSelection } from '@dxos/react-ui-editor';\n\nimport { MARKDOWN_PLUGIN } from '../meta';\n\n/**\n * Handle scrolling and selection of the current thread in a markdown editor.\n */\nexport const useSelectCurrentThread = (editorView: EditorView | undefined, documentId: string) => {\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver({\n intent: LayoutAction.UpdateLayout,\n position: 'hoist',\n filter: (data): data is { part: 'current'; subject: string; options: { cursor: string } } => {\n if (!Schema.is(LayoutAction.ScrollIntoView.fields.input)(data)) {\n return false;\n }\n\n return !!editorView && data.subject === documentId && !!data.options?.cursor;\n },\n resolve: ({ options: { cursor } }) => {\n invariant(editorView, 'Editor view is not defined.');\n const range = Cursor.getRangeFromCursor(editorView.state, cursor!);\n if (range) {\n const selection = editorView.state.selection.main.from !== range.from ? { anchor: range.from } : undefined;\n const effects = [\n // NOTE: This does not use the DOM scrollIntoView function.\n EditorView.scrollIntoView(range.from, { y: 'start', yMargin: 96 }),\n ];\n if (selection) {\n // Update the editor selection to get bi-directional highlighting.\n effects.push(setSelection.of({ current: documentId }));\n }\n\n editorView.dispatch({\n effects,\n selection: selection ? { anchor: range.from } : undefined,\n });\n }\n },\n }),\n [documentId, editorView],\n );\n\n useIntentResolver(MARKDOWN_PLUGIN, scrollIntoViewResolver);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type AnchorHTMLAttributes, type ReactNode, useMemo } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport {\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n useCapabilities,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { createDocAccessor, fullyQualifiedId, getSpace, type QueryResult } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ThemeProvider } from '@dxos/react-ui';\nimport { type SelectionManager } from '@dxos/react-ui-attention';\nimport {\n type AutocompleteResult,\n type EditorStateStore,\n type EditorViewMode,\n type Extension,\n InputModeExtensions,\n createDataExtensions,\n autocomplete,\n decorateMarkdown,\n folding,\n formattingKeymap,\n linkTooltip,\n listener,\n preview,\n selectionState,\n typewriter,\n type RenderCallback,\n EditorView,\n documentId,\n Cursor,\n} from '@dxos/react-ui-editor';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { MarkdownCapabilities } from './capabilities';\nimport { type DocumentType, type MarkdownSettingsProps } from './types';\nimport { setFallbackName } from './util';\n\ntype ExtensionsOptions = {\n document?: DocumentType;\n id?: string;\n text?: DataType.Text;\n dispatch?: PromiseIntentDispatcher;\n query?: QueryResult<DocumentType>;\n settings: MarkdownSettingsProps;\n selectionManager?: SelectionManager;\n viewMode?: EditorViewMode;\n editorStateStore?: EditorStateStore;\n};\n\n// TODO(burdon): Merge with createBaseExtensions below.\nexport const useExtensions = ({\n document,\n id,\n text,\n settings,\n selectionManager,\n viewMode,\n editorStateStore,\n}: ExtensionsOptions): Extension[] => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const space = getSpace(document) ?? getSpace(text);\n\n // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.\n // TODO(burdon): Unsubscribe.\n // const query = space?.db.query(Filter.type(DocumentType));\n // query?.subscribe();\n const baseExtensions = useMemo(\n () =>\n createBaseExtensions({\n document,\n id,\n text,\n settings,\n selectionManager,\n viewMode,\n dispatch,\n // query,\n }),\n [\n document,\n id,\n text,\n viewMode,\n dispatch,\n settings,\n settings.editorInputMode,\n settings.folding,\n settings.numberedHeadings,\n settings.debug,\n settings.typewriter,\n selectionManager,\n ],\n );\n\n const extensionProviders = useCapabilities(MarkdownCapabilities.Extensions);\n\n //\n // External extensions from other plugins.\n //\n const pluginExtensions = useMemo<Extension[]>(() => {\n if (!document) {\n return [];\n }\n\n return extensionProviders.flat().reduce((acc: Extension[], provider) => {\n const extension = typeof provider === 'function' ? provider({ document }) : provider;\n if (extension) {\n acc.push(extension);\n }\n\n return acc;\n }, []);\n }, [extensionProviders, document]);\n\n //\n // Basic plugins.\n //\n return useMemo<Extension[]>(\n () =>\n [\n // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.\n document &&\n createDataExtensions({\n id: document.id,\n text: document.content.target && createDocAccessor(document.content.target, ['content']),\n space,\n identity,\n }),\n text &&\n id &&\n createDataExtensions({\n id,\n text: createDocAccessor(text, ['content']),\n space,\n identity,\n }),\n selectionState(editorStateStore),\n document &&\n listener({\n onChange: (text) => setFallbackName(document, text),\n }),\n baseExtensions,\n pluginExtensions,\n ].filter(isNotFalsy),\n [baseExtensions, pluginExtensions, document, document?.content?.target, text, id, space, identity],\n );\n};\n\n/**\n * Create extension instances for editor.\n */\nconst createBaseExtensions = ({\n document,\n id,\n dispatch,\n settings,\n selectionManager,\n query,\n viewMode,\n}: ExtensionsOptions): Extension[] => {\n const extensions: Extension[] = [\n selectionManager && selectionChange(selectionManager),\n settings.editorInputMode && InputModeExtensions[settings.editorInputMode],\n settings.folding && folding(),\n ].filter(isNotFalsy);\n\n //\n // Markdown\n //\n if (viewMode !== 'source') {\n extensions.push(\n ...[\n formattingKeymap(),\n decorateMarkdown({\n selectionChangeDelay: 100,\n numberedHeadings: settings.numberedHeadings ? { from: 2 } : undefined,\n // TODO(wittjosiah): For internal links, consider ignoring the link text and rendering the label of the object being linked to.\n renderLinkButton:\n dispatch && (document || id)\n ? createLinkRenderer((id: string) => {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [id],\n options: {\n pivotId: document ? fullyQualifiedId(document) : id,\n },\n }),\n );\n })\n : undefined,\n }),\n linkTooltip(renderLinkTooltip),\n preview(),\n ],\n );\n }\n\n //\n // Autocomplete object links.\n //\n if (query) {\n extensions.push(\n autocomplete({\n onSearch: (text: string) => {\n // TODO(burdon): Specify filter (e.g., stack).\n return query.objects\n .map<AutocompleteResult | undefined>((object) =>\n object.name?.length && object.id !== document?.id\n ? {\n label: object.name,\n // TODO(burdon): Factor out URL builder.\n apply: `[${object.name}](/${fullyQualifiedId(object)})`,\n }\n : undefined,\n )\n .filter(isNotFalsy);\n },\n }),\n );\n }\n\n if (settings.debug) {\n const items = settings.typewriter?.split(/[,\\n]/) ?? '';\n if (items) {\n extensions.push(typewriter({ items }));\n }\n }\n\n return extensions;\n};\n\nexport const selectionChange = (selectionManager: SelectionManager) => {\n return EditorView.updateListener.of((update) => {\n if (update.selectionSet) {\n const id = update.state.facet(documentId);\n const cursorConverter = update.state.facet(Cursor.converter);\n const selection = update.state.selection;\n const ranges = selection.ranges\n .map((range) => ({\n from: cursorConverter.toCursor(range.from),\n to: cursorConverter.toCursor(range.to),\n }))\n .filter(({ from, to }) => to > from);\n selectionManager.updateMultiRange(id, ranges);\n }\n });\n};\n\n// TODO(burdon): Factor out styles.\nconst style = {\n hover: 'rounded-sm text-primary-500 hover:text-primary-600 dark:text-primary-500 hover:dark:text-primary-400',\n icon: 'inline-block leading-none mis-1 cursor-pointer',\n};\n\nconst createLinkRenderer =\n (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>\n (el, { url }) => {\n // TODO(burdon): Formalize/document internal link format.\n const isInternal =\n url.startsWith('/') ||\n // TODO(wittjosiah): This should probably be parsed out on paste?\n url.startsWith(window.location.origin);\n\n const options: AnchorHTMLAttributes<any> = isInternal\n ? {\n onClick: () => {\n const qualifiedId = url.split('/').at(-1);\n invariant(qualifiedId, 'Invalid link format.');\n onSelectObject(qualifiedId);\n },\n }\n : {\n href: url,\n rel: 'noreferrer',\n target: '_blank',\n };\n\n renderRoot(\n el,\n <a {...options} className={style.hover}>\n <Icon\n icon={isInternal ? 'ph--arrow-square-down--bold' : 'ph--arrow-square-out--bold'}\n size={4}\n classNames={style.icon}\n />\n </a>,\n );\n };\n\nconst renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {\n const web = new URL(url);\n renderRoot(\n el,\n <a href={url} rel='noreferrer' target='_blank' className={style.hover}>\n {web.origin}\n <Icon icon='ph--arrow-square-out--bold' size={4} classNames={style.icon} />\n </a>,\n );\n};\n\n// TODO(burdon): Remove react rendering; use DOM directly.\nexport const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {\n createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);\n return root;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_echo", "import_react", "import_react_ui", "import_react_ui_editor", "import_app_framework", "import_invariant", "import_util", "useSelectCurrentThread", "editorView", "documentId", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "UpdateLayout", "position", "filter", "data", "Schema", "is", "ScrollIntoView", "fields", "input", "subject", "options", "cursor", "resolve", "invariant", "range", "Cursor", "getRangeFromCursor", "state", "selection", "main", "from", "anchor", "undefined", "effects", "EditorView", "scrollIntoView", "y", "yMargin", "push", "setSelection", "of", "current", "dispatch", "useIntentResolver", "MARKDOWN_PLUGIN", "MarkdownEditor", "extensions", "_extensions", "slashCommandGroups", "onLinkQuery", "props", "t", "useTranslation", "viewRef", "useRef", "getGroups", "useCallback", "trigger", "query", "filterItems", "coreSlashCommands", "linkSlashCommands", "item", "toLocalizedString", "label", "toLowerCase", "includes", "commandMenu", "groupsRef", "currentItem", "onSelect", "refPopoverProps", "useCommandMenu", "isNotFalsy", "React", "RefPopover", "modal", "MarkdownEditorImpl", "ref", "CommandMenu", "groups", "forwardRef", "id", "role", "initialValue", "extensionProviders", "scrollPastEnd", "toolbar", "customActions", "viewMode", "editorStateStore", "onFileUpload", "onViewModeChange", "forwardedRef", "themeMode", "useThemeContext", "toolbarState", "useEditorToolbarState", "formattingObserver", "useFormattingState", "scrollTo", "getState", "providerExtensions", "flatMap", "provider", "isNonNullable", "handleDrop", "view", "files", "file", "info", "processEditorPayload", "type", "url", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "readOnly", "placeholder", "createMarkdownExtensions", "createThemeExtensions", "syntaxHighlighting", "slots", "editorSlots", "editorGutter", "dropFile", "onDrop", "moveToEndOfLine", "useImperativeHandle", "useTest", "acceptedFiles", "getInputProps", "open", "useDropzone", "multiple", "noDrag", "accept", "useEffect", "length", "requestAnimationFrame", "f", "File", "name", "lastModified", "addLink", "image", "getView", "handleViewModeChange", "mode", "handleImageUpload", "StackItem", "Content", "EditorToolbar", "attendableId", "div", "data-testid", "data-toolbar", "className", "stackItemContentEditorClassNames", "data-popover-collision-boundary", "composer", "window", "useExtensions", "document", "text", "settings", "selectionManager", "dispatchPromise", "useIntentDispatcher", "identity", "useIdentity", "space", "getSpace", "baseExtensions", "createBaseExtensions", "editorInputMode", "folding", "numberedHeadings", "debug", "typewriter", "useCapabilities", "MarkdownCapabilities", "Extensions", "pluginExtensions", "flat", "reduce", "acc", "extension", "createDataExtensions", "content", "target", "createDocAccessor", "selectionState", "listener", "onChange", "setFallbackName", "selectionChange", "InputModeExtensions", "formattingKeymap", "decorateMarkdown", "selectionChangeDelay", "renderLinkButton", "createLinkRenderer", "createIntent", "Open", "part", "pivotId", "fullyQualifiedId", "linkTooltip", "renderLinkTooltip", "preview", "autocomplete", "onSearch", "objects", "map", "object", "apply", "items", "split", "updateListener", "update", "selectionSet", "facet", "cursorConverter", "converter", "ranges", "toCursor", "to", "updateMultiRange", "style", "hover", "icon", "onSelectObject", "el", "isInternal", "startsWith", "location", "origin", "onClick", "qualifiedId", "at", "href", "rel", "renderRoot", "a", "Icon", "size", "classNames", "web", "URL", "root", "node", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "MarkdownContainer", "doc", "Obj", "instanceOf", "DocumentType", "DataType", "Text", "manager", "usePluginManager", "typename", "context", "getCapabilities", "Capabilities", "Metadata", "find", "metadata", "objectForms", "SpaceCapabilities", "ObjectForm", "Filter", "or", "form", "objectSchema", "slice", "results", "db", "Query", "select", "run", "getLabel", "getTypename", "ns", "default", "head", "link", "getDXN", "insertAtLineStart", "insertAtCursor", "DocumentEditor", "inputMode", "fallbackName", "getFallbackName", "upload", "FileUploader", "handleFileUpload", "graph", "useAppGraph", "Rx", "make", "get", "actions", "nodes", "action", "properties", "disposition", "edges", "source"]
|
|
7
|
+
}
|