@dxos/react-ui-editor 0.8.2-staging.4d6ad0f → 0.8.2

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.
@@ -62,6 +62,7 @@ __export(node_exports, {
62
62
  closeEffect: () => closeEffect,
63
63
  command: () => command,
64
64
  commandKeyBindings: () => commandKeyBindings,
65
+ commands: () => commands,
65
66
  commentClickedEffect: () => commentClickedEffect,
66
67
  comments: () => comments,
67
68
  commentsState: () => commentsState,
@@ -84,6 +85,7 @@ __export(node_exports, {
84
85
  debugTree: () => debugTree,
85
86
  decorateMarkdown: () => decorateMarkdown,
86
87
  defaultOptions: () => defaultOptions,
88
+ deleteItem: () => deleteItem,
87
89
  documentId: () => documentId,
88
90
  dropFile: () => dropFile,
89
91
  editorGutter: () => editorGutter,
@@ -103,6 +105,8 @@ __export(node_exports, {
103
105
  getListItemContent: () => getListItemContent,
104
106
  getRange: () => getRange,
105
107
  image: () => image,
108
+ indentItemLess: () => indentItemLess,
109
+ indentItemMore: () => indentItemMore,
106
110
  insertTable: () => insertTable,
107
111
  itemToJSON: () => itemToJSON,
108
112
  keymap: () => import_view.keymap,
@@ -115,6 +119,8 @@ __export(node_exports, {
115
119
  markdownTagsExtensions: () => markdownTagsExtensions,
116
120
  matchCompletion: () => matchCompletion,
117
121
  mention: () => mention,
122
+ moveItemDown: () => moveItemDown,
123
+ moveItemUp: () => moveItemUp,
118
124
  openCommand: () => openCommand,
119
125
  openEffect: () => openEffect,
120
126
  outliner: () => outliner,
@@ -151,6 +157,7 @@ __export(node_exports, {
151
157
  toggleStrikethrough: () => toggleStrikethrough,
152
158
  toggleStrong: () => toggleStrong,
153
159
  toggleStyle: () => toggleStyle,
160
+ toggleTask: () => toggleTask,
154
161
  translations: () => translations_default,
155
162
  traverse: () => traverse,
156
163
  treeFacet: () => treeFacet,
@@ -303,18 +310,18 @@ var import_view27 = require("@codemirror/view");
303
310
  var import_codemirror_vim = require("@replit/codemirror-vim");
304
311
  var import_codemirror_vscode_keymap = require("@replit/codemirror-vscode-keymap");
305
312
  var import_effect = require("effect");
306
- var import_state23 = require("@codemirror/state");
307
- var import_view28 = require("@codemirror/view");
308
- var import_react_ui_theme7 = require("@dxos/react-ui-theme");
309
313
  var import_commands4 = require("@codemirror/commands");
310
314
  var import_language13 = require("@codemirror/language");
315
+ var import_state23 = require("@codemirror/state");
316
+ var import_view28 = require("@codemirror/view");
311
317
  var import_state24 = require("@codemirror/state");
312
- var import_view29 = require("@codemirror/view");
313
- var import_state25 = require("@codemirror/state");
314
318
  var import_language14 = require("@codemirror/language");
319
+ var import_state25 = require("@codemirror/state");
315
320
  var import_state26 = require("@codemirror/state");
316
- var import_state27 = require("@codemirror/state");
317
321
  var import_invariant5 = require("@dxos/invariant");
322
+ var import_state27 = require("@codemirror/state");
323
+ var import_view29 = require("@codemirror/view");
324
+ var import_react_ui_theme7 = require("@dxos/react-ui-theme");
318
325
  var import_state28 = require("@codemirror/state");
319
326
  var import_view30 = require("@codemirror/view");
320
327
  var import_log7 = require("@dxos/log");
@@ -1707,20 +1714,24 @@ var floatingMenu = (options = {}) => [
1707
1714
  icon.setAttribute("icon", options.icon ?? "ph--dots-three-outline--regular");
1708
1715
  const button = document.createElement("button");
1709
1716
  button.appendChild(icon);
1710
- button.classList.add("grid", "items-center", "justify-center", "w-8", "h-8");
1711
1717
  this.tag = document.createElement("dx-ref-tag");
1712
- this.tag.classList.add("border-none", "fixed", "p-0");
1718
+ this.tag.classList.add("cm-ref-tag");
1713
1719
  this.tag.appendChild(button);
1714
1720
  container.appendChild(this.tag);
1715
1721
  container.addEventListener("scroll", this.scheduleUpdate.bind(this));
1716
1722
  this.scheduleUpdate();
1717
1723
  }
1718
1724
  update(update2) {
1725
+ this.tag.dataset.focused = update2.view.hasFocus ? "true" : "false";
1726
+ if (!update2.view.hasFocus) {
1727
+ return;
1728
+ }
1719
1729
  if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
1720
1730
  this.tag.style.display = "none";
1731
+ this.tag.classList.add("opacity-10");
1721
1732
  } else if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(closeEffect)))) {
1722
1733
  this.tag.style.display = "block";
1723
- } else if (update2.selectionSet || update2.viewportChanged || update2.docChanged || update2.geometryChanged) {
1734
+ } else if (update2.docChanged || update2.focusChanged || update2.geometryChanged || update2.selectionSet || update2.viewportChanged) {
1724
1735
  this.scheduleUpdate();
1725
1736
  }
1726
1737
  }
@@ -1752,6 +1763,25 @@ var floatingMenu = (options = {}) => [
1752
1763
  cancelAnimationFrame(this.rafId);
1753
1764
  }
1754
1765
  }
1766
+ }),
1767
+ import_view10.EditorView.theme({
1768
+ ".cm-ref-tag": {
1769
+ position: "fixed",
1770
+ padding: "0",
1771
+ border: "none",
1772
+ transition: "opacity 0.3s ease-in-out",
1773
+ opacity: 0.1
1774
+ },
1775
+ ".cm-ref-tag button": {
1776
+ display: "grid",
1777
+ alignItems: "center",
1778
+ justifyContent: "center",
1779
+ width: "2rem",
1780
+ height: "2rem"
1781
+ },
1782
+ '.cm-ref-tag[data-focused="true"]': {
1783
+ opacity: 1
1784
+ }
1755
1785
  })
1756
1786
  ];
1757
1787
  var typeahead = ({ onComplete } = {}) => {
@@ -5344,7 +5374,7 @@ var format = (value) => JSON.stringify(value, (key, value2) => {
5344
5374
  }
5345
5375
  return value2;
5346
5376
  }).replaceAll('"', "");
5347
- var treeFacet = import_state27.Facet.define({
5377
+ var treeFacet = import_state26.Facet.define({
5348
5378
  combine: (values) => values[0]
5349
5379
  });
5350
5380
  var outlinerTree = (options = {}) => {
@@ -5493,7 +5523,7 @@ var outlinerTree = (options = {}) => {
5493
5523
  return tree;
5494
5524
  };
5495
5525
  return [
5496
- import_state26.StateField.define({
5526
+ import_state25.StateField.define({
5497
5527
  create: (state) => {
5498
5528
  return buildTree(state);
5499
5529
  },
@@ -5509,10 +5539,10 @@ var outlinerTree = (options = {}) => {
5509
5539
  };
5510
5540
  var getSelection = (state) => state.selection.main;
5511
5541
  var selectionEquals = (a, b) => a.length === b.length && a.every((i) => b.includes(i));
5512
- var selectionFacet = import_state25.Facet.define({
5542
+ var selectionFacet = import_state24.Facet.define({
5513
5543
  combine: (values) => values[0]
5514
5544
  });
5515
- var selectionCompartment = new import_state25.Compartment();
5545
+ var selectionCompartment = new import_state24.Compartment();
5516
5546
  var selectNone = (view) => {
5517
5547
  view.dispatch({
5518
5548
  effects: selectionCompartment.reconfigure(selectionFacet.of([]))
@@ -5593,7 +5623,7 @@ var moveItemDown = (view) => {
5593
5623
  ];
5594
5624
  view.dispatch({
5595
5625
  changes,
5596
- selection: import_state24.EditorSelection.cursor(pos + nextContent.length + 1),
5626
+ selection: import_state23.EditorSelection.cursor(pos + nextContent.length + 1),
5597
5627
  scrollIntoView: true
5598
5628
  });
5599
5629
  }
@@ -5621,15 +5651,32 @@ var moveItemUp = (view) => {
5621
5651
  ];
5622
5652
  view.dispatch({
5623
5653
  changes,
5624
- selection: import_state24.EditorSelection.cursor(pos - prevContent.length - 1),
5654
+ selection: import_state23.EditorSelection.cursor(pos - prevContent.length - 1),
5625
5655
  scrollIntoView: true
5626
5656
  });
5627
5657
  }
5628
5658
  return true;
5629
5659
  };
5660
+ var deleteItem = (view) => {
5661
+ const tree = view.state.facet(treeFacet);
5662
+ const pos = getSelection(view.state).from;
5663
+ const current = tree.find(pos);
5664
+ if (current) {
5665
+ view.dispatch({
5666
+ selection: import_state23.EditorSelection.cursor(current.lineRange.from),
5667
+ changes: [
5668
+ {
5669
+ from: current.lineRange.from,
5670
+ to: Math.min(current.lineRange.to + 1, view.state.doc.length)
5671
+ }
5672
+ ]
5673
+ });
5674
+ }
5675
+ return true;
5676
+ };
5630
5677
  var toggleTask = (view) => {
5631
- const pos = getSelection(view.state)?.from;
5632
5678
  const tree = view.state.facet(treeFacet);
5679
+ const pos = getSelection(view.state)?.from;
5633
5680
  const current = tree.find(pos);
5634
5681
  if (current) {
5635
5682
  const type = current.type === "task" ? "bullet" : "task";
@@ -5646,7 +5693,7 @@ var toggleTask = (view) => {
5646
5693
  }
5647
5694
  return true;
5648
5695
  };
5649
- var commands = () => import_view29.keymap.of([
5696
+ var commands = () => import_view28.keymap.of([
5650
5697
  //
5651
5698
  // Indentation.
5652
5699
  //
@@ -5672,7 +5719,7 @@ var commands = () => import_view29.keymap.of([
5672
5719
  insert
5673
5720
  }
5674
5721
  ],
5675
- selection: import_state24.EditorSelection.cursor(pos + insert.length)
5722
+ selection: import_state23.EditorSelection.cursor(pos + insert.length)
5676
5723
  });
5677
5724
  return true;
5678
5725
  }
@@ -5690,7 +5737,7 @@ var commands = () => import_view29.keymap.of([
5690
5737
  const next = tree.next(item);
5691
5738
  if (next) {
5692
5739
  view.dispatch({
5693
- selection: import_state24.EditorSelection.cursor(next.contentRange.from)
5740
+ selection: import_state23.EditorSelection.cursor(next.contentRange.from)
5694
5741
  });
5695
5742
  return true;
5696
5743
  }
@@ -5734,10 +5781,19 @@ var commands = () => import_view29.keymap.of([
5734
5781
  run: moveItemUp
5735
5782
  },
5736
5783
  //
5784
+ // Delete.
5785
+ //
5786
+ {
5787
+ key: "Mod-Backspace",
5788
+ preventDefault: true,
5789
+ run: deleteItem
5790
+ },
5791
+ //
5737
5792
  // Misc.
5738
5793
  //
5739
5794
  {
5740
5795
  key: "Alt-t",
5796
+ preventDefault: true,
5741
5797
  run: toggleTask
5742
5798
  }
5743
5799
  ]);
@@ -5830,6 +5886,12 @@ var editor = () => [
5830
5886
  const line = tr.startState.doc.lineAt(fromA);
5831
5887
  const match = line.text.match(LIST_ITEM_REGEX);
5832
5888
  if (match) {
5889
+ const startTree = tr.startState.facet(treeFacet);
5890
+ const startItem = startTree.find(tr.startState.selection.main.from);
5891
+ const deleteLine = fromA === startItem?.lineRange.from && toA === startItem?.lineRange.to + 1;
5892
+ if (deleteLine) {
5893
+ return;
5894
+ }
5833
5895
  const currentItem = tree.find(tr.state.selection.main.from);
5834
5896
  if (!currentItem?.contentRange) {
5835
5897
  cancel = true;
@@ -5887,7 +5949,7 @@ var editor = () => [
5887
5949
  }
5888
5950
  }, {
5889
5951
  F: __dxlog_file12,
5890
- L: 160,
5952
+ L: 164,
5891
5953
  S: void 0,
5892
5954
  C: (f, a) => f(...a)
5893
5955
  });
@@ -5898,7 +5960,7 @@ var editor = () => [
5898
5960
  changes
5899
5961
  }, {
5900
5962
  F: __dxlog_file12,
5901
- L: 171,
5963
+ L: 175,
5902
5964
  S: void 0,
5903
5965
  C: (f, a) => f(...a)
5904
5966
  });
@@ -5910,7 +5972,7 @@ var editor = () => [
5910
5972
  } else if (cancel) {
5911
5973
  (0, import_log7.log)("cancel", void 0, {
5912
5974
  F: __dxlog_file12,
5913
- L: 174,
5975
+ L: 178,
5914
5976
  S: void 0,
5915
5977
  C: (f, a) => f(...a)
5916
5978
  });
@@ -5919,9 +5981,9 @@ var editor = () => [
5919
5981
  return tr;
5920
5982
  })
5921
5983
  ];
5922
- var outliner = () => [
5984
+ var outliner = (options = {}) => [
5923
5985
  // Commands.
5924
- import_state23.Prec.highest(commands()),
5986
+ import_state27.Prec.highest(commands()),
5925
5987
  // Selection.
5926
5988
  selectionCompartment.of(selectionFacet.of([])),
5927
5989
  // State.
@@ -5931,20 +5993,20 @@ var outliner = () => [
5931
5993
  // Floating menu.
5932
5994
  floatingMenu(),
5933
5995
  // Line decorations.
5934
- decorations(),
5996
+ decorations(options),
5935
5997
  // Default markdown decorations.
5936
5998
  decorateMarkdown({
5937
5999
  listPaddingLeft: 8
5938
6000
  }),
5939
6001
  // Researve space for menu.
5940
- import_view28.EditorView.contentAttributes.of({
6002
+ import_view29.EditorView.contentAttributes.of({
5941
6003
  class: "is-full !mr-[3rem]"
5942
6004
  })
5943
6005
  ];
5944
- var decorations = () => [
5945
- import_view28.ViewPlugin.fromClass(class {
6006
+ var decorations = (options) => [
6007
+ import_view29.ViewPlugin.fromClass(class {
5946
6008
  constructor(view) {
5947
- this.decorations = import_view28.Decoration.none;
6009
+ this.decorations = import_view29.Decoration.none;
5948
6010
  this.updateDecorations(view.state, view);
5949
6011
  }
5950
6012
  update(update2) {
@@ -5966,18 +6028,18 @@ var decorations = () => [
5966
6028
  const lineFrom = doc.lineAt(item.contentRange.from);
5967
6029
  const lineTo = doc.lineAt(item.contentRange.to);
5968
6030
  const isSelected = selection.includes(item.index) || item === current;
5969
- decorations2.push(import_view28.Decoration.line({
6031
+ decorations2.push(import_view29.Decoration.line({
5970
6032
  class: (0, import_react_ui_theme7.mx)("cm-list-item", lineFrom.number === line.number && "cm-list-item-start", lineTo.number === line.number && "cm-list-item-end", isSelected && (hasFocus ? "cm-list-item-focused" : "cm-list-item-selected"))
5971
6033
  }).range(line.from, line.from));
5972
6034
  }
5973
6035
  }
5974
- this.decorations = import_view28.Decoration.set(decorations2);
6036
+ this.decorations = import_view29.Decoration.set(decorations2);
5975
6037
  }
5976
6038
  }, {
5977
6039
  decorations: (v) => v.decorations
5978
6040
  }),
5979
6041
  // Theme.
5980
- import_view28.EditorView.theme({
6042
+ import_view29.EditorView.theme(Object.assign({
5981
6043
  ".cm-list-item": {
5982
6044
  borderLeftWidth: "1px",
5983
6045
  borderRightWidth: "1px",
@@ -5992,22 +6054,22 @@ var decorations = () => [
5992
6054
  borderTopLeftRadius: "4px",
5993
6055
  borderTopRightRadius: "4px",
5994
6056
  paddingTop: "4px",
5995
- marginTop: "8px"
6057
+ marginTop: "2px"
5996
6058
  },
5997
6059
  ".cm-list-item-end": {
5998
6060
  borderBottomWidth: "1px",
5999
6061
  borderBottomLeftRadius: "4px",
6000
6062
  borderBottomRightRadius: "4px",
6001
6063
  paddingBottom: "4px",
6002
- marginBottom: "8px"
6064
+ marginBottom: "2px"
6003
6065
  },
6004
6066
  ".cm-list-item-selected": {
6005
- borderColor: "var(--dx-separator)"
6067
+ borderColor: options.showSelected ? "var(--dx-separator)" : void 0
6006
6068
  },
6007
6069
  ".cm-list-item-focused": {
6008
6070
  borderColor: "var(--dx-accentFocusIndicator)"
6009
6071
  }
6010
- })
6072
+ }))
6011
6073
  ];
6012
6074
  var preview = (options = {}) => {
6013
6075
  return [
@@ -6922,6 +6984,7 @@ var useTextEditor = (props = {}, deps = []) => {
6922
6984
  closeEffect,
6923
6985
  command,
6924
6986
  commandKeyBindings,
6987
+ commands,
6925
6988
  commentClickedEffect,
6926
6989
  comments,
6927
6990
  commentsState,
@@ -6944,6 +7007,7 @@ var useTextEditor = (props = {}, deps = []) => {
6944
7007
  debugTree,
6945
7008
  decorateMarkdown,
6946
7009
  defaultOptions,
7010
+ deleteItem,
6947
7011
  documentId,
6948
7012
  dropFile,
6949
7013
  editorGutter,
@@ -6963,6 +7027,8 @@ var useTextEditor = (props = {}, deps = []) => {
6963
7027
  getListItemContent,
6964
7028
  getRange,
6965
7029
  image,
7030
+ indentItemLess,
7031
+ indentItemMore,
6966
7032
  insertTable,
6967
7033
  itemToJSON,
6968
7034
  keymap,
@@ -6975,6 +7041,8 @@ var useTextEditor = (props = {}, deps = []) => {
6975
7041
  markdownTagsExtensions,
6976
7042
  matchCompletion,
6977
7043
  mention,
7044
+ moveItemDown,
7045
+ moveItemUp,
6978
7046
  openCommand,
6979
7047
  openEffect,
6980
7048
  outliner,
@@ -7011,6 +7079,7 @@ var useTextEditor = (props = {}, deps = []) => {
7011
7079
  toggleStrikethrough,
7012
7080
  toggleStrong,
7013
7081
  toggleStyle,
7082
+ toggleTask,
7014
7083
  translations,
7015
7084
  traverse,
7016
7085
  treeFacet,