@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.
- package/dist/lib/browser/index.mjs +139 -77
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +105 -36
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +139 -77
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/extensions/command/menu.d.ts +1 -10
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/commands.d.ts +1 -0
- package/dist/types/src/extensions/outliner/commands.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/editor.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/index.d.ts +1 -0
- package/dist/types/src/extensions/outliner/index.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts +4 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
- package/package.json +27 -27
- package/src/extensions/command/menu.ts +35 -4
- package/src/extensions/outliner/commands.ts +29 -1
- package/src/extensions/outliner/editor.ts +7 -3
- package/src/extensions/outliner/index.ts +1 -0
- package/src/extensions/outliner/outliner.test.ts +2 -2
- package/src/extensions/outliner/outliner.ts +43 -37
package/dist/lib/node/index.cjs
CHANGED
@@ -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("
|
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.
|
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 =
|
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
|
-
|
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 =
|
5542
|
+
var selectionFacet = import_state24.Facet.define({
|
5513
5543
|
combine: (values) => values[0]
|
5514
5544
|
});
|
5515
|
-
var selectionCompartment = new
|
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:
|
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:
|
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 = () =>
|
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:
|
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:
|
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:
|
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:
|
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:
|
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
|
-
|
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
|
-
|
6002
|
+
import_view29.EditorView.contentAttributes.of({
|
5941
6003
|
class: "is-full !mr-[3rem]"
|
5942
6004
|
})
|
5943
6005
|
];
|
5944
|
-
var decorations = () => [
|
5945
|
-
|
6006
|
+
var decorations = (options) => [
|
6007
|
+
import_view29.ViewPlugin.fromClass(class {
|
5946
6008
|
constructor(view) {
|
5947
|
-
this.decorations =
|
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(
|
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 =
|
6036
|
+
this.decorations = import_view29.Decoration.set(decorations2);
|
5975
6037
|
}
|
5976
6038
|
}, {
|
5977
6039
|
decorations: (v) => v.decorations
|
5978
6040
|
}),
|
5979
6041
|
// Theme.
|
5980
|
-
|
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: "
|
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: "
|
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,
|