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

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
@@ -26,16 +26,17 @@ 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_L37HUFCF_exports = {};
30
- __export(SheetContainer_L37HUFCF_exports, {
29
+ var SheetContainer_MPFKXY26_exports = {};
30
+ __export(SheetContainer_MPFKXY26_exports, {
31
31
  default: () => SheetContainer_default
32
32
  });
33
- module.exports = __toCommonJS(SheetContainer_L37HUFCF_exports);
34
- var import_chunk_7AWAC3R3 = require("./chunk-7AWAC3R3.cjs");
35
- var import_chunk_QNFMTK3X = require("./chunk-QNFMTK3X.cjs");
36
- var import_chunk_V7E5JZBD = require("./chunk-V7E5JZBD.cjs");
37
- var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
33
+ module.exports = __toCommonJS(SheetContainer_MPFKXY26_exports);
34
+ var import_chunk_OO24XJBV = require("./chunk-OO24XJBV.cjs");
35
+ var import_chunk_O7XR4R7Y = require("./chunk-O7XR4R7Y.cjs");
36
+ var import_chunk_AWKOWDMI = require("./chunk-AWKOWDMI.cjs");
37
+ var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
38
38
  var import_react = __toESM(require("react"));
39
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
39
40
  var import_react2 = __toESM(require("react"));
40
41
  var import_react_ui = require("@dxos/react-ui");
41
42
  var import_react_ui_theme = require("@dxos/react-ui-theme");
@@ -46,12 +47,12 @@ var import_react_ui2 = require("@dxos/react-ui");
46
47
  var import_react_ui_attention = require("@dxos/react-ui-attention");
47
48
  var import_util = require("@dxos/util");
48
49
  var FunctionEditor = () => {
49
- const { model, cursor, range } = (0, import_chunk_7AWAC3R3.useSheetContext)();
50
+ const { model, cursor, range } = (0, import_chunk_OO24XJBV.useSheetContext)();
50
51
  let value;
51
52
  let formula = false;
52
53
  if (cursor) {
53
54
  value = model.getCellValue(cursor);
54
- if ((0, import_chunk_QNFMTK3X.isFormula)(value)) {
55
+ if ((0, import_chunk_O7XR4R7Y.isFormula)(value)) {
55
56
  value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));
56
57
  formula = true;
57
58
  } else if (value != null) {
@@ -59,12 +60,12 @@ var FunctionEditor = () => {
59
60
  }
60
61
  }
61
62
  return /* @__PURE__ */ import_react2.default.createElement("div", {
62
- className: (0, import_react_ui_theme.mx)("flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface")
63
+ className: (0, import_react_ui_theme.mx)("flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface")
63
64
  }, /* @__PURE__ */ import_react2.default.createElement("div", {
64
65
  className: "flex gap-4 items-center"
65
66
  }, /* @__PURE__ */ import_react2.default.createElement("div", {
66
67
  className: "flex w-16 items-center font-mono"
67
- }, range && (0, import_chunk_QNFMTK3X.rangeToA1Notation)(range) || cursor && (0, import_chunk_QNFMTK3X.addressToA1Notation)(cursor)), /* @__PURE__ */ import_react2.default.createElement("div", {
68
+ }, range && (0, import_chunk_O7XR4R7Y.rangeToA1Notation)(range) || cursor && (0, import_chunk_O7XR4R7Y.addressToA1Notation)(cursor)), /* @__PURE__ */ import_react2.default.createElement("div", {
68
69
  className: "flex gap-2 items-center"
69
70
  }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Icon, {
70
71
  icon: "ph--function--regular",
@@ -101,37 +102,38 @@ var ToolbarItem = ({ itemType, icon, children, ...props }) => {
101
102
  }, children))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, tooltipProps, children, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null))));
102
103
  };
103
104
  var [ToolbarContextProvider, useToolbarContext] = (0, import_react_context.createContext)("Toolbar");
104
- var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
105
105
  var ToolbarRoot = ({ children, role, classNames }) => {
106
- const { id, model, cursorFallbackRange, cursor } = (0, import_chunk_7AWAC3R3.useSheetContext)();
106
+ const { id, model, cursorFallbackRange, cursor } = (0, import_chunk_OO24XJBV.useSheetContext)();
107
107
  const { hasAttention } = (0, import_react_ui_attention.useAttention)(id);
108
108
  const dispatch = (0, import_app_framework.useIntentDispatcher)();
109
109
  const handleAction = (0, import_react3.useCallback)((action) => {
110
110
  switch (action.key) {
111
- case "align":
112
- if (cursor && cursorFallbackRange) {
113
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && (0, import_chunk_QNFMTK3X.inRange)((0, import_chunk_QNFMTK3X.rangeFromIndex)(model.sheet, range.range), cursor));
111
+ case "alignment":
112
+ if (cursorFallbackRange) {
113
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && (0, import_chunk_O7XR4R7Y.inRange)((0, import_chunk_O7XR4R7Y.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
114
114
  const nextRangeEntity = {
115
- range: (0, import_chunk_QNFMTK3X.rangeToIndex)(model.sheet, cursorFallbackRange),
115
+ range: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
116
116
  key: action.key,
117
117
  value: action.value
118
118
  };
119
119
  if (index < 0) {
120
120
  model.sheet.ranges?.push(nextRangeEntity);
121
+ } else if (model.sheet.ranges[index].value === action.value) {
122
+ model.sheet.ranges?.splice(index, 1);
121
123
  } else {
122
124
  model.sheet.ranges?.splice(index, 1, nextRangeEntity);
123
125
  }
124
126
  }
125
127
  break;
126
128
  case "style":
127
- if (action.value === "unset") {
128
- const index = model.sheet.ranges?.findIndex((range) => range.key === action.key);
129
+ if (action.unset) {
130
+ const index = model.sheet.ranges?.findIndex((range) => range.key === action.key && cursorFallbackRange && (0, import_chunk_O7XR4R7Y.inRange)((0, import_chunk_O7XR4R7Y.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from));
129
131
  if (index >= 0) {
130
132
  model.sheet.ranges?.splice(index, 1);
131
133
  }
132
134
  } else if (cursorFallbackRange) {
133
135
  model.sheet.ranges?.push({
134
- range: (0, import_chunk_QNFMTK3X.rangeToIndex)(model.sheet, cursorFallbackRange),
136
+ range: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
135
137
  key: action.key,
136
138
  value: action.value
137
139
  });
@@ -142,7 +144,7 @@ var ToolbarRoot = ({ children, role, classNames }) => {
142
144
  void dispatch({
143
145
  action: "dxos.org/plugin/thread/action/create",
144
146
  data: {
145
- cursor: (0, import_chunk_7AWAC3R3.completeCellRangeToThreadCursor)(cursorFallbackRange),
147
+ cursor: (0, import_chunk_OO24XJBV.completeCellRangeToThreadCursor)(cursorFallbackRange),
146
148
  name: action.cellContent,
147
149
  subject: model.sheet
148
150
  }
@@ -160,13 +162,8 @@ var ToolbarRoot = ({ children, role, classNames }) => {
160
162
  onAction: handleAction
161
163
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
162
164
  classNames: [
163
- ...role === "section" ? [
164
- "z-[2] group-focus-within/section:visible",
165
- !hasAttention && "invisible",
166
- sectionToolbarLayout
167
- ] : [
168
- "attention-surface"
169
- ],
165
+ "pli-0.5",
166
+ !hasAttention && "opacity-20",
170
167
  classNames
171
168
  ]
172
169
  }, children));
@@ -186,18 +183,18 @@ var alignmentOptions = [
186
183
  }
187
184
  ];
188
185
  var Alignment = () => {
189
- const { cursor, model } = (0, import_chunk_7AWAC3R3.useSheetContext)();
186
+ const { cursor, model } = (0, import_chunk_OO24XJBV.useSheetContext)();
190
187
  const { onAction } = useToolbarContext("Alignment");
191
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
192
- const value = (0, import_react3.useMemo)(() => cursor ? model.sheet.ranges?.find(({ range, key }) => key === "alignment" && (0, import_chunk_QNFMTK3X.inRange)((0, import_chunk_QNFMTK3X.rangeFromIndex)(model.sheet, range), cursor))?.value : void 0, [
193
- cursor,
194
- model.sheet.ranges
195
- ]);
188
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_2ZVZI2KJ.SHEET_PLUGIN);
189
+ const value = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === import_chunk_O7XR4R7Y.alignKey && (0, import_chunk_O7XR4R7Y.inRange)((0, import_chunk_O7XR4R7Y.rangeFromIndex)(model.sheet, range), cursor))?.value : void 0;
196
190
  return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.ToggleGroup, {
197
191
  type: "single",
198
- value,
192
+ value: (
193
+ // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.
194
+ value ?? "never"
195
+ ),
199
196
  onValueChange: (value2) => onAction?.({
200
- key: "align",
197
+ key: import_chunk_O7XR4R7Y.alignKey,
201
198
  value: value2
202
199
  })
203
200
  }, alignmentOptions.map(({ value: value2, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
@@ -205,45 +202,55 @@ var Alignment = () => {
205
202
  key: value2,
206
203
  value: value2,
207
204
  icon
208
- }, t(`toolbar ${value2} label`))));
205
+ }, t("toolbar action label", {
206
+ key: t(`range key ${import_chunk_O7XR4R7Y.alignKey} label`),
207
+ value: t(`range value ${value2} label`)
208
+ }))));
209
209
  };
210
210
  var styleOptions = [
211
211
  {
212
212
  value: "highlight",
213
213
  icon: "ph--highlighter--regular"
214
+ },
215
+ {
216
+ value: "softwrap",
217
+ icon: "ph--paragraph--regular"
214
218
  }
215
219
  ];
216
220
  var Styles = () => {
217
- const { cursor, model } = (0, import_chunk_7AWAC3R3.useSheetContext)();
221
+ const { cursorFallbackRange, model } = (0, import_chunk_OO24XJBV.useSheetContext)();
218
222
  const { onAction } = useToolbarContext("Styles");
219
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
220
- const activeValues = (0, import_react3.useMemo)(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && (0, import_chunk_QNFMTK3X.inRange)((0, import_chunk_QNFMTK3X.rangeFromIndex)(model.sheet, range), cursor)).reduce((acc, { value }) => {
223
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_2ZVZI2KJ.SHEET_PLUGIN);
224
+ const activeValues = cursorFallbackRange ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && (0, import_chunk_O7XR4R7Y.inRange)((0, import_chunk_O7XR4R7Y.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).reduce((acc, { value }) => {
221
225
  acc.add(value);
222
226
  return acc;
223
- }, /* @__PURE__ */ new Set()) : void 0, [
224
- cursor,
225
- model.sheet.ranges
226
- ]);
227
+ }, /* @__PURE__ */ new Set()) : void 0;
227
228
  return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
228
229
  itemType: "toggle",
229
230
  key: value,
230
231
  pressed: activeValues?.has(value),
231
- onPressedChange: (nextPressed) => onAction?.({
232
- key: "style",
233
- value: nextPressed ? value : "unset"
234
- }),
232
+ onPressedChange: (nextPressed) => {
233
+ onAction?.({
234
+ key: "style",
235
+ value,
236
+ unset: !nextPressed
237
+ });
238
+ },
235
239
  icon
236
- }, t(`toolbar ${value} label`))));
240
+ }, t("toolbar action label", {
241
+ key: t(`range key ${import_chunk_O7XR4R7Y.styleKey} label`),
242
+ value: t(`range value ${value} label`)
243
+ }))));
237
244
  };
238
245
  var Actions = () => {
239
246
  const { onAction } = useToolbarContext("Actions");
240
- const { cursorFallbackRange, cursor, model } = (0, import_chunk_7AWAC3R3.useSheetContext)();
241
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
247
+ const { cursorFallbackRange, cursor, model } = (0, import_chunk_OO24XJBV.useSheetContext)();
248
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_2ZVZI2KJ.SHEET_PLUGIN);
242
249
  const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(import_util.nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
243
250
  if (!cursorFallbackRange) {
244
251
  return false;
245
252
  }
246
- return (0, import_chunk_QNFMTK3X.rangeToIndex)(model.sheet, cursorFallbackRange) === thread.anchor;
253
+ return (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange) === thread.anchor;
247
254
  });
248
255
  const tooltipLabelKey = !cursor ? "no cursor label" : overlapsCommentAnchor ? "selection overlaps existing comment label" : "comment label";
249
256
  return /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
@@ -252,16 +259,16 @@ var Actions = () => {
252
259
  icon: "ph--chat-text--regular",
253
260
  "data-testid": "editor.toolbar.comment",
254
261
  onClick: () => {
255
- if (!(cursorFallbackRange && cursor)) {
262
+ if (!cursorFallbackRange) {
256
263
  return;
257
264
  }
258
265
  return onAction?.({
259
266
  key: "comment",
260
- value: (0, import_chunk_QNFMTK3X.rangeToIndex)(model.sheet, cursorFallbackRange),
261
- cellContent: model.getCellText(cursor)
267
+ value: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
268
+ cellContent: model.getCellText(cursorFallbackRange.from)
262
269
  });
263
270
  },
264
- disabled: !cursor || overlapsCommentAnchor
271
+ disabled: !cursorFallbackRange || overlapsCommentAnchor
265
272
  }, t(tooltipLabelKey));
266
273
  };
267
274
  var Toolbar = {
@@ -271,16 +278,18 @@ var Toolbar = {
271
278
  Styles,
272
279
  Actions
273
280
  };
274
- var SheetContainer = ({ graph, sheet, role }) => {
275
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_7AWAC3R3.SheetProvider, {
281
+ var SheetContainer = ({ space, sheet, role }) => {
282
+ const graph = (0, import_chunk_OO24XJBV.useComputeGraph)(space);
283
+ return graph ? /* @__PURE__ */ import_react.default.createElement(import_chunk_OO24XJBV.SheetProvider, {
276
284
  sheet,
277
285
  graph
286
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
287
+ toolbar: true,
288
+ statusbar: true,
289
+ classNames: "border-bs border-separator"
278
290
  }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Root, {
279
291
  role
280
- }, /* @__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", {
281
- role: "none",
282
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
283
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_7AWAC3R3.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null)));
292
+ }, /* @__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(import_chunk_OO24XJBV.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null))) : null;
284
293
  };
285
294
  var SheetContainer_default = SheetContainer;
286
- //# sourceMappingURL=SheetContainer-L37HUFCF.cjs.map
295
+ //# sourceMappingURL=SheetContainer-MPFKXY26.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 { 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": ["import_react", "import_react_ui", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "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", "ToolbarRoot", "id", "cursorFallbackRange", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "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", "useComputeGraph", "SheetProvider", "StackItem", "toolbar", "statusbar", "GridSheet"]
7
+ }
@@ -16,22 +16,23 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_QIFIGEKV_exports = {};
20
- __export(chunk_QIFIGEKV_exports, {
19
+ var chunk_2ZVZI2KJ_exports = {};
20
+ __export(chunk_2ZVZI2KJ_exports, {
21
21
  SHEET_PLUGIN: () => SHEET_PLUGIN,
22
22
  meta_default: () => meta_default
23
23
  });
24
- module.exports = __toCommonJS(chunk_QIFIGEKV_exports);
24
+ module.exports = __toCommonJS(chunk_2ZVZI2KJ_exports);
25
25
  var SHEET_PLUGIN = "dxos.org/plugin/sheet";
26
26
  var meta_default = {
27
27
  id: SHEET_PLUGIN,
28
28
  name: "Sheet",
29
29
  description: "A simple spreadsheet plugin.",
30
- icon: "ph--grid-nine--regular"
30
+ icon: "ph--grid-nine--regular",
31
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet"
31
32
  };
32
33
  // Annotate the CommonJS export names for ESM import in node:
33
34
  0 && (module.exports = {
34
35
  SHEET_PLUGIN,
35
36
  meta_default
36
37
  });
37
- //# sourceMappingURL=chunk-QIFIGEKV.cjs.map
38
+ //# sourceMappingURL=chunk-2ZVZI2KJ.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport default {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;AACR;",
6
- "names": ["SHEET_PLUGIN", "id", "name", "description", "icon"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport default {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
+ "names": ["SHEET_PLUGIN", "id", "name", "description", "icon", "source"]
7
7
  }
@@ -16,22 +16,24 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_V7E5JZBD_exports = {};
20
- __export(chunk_V7E5JZBD_exports, {
19
+ var chunk_AWKOWDMI_exports = {};
20
+ __export(chunk_AWKOWDMI_exports, {
21
21
  CellValue: () => CellValue,
22
22
  Range: () => Range,
23
23
  RowColumnMeta: () => RowColumnMeta,
24
24
  SheetAction: () => SheetAction,
25
25
  SheetType: () => SheetType
26
26
  });
27
- module.exports = __toCommonJS(chunk_V7E5JZBD_exports);
28
- var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
27
+ module.exports = __toCommonJS(chunk_AWKOWDMI_exports);
28
+ var import_chunk_2ZVZI2KJ = require("./chunk-2ZVZI2KJ.cjs");
29
29
  var import_echo_schema = require("@dxos/echo-schema");
30
30
  var import_types = require("@dxos/plugin-space/types");
31
- var SHEET_ACTION = `${import_chunk_QIFIGEKV.SHEET_PLUGIN}/action`;
31
+ var SHEET_ACTION = `${import_chunk_2ZVZI2KJ.SHEET_PLUGIN}/action`;
32
32
  var SheetAction;
33
33
  (function(SheetAction2) {
34
34
  SheetAction2[SheetAction2["CREATE"] = `${SHEET_ACTION}/create`] = "CREATE";
35
+ SheetAction2[SheetAction2["INSERT_AXIS"] = `${SHEET_ACTION}/axis-insert`] = "INSERT_AXIS";
36
+ SheetAction2[SheetAction2["DROP_AXIS"] = `${SHEET_ACTION}/axis-drop`] = "DROP_AXIS";
35
37
  })(SheetAction || (SheetAction = {}));
36
38
  var CellValue = import_echo_schema.S.Struct({
37
39
  // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.
@@ -48,7 +50,7 @@ var RowColumnMeta = import_echo_schema.S.Struct({
48
50
  size: import_echo_schema.S.optional(import_echo_schema.S.Number)
49
51
  });
50
52
  var SheetType = class extends (0, import_echo_schema.TypedObject)({
51
- typename: "dxos.org/type/SheetType",
53
+ typename: "dxos.org/type/Sheet",
52
54
  version: "0.1.0"
53
55
  })({
54
56
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
@@ -85,4 +87,4 @@ var SheetType = class extends (0, import_echo_schema.TypedObject)({
85
87
  SheetAction,
86
88
  SheetType
87
89
  });
88
- //# sourceMappingURL=chunk-V7E5JZBD.cjs.map
90
+ //# sourceMappingURL=chunk-AWKOWDMI.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n IntentData,\n} from '@dxos/app-framework';\nimport { ref, S, TypedObject } from '@dxos/echo-schema';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type MarkdownExtensionProvides } from '@dxos/plugin-markdown';\nimport { type SpaceInitProvides } from '@dxos/plugin-space';\nimport { ThreadType } from '@dxos/plugin-space/types';\nimport { type StackProvides } from '@dxos/plugin-stack';\nimport { type DxGridAxis } from '@dxos/react-ui-grid';\n\nimport { SHEET_PLUGIN } from './meta';\nimport { type SheetModel } from './model';\n\nconst SHEET_ACTION = `${SHEET_PLUGIN}/action`;\n\nexport enum SheetAction {\n CREATE = `${SHEET_ACTION}/create`,\n INSERT_AXIS = `${SHEET_ACTION}/axis-insert`,\n DROP_AXIS = `${SHEET_ACTION}/axis-drop`,\n}\n\nexport type RestoreAxis = {\n axis: DxGridAxis;\n axisIndex: string;\n index: number;\n axisMeta?: S.Schema.Type<typeof RowColumnMeta>;\n values: CellScalarValue[];\n};\n\nexport namespace SheetAction {\n export type Create = IntentData<{ sheet: SheetType }>;\n export type InsertAxis = IntentData<{ model: SheetModel; axis: DxGridAxis; index: number; count?: number }>;\n export type DropAxis = IntentData<{ model: SheetModel; axis: DxGridAxis; axisIndex: string }>;\n export type DropAxisRestore = IntentData<RestoreAxis & { model: SheetModel }>;\n}\n\n// TODO(Zan): Move this to the plugin-space plugin or another common location\n// when we implement comments in sheets.\n// This is currently duplicated in a few places.\ntype ThreadProvides<T> = {\n thread: {\n predicate: (obj: any) => obj is T;\n createSort: (obj: T) => (anchorA: string | undefined, anchorB: string | undefined) => number;\n };\n};\n\nexport type SheetPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MarkdownExtensionProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides &\n SpaceInitProvides &\n StackProvides &\n ThreadProvides<SheetType>;\n\nexport type CellScalarValue = number | string | boolean | null;\n\nexport const CellValue = S.Struct({\n // TODO(burdon): How to store dates (datetime, date, time), percentages, etc.\n // Consider import/export; natural access for other plugins. Special handling for currency (precision).\n // TODO(burdon): Automerge (long string) or short string or number.\n value: S.Any,\n});\n\nexport type CellValue = S.Schema.Type<typeof CellValue>;\n\n// TODO(burdon): IMPORTANT: Reconcile with Field definition.\nexport const Range = S.Struct({\n range: S.String,\n key: S.String,\n value: S.String,\n});\n\nexport type Range = S.Schema.Type<typeof Range>;\n\n// TODO(burdon): Visibility, locked, frozen, etc.\nexport const RowColumnMeta = S.Struct({\n size: S.optional(S.Number),\n});\n\n// TODO(burdon): Index to all updates when rows/columns are inserted/deleted.\nexport class SheetType extends TypedObject({ typename: 'dxos.org/type/Sheet', version: '0.1.0' })({\n name: S.optional(S.String),\n\n // Sparse map of cells referenced by index.\n cells: S.mutable(S.Record({ key: S.String, value: S.mutable(CellValue) })),\n\n // Ordered row indices.\n rows: S.mutable(S.Array(S.String)),\n\n // Ordered column indices.\n columns: S.mutable(S.Array(S.String)),\n\n // Row metadata referenced by index.\n rowMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),\n\n // Column metadata referenced by index.\n columnMeta: S.mutable(S.Record({ key: S.String, value: S.mutable(RowColumnMeta) })),\n\n // Cell formatting referenced by indexed range.\n ranges: S.mutable(S.Array(Range)),\n\n // Threads associated with the sheet\n threads: S.optional(S.mutable(S.Array(ref(ThreadType)))),\n}) {}\n\nexport type SheetSize = {\n rows: number;\n columns: number;\n};\n\nexport type CreateSheetOptions = {\n name?: string;\n cells?: Record<string, CellValue>;\n} & Partial<SheetSize>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,yBAAoC;AAIpC,mBAA2B;AAO3B,IAAMA,eAAe,GAAGC,kCAAAA;;UAEZC,cAAAA;wCACD,GAAGF,YAAAA,SAAqB,IAAA;6CACnB,GAAGA,YAAAA,cAA0B,IAAA;2CAC/B,GAAGA,YAAAA,YAAwB,IAAA;GAH7BE,gBAAAA,cAAAA,CAAAA,EAAAA;AA4CL,IAAMC,YAAYC,qBAAEC,OAAO;;;;EAIhCC,OAAOF,qBAAEG;AACX,CAAA;AAKO,IAAMC,QAAQJ,qBAAEC,OAAO;EAC5BI,OAAOL,qBAAEM;EACTC,KAAKP,qBAAEM;EACPJ,OAAOF,qBAAEM;AACX,CAAA;AAKO,IAAME,gBAAgBR,qBAAEC,OAAO;EACpCQ,MAAMT,qBAAEU,SAASV,qBAAEW,MAAM;AAC3B,CAAA;AAGO,IAAMC,YAAN,kBAAwBC,gCAAY;EAAEC,UAAU;EAAuBC,SAAS;AAAQ,CAAA,EAAG;EAChGC,MAAMhB,qBAAEU,SAASV,qBAAEM,MAAM;;EAGzBW,OAAOjB,qBAAEkB,QAAQlB,qBAAEmB,OAAO;IAAEZ,KAAKP,qBAAEM;IAAQJ,OAAOF,qBAAEkB,QAAQnB,SAAAA;EAAW,CAAA,CAAA;;EAGvEqB,MAAMpB,qBAAEkB,QAAQlB,qBAAEqB,MAAMrB,qBAAEM,MAAM,CAAA;;EAGhCgB,SAAStB,qBAAEkB,QAAQlB,qBAAEqB,MAAMrB,qBAAEM,MAAM,CAAA;;EAGnCiB,SAASvB,qBAAEkB,QAAQlB,qBAAEmB,OAAO;IAAEZ,KAAKP,qBAAEM;IAAQJ,OAAOF,qBAAEkB,QAAQV,aAAAA;EAAe,CAAA,CAAA;;EAG7EgB,YAAYxB,qBAAEkB,QAAQlB,qBAAEmB,OAAO;IAAEZ,KAAKP,qBAAEM;IAAQJ,OAAOF,qBAAEkB,QAAQV,aAAAA;EAAe,CAAA,CAAA;;EAGhFiB,QAAQzB,qBAAEkB,QAAQlB,qBAAEqB,MAAMjB,KAAAA,CAAAA;;EAG1BsB,SAAS1B,qBAAEU,SAASV,qBAAEkB,QAAQlB,qBAAEqB,UAAMM,wBAAIC,uBAAAA,CAAAA,CAAAA,CAAAA;AAC5C,CAAA,EAAA;AAAI;",
6
+ "names": ["SHEET_ACTION", "SHEET_PLUGIN", "SheetAction", "CellValue", "S", "Struct", "value", "Any", "Range", "range", "String", "key", "RowColumnMeta", "size", "optional", "Number", "SheetType", "TypedObject", "typename", "version", "name", "cells", "mutable", "Record", "rows", "Array", "columns", "rowMeta", "columnMeta", "ranges", "threads", "ref", "ThreadType"]
7
+ }