@dxos/react-ui-editor 0.4.4-main.e05bf88 → 0.4.4-main.e80efb0
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 +42 -28
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/basic.d.ts +2 -1
- package/dist/types/src/extensions/basic.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/styles/layout.d.ts +1 -1
- package/dist/types/src/styles/layout.d.ts.map +1 -1
- package/package.json +26 -26
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +6 -0
- package/src/components/TextEditor/TextEditor.tsx +18 -5
- package/src/components/TextEditor/automerge.stories.tsx +10 -7
- package/src/components/TextEditor/hooks.stories.tsx +44 -10
- package/src/extensions/basic.ts +3 -1
- package/src/extensions/markdown/image.ts +1 -1
- package/src/hooks/useTextEditor.ts +6 -2
- package/src/styles/layout.ts +1 -1
|
@@ -11,7 +11,7 @@ import { EditorState as EditorState2 } from "@codemirror/state";
|
|
|
11
11
|
import { EditorView as EditorView15 } from "@codemirror/view";
|
|
12
12
|
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
13
13
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
|
14
|
-
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2 } from "react";
|
|
14
|
+
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2, useMemo as useMemo2 } from "react";
|
|
15
15
|
import { log as log3 } from "@dxos/log";
|
|
16
16
|
import { useThemeContext } from "@dxos/react-ui";
|
|
17
17
|
import { focusRing } from "@dxos/react-ui-theme";
|
|
@@ -715,10 +715,10 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
|
|
|
715
715
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
|
716
716
|
import { drawSelection, EditorView as EditorView4, highlightActiveLine, placeholder } from "@codemirror/view";
|
|
717
717
|
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
718
|
-
var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping = true } = {}) => [
|
|
718
|
+
var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping = true, bracketMatching: _bracketMatching = true } = {}) => [
|
|
719
719
|
lineWrapping && EditorView4.lineWrapping,
|
|
720
720
|
// https://codemirror.net/docs/ref/#codemirror.minimalSetup
|
|
721
|
-
bracketMatching(),
|
|
721
|
+
_bracketMatching && bracketMatching(),
|
|
722
722
|
closeBrackets(),
|
|
723
723
|
drawSelection(),
|
|
724
724
|
highlightActiveLine(),
|
|
@@ -1115,7 +1115,7 @@ var tokens = tailwindConfig({}).theme;
|
|
|
1115
1115
|
var getToken = (path, defaultValue = void 0) => get2(tokens, path, defaultValue);
|
|
1116
1116
|
|
|
1117
1117
|
// packages/ui/react-ui-editor/src/styles/layout.ts
|
|
1118
|
-
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] justify-center content-start overflow-hidden";
|
|
1118
|
+
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
|
1119
1119
|
var editorFillLayoutRoot = "min-bs-full grid";
|
|
1120
1120
|
var editorFillLayoutEditor = "min-bs-full";
|
|
1121
1121
|
var editorHalfViewportOverscrollContent = "after:block after:min-bs-[50dvh] after:pointer-events-none";
|
|
@@ -3945,7 +3945,7 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3945
3945
|
EditorView15.exceptionSink.of((err) => {
|
|
3946
3946
|
log3.catch(err, void 0, {
|
|
3947
3947
|
F: __dxlog_file4,
|
|
3948
|
-
L:
|
|
3948
|
+
L: 113,
|
|
3949
3949
|
S: void 0,
|
|
3950
3950
|
C: (f, a) => f(...a)
|
|
3951
3951
|
});
|
|
@@ -4003,6 +4003,7 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
4003
4003
|
};
|
|
4004
4004
|
}, [
|
|
4005
4005
|
rootRef,
|
|
4006
|
+
extensions,
|
|
4006
4007
|
model,
|
|
4007
4008
|
readonly,
|
|
4008
4009
|
themeMode
|
|
@@ -4028,38 +4029,49 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
4028
4029
|
...tabsterDOMAttribute
|
|
4029
4030
|
});
|
|
4030
4031
|
});
|
|
4031
|
-
var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, lineWrapping, theme = textTheme, slots, extensions
|
|
4032
|
+
var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, lineWrapping, theme = textTheme, slots, extensions: _extensions, ...props }, forwardedRef) => {
|
|
4032
4033
|
const { themeMode } = useThemeContext();
|
|
4033
4034
|
const updatedSlots = defaultsDeep2({}, slots, defaultTextSlots);
|
|
4035
|
+
const extensions = useMemo2(() => [
|
|
4036
|
+
createBasicBundle({
|
|
4037
|
+
themeMode,
|
|
4038
|
+
placeholder: placeholder3,
|
|
4039
|
+
lineWrapping
|
|
4040
|
+
}),
|
|
4041
|
+
..._extensions ?? []
|
|
4042
|
+
], [
|
|
4043
|
+
themeMode,
|
|
4044
|
+
placeholder3,
|
|
4045
|
+
lineWrapping,
|
|
4046
|
+
_extensions
|
|
4047
|
+
]);
|
|
4034
4048
|
return /* @__PURE__ */ React.createElement(BaseTextEditor, {
|
|
4035
4049
|
ref: forwardedRef,
|
|
4036
4050
|
readonly,
|
|
4037
|
-
extensions
|
|
4038
|
-
createBasicBundle({
|
|
4039
|
-
themeMode,
|
|
4040
|
-
placeholder: placeholder3,
|
|
4041
|
-
lineWrapping
|
|
4042
|
-
}),
|
|
4043
|
-
...extensions
|
|
4044
|
-
],
|
|
4051
|
+
extensions,
|
|
4045
4052
|
theme,
|
|
4046
4053
|
slots: updatedSlots,
|
|
4047
4054
|
...props
|
|
4048
4055
|
});
|
|
4049
4056
|
});
|
|
4050
|
-
var MarkdownEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, theme = markdownTheme, slots, extensions
|
|
4057
|
+
var MarkdownEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, theme = markdownTheme, slots, extensions: _extensions, ...props }, forwardedRef) => {
|
|
4051
4058
|
const { themeMode } = useThemeContext();
|
|
4052
4059
|
const updatedSlots = defaultsDeep2({}, slots, defaultMarkdownSlots);
|
|
4060
|
+
const extensions = useMemo2(() => [
|
|
4061
|
+
createMarkdownExtensions({
|
|
4062
|
+
themeMode,
|
|
4063
|
+
placeholder: placeholder3
|
|
4064
|
+
}),
|
|
4065
|
+
..._extensions ?? []
|
|
4066
|
+
], [
|
|
4067
|
+
themeMode,
|
|
4068
|
+
placeholder3,
|
|
4069
|
+
_extensions
|
|
4070
|
+
]);
|
|
4053
4071
|
return /* @__PURE__ */ React.createElement(BaseTextEditor, {
|
|
4054
4072
|
ref: forwardedRef,
|
|
4055
4073
|
readonly,
|
|
4056
|
-
extensions
|
|
4057
|
-
createMarkdownExtensions({
|
|
4058
|
-
themeMode,
|
|
4059
|
-
placeholder: placeholder3
|
|
4060
|
-
}),
|
|
4061
|
-
...extensions
|
|
4062
|
-
],
|
|
4074
|
+
extensions,
|
|
4063
4075
|
theme,
|
|
4064
4076
|
slots: updatedSlots,
|
|
4065
4077
|
...props
|
|
@@ -4533,6 +4545,7 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4533
4545
|
const [view, setView] = useState4();
|
|
4534
4546
|
const parentRef = useRef3(null);
|
|
4535
4547
|
useEffect3(() => {
|
|
4548
|
+
let view2;
|
|
4536
4549
|
if (parentRef.current) {
|
|
4537
4550
|
const state = EditorState3.create({
|
|
4538
4551
|
doc,
|
|
@@ -4542,7 +4555,7 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4542
4555
|
EditorView16.exceptionSink.of((err) => {
|
|
4543
4556
|
log5.catch(err, void 0, {
|
|
4544
4557
|
F: __dxlog_file6,
|
|
4545
|
-
L:
|
|
4558
|
+
L: 60,
|
|
4546
4559
|
S: void 0,
|
|
4547
4560
|
C: (f, a) => f(...a)
|
|
4548
4561
|
});
|
|
@@ -4553,7 +4566,7 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4553
4566
|
})
|
|
4554
4567
|
].filter(isNotFalsy5)
|
|
4555
4568
|
});
|
|
4556
|
-
|
|
4569
|
+
view2 = new EditorView16({
|
|
4557
4570
|
parent: parentRef.current,
|
|
4558
4571
|
scrollTo,
|
|
4559
4572
|
state,
|
|
@@ -4569,10 +4582,11 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4569
4582
|
setView(view2);
|
|
4570
4583
|
}
|
|
4571
4584
|
return () => {
|
|
4572
|
-
|
|
4585
|
+
view2?.destroy();
|
|
4573
4586
|
};
|
|
4574
4587
|
}, [
|
|
4575
|
-
parentRef
|
|
4588
|
+
parentRef,
|
|
4589
|
+
extensions
|
|
4576
4590
|
]);
|
|
4577
4591
|
useEffect3(() => {
|
|
4578
4592
|
if (view) {
|
|
@@ -4630,13 +4644,13 @@ var createThemeExtensions = ({ theme, themeMode, slots } = {}) => {
|
|
|
4630
4644
|
|
|
4631
4645
|
// packages/ui/react-ui-editor/src/hooks/useTextModel.ts
|
|
4632
4646
|
import get4 from "lodash.get";
|
|
4633
|
-
import { useState as useState5, useMemo as
|
|
4647
|
+
import { useState as useState5, useMemo as useMemo3 } from "react";
|
|
4634
4648
|
import { generateName } from "@dxos/display-name";
|
|
4635
4649
|
import { getRawDoc } from "@dxos/echo-schema";
|
|
4636
4650
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
4637
4651
|
import { isAutomergeObject } from "@dxos/react-client/echo";
|
|
4638
4652
|
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
|
|
4639
|
-
var useTextModel = (props) =>
|
|
4653
|
+
var useTextModel = (props) => useMemo3(() => createModel(props), Object.values(props));
|
|
4640
4654
|
var useInMemoryTextModel = ({ id, defaultContent }) => {
|
|
4641
4655
|
const [content, setContent] = useState5(defaultContent ?? "");
|
|
4642
4656
|
return {
|