@dxos/plugin-sheet 0.6.13-main.09887cd → 0.6.13-main.ed424a1

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 (79) hide show
  1. package/dist/lib/browser/{SheetContainer-NDNIS44E.mjs → SheetContainer-RVRACGCZ.mjs} +107 -82
  2. package/dist/lib/browser/SheetContainer-RVRACGCZ.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-GKI67SEF.mjs → chunk-BWN5DZWZ.mjs} +16 -11
  4. package/dist/lib/browser/chunk-BWN5DZWZ.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-AQSGDA4X.mjs → chunk-HOG37RYS.mjs} +92 -178
  6. package/dist/lib/browser/chunk-HOG37RYS.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +2 -2
  8. package/dist/lib/browser/meta.json +1 -1
  9. package/dist/lib/browser/types.mjs +3 -3
  10. package/dist/lib/node/{SheetContainer-YSQGJD7K.cjs → SheetContainer-J7XROAMN.cjs} +113 -89
  11. package/dist/lib/node/SheetContainer-J7XROAMN.cjs.map +7 -0
  12. package/dist/lib/node/{chunk-6F43RV45.cjs → chunk-AXQZA2YS.cjs} +103 -186
  13. package/dist/lib/node/chunk-AXQZA2YS.cjs.map +7 -0
  14. package/dist/lib/node/{chunk-ER3PM7GD.cjs → chunk-NZARD7UP.cjs} +20 -15
  15. package/dist/lib/node/chunk-NZARD7UP.cjs.map +7 -0
  16. package/dist/lib/node/index.cjs +18 -18
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/types.cjs +7 -7
  19. package/dist/lib/node/types.cjs.map +1 -1
  20. package/dist/lib/node-esm/{SheetContainer-M7WRMZDU.mjs → SheetContainer-YWQVKHQB.mjs} +107 -82
  21. package/dist/lib/node-esm/SheetContainer-YWQVKHQB.mjs.map +7 -0
  22. package/dist/lib/node-esm/{chunk-ELTFPX5B.mjs → chunk-BPXXIAOQ.mjs} +92 -178
  23. package/dist/lib/node-esm/chunk-BPXXIAOQ.mjs.map +7 -0
  24. package/dist/lib/node-esm/{chunk-ZVLLQ2PJ.mjs → chunk-WFDTY3IC.mjs} +16 -11
  25. package/dist/lib/node-esm/chunk-WFDTY3IC.mjs.map +7 -0
  26. package/dist/lib/node-esm/index.mjs +2 -2
  27. package/dist/lib/node-esm/meta.json +1 -1
  28. package/dist/lib/node-esm/types.mjs +3 -3
  29. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  30. package/dist/types/src/components/GridSheet/util.d.ts +2 -2
  31. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  32. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  33. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/SheetContext/SheetContext.d.ts +1 -2
  35. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  36. package/dist/types/src/components/Toolbar/Toolbar.d.ts +11 -17
  37. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  38. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +1 -2
  39. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/defs/index.d.ts +1 -0
  42. package/dist/types/src/defs/index.d.ts.map +1 -1
  43. package/dist/types/src/defs/sheet-range-types.d.ts +13 -0
  44. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -0
  45. package/dist/types/src/hooks/index.d.ts +0 -1
  46. package/dist/types/src/hooks/index.d.ts.map +1 -1
  47. package/dist/types/src/model/index.d.ts +0 -1
  48. package/dist/types/src/model/index.d.ts.map +1 -1
  49. package/dist/types/src/types.d.ts +39 -20
  50. package/dist/types/src/types.d.ts.map +1 -1
  51. package/package.json +35 -34
  52. package/src/components/GridSheet/GridSheet.stories.tsx +2 -2
  53. package/src/components/GridSheet/GridSheet.tsx +5 -3
  54. package/src/components/GridSheet/util.ts +24 -10
  55. package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -2
  56. package/src/components/SheetContainer/SheetContainer.tsx +3 -28
  57. package/src/components/SheetContext/SheetContext.tsx +5 -9
  58. package/src/components/Toolbar/Toolbar.tsx +116 -68
  59. package/src/defs/index.ts +1 -0
  60. package/src/defs/sheet-range-types.ts +46 -0
  61. package/src/defs/util.ts +1 -1
  62. package/src/hooks/index.ts +0 -1
  63. package/src/model/index.ts +0 -1
  64. package/src/types.ts +5 -11
  65. package/dist/lib/browser/SheetContainer-NDNIS44E.mjs.map +0 -7
  66. package/dist/lib/browser/chunk-AQSGDA4X.mjs.map +0 -7
  67. package/dist/lib/browser/chunk-GKI67SEF.mjs.map +0 -7
  68. package/dist/lib/node/SheetContainer-YSQGJD7K.cjs.map +0 -7
  69. package/dist/lib/node/chunk-6F43RV45.cjs.map +0 -7
  70. package/dist/lib/node/chunk-ER3PM7GD.cjs.map +0 -7
  71. package/dist/lib/node-esm/SheetContainer-M7WRMZDU.mjs.map +0 -7
  72. package/dist/lib/node-esm/chunk-ELTFPX5B.mjs.map +0 -7
  73. package/dist/lib/node-esm/chunk-ZVLLQ2PJ.mjs.map +0 -7
  74. package/dist/types/src/hooks/useFormattingModel.d.ts +0 -3
  75. package/dist/types/src/hooks/useFormattingModel.d.ts.map +0 -1
  76. package/dist/types/src/model/formatting-model.d.ts +0 -19
  77. package/dist/types/src/model/formatting-model.d.ts.map +0 -1
  78. package/src/hooks/useFormattingModel.ts +0 -11
  79. package/src/model/formatting-model.ts +0 -116
@@ -26,27 +26,27 @@ 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_YSQGJD7K_exports = {};
30
- __export(SheetContainer_YSQGJD7K_exports, {
29
+ var SheetContainer_J7XROAMN_exports = {};
30
+ __export(SheetContainer_J7XROAMN_exports, {
31
31
  default: () => SheetContainer_default
32
32
  });
33
- module.exports = __toCommonJS(SheetContainer_YSQGJD7K_exports);
34
- var import_chunk_6F43RV45 = require("./chunk-6F43RV45.cjs");
35
- var import_chunk_ER3PM7GD = require("./chunk-ER3PM7GD.cjs");
33
+ module.exports = __toCommonJS(SheetContainer_J7XROAMN_exports);
34
+ var import_chunk_AXQZA2YS = require("./chunk-AXQZA2YS.cjs");
35
+ var import_chunk_NZARD7UP = require("./chunk-NZARD7UP.cjs");
36
36
  var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
37
37
  var import_chunk_5XPK2V4A = require("./chunk-5XPK2V4A.cjs");
38
38
  var import_react = __toESM(require("react"));
39
- var import_app_framework = require("@dxos/app-framework");
40
39
  var import_react2 = __toESM(require("react"));
41
40
  var import_react_ui = require("@dxos/react-ui");
42
41
  var import_react_ui_theme = require("@dxos/react-ui-theme");
43
42
  var import_react_context = require("@radix-ui/react-context");
44
43
  var import_react3 = __toESM(require("react"));
44
+ var import_app_framework = require("@dxos/app-framework");
45
45
  var import_react_ui2 = require("@dxos/react-ui");
46
46
  var import_react_ui_attention = require("@dxos/react-ui-attention");
47
47
  var import_util = require("@dxos/util");
48
48
  var FunctionEditor = () => {
49
- const { model, cursor, range } = (0, import_chunk_6F43RV45.useSheetContext)();
49
+ const { model, cursor, range } = (0, import_chunk_AXQZA2YS.useSheetContext)();
50
50
  let value;
51
51
  let isFormula = false;
52
52
  if (cursor) {
@@ -64,7 +64,7 @@ var FunctionEditor = () => {
64
64
  className: "flex gap-4 items-center"
65
65
  }, /* @__PURE__ */ import_react2.default.createElement("div", {
66
66
  className: "flex w-16 items-center font-mono"
67
- }, range && (0, import_chunk_6F43RV45.rangeToA1Notation)(range) || cursor && (0, import_chunk_6F43RV45.addressToA1Notation)(cursor)), /* @__PURE__ */ import_react2.default.createElement("div", {
67
+ }, range && (0, import_chunk_AXQZA2YS.rangeToA1Notation)(range) || cursor && (0, import_chunk_AXQZA2YS.addressToA1Notation)(cursor)), /* @__PURE__ */ import_react2.default.createElement("div", {
68
68
  className: "flex gap-2 items-center"
69
69
  }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Icon, {
70
70
  icon: "ph--function--regular",
@@ -102,11 +102,74 @@ var ToolbarItem = ({ itemType, icon, children, ...props }) => {
102
102
  };
103
103
  var [ToolbarContextProvider, useToolbarContext] = (0, import_react_context.createContext)("Toolbar");
104
104
  var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
105
- var ToolbarRoot = ({ children, onAction, role, classNames }) => {
106
- const { id } = (0, import_chunk_6F43RV45.useSheetContext)();
105
+ var ToolbarRoot = ({ children, role, classNames }) => {
106
+ const { id, model, range, cursor } = (0, import_chunk_AXQZA2YS.useSheetContext)();
107
107
  const { hasAttention } = (0, import_react_ui_attention.useAttention)(id);
108
+ const dispatch = (0, import_app_framework.useIntentDispatcher)();
109
+ const handleAction = (0, import_react3.useCallback)((action) => {
110
+ switch (action.key) {
111
+ case "align":
112
+ if (cursor) {
113
+ const index = model.sheet.ranges?.findIndex((range2) => range2.key === action.key && (0, import_chunk_AXQZA2YS.inRange)(range2.range, cursor));
114
+ const nextRange = range ? {
115
+ from: range.from,
116
+ to: range.to ?? range.from
117
+ } : {
118
+ from: cursor,
119
+ to: cursor
120
+ };
121
+ const nextRangeEntity = {
122
+ range: nextRange,
123
+ key: action.key,
124
+ value: action.value
125
+ };
126
+ if (index < 0) {
127
+ model.sheet.ranges?.push(nextRangeEntity);
128
+ } else {
129
+ model.sheet.ranges?.splice(index, 1, nextRangeEntity);
130
+ }
131
+ }
132
+ break;
133
+ case "style":
134
+ if (action.value === "unset") {
135
+ const index = model.sheet.ranges?.findIndex((range2) => range2.key === action.key);
136
+ if (index >= 0) {
137
+ model.sheet.ranges?.splice(index, 1);
138
+ }
139
+ } else if (range || cursor) {
140
+ const nextRange = range ? {
141
+ from: range.from,
142
+ to: range.to ?? range.from
143
+ } : {
144
+ from: cursor,
145
+ to: cursor
146
+ };
147
+ model.sheet.ranges?.push({
148
+ range: nextRange,
149
+ key: action.key,
150
+ value: action.value
151
+ });
152
+ }
153
+ break;
154
+ case "comment": {
155
+ void dispatch({
156
+ action: "dxos.org/plugin/thread/action/create",
157
+ data: {
158
+ cursor: action.value,
159
+ name: action.cellContent,
160
+ subject: model.sheet
161
+ }
162
+ });
163
+ }
164
+ }
165
+ }, [
166
+ model.sheet,
167
+ range,
168
+ cursor,
169
+ dispatch
170
+ ]);
108
171
  return /* @__PURE__ */ import_react3.default.createElement(ToolbarContextProvider, {
109
- onAction
172
+ onAction: handleAction
110
173
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
111
174
  classNames: [
112
175
  ...role === "section" ? [
@@ -120,98 +183,79 @@ var ToolbarRoot = ({ children, onAction, role, classNames }) => {
120
183
  ]
121
184
  }, children));
122
185
  };
123
- var formatOptions = [
124
- {
125
- value: "date",
126
- icon: "ph--calendar--regular",
127
- getState: (state) => false
128
- },
129
- {
130
- value: "currency",
131
- icon: "ph--currency-dollar--regular",
132
- getState: (state) => false
133
- }
134
- ];
135
- var Format = () => {
136
- const { onAction } = useToolbarContext("Format");
137
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
138
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.ToggleGroup, {
139
- type: "single"
140
- }, formatOptions.map(({ value, getState, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
141
- itemType: "toggleGroupItem",
142
- key: value,
143
- value,
144
- icon,
145
- onClick: () => onAction?.({
146
- type: "format",
147
- value
148
- })
149
- }, t(`toolbar ${value} label`))));
150
- };
151
186
  var alignmentOptions = [
152
187
  {
153
- value: "left",
154
- icon: "ph--text-align-left--regular",
155
- getState: (state) => false
188
+ value: "start",
189
+ icon: "ph--text-align-left--regular"
156
190
  },
157
191
  {
158
192
  value: "center",
159
- icon: "ph--text-align-center--regular",
160
- getState: (state) => false
193
+ icon: "ph--text-align-center--regular"
161
194
  },
162
195
  {
163
- value: "right",
164
- icon: "ph--text-align-right--regular",
165
- getState: (state) => false
196
+ value: "end",
197
+ icon: "ph--text-align-right--regular"
166
198
  }
167
199
  ];
168
200
  var Alignment = () => {
201
+ const { cursor, model } = (0, import_chunk_AXQZA2YS.useSheetContext)();
169
202
  const { onAction } = useToolbarContext("Alignment");
170
203
  const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
204
+ const value = (0, import_react3.useMemo)(() => cursor ? model.sheet.ranges?.find(({ range, key }) => key === "alignment" && (0, import_chunk_AXQZA2YS.inRange)(range, cursor))?.value : void 0, [
205
+ cursor,
206
+ model.sheet.ranges
207
+ ]);
171
208
  return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.ToggleGroup, {
172
209
  type: "single",
173
- // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}
174
- // disabled={state?.blockType === 'codeblock'}
175
- onValueChange: (value) => onAction?.({
176
- type: "align",
177
- value
210
+ value,
211
+ onValueChange: (value2) => onAction?.({
212
+ key: "align",
213
+ value: value2
178
214
  })
179
- }, alignmentOptions.map(({ value, getState, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
215
+ }, alignmentOptions.map(({ value: value2, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
180
216
  itemType: "toggleGroupItem",
181
- key: value,
182
- value,
217
+ key: value2,
218
+ value: value2,
183
219
  icon
184
- }, t(`toolbar ${value} label`))));
220
+ }, t(`toolbar ${value2} label`))));
185
221
  };
186
222
  var styleOptions = [
187
223
  {
188
224
  value: "highlight",
189
- icon: "ph--highlighter--regular",
190
- getState: (state) => false
225
+ icon: "ph--highlighter--regular"
191
226
  }
192
227
  ];
193
228
  var Styles = () => {
229
+ const { cursor, model } = (0, import_chunk_AXQZA2YS.useSheetContext)();
194
230
  const { onAction } = useToolbarContext("Styles");
195
231
  const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
196
- return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, styleOptions.map(({ value, getState, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
232
+ const activeValues = (0, import_react3.useMemo)(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && (0, import_chunk_AXQZA2YS.inRange)(range, cursor)).reduce((acc, { value }) => {
233
+ acc.add(value);
234
+ return acc;
235
+ }, /* @__PURE__ */ new Set()) : void 0, [
236
+ cursor,
237
+ model.sheet.ranges
238
+ ]);
239
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
197
240
  itemType: "toggle",
198
241
  key: value,
242
+ pressed: activeValues?.has(value),
199
243
  onPressedChange: (nextPressed) => onAction?.({
200
- type: "style",
201
- value: nextPressed ? "highlight" : "unset"
244
+ key: "style",
245
+ value: nextPressed ? value : "unset"
202
246
  }),
203
247
  icon
204
248
  }, t(`toolbar ${value} label`))));
205
249
  };
206
250
  var Actions = () => {
207
251
  const { onAction } = useToolbarContext("Actions");
208
- const { cursor, range, model } = (0, import_chunk_6F43RV45.useSheetContext)();
252
+ const { cursor, range, model } = (0, import_chunk_AXQZA2YS.useSheetContext)();
209
253
  const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
210
254
  const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(import_util.nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
211
255
  if (!cursor) {
212
256
  return false;
213
257
  }
214
- return (0, import_chunk_6F43RV45.addressToIndex)(model.sheet, cursor) === thread.anchor;
258
+ return (0, import_chunk_AXQZA2YS.addressToIndex)(model.sheet, cursor) === thread.anchor;
215
259
  });
216
260
  const hasCursor = !!cursor;
217
261
  const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;
@@ -226,8 +270,8 @@ var Actions = () => {
226
270
  return;
227
271
  }
228
272
  return onAction?.({
229
- type: "comment",
230
- anchor: (0, import_chunk_6F43RV45.addressToIndex)(model.sheet, cursor),
273
+ key: "comment",
274
+ value: (0, import_chunk_AXQZA2YS.addressToIndex)(model.sheet, cursor),
231
275
  cellContent: model.getCellText(cursor)
232
276
  });
233
277
  },
@@ -238,39 +282,19 @@ var Toolbar = {
238
282
  Root: ToolbarRoot,
239
283
  Separator: ToolbarSeparator,
240
284
  Alignment,
241
- Format,
242
285
  Styles,
243
286
  Actions
244
287
  };
245
288
  var SheetContainer = ({ graph, sheet, role }) => {
246
- const dispatch = (0, import_app_framework.useIntentDispatcher)();
247
- const handleAction = (0, import_react.useCallback)((action) => {
248
- switch (action.type) {
249
- case "comment": {
250
- void dispatch({
251
- action: "dxos.org/plugin/thread/action/create",
252
- data: {
253
- cursor: action.anchor,
254
- name: action.cellContent,
255
- subject: sheet
256
- }
257
- });
258
- }
259
- }
260
- }, [
261
- sheet,
262
- dispatch
263
- ]);
264
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_6F43RV45.SheetProvider, {
289
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_AXQZA2YS.SheetProvider, {
265
290
  sheet,
266
291
  graph
267
292
  }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Root, {
268
- onAction: handleAction,
269
293
  role
270
- }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Styles, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Format, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Alignment, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Separator, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Actions, null)), /* @__PURE__ */ import_react.default.createElement("div", {
294
+ }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Styles, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Alignment, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Separator, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Actions, null)), /* @__PURE__ */ import_react.default.createElement("div", {
271
295
  role: "none",
272
296
  className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
273
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_6F43RV45.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null)));
297
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_AXQZA2YS.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null)));
274
298
  };
275
299
  var SheetContainer_default = SheetContainer;
276
- //# sourceMappingURL=SheetContainer-YSQGJD7K.cjs.map
300
+ //# sourceMappingURL=SheetContainer-J7XROAMN.cjs.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 { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider, type SheetProviderProps } from '../SheetContext';\nimport { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({ graph, sheet, role }: SheetProviderProps & { role?: string }) => {\n return (\n <SheetProvider sheet={sheet} graph={graph}>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n <div role='none' className='border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0'>\n <GridSheet />\n <FunctionEditor />\n </div>\n </SheetProvider>\n );\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, rangeToA1Notation } from '../../defs';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let isFormula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (typeof value === 'string' && value.charAt(0) === '=') {\n value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));\n isFormula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div\n className={mx(\n 'flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface',\n )}\n >\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', isFormula ? '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, useMemo } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport {\n Icon,\n Toolbar as NaturalToolbar,\n useTranslation,\n Tooltip,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n type ThemedClassName,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport {\n addressToIndex,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\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;\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{ onAction: (action: ToolbarAction) => void }>(\n 'Toolbar',\n);\n\n// TODO(Zan): Factor out, copied this from MarkdownPlugin.\nconst sectionToolbarLayout =\n 'bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity';\n\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, range, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Centralise the toolbar action handler. Current implementation in stories.\n const handleAction = useCallback(\n (action: ToolbarAction) => {\n switch (action.key) {\n case 'align':\n if (cursor) {\n const index = model.sheet.ranges?.findIndex(\n (range) => range.key === action.key && inRange(range.range, cursor),\n );\n const nextRange = range ? { from: range.from, to: range.to ?? range.from } : { from: cursor, to: cursor };\n const nextRangeEntity = {\n range: nextRange as Range['range'],\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.value === 'unset') {\n const index = model.sheet.ranges?.findIndex((range) => range.key === action.key);\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (range || cursor) {\n const nextRange = range ? { from: range.from, to: range.to ?? range.from } : { from: cursor, to: cursor };\n model.sheet.ranges?.push({\n range: nextRange as Range['range'],\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 void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: action.value,\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n },\n [model.sheet, range, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\n <NaturalToolbar.Root\n classNames={[\n ...(role === 'section'\n ? ['z-[2] group-focus-within/section:visible', !hasAttention && 'invisible', sectionToolbarLayout]\n : ['attention-surface']),\n classNames,\n ]}\n >\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 const value = useMemo(\n () =>\n cursor\n ? model.sheet.ranges?.find(({ range, key }) => key === 'alignment' && inRange(range, cursor))?.value\n : undefined,\n [cursor, model.sheet.ranges],\n );\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={value}\n onValueChange={(value: AlignValue) => onAction?.({ key: 'align', value })}\n >\n {alignmentOptions.map(({ value, icon }) => (\n <ToolbarItem itemType='toggleGroupItem' key={value} value={value} icon={icon}>\n {t(`toolbar ${value} label`)}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [{ value: 'highlight', icon: 'ph--highlighter--regular' }];\n\nconst Styles = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const activeValues = useMemo(\n () =>\n cursor\n ? model.sheet.ranges\n ?.filter(({ range, key }) => key === 'style' && inRange(range, cursor))\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined,\n [cursor, model.sheet.ranges],\n );\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) => onAction?.({ key: 'style', value: nextPressed ? value : 'unset' })}\n icon={icon}\n >\n {t(`toolbar ${value} label`)}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursor, range, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursor) {\n return false;\n }\n return addressToIndex(model.sheet, cursor) === thread.anchor;\n });\n\n const hasCursor = !!cursor;\n const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;\n\n const tooltipLabelKey = !hasCursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : range\n ? 'comment ranges not supported 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 (!cursor) {\n return;\n }\n return onAction?.({\n key: 'comment',\n value: addressToIndex(model.sheet, cursor),\n cellContent: model.getCellText(cursor),\n });\n }}\n disabled={!cursorOnly || 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": ["import_react", "import_react_ui", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "isFormula", "getCellValue", "charAt", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "String", "React", "div", "className", "mx", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "buttonStyles", "tooltipProps", "side", "ToolbarSeparator", "role", "ToolbarItem", "itemType", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "size", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "sectionToolbarLayout", "ToolbarRoot", "id", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "inRange", "nextRange", "from", "to", "nextRangeEntity", "push", "splice", "data", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "useMemo", "find", "undefined", "ToggleGroup", "type", "onValueChange", "map", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "addressToIndex", "anchor", "hasCursor", "cursorOnly", "tooltipLabelKey", "data-testid", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "SheetProvider", "GridSheet"]
7
+ }