@dxos/react-ui-editor 0.4.3-main.a51bbee → 0.4.3-main.c13b549

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