@dxos/plugin-sheet 0.6.14-staging.9e90729 → 0.6.14-staging.a52de51

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 (117) hide show
  1. package/dist/lib/browser/{SheetContainer-JBB7W52Y.mjs → SheetContainer-P3NF5KEI.mjs} +60 -48
  2. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-XXDHBYZQ.mjs → chunk-4LKIURJA.mjs} +337 -122
  4. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-3QWIMZZJ.mjs → chunk-BVUN7SHF.mjs} +5 -3
  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-2ZK3YMZG.mjs → chunk-VMSX6Z4X.mjs} +58 -20
  10. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
  11. package/dist/lib/browser/{compute-graph-ZQKB6QVP.mjs → compute-graph-GGWUX644.mjs} +4 -4
  12. package/dist/lib/browser/index.mjs +48 -21
  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-L37HUFCF.cjs → SheetContainer-MPFKXY26.cjs} +72 -63
  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-V7E5JZBD.cjs → chunk-AWKOWDMI.cjs} +9 -7
  22. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-QNFMTK3X.cjs → chunk-O7XR4R7Y.cjs} +69 -29
  24. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-7AWAC3R3.cjs → chunk-OO24XJBV.cjs} +353 -139
  26. package/dist/lib/node/chunk-OO24XJBV.cjs.map +7 -0
  27. package/dist/lib/node/{compute-graph-RJB6OVW6.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
  28. package/dist/lib/node/{compute-graph-RJB6OVW6.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
  29. package/dist/lib/node/index.cjs +74 -46
  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-CLKFEM35.mjs → SheetContainer-22IOAW3B.mjs} +60 -48
  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-3JYJEOCF.mjs → chunk-BW36PM2Y.mjs} +337 -122
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-JBTORSST.mjs → chunk-CR4K75EL.mjs} +58 -20
  43. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-SPQFLYC2.mjs → chunk-UIBWRHW7.mjs} +5 -3
  45. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
  46. package/dist/lib/node-esm/{compute-graph-VKRG526N.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
  47. package/dist/lib/node-esm/index.mjs +48 -21
  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 +2 -2
  56. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  57. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -4
  58. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  59. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +6 -3
  60. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  61. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/Toolbar/Toolbar.d.ts +6 -3
  63. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  64. package/dist/types/src/components/index.d.ts +4 -2
  65. package/dist/types/src/components/index.d.ts.map +1 -1
  66. package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
  67. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
  68. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
  69. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
  70. package/dist/types/src/defs/sheet-range-types.d.ts +2 -2
  71. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  72. package/dist/types/src/defs/util.d.ts +1 -1
  73. package/dist/types/src/defs/util.d.ts.map +1 -1
  74. package/dist/types/src/integrations/thread-ranges.d.ts +1 -2
  75. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  76. package/dist/types/src/meta.d.ts +1 -0
  77. package/dist/types/src/meta.d.ts.map +1 -1
  78. package/dist/types/src/model/sheet-model.d.ts +12 -5
  79. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  80. package/dist/types/src/translations.d.ts +12 -3
  81. package/dist/types/src/translations.d.ts.map +1 -1
  82. package/dist/types/src/types.d.ts +33 -3
  83. package/dist/types/src/types.d.ts.map +1 -1
  84. package/package.json +37 -36
  85. package/src/SheetPlugin.tsx +27 -7
  86. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
  87. package/src/components/GridSheet/GridSheet.tsx +107 -42
  88. package/src/components/GridSheet/util.ts +26 -16
  89. package/src/components/RangeList/RangeList.tsx +27 -12
  90. package/src/components/SheetContainer/SheetContainer.stories.tsx +4 -2
  91. package/src/components/SheetContainer/SheetContainer.tsx +19 -12
  92. package/src/components/Toolbar/Toolbar.tsx +72 -59
  93. package/src/compute-graph/compute-graph.ts +22 -7
  94. package/src/compute-graph/functions/async-function.ts +1 -0
  95. package/src/compute-graph/functions/edge-function.ts +5 -3
  96. package/src/defs/sheet-range-types.ts +8 -6
  97. package/src/defs/util.ts +1 -0
  98. package/src/integrations/thread-ranges.ts +3 -3
  99. package/src/meta.ts +1 -0
  100. package/src/model/sheet-model.test.ts +5 -3
  101. package/src/model/sheet-model.ts +93 -21
  102. package/src/translations.ts +12 -3
  103. package/src/types.ts +21 -1
  104. package/dist/lib/browser/SheetContainer-JBB7W52Y.mjs.map +0 -7
  105. package/dist/lib/browser/chunk-2ZK3YMZG.mjs.map +0 -7
  106. package/dist/lib/browser/chunk-3QWIMZZJ.mjs.map +0 -7
  107. package/dist/lib/browser/chunk-XXDHBYZQ.mjs.map +0 -7
  108. package/dist/lib/node/SheetContainer-L37HUFCF.cjs.map +0 -7
  109. package/dist/lib/node/chunk-7AWAC3R3.cjs.map +0 -7
  110. package/dist/lib/node/chunk-QNFMTK3X.cjs.map +0 -7
  111. package/dist/lib/node/chunk-V7E5JZBD.cjs.map +0 -7
  112. package/dist/lib/node-esm/SheetContainer-CLKFEM35.mjs.map +0 -7
  113. package/dist/lib/node-esm/chunk-3JYJEOCF.mjs.map +0 -7
  114. package/dist/lib/node-esm/chunk-JBTORSST.mjs.map +0 -7
  115. package/dist/lib/node-esm/chunk-SPQFLYC2.mjs.map +0 -7
  116. /package/dist/lib/browser/{compute-graph-ZQKB6QVP.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  117. /package/dist/lib/node-esm/{compute-graph-VKRG526N.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
@@ -2,23 +2,27 @@ import {
2
2
  GridSheet,
3
3
  SheetProvider,
4
4
  completeCellRangeToThreadCursor,
5
+ useComputeGraph,
5
6
  useSheetContext
6
- } from "./chunk-XXDHBYZQ.mjs";
7
+ } from "./chunk-4LKIURJA.mjs";
7
8
  import {
8
9
  addressToA1Notation,
10
+ alignKey,
9
11
  inRange,
10
12
  isFormula,
11
13
  rangeFromIndex,
12
14
  rangeToA1Notation,
13
- rangeToIndex
14
- } from "./chunk-2ZK3YMZG.mjs";
15
- import "./chunk-3QWIMZZJ.mjs";
15
+ rangeToIndex,
16
+ styleKey
17
+ } from "./chunk-VMSX6Z4X.mjs";
18
+ import "./chunk-BVUN7SHF.mjs";
16
19
  import {
17
20
  SHEET_PLUGIN
18
- } from "./chunk-D3QTX46O.mjs";
21
+ } from "./chunk-RABELMEQ.mjs";
19
22
 
20
23
  // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
21
24
  import React3 from "react";
25
+ import { StackItem } from "@dxos/react-ui-stack";
22
26
 
23
27
  // packages/plugins/plugin-sheet/src/components/FunctionEditor/FunctionEditor.tsx
24
28
  import React from "react";
@@ -38,7 +42,7 @@ var FunctionEditor = () => {
38
42
  }
39
43
  }
40
44
  return /* @__PURE__ */ React.createElement("div", {
41
- className: mx("flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface")
45
+ className: mx("flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface")
42
46
  }, /* @__PURE__ */ React.createElement("div", {
43
47
  className: "flex gap-4 items-center"
44
48
  }, /* @__PURE__ */ React.createElement("div", {
@@ -58,7 +62,7 @@ var FunctionEditor = () => {
58
62
 
59
63
  // packages/plugins/plugin-sheet/src/components/Toolbar/Toolbar.tsx
60
64
  import { createContext } from "@radix-ui/react-context";
61
- import React2, { useCallback, useMemo } from "react";
65
+ import React2, { useCallback } from "react";
62
66
  import { useIntentDispatcher } from "@dxos/app-framework";
63
67
  import { Icon as Icon2, Toolbar as NaturalToolbar, Tooltip, useTranslation } from "@dxos/react-ui";
64
68
  import { useAttention } from "@dxos/react-ui-attention";
@@ -88,16 +92,15 @@ var ToolbarItem = ({ itemType, icon, children, ...props }) => {
88
92
  }, children))), /* @__PURE__ */ React2.createElement(Tooltip.Portal, null, /* @__PURE__ */ React2.createElement(Tooltip.Content, tooltipProps, children, /* @__PURE__ */ React2.createElement(Tooltip.Arrow, null))));
89
93
  };
90
94
  var [ToolbarContextProvider, useToolbarContext] = createContext("Toolbar");
91
- var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
92
95
  var ToolbarRoot = ({ children, role, classNames }) => {
93
96
  const { id, model, cursorFallbackRange, cursor } = useSheetContext();
94
97
  const { hasAttention } = useAttention(id);
95
98
  const dispatch = useIntentDispatcher();
96
99
  const handleAction = useCallback((action) => {
97
100
  switch (action.key) {
98
- case "align":
99
- if (cursor && cursorFallbackRange) {
100
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && inRange(rangeFromIndex(model.sheet, range.range), cursor));
101
+ case "alignment":
102
+ if (cursorFallbackRange) {
103
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
101
104
  const nextRangeEntity = {
102
105
  range: rangeToIndex(model.sheet, cursorFallbackRange),
103
106
  key: action.key,
@@ -105,14 +108,16 @@ var ToolbarRoot = ({ children, role, classNames }) => {
105
108
  };
106
109
  if (index < 0) {
107
110
  model.sheet.ranges?.push(nextRangeEntity);
111
+ } else if (model.sheet.ranges[index].value === action.value) {
112
+ model.sheet.ranges?.splice(index, 1);
108
113
  } else {
109
114
  model.sheet.ranges?.splice(index, 1, nextRangeEntity);
110
115
  }
111
116
  }
112
117
  break;
113
118
  case "style":
114
- if (action.value === "unset") {
115
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key);
119
+ if (action.unset) {
120
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && cursorFallbackRange && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from));
116
121
  if (index >= 0) {
117
122
  model.sheet.ranges?.splice(index, 1);
118
123
  }
@@ -147,13 +152,8 @@ var ToolbarRoot = ({ children, role, classNames }) => {
147
152
  onAction: handleAction
148
153
  }, /* @__PURE__ */ React2.createElement(NaturalToolbar.Root, {
149
154
  classNames: [
150
- ...role === "section" ? [
151
- "z-[2] group-focus-within/section:visible",
152
- !hasAttention && "invisible",
153
- sectionToolbarLayout
154
- ] : [
155
- "attention-surface"
156
- ],
155
+ "pli-0.5",
156
+ !hasAttention && "opacity-20",
157
157
  classNames
158
158
  ]
159
159
  }, children));
@@ -176,15 +176,15 @@ var Alignment = () => {
176
176
  const { cursor, model } = useSheetContext();
177
177
  const { onAction } = useToolbarContext("Alignment");
178
178
  const { t } = useTranslation(SHEET_PLUGIN);
179
- const value = useMemo(() => cursor ? model.sheet.ranges?.find(({ range, key }) => key === "alignment" && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0, [
180
- cursor,
181
- model.sheet.ranges
182
- ]);
179
+ const value = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
183
180
  return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
184
181
  type: "single",
185
- value,
182
+ value: (
183
+ // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.
184
+ value ?? "never"
185
+ ),
186
186
  onValueChange: (value2) => onAction?.({
187
- key: "align",
187
+ key: alignKey,
188
188
  value: value2
189
189
  })
190
190
  }, alignmentOptions.map(({ value: value2, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
@@ -192,35 +192,45 @@ var Alignment = () => {
192
192
  key: value2,
193
193
  value: value2,
194
194
  icon
195
- }, t(`toolbar ${value2} label`))));
195
+ }, t("toolbar action label", {
196
+ key: t(`range key ${alignKey} label`),
197
+ value: t(`range value ${value2} label`)
198
+ }))));
196
199
  };
197
200
  var styleOptions = [
198
201
  {
199
202
  value: "highlight",
200
203
  icon: "ph--highlighter--regular"
204
+ },
205
+ {
206
+ value: "softwrap",
207
+ icon: "ph--paragraph--regular"
201
208
  }
202
209
  ];
203
210
  var Styles = () => {
204
- const { cursor, model } = useSheetContext();
211
+ const { cursorFallbackRange, model } = useSheetContext();
205
212
  const { onAction } = useToolbarContext("Styles");
206
213
  const { t } = useTranslation(SHEET_PLUGIN);
207
- const activeValues = useMemo(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && inRange(rangeFromIndex(model.sheet, range), cursor)).reduce((acc, { value }) => {
214
+ const activeValues = cursorFallbackRange ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).reduce((acc, { value }) => {
208
215
  acc.add(value);
209
216
  return acc;
210
- }, /* @__PURE__ */ new Set()) : void 0, [
211
- cursor,
212
- model.sheet.ranges
213
- ]);
217
+ }, /* @__PURE__ */ new Set()) : void 0;
214
218
  return /* @__PURE__ */ React2.createElement(React2.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ React2.createElement(ToolbarItem, {
215
219
  itemType: "toggle",
216
220
  key: value,
217
221
  pressed: activeValues?.has(value),
218
- onPressedChange: (nextPressed) => onAction?.({
219
- key: "style",
220
- value: nextPressed ? value : "unset"
221
- }),
222
+ onPressedChange: (nextPressed) => {
223
+ onAction?.({
224
+ key: "style",
225
+ value,
226
+ unset: !nextPressed
227
+ });
228
+ },
222
229
  icon
223
- }, t(`toolbar ${value} label`))));
230
+ }, t("toolbar action label", {
231
+ key: t(`range key ${styleKey} label`),
232
+ value: t(`range value ${value} label`)
233
+ }))));
224
234
  };
225
235
  var Actions = () => {
226
236
  const { onAction } = useToolbarContext("Actions");
@@ -239,16 +249,16 @@ var Actions = () => {
239
249
  icon: "ph--chat-text--regular",
240
250
  "data-testid": "editor.toolbar.comment",
241
251
  onClick: () => {
242
- if (!(cursorFallbackRange && cursor)) {
252
+ if (!cursorFallbackRange) {
243
253
  return;
244
254
  }
245
255
  return onAction?.({
246
256
  key: "comment",
247
257
  value: rangeToIndex(model.sheet, cursorFallbackRange),
248
- cellContent: model.getCellText(cursor)
258
+ cellContent: model.getCellText(cursorFallbackRange.from)
249
259
  });
250
260
  },
251
- disabled: !cursor || overlapsCommentAnchor
261
+ disabled: !cursorFallbackRange || overlapsCommentAnchor
252
262
  }, t(tooltipLabelKey));
253
263
  };
254
264
  var Toolbar = {
@@ -260,16 +270,18 @@ var Toolbar = {
260
270
  };
261
271
 
262
272
  // packages/plugins/plugin-sheet/src/components/SheetContainer/SheetContainer.tsx
263
- var SheetContainer = ({ graph, sheet, role }) => {
264
- return /* @__PURE__ */ React3.createElement(SheetProvider, {
273
+ var SheetContainer = ({ space, sheet, role }) => {
274
+ const graph = useComputeGraph(space);
275
+ return graph ? /* @__PURE__ */ React3.createElement(SheetProvider, {
265
276
  sheet,
266
277
  graph
278
+ }, /* @__PURE__ */ React3.createElement(StackItem.Content, {
279
+ toolbar: true,
280
+ statusbar: true,
281
+ classNames: "border-bs border-separator"
267
282
  }, /* @__PURE__ */ React3.createElement(Toolbar.Root, {
268
283
  role
269
- }, /* @__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", {
270
- role: "none",
271
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
272
- }, /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null)));
284
+ }, /* @__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;
273
285
  };
274
286
 
275
287
  // packages/plugins/plugin-sheet/src/components/SheetContainer/index.ts
@@ -277,4 +289,4 @@ var SheetContainer_default = SheetContainer;
277
289
  export {
278
290
  SheetContainer_default as default
279
291
  };
280
- //# sourceMappingURL=SheetContainer-JBB7W52Y.mjs.map
292
+ //# sourceMappingURL=SheetContainer-P3NF5KEI.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
+ }