@dxos/plugin-sheet 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446
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/{SheetContainer-UV7RMPXS.mjs → SheetContainer-B3A5443Z.mjs} +88 -90
- package/dist/lib/browser/SheetContainer-B3A5443Z.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TN7LTDHU.mjs → chunk-CHMPICA6.mjs} +75 -86
- package/dist/lib/browser/chunk-CHMPICA6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-N2FOQHUH.mjs → chunk-ZOKEQL2K.mjs} +50 -51
- package/dist/lib/browser/chunk-ZOKEQL2K.mjs.map +7 -0
- package/dist/lib/browser/{compute-graph-registry-MBJKPAHX.mjs → compute-graph-registry-WEJLJJ6T.mjs} +2 -2
- package/dist/lib/browser/compute-graph-registry-WEJLJJ6T.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +8 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-DN7JXDAV.mjs → intent-resolver-6OUEM3IG.mjs} +2 -2
- package/dist/lib/browser/{markdown-57MKY5WB.mjs → markdown-DR4RDEEY.mjs} +2 -2
- package/dist/lib/browser/markdown-DR4RDEEY.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-NQU63B63.mjs → react-surface-ECKBP3UZ.mjs} +3 -3
- package/dist/lib/browser/{thread-WU64QL2A.mjs → thread-76MK2FMV.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{SheetContainer-GR2KDOAE.cjs → SheetContainer-LGRD3TTQ.cjs} +102 -106
- package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs.map +7 -0
- package/dist/lib/node/{chunk-CN7OBGYV.cjs → chunk-AEH3L5QZ.cjs} +84 -95
- package/dist/lib/node/chunk-AEH3L5QZ.cjs.map +7 -0
- package/dist/lib/node/{chunk-HLSQVT3C.cjs → chunk-D4MOMCEU.cjs} +65 -66
- package/dist/lib/node/chunk-D4MOMCEU.cjs.map +7 -0
- package/dist/lib/node/{compute-graph-registry-EBBDN6ZX.cjs → compute-graph-registry-VVSRJUGS.cjs} +5 -5
- package/dist/lib/node/compute-graph-registry-VVSRJUGS.cjs.map +7 -0
- package/dist/lib/node/index.cjs +12 -12
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-OPF56TAL.cjs → intent-resolver-ICHNDL6F.cjs} +9 -9
- package/dist/lib/node/{markdown-Q3RXYPHQ.cjs → markdown-E7OUIMZO.cjs} +5 -5
- package/dist/lib/node/markdown-E7OUIMZO.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-7SAA5DX3.cjs → react-surface-6PBWE75L.cjs} +11 -11
- package/dist/lib/node/{thread-E7YPGR5T.cjs → thread-WP43BC4N.cjs} +7 -7
- package/dist/lib/node/types/index.cjs +29 -29
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-XW7B2AJI.mjs → SheetContainer-4FNTLG5R.mjs} +88 -90
- package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LYZV4Q4C.mjs → chunk-6NB67Y6X.mjs} +50 -51
- package/dist/lib/node-esm/chunk-6NB67Y6X.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3JJ7ETTJ.mjs → chunk-WQHYR4WD.mjs} +75 -86
- package/dist/lib/node-esm/chunk-WQHYR4WD.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-registry-TVG6RN2J.mjs → compute-graph-registry-PBQ52KH6.mjs} +2 -2
- package/dist/lib/node-esm/compute-graph-registry-PBQ52KH6.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +8 -8
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-7AN5CN4R.mjs → intent-resolver-2JNQCFCI.mjs} +2 -2
- package/dist/lib/node-esm/{markdown-ACHAWUOE.mjs → markdown-BPKS2TNG.mjs} +2 -2
- package/dist/lib/node-esm/markdown-BPKS2TNG.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-BPNN7RSE.mjs → react-surface-UM2Y3ZWZ.mjs} +3 -3
- package/dist/lib/node-esm/{thread-ULESW6IX.mjs → thread-4NCPE5FK.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/capabilities/compute-graph-registry.d.ts +2 -2
- package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +2 -2
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +2 -2
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -3
- package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/align.d.ts +1 -4
- package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/comment.d.ts +1 -3
- package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/style.d.ts +1 -3
- package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +8 -0
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +1 -0
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +1 -1
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +6 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/extensions/compute.d.ts.map +1 -1
- package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
- package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
- package/dist/types/src/model/testing.d.ts.map +1 -1
- package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
- package/dist/types/src/testing/data.d.ts.map +1 -1
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +54 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +144 -239
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +36 -36
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/types/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +47 -53
- package/src/capabilities/compute-graph-registry.ts +3 -3
- package/src/capabilities/markdown.ts +3 -3
- package/src/components/ComputeGraph/compute-graph.stories.tsx +4 -4
- package/src/components/FunctionEditor/FunctionEditor.tsx +1 -1
- package/src/components/GridSheet/GridSheet.stories.tsx +2 -5
- package/src/components/GridSheet/GridSheet.tsx +12 -18
- package/src/components/GridSheet/SheetCellEditor.stories.tsx +2 -2
- package/src/components/GridSheet/util.ts +2 -7
- package/src/components/RangeList/RangeList.tsx +2 -2
- package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -1
- package/src/components/SheetContainer/SheetContainer.tsx +7 -4
- package/src/components/SheetToolbar/SheetToolbar.stories.tsx +1 -1
- package/src/components/SheetToolbar/SheetToolbar.tsx +8 -33
- package/src/components/SheetToolbar/align.ts +14 -44
- package/src/components/SheetToolbar/comment.ts +11 -39
- package/src/components/SheetToolbar/style.ts +12 -48
- package/src/components/SheetToolbar/useToolbarAction.ts +87 -0
- package/src/components/SheetToolbar/useToolbarState.ts +2 -2
- package/src/integrations/thread-ranges.ts +3 -2
- package/src/model/sheet-model.test.ts +1 -1
- package/src/sanity.test.ts +3 -3
- package/src/serializer.ts +2 -2
- package/src/types/schema.ts +19 -21
- package/src/types/types.ts +25 -25
- package/src/types/util.ts +2 -2
- package/dist/lib/browser/SheetContainer-UV7RMPXS.mjs.map +0 -7
- package/dist/lib/browser/chunk-N2FOQHUH.mjs.map +0 -7
- package/dist/lib/browser/chunk-TN7LTDHU.mjs.map +0 -7
- package/dist/lib/browser/compute-graph-registry-MBJKPAHX.mjs.map +0 -7
- package/dist/lib/browser/markdown-57MKY5WB.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-GR2KDOAE.cjs.map +0 -7
- package/dist/lib/node/chunk-CN7OBGYV.cjs.map +0 -7
- package/dist/lib/node/chunk-HLSQVT3C.cjs.map +0 -7
- package/dist/lib/node/compute-graph-registry-EBBDN6ZX.cjs.map +0 -7
- package/dist/lib/node/markdown-Q3RXYPHQ.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-XW7B2AJI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3JJ7ETTJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LYZV4Q4C.mjs.map +0 -7
- package/dist/lib/node-esm/compute-graph-registry-TVG6RN2J.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-ACHAWUOE.mjs.map +0 -7
- /package/dist/lib/browser/{intent-resolver-DN7JXDAV.mjs.map → intent-resolver-6OUEM3IG.mjs.map} +0 -0
- /package/dist/lib/browser/{react-surface-NQU63B63.mjs.map → react-surface-ECKBP3UZ.mjs.map} +0 -0
- /package/dist/lib/browser/{thread-WU64QL2A.mjs.map → thread-76MK2FMV.mjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-OPF56TAL.cjs.map → intent-resolver-ICHNDL6F.cjs.map} +0 -0
- /package/dist/lib/node/{react-surface-7SAA5DX3.cjs.map → react-surface-6PBWE75L.cjs.map} +0 -0
- /package/dist/lib/node/{thread-E7YPGR5T.cjs.map → thread-WP43BC4N.cjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-7AN5CN4R.mjs.map → intent-resolver-2JNQCFCI.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-surface-BPNN7RSE.mjs.map → react-surface-UM2Y3ZWZ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{thread-ULESW6IX.mjs.map → thread-4NCPE5FK.mjs.map} +0 -0
|
@@ -26,14 +26,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var SheetContainer_LGRD3TTQ_exports = {};
|
|
30
|
+
__export(SheetContainer_LGRD3TTQ_exports, {
|
|
31
31
|
default: () => SheetContainer_default
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
33
|
+
module.exports = __toCommonJS(SheetContainer_LGRD3TTQ_exports);
|
|
34
|
+
var import_chunk_AEH3L5QZ = require("./chunk-AEH3L5QZ.cjs");
|
|
35
35
|
var import_chunk_LEV7OSTK = require("./chunk-LEV7OSTK.cjs");
|
|
36
|
-
var
|
|
36
|
+
var import_chunk_D4MOMCEU = require("./chunk-D4MOMCEU.cjs");
|
|
37
37
|
var import_chunk_JSIDCZHB = require("./chunk-JSIDCZHB.cjs");
|
|
38
38
|
var import_react = __toESM(require("react"));
|
|
39
39
|
var import_echo = require("@dxos/react-client/echo");
|
|
@@ -42,8 +42,6 @@ var import_react2 = __toESM(require("react"));
|
|
|
42
42
|
var import_compute = require("@dxos/compute");
|
|
43
43
|
var import_react_ui = require("@dxos/react-ui");
|
|
44
44
|
var import_react3 = __toESM(require("react"));
|
|
45
|
-
var import_app_framework = require("@dxos/app-framework");
|
|
46
|
-
var import_types = require("@dxos/plugin-thread/types");
|
|
47
45
|
var import_react_ui_menu = require("@dxos/react-ui-menu");
|
|
48
46
|
var import_react4 = require("react");
|
|
49
47
|
var import_compute2 = require("@dxos/compute");
|
|
@@ -55,22 +53,26 @@ var import_react6 = require("react");
|
|
|
55
53
|
var import_compute3 = require("@dxos/compute");
|
|
56
54
|
var import_react_ui_menu4 = require("@dxos/react-ui-menu");
|
|
57
55
|
var import_react7 = require("react");
|
|
56
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
57
|
+
var import_compute4 = require("@dxos/compute");
|
|
58
|
+
var import_types = require("@dxos/plugin-thread/types");
|
|
59
|
+
var import_react8 = require("react");
|
|
58
60
|
var import_live_object2 = require("@dxos/live-object");
|
|
59
61
|
var FunctionEditor = () => {
|
|
60
|
-
const { model, cursor, range } = (0,
|
|
62
|
+
const { model, cursor, range } = (0, import_chunk_AEH3L5QZ.useSheetContext)();
|
|
61
63
|
let value;
|
|
62
64
|
let formula = false;
|
|
63
65
|
if (cursor) {
|
|
64
66
|
value = model.getCellValue(cursor);
|
|
65
67
|
if ((0, import_compute.isFormula)(value)) {
|
|
66
|
-
value = model.graph.mapFunctionBindingFromId((0,
|
|
68
|
+
value = model.graph.mapFunctionBindingFromId((0, import_chunk_D4MOMCEU.mapFormulaIndicesToRefs)(model.sheet, value));
|
|
67
69
|
formula = true;
|
|
68
70
|
} else if (value != null) {
|
|
69
71
|
value = String(value);
|
|
70
72
|
}
|
|
71
73
|
}
|
|
72
74
|
return /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
73
|
-
className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm
|
|
75
|
+
className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator"
|
|
74
76
|
}, /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
75
77
|
className: "flex gap-4 items-center"
|
|
76
78
|
}, /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
@@ -93,9 +95,9 @@ var aligns = {
|
|
|
93
95
|
end: "ph--text-align-right--regular"
|
|
94
96
|
};
|
|
95
97
|
var useAlignState = (state) => {
|
|
96
|
-
const { cursor, model } = (0,
|
|
98
|
+
const { cursor, model } = (0, import_chunk_AEH3L5QZ.useSheetContext)();
|
|
97
99
|
(0, import_react4.useEffect)(() => {
|
|
98
|
-
state[
|
|
100
|
+
state[import_chunk_D4MOMCEU.alignKey] = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === import_chunk_D4MOMCEU.alignKey && (0, import_compute2.inRange)((0, import_chunk_D4MOMCEU.rangeFromIndex)(model.sheet, range), cursor))?.value : void 0;
|
|
99
101
|
}, [
|
|
100
102
|
cursor,
|
|
101
103
|
model.sheet
|
|
@@ -110,33 +112,13 @@ var createAlignGroupAction = (value) => (0, import_react_ui_menu2.createMenuItem
|
|
|
110
112
|
],
|
|
111
113
|
variant: "toggleGroup",
|
|
112
114
|
selectCardinality: "single",
|
|
113
|
-
value: `${
|
|
115
|
+
value: `${import_chunk_D4MOMCEU.alignKey}--${value}`
|
|
114
116
|
});
|
|
115
|
-
var createAlignActions = (
|
|
116
|
-
return (0, import_react_ui_menu2.createMenuAction)(`${
|
|
117
|
-
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const index = model.sheet.ranges?.findIndex((range) => range.key === import_chunk_HLSQVT3C.alignKey && (0, import_compute2.inRange)((0, import_chunk_HLSQVT3C.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
121
|
-
const nextRangeEntity = {
|
|
122
|
-
range: (0, import_chunk_HLSQVT3C.rangeToIndex)(model.sheet, cursorFallbackRange),
|
|
123
|
-
key: import_chunk_HLSQVT3C.alignKey,
|
|
124
|
-
value: alignValue
|
|
125
|
-
};
|
|
126
|
-
if (index < 0) {
|
|
127
|
-
model.sheet.ranges?.push(nextRangeEntity);
|
|
128
|
-
state[import_chunk_HLSQVT3C.alignKey] = nextRangeEntity.value;
|
|
129
|
-
} else if (model.sheet.ranges[index].value === nextRangeEntity.value) {
|
|
130
|
-
model.sheet.ranges?.splice(index, 1);
|
|
131
|
-
state[import_chunk_HLSQVT3C.alignKey] = void 0;
|
|
132
|
-
} else {
|
|
133
|
-
model.sheet.ranges?.splice(index, 1, nextRangeEntity);
|
|
134
|
-
state[import_chunk_HLSQVT3C.alignKey] = nextRangeEntity.value;
|
|
135
|
-
}
|
|
136
|
-
}, {
|
|
137
|
-
key: import_chunk_HLSQVT3C.alignKey,
|
|
117
|
+
var createAlignActions = (value) => Object.entries(aligns).map(([alignValue, icon]) => {
|
|
118
|
+
return (0, import_react_ui_menu2.createMenuAction)(`${import_chunk_D4MOMCEU.alignKey}--${alignValue}`, {
|
|
119
|
+
key: import_chunk_D4MOMCEU.alignKey,
|
|
138
120
|
value: alignValue,
|
|
139
|
-
checked:
|
|
121
|
+
checked: value === alignValue,
|
|
140
122
|
label: [
|
|
141
123
|
`range value ${alignValue} label`,
|
|
142
124
|
{
|
|
@@ -144,12 +126,12 @@ var createAlignActions = (model, state, cursorFallbackRange) => Object.entries(a
|
|
|
144
126
|
}
|
|
145
127
|
],
|
|
146
128
|
icon,
|
|
147
|
-
testId: `grid.toolbar.${
|
|
129
|
+
testId: `grid.toolbar.${import_chunk_D4MOMCEU.alignKey}.${alignValue}`
|
|
148
130
|
});
|
|
149
131
|
});
|
|
150
|
-
var createAlign = (
|
|
151
|
-
const alignGroup = createAlignGroupAction(
|
|
152
|
-
const alignActions = createAlignActions(
|
|
132
|
+
var createAlign = ({ [import_chunk_D4MOMCEU.alignKey]: alignValue }) => {
|
|
133
|
+
const alignGroup = createAlignGroupAction(alignValue);
|
|
134
|
+
const alignActions = createAlignActions(alignValue);
|
|
153
135
|
return {
|
|
154
136
|
nodes: [
|
|
155
137
|
alignGroup,
|
|
@@ -168,12 +150,12 @@ var createAlign = (model, state, cursorFallbackRange) => {
|
|
|
168
150
|
};
|
|
169
151
|
};
|
|
170
152
|
var useCommentState = (state) => {
|
|
171
|
-
const { cursorFallbackRange, model } = (0,
|
|
153
|
+
const { cursorFallbackRange, model } = (0, import_chunk_AEH3L5QZ.useSheetContext)();
|
|
172
154
|
const overlapsCommentAnchor = (0, import_react5.useMemo)(() => import_live_object.RefArray.targets(model.sheet.threads ?? []).filter((thread) => thread.status !== "resolved").some((thread) => {
|
|
173
155
|
if (!cursorFallbackRange) {
|
|
174
156
|
return false;
|
|
175
157
|
}
|
|
176
|
-
return (0,
|
|
158
|
+
return (0, import_chunk_D4MOMCEU.rangeToIndex)(model.sheet, cursorFallbackRange) === thread.anchor;
|
|
177
159
|
}), [
|
|
178
160
|
cursorFallbackRange,
|
|
179
161
|
model.sheet
|
|
@@ -185,17 +167,8 @@ var useCommentState = (state) => {
|
|
|
185
167
|
cursorFallbackRange
|
|
186
168
|
]);
|
|
187
169
|
};
|
|
188
|
-
var createCommentAction = (
|
|
189
|
-
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const cellContent = model.getCellText(cursorFallbackRange.from);
|
|
193
|
-
if (!cellContent) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
onComment(cellContent, (0, import_chunk_CN7OBGYV.completeCellRangeToThreadCursor)(cursorFallbackRange));
|
|
197
|
-
}, {
|
|
198
|
-
key: import_chunk_HLSQVT3C.commentKey,
|
|
170
|
+
var createCommentAction = (state) => (0, import_react_ui_menu3.createMenuAction)("comment", {
|
|
171
|
+
key: import_chunk_D4MOMCEU.commentKey,
|
|
199
172
|
testId: "editor.toolbar.comment",
|
|
200
173
|
icon: "ph--chat-text--regular",
|
|
201
174
|
label: [
|
|
@@ -206,9 +179,9 @@ var createCommentAction = (model, state, onComment, cursorFallbackRange) => (0,
|
|
|
206
179
|
],
|
|
207
180
|
disabled: state.commentEnabled !== "comment"
|
|
208
181
|
});
|
|
209
|
-
var createComment = (
|
|
182
|
+
var createComment = (state) => ({
|
|
210
183
|
nodes: [
|
|
211
|
-
createCommentAction(
|
|
184
|
+
createCommentAction(state)
|
|
212
185
|
],
|
|
213
186
|
edges: [
|
|
214
187
|
{
|
|
@@ -222,12 +195,12 @@ var styles = {
|
|
|
222
195
|
softwrap: "ph--paragraph--regular"
|
|
223
196
|
};
|
|
224
197
|
var useStyleState = (state) => {
|
|
225
|
-
const { cursorFallbackRange, model } = (0,
|
|
198
|
+
const { cursorFallbackRange, model } = (0, import_chunk_AEH3L5QZ.useSheetContext)();
|
|
226
199
|
(0, import_react6.useEffect)(() => {
|
|
227
200
|
state.highlight = false;
|
|
228
201
|
state.softwrap = false;
|
|
229
202
|
if (cursorFallbackRange && model.sheet.ranges) {
|
|
230
|
-
model.sheet.ranges.filter(({ range, key }) => key === "style" && (0, import_compute3.inRange)((0,
|
|
203
|
+
model.sheet.ranges.filter(({ range, key }) => key === "style" && (0, import_compute3.inRange)((0, import_chunk_D4MOMCEU.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
|
|
231
204
|
state[value] = true;
|
|
232
205
|
});
|
|
233
206
|
}
|
|
@@ -243,27 +216,8 @@ var createStyleGroup = (state) => {
|
|
|
243
216
|
value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
|
|
244
217
|
});
|
|
245
218
|
};
|
|
246
|
-
var createStyleActions = (
|
|
247
|
-
return (0, import_react_ui_menu4.createMenuAction)(`style--${styleValue}`,
|
|
248
|
-
if (!cursorFallbackRange) {
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
const index = model.sheet.ranges?.findIndex((range) => range.key === "style" && (0, import_compute3.inRange)((0, import_chunk_HLSQVT3C.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
252
|
-
const nextRangeEntity = {
|
|
253
|
-
range: (0, import_chunk_HLSQVT3C.rangeToIndex)(model.sheet, cursorFallbackRange),
|
|
254
|
-
key: "style",
|
|
255
|
-
value: styleValue
|
|
256
|
-
};
|
|
257
|
-
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && (0, import_compute3.inRange)((0, import_chunk_HLSQVT3C.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === styleValue)) {
|
|
258
|
-
if (index >= 0) {
|
|
259
|
-
model.sheet.ranges?.splice(index, 1);
|
|
260
|
-
}
|
|
261
|
-
state[nextRangeEntity.value] = false;
|
|
262
|
-
} else {
|
|
263
|
-
model.sheet.ranges?.push(nextRangeEntity);
|
|
264
|
-
state[nextRangeEntity.value] = true;
|
|
265
|
-
}
|
|
266
|
-
}, {
|
|
219
|
+
var createStyleActions = (state) => Object.entries(styles).map(([styleValue, icon]) => {
|
|
220
|
+
return (0, import_react_ui_menu4.createMenuAction)(`style--${styleValue}`, {
|
|
267
221
|
key: "style",
|
|
268
222
|
value: styleValue,
|
|
269
223
|
icon,
|
|
@@ -276,9 +230,9 @@ var createStyleActions = (model, state, cursorFallbackRange) => Object.entries(s
|
|
|
276
230
|
checked: !!state[styleValue]
|
|
277
231
|
});
|
|
278
232
|
});
|
|
279
|
-
var createStyle = (
|
|
233
|
+
var createStyle = (state) => {
|
|
280
234
|
const styleGroupAction = createStyleGroup(state);
|
|
281
|
-
const styleActions = createStyleActions(
|
|
235
|
+
const styleActions = createStyleActions(state);
|
|
282
236
|
return {
|
|
283
237
|
nodes: [
|
|
284
238
|
styleGroupAction,
|
|
@@ -296,14 +250,67 @@ var createStyle = (model, state, cursorFallbackRange) => {
|
|
|
296
250
|
]
|
|
297
251
|
};
|
|
298
252
|
};
|
|
253
|
+
var useToolbarAction = (state) => {
|
|
254
|
+
const { model, cursorFallbackRange, cursor } = (0, import_chunk_AEH3L5QZ.useSheetContext)();
|
|
255
|
+
const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
|
|
256
|
+
return (0, import_react7.useCallback)((action) => {
|
|
257
|
+
const { key, value } = action.properties;
|
|
258
|
+
if (cursorFallbackRange) {
|
|
259
|
+
const index = model.sheet.ranges?.findIndex((range) => range.key === key && (0, import_compute4.inRange)((0, import_chunk_D4MOMCEU.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
260
|
+
const nextRangeEntity = {
|
|
261
|
+
range: (0, import_chunk_D4MOMCEU.rangeToIndex)(model.sheet, cursorFallbackRange),
|
|
262
|
+
key,
|
|
263
|
+
value
|
|
264
|
+
};
|
|
265
|
+
switch (key) {
|
|
266
|
+
case "alignment":
|
|
267
|
+
if (index < 0) {
|
|
268
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
269
|
+
state[import_chunk_D4MOMCEU.alignKey] = value;
|
|
270
|
+
} else if (model.sheet.ranges[index].value === value) {
|
|
271
|
+
model.sheet.ranges?.splice(index, 1);
|
|
272
|
+
state[import_chunk_D4MOMCEU.alignKey] = void 0;
|
|
273
|
+
} else {
|
|
274
|
+
model.sheet.ranges?.splice(index, 1, nextRangeEntity);
|
|
275
|
+
state[import_chunk_D4MOMCEU.alignKey] = value;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
case "style":
|
|
279
|
+
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && (0, import_compute4.inRange)((0, import_chunk_D4MOMCEU.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === value)) {
|
|
280
|
+
if (index >= 0) {
|
|
281
|
+
model.sheet.ranges?.splice(index, 1);
|
|
282
|
+
}
|
|
283
|
+
state[value] = false;
|
|
284
|
+
} else {
|
|
285
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
286
|
+
state[value] = true;
|
|
287
|
+
}
|
|
288
|
+
break;
|
|
289
|
+
case "comment": {
|
|
290
|
+
const cellContent = model.getCellText(cursorFallbackRange.from);
|
|
291
|
+
void dispatch((0, import_app_framework.createIntent)(import_types.ThreadAction.Create, {
|
|
292
|
+
cursor: (0, import_chunk_AEH3L5QZ.completeCellRangeToThreadCursor)(cursorFallbackRange),
|
|
293
|
+
name: cellContent,
|
|
294
|
+
subject: model.sheet
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}, [
|
|
300
|
+
model.sheet,
|
|
301
|
+
cursorFallbackRange,
|
|
302
|
+
cursor,
|
|
303
|
+
dispatch
|
|
304
|
+
]);
|
|
305
|
+
};
|
|
299
306
|
var useToolbarState = (initialState = {}) => {
|
|
300
|
-
return (0,
|
|
307
|
+
return (0, import_react8.useMemo)(() => (0, import_live_object2.create)(initialState), []);
|
|
301
308
|
};
|
|
302
|
-
var createToolbarActions = (
|
|
303
|
-
const align = createAlign(
|
|
304
|
-
const style = createStyle(
|
|
309
|
+
var createToolbarActions = (state) => {
|
|
310
|
+
const align = createAlign(state);
|
|
311
|
+
const style = createStyle(state);
|
|
305
312
|
const gap = (0, import_react_ui_menu.createGapSeparator)();
|
|
306
|
-
const comment = createComment(
|
|
313
|
+
const comment = createComment(state);
|
|
307
314
|
return {
|
|
308
315
|
nodes: [
|
|
309
316
|
...align.nodes,
|
|
@@ -320,37 +327,26 @@ var createToolbarActions = (model, state, onComment, cursorFallbackRange) => {
|
|
|
320
327
|
};
|
|
321
328
|
};
|
|
322
329
|
var SheetToolbar = ({ attendableId, classNames }) => {
|
|
323
|
-
const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
|
|
324
|
-
const { model, cursorFallbackRange } = (0, import_chunk_CN7OBGYV.useSheetContext)();
|
|
325
330
|
const state = useToolbarState({});
|
|
326
331
|
useAlignState(state);
|
|
327
332
|
useStyleState(state);
|
|
328
333
|
useCommentState(state);
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
name,
|
|
332
|
-
subject: model.sheet
|
|
333
|
-
})), [
|
|
334
|
-
model.sheet,
|
|
335
|
-
dispatch
|
|
336
|
-
]);
|
|
337
|
-
const actionsCreator = (0, import_react3.useCallback)(() => createToolbarActions(model, state, handleComment, cursorFallbackRange), [
|
|
338
|
-
model,
|
|
339
|
-
state,
|
|
340
|
-
handleComment,
|
|
341
|
-
cursorFallbackRange
|
|
334
|
+
const actionsCreator = (0, import_react3.useCallback)(() => createToolbarActions(state), [
|
|
335
|
+
state
|
|
342
336
|
]);
|
|
343
337
|
const menu = (0, import_react_ui_menu.useMenuActions)(actionsCreator);
|
|
338
|
+
const handleAction = useToolbarAction(state);
|
|
344
339
|
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_menu.MenuProvider, {
|
|
345
340
|
...menu,
|
|
346
|
-
attendableId
|
|
341
|
+
attendableId,
|
|
342
|
+
onAction: handleAction
|
|
347
343
|
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_menu.ToolbarMenu, {
|
|
348
344
|
classNames
|
|
349
345
|
}));
|
|
350
346
|
};
|
|
351
347
|
var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
352
|
-
const graph = (0,
|
|
353
|
-
return graph ? /* @__PURE__ */ import_react.default.createElement(
|
|
348
|
+
const graph = (0, import_chunk_AEH3L5QZ.useComputeGraph)(space);
|
|
349
|
+
return graph ? /* @__PURE__ */ import_react.default.createElement(import_chunk_AEH3L5QZ.SheetProvider, {
|
|
354
350
|
sheet,
|
|
355
351
|
graph,
|
|
356
352
|
ignoreAttention
|
|
@@ -362,7 +358,7 @@ var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
|
362
358
|
}
|
|
363
359
|
}, /* @__PURE__ */ import_react.default.createElement(SheetToolbar, {
|
|
364
360
|
attendableId: (0, import_echo.fullyQualifiedId)(sheet)
|
|
365
|
-
}), /* @__PURE__ */ import_react.default.createElement(
|
|
361
|
+
}), /* @__PURE__ */ import_react.default.createElement(import_chunk_AEH3L5QZ.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null))) : null;
|
|
366
362
|
};
|
|
367
363
|
var SheetContainer_default = SheetContainer;
|
|
368
|
-
//# sourceMappingURL=SheetContainer-
|
|
364
|
+
//# sourceMappingURL=SheetContainer-LGRD3TTQ.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../src/components/SheetToolbar/align.ts", "../../../src/components/SheetToolbar/comment.ts", "../../../src/components/SheetToolbar/style.ts", "../../../src/components/SheetToolbar/useToolbarAction.ts", "../../../src/components/SheetToolbar/useToolbarState.ts", "../../../src/components/SheetContainer/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { fullyQualifiedId, type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <SheetToolbar attendableId={fullyQualifiedId(sheet)} />\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';\nimport { Icon } from '@dxos/react-ui';\n\nimport { mapFormulaIndicesToRefs } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { createAlign, useAlignState } from './align';\nimport { createComment, useCommentState } from './comment';\nimport { createStyle, useStyleState } from './style';\nimport { useToolbarAction } from './useToolbarAction';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ attendableId?: string }>>;\n\nconst createToolbarActions = (state: ToolbarState) => {\n const align = createAlign(state);\n const style = createStyle(state);\n const gap = createGapSeparator();\n const comment = createComment(state);\n return {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes, ...comment.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges, ...comment.edges],\n };\n};\n\nexport const SheetToolbar = ({ attendableId, classNames }: SheetToolbarProps) => {\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n useCommentState(state);\n\n const actionsCreator = useCallback(() => createToolbarActions(state), [state]);\n const menu = useMenuActions(actionsCreator);\n const handleAction = useToolbarAction(state);\n\n return (\n <MenuProvider {...menu} attendableId={attendableId} onAction={handleAction}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type AlignKey, alignKey, type AlignValue, rangeFromIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (state: Partial<AlignState>) => {\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n state[alignKey] = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n }, [cursor, model.sheet]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align label', { ns: SHEET_PLUGIN }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\nconst createAlignActions = (value?: AlignValue) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(`${alignKey}--${alignValue}`, {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: value === alignValue,\n label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n });\n });\n\nexport const createAlign = ({ [alignKey]: alignValue }: Partial<AlignState>) => {\n const alignGroup = createAlignGroupAction(alignValue);\n const alignActions = createAlignActions(alignValue);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { RefArray } from '@dxos/live-object';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { commentKey, type CommentKey, type CommentValue, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\n\nexport type CommentState = { commentEnabled: 'comment' | 'no cursor' | 'selection overlaps existing comment' };\n\nexport const useCommentState = (state: Partial<CommentState>) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = useMemo(\n () =>\n RefArray.targets(model.sheet.threads ?? [])\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n }),\n [cursorFallbackRange, model.sheet],\n );\n\n useEffect(() => {\n state.commentEnabled = !cursorFallbackRange\n ? 'no cursor'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment'\n : 'comment';\n }, [overlapsCommentAnchor, cursorFallbackRange]);\n};\n\nconst createCommentAction = (state: Partial<CommentState>) =>\n createMenuAction<Pick<CommentAction, 'key'>>('comment', {\n key: commentKey,\n testId: 'editor.toolbar.comment',\n icon: 'ph--chat-text--regular',\n label: [`${state.commentEnabled} label`, { ns: SHEET_PLUGIN }],\n disabled: state.commentEnabled !== 'comment',\n });\n\nexport const createComment = (state: Partial<CommentState>) => ({\n nodes: [createCommentAction(state)],\n edges: [{ source: 'root', target: 'comment' }],\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { rangeFromIndex, type StyleKey, type StyleValue } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (state: StyleState) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n state.highlight = false;\n state.softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n state[value as StyleValue] = true;\n });\n }\n }, [cursorFallbackRange, model.sheet]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\nconst createStyleActions = (state: StyleState) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(`style--${styleValue}`, {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range value ${styleValue} label`, { ns: SHEET_PLUGIN }],\n checked: !!state[styleValue as StyleValue],\n });\n });\n\nexport const createStyle = (state: StyleState) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(state);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { inRange } from '@dxos/compute';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport type { MenuAction, MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type AlignAction } from './align';\nimport { type CommentAction } from './comment';\nimport { type StyleAction } from './style';\nimport { type ToolbarState } from './useToolbarState';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { alignKey, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\n\nexport const useToolbarAction = (state: ToolbarState) => {\n const { model, cursorFallbackRange, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n return useCallback(\n (action: MenuAction<ToolbarAction>) => {\n const { key, value } = action.properties;\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) => range.key === key && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key,\n value,\n };\n switch (key) {\n case 'alignment':\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = value;\n } else if (model.sheet.ranges![index].value === value) {\n model.sheet.ranges?.splice(index, 1);\n state[alignKey] = undefined;\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n state[alignKey] = value;\n }\n break;\n case 'style':\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === value)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[value] = true;\n }\n break;\n case 'comment': {\n const cellContent = model.getCellText(cursorFallbackRange.from);\n void dispatch(\n createIntent(ThreadAction.Create, {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: cellContent,\n subject: model.sheet,\n }),\n );\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n ) as MenuActionHandler;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type CommentState } from './comment';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState & CommentState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => create<ToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_compute", "import_react_ui_menu", "import_live_object", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "React", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "aligns", "start", "center", "end", "useAlignState", "state", "useEffect", "alignKey", "ranges", "findLast", "key", "inRange", "rangeFromIndex", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "SHEET_PLUGIN", "variant", "selectCardinality", "createAlignActions", "Object", "entries", "map", "alignValue", "createMenuAction", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "id", "useCommentState", "cursorFallbackRange", "overlapsCommentAnchor", "useMemo", "RefArray", "targets", "threads", "filter", "thread", "status", "some", "rangeToIndex", "anchor", "commentEnabled", "createCommentAction", "commentKey", "disabled", "createComment", "styles", "highlight", "softwrap", "useStyleState", "from", "forEach", "createStyleGroup", "keys", "styleValue", "createStyleActions", "createStyle", "styleGroupAction", "styleActions", "useToolbarAction", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "action", "properties", "index", "findIndex", "nextRangeEntity", "push", "splice", "rangeKey", "rangeValue", "cellContent", "getCellText", "createIntent", "ThreadAction", "Create", "completeCellRangeToThreadCursor", "name", "subject", "useToolbarState", "initialState", "create", "createToolbarActions", "align", "style", "gap", "createGapSeparator", "comment", "SheetToolbar", "attendableId", "actionsCreator", "menu", "useMenuActions", "handleAction", "MenuProvider", "onAction", "ToolbarMenu", "SheetContainer", "space", "role", "ignoreAttention", "useComputeGraph", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "fullyQualifiedId", "GridSheet"]
|
|
7
|
+
}
|