@dxos/react-ui-editor 0.4.3-main.38898ae → 0.4.3-main.8e6b19e
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 +57 -27
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +3 -0
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.d.ts +0 -3
- package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +1 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/modes.d.ts +11 -0
- package/dist/types/src/extensions/modes.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/package.json +24 -24
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +10 -1
- package/src/components/TextEditor/TextEditor.tsx +29 -50
- package/src/extensions/index.ts +1 -0
- package/src/extensions/modes.ts +36 -0
- package/src/index.ts +3 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// packages/ui/react-ui-editor/src/index.ts
|
|
2
|
+
import { keymap as keymap8 } from "@codemirror/view";
|
|
2
3
|
import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
|
|
3
4
|
import { Doc, YText, YXmlFragment } from "@dxos/text-model";
|
|
4
|
-
import { keymap as keymap7 } from "@codemirror/view";
|
|
5
5
|
|
|
6
6
|
// packages/ui/react-ui-editor/src/components/TextEditor/index.ts
|
|
7
7
|
import { tags as tags2 } from "@lezer/highlight";
|
|
@@ -9,7 +9,7 @@ import { tags as tags2 } from "@lezer/highlight";
|
|
|
9
9
|
// packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
|
|
10
10
|
import { EditorState as EditorState2 } from "@codemirror/state";
|
|
11
11
|
import { EditorView as EditorView15 } from "@codemirror/view";
|
|
12
|
-
import {
|
|
12
|
+
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
13
13
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
|
14
14
|
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2 } from "react";
|
|
15
15
|
import { log as log2 } from "@dxos/log";
|
|
@@ -3517,13 +3517,42 @@ var mention = ({ onSearch }) => {
|
|
|
3517
3517
|
});
|
|
3518
3518
|
};
|
|
3519
3519
|
|
|
3520
|
+
// packages/ui/react-ui-editor/src/extensions/modes.ts
|
|
3521
|
+
import { Facet as Facet4 } from "@codemirror/state";
|
|
3522
|
+
import { keymap as keymap6 } from "@codemirror/view";
|
|
3523
|
+
import { vim } from "@replit/codemirror-vim";
|
|
3524
|
+
var editorMode = Facet4.define({
|
|
3525
|
+
combine: (modes) => modes[0] ?? {}
|
|
3526
|
+
});
|
|
3527
|
+
var EditorModes = {
|
|
3528
|
+
default: [],
|
|
3529
|
+
vim: [
|
|
3530
|
+
vim(),
|
|
3531
|
+
editorMode.of({
|
|
3532
|
+
type: "vim",
|
|
3533
|
+
noTabster: true
|
|
3534
|
+
}),
|
|
3535
|
+
keymap6.of([
|
|
3536
|
+
{
|
|
3537
|
+
key: "Alt-Escape",
|
|
3538
|
+
run: (view) => {
|
|
3539
|
+
view.dispatch({
|
|
3540
|
+
userEvent: "focus.container"
|
|
3541
|
+
});
|
|
3542
|
+
return true;
|
|
3543
|
+
}
|
|
3544
|
+
}
|
|
3545
|
+
])
|
|
3546
|
+
]
|
|
3547
|
+
};
|
|
3548
|
+
|
|
3520
3549
|
// packages/ui/react-ui-editor/src/extensions/outliner.ts
|
|
3521
3550
|
var outliner = (options = {}) => {
|
|
3522
3551
|
return [];
|
|
3523
3552
|
};
|
|
3524
3553
|
|
|
3525
3554
|
// packages/ui/react-ui-editor/src/extensions/typewriter.ts
|
|
3526
|
-
import { keymap as
|
|
3555
|
+
import { keymap as keymap7 } from "@codemirror/view";
|
|
3527
3556
|
var defaultItems = [
|
|
3528
3557
|
"hello world!",
|
|
3529
3558
|
"this is a test.",
|
|
@@ -3533,7 +3562,7 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
|
3533
3562
|
let t;
|
|
3534
3563
|
let idx = 0;
|
|
3535
3564
|
return [
|
|
3536
|
-
|
|
3565
|
+
keymap7.of([
|
|
3537
3566
|
{
|
|
3538
3567
|
// Reset.
|
|
3539
3568
|
key: "alt-meta-'",
|
|
@@ -3821,11 +3850,10 @@ var codeTheme = {
|
|
|
3821
3850
|
|
|
3822
3851
|
// packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
|
|
3823
3852
|
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
|
|
3824
|
-
var
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, editorMode, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
|
|
3853
|
+
var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
|
|
3854
|
+
const tabsterDOMAttribute = useFocusableGroup({
|
|
3855
|
+
tabBehavior: "limited"
|
|
3856
|
+
});
|
|
3829
3857
|
const { themeMode } = useThemeContext();
|
|
3830
3858
|
const rootRef = useRef(null);
|
|
3831
3859
|
const [view, setView] = useState2(null);
|
|
@@ -3860,7 +3888,7 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3860
3888
|
EditorView15.exceptionSink.of((err) => {
|
|
3861
3889
|
log2.catch(err, void 0, {
|
|
3862
3890
|
F: __dxlog_file3,
|
|
3863
|
-
L:
|
|
3891
|
+
L: 112,
|
|
3864
3892
|
S: void 0,
|
|
3865
3893
|
C: (f, a) => f(...a)
|
|
3866
3894
|
});
|
|
@@ -3876,14 +3904,20 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3876
3904
|
EditorView15.contentAttributes.of({
|
|
3877
3905
|
class: slots.content?.className ?? ""
|
|
3878
3906
|
}),
|
|
3907
|
+
// Focus.
|
|
3908
|
+
EditorView15.updateListener.of((update2) => {
|
|
3909
|
+
update2.transactions.forEach((transaction) => {
|
|
3910
|
+
if (transaction.isUserEvent("focus.container")) {
|
|
3911
|
+
rootRef.current?.focus();
|
|
3912
|
+
}
|
|
3913
|
+
});
|
|
3914
|
+
}),
|
|
3879
3915
|
// State.
|
|
3880
3916
|
EditorView15.editable.of(!readonly),
|
|
3881
3917
|
EditorState2.readOnly.of(!!readonly),
|
|
3882
3918
|
// Storage and replication.
|
|
3883
3919
|
// NOTE: This must come before user extensions.
|
|
3884
3920
|
model.extension,
|
|
3885
|
-
// TODO(burdon): Factor out? (Requires special handling for Escape/Enter below).
|
|
3886
|
-
editorMode === "vim" && vim(),
|
|
3887
3921
|
// Custom.
|
|
3888
3922
|
...extensions
|
|
3889
3923
|
].filter(isNotFalsy4)
|
|
@@ -3903,6 +3937,9 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3903
3937
|
});
|
|
3904
3938
|
view?.destroy();
|
|
3905
3939
|
setView(newView);
|
|
3940
|
+
if (state.facet(editorMode).noTabster) {
|
|
3941
|
+
rootRef.current.removeAttribute("data-tabster");
|
|
3942
|
+
}
|
|
3906
3943
|
return () => {
|
|
3907
3944
|
newView?.destroy();
|
|
3908
3945
|
setView(null);
|
|
@@ -3911,35 +3948,27 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3911
3948
|
rootRef,
|
|
3912
3949
|
model,
|
|
3913
3950
|
readonly,
|
|
3914
|
-
editorMode,
|
|
3915
3951
|
themeMode
|
|
3916
3952
|
]);
|
|
3917
3953
|
const handleKeyUp = useCallback((event) => {
|
|
3918
|
-
const { key
|
|
3954
|
+
const { key } = event;
|
|
3919
3955
|
switch (key) {
|
|
3920
3956
|
case "Enter": {
|
|
3921
3957
|
view?.focus();
|
|
3922
3958
|
break;
|
|
3923
3959
|
}
|
|
3924
|
-
case "Escape": {
|
|
3925
|
-
if (editorMode === "vim" && (altKey || shiftKey || metaKey || ctrlKey)) {
|
|
3926
|
-
view?.focus();
|
|
3927
|
-
}
|
|
3928
|
-
break;
|
|
3929
|
-
}
|
|
3930
3960
|
}
|
|
3931
3961
|
}, [
|
|
3932
|
-
view
|
|
3933
|
-
editorMode
|
|
3962
|
+
view
|
|
3934
3963
|
]);
|
|
3935
3964
|
return /* @__PURE__ */ React.createElement("div", {
|
|
3936
|
-
key: model.id,
|
|
3937
3965
|
role: "none",
|
|
3966
|
+
ref: rootRef,
|
|
3967
|
+
key: model.id,
|
|
3938
3968
|
tabIndex: 0,
|
|
3939
|
-
...slots.root,
|
|
3940
|
-
// {...(editorMode !== 'vim' && tabsterDOMAttribute)}
|
|
3941
3969
|
onKeyUp: handleKeyUp,
|
|
3942
|
-
|
|
3970
|
+
...slots.root,
|
|
3971
|
+
...tabsterDOMAttribute
|
|
3943
3972
|
});
|
|
3944
3973
|
});
|
|
3945
3974
|
var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, lineWrapping, theme = textTheme, slots, extensions = [], ...props }, forwardedRef) => {
|
|
@@ -4643,6 +4672,7 @@ export {
|
|
|
4643
4672
|
defaultSlots,
|
|
4644
4673
|
defaultTextSlots,
|
|
4645
4674
|
defaultTheme,
|
|
4675
|
+
editorMode,
|
|
4646
4676
|
editorWithToolbarLayout,
|
|
4647
4677
|
focusComment,
|
|
4648
4678
|
formatting,
|
|
@@ -4652,7 +4682,7 @@ export {
|
|
|
4652
4682
|
hr,
|
|
4653
4683
|
image,
|
|
4654
4684
|
insertTable,
|
|
4655
|
-
|
|
4685
|
+
keymap8 as keymap,
|
|
4656
4686
|
link,
|
|
4657
4687
|
listener,
|
|
4658
4688
|
logChanges,
|