@dxos/plugin-sheet 0.6.12-main.15a606f → 0.6.12-main.568932b

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 (161) hide show
  1. package/dist/lib/browser/{SheetContainer-V4GCCZTX.mjs → SheetContainer-T2QWJOFD.mjs} +14 -13
  2. package/dist/lib/browser/SheetContainer-T2QWJOFD.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-T3NJFTD4.mjs → chunk-5ZMVZYGB.mjs} +18 -6
  4. package/dist/lib/browser/{chunk-T3NJFTD4.mjs.map → chunk-5ZMVZYGB.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-6ZMQVB4Z.mjs → chunk-GSV5QNLD.mjs} +220 -177
  6. package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-U2JHW3L6.mjs → chunk-ZL2V5UJR.mjs} +206 -53
  8. package/dist/lib/browser/chunk-ZL2V5UJR.mjs.map +7 -0
  9. package/dist/lib/browser/graph-M4IQ76QX.mjs +33 -0
  10. package/dist/lib/browser/index.mjs +45 -21
  11. package/dist/lib/browser/index.mjs.map +4 -4
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/types.mjs +1 -1
  14. package/dist/lib/node/{SheetContainer-3ZY7MPWJ.cjs → SheetContainer-PV5ET4UJ.cjs} +21 -20
  15. package/dist/lib/node/SheetContainer-PV5ET4UJ.cjs.map +7 -0
  16. package/dist/lib/node/{chunk-OTTD7FBK.cjs → chunk-2K53Z2TU.cjs} +224 -70
  17. package/dist/lib/node/chunk-2K53Z2TU.cjs.map +7 -0
  18. package/dist/lib/node/{chunk-DD6FIXWC.cjs → chunk-5XPK2V4A.cjs} +222 -175
  19. package/dist/lib/node/chunk-5XPK2V4A.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-Q3HBHPRL.cjs → chunk-STAVQ2JE.cjs} +21 -9
  21. package/dist/lib/node/{chunk-Q3HBHPRL.cjs.map → chunk-STAVQ2JE.cjs.map} +3 -3
  22. package/dist/lib/node/graph-Q3N2X26H.cjs +55 -0
  23. package/dist/lib/node/graph-Q3N2X26H.cjs.map +7 -0
  24. package/dist/lib/node/index.cjs +51 -30
  25. package/dist/lib/node/index.cjs.map +4 -4
  26. package/dist/lib/node/meta.json +1 -1
  27. package/dist/lib/node/types.cjs +8 -8
  28. package/dist/lib/node/types.cjs.map +1 -1
  29. package/dist/lib/node-esm/{SheetContainer-PXSJX6XK.mjs → SheetContainer-FOZD2WLT.mjs} +14 -13
  30. package/dist/lib/node-esm/SheetContainer-FOZD2WLT.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-BMNA27EX.mjs → chunk-2HAM45RC.mjs} +18 -6
  32. package/dist/lib/node-esm/{chunk-BMNA27EX.mjs.map → chunk-2HAM45RC.mjs.map} +3 -3
  33. package/dist/lib/node-esm/{chunk-D6KU5MI7.mjs → chunk-5WPZCXNS.mjs} +220 -177
  34. package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-7HVSOTGA.mjs → chunk-QEUCIHIN.mjs} +206 -53
  36. package/dist/lib/node-esm/chunk-QEUCIHIN.mjs.map +7 -0
  37. package/dist/lib/node-esm/graph-SMPUMOV2.mjs +34 -0
  38. package/dist/lib/node-esm/index.mjs +45 -21
  39. package/dist/lib/node-esm/index.mjs.map +4 -4
  40. package/dist/lib/node-esm/meta.json +1 -1
  41. package/dist/lib/node-esm/types.mjs +1 -1
  42. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  43. package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/CellEditor/extension.d.ts.map +1 -1
  45. package/dist/types/src/components/GridSheet/GridSheet.d.ts +3 -3
  46. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  47. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -1
  48. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/GridSheet/util.d.ts +12 -2
  50. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  51. package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
  52. package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/Sheet/sheet-context.d.ts +3 -3
  54. package/dist/types/src/components/Sheet/sheet-context.d.ts.map +1 -1
  55. package/dist/types/src/components/SheetContainer.d.ts +1 -1
  56. package/dist/types/src/components/SheetContainer.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +1 -1
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/defs/types.d.ts.map +1 -1
  60. package/dist/types/src/defs/util.d.ts +1 -1
  61. package/dist/types/src/defs/util.d.ts.map +1 -1
  62. package/dist/types/src/extensions/compute.d.ts +3 -2
  63. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  64. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  65. package/dist/types/src/graph/compute-graph-registry.d.ts +34 -0
  66. package/dist/types/src/graph/compute-graph-registry.d.ts.map +1 -0
  67. package/dist/types/src/graph/compute-graph.d.ts +17 -34
  68. package/dist/types/src/graph/compute-graph.d.ts.map +1 -1
  69. package/dist/types/src/graph/compute-graph.stories.d.ts.map +1 -1
  70. package/dist/types/src/graph/compute-graph.test.d.ts +2 -0
  71. package/dist/types/src/graph/compute-graph.test.d.ts.map +1 -0
  72. package/dist/types/src/graph/compute-node.d.ts +9 -2
  73. package/dist/types/src/graph/compute-node.d.ts.map +1 -1
  74. package/dist/types/src/graph/{async-function.d.ts → functions/async-function.d.ts} +13 -4
  75. package/dist/types/src/graph/functions/async-function.d.ts.map +1 -0
  76. package/dist/types/src/graph/functions/edge-function.d.ts +21 -0
  77. package/dist/types/src/graph/functions/edge-function.d.ts.map +1 -0
  78. package/dist/types/src/graph/functions/function-defs.d.ts.map +1 -0
  79. package/dist/types/src/graph/functions/index.d.ts +4 -0
  80. package/dist/types/src/graph/functions/index.d.ts.map +1 -0
  81. package/dist/types/src/graph/index.d.ts +2 -1
  82. package/dist/types/src/graph/index.d.ts.map +1 -1
  83. package/dist/types/src/graph/testing/index.d.ts +3 -0
  84. package/dist/types/src/graph/testing/index.d.ts.map +1 -0
  85. package/dist/types/src/graph/testing/test-builder.d.ts +15 -0
  86. package/dist/types/src/graph/testing/test-builder.d.ts.map +1 -0
  87. package/dist/types/src/graph/testing/test-plugin.d.ts +36 -0
  88. package/dist/types/src/graph/testing/test-plugin.d.ts.map +1 -0
  89. package/dist/types/src/hooks/useComputeGraph.d.ts.map +1 -1
  90. package/dist/types/src/hooks/useSheetModel.d.ts +2 -2
  91. package/dist/types/src/hooks/useSheetModel.d.ts.map +1 -1
  92. package/dist/types/src/model/sheet-model.d.ts +3 -3
  93. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  94. package/dist/types/src/model/sheet-model.test.d.ts +2 -0
  95. package/dist/types/src/model/sheet-model.test.d.ts.map +1 -0
  96. package/dist/types/src/testing/testing.d.ts +4 -5
  97. package/dist/types/src/testing/testing.d.ts.map +1 -1
  98. package/dist/types/src/types.d.ts +4 -3
  99. package/dist/types/src/types.d.ts.map +1 -1
  100. package/package.json +40 -39
  101. package/src/SheetPlugin.tsx +19 -15
  102. package/src/components/CellEditor/CellEditor.stories.tsx +2 -3
  103. package/src/components/CellEditor/extension.test.ts +0 -1
  104. package/src/components/CellEditor/extension.ts +4 -3
  105. package/src/components/GridSheet/GridSheet.stories.tsx +5 -4
  106. package/src/components/GridSheet/GridSheet.tsx +27 -9
  107. package/src/components/GridSheet/util.ts +93 -34
  108. package/src/components/Sheet/Sheet.stories.tsx +21 -20
  109. package/src/components/Sheet/Sheet.tsx +30 -14
  110. package/src/components/Sheet/sheet-context.tsx +4 -4
  111. package/src/components/SheetContainer.tsx +13 -15
  112. package/src/defs/types.ts +1 -0
  113. package/src/defs/util.ts +19 -3
  114. package/src/extensions/compute.stories.tsx +20 -20
  115. package/src/extensions/compute.ts +91 -42
  116. package/src/graph/compute-graph-registry.ts +90 -0
  117. package/src/graph/compute-graph.stories.tsx +4 -3
  118. package/src/graph/compute-graph.test.ts +87 -0
  119. package/src/graph/compute-graph.ts +73 -121
  120. package/src/graph/compute-node.ts +17 -5
  121. package/src/graph/{async-function.ts → functions/async-function.ts} +23 -15
  122. package/src/graph/{edge-function.ts → functions/edge-function.ts} +14 -13
  123. package/src/graph/functions/index.ts +7 -0
  124. package/src/graph/hyperformula.test.ts +1 -2
  125. package/src/graph/index.ts +2 -1
  126. package/src/graph/testing/index.ts +6 -0
  127. package/src/graph/testing/test-builder.ts +54 -0
  128. package/src/graph/{custom-function.ts → testing/test-plugin.ts} +43 -9
  129. package/src/hooks/hooks.stories.tsx +3 -3
  130. package/src/hooks/useComputeGraph.ts +9 -1
  131. package/src/hooks/useSheetModel.ts +4 -7
  132. package/src/model/sheet-model.test.ts +57 -0
  133. package/src/model/sheet-model.ts +47 -30
  134. package/src/testing/testing.tsx +17 -15
  135. package/src/types.ts +7 -7
  136. package/dist/lib/browser/SheetContainer-V4GCCZTX.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-6ZMQVB4Z.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-U2JHW3L6.mjs.map +0 -7
  139. package/dist/lib/browser/graph-T27BOBOV.mjs +0 -21
  140. package/dist/lib/node/SheetContainer-3ZY7MPWJ.cjs.map +0 -7
  141. package/dist/lib/node/chunk-DD6FIXWC.cjs.map +0 -7
  142. package/dist/lib/node/chunk-OTTD7FBK.cjs.map +0 -7
  143. package/dist/lib/node/graph-SPKGX7W4.cjs +0 -43
  144. package/dist/lib/node/graph-SPKGX7W4.cjs.map +0 -7
  145. package/dist/lib/node-esm/SheetContainer-PXSJX6XK.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-7HVSOTGA.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-D6KU5MI7.mjs.map +0 -7
  148. package/dist/lib/node-esm/graph-U67IO4UC.mjs +0 -22
  149. package/dist/types/src/graph/async-function.d.ts.map +0 -1
  150. package/dist/types/src/graph/compute-graph.browser.test.d.ts +0 -2
  151. package/dist/types/src/graph/compute-graph.browser.test.d.ts.map +0 -1
  152. package/dist/types/src/graph/custom-function.d.ts +0 -21
  153. package/dist/types/src/graph/custom-function.d.ts.map +0 -1
  154. package/dist/types/src/graph/edge-function.d.ts +0 -20
  155. package/dist/types/src/graph/edge-function.d.ts.map +0 -1
  156. package/dist/types/src/graph/function-defs.d.ts.map +0 -1
  157. package/src/graph/compute-graph.browser.test.ts +0 -104
  158. /package/dist/lib/browser/{graph-T27BOBOV.mjs.map → graph-M4IQ76QX.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{graph-U67IO4UC.mjs.map → graph-SMPUMOV2.mjs.map} +0 -0
  160. /package/dist/types/src/graph/{function-defs.d.ts → functions/function-defs.d.ts} +0 -0
  161. /package/src/graph/{function-defs.ts → functions/function-defs.ts} +0 -0
@@ -26,16 +26,16 @@ 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_3ZY7MPWJ_exports = {};
30
- __export(SheetContainer_3ZY7MPWJ_exports, {
29
+ var SheetContainer_PV5ET4UJ_exports = {};
30
+ __export(SheetContainer_PV5ET4UJ_exports, {
31
31
  default: () => SheetContainer_default,
32
32
  sectionToolbarLayout: () => sectionToolbarLayout
33
33
  });
34
- module.exports = __toCommonJS(SheetContainer_3ZY7MPWJ_exports);
35
- var import_chunk_OTTD7FBK = require("./chunk-OTTD7FBK.cjs");
36
- var import_chunk_Q3HBHPRL = require("./chunk-Q3HBHPRL.cjs");
34
+ module.exports = __toCommonJS(SheetContainer_PV5ET4UJ_exports);
35
+ var import_chunk_2K53Z2TU = require("./chunk-2K53Z2TU.cjs");
36
+ var import_chunk_STAVQ2JE = require("./chunk-STAVQ2JE.cjs");
37
37
  var import_chunk_BNARJ5GM = require("./chunk-BNARJ5GM.cjs");
38
- var import_chunk_DD6FIXWC = require("./chunk-DD6FIXWC.cjs");
38
+ var import_chunk_5XPK2V4A = require("./chunk-5XPK2V4A.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_echo = require("@dxos/react-client/echo");
@@ -191,13 +191,13 @@ var Styles = () => {
191
191
  };
192
192
  var Actions = () => {
193
193
  const { onAction } = useToolbarContext("Actions");
194
- const { cursor, range, model } = (0, import_chunk_OTTD7FBK.useSheetContext)();
194
+ const { cursor, range, model } = (0, import_chunk_2K53Z2TU.useSheetContext)();
195
195
  const { t } = (0, import_react_ui.useTranslation)(import_chunk_BNARJ5GM.SHEET_PLUGIN);
196
196
  const overlapsCommentAnchor = (model.sheet.threads ?? []).filter(import_util.nonNullable).filter((thread) => thread.status !== "resolved").some((thread) => {
197
197
  if (!cursor) {
198
198
  return false;
199
199
  }
200
- return (0, import_chunk_OTTD7FBK.addressToIndex)(model.sheet, cursor) === thread.anchor;
200
+ return (0, import_chunk_2K53Z2TU.addressToIndex)(model.sheet, cursor) === thread.anchor;
201
201
  });
202
202
  const hasCursor = !!cursor;
203
203
  const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;
@@ -212,7 +212,7 @@ var Actions = () => {
212
212
  }
213
213
  return onAction?.({
214
214
  type: "comment",
215
- anchor: (0, import_chunk_OTTD7FBK.addressToIndex)(model.sheet, cursor),
215
+ anchor: (0, import_chunk_2K53Z2TU.addressToIndex)(model.sheet, cursor),
216
216
  cellContent: model.getCellText(cursor)
217
217
  });
218
218
  },
@@ -227,12 +227,12 @@ var Toolbar = {
227
227
  Styles,
228
228
  Actions
229
229
  };
230
- var attentionFragment = (0, import_react_ui_theme.mx)("group-focus-within/editor:attention-surface group-[[aria-current]]/editor:attention-surface", "group-focus-within/editor:border-separator");
231
230
  var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
232
- var SheetContainer = ({ sheet, space, role }) => {
231
+ var SheetContainer = ({ graph, sheet, role }) => {
233
232
  const dispatch = (0, import_app_framework.useIntentDispatcher)();
234
233
  const id = (0, import_echo.fullyQualifiedId)(sheet);
235
- const isDirectlyAttended = (0, import_react_ui_attention.useIsDirectlyAttended)(id);
234
+ const attendableAttrs = (0, import_react_ui_attention.useAttendableAttributes)(id);
235
+ const { hasAttention } = (0, import_react_ui_attention.useAttention)(id);
236
236
  const handleAction = (0, import_react.useCallback)((action) => {
237
237
  switch (action.type) {
238
238
  case "comment": {
@@ -252,9 +252,10 @@ var SheetContainer = ({ sheet, space, role }) => {
252
252
  ]);
253
253
  return /* @__PURE__ */ import_react.default.createElement("div", {
254
254
  role: "none",
255
- className: role === "article" ? "row-span-2 grid grid-rows-subgrid" : void 0
256
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_OTTD7FBK.Sheet.Root, {
257
- space,
255
+ className: role === "article" ? "row-span-2 grid grid-rows-subgrid" : void 0,
256
+ ...role === "article" && attendableAttrs
257
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_2K53Z2TU.Sheet.Root, {
258
+ graph,
258
259
  sheet
259
260
  }, /* @__PURE__ */ import_react.default.createElement("div", {
260
261
  role: "none",
@@ -263,17 +264,17 @@ var SheetContainer = ({ sheet, space, role }) => {
263
264
  onAction: handleAction,
264
265
  classNames: (0, import_react_ui_theme.mx)(role === "section" ? [
265
266
  "z-[2] group-focus-within/section:visible",
266
- !isDirectlyAttended && "invisible",
267
+ !hasAttention && "invisible",
267
268
  sectionToolbarLayout
268
- ] : "group-focus-within/editor:border-separator group-[[aria-current]]/editor:border-separator")
269
+ ] : "attention-surface")
269
270
  }, /* @__PURE__ */ import_react.default.createElement(Toolbar.Separator, null), /* @__PURE__ */ import_react.default.createElement(Toolbar.Actions, null))), /* @__PURE__ */ import_react.default.createElement("div", {
270
271
  role: "none",
271
- className: (0, import_react_ui_theme.mx)(role === "section" && "aspect-square border-is border-bs border-be border-separator", role === "article" && "flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator", import_react_ui_theme.focusRing, attentionFragment)
272
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_OTTD7FBK.Sheet.Main, null))));
272
+ className: (0, import_react_ui_theme.mx)(role === "section" && "aspect-square border-is border-bs border-be border-separator", role === "article" && "flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator attention-surface", import_react_ui_theme.focusRing)
273
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_2K53Z2TU.Sheet.Main, null))));
273
274
  };
274
275
  var SheetContainer_default = SheetContainer;
275
276
  // Annotate the CommonJS export names for ESM import in node:
276
277
  0 && (module.exports = {
277
278
  sectionToolbarLayout
278
279
  });
279
- //# sourceMappingURL=SheetContainer-3ZY7MPWJ.cjs.map
280
+ //# sourceMappingURL=SheetContainer-PV5ET4UJ.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/SheetContainer.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/Toolbar/common.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes, useAttention } from '@dxos/react-ui-attention';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\n\nimport { Sheet, type SheetRootProps } from './Sheet';\nimport { Toolbar, type ToolbarAction } from './Toolbar';\n\n// TODO(Zan): Factor out, copied this from MarkdownPlugin.\nexport const sectionToolbarLayout =\n 'bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity';\n\nconst SheetContainer = ({ graph, sheet, role }: SheetRootProps & { role?: string }) => {\n const dispatch = useIntentDispatcher();\n\n const id = fullyQualifiedId(sheet);\n const attendableAttrs = useAttendableAttributes(id);\n const { hasAttention } = useAttention(id);\n\n // TODO(Zan): Centralise the toolbar action handler. Current implementation in stories.\n const handleAction = useCallback(\n (action: ToolbarAction) => {\n switch (action.type) {\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: action.anchor,\n name: action.cellContent,\n subject: sheet,\n },\n });\n }\n }\n },\n [sheet, dispatch],\n );\n\n return (\n <div\n role='none'\n className={role === 'article' ? 'row-span-2 grid grid-rows-subgrid' : undefined}\n {...(role === 'article' && attendableAttrs)}\n >\n <Sheet.Root graph={graph} sheet={sheet}>\n <div role='none' className={mx('flex flex-0 justify-center overflow-x-auto')}>\n <Toolbar.Root\n onAction={handleAction}\n classNames={mx(\n role === 'section'\n ? ['z-[2] group-focus-within/section:visible', !hasAttention && 'invisible', sectionToolbarLayout]\n : 'attention-surface',\n )}\n >\n {/* TODO(Zan): Restore some of this functionality */}\n {/* <Toolbar.Styles /> */}\n {/* <Toolbar.Format /> */}\n {/* <Toolbar.Alignment /> */}\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n </div>\n <div\n role='none'\n className={mx(\n role === 'section' && 'aspect-square border-is border-bs border-be border-separator',\n role === 'article' &&\n 'flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator attention-surface',\n focusRing,\n )}\n >\n <Sheet.Main />\n </div>\n </Sheet.Root>\n </div>\n );\n};\n\nexport default SheetContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type Icon,\n Calendar,\n ChatText,\n CurrencyDollar,\n Eraser,\n HighlighterCircle,\n TextAlignCenter,\n TextAlignLeft,\n TextAlignRight,\n} from '@phosphor-icons/react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Toolbar as NaturalToolbar,\n type ThemedClassName,\n useTranslation,\n} from '@dxos/react-ui';\nimport { nonNullable } from '@dxos/util';\n\nimport { ToolbarButton, ToolbarSeparator, ToolbarToggleButton } from './common';\nimport { addressToIndex } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type Formatting } from '../../types';\nimport { useSheetContext } from '../Sheet/sheet-context';\n\n//\n// Root\n//\n\nexport type ToolbarAction =\n | { type: 'clear' }\n | { type: 'highlight' }\n | { type: 'left' }\n | { type: 'center' }\n | { type: 'right' }\n | { type: 'date' }\n | { type: 'currency' }\n | { type: 'comment'; anchor: string; cellContent?: string };\n\nexport type ToolbarActionType = ToolbarAction['type'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n onAction?: ToolbarActionHandler;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<ToolbarProps>('Toolbar');\n\nconst ToolbarRoot = ({ children, onAction, classNames }: ToolbarProps) => {\n return (\n <ToolbarContextProvider onAction={onAction}>\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['is-full shrink-0 overflow-x-auto overflow-y-hidden p-1', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps = {\n type: ToolbarActionType;\n Icon: Icon;\n getState: (state: Formatting) => boolean;\n disabled?: (state: Formatting) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst formatOptions: ButtonProps[] = [\n { type: 'date', Icon: Calendar, getState: (state) => false },\n { type: 'currency', Icon: CurrencyDollar, getState: (state) => false },\n];\n\nconst Format = () => {\n const { onAction } = useToolbarContext('Format');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {formatOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst alignmentOptions: ButtonProps[] = [\n { type: 'left', Icon: TextAlignLeft, getState: (state) => false },\n { type: 'center', Icon: TextAlignCenter, getState: (state) => false },\n { type: 'right', Icon: TextAlignRight, getState: (state) => false },\n];\n\nconst Alignment = () => {\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {alignmentOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps[] = [\n { type: 'clear', Icon: Eraser, getState: (state) => false },\n { type: 'highlight', Icon: HighlighterCircle, getState: (state) => false },\n];\n\nconst Styles = () => {\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {styleOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursor, range, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursor) {\n return false;\n }\n return addressToIndex(model.sheet, cursor) === thread.anchor;\n });\n\n const hasCursor = !!cursor;\n const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;\n\n const tooltipLabelKey = !hasCursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : range\n ? 'comment ranges not supported label'\n : 'comment label';\n\n return (\n <ToolbarButton\n value='comment'\n Icon={ChatText}\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursor) {\n return;\n }\n return onAction?.({\n type: 'comment',\n anchor: addressToIndex(model.sheet, cursor),\n cellContent: model.getCellText(cursor),\n });\n }}\n disabled={!cursorOnly || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarButton>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Format,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Icon } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n Toolbar as NaturalToolbar,\n Tooltip,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\n// TODO(burdon): Factor out in common with react-ui-editor.\n\nexport const iconStyles = getSize(5);\nexport const buttonStyles = 'min-bs-0 p-2';\nexport const tooltipProps = { side: 'top' as const, classNames: 'z-10' };\n\nexport const ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarButton\n//\n\ntype ToolbarButtonProps = NaturalToolbarButtonProps & { Icon: Icon };\n\nexport const ToolbarButton = ({ Icon, children, ...props }: ToolbarButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.Button>\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// ToolbarToggleButton\n//\n\nexport type ToolbarToggleButtonProps = NaturalToolbarToggleGroupItemProps & { Icon: Icon };\n\nexport const ToolbarToggleButton = ({ Icon, children, ...props }: ToolbarToggleButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.ToggleGroupItem variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.ToggleGroupItem>\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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAmC;AAEnC,2BAAoC;AACpC,kBAAiC;AACjC,gCAAsD;AACtD,4BAA8B;ACL9B,IAAAA,gBAUO;AACP,2BAA8B;AAC9B,IAAAA,gBAA8C;AAE9C,sBAMO;AACP,kBAA4B;ACpB5B,IAAAA,gBAAkB;AAElB,IAAAC,mBAKO;AACP,IAAAC,yBAAwB;AAIjB,IAAMC,iBAAaC,gCAAQ,CAAA;AAC3B,IAAMC,eAAe;AACrB,IAAMC,eAAe;EAAEC,MAAM;EAAgBC,YAAY;AAAO;AAEhE,IAAMC,mBAAmB,MAAM,8BAAAC,QAAA,cAACC,OAAAA;EAAIC,MAAK;EAAYC,WAAU;;AAQ/D,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,UAAU,GAAGC,MAAAA,MAA2B;AAC5E,SACE,8BAAAP,QAAA,cAACQ,yBAAQC,MAAI,MACX,8BAAAT,QAAA,cAACQ,yBAAQE,SAAO;IAACC,SAAAA;KACf,8BAAAX,QAAA,cAACY,iBAAAA,QAAeC,QAAM;IAACC,SAAQ;IAAS,GAAGP;IAAOT,YAAYH;KAC5D,8BAAAK,QAAA,cAACK,MAAAA;IAAKF,WAAWV;MACjB,8BAAAO,QAAA,cAACe,QAAAA;IAAKZ,WAAU;KAAWG,QAAAA,CAAAA,CAAAA,GAG/B,8BAAAN,QAAA,cAACQ,yBAAQQ,QAAM,MACb,8BAAAhB,QAAA,cAACQ,yBAAQS,SAAYrB,cAClBU,UACD,8BAAAN,QAAA,cAACQ,yBAAQU,OAAK,IAAA,CAAA,CAAA,CAAA;AAKxB;AAQO,IAAMC,sBAAsB,CAAC,EAAEd,MAAMC,UAAU,GAAGC,MAAAA,MAAiC;AACxF,SACE,8BAAAP,QAAA,cAACQ,yBAAQC,MAAI,MACX,8BAAAT,QAAA,cAACQ,yBAAQE,SAAO;IAACC,SAAAA;KACf,8BAAAX,QAAA,cAACY,iBAAAA,QAAeQ,iBAAe;IAACN,SAAQ;IAAS,GAAGP;IAAOT,YAAYH;KACrE,8BAAAK,QAAA,cAACK,MAAAA;IAAKF,WAAWV;MACjB,8BAAAO,QAAA,cAACe,QAAAA;IAAKZ,WAAU;KAAWG,QAAAA,CAAAA,CAAAA,GAG/B,8BAAAN,QAAA,cAACQ,yBAAQQ,QAAM,MACb,8BAAAhB,QAAA,cAACQ,yBAAQS,SAAYrB,cAClBU,UACD,8BAAAN,QAAA,cAACQ,yBAAQU,OAAK,IAAA,CAAA,CAAA,CAAA;AAKxB;ADdA,IAAM,CAACG,wBAAwBC,iBAAAA,QAAqBC,oCAA4B,SAAA;AAEhF,IAAMC,cAAc,CAAC,EAAElB,UAAUmB,UAAU3B,WAAU,MAAgB;AACnE,SACEE,8BAAAA,QAAA,cAACqB,wBAAAA;IAAuBI;KACtBzB,8BAAAA,QAAA,cAAC0B,iCAAAA;IAAgBC,SAAQ;KACvB3B,8BAAAA,QAAA,cAAC4B,mCAAAA;IAAkBC,WAAU;KAC3B7B,8BAAAA,QAAA,cAACY,gBAAAA,QAAeH,MAAI;IAACX,YAAY;MAAC;MAA0DA;;KACzFQ,QAAAA,CAAAA,CAAAA,CAAAA;AAMb;AAeA,IAAMwB,gBAA+B;EACnC;IAAEC,MAAM;IAAQ1B,MAAM2B;IAAUC,UAAU,CAACC,UAAU;EAAM;EAC3D;IAAEH,MAAM;IAAY1B,MAAM8B;IAAgBF,UAAU,CAACC,UAAU;EAAM;;AAGvE,IAAME,SAAS,MAAA;AACb,QAAM,EAAEX,SAAQ,IAAKH,kBAAkB,QAAA;AACvC,QAAM,EAAEe,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,SACEvC,8BAAAA,QAAA,cAACY,gBAAAA,QAAe4B,aAAW;IACzBT,MAAK;KAGJD,cAAcW,IAAI,CAAC,EAAEV,MAAME,UAAU5B,KAAI,MACxCL,8BAAAA,QAAA,cAACmB,qBAAAA;IACCuB,KAAKX;IACLY,OAAOZ;IACP1B;;;IAGAuC,SAAS,MAAMnB,WAAW;MAAEM;IAA8C,CAAA;KAEzEM,EAAE,WAAWN,IAAAA,QAAY,CAAA,CAAA,CAAA;AAKpC;AAEA,IAAMc,mBAAkC;EACtC;IAAEd,MAAM;IAAQ1B,MAAMyC;IAAeb,UAAU,CAACC,UAAU;EAAM;EAChE;IAAEH,MAAM;IAAU1B,MAAM0C;IAAiBd,UAAU,CAACC,UAAU;EAAM;EACpE;IAAEH,MAAM;IAAS1B,MAAM2C;IAAgBf,UAAU,CAACC,UAAU;EAAM;;AAGpE,IAAMe,YAAY,MAAA;AAChB,QAAM,EAAExB,SAAQ,IAAKH,kBAAkB,WAAA;AACvC,QAAM,EAAEe,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,SACEvC,8BAAAA,QAAA,cAACY,gBAAAA,QAAe4B,aAAW;IACzBT,MAAK;KAGJc,iBAAiBJ,IAAI,CAAC,EAAEV,MAAME,UAAU5B,KAAI,MAC3CL,8BAAAA,QAAA,cAACmB,qBAAAA;IACCuB,KAAKX;IACLY,OAAOZ;IACP1B;;;IAGAuC,SAAS,MAAMnB,WAAW;MAAEM;IAA8C,CAAA;KAEzEM,EAAE,WAAWN,IAAAA,QAAY,CAAA,CAAA,CAAA;AAKpC;AAEA,IAAMmB,eAA8B;EAClC;IAAEnB,MAAM;IAAS1B,MAAM8C;IAAQlB,UAAU,CAACC,UAAU;EAAM;EAC1D;IAAEH,MAAM;IAAa1B,MAAM+C;IAAmBnB,UAAU,CAACC,UAAU;EAAM;;AAG3E,IAAMmB,SAAS,MAAA;AACb,QAAM,EAAE5B,SAAQ,IAAKH,kBAAkB,WAAA;AACvC,QAAM,EAAEe,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,SACEvC,8BAAAA,QAAA,cAACY,gBAAAA,QAAe4B,aAAW;IACzBT,MAAK;KAGJmB,aAAaT,IAAI,CAAC,EAAEV,MAAME,UAAU5B,KAAI,MACvCL,8BAAAA,QAAA,cAACmB,qBAAAA;IACCuB,KAAKX;IACLY,OAAOZ;IACP1B;;;IAGAuC,SAAS,MAAMnB,WAAW;MAAEM;IAA8C,CAAA;KAEzEM,EAAE,WAAWN,IAAAA,QAAY,CAAA,CAAA,CAAA;AAKpC;AAMA,IAAMuB,UAAU,MAAA;AACd,QAAM,EAAE7B,SAAQ,IAAKH,kBAAkB,SAAA;AACvC,QAAM,EAAEiC,QAAQC,OAAOC,MAAK,QAAKC,uCAAAA;AACjC,QAAM,EAAErB,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,QAAMoB,yBAAyBF,MAAMG,MAAMC,WAAW,CAAA,GACnDC,OAAOC,uBAAAA,EACPD,OAAO,CAACE,WAAWA,OAAOC,WAAW,UAAA,EACrCC,KAAK,CAACF,WAAAA;AACL,QAAI,CAACT,QAAQ;AACX,aAAO;IACT;AACA,eAAOY,sCAAeV,MAAMG,OAAOL,MAAAA,MAAYS,OAAOI;EACxD,CAAA;AAEF,QAAMC,YAAY,CAAC,CAACd;AACpB,QAAMe,aAAaD,aAAa,CAACb,SAAS,CAACG;AAE3C,QAAMY,kBAAkB,CAACF,YACrB,oBACAV,wBACE,8CACAH,QACE,uCACA;AAER,SACExD,8BAAAA,QAAA,cAACI,eAAAA;IACCuC,OAAM;IACNtC,MAAMmE;IACNC,eAAY;IACZ7B,SAAS,MAAA;AACP,UAAI,CAACW,QAAQ;AACX;MACF;AACA,aAAO9B,WAAW;QAChBM,MAAM;QACNqC,YAAQD,sCAAeV,MAAMG,OAAOL,MAAAA;QACpCmB,aAAajB,MAAMkB,YAAYpB,MAAAA;MACjC,CAAA;IACF;IACAqB,UAAU,CAACN,cAAcX;KAExBtB,EAAEkC,eAAAA,CAAAA;AAGT;AAEO,IAAMM,UAAU;EACrBpE,MAAMe;EACNsD,WAAW/E;EACXkD;EACAb;EACAiB;EACAC;AACF;AD7NO,IAAMyB,uBACX;AAEF,IAAMC,iBAAiB,CAAC,EAAEC,OAAOrB,OAAO1D,KAAI,MAAsC;AAChF,QAAMgF,eAAWC,0CAAAA;AAEjB,QAAMC,SAAKC,8BAAiBzB,KAAAA;AAC5B,QAAM0B,sBAAkBC,mDAAwBH,EAAAA;AAChD,QAAM,EAAEI,aAAY,QAAKC,wCAAaL,EAAAA;AAGtC,QAAMM,mBAAeC,0BACnB,CAACC,WAAAA;AACC,YAAQA,OAAO7D,MAAI;MACjB,KAAK,WAAW;AAEd,aAAKmD,SAAS;UACZU,QAAQ;UACRC,MAAM;YACJtC,QAAQqC,OAAOxB;YACf0B,MAAMF,OAAOlB;YACbqB,SAASnC;UACX;QACF,CAAA;MACF;IACF;EACF,GACA;IAACA;IAAOsB;GAAS;AAGnB,SACElF,6BAAAA,QAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,WAAWD,SAAS,YAAY,sCAAsC8F;IACrE,GAAI9F,SAAS,aAAaoF;KAE3BtF,6BAAAA,QAAA,cAACiG,4BAAMxF,MAAI;IAACwE;IAAcrB;KACxB5D,6BAAAA,QAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,eAAW+F,0BAAG,4CAAA;KAC7BlG,6BAAAA,QAAA,cAAC6E,QAAQpE,MAAI;IACXgB,UAAUiE;IACV5F,gBAAYoG,0BACVhG,SAAS,YACL;MAAC;MAA4C,CAACsF,gBAAgB;MAAaT;QAC3E,mBAAA;KAON/E,6BAAAA,QAAA,cAAC6E,QAAQC,WAAS,IAAA,GAClB9E,6BAAAA,QAAA,cAAC6E,QAAQvB,SAAO,IAAA,CAAA,CAAA,GAGpBtD,6BAAAA,QAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,eAAW+F,0BACThG,SAAS,aAAa,gEACtBA,SAAS,aACP,kLACFiG,+BAAAA;KAGFnG,6BAAAA,QAAA,cAACiG,4BAAMG,MAAI,IAAA,CAAA,CAAA,CAAA;AAKrB;AAEA,IAAA,yBAAepB;",
6
+ "names": ["import_react", "import_react_ui", "import_react_ui_theme", "iconStyles", "getSize", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "React", "div", "role", "className", "ToolbarButton", "Icon", "children", "props", "Tooltip", "Root", "Trigger", "asChild", "NaturalToolbar", "Button", "variant", "span", "Portal", "Content", "Arrow", "ToolbarToggleButton", "ToggleGroupItem", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "onAction", "DensityProvider", "density", "ElevationProvider", "elevation", "formatOptions", "type", "Calendar", "getState", "state", "CurrencyDollar", "Format", "t", "useTranslation", "SHEET_PLUGIN", "ToggleGroup", "map", "key", "value", "onClick", "alignmentOptions", "TextAlignLeft", "TextAlignCenter", "TextAlignRight", "Alignment", "styleOptions", "Eraser", "HighlighterCircle", "Styles", "Actions", "cursor", "range", "model", "useSheetContext", "overlapsCommentAnchor", "sheet", "threads", "filter", "nonNullable", "thread", "status", "some", "addressToIndex", "anchor", "hasCursor", "cursorOnly", "tooltipLabelKey", "ChatText", "data-testid", "cellContent", "getCellText", "disabled", "Toolbar", "Separator", "sectionToolbarLayout", "SheetContainer", "graph", "dispatch", "useIntentDispatcher", "id", "fullyQualifiedId", "attendableAttrs", "useAttendableAttributes", "hasAttention", "useAttention", "handleAction", "useCallback", "action", "data", "name", "subject", "undefined", "Sheet", "mx", "focusRing", "Main"]
7
+ }