@dxos/plugin-sheet 0.8.2-staging.7ac8446 → 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/SheetContainer-GXPG3ZDN.mjs +351 -0
- package/dist/lib/browser/SheetContainer-GXPG3ZDN.mjs.map +7 -0
- package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs +24 -0
- package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZOKEQL2K.mjs → chunk-5FLX3UGU.mjs} +55 -63
- package/dist/lib/browser/chunk-5FLX3UGU.mjs.map +7 -0
- package/dist/lib/browser/chunk-AYMJXZFS.mjs +847 -0
- package/dist/lib/browser/chunk-AYMJXZFS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AT5ZK6JD.mjs → chunk-FJRLDX7Z.mjs} +1 -1
- package/dist/lib/browser/chunk-FJRLDX7Z.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EMSCNWEK.mjs → chunk-IR42IS3F.mjs} +2 -2
- package/dist/lib/{node-esm/chunk-76T5X4VP.mjs.map → browser/chunk-IR42IS3F.mjs.map} +1 -1
- package/dist/lib/browser/{compute-graph-registry-WEJLJJ6T.mjs → compute-graph-registry-IXGGJJBU.mjs} +3 -3
- package/dist/lib/browser/compute-graph-registry-IXGGJJBU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +17 -16
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs → intent-resolver-UI4DHURQ.mjs} +2 -2
- package/dist/lib/browser/{markdown-DR4RDEEY.mjs → markdown-T4TUP4BF.mjs} +4 -4
- package/dist/lib/browser/markdown-T4TUP4BF.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs → react-surface-KI6T5M2X.mjs} +5 -5
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/SheetContainer-UUDOHLZR.cjs +351 -0
- package/dist/lib/node/SheetContainer-UUDOHLZR.cjs.map +7 -0
- package/dist/lib/node/{thread-WP43BC4N.cjs → anchor-sort-LTLYUTUP.cjs} +17 -10
- package/dist/lib/node/anchor-sort-LTLYUTUP.cjs.map +7 -0
- package/dist/lib/node/{chunk-D4MOMCEU.cjs → chunk-76NESQLB.cjs} +70 -78
- package/dist/lib/node/chunk-76NESQLB.cjs.map +7 -0
- package/dist/lib/node/chunk-BXBNSNDK.cjs +855 -0
- package/dist/lib/node/chunk-BXBNSNDK.cjs.map +7 -0
- package/dist/lib/node/{chunk-LEV7OSTK.cjs → chunk-FIM6EZ6M.cjs} +4 -4
- package/dist/lib/node/chunk-FIM6EZ6M.cjs.map +7 -0
- package/dist/lib/node/{chunk-O2FOEUYB.cjs → chunk-LJWWS53Z.cjs} +5 -5
- package/dist/lib/node/{chunk-O2FOEUYB.cjs.map → chunk-LJWWS53Z.cjs.map} +1 -1
- package/dist/lib/node/{compute-graph-registry-VVSRJUGS.cjs → compute-graph-registry-ARLDHPFW.cjs} +7 -7
- package/dist/lib/node/compute-graph-registry-ARLDHPFW.cjs.map +7 -0
- package/dist/lib/node/index.cjs +21 -20
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs → intent-resolver-EVLGL7VZ.cjs} +9 -9
- package/dist/lib/node/{markdown-E7OUIMZO.cjs → markdown-DBPOAYI7.cjs} +8 -8
- package/dist/lib/node/markdown-DBPOAYI7.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-6PBWE75L.cjs → react-surface-QHAPOAR2.cjs} +14 -14
- 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-44KHKMPI.mjs +352 -0
- package/dist/lib/node-esm/SheetContainer-44KHKMPI.mjs.map +7 -0
- package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs +25 -0
- package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6NB67Y6X.mjs → chunk-DIF3IOAB.mjs} +55 -63
- package/dist/lib/node-esm/chunk-DIF3IOAB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GCCM7R45.mjs +848 -0
- package/dist/lib/node-esm/chunk-GCCM7R45.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-76T5X4VP.mjs → chunk-IQ76YE6M.mjs} +2 -2
- package/dist/lib/{browser/chunk-EMSCNWEK.mjs.map → node-esm/chunk-IQ76YE6M.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-HXBUY5ET.mjs → chunk-NMCVJWDT.mjs} +1 -1
- package/dist/lib/node-esm/chunk-NMCVJWDT.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-registry-PBQ52KH6.mjs → compute-graph-registry-7PDWXMHF.mjs} +3 -3
- package/dist/lib/node-esm/compute-graph-registry-7PDWXMHF.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +17 -16
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs → intent-resolver-TPOH5JM5.mjs} +2 -2
- package/dist/lib/node-esm/{markdown-BPKS2TNG.mjs → markdown-WWUJ3E5F.mjs} +4 -4
- package/dist/lib/node-esm/markdown-WWUJ3E5F.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs → react-surface-XT2J3S67.mjs} +5 -5
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
- 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 +6 -6
- 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 +3 -2
- 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 +2 -2
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/align.d.ts +4 -1
- package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/style.d.ts +3 -1
- package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +2 -3
- package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -6
- 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/sheet-model.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/serializer.d.ts.map +1 -1
- package/dist/types/src/testing/data.d.ts.map +1 -1
- package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -1
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -54
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +38 -150
- 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 +55 -48
- package/src/SheetPlugin.tsx +7 -5
- package/src/capabilities/anchor-sort.ts +22 -0
- package/src/capabilities/compute-graph-registry.ts +3 -3
- package/src/capabilities/index.ts +1 -1
- 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 +5 -2
- package/src/components/GridSheet/GridSheet.tsx +18 -12
- package/src/components/GridSheet/SheetCellEditor.stories.tsx +2 -2
- package/src/components/GridSheet/util.ts +17 -11
- package/src/components/RangeList/RangeList.tsx +2 -2
- package/src/components/SheetContainer/SheetContainer.stories.tsx +3 -6
- package/src/components/SheetContainer/SheetContainer.tsx +5 -8
- package/src/components/SheetToolbar/SheetToolbar.stories.tsx +2 -2
- package/src/components/SheetToolbar/SheetToolbar.tsx +56 -20
- package/src/components/SheetToolbar/align.ts +44 -14
- package/src/components/SheetToolbar/style.ts +48 -12
- package/src/components/SheetToolbar/useToolbarState.ts +3 -4
- package/src/extensions/compute.ts +1 -1
- package/src/integrations/thread-ranges.ts +14 -17
- package/src/model/sheet-model.test.ts +1 -1
- package/src/model/sheet-model.ts +17 -17
- package/src/sanity.test.ts +3 -3
- package/src/serializer.ts +3 -4
- package/src/testing/playwright/sheet-manager.ts +9 -9
- package/src/types/schema.ts +20 -22
- package/src/types/types.ts +25 -25
- package/src/types/util.ts +2 -3
- package/dist/lib/browser/SheetContainer-B3A5443Z.mjs +0 -370
- package/dist/lib/browser/SheetContainer-B3A5443Z.mjs.map +0 -7
- package/dist/lib/browser/chunk-AT5ZK6JD.mjs.map +0 -7
- package/dist/lib/browser/chunk-CHMPICA6.mjs +0 -815
- package/dist/lib/browser/chunk-CHMPICA6.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZOKEQL2K.mjs.map +0 -7
- package/dist/lib/browser/compute-graph-registry-WEJLJJ6T.mjs.map +0 -7
- package/dist/lib/browser/markdown-DR4RDEEY.mjs.map +0 -7
- package/dist/lib/browser/thread-76MK2FMV.mjs +0 -17
- package/dist/lib/browser/thread-76MK2FMV.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs +0 -364
- package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs.map +0 -7
- package/dist/lib/node/chunk-AEH3L5QZ.cjs +0 -822
- package/dist/lib/node/chunk-AEH3L5QZ.cjs.map +0 -7
- package/dist/lib/node/chunk-D4MOMCEU.cjs.map +0 -7
- package/dist/lib/node/chunk-LEV7OSTK.cjs.map +0 -7
- package/dist/lib/node/compute-graph-registry-VVSRJUGS.cjs.map +0 -7
- package/dist/lib/node/markdown-E7OUIMZO.cjs.map +0 -7
- package/dist/lib/node/thread-WP43BC4N.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs +0 -371
- package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6NB67Y6X.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HXBUY5ET.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WQHYR4WD.mjs +0 -816
- package/dist/lib/node-esm/chunk-WQHYR4WD.mjs.map +0 -7
- package/dist/lib/node-esm/compute-graph-registry-PBQ52KH6.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-BPKS2TNG.mjs.map +0 -7
- package/dist/lib/node-esm/thread-4NCPE5FK.mjs +0 -18
- package/dist/lib/node-esm/thread-4NCPE5FK.mjs.map +0 -7
- package/dist/types/src/capabilities/thread.d.ts +0 -6
- package/dist/types/src/capabilities/thread.d.ts.map +0 -1
- package/dist/types/src/components/SheetToolbar/comment.d.ts +0 -23
- package/dist/types/src/components/SheetToolbar/comment.d.ts.map +0 -1
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +0 -8
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +0 -1
- package/src/capabilities/thread.ts +0 -14
- package/src/components/SheetToolbar/comment.ts +0 -56
- package/src/components/SheetToolbar/useToolbarAction.ts +0 -87
- /package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs.map → intent-resolver-UI4DHURQ.mjs.map} +0 -0
- /package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs.map → react-surface-KI6T5M2X.mjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs.map → intent-resolver-EVLGL7VZ.cjs.map} +0 -0
- /package/dist/lib/node/{react-surface-6PBWE75L.cjs.map → react-surface-QHAPOAR2.cjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs.map → intent-resolver-TPOH5JM5.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs.map → react-surface-XT2J3S67.mjs.map} +0 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GridSheet,
|
|
3
|
+
SheetProvider,
|
|
4
|
+
useComputeGraph,
|
|
5
|
+
useSheetContext
|
|
6
|
+
} from "./chunk-AYMJXZFS.mjs";
|
|
7
|
+
import {
|
|
8
|
+
alignKey,
|
|
9
|
+
mapFormulaIndicesToRefs,
|
|
10
|
+
rangeFromIndex,
|
|
11
|
+
rangeToIndex
|
|
12
|
+
} from "./chunk-5FLX3UGU.mjs";
|
|
13
|
+
import "./chunk-FJRLDX7Z.mjs";
|
|
14
|
+
import {
|
|
15
|
+
SHEET_PLUGIN
|
|
16
|
+
} from "./chunk-D3G4UGEK.mjs";
|
|
17
|
+
|
|
18
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
|
|
19
|
+
import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
|
|
20
|
+
import React3 from "react";
|
|
21
|
+
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
22
|
+
import { StackItem } from "@dxos/react-ui-stack";
|
|
23
|
+
|
|
24
|
+
// packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
|
|
25
|
+
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
26
|
+
import React from "react";
|
|
27
|
+
import { addressToA1Notation, isFormula, rangeToA1Notation } from "@dxos/compute";
|
|
28
|
+
import { Icon } from "@dxos/react-ui";
|
|
29
|
+
var FunctionEditor = () => {
|
|
30
|
+
var _effect = _useSignals();
|
|
31
|
+
try {
|
|
32
|
+
const { model, cursor, range } = useSheetContext();
|
|
33
|
+
let value;
|
|
34
|
+
let formula = false;
|
|
35
|
+
if (cursor) {
|
|
36
|
+
value = model.getCellValue(cursor);
|
|
37
|
+
if (isFormula(value)) {
|
|
38
|
+
value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));
|
|
39
|
+
formula = true;
|
|
40
|
+
} else if (value != null) {
|
|
41
|
+
value = String(value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
45
|
+
className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator"
|
|
46
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
47
|
+
className: "flex gap-4 items-center"
|
|
48
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
49
|
+
className: "flex w-16 items-center font-mono"
|
|
50
|
+
}, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
|
|
51
|
+
className: "flex gap-2 items-center"
|
|
52
|
+
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
53
|
+
icon: "ph--function--regular",
|
|
54
|
+
classNames: [
|
|
55
|
+
"text-greenText",
|
|
56
|
+
formula ? "visible" : "invisible"
|
|
57
|
+
]
|
|
58
|
+
}), /* @__PURE__ */ React.createElement("span", {
|
|
59
|
+
className: "font-mono"
|
|
60
|
+
}, value))));
|
|
61
|
+
} finally {
|
|
62
|
+
_effect.f();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
|
|
67
|
+
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
|
68
|
+
import { Rx } from "@effect-rx/rx-react";
|
|
69
|
+
import React2, { useMemo as useMemo2 } from "react";
|
|
70
|
+
import { useAppGraph } from "@dxos/app-framework";
|
|
71
|
+
import { createGapSeparator, MenuProvider, rxFromSignal, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
|
|
72
|
+
|
|
73
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/align.ts
|
|
74
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
75
|
+
import { useEffect } from "react";
|
|
76
|
+
import { inRange } from "@dxos/compute";
|
|
77
|
+
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
|
78
|
+
var aligns = {
|
|
79
|
+
start: "ph--text-align-left--regular",
|
|
80
|
+
center: "ph--text-align-center--regular",
|
|
81
|
+
end: "ph--text-align-right--regular"
|
|
82
|
+
};
|
|
83
|
+
var useAlignState = (state) => {
|
|
84
|
+
var _effect = _useSignals2();
|
|
85
|
+
try {
|
|
86
|
+
const { cursor, model } = useSheetContext();
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
state[alignKey] = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
|
|
89
|
+
}, [
|
|
90
|
+
cursor,
|
|
91
|
+
model.sheet
|
|
92
|
+
]);
|
|
93
|
+
} finally {
|
|
94
|
+
_effect.f();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
var createAlignGroupAction = (value) => createMenuItemGroup("align", {
|
|
98
|
+
label: [
|
|
99
|
+
"align label",
|
|
100
|
+
{
|
|
101
|
+
ns: SHEET_PLUGIN
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
variant: "toggleGroup",
|
|
105
|
+
selectCardinality: "single",
|
|
106
|
+
value: `${alignKey}--${value}`
|
|
107
|
+
});
|
|
108
|
+
var createAlignActions = (model, state, cursorFallbackRange) => Object.entries(aligns).map(([alignValue, icon]) => {
|
|
109
|
+
return createMenuAction(`${alignKey}--${alignValue}`, () => {
|
|
110
|
+
if (!cursorFallbackRange) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const index = model.sheet.ranges?.findIndex((range) => range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
114
|
+
const nextRangeEntity = {
|
|
115
|
+
range: rangeToIndex(model.sheet, cursorFallbackRange),
|
|
116
|
+
key: alignKey,
|
|
117
|
+
value: alignValue
|
|
118
|
+
};
|
|
119
|
+
if (index < 0) {
|
|
120
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
121
|
+
state[alignKey] = nextRangeEntity.value;
|
|
122
|
+
} else if (model.sheet.ranges[index].value === nextRangeEntity.value) {
|
|
123
|
+
model.sheet.ranges?.splice(index, 1);
|
|
124
|
+
state[alignKey] = void 0;
|
|
125
|
+
} else {
|
|
126
|
+
model.sheet.ranges?.splice(index, 1, nextRangeEntity);
|
|
127
|
+
state[alignKey] = nextRangeEntity.value;
|
|
128
|
+
}
|
|
129
|
+
}, {
|
|
130
|
+
key: alignKey,
|
|
131
|
+
value: alignValue,
|
|
132
|
+
checked: state[alignKey] === alignValue,
|
|
133
|
+
label: [
|
|
134
|
+
`range value ${alignValue} label`,
|
|
135
|
+
{
|
|
136
|
+
ns: SHEET_PLUGIN
|
|
137
|
+
}
|
|
138
|
+
],
|
|
139
|
+
icon,
|
|
140
|
+
testId: `grid.toolbar.${alignKey}.${alignValue}`
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
var createAlign = (model, state, cursorFallbackRange) => {
|
|
144
|
+
const alignGroup = createAlignGroupAction(state[alignKey]);
|
|
145
|
+
const alignActions = createAlignActions(model, state, cursorFallbackRange);
|
|
146
|
+
return {
|
|
147
|
+
nodes: [
|
|
148
|
+
alignGroup,
|
|
149
|
+
...alignActions
|
|
150
|
+
],
|
|
151
|
+
edges: [
|
|
152
|
+
{
|
|
153
|
+
source: "root",
|
|
154
|
+
target: "align"
|
|
155
|
+
},
|
|
156
|
+
...alignActions.map(({ id }) => ({
|
|
157
|
+
source: alignGroup.id,
|
|
158
|
+
target: id
|
|
159
|
+
}))
|
|
160
|
+
]
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/style.ts
|
|
165
|
+
import { useEffect as useEffect2 } from "react";
|
|
166
|
+
import { inRange as inRange2 } from "@dxos/compute";
|
|
167
|
+
import { createMenuAction as createMenuAction2, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
|
|
168
|
+
var styles = {
|
|
169
|
+
highlight: "ph--highlighter--regular",
|
|
170
|
+
softwrap: "ph--paragraph--regular"
|
|
171
|
+
};
|
|
172
|
+
var useStyleState = (state) => {
|
|
173
|
+
const { cursorFallbackRange, model } = useSheetContext();
|
|
174
|
+
useEffect2(() => {
|
|
175
|
+
state.highlight = false;
|
|
176
|
+
state.softwrap = false;
|
|
177
|
+
if (cursorFallbackRange && model.sheet.ranges) {
|
|
178
|
+
model.sheet.ranges.filter(({ range, key }) => key === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
|
|
179
|
+
state[value] = true;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}, [
|
|
183
|
+
cursorFallbackRange,
|
|
184
|
+
model.sheet
|
|
185
|
+
]);
|
|
186
|
+
};
|
|
187
|
+
var createStyleGroup = (state) => {
|
|
188
|
+
return createMenuItemGroup2("style", {
|
|
189
|
+
variant: "toggleGroup",
|
|
190
|
+
selectCardinality: "multiple",
|
|
191
|
+
value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
var createStyleActions = (model, state, cursorFallbackRange) => Object.entries(styles).map(([styleValue, icon]) => {
|
|
195
|
+
return createMenuAction2(`style--${styleValue}`, () => {
|
|
196
|
+
if (!cursorFallbackRange) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const index = model.sheet.ranges?.findIndex((range) => range.key === "style" && inRange2(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
200
|
+
const nextRangeEntity = {
|
|
201
|
+
range: rangeToIndex(model.sheet, cursorFallbackRange),
|
|
202
|
+
key: "style",
|
|
203
|
+
value: styleValue
|
|
204
|
+
};
|
|
205
|
+
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === styleValue)) {
|
|
206
|
+
if (index >= 0) {
|
|
207
|
+
model.sheet.ranges?.splice(index, 1);
|
|
208
|
+
}
|
|
209
|
+
state[nextRangeEntity.value] = false;
|
|
210
|
+
} else {
|
|
211
|
+
model.sheet.ranges?.push(nextRangeEntity);
|
|
212
|
+
state[nextRangeEntity.value] = true;
|
|
213
|
+
}
|
|
214
|
+
}, {
|
|
215
|
+
key: "style",
|
|
216
|
+
value: styleValue,
|
|
217
|
+
icon,
|
|
218
|
+
label: [
|
|
219
|
+
`range value ${styleValue} label`,
|
|
220
|
+
{
|
|
221
|
+
ns: SHEET_PLUGIN
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
checked: !!state[styleValue]
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
var createStyle = (model, state, cursorFallbackRange) => {
|
|
228
|
+
const styleGroupAction = createStyleGroup(state);
|
|
229
|
+
const styleActions = createStyleActions(model, state, cursorFallbackRange);
|
|
230
|
+
return {
|
|
231
|
+
nodes: [
|
|
232
|
+
styleGroupAction,
|
|
233
|
+
...styleActions
|
|
234
|
+
],
|
|
235
|
+
edges: [
|
|
236
|
+
{
|
|
237
|
+
source: "root",
|
|
238
|
+
target: "style"
|
|
239
|
+
},
|
|
240
|
+
...styleActions.map(({ id }) => ({
|
|
241
|
+
source: styleGroupAction.id,
|
|
242
|
+
target: id
|
|
243
|
+
}))
|
|
244
|
+
]
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarState.ts
|
|
249
|
+
import { useMemo } from "react";
|
|
250
|
+
import { live } from "@dxos/live-object";
|
|
251
|
+
var useToolbarState = (initialState = {}) => {
|
|
252
|
+
return useMemo(() => live(initialState), []);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
|
|
256
|
+
var createToolbarActions = (model, state, cursorFallbackRange, customActions) => {
|
|
257
|
+
return Rx.make((get) => {
|
|
258
|
+
const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));
|
|
259
|
+
const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));
|
|
260
|
+
const gap = createGapSeparator();
|
|
261
|
+
const nodes = [
|
|
262
|
+
...align.nodes,
|
|
263
|
+
...style.nodes,
|
|
264
|
+
...gap.nodes
|
|
265
|
+
];
|
|
266
|
+
const edges = [
|
|
267
|
+
...align.edges,
|
|
268
|
+
...style.edges,
|
|
269
|
+
...gap.edges
|
|
270
|
+
];
|
|
271
|
+
if (customActions) {
|
|
272
|
+
const custom = get(customActions);
|
|
273
|
+
nodes.push(...custom.nodes);
|
|
274
|
+
edges.push(...custom.edges);
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
nodes,
|
|
278
|
+
edges
|
|
279
|
+
};
|
|
280
|
+
});
|
|
281
|
+
};
|
|
282
|
+
var SheetToolbar = ({ id, classNames }) => {
|
|
283
|
+
var _effect = _useSignals3();
|
|
284
|
+
try {
|
|
285
|
+
const { model, cursorFallbackRange } = useSheetContext();
|
|
286
|
+
const state = useToolbarState({});
|
|
287
|
+
useAlignState(state);
|
|
288
|
+
useStyleState(state);
|
|
289
|
+
const { graph } = useAppGraph();
|
|
290
|
+
const customActions = useMemo2(() => {
|
|
291
|
+
return Rx.make((get) => {
|
|
292
|
+
const actions = get(graph.actions(id));
|
|
293
|
+
const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
|
|
294
|
+
return {
|
|
295
|
+
nodes,
|
|
296
|
+
edges: nodes.map((node) => ({
|
|
297
|
+
source: "root",
|
|
298
|
+
target: node.id
|
|
299
|
+
}))
|
|
300
|
+
};
|
|
301
|
+
});
|
|
302
|
+
}, [
|
|
303
|
+
graph
|
|
304
|
+
]);
|
|
305
|
+
const actionsCreator = useMemo2(() => createToolbarActions(model, state, cursorFallbackRange, customActions), [
|
|
306
|
+
model,
|
|
307
|
+
state,
|
|
308
|
+
cursorFallbackRange,
|
|
309
|
+
customActions
|
|
310
|
+
]);
|
|
311
|
+
const menu = useMenuActions(actionsCreator);
|
|
312
|
+
return /* @__PURE__ */ React2.createElement(MenuProvider, {
|
|
313
|
+
...menu,
|
|
314
|
+
attendableId: id
|
|
315
|
+
}, /* @__PURE__ */ React2.createElement(ToolbarMenu, {
|
|
316
|
+
classNames
|
|
317
|
+
}));
|
|
318
|
+
} finally {
|
|
319
|
+
_effect.f();
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
|
|
324
|
+
var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
325
|
+
var _effect = _useSignals4();
|
|
326
|
+
try {
|
|
327
|
+
const graph = useComputeGraph(space);
|
|
328
|
+
return graph ? /* @__PURE__ */ React3.createElement(SheetProvider, {
|
|
329
|
+
sheet,
|
|
330
|
+
graph,
|
|
331
|
+
ignoreAttention
|
|
332
|
+
}, /* @__PURE__ */ React3.createElement(StackItem.Content, {
|
|
333
|
+
toolbar: true,
|
|
334
|
+
statusbar: true,
|
|
335
|
+
...role === "section" && {
|
|
336
|
+
classNames: "aspect-video"
|
|
337
|
+
}
|
|
338
|
+
}, /* @__PURE__ */ React3.createElement(SheetToolbar, {
|
|
339
|
+
id: fullyQualifiedId(sheet)
|
|
340
|
+
}), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
|
|
341
|
+
} finally {
|
|
342
|
+
_effect.f();
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
// packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
|
|
347
|
+
var SheetContainer_default = SheetContainer;
|
|
348
|
+
export {
|
|
349
|
+
SheetContainer_default as default
|
|
350
|
+
};
|
|
351
|
+
//# sourceMappingURL=SheetContainer-GXPG3ZDN.mjs.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/style.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 type SheetContainerProps = {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n};\n\nexport const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {\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 id={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 bg-toolbarSurface border-bs !border-subduedSeparator'>\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 { Rx } from '@effect-rx/rx-react';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type ActionGraphEdges,\n type ActionGraphNodes,\n type ActionGraphProps,\n createGapSeparator,\n MenuProvider,\n rxFromSignal,\n ToolbarMenu,\n useMenuActions,\n} from '@dxos/react-ui-menu';\n\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ id: string }>>;\n\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n cursorFallbackRange?: CompleteCellRange,\n customActions?: Rx.Rx<ActionGraphProps>,\n) => {\n return Rx.make((get) => {\n const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));\n const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));\n const gap = createGapSeparator();\n const nodes: ActionGraphNodes = [...align.nodes, ...style.nodes, ...gap.nodes];\n const edges: ActionGraphEdges = [...align.edges, ...style.edges, ...gap.edges];\n if (customActions) {\n const custom = get(customActions);\n nodes.push(...custom.nodes);\n edges.push(...custom.edges);\n }\n return {\n nodes,\n edges,\n };\n });\n};\n\nexport const SheetToolbar = ({ id, classNames }: SheetToolbarProps) => {\n const { model, cursorFallbackRange } = useSheetContext();\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions(model, state, cursorFallbackRange, customActions),\n [model, state, cursorFallbackRange, customActions],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={id}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { type ToolbarState } from './useToolbarState';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type AlignKey, alignKey, type AlignValue, rangeFromIndex, rangeToIndex } 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 = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n } else if (model.sheet.ranges![index].value === nextRangeEntity.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] = nextRangeEntity.value;\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {\n const alignGroup = createAlignGroupAction(state[alignKey]);\n const alignActions = createAlignActions(model, state, cursorFallbackRange);\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 } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { rangeFromIndex, rangeToIndex, 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 = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\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 === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[nextRangeEntity.value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[nextRangeEntity.value] = true;\n }\n },\n {\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 });\n\nexport const createStyle = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(model, state, cursorFallbackRange);\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 { useMemo } from 'react';\n\nimport { live } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => live<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": ["React", "fullyQualifiedId", "StackItem", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Rx", "React", "useMemo", "useAppGraph", "createGapSeparator", "MenuProvider", "rxFromSignal", "ToolbarMenu", "useMenuActions", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "state", "cursor", "model", "useSheetContext", "useEffect", "alignKey", "sheet", "ranges", "findLast", "range", "key", "inRange", "rangeFromIndex", "value", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "SHEET_PLUGIN", "variant", "selectCardinality", "createAlignActions", "cursorFallbackRange", "Object", "entries", "map", "alignValue", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "id", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "state", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "createStyleGroup", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "rangeKey", "some", "rangeValue", "splice", "push", "label", "ns", "SHEET_PLUGIN", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "id", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "cursorFallbackRange", "customActions", "Rx", "make", "get", "align", "rxFromSignal", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "classNames", "useSheetContext", "useToolbarState", "useAlignState", "useStyleState", "graph", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "attendableId", "ToolbarMenu", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "SheetToolbar", "id", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SheetType,
|
|
3
|
+
compareIndexPositions
|
|
4
|
+
} from "./chunk-5FLX3UGU.mjs";
|
|
5
|
+
import "./chunk-D3G4UGEK.mjs";
|
|
6
|
+
|
|
7
|
+
// packages/plugins/plugin-sheet/src/capabilities/anchor-sort.ts
|
|
8
|
+
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
9
|
+
import { getSchemaTypename } from "@dxos/echo-schema";
|
|
10
|
+
import { getTarget } from "@dxos/react-client/echo";
|
|
11
|
+
var anchor_sort_default = () => contributes(Capabilities.AnchorSort, {
|
|
12
|
+
key: getSchemaTypename(SheetType),
|
|
13
|
+
sort: (anchorA, anchorB) => {
|
|
14
|
+
const sheet = getTarget(anchorA);
|
|
15
|
+
if (sheet !== getTarget(anchorB)) {
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
18
|
+
return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
export {
|
|
22
|
+
anchor_sort_default as default
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=anchor-sort-CUTFYIT4.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/anchor-sort.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { getSchemaTypename } from '@dxos/echo-schema';\nimport { getTarget } from '@dxos/react-client/echo';\n\nimport { compareIndexPositions, SheetType } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: getSchemaTypename(SheetType)!,\n sort: (anchorA, anchorB) => {\n const sheet = getTarget(anchorA) as SheetType;\n if (sheet !== getTarget(anchorB)) {\n return 0;\n }\n\n return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);\n },\n });\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,yBAAyB;AAClC,SAASC,iBAAiB;AAI1B,IAAA,sBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,kBAAkBC,SAAAA;EACvBC,MAAM,CAACC,SAASC,YAAAA;AACd,UAAMC,QAAQC,UAAUH,OAAAA;AACxB,QAAIE,UAAUC,UAAUF,OAAAA,GAAU;AAChC,aAAO;IACT;AAEA,WAAO,CAACD,QAAQI,UAAU,CAACH,QAAQG,SAAS,IAAIC,sBAAsBH,OAAOF,QAAQI,QAAQH,QAAQG,MAAM;EAC7G;AACF,CAAA;",
|
|
6
|
+
"names": ["Capabilities", "contributes", "getSchemaTypename", "getTarget", "contributes", "Capabilities", "AnchorSort", "key", "getSchemaTypename", "SheetType", "sort", "anchorA", "anchorB", "sheet", "getTarget", "anchor", "compareIndexPositions"]
|
|
7
|
+
}
|
|
@@ -3,50 +3,48 @@ import {
|
|
|
3
3
|
} from "./chunk-D3G4UGEK.mjs";
|
|
4
4
|
|
|
5
5
|
// packages/plugins/plugin-sheet/src/types/schema.ts
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
var CellValue =
|
|
6
|
+
import { Schema } from "effect";
|
|
7
|
+
import { TypedObject } from "@dxos/echo-schema";
|
|
8
|
+
var CellValue = Schema.Struct({
|
|
9
9
|
// TODO(burdon): How to store dates (datetime, date, time), percentages, etc.
|
|
10
10
|
// Consider import/export; natural access for other plugins. Special handling for currency (precision).
|
|
11
11
|
// TODO(burdon): Automerge (long string) or short string or number.
|
|
12
|
-
value:
|
|
12
|
+
value: Schema.Any
|
|
13
13
|
});
|
|
14
|
-
var Range =
|
|
15
|
-
range:
|
|
16
|
-
key:
|
|
17
|
-
value:
|
|
14
|
+
var Range = Schema.Struct({
|
|
15
|
+
range: Schema.String,
|
|
16
|
+
key: Schema.String,
|
|
17
|
+
value: Schema.String
|
|
18
18
|
});
|
|
19
|
-
var RowColumnMeta =
|
|
20
|
-
size:
|
|
19
|
+
var RowColumnMeta = Schema.Struct({
|
|
20
|
+
size: Schema.optional(Schema.Number)
|
|
21
21
|
});
|
|
22
22
|
var SheetType = class extends TypedObject({
|
|
23
23
|
typename: "dxos.org/type/Sheet",
|
|
24
24
|
version: "0.1.0"
|
|
25
25
|
})({
|
|
26
|
-
name:
|
|
26
|
+
name: Schema.optional(Schema.String),
|
|
27
27
|
// Sparse map of cells referenced by index.
|
|
28
|
-
cells:
|
|
29
|
-
key:
|
|
30
|
-
value:
|
|
28
|
+
cells: Schema.mutable(Schema.Record({
|
|
29
|
+
key: Schema.String,
|
|
30
|
+
value: Schema.mutable(CellValue)
|
|
31
31
|
})),
|
|
32
32
|
// Ordered row indices.
|
|
33
|
-
rows:
|
|
33
|
+
rows: Schema.mutable(Schema.Array(Schema.String)),
|
|
34
34
|
// Ordered column indices.
|
|
35
|
-
columns:
|
|
35
|
+
columns: Schema.mutable(Schema.Array(Schema.String)),
|
|
36
36
|
// Row metadata referenced by index.
|
|
37
|
-
rowMeta:
|
|
38
|
-
key:
|
|
39
|
-
value:
|
|
37
|
+
rowMeta: Schema.mutable(Schema.Record({
|
|
38
|
+
key: Schema.String,
|
|
39
|
+
value: Schema.mutable(RowColumnMeta)
|
|
40
40
|
})),
|
|
41
41
|
// Column metadata referenced by index.
|
|
42
|
-
columnMeta:
|
|
43
|
-
key:
|
|
44
|
-
value:
|
|
42
|
+
columnMeta: Schema.mutable(Schema.Record({
|
|
43
|
+
key: Schema.String,
|
|
44
|
+
value: Schema.mutable(RowColumnMeta)
|
|
45
45
|
})),
|
|
46
46
|
// Cell formatting referenced by indexed range.
|
|
47
|
-
ranges:
|
|
48
|
-
// Threads associated with the sheet
|
|
49
|
-
threads: S.optional(S.mutable(S.Array(Ref(ThreadType))))
|
|
47
|
+
ranges: Schema.mutable(Schema.Array(Range))
|
|
50
48
|
}) {
|
|
51
49
|
};
|
|
52
50
|
|
|
@@ -84,7 +82,7 @@ var cellClassNameForRange = ({ key, value }) => {
|
|
|
84
82
|
};
|
|
85
83
|
|
|
86
84
|
// packages/plugins/plugin-sheet/src/types/types.ts
|
|
87
|
-
import {
|
|
85
|
+
import { Schema as Schema2 } from "effect";
|
|
88
86
|
|
|
89
87
|
// packages/plugins/plugin-sheet/src/model/sheet-model.ts
|
|
90
88
|
import { Event } from "@dxos/async";
|
|
@@ -141,12 +139,7 @@ var toModelRange = (sheet, range) => ({
|
|
|
141
139
|
});
|
|
142
140
|
var SheetModel = class extends Resource {
|
|
143
141
|
constructor(_graph, _sheet, _options = {}) {
|
|
144
|
-
super();
|
|
145
|
-
this._graph = _graph;
|
|
146
|
-
this._sheet = _sheet;
|
|
147
|
-
this._options = _options;
|
|
148
|
-
this.id = `model-${PublicKey.random().truncate()}`;
|
|
149
|
-
this.update = new Event();
|
|
142
|
+
super(), this._graph = _graph, this._sheet = _sheet, this._options = _options, this.id = `model-${PublicKey.random().truncate()}`, this.update = new Event();
|
|
150
143
|
}
|
|
151
144
|
get graph() {
|
|
152
145
|
return this._graph;
|
|
@@ -689,58 +682,58 @@ var useSheetModel = (graph, sheet, { readonly } = {}) => {
|
|
|
689
682
|
};
|
|
690
683
|
|
|
691
684
|
// packages/plugins/plugin-sheet/src/types/types.ts
|
|
692
|
-
var SheetAction;
|
|
693
685
|
(function(SheetAction2) {
|
|
694
686
|
const SHEET_ACTION = `${SHEET_PLUGIN}/action`;
|
|
695
|
-
class Create extends
|
|
696
|
-
input:
|
|
697
|
-
name:
|
|
687
|
+
class Create extends Schema2.TaggedClass()(`${SHEET_ACTION}/create`, {
|
|
688
|
+
input: Schema2.Struct({
|
|
689
|
+
name: Schema2.optional(Schema2.String)
|
|
698
690
|
}),
|
|
699
|
-
output:
|
|
691
|
+
output: Schema2.Struct({
|
|
700
692
|
object: SheetType
|
|
701
693
|
})
|
|
702
694
|
}) {
|
|
703
695
|
}
|
|
704
696
|
SheetAction2.Create = Create;
|
|
705
|
-
const Axis =
|
|
706
|
-
class InsertAxis extends
|
|
707
|
-
input:
|
|
708
|
-
// TODO(wittjosiah):
|
|
709
|
-
model:
|
|
697
|
+
const Axis = Schema2.Union(Schema2.Literal("row"), Schema2.Literal("col"));
|
|
698
|
+
class InsertAxis extends Schema2.TaggedClass()(`${SHEET_ACTION}/axis-insert`, {
|
|
699
|
+
input: Schema2.Struct({
|
|
700
|
+
// TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.
|
|
701
|
+
model: Schema2.Any.pipe(Schema2.filter((model) => model instanceof SheetModel)),
|
|
710
702
|
axis: Axis,
|
|
711
|
-
index:
|
|
712
|
-
count:
|
|
703
|
+
index: Schema2.Number,
|
|
704
|
+
count: Schema2.optional(Schema2.Number)
|
|
713
705
|
}),
|
|
714
|
-
output:
|
|
706
|
+
output: Schema2.Void
|
|
715
707
|
}) {
|
|
716
708
|
}
|
|
717
709
|
SheetAction2.InsertAxis = InsertAxis;
|
|
718
|
-
SheetAction2.RestoreAxis =
|
|
710
|
+
SheetAction2.RestoreAxis = Schema2.Struct({
|
|
719
711
|
axis: Axis,
|
|
720
|
-
axisIndex:
|
|
721
|
-
index:
|
|
712
|
+
axisIndex: Schema2.String,
|
|
713
|
+
index: Schema2.Number,
|
|
722
714
|
axisMeta: RowColumnMeta,
|
|
723
|
-
values:
|
|
715
|
+
values: Schema2.Array(Schema2.Any)
|
|
724
716
|
});
|
|
725
|
-
class DropAxis extends
|
|
726
|
-
input:
|
|
727
|
-
// TODO(wittjosiah):
|
|
728
|
-
model:
|
|
717
|
+
class DropAxis extends Schema2.TaggedClass()(`${SHEET_ACTION}/axis-drop`, {
|
|
718
|
+
input: Schema2.Struct({
|
|
719
|
+
// TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.
|
|
720
|
+
model: Schema2.Any.pipe(Schema2.filter((model) => model instanceof SheetModel)),
|
|
729
721
|
axis: Axis,
|
|
730
|
-
axisIndex:
|
|
731
|
-
deletionData:
|
|
722
|
+
axisIndex: Schema2.String,
|
|
723
|
+
deletionData: Schema2.optional(SheetAction2.RestoreAxis)
|
|
732
724
|
}),
|
|
733
|
-
output:
|
|
725
|
+
output: Schema2.Void
|
|
734
726
|
}) {
|
|
735
727
|
}
|
|
736
728
|
SheetAction2.DropAxis = DropAxis;
|
|
737
729
|
})(SheetAction || (SheetAction = {}));
|
|
730
|
+
var SheetAction;
|
|
738
731
|
|
|
739
732
|
// packages/plugins/plugin-sheet/src/types/util.ts
|
|
740
733
|
import { addressFromA1Notation as addressFromA1Notation2, addressToA1Notation as addressToA1Notation2, isFormula as isFormula2 } from "@dxos/compute";
|
|
741
734
|
import { randomBytes } from "@dxos/crypto";
|
|
742
735
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
743
|
-
import {
|
|
736
|
+
import { live } from "@dxos/live-object";
|
|
744
737
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/types/util.ts";
|
|
745
738
|
var MAX_ROWS = 500;
|
|
746
739
|
var MAX_COLS = 676;
|
|
@@ -781,15 +774,14 @@ var initialize = (sheet, { rows = DEFAULT_ROWS, columns = DEFAULT_COLS } = {}) =
|
|
|
781
774
|
}
|
|
782
775
|
};
|
|
783
776
|
var createSheet = ({ name, cells, ...size } = {}) => {
|
|
784
|
-
const sheet =
|
|
777
|
+
const sheet = live(SheetType, {
|
|
785
778
|
name,
|
|
786
779
|
cells: {},
|
|
787
780
|
rows: [],
|
|
788
781
|
columns: [],
|
|
789
782
|
rowMeta: {},
|
|
790
783
|
columnMeta: {},
|
|
791
|
-
ranges: []
|
|
792
|
-
threads: []
|
|
784
|
+
ranges: []
|
|
793
785
|
});
|
|
794
786
|
initialize(sheet, size);
|
|
795
787
|
if (cells) {
|
|
@@ -840,7 +832,7 @@ var compareIndexPositions = (sheet, indexA, indexB) => {
|
|
|
840
832
|
var mapFormulaRefsToIndices = (sheet, formula) => {
|
|
841
833
|
invariant2(isFormula2(formula), void 0, {
|
|
842
834
|
F: __dxlog_file2,
|
|
843
|
-
L:
|
|
835
|
+
L: 152,
|
|
844
836
|
S: void 0,
|
|
845
837
|
A: [
|
|
846
838
|
"isFormula(formula)",
|
|
@@ -854,7 +846,7 @@ var mapFormulaRefsToIndices = (sheet, formula) => {
|
|
|
854
846
|
var mapFormulaIndicesToRefs = (sheet, formula) => {
|
|
855
847
|
invariant2(isFormula2(formula), void 0, {
|
|
856
848
|
F: __dxlog_file2,
|
|
857
|
-
L:
|
|
849
|
+
L: 162,
|
|
858
850
|
S: void 0,
|
|
859
851
|
A: [
|
|
860
852
|
"isFormula(formula)",
|
|
@@ -897,4 +889,4 @@ export {
|
|
|
897
889
|
mapFormulaRefsToIndices,
|
|
898
890
|
mapFormulaIndicesToRefs
|
|
899
891
|
};
|
|
900
|
-
//# sourceMappingURL=chunk-
|
|
892
|
+
//# sourceMappingURL=chunk-5FLX3UGU.mjs.map
|