@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.3e2eaca

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.
Files changed (109) hide show
  1. package/dist/lib/browser/{SheetContainer-R65IDJHN.mjs → SheetContainer-P3NF5KEI.mjs} +49 -43
  2. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-4LKIURJA.mjs} +283 -84
  4. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-5KVQ5IPW.mjs → chunk-BVUN7SHF.mjs} +4 -2
  6. package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
  8. package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-KCYJSOFB.mjs → chunk-VMSX6Z4X.mjs} +51 -17
  10. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
  11. package/dist/lib/browser/{compute-graph-SJT67236.mjs → compute-graph-GGWUX644.mjs} +4 -4
  12. package/dist/lib/browser/index.mjs +38 -10
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/meta.mjs +1 -1
  16. package/dist/lib/browser/types.mjs +2 -2
  17. package/dist/lib/node/{SheetContainer-6BO4C5X2.cjs → SheetContainer-MPFKXY26.cjs} +67 -62
  18. package/dist/lib/node/SheetContainer-MPFKXY26.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
  20. package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
  21. package/dist/lib/node/{chunk-2XJ5I4UF.cjs → chunk-AWKOWDMI.cjs} +8 -6
  22. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-JF5XNTF3.cjs → chunk-O7XR4R7Y.cjs} +61 -26
  24. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-DEPJHN47.cjs → chunk-OO24XJBV.cjs} +318 -120
  26. package/dist/lib/node/chunk-OO24XJBV.cjs.map +7 -0
  27. package/dist/lib/node/{compute-graph-AQBDL7HO.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
  28. package/dist/lib/node/{compute-graph-AQBDL7HO.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
  29. package/dist/lib/node/index.cjs +66 -38
  30. package/dist/lib/node/index.cjs.map +3 -3
  31. package/dist/lib/node/meta.cjs +3 -3
  32. package/dist/lib/node/meta.cjs.map +1 -1
  33. package/dist/lib/node/meta.json +1 -1
  34. package/dist/lib/node/types.cjs +7 -7
  35. package/dist/lib/node/types.cjs.map +1 -1
  36. package/dist/lib/node-esm/{SheetContainer-MJXC5E3P.mjs → SheetContainer-22IOAW3B.mjs} +49 -43
  37. package/dist/lib/node-esm/SheetContainer-22IOAW3B.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
  39. package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
  40. package/dist/lib/node-esm/{chunk-25V7WY4R.mjs → chunk-BW36PM2Y.mjs} +283 -84
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-XBEHKYO7.mjs → chunk-CR4K75EL.mjs} +51 -17
  43. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-5TXLF6PL.mjs → chunk-UIBWRHW7.mjs} +4 -2
  45. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
  46. package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
  47. package/dist/lib/node-esm/index.mjs +38 -10
  48. package/dist/lib/node-esm/index.mjs.map +3 -3
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/meta.mjs +1 -1
  51. package/dist/lib/node-esm/types.mjs +2 -2
  52. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  53. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -1
  54. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  55. package/dist/types/src/components/GridSheet/util.d.ts +1 -0
  56. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  57. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  58. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Toolbar/Toolbar.d.ts +5 -2
  60. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  61. package/dist/types/src/components/index.d.ts.map +1 -1
  62. package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
  63. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
  64. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
  65. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
  66. package/dist/types/src/defs/sheet-range-types.d.ts +1 -1
  67. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  68. package/dist/types/src/defs/util.d.ts +1 -1
  69. package/dist/types/src/defs/util.d.ts.map +1 -1
  70. package/dist/types/src/meta.d.ts +1 -0
  71. package/dist/types/src/meta.d.ts.map +1 -1
  72. package/dist/types/src/model/sheet-model.d.ts +12 -5
  73. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  74. package/dist/types/src/translations.d.ts +10 -5
  75. package/dist/types/src/translations.d.ts.map +1 -1
  76. package/dist/types/src/types.d.ts +33 -3
  77. package/dist/types/src/types.d.ts.map +1 -1
  78. package/package.json +37 -36
  79. package/src/SheetPlugin.tsx +20 -0
  80. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
  81. package/src/components/GridSheet/GridSheet.tsx +102 -38
  82. package/src/components/GridSheet/util.ts +19 -9
  83. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
  84. package/src/components/SheetContainer/SheetContainer.tsx +9 -8
  85. package/src/components/Toolbar/Toolbar.tsx +62 -53
  86. package/src/compute-graph/compute-graph.ts +22 -7
  87. package/src/compute-graph/functions/async-function.ts +1 -0
  88. package/src/compute-graph/functions/edge-function.ts +5 -3
  89. package/src/defs/sheet-range-types.ts +4 -2
  90. package/src/defs/util.ts +1 -0
  91. package/src/meta.ts +1 -0
  92. package/src/model/sheet-model.test.ts +5 -3
  93. package/src/model/sheet-model.ts +93 -21
  94. package/src/translations.ts +10 -5
  95. package/src/types.ts +20 -0
  96. package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +0 -7
  98. package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +0 -7
  99. package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +0 -7
  100. package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +0 -7
  101. package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +0 -7
  102. package/dist/lib/node/chunk-DEPJHN47.cjs.map +0 -7
  103. package/dist/lib/node/chunk-JF5XNTF3.cjs.map +0 -7
  104. package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +0 -7
  105. package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +0 -7
  106. package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +0 -7
  107. package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +0 -7
  108. /package/dist/lib/browser/{compute-graph-SJT67236.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  109. /package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  completeCellRangeToThreadCursor,
6
6
  useComputeGraph,
7
7
  useSheetContext
8
- } from "./chunk-25V7WY4R.mjs";
8
+ } from "./chunk-BW36PM2Y.mjs";
9
9
  import {
10
10
  addressToA1Notation,
11
11
  alignKey,
@@ -13,15 +13,17 @@ import {
13
13
  isFormula,
14
14
  rangeFromIndex,
15
15
  rangeToA1Notation,
16
- rangeToIndex
17
- } from "./chunk-XBEHKYO7.mjs";
18
- import "./chunk-5TXLF6PL.mjs";
16
+ rangeToIndex,
17
+ styleKey
18
+ } from "./chunk-CR4K75EL.mjs";
19
+ import "./chunk-UIBWRHW7.mjs";
19
20
  import {
20
21
  SHEET_PLUGIN
21
- } from "./chunk-VCYJWE3O.mjs";
22
+ } from "./chunk-BM2Q3FFC.mjs";
22
23
 
23
24
  // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
24
25
  import React3 from "react";
26
+ import { StackItem } from "@dxos/react-ui-stack";
25
27
 
26
28
  // packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
27
29
  import React from "react";
@@ -41,7 +43,7 @@ var FunctionEditor = () => {
41
43
  }
42
44
  }
43
45
  return /* @__PURE__ */ React.createElement("div", {
44
- className: mx("flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface")
46
+ className: mx("flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface")
45
47
  }, /* @__PURE__ */ React.createElement("div", {
46
48
  className: "flex gap-4 items-center"
47
49
  }, /* @__PURE__ */ React.createElement("div", {
@@ -61,7 +63,7 @@ var FunctionEditor = () => {
61
63
 
62
64
  // packages/plugins/plugin-sheet/src/components/Toolbar/Toolbar.tsx
63
65
  import { createContext } from "@radix-ui/react-context";
64
- import React2, { useCallback, useMemo } from "react";
66
+ import React2, { useCallback } from "react";
65
67
  import { useIntentDispatcher } from "@dxos/app-framework";
66
68
  import { Icon as Icon2, Toolbar as NaturalToolbar, Tooltip, useTranslation } from "@dxos/react-ui";
67
69
  import { useAttention } from "@dxos/react-ui-attention";
@@ -91,7 +93,6 @@ var ToolbarItem = ({ itemType, icon, children, ...props }) => {
91
93
  }, children))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, tooltipProps, children, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null))));
92
94
  };
93
95
  var [ToolbarContextProvider, useToolbarContext] = createContext("Toolbar");
94
- var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
95
96
  var ToolbarRoot = ({ children, role, classNames }) => {
96
97
  const { id, model, cursorFallbackRange, cursor } = useSheetContext();
97
98
  const { hasAttention } = useAttention(id);
@@ -99,8 +100,8 @@ var ToolbarRoot = ({ children, role, classNames }) => {
99
100
  const handleAction = useCallback((action) => {
100
101
  switch (action.key) {
101
102
  case "alignment":
102
- if (cursor && cursorFallbackRange) {
103
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && inRange(rangeFromIndex(model.sheet, range.range), cursor));
103
+ if (cursorFallbackRange) {
104
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
104
105
  const nextRangeEntity = {
105
106
  range: rangeToIndex(model.sheet, cursorFallbackRange),
106
107
  key: action.key,
@@ -108,14 +109,16 @@ var ToolbarRoot = ({ children, role, classNames }) => {
108
109
  };
109
110
  if (index < 0) {
110
111
  model.sheet.ranges?.push(nextRangeEntity);
112
+ } else if (model.sheet.ranges[index].value === action.value) {
113
+ model.sheet.ranges?.splice(index, 1);
111
114
  } else {
112
115
  model.sheet.ranges?.splice(index, 1, nextRangeEntity);
113
116
  }
114
117
  }
115
118
  break;
116
119
  case "style":
117
- if (action.value === "unset") {
118
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key);
120
+ if (action.unset) {
121
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && cursorFallbackRange && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from));
119
122
  if (index >= 0) {
120
123
  model.sheet.ranges?.splice(index, 1);
121
124
  }
@@ -150,13 +153,8 @@ var ToolbarRoot = ({ children, role, classNames }) => {
150
153
  onAction: handleAction
151
154
  }, /* @__PURE__ */ React2.createElement(NaturalToolbar.Root, {
152
155
  classNames: [
153
- ...role === "section" ? [
154
- "z-[2] group-focus-within/section:visible",
155
- !hasAttention && "invisible",
156
- sectionToolbarLayout
157
- ] : [
158
- "attention-surface"
159
- ],
156
+ "pli-0.5",
157
+ !hasAttention && "opacity-20",
160
158
  classNames
161
159
  ]
162
160
  }, children));
@@ -179,13 +177,13 @@ var Alignment = () => {
179
177
  const { cursor, model } = useSheetContext();
180
178
  const { onAction } = useToolbarContext("Alignment");
181
179
  const { t } = useTranslation(SHEET_PLUGIN);
182
- const value = useMemo(() => cursor ? model.sheet.ranges?.find(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0, [
183
- cursor,
184
- model.sheet.ranges
185
- ]);
180
+ const value = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
186
181
  return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
187
182
  type: "single",
188
- value,
183
+ value: (
184
+ // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.
185
+ value ?? "never"
186
+ ),
189
187
  onValueChange: (value2) => onAction?.({
190
188
  key: alignKey,
191
189
  value: value2
@@ -204,29 +202,36 @@ var styleOptions = [
204
202
  {
205
203
  value: "highlight",
206
204
  icon: "ph--highlighter--regular"
205
+ },
206
+ {
207
+ value: "softwrap",
208
+ icon: "ph--paragraph--regular"
207
209
  }
208
210
  ];
209
211
  var Styles = () => {
210
- const { cursor, model } = useSheetContext();
212
+ const { cursorFallbackRange, model } = useSheetContext();
211
213
  const { onAction } = useToolbarContext("Styles");
212
214
  const { t } = useTranslation(SHEET_PLUGIN);
213
- const activeValues = useMemo(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && inRange(rangeFromIndex(model.sheet, range), cursor)).reduce((acc, { value }) => {
215
+ const activeValues = cursorFallbackRange ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).reduce((acc, { value }) => {
214
216
  acc.add(value);
215
217
  return acc;
216
- }, /* @__PURE__ */ new Set()) : void 0, [
217
- cursor,
218
- model.sheet.ranges
219
- ]);
218
+ }, /* @__PURE__ */ new Set()) : void 0;
220
219
  return /* @__PURE__ */ React2.createElement(React2.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
221
220
  itemType: "toggle",
222
221
  key: value,
223
222
  pressed: activeValues?.has(value),
224
- onPressedChange: (nextPressed) => onAction?.({
225
- key: "style",
226
- value: nextPressed ? value : "unset"
227
- }),
223
+ onPressedChange: (nextPressed) => {
224
+ onAction?.({
225
+ key: "style",
226
+ value,
227
+ unset: !nextPressed
228
+ });
229
+ },
228
230
  icon
229
- }, t(`toolbar ${value} label`))));
231
+ }, t("toolbar action label", {
232
+ key: t(`range key ${styleKey} label`),
233
+ value: t(`range value ${value} label`)
234
+ }))));
230
235
  };
231
236
  var Actions = () => {
232
237
  const { onAction } = useToolbarContext("Actions");
@@ -245,16 +250,16 @@ var Actions = () => {
245
250
  icon: "ph--chat-text--regular",
246
251
  "data-testid": "editor.toolbar.comment",
247
252
  onClick: () => {
248
- if (!(cursorFallbackRange && cursor)) {
253
+ if (!cursorFallbackRange) {
249
254
  return;
250
255
  }
251
256
  return onAction?.({
252
257
  key: "comment",
253
258
  value: rangeToIndex(model.sheet, cursorFallbackRange),
254
- cellContent: model.getCellText(cursor)
259
+ cellContent: model.getCellText(cursorFallbackRange.from)
255
260
  });
256
261
  },
257
- disabled: !cursor || overlapsCommentAnchor
262
+ disabled: !cursorFallbackRange || overlapsCommentAnchor
258
263
  }, t(tooltipLabelKey));
259
264
  };
260
265
  var Toolbar = {
@@ -271,12 +276,13 @@ var SheetContainer = ({ space, sheet, role }) => {
271
276
  return graph ? /* @__PURE__ */ React3.createElement(SheetProvider, {
272
277
  sheet,
273
278
  graph
279
+ }, /* @__PURE__ */ React3.createElement(StackItem.Content, {
280
+ toolbar: true,
281
+ statusbar: true,
282
+ classNames: "border-bs border-separator"
274
283
  }, /* @__PURE__ */ React3.createElement(Toolbar.Root, {
275
284
  role
276
- }, /* @__PURE__ */ React3.createElement(Toolbar.Styles, null), /* @__PURE__ */ React3.createElement(Toolbar.Alignment, null), /* @__PURE__ */ React3.createElement(Toolbar.Separator, null), /* @__PURE__ */ React3.createElement(Toolbar.Actions, null)), /* @__PURE__ */ React3.createElement("div", {
277
- role: "none",
278
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
279
- }, /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
285
+ }, /* @__PURE__ */ React3.createElement(Toolbar.Styles, null), /* @__PURE__ */ React3.createElement(Toolbar.Alignment, null), /* @__PURE__ */ React3.createElement(Toolbar.Separator, null), /* @__PURE__ */ React3.createElement(Toolbar.Actions, null)), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
280
286
  };
281
287
 
282
288
  // packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
@@ -284,4 +290,4 @@ var SheetContainer_default = SheetContainer;
284
290
  export {
285
291
  SheetContainer_default as default
286
292
  };
287
- //# sourceMappingURL=SheetContainer-MJXC5E3P.mjs.map
293
+ //# sourceMappingURL=SheetContainer-22IOAW3B.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/SheetContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { 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 { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({ space, sheet, role }: { space: Space; sheet: SheetType; role?: string }) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph}>\n <StackItem.Content toolbar statusbar classNames='border-bs border-separator'>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\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 { Icon } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '../../defs';\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(model.mapFormulaIndicesToRefs(value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className={mx('flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface')}>\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 { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport {\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport {\n alignKey,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n rangeFromIndex,\n rangeToIndex,\n styleKey,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetType } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Buttons\n//\n\nconst buttonStyles = 'min-bs-0 p-2';\nconst tooltipProps = { side: 'bottom' as const, classNames: 'z-10' };\n\nconst ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarItem\n//\n\ntype ToolbarItemProps =\n | (NaturalToolbarButtonProps & { itemType: 'button'; icon: string })\n | (NaturalToolbarToggleGroupItemProps & { itemType: 'toggleGroupItem'; icon: string })\n | (NaturalToolbarToggleProps & { itemType: 'toggle'; icon: string });\n\nexport const ToolbarItem = ({ itemType, icon, children, ...props }: ToolbarItemProps) => {\n const Invoker =\n itemType === 'toggleGroupItem'\n ? NaturalToolbar.ToggleGroupItem\n : itemType === 'toggle'\n ? NaturalToolbar.Toggle\n : NaturalToolbar.Button;\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(thure): type the props spread better. */}\n <Invoker variant='ghost' {...(props as any)} classNames={buttonStyles}>\n <Icon icon={icon} size={5} />\n <span className='sr-only'>{children}</span>\n </Invoker>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// Root\n//\n\ntype AlignAction = { key: AlignKey; value: AlignValue };\ntype CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\ntype StyleAction = { key: StyleKey; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\nexport type ToolbarActionAnnotated = ToolbarAction & { unset?: boolean };\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarActionAnnotated) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{\n onAction: (action: ToolbarActionAnnotated) => void;\n}>('Toolbar');\n\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, cursorFallbackRange, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n const handleAction = useCallback(\n (action: ToolbarActionAnnotated) => {\n switch (action.key) {\n case 'alignment':\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else if (model.sheet.ranges![index].value === action.value) {\n model.sheet.ranges?.splice(index, 1);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.unset) {\n const index = model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n cursorFallbackRange &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n );\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (cursorFallbackRange) {\n model.sheet.ranges?.push({\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n });\n }\n break;\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n if (cursorFallbackRange) {\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\n <NaturalToolbar.Root classNames={['pli-0.5', !hasAttention && 'opacity-20', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps<T> = {\n value: T;\n icon: string;\n disabled?: (state: Range) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'start', icon: 'ph--text-align-left--regular' },\n { value: 'center', icon: 'ph--text-align-center--regular' },\n { value: 'end', icon: 'ph--text-align-right--regular' },\n];\n\nconst Alignment = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const value = cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined;\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={\n // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.\n value ?? 'never'\n }\n onValueChange={(value: AlignValue) => onAction?.({ key: alignKey, value })}\n >\n {alignmentOptions.map(({ value, icon }) => (\n <ToolbarItem itemType='toggleGroupItem' key={value} value={value} icon={icon}>\n {t('toolbar action label', {\n key: t(`range key ${alignKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [\n { value: 'highlight', icon: 'ph--highlighter--regular' },\n { value: 'softwrap', icon: 'ph--paragraph--regular' },\n];\n\nconst Styles = () => {\n const { cursorFallbackRange, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const activeValues = cursorFallbackRange\n ? model.sheet.ranges\n ?.filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined;\n\n return (\n <>\n {styleOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n pressed={activeValues?.has(value)}\n onPressedChange={(nextPressed: boolean) => {\n onAction?.({ key: 'style', value, unset: !nextPressed });\n }}\n icon={icon}\n >\n {t('toolbar action label', {\n key: t(`range key ${styleKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursorFallbackRange, cursor, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\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\n const tooltipLabelKey = !cursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : 'comment label';\n\n return (\n <ToolbarItem\n itemType='button'\n value='comment'\n icon='ph--chat-text--regular'\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursorFallbackRange) {\n return;\n }\n return onAction?.({\n key: 'comment',\n value: rangeToIndex(model.sheet, cursorFallbackRange),\n cellContent: model.getCellText(cursorFallbackRange.from),\n });\n }}\n disabled={!cursorFallbackRange || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarItem>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\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", "StackItem", "React", "Icon", "mx", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "String", "div", "className", "mx", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "createContext", "React", "useCallback", "useIntentDispatcher", "Icon", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "useAttention", "nonNullable", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "React", "div", "role", "className", "ToolbarItem", "itemType", "icon", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "Icon", "size", "span", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "id", "model", "cursorFallbackRange", "cursor", "useSheetContext", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "range", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "value", "push", "splice", "unset", "data", "completeCellRangeToThreadCursor", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "findLast", "alignKey", "undefined", "ToggleGroup", "type", "onValueChange", "map", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "styleKey", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "anchor", "tooltipLabelKey", "data-testid", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "space", "sheet", "role", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "Toolbar", "Root", "Styles", "Alignment", "Separator", "Actions", "GridSheet", "FunctionEditor", "SheetContainer"]
7
+ }
@@ -6,11 +6,12 @@ var meta_default = {
6
6
  id: SHEET_PLUGIN,
7
7
  name: "Sheet",
8
8
  description: "A simple spreadsheet plugin.",
9
- icon: "ph--grid-nine--regular"
9
+ icon: "ph--grid-nine--regular",
10
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet"
10
11
  };
11
12
 
12
13
  export {
13
14
  SHEET_PLUGIN,
14
15
  meta_default
15
16
  };
16
- //# sourceMappingURL=chunk-VCYJWE3O.mjs.map
17
+ //# sourceMappingURL=chunk-BM2Q3FFC.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport default {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";;;AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;AACR;",
6
- "names": ["SHEET_PLUGIN", "id", "name", "description", "icon"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport default {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
+ "names": ["SHEET_PLUGIN", "id", "name", "description", "icon", "source"]
7
7
  }