@dxos/plugin-sheet 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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