@dxos/plugin-sheet 0.6.14-main.7bd9c89 → 0.6.14-staging.027949b

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 (232) hide show
  1. package/dist/lib/browser/{SheetContainer-AKWROARP.mjs → SheetContainer-P3NF5KEI.mjs} +90 -88
  2. package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-FGMFOW6U.mjs → chunk-4LKIURJA.mjs} +917 -817
  4. package/dist/lib/browser/chunk-4LKIURJA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-BWN5DZWZ.mjs → chunk-BVUN7SHF.mjs} +6 -13
  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-GSV5QNLD.mjs → chunk-VMSX6Z4X.mjs} +297 -44
  10. package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
  11. package/dist/lib/browser/{graph-M4IQ76QX.mjs → compute-graph-GGWUX644.mjs} +4 -2
  12. package/dist/lib/browser/index.mjs +91 -21
  13. package/dist/lib/browser/index.mjs.map +4 -4
  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-N5IQGEFL.cjs → SheetContainer-MPFKXY26.cjs} +88 -93
  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-NZARD7UP.cjs → chunk-AWKOWDMI.cjs} +10 -17
  22. package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-5XPK2V4A.cjs → chunk-O7XR4R7Y.cjs} +306 -42
  24. package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-53BMSUIK.cjs → chunk-OO24XJBV.cjs} +853 -767
  26. package/dist/lib/node/chunk-OO24XJBV.cjs.map +7 -0
  27. package/dist/lib/node/{graph-Q3N2X26H.cjs → compute-graph-KGWA2QLE.cjs} +21 -19
  28. package/dist/lib/node/compute-graph-KGWA2QLE.cjs.map +7 -0
  29. package/dist/lib/node/index.cjs +109 -42
  30. package/dist/lib/node/index.cjs.map +4 -4
  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-46PBMF2E.mjs → SheetContainer-22IOAW3B.mjs} +90 -88
  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-T3PRH7QS.mjs → chunk-BW36PM2Y.mjs} +917 -817
  41. package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-5WPZCXNS.mjs → chunk-CR4K75EL.mjs} +296 -44
  43. package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-WFDTY3IC.mjs → chunk-UIBWRHW7.mjs} +6 -13
  45. package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
  46. package/dist/lib/node-esm/{graph-SMPUMOV2.mjs → compute-graph-2SCZT7N5.mjs} +4 -2
  47. package/dist/lib/node-esm/index.mjs +91 -21
  48. package/dist/lib/node-esm/index.mjs.map +4 -4
  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/ComputeGraph/ComputeGraphContextProvider.d.ts +3 -1
  54. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  55. package/dist/types/src/components/FunctionEditor/FunctionEditor.d.ts.map +1 -1
  56. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  57. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/GridSheet/util.d.ts +2 -2
  59. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  60. package/dist/types/src/components/RangeList/RangeList.d.ts +7 -0
  61. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -0
  62. package/dist/types/src/components/RangeList/index.d.ts +2 -0
  63. package/dist/types/src/components/RangeList/index.d.ts.map +1 -0
  64. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +6 -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 +7 -5
  68. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  69. package/dist/types/src/components/Toolbar/Toolbar.d.ts +6 -3
  70. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  71. package/dist/types/src/components/index.d.ts +5 -2
  72. package/dist/types/src/components/index.d.ts.map +1 -1
  73. package/dist/types/src/compute-graph/compute-graph-registry.d.ts.map +1 -0
  74. package/dist/types/src/{graph → compute-graph}/compute-graph.d.ts +3 -3
  75. package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -0
  76. package/dist/types/src/compute-graph/compute-graph.stories.d.ts.map +1 -0
  77. package/dist/types/src/compute-graph/compute-graph.test.d.ts.map +1 -0
  78. package/dist/types/src/compute-graph/compute-node.d.ts.map +1 -0
  79. package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -0
  80. package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -0
  81. package/dist/types/src/compute-graph/functions/function-defs.d.ts.map +1 -0
  82. package/dist/types/src/compute-graph/functions/index.d.ts.map +1 -0
  83. package/dist/types/src/compute-graph/hyperformula.test.d.ts.map +1 -0
  84. package/dist/types/src/compute-graph/index.d.ts.map +1 -0
  85. package/dist/types/src/compute-graph/testing/index.d.ts.map +1 -0
  86. package/dist/types/src/compute-graph/testing/test-builder.d.ts.map +1 -0
  87. package/dist/types/src/compute-graph/testing/test-plugin.d.ts.map +1 -0
  88. package/dist/types/src/compute-graph/util.d.ts.map +1 -0
  89. package/dist/types/src/defs/index.d.ts +1 -1
  90. package/dist/types/src/defs/index.d.ts.map +1 -1
  91. package/dist/types/src/defs/sheet-range-types.d.ts +2 -2
  92. package/dist/types/src/defs/sheet-range-types.d.ts.map +1 -1
  93. package/dist/types/src/defs/types.d.ts +6 -0
  94. package/dist/types/src/defs/types.d.ts.map +1 -1
  95. package/dist/types/src/defs/util.d.ts +3 -7
  96. package/dist/types/src/defs/util.d.ts.map +1 -1
  97. package/dist/types/src/extensions/compute.d.ts +1 -1
  98. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  99. package/dist/types/src/extensions/editor/extension.d.ts +23 -3
  100. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
  101. package/dist/types/src/index.d.ts +1 -1
  102. package/dist/types/src/index.d.ts.map +1 -1
  103. package/dist/types/src/integrations/index.d.ts +2 -0
  104. package/dist/types/src/integrations/index.d.ts.map +1 -0
  105. package/dist/types/src/integrations/thread-ranges.d.ts +7 -0
  106. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -0
  107. package/dist/types/src/meta.d.ts +1 -0
  108. package/dist/types/src/meta.d.ts.map +1 -1
  109. package/dist/types/src/model/index.d.ts +1 -1
  110. package/dist/types/src/model/index.d.ts.map +1 -1
  111. package/dist/types/src/model/sheet-model.d.ts +13 -6
  112. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  113. package/dist/types/src/{hooks → model}/useSheetModel.d.ts +1 -1
  114. package/dist/types/src/model/useSheetModel.d.ts.map +1 -0
  115. package/dist/types/src/serializer.d.ts +4 -0
  116. package/dist/types/src/serializer.d.ts.map +1 -0
  117. package/dist/types/src/testing/testing.d.ts +1 -1
  118. package/dist/types/src/testing/testing.d.ts.map +1 -1
  119. package/dist/types/src/translations.d.ts +18 -3
  120. package/dist/types/src/translations.d.ts.map +1 -1
  121. package/dist/types/src/types.d.ts +37 -33
  122. package/dist/types/src/types.d.ts.map +1 -1
  123. package/package.json +44 -50
  124. package/src/SheetPlugin.tsx +45 -12
  125. package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +19 -2
  126. package/src/components/FunctionEditor/FunctionEditor.tsx +6 -10
  127. package/src/components/GridSheet/GridSheet.stories.tsx +3 -1
  128. package/src/components/GridSheet/GridSheet.tsx +196 -36
  129. package/src/components/GridSheet/SheetCellEditor.stories.tsx +1 -1
  130. package/src/components/GridSheet/util.ts +41 -21
  131. package/src/components/RangeList/RangeList.tsx +53 -0
  132. package/src/components/RangeList/index.ts +5 -0
  133. package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -3
  134. package/src/components/SheetContainer/SheetContainer.tsx +19 -12
  135. package/src/components/SheetContext/SheetContext.tsx +43 -20
  136. package/src/components/Toolbar/Toolbar.tsx +98 -86
  137. package/src/components/index.ts +1 -0
  138. package/src/{graph → compute-graph}/compute-graph.stories.tsx +2 -1
  139. package/src/{graph → compute-graph}/compute-graph.ts +27 -9
  140. package/src/{graph → compute-graph}/compute-node.ts +2 -3
  141. package/src/{graph → compute-graph}/functions/async-function.ts +1 -0
  142. package/src/{graph → compute-graph}/functions/edge-function.ts +5 -3
  143. package/src/defs/index.ts +1 -1
  144. package/src/defs/sheet-range-types.ts +9 -6
  145. package/src/defs/types.ts +6 -1
  146. package/src/defs/util.ts +4 -19
  147. package/src/extensions/compute.stories.tsx +2 -2
  148. package/src/extensions/compute.ts +2 -2
  149. package/src/extensions/editor/extension.test.ts +1 -1
  150. package/src/extensions/editor/extension.ts +48 -23
  151. package/src/index.ts +2 -2
  152. package/src/integrations/index.ts +5 -0
  153. package/src/integrations/thread-ranges.ts +101 -0
  154. package/src/meta.ts +1 -0
  155. package/src/model/index.ts +1 -1
  156. package/src/model/sheet-model.test.ts +6 -4
  157. package/src/model/sheet-model.ts +103 -26
  158. package/src/{hooks → model}/useSheetModel.ts +1 -1
  159. package/src/serializer.ts +27 -0
  160. package/src/testing/testing.tsx +1 -1
  161. package/src/translations.ts +18 -3
  162. package/src/types.ts +24 -2
  163. package/dist/lib/browser/SheetContainer-AKWROARP.mjs.map +0 -7
  164. package/dist/lib/browser/chunk-BWN5DZWZ.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-FGMFOW6U.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +0 -7
  167. package/dist/lib/node/SheetContainer-N5IQGEFL.cjs.map +0 -7
  168. package/dist/lib/node/chunk-53BMSUIK.cjs.map +0 -7
  169. package/dist/lib/node/chunk-5XPK2V4A.cjs.map +0 -7
  170. package/dist/lib/node/chunk-NZARD7UP.cjs.map +0 -7
  171. package/dist/lib/node/graph-Q3N2X26H.cjs.map +0 -7
  172. package/dist/lib/node-esm/SheetContainer-46PBMF2E.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-T3PRH7QS.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-WFDTY3IC.mjs.map +0 -7
  176. package/dist/types/src/graph/compute-graph-registry.d.ts.map +0 -1
  177. package/dist/types/src/graph/compute-graph.d.ts.map +0 -1
  178. package/dist/types/src/graph/compute-graph.stories.d.ts.map +0 -1
  179. package/dist/types/src/graph/compute-graph.test.d.ts.map +0 -1
  180. package/dist/types/src/graph/compute-node.d.ts.map +0 -1
  181. package/dist/types/src/graph/functions/async-function.d.ts.map +0 -1
  182. package/dist/types/src/graph/functions/edge-function.d.ts.map +0 -1
  183. package/dist/types/src/graph/functions/function-defs.d.ts.map +0 -1
  184. package/dist/types/src/graph/functions/index.d.ts.map +0 -1
  185. package/dist/types/src/graph/hyperformula.test.d.ts.map +0 -1
  186. package/dist/types/src/graph/index.d.ts.map +0 -1
  187. package/dist/types/src/graph/testing/index.d.ts.map +0 -1
  188. package/dist/types/src/graph/testing/test-builder.d.ts.map +0 -1
  189. package/dist/types/src/graph/testing/test-plugin.d.ts.map +0 -1
  190. package/dist/types/src/graph/util.d.ts.map +0 -1
  191. package/dist/types/src/hooks/hooks.stories.d.ts +0 -6
  192. package/dist/types/src/hooks/hooks.stories.d.ts.map +0 -1
  193. package/dist/types/src/hooks/index.d.ts +0 -4
  194. package/dist/types/src/hooks/index.d.ts.map +0 -1
  195. package/dist/types/src/hooks/threads.d.ts +0 -8
  196. package/dist/types/src/hooks/threads.d.ts.map +0 -1
  197. package/dist/types/src/hooks/useComputeGraph.d.ts +0 -7
  198. package/dist/types/src/hooks/useComputeGraph.d.ts.map +0 -1
  199. package/dist/types/src/hooks/useSheetModel.d.ts.map +0 -1
  200. package/dist/types/src/model/decorations.d.ts +0 -26
  201. package/dist/types/src/model/decorations.d.ts.map +0 -1
  202. package/src/hooks/hooks.stories.tsx +0 -53
  203. package/src/hooks/index.ts +0 -7
  204. package/src/hooks/threads.ts +0 -147
  205. package/src/hooks/useComputeGraph.ts +0 -28
  206. package/src/model/decorations.ts +0 -66
  207. /package/dist/lib/browser/{graph-M4IQ76QX.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
  208. /package/dist/lib/node-esm/{graph-SMPUMOV2.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
  209. /package/dist/types/src/{graph → compute-graph}/compute-graph-registry.d.ts +0 -0
  210. /package/dist/types/src/{graph → compute-graph}/compute-graph.stories.d.ts +0 -0
  211. /package/dist/types/src/{graph → compute-graph}/compute-graph.test.d.ts +0 -0
  212. /package/dist/types/src/{graph → compute-graph}/compute-node.d.ts +0 -0
  213. /package/dist/types/src/{graph → compute-graph}/functions/async-function.d.ts +0 -0
  214. /package/dist/types/src/{graph → compute-graph}/functions/edge-function.d.ts +0 -0
  215. /package/dist/types/src/{graph → compute-graph}/functions/function-defs.d.ts +0 -0
  216. /package/dist/types/src/{graph → compute-graph}/functions/index.d.ts +0 -0
  217. /package/dist/types/src/{graph → compute-graph}/hyperformula.test.d.ts +0 -0
  218. /package/dist/types/src/{graph → compute-graph}/index.d.ts +0 -0
  219. /package/dist/types/src/{graph → compute-graph}/testing/index.d.ts +0 -0
  220. /package/dist/types/src/{graph → compute-graph}/testing/test-builder.d.ts +0 -0
  221. /package/dist/types/src/{graph → compute-graph}/testing/test-plugin.d.ts +0 -0
  222. /package/dist/types/src/{graph → compute-graph}/util.d.ts +0 -0
  223. /package/src/{graph → compute-graph}/compute-graph-registry.ts +0 -0
  224. /package/src/{graph → compute-graph}/compute-graph.test.ts +0 -0
  225. /package/src/{graph → compute-graph}/functions/function-defs.ts +0 -0
  226. /package/src/{graph → compute-graph}/functions/index.ts +0 -0
  227. /package/src/{graph → compute-graph}/hyperformula.test.ts +0 -0
  228. /package/src/{graph → compute-graph}/index.ts +0 -0
  229. /package/src/{graph → compute-graph}/testing/index.ts +0 -0
  230. /package/src/{graph → compute-graph}/testing/test-builder.ts +0 -0
  231. /package/src/{graph → compute-graph}/testing/test-plugin.ts +0 -0
  232. /package/src/{graph → compute-graph}/util.ts +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_N5IQGEFL_exports = {};
30
- __export(SheetContainer_N5IQGEFL_exports, {
29
+ var SheetContainer_MPFKXY26_exports = {};
30
+ __export(SheetContainer_MPFKXY26_exports, {
31
31
  default: () => SheetContainer_default
32
32
  });
33
- module.exports = __toCommonJS(SheetContainer_N5IQGEFL_exports);
34
- var import_chunk_53BMSUIK = require("./chunk-53BMSUIK.cjs");
35
- var import_chunk_NZARD7UP = require("./chunk-NZARD7UP.cjs");
36
- var import_chunk_QIFIGEKV = require("./chunk-QIFIGEKV.cjs");
37
- var import_chunk_5XPK2V4A = require("./chunk-5XPK2V4A.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,31 +47,31 @@ 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_53BMSUIK.useSheetContext)();
50
+ const { model, cursor, range } = (0, import_chunk_OO24XJBV.useSheetContext)();
50
51
  let value;
51
- let isFormula = false;
52
+ let formula = false;
52
53
  if (cursor) {
53
54
  value = model.getCellValue(cursor);
54
- if (typeof value === "string" && value.charAt(0) === "=") {
55
+ if ((0, import_chunk_O7XR4R7Y.isFormula)(value)) {
55
56
  value = model.graph.mapFunctionBindingFromId(model.mapFormulaIndicesToRefs(value));
56
- isFormula = true;
57
+ formula = true;
57
58
  } else if (value != null) {
58
59
  value = String(value);
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_53BMSUIK.rangeToA1Notation)(range) || cursor && (0, import_chunk_53BMSUIK.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",
71
72
  classNames: [
72
73
  "text-greenText",
73
- isFormula ? "visible" : "invisible"
74
+ formula ? "visible" : "invisible"
74
75
  ]
75
76
  }), /* @__PURE__ */ import_react2.default.createElement("span", {
76
77
  className: "font-mono"
@@ -101,70 +102,59 @@ 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, range, cursor } = (0, import_chunk_53BMSUIK.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) {
113
- const index = model.sheet.ranges?.findIndex((range2) => range2.key === action.key && (0, import_chunk_53BMSUIK.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
- };
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;
121
114
  const nextRangeEntity = {
122
- range: nextRange,
115
+ range: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
123
116
  key: action.key,
124
117
  value: action.value
125
118
  };
126
119
  if (index < 0) {
127
120
  model.sheet.ranges?.push(nextRangeEntity);
121
+ } else if (model.sheet.ranges[index].value === action.value) {
122
+ model.sheet.ranges?.splice(index, 1);
128
123
  } else {
129
124
  model.sheet.ranges?.splice(index, 1, nextRangeEntity);
130
125
  }
131
126
  }
132
127
  break;
133
128
  case "style":
134
- if (action.value === "unset") {
135
- const index = model.sheet.ranges?.findIndex((range2) => range2.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));
136
131
  if (index >= 0) {
137
132
  model.sheet.ranges?.splice(index, 1);
138
133
  }
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
- };
134
+ } else if (cursorFallbackRange) {
147
135
  model.sheet.ranges?.push({
148
- range: nextRange,
136
+ range: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
149
137
  key: action.key,
150
138
  value: action.value
151
139
  });
152
140
  }
153
141
  break;
154
142
  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
- });
143
+ if (cursorFallbackRange) {
144
+ void dispatch({
145
+ action: "dxos.org/plugin/thread/action/create",
146
+ data: {
147
+ cursor: (0, import_chunk_OO24XJBV.completeCellRangeToThreadCursor)(cursorFallbackRange),
148
+ name: action.cellContent,
149
+ subject: model.sheet
150
+ }
151
+ });
152
+ }
163
153
  }
164
154
  }
165
155
  }, [
166
156
  model.sheet,
167
- range,
157
+ cursorFallbackRange,
168
158
  cursor,
169
159
  dispatch
170
160
  ]);
@@ -172,13 +162,8 @@ var ToolbarRoot = ({ children, role, classNames }) => {
172
162
  onAction: handleAction
173
163
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
174
164
  classNames: [
175
- ...role === "section" ? [
176
- "z-[2] group-focus-within/section:visible",
177
- !hasAttention && "invisible",
178
- sectionToolbarLayout
179
- ] : [
180
- "attention-surface"
181
- ],
165
+ "pli-0.5",
166
+ !hasAttention && "opacity-20",
182
167
  classNames
183
168
  ]
184
169
  }, children));
@@ -198,18 +183,18 @@ var alignmentOptions = [
198
183
  }
199
184
  ];
200
185
  var Alignment = () => {
201
- const { cursor, model } = (0, import_chunk_53BMSUIK.useSheetContext)();
186
+ const { cursor, model } = (0, import_chunk_OO24XJBV.useSheetContext)();
202
187
  const { onAction } = useToolbarContext("Alignment");
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_53BMSUIK.inRange)(range, cursor))?.value : void 0, [
205
- cursor,
206
- model.sheet.ranges
207
- ]);
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;
208
190
  return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.ToggleGroup, {
209
191
  type: "single",
210
- value,
192
+ value: (
193
+ // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.
194
+ value ?? "never"
195
+ ),
211
196
  onValueChange: (value2) => onAction?.({
212
- key: "align",
197
+ key: import_chunk_O7XR4R7Y.alignKey,
213
198
  value: value2
214
199
  })
215
200
  }, alignmentOptions.map(({ value: value2, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
@@ -217,65 +202,73 @@ var Alignment = () => {
217
202
  key: value2,
218
203
  value: value2,
219
204
  icon
220
- }, 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
+ }))));
221
209
  };
222
210
  var styleOptions = [
223
211
  {
224
212
  value: "highlight",
225
213
  icon: "ph--highlighter--regular"
214
+ },
215
+ {
216
+ value: "softwrap",
217
+ icon: "ph--paragraph--regular"
226
218
  }
227
219
  ];
228
220
  var Styles = () => {
229
- const { cursor, model } = (0, import_chunk_53BMSUIK.useSheetContext)();
221
+ const { cursorFallbackRange, model } = (0, import_chunk_OO24XJBV.useSheetContext)();
230
222
  const { onAction } = useToolbarContext("Styles");
231
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_QIFIGEKV.SHEET_PLUGIN);
232
- const activeValues = (0, import_react3.useMemo)(() => cursor ? model.sheet.ranges?.filter(({ range, key }) => key === "style" && (0, import_chunk_53BMSUIK.inRange)(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 }) => {
233
225
  acc.add(value);
234
226
  return acc;
235
- }, /* @__PURE__ */ new Set()) : void 0, [
236
- cursor,
237
- model.sheet.ranges
238
- ]);
227
+ }, /* @__PURE__ */ new Set()) : void 0;
239
228
  return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, styleOptions.map(({ value, icon }) => /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
240
229
  itemType: "toggle",
241
230
  key: value,
242
231
  pressed: activeValues?.has(value),
243
- onPressedChange: (nextPressed) => onAction?.({
244
- key: "style",
245
- value: nextPressed ? value : "unset"
246
- }),
232
+ onPressedChange: (nextPressed) => {
233
+ onAction?.({
234
+ key: "style",
235
+ value,
236
+ unset: !nextPressed
237
+ });
238
+ },
247
239
  icon
248
- }, 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
+ }))));
249
244
  };
250
245
  var Actions = () => {
251
246
  const { onAction } = useToolbarContext("Actions");
252
- const { cursor, range, model } = (0, import_chunk_53BMSUIK.useSheetContext)();
253
- 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);
254
249
  const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(import_util.nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
255
- if (!cursor) {
250
+ if (!cursorFallbackRange) {
256
251
  return false;
257
252
  }
258
- return (0, import_chunk_53BMSUIK.addressToIndex)(model.sheet, cursor) === thread.anchor;
253
+ return (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange) === thread.anchor;
259
254
  });
260
- const hasCursor = !!cursor;
261
- const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;
262
- const tooltipLabelKey = !hasCursor ? "no cursor label" : overlapsCommentAnchor ? "selection overlaps existing comment label" : range ? "comment ranges not supported label" : "comment label";
255
+ const tooltipLabelKey = !cursor ? "no cursor label" : overlapsCommentAnchor ? "selection overlaps existing comment label" : "comment label";
263
256
  return /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
264
257
  itemType: "button",
265
258
  value: "comment",
266
259
  icon: "ph--chat-text--regular",
267
260
  "data-testid": "editor.toolbar.comment",
268
261
  onClick: () => {
269
- if (!cursor) {
262
+ if (!cursorFallbackRange) {
270
263
  return;
271
264
  }
272
265
  return onAction?.({
273
266
  key: "comment",
274
- value: (0, import_chunk_53BMSUIK.addressToIndex)(model.sheet, cursor),
275
- cellContent: model.getCellText(cursor)
267
+ value: (0, import_chunk_O7XR4R7Y.rangeToIndex)(model.sheet, cursorFallbackRange),
268
+ cellContent: model.getCellText(cursorFallbackRange.from)
276
269
  });
277
270
  },
278
- disabled: !cursorOnly || overlapsCommentAnchor
271
+ disabled: !cursorFallbackRange || overlapsCommentAnchor
279
272
  }, t(tooltipLabelKey));
280
273
  };
281
274
  var Toolbar = {
@@ -285,16 +278,18 @@ var Toolbar = {
285
278
  Styles,
286
279
  Actions
287
280
  };
288
- var SheetContainer = ({ graph, sheet, role }) => {
289
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_53BMSUIK.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, {
290
284
  sheet,
291
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"
292
290
  }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Root, {
293
291
  role
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", {
295
- role: "none",
296
- className: "border-bs border-separator grid cols-1 rows-[1fr_min-content] min-bs-0"
297
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_53BMSUIK.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;
298
293
  };
299
294
  var SheetContainer_default = SheetContainer;
300
- //# sourceMappingURL=SheetContainer-N5IQGEFL.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_NZARD7UP_exports = {};
20
- __export(chunk_NZARD7UP_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_NZARD7UP_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.
@@ -40,16 +42,7 @@ var CellValue = import_echo_schema.S.Struct({
40
42
  value: import_echo_schema.S.Any
41
43
  });
42
44
  var Range = import_echo_schema.S.Struct({
43
- range: import_echo_schema.S.Struct({
44
- from: import_echo_schema.S.Struct({
45
- col: import_echo_schema.S.Number,
46
- row: import_echo_schema.S.Number
47
- }),
48
- to: import_echo_schema.S.Struct({
49
- col: import_echo_schema.S.Number,
50
- row: import_echo_schema.S.Number
51
- })
52
- }),
45
+ range: import_echo_schema.S.String,
53
46
  key: import_echo_schema.S.String,
54
47
  value: import_echo_schema.S.String
55
48
  });
@@ -57,7 +50,7 @@ var RowColumnMeta = import_echo_schema.S.Struct({
57
50
  size: import_echo_schema.S.optional(import_echo_schema.S.Number)
58
51
  });
59
52
  var SheetType = class extends (0, import_echo_schema.TypedObject)({
60
- typename: "dxos.org/type/SheetType",
53
+ typename: "dxos.org/type/Sheet",
61
54
  version: "0.1.0"
62
55
  })({
63
56
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
@@ -94,4 +87,4 @@ var SheetType = class extends (0, import_echo_schema.TypedObject)({
94
87
  SheetAction,
95
88
  SheetType
96
89
  });
97
- //# sourceMappingURL=chunk-NZARD7UP.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
+ }