@dxos/plugin-sheet 0.8.2-staging.7ac8446 → 0.8.3-main.672df60

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 (188) hide show
  1. package/dist/lib/browser/SheetContainer-N5RBUMWO.mjs +351 -0
  2. package/dist/lib/browser/SheetContainer-N5RBUMWO.mjs.map +7 -0
  3. package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs +24 -0
  4. package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-ZOKEQL2K.mjs → chunk-5FLX3UGU.mjs} +55 -63
  6. package/dist/lib/browser/chunk-5FLX3UGU.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-AT5ZK6JD.mjs → chunk-FJRLDX7Z.mjs} +1 -1
  8. package/dist/lib/browser/chunk-FJRLDX7Z.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-EMSCNWEK.mjs → chunk-IR42IS3F.mjs} +2 -2
  10. package/dist/lib/{node-esm/chunk-76T5X4VP.mjs.map → browser/chunk-IR42IS3F.mjs.map} +1 -1
  11. package/dist/lib/browser/chunk-PQXY4IK7.mjs +848 -0
  12. package/dist/lib/browser/chunk-PQXY4IK7.mjs.map +7 -0
  13. package/dist/lib/browser/{compute-graph-registry-WEJLJJ6T.mjs → compute-graph-registry-IXGGJJBU.mjs} +3 -3
  14. package/dist/lib/browser/compute-graph-registry-IXGGJJBU.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +17 -16
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs → intent-resolver-UI4DHURQ.mjs} +2 -2
  18. package/dist/lib/browser/{markdown-DR4RDEEY.mjs → markdown-T4TUP4BF.mjs} +4 -4
  19. package/dist/lib/browser/markdown-T4TUP4BF.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs → react-surface-RDKCGE6K.mjs} +5 -5
  22. package/dist/lib/browser/types/index.mjs +1 -1
  23. package/dist/lib/node/SheetContainer-TPB2ZBQF.cjs +351 -0
  24. package/dist/lib/node/SheetContainer-TPB2ZBQF.cjs.map +7 -0
  25. package/dist/lib/node/{thread-WP43BC4N.cjs → anchor-sort-LTLYUTUP.cjs} +17 -10
  26. package/dist/lib/node/anchor-sort-LTLYUTUP.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-D4MOMCEU.cjs → chunk-76NESQLB.cjs} +70 -78
  28. package/dist/lib/node/chunk-76NESQLB.cjs.map +7 -0
  29. package/dist/lib/node/{chunk-LEV7OSTK.cjs → chunk-FIM6EZ6M.cjs} +4 -4
  30. package/dist/lib/node/chunk-FIM6EZ6M.cjs.map +7 -0
  31. package/dist/lib/node/chunk-GBCCPMOO.cjs +856 -0
  32. package/dist/lib/node/chunk-GBCCPMOO.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-O2FOEUYB.cjs → chunk-LJWWS53Z.cjs} +5 -5
  34. package/dist/lib/node/{chunk-O2FOEUYB.cjs.map → chunk-LJWWS53Z.cjs.map} +1 -1
  35. package/dist/lib/node/{compute-graph-registry-VVSRJUGS.cjs → compute-graph-registry-ARLDHPFW.cjs} +7 -7
  36. package/dist/lib/node/compute-graph-registry-ARLDHPFW.cjs.map +7 -0
  37. package/dist/lib/node/index.cjs +21 -20
  38. package/dist/lib/node/index.cjs.map +3 -3
  39. package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs → intent-resolver-EVLGL7VZ.cjs} +9 -9
  40. package/dist/lib/node/{markdown-E7OUIMZO.cjs → markdown-DBPOAYI7.cjs} +8 -8
  41. package/dist/lib/node/markdown-DBPOAYI7.cjs.map +7 -0
  42. package/dist/lib/node/meta.json +1 -1
  43. package/dist/lib/node/{react-surface-6PBWE75L.cjs → react-surface-HFKXE4IS.cjs} +14 -14
  44. package/dist/lib/node/types/index.cjs +29 -29
  45. package/dist/lib/node/types/index.cjs.map +1 -1
  46. package/dist/lib/node-esm/SheetContainer-F5POTD67.mjs +352 -0
  47. package/dist/lib/node-esm/SheetContainer-F5POTD67.mjs.map +7 -0
  48. package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs +25 -0
  49. package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-6NB67Y6X.mjs → chunk-DIF3IOAB.mjs} +55 -63
  51. package/dist/lib/node-esm/chunk-DIF3IOAB.mjs.map +7 -0
  52. package/dist/lib/node-esm/{chunk-76T5X4VP.mjs → chunk-IQ76YE6M.mjs} +2 -2
  53. package/dist/lib/{browser/chunk-EMSCNWEK.mjs.map → node-esm/chunk-IQ76YE6M.mjs.map} +1 -1
  54. package/dist/lib/node-esm/{chunk-HXBUY5ET.mjs → chunk-NMCVJWDT.mjs} +1 -1
  55. package/dist/lib/node-esm/chunk-NMCVJWDT.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-THXJQL4R.mjs +849 -0
  57. package/dist/lib/node-esm/chunk-THXJQL4R.mjs.map +7 -0
  58. package/dist/lib/node-esm/{compute-graph-registry-PBQ52KH6.mjs → compute-graph-registry-7PDWXMHF.mjs} +3 -3
  59. package/dist/lib/node-esm/compute-graph-registry-7PDWXMHF.mjs.map +7 -0
  60. package/dist/lib/node-esm/index.mjs +17 -16
  61. package/dist/lib/node-esm/index.mjs.map +3 -3
  62. package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs → intent-resolver-TPOH5JM5.mjs} +2 -2
  63. package/dist/lib/node-esm/{markdown-BPKS2TNG.mjs → markdown-WWUJ3E5F.mjs} +4 -4
  64. package/dist/lib/node-esm/markdown-WWUJ3E5F.mjs.map +7 -0
  65. package/dist/lib/node-esm/meta.json +1 -1
  66. package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs → react-surface-2FV5HNNF.mjs} +5 -5
  67. package/dist/lib/node-esm/types/index.mjs +1 -1
  68. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  70. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/compute-graph-registry.d.ts +2 -2
  72. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/index.d.ts +6 -6
  74. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  76. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  77. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  78. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  79. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  81. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  82. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +3 -2
  83. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  84. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  86. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +2 -2
  87. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  88. package/dist/types/src/components/SheetToolbar/align.d.ts +4 -1
  89. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  90. package/dist/types/src/components/SheetToolbar/style.d.ts +3 -1
  91. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  92. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +2 -3
  93. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  94. package/dist/types/src/components/index.d.ts +1 -6
  95. package/dist/types/src/components/index.d.ts.map +1 -1
  96. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  97. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
  98. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  99. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  100. package/dist/types/src/model/testing.d.ts.map +1 -1
  101. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  102. package/dist/types/src/serializer.d.ts.map +1 -1
  103. package/dist/types/src/testing/data.d.ts.map +1 -1
  104. package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -1
  105. package/dist/types/src/testing/testing.d.ts.map +1 -1
  106. package/dist/types/src/translations.d.ts +2 -54
  107. package/dist/types/src/translations.d.ts.map +1 -1
  108. package/dist/types/src/types/schema.d.ts +38 -150
  109. package/dist/types/src/types/schema.d.ts.map +1 -1
  110. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  111. package/dist/types/src/types/types.d.ts +36 -36
  112. package/dist/types/src/types/types.d.ts.map +1 -1
  113. package/dist/types/src/types/util.d.ts.map +1 -1
  114. package/dist/types/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +55 -48
  116. package/src/SheetPlugin.tsx +7 -5
  117. package/src/capabilities/anchor-sort.ts +22 -0
  118. package/src/capabilities/compute-graph-registry.ts +3 -3
  119. package/src/capabilities/index.ts +1 -1
  120. package/src/capabilities/markdown.ts +3 -3
  121. package/src/components/ComputeGraph/compute-graph.stories.tsx +4 -4
  122. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -1
  123. package/src/components/GridSheet/GridSheet.stories.tsx +5 -2
  124. package/src/components/GridSheet/GridSheet.tsx +18 -12
  125. package/src/components/GridSheet/SheetCellEditor.stories.tsx +2 -2
  126. package/src/components/GridSheet/util.ts +17 -11
  127. package/src/components/RangeList/RangeList.tsx +2 -2
  128. package/src/components/SheetContainer/SheetContainer.stories.tsx +3 -6
  129. package/src/components/SheetContainer/SheetContainer.tsx +5 -8
  130. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +2 -2
  131. package/src/components/SheetToolbar/SheetToolbar.tsx +56 -20
  132. package/src/components/SheetToolbar/align.ts +44 -14
  133. package/src/components/SheetToolbar/style.ts +48 -12
  134. package/src/components/SheetToolbar/useToolbarState.ts +3 -4
  135. package/src/extensions/compute.ts +1 -1
  136. package/src/integrations/thread-ranges.ts +15 -17
  137. package/src/model/sheet-model.test.ts +1 -1
  138. package/src/model/sheet-model.ts +17 -17
  139. package/src/sanity.test.ts +3 -3
  140. package/src/serializer.ts +3 -4
  141. package/src/testing/playwright/sheet-manager.ts +9 -9
  142. package/src/types/schema.ts +20 -22
  143. package/src/types/types.ts +25 -25
  144. package/src/types/util.ts +2 -3
  145. package/dist/lib/browser/SheetContainer-B3A5443Z.mjs +0 -370
  146. package/dist/lib/browser/SheetContainer-B3A5443Z.mjs.map +0 -7
  147. package/dist/lib/browser/chunk-AT5ZK6JD.mjs.map +0 -7
  148. package/dist/lib/browser/chunk-CHMPICA6.mjs +0 -815
  149. package/dist/lib/browser/chunk-CHMPICA6.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-ZOKEQL2K.mjs.map +0 -7
  151. package/dist/lib/browser/compute-graph-registry-WEJLJJ6T.mjs.map +0 -7
  152. package/dist/lib/browser/markdown-DR4RDEEY.mjs.map +0 -7
  153. package/dist/lib/browser/thread-76MK2FMV.mjs +0 -17
  154. package/dist/lib/browser/thread-76MK2FMV.mjs.map +0 -7
  155. package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs +0 -364
  156. package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs.map +0 -7
  157. package/dist/lib/node/chunk-AEH3L5QZ.cjs +0 -822
  158. package/dist/lib/node/chunk-AEH3L5QZ.cjs.map +0 -7
  159. package/dist/lib/node/chunk-D4MOMCEU.cjs.map +0 -7
  160. package/dist/lib/node/chunk-LEV7OSTK.cjs.map +0 -7
  161. package/dist/lib/node/compute-graph-registry-VVSRJUGS.cjs.map +0 -7
  162. package/dist/lib/node/markdown-E7OUIMZO.cjs.map +0 -7
  163. package/dist/lib/node/thread-WP43BC4N.cjs.map +0 -7
  164. package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs +0 -371
  165. package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs.map +0 -7
  166. package/dist/lib/node-esm/chunk-6NB67Y6X.mjs.map +0 -7
  167. package/dist/lib/node-esm/chunk-HXBUY5ET.mjs.map +0 -7
  168. package/dist/lib/node-esm/chunk-WQHYR4WD.mjs +0 -816
  169. package/dist/lib/node-esm/chunk-WQHYR4WD.mjs.map +0 -7
  170. package/dist/lib/node-esm/compute-graph-registry-PBQ52KH6.mjs.map +0 -7
  171. package/dist/lib/node-esm/markdown-BPKS2TNG.mjs.map +0 -7
  172. package/dist/lib/node-esm/thread-4NCPE5FK.mjs +0 -18
  173. package/dist/lib/node-esm/thread-4NCPE5FK.mjs.map +0 -7
  174. package/dist/types/src/capabilities/thread.d.ts +0 -6
  175. package/dist/types/src/capabilities/thread.d.ts.map +0 -1
  176. package/dist/types/src/components/SheetToolbar/comment.d.ts +0 -23
  177. package/dist/types/src/components/SheetToolbar/comment.d.ts.map +0 -1
  178. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +0 -8
  179. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +0 -1
  180. package/src/capabilities/thread.ts +0 -14
  181. package/src/components/SheetToolbar/comment.ts +0 -56
  182. package/src/components/SheetToolbar/useToolbarAction.ts +0 -87
  183. /package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs.map → intent-resolver-UI4DHURQ.mjs.map} +0 -0
  184. /package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs.map → react-surface-RDKCGE6K.mjs.map} +0 -0
  185. /package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs.map → intent-resolver-EVLGL7VZ.cjs.map} +0 -0
  186. /package/dist/lib/node/{react-surface-6PBWE75L.cjs.map → react-surface-HFKXE4IS.cjs.map} +0 -0
  187. /package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs.map → intent-resolver-TPOH5JM5.mjs.map} +0 -0
  188. /package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs.map → react-surface-2FV5HNNF.mjs.map} +0 -0
@@ -0,0 +1,849 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ DEFAULT_COLS,
4
+ DEFAULT_ROWS,
5
+ Range,
6
+ SheetAction,
7
+ cellClassNameForRange,
8
+ rangeFromIndex,
9
+ useSheetModel
10
+ } from "./chunk-DIF3IOAB.mjs";
11
+ import {
12
+ rangeExtension,
13
+ sheetExtension
14
+ } from "./chunk-NMCVJWDT.mjs";
15
+ import {
16
+ SHEET_PLUGIN
17
+ } from "./chunk-Y6ND5HWX.mjs";
18
+
19
+ // packages/plugins/plugin-sheet/src/components/ComputeGraph/ComputeGraphContextProvider.tsx
20
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
21
+ import React, { createContext, useContext } from "react";
22
+ import { raise } from "@dxos/debug";
23
+ import { useAsyncState } from "@dxos/react-hooks";
24
+ var ComputeGraphContext = /* @__PURE__ */ createContext(void 0);
25
+ var ComputeGraphContextProvider = ({ registry, children }) => {
26
+ var _effect = _useSignals();
27
+ try {
28
+ return /* @__PURE__ */ React.createElement(ComputeGraphContext.Provider, {
29
+ value: {
30
+ registry
31
+ }
32
+ }, children);
33
+ } finally {
34
+ _effect.f();
35
+ }
36
+ };
37
+ var useComputeGraph = (space) => {
38
+ const { registry } = useContext(ComputeGraphContext) ?? raise(new Error("Missing ComputeGraphContext"));
39
+ const [graph] = useAsyncState(async () => {
40
+ if (space) {
41
+ const graph2 = registry.getOrCreateGraph(space);
42
+ await graph2.open();
43
+ return graph2;
44
+ }
45
+ }, [
46
+ space,
47
+ registry
48
+ ]);
49
+ return graph;
50
+ };
51
+
52
+ // packages/plugins/plugin-sheet/src/components/RangeList/RangeList.tsx
53
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
54
+ import { Schema } from "effect";
55
+ import React2, { useCallback } from "react";
56
+ import { rangeToA1Notation } from "@dxos/compute";
57
+ import { useTranslation } from "@dxos/react-ui";
58
+ import { List } from "@dxos/react-ui-list";
59
+ import { ghostHover } from "@dxos/react-ui-theme";
60
+ var RangeList = ({ sheet }) => {
61
+ var _effect = _useSignals2();
62
+ try {
63
+ const { t } = useTranslation(SHEET_PLUGIN);
64
+ const handleSelectRange = (range) => {
65
+ };
66
+ const handleDeleteRange = useCallback((range) => {
67
+ const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);
68
+ sheet.ranges.splice(index, 1);
69
+ }, [
70
+ sheet
71
+ ]);
72
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("h2", {
73
+ className: "p-2 text-sm font-semibold"
74
+ }, t("range list heading")), /* @__PURE__ */ React2.createElement(List.Root, {
75
+ items: sheet.ranges,
76
+ isItem: Schema.is(Range)
77
+ }, ({ items: ranges }) => ranges.map((range, i) => /* @__PURE__ */ React2.createElement(List.Item, {
78
+ key: i,
79
+ item: range,
80
+ classNames: [
81
+ "p-2",
82
+ ghostHover
83
+ ]
84
+ }, /* @__PURE__ */ React2.createElement(List.ItemDragHandle, null), /* @__PURE__ */ React2.createElement(List.ItemTitle, {
85
+ onClick: () => handleSelectRange(range)
86
+ }, t("range title", {
87
+ position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),
88
+ key: t(`range key ${range.key} label`),
89
+ value: t(`range value ${range.value} label`)
90
+ })), /* @__PURE__ */ React2.createElement(List.ItemDeleteButton, {
91
+ onClick: () => handleDeleteRange(range)
92
+ })))));
93
+ } finally {
94
+ _effect.f();
95
+ }
96
+ };
97
+
98
+ // packages/plugins/plugin-sheet/src/components/index.ts
99
+ import { lazy } from "react";
100
+
101
+ // packages/plugins/plugin-sheet/src/components/GridSheet/GridSheet.tsx
102
+ import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
103
+ import React4, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState3 } from "react";
104
+ import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
105
+ import { rangeToA1Notation as rangeToA1Notation2 } from "@dxos/compute";
106
+ import { defaultColSize, defaultRowSize } from "@dxos/lit-grid";
107
+ import { DropdownMenu, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
108
+ import { useAttention } from "@dxos/react-ui-attention";
109
+ import { closestCell, editorKeys, parseCellIndex, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
110
+
111
+ // packages/plugins/plugin-sheet/src/components/GridSheet/util.ts
112
+ import { useEffect, useState } from "react";
113
+ import { inRange } from "@dxos/compute";
114
+ import { createDocAccessor } from "@dxos/react-client/echo";
115
+ import { parseValue, cellClassesForFieldType } from "@dxos/react-ui-form";
116
+ import { colToA1Notation, rowToA1Notation, commentedClassName } from "@dxos/react-ui-grid";
117
+ import { mx } from "@dxos/react-ui-theme";
118
+ var createDxGridColumns = (model) => {
119
+ return model.sheet.columns.reduce((acc, columnId, numericIndex) => {
120
+ if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
121
+ acc.grid[numericIndex] = {
122
+ size: model.sheet.columnMeta[columnId].size,
123
+ resizeable: true
124
+ };
125
+ }
126
+ return acc;
127
+ }, {
128
+ grid: {}
129
+ });
130
+ };
131
+ var createDxGridRows = (model) => {
132
+ return model.sheet.rows.reduce((acc, rowId, numericIndex) => {
133
+ if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {
134
+ acc.grid[numericIndex] = {
135
+ size: model.sheet.rowMeta[rowId].size,
136
+ resizeable: true
137
+ };
138
+ }
139
+ return acc;
140
+ }, {
141
+ grid: {}
142
+ });
143
+ };
144
+ var projectCellProps = (model, col, row) => {
145
+ const address = {
146
+ col,
147
+ row
148
+ };
149
+ const rawValue = model.getValue(address);
150
+ const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));
151
+ const threadRefs = void 0;
152
+ const description = model.getValueDescription(address);
153
+ const type = description?.type;
154
+ const format = description?.format;
155
+ const classNames = ranges?.map(cellClassNameForRange).reverse();
156
+ return {
157
+ value: parseValue({
158
+ type,
159
+ format,
160
+ value: rawValue
161
+ }),
162
+ className: mx(cellClassesForFieldType({
163
+ type,
164
+ format
165
+ }), threadRefs && commentedClassName, classNames),
166
+ dataRefs: threadRefs
167
+ };
168
+ };
169
+ var gridCellGetter = (model) => {
170
+ const cachedGridCells = {};
171
+ return (nextBounds) => {
172
+ [
173
+ ...Array(nextBounds.end.col - nextBounds.start.col)
174
+ ].forEach((_, c0) => {
175
+ return [
176
+ ...Array(nextBounds.end.row - nextBounds.start.row)
177
+ ].forEach((_2, r0) => {
178
+ const col = nextBounds.start.col + c0;
179
+ const row = nextBounds.start.row + r0;
180
+ cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);
181
+ });
182
+ });
183
+ return cachedGridCells;
184
+ };
185
+ };
186
+ var rowLabelCell = (row) => ({
187
+ value: rowToA1Notation(row),
188
+ className: "!bg-toolbarSurface text-subdued text-end pie-1",
189
+ resizeHandle: "row"
190
+ });
191
+ var colLabelCell = (col) => ({
192
+ value: colToA1Notation(col),
193
+ className: "!bg-toolbarSurface text-subdued",
194
+ resizeHandle: "col"
195
+ });
196
+ var cellGetter = (model) => {
197
+ const getGridCells = gridCellGetter(model);
198
+ return (nextBounds, plane) => {
199
+ switch (plane) {
200
+ case "grid":
201
+ return getGridCells(nextBounds);
202
+ case "fixedStartStart": {
203
+ return {
204
+ "0,0": {
205
+ className: "!bg-toolbarSurface"
206
+ }
207
+ };
208
+ }
209
+ case "frozenColsStart":
210
+ return [
211
+ ...Array(nextBounds.end.row - nextBounds.start.row)
212
+ ].reduce((acc, _, r0) => {
213
+ const r = nextBounds.start.row + r0;
214
+ acc[`0,${r}`] = rowLabelCell(r);
215
+ return acc;
216
+ }, {});
217
+ case "frozenRowsStart":
218
+ return [
219
+ ...Array(nextBounds.end.col - nextBounds.start.col)
220
+ ].reduce((acc, _, c0) => {
221
+ const c = nextBounds.start.col + c0;
222
+ acc[`${c},0`] = colLabelCell(c);
223
+ return acc;
224
+ }, {});
225
+ default:
226
+ return {};
227
+ }
228
+ };
229
+ };
230
+ var useSheetModelDxGridProps = (dxGrid, model) => {
231
+ const [columns, setColumns] = useState(createDxGridColumns(model));
232
+ const [rows, setRows] = useState(createDxGridRows(model));
233
+ useEffect(() => {
234
+ const cellsAccessor = createDocAccessor(model.sheet, [
235
+ "cells"
236
+ ]);
237
+ if (dxGrid) {
238
+ dxGrid.getCells = cellGetter(model);
239
+ }
240
+ const handleCellsUpdate = () => {
241
+ dxGrid?.requestUpdate("initialCells");
242
+ };
243
+ cellsAccessor.handle.addListener("change", handleCellsUpdate);
244
+ const unsubscribe = model.graph.update.on(handleCellsUpdate);
245
+ return () => {
246
+ cellsAccessor.handle.removeListener("change", handleCellsUpdate);
247
+ unsubscribe();
248
+ };
249
+ }, [
250
+ model,
251
+ dxGrid
252
+ ]);
253
+ useEffect(() => {
254
+ const columnMetaAccessor = createDocAccessor(model.sheet, [
255
+ "columnMeta"
256
+ ]);
257
+ const rowMetaAccessor = createDocAccessor(model.sheet, [
258
+ "rowMeta"
259
+ ]);
260
+ const handleColumnMetaUpdate = () => {
261
+ setColumns(createDxGridColumns(model));
262
+ };
263
+ const handleRowMetaUpdate = () => {
264
+ setRows(createDxGridRows(model));
265
+ };
266
+ columnMetaAccessor.handle.addListener("change", handleColumnMetaUpdate);
267
+ rowMetaAccessor.handle.addListener("change", handleRowMetaUpdate);
268
+ return () => {
269
+ columnMetaAccessor.handle.removeListener("change", handleColumnMetaUpdate);
270
+ rowMetaAccessor.handle.removeListener("change", handleRowMetaUpdate);
271
+ };
272
+ }, [
273
+ model,
274
+ dxGrid
275
+ ]);
276
+ return {
277
+ columns,
278
+ rows
279
+ };
280
+ };
281
+
282
+ // packages/plugins/plugin-sheet/src/integrations/thread-ranges.ts
283
+ import { Schema as Schema2, pipe } from "effect";
284
+ import { useCallback as useCallback2, useEffect as useEffect2, useMemo } from "react";
285
+ import { createIntent, createResolver, LayoutAction, useIntentResolver, useIntentDispatcher, chain } from "@dxos/app-framework";
286
+ import { debounce } from "@dxos/async";
287
+ import { inRange as inRange2 } from "@dxos/compute";
288
+ import { Relation } from "@dxos/echo";
289
+ import { isInstanceOf } from "@dxos/echo-schema";
290
+ import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
291
+ import { ThreadAction, ThreadType } from "@dxos/plugin-thread/types";
292
+ import { Filter, fullyQualifiedId, getSpace, Query, useQuery } from "@dxos/react-client/echo";
293
+ import { AnchoredTo } from "@dxos/schema";
294
+ var parseThreadAnchorAsCellRange = (cursor) => {
295
+ const coords = cursor.split(",");
296
+ if (coords.length !== 4) {
297
+ return null;
298
+ } else {
299
+ const [fromCol, fromRow, toCol, toRow] = coords;
300
+ return {
301
+ from: {
302
+ col: parseInt(fromCol),
303
+ row: parseInt(fromRow)
304
+ },
305
+ to: {
306
+ col: parseInt(toCol),
307
+ row: parseInt(toRow)
308
+ }
309
+ };
310
+ }
311
+ };
312
+ var useUpdateFocusedCellOnThreadSelection = (grid) => {
313
+ const { model, setActiveRefs } = useSheetContext();
314
+ const scrollIntoViewResolver = useMemo(() => createResolver({
315
+ intent: LayoutAction.ScrollIntoView,
316
+ position: "hoist",
317
+ filter: (data) => {
318
+ if (!Schema2.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
319
+ return false;
320
+ }
321
+ return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;
322
+ },
323
+ resolve: ({ options: { cursor, ref } }) => {
324
+ setActiveRefs(ref);
325
+ const range = parseThreadAnchorAsCellRange(cursor);
326
+ range && grid?.setFocus({
327
+ ...range.to,
328
+ plane: "grid"
329
+ }, true);
330
+ }
331
+ }), [
332
+ model.sheet,
333
+ setActiveRefs
334
+ ]);
335
+ useIntentResolver(SHEET_PLUGIN, scrollIntoViewResolver);
336
+ };
337
+ var useSelectThreadOnCellFocus = () => {
338
+ const { model, cursor } = useSheetContext();
339
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
340
+ const space = getSpace(model.sheet);
341
+ const anchors = useQuery(space, Query.select(Filter.ids(model.sheet.id)).targetOf(AnchoredTo));
342
+ const selectClosestThread = useCallback2((cellAddress) => {
343
+ if (!cellAddress) {
344
+ return;
345
+ }
346
+ const closestThread = anchors.find((anchor) => {
347
+ const source = Relation.getSource(anchor);
348
+ if (anchor.anchor && isInstanceOf(ThreadType, source)) {
349
+ const range = parseThreadAnchorAsCellRange(anchor.anchor);
350
+ return range ? inRange2(range, cellAddress) : false;
351
+ } else {
352
+ return false;
353
+ }
354
+ });
355
+ if (closestThread) {
356
+ const primary = fullyQualifiedId(model.sheet);
357
+ const intent = pipe(createIntent(ThreadAction.Select, {
358
+ current: fullyQualifiedId(closestThread)
359
+ }), chain(DeckAction.ChangeCompanion, {
360
+ primary,
361
+ companion: `${primary}${ATTENDABLE_PATH_SEPARATOR}comments`
362
+ }));
363
+ void dispatch(intent);
364
+ }
365
+ }, [
366
+ dispatch,
367
+ anchors
368
+ ]);
369
+ const debounced = useMemo(() => {
370
+ return debounce((cellCoords) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);
371
+ }, [
372
+ selectClosestThread
373
+ ]);
374
+ useEffect2(() => {
375
+ if (!cursor) {
376
+ return;
377
+ }
378
+ debounced(cursor);
379
+ }, [
380
+ cursor,
381
+ debounced
382
+ ]);
383
+ };
384
+
385
+ // packages/plugins/plugin-sheet/src/components/SheetContext/SheetContext.tsx
386
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
387
+ import React3, { createContext as createContext2, useCallback as useCallback3, useContext as useContext2, useState as useState2 } from "react";
388
+ import { invariant } from "@dxos/invariant";
389
+ import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
390
+ import { Grid, useGridContext } from "@dxos/react-ui-grid";
391
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-sheet/src/components/SheetContext/SheetContext.tsx";
392
+ var SheetContext = /* @__PURE__ */ createContext2(void 0);
393
+ var useSheetContext = () => {
394
+ const context = useContext2(SheetContext);
395
+ invariant(context, void 0, {
396
+ F: __dxlog_file,
397
+ L: 54,
398
+ S: void 0,
399
+ A: [
400
+ "context",
401
+ ""
402
+ ]
403
+ });
404
+ return context;
405
+ };
406
+ var SheetProviderImpl = ({ model, onInfo, ignoreAttention, children, __gridScope }) => {
407
+ var _effect = _useSignals3();
408
+ try {
409
+ const { id, editing, setEditing } = useGridContext("SheetProvider", __gridScope);
410
+ const [cursor, setCursorInternal] = useState2();
411
+ const [range, setRangeInternal] = useState2();
412
+ const [cursorFallbackRange, setCursorFallbackRange] = useState2();
413
+ const [activeRefs, setActiveRefs] = useState2("");
414
+ const setCursor = useCallback3((nextCursor) => {
415
+ setCursorInternal(nextCursor);
416
+ setCursorFallbackRange(range?.to ? range : nextCursor ? {
417
+ from: nextCursor,
418
+ to: nextCursor
419
+ } : void 0);
420
+ }, [
421
+ range
422
+ ]);
423
+ const setRange = useCallback3((nextRange) => {
424
+ setRangeInternal(nextRange);
425
+ setCursorFallbackRange(nextRange?.to ? nextRange : cursor ? {
426
+ from: cursor,
427
+ to: cursor
428
+ } : void 0);
429
+ }, [
430
+ cursor
431
+ ]);
432
+ return /* @__PURE__ */ React3.createElement(SheetContext.Provider, {
433
+ value: {
434
+ id,
435
+ model,
436
+ editing,
437
+ setEditing,
438
+ cursor,
439
+ setCursor,
440
+ range,
441
+ setRange,
442
+ cursorFallbackRange,
443
+ activeRefs,
444
+ setActiveRefs,
445
+ // TODO(burdon): Change to event.
446
+ onInfo,
447
+ ignoreAttention
448
+ }
449
+ }, children);
450
+ } finally {
451
+ _effect.f();
452
+ }
453
+ };
454
+ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo }) => {
455
+ var _effect = _useSignals3();
456
+ try {
457
+ const model = useSheetModel(graph, sheet, {
458
+ readonly
459
+ });
460
+ return !model ? null : /* @__PURE__ */ React3.createElement(Grid.Root, {
461
+ id: fullyQualifiedId2(sheet)
462
+ }, /* @__PURE__ */ React3.createElement(SheetProviderImpl, {
463
+ model,
464
+ onInfo,
465
+ ignoreAttention
466
+ }, children));
467
+ } finally {
468
+ _effect.f();
469
+ }
470
+ };
471
+
472
+ // packages/plugins/plugin-sheet/src/components/GridSheet/GridSheet.tsx
473
+ var inertPosition = {
474
+ plane: "grid",
475
+ col: 0,
476
+ row: 0
477
+ };
478
+ var initialCells = {
479
+ grid: {},
480
+ frozenColsStart: [
481
+ ...Array(64)
482
+ ].reduce((acc, _, i) => {
483
+ acc[`0,${i}`] = rowLabelCell(i);
484
+ return acc;
485
+ }, {}),
486
+ frozenRowsStart: [
487
+ ...Array(12)
488
+ ].reduce((acc, _, i) => {
489
+ acc[`${i},0`] = colLabelCell(i);
490
+ return acc;
491
+ }, {})
492
+ };
493
+ var frozen = {
494
+ frozenColsStart: 1,
495
+ frozenRowsStart: 1
496
+ };
497
+ var sheetColDefault = {
498
+ frozenColsStart: {
499
+ size: 48,
500
+ readonly: true
501
+ },
502
+ grid: {
503
+ size: defaultColSize,
504
+ resizeable: true
505
+ }
506
+ };
507
+ var sheetRowDefault = {
508
+ frozenRowsStart: {
509
+ size: defaultRowSize,
510
+ readonly: true
511
+ },
512
+ grid: {
513
+ size: defaultRowSize,
514
+ resizeable: true
515
+ }
516
+ };
517
+ var GridSheet = () => {
518
+ var _effect = _useSignals4();
519
+ try {
520
+ const { t } = useTranslation2(SHEET_PLUGIN);
521
+ const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } = useSheetContext();
522
+ const [dxGrid, setDxGrid] = useState3(null);
523
+ const [extraplanarFocus, setExtraplanarFocus] = useState3(null);
524
+ const { dispatchPromise: dispatch } = useIntentDispatcher2();
525
+ const rangeController = useRef();
526
+ const { hasAttention } = useAttention(id);
527
+ const handleFocus = useCallback4((event) => {
528
+ if (!editing) {
529
+ const cell = closestCell(event.target);
530
+ if (cell) {
531
+ if (cell.plane === "grid") {
532
+ setCursor({
533
+ col: cell.col,
534
+ row: cell.row
535
+ });
536
+ setExtraplanarFocus(null);
537
+ } else {
538
+ setExtraplanarFocus(cell);
539
+ }
540
+ } else {
541
+ setExtraplanarFocus(null);
542
+ }
543
+ }
544
+ }, [
545
+ editing
546
+ ]);
547
+ const handleClose = useCallback4((_value, event) => {
548
+ if (event) {
549
+ const { key, shift } = event;
550
+ const axis = [
551
+ "Enter",
552
+ "ArrowUp",
553
+ "ArrowDown"
554
+ ].includes(key) ? "row" : [
555
+ "Tab",
556
+ "ArrowLeft",
557
+ "ArrowRight"
558
+ ].includes(key) ? "col" : void 0;
559
+ const delta = key.startsWith("Arrow") ? [
560
+ "ArrowUp",
561
+ "ArrowLeft"
562
+ ].includes(key) ? -1 : 1 : shift ? -1 : 1;
563
+ dxGrid?.refocus(axis, delta);
564
+ }
565
+ }, [
566
+ model,
567
+ editing,
568
+ dxGrid
569
+ ]);
570
+ const handleBlur = useCallback4((value) => {
571
+ if (value !== void 0) {
572
+ model.setValue(parseCellIndex(editing.index), value);
573
+ }
574
+ }, [
575
+ model,
576
+ editing
577
+ ]);
578
+ const handleAxisResize = useCallback4(({ axis, size, index: numericIndex }) => {
579
+ if (axis === "row") {
580
+ const rowId = model.sheet.rows[parseInt(numericIndex)];
581
+ model.sheet.rowMeta[rowId] ??= {};
582
+ model.sheet.rowMeta[rowId].size = size;
583
+ } else {
584
+ const columnId = model.sheet.columns[parseInt(numericIndex)];
585
+ model.sheet.columnMeta[columnId] ??= {};
586
+ model.sheet.columnMeta[columnId].size = size;
587
+ }
588
+ }, [
589
+ model
590
+ ]);
591
+ const handleSelect = useCallback4(({ minCol, maxCol, minRow, maxRow }) => {
592
+ const range = {
593
+ from: {
594
+ col: minCol,
595
+ row: minRow
596
+ }
597
+ };
598
+ if (minCol !== maxCol || minRow !== maxRow) {
599
+ range.to = {
600
+ col: maxCol,
601
+ row: maxRow
602
+ };
603
+ }
604
+ if (editing) {
605
+ rangeController.current?.setRange(rangeToA1Notation2(range));
606
+ } else {
607
+ setRange(range.to ? range : void 0);
608
+ }
609
+ }, [
610
+ editing
611
+ ]);
612
+ const handleWheel = useCallback4((event) => {
613
+ if (!ignoreAttention && !hasAttention) {
614
+ event.stopPropagation();
615
+ }
616
+ }, [
617
+ hasAttention,
618
+ ignoreAttention
619
+ ]);
620
+ const selectEntireAxis = useCallback4((pos) => {
621
+ switch (pos.plane) {
622
+ case "frozenRowsStart":
623
+ return dxGrid?.setSelection({
624
+ start: {
625
+ col: pos.col,
626
+ row: 0,
627
+ plane: "grid"
628
+ },
629
+ end: {
630
+ col: pos.col,
631
+ row: model.sheet.rows.length - 1,
632
+ plane: "grid"
633
+ }
634
+ });
635
+ case "frozenColsStart":
636
+ return dxGrid?.setSelection({
637
+ start: {
638
+ row: pos.row,
639
+ col: 0,
640
+ plane: "grid"
641
+ },
642
+ end: {
643
+ row: pos.row,
644
+ col: model.sheet.columns.length - 1,
645
+ plane: "grid"
646
+ }
647
+ });
648
+ }
649
+ }, [
650
+ dxGrid,
651
+ model.sheet
652
+ ]);
653
+ const handleClick = useCallback4((event) => {
654
+ const cell = closestCell(event.target);
655
+ if (cell) {
656
+ selectEntireAxis(cell);
657
+ }
658
+ }, [
659
+ selectEntireAxis
660
+ ]);
661
+ const handleKeyDown = useCallback4((event) => {
662
+ switch (event.key) {
663
+ case "Backspace":
664
+ case "Delete":
665
+ event.preventDefault();
666
+ return cursorFallbackRange && model.clear(cursorFallbackRange);
667
+ case "Enter":
668
+ case "Space":
669
+ if (dxGrid && extraplanarFocus) {
670
+ switch (extraplanarFocus.plane) {
671
+ case "frozenRowsStart":
672
+ case "frozenColsStart":
673
+ event.preventDefault();
674
+ return selectEntireAxis(extraplanarFocus);
675
+ }
676
+ }
677
+ }
678
+ if (event.metaKey || event.ctrlKey) {
679
+ switch (event.key) {
680
+ case "x":
681
+ case "X":
682
+ event.preventDefault();
683
+ return cursorFallbackRange && model.cut(cursorFallbackRange);
684
+ case "c":
685
+ case "C":
686
+ event.preventDefault();
687
+ return cursorFallbackRange && model.copy(cursorFallbackRange);
688
+ case "v":
689
+ case "V":
690
+ event.preventDefault();
691
+ return cursor && model.paste(cursor);
692
+ case "z":
693
+ event.preventDefault();
694
+ return event.shiftKey ? model.redo() : model.undo();
695
+ case "Z":
696
+ case "y":
697
+ event.preventDefault();
698
+ return model.redo();
699
+ }
700
+ }
701
+ }, [
702
+ cursorFallbackRange,
703
+ model,
704
+ cursor,
705
+ extraplanarFocus,
706
+ selectEntireAxis
707
+ ]);
708
+ const contextMenuAnchorRef = useRef(null);
709
+ const [contextMenuOpen, setContextMenuOpen] = useState3(null);
710
+ const contextMenuAxis = contextMenuOpen?.plane.startsWith("frozenRows") ? "col" : "row";
711
+ const handleContextMenu = useCallback4((event) => {
712
+ const cell = closestCell(event.target);
713
+ if (cell && cell.plane.startsWith("frozen")) {
714
+ event.preventDefault();
715
+ contextMenuAnchorRef.current = event.target;
716
+ setContextMenuOpen(cell);
717
+ }
718
+ }, []);
719
+ const handleAxisMenuAction = useCallback4((operation) => {
720
+ switch (operation) {
721
+ case "insert-before":
722
+ case "insert-after":
723
+ return dispatch(createIntent2(SheetAction.InsertAxis, {
724
+ model,
725
+ axis: contextMenuAxis,
726
+ index: contextMenuOpen[contextMenuAxis] + (operation === "insert-before" ? 0 : 1)
727
+ }));
728
+ case "drop":
729
+ return dispatch(createIntent2(SheetAction.DropAxis, {
730
+ model,
731
+ axis: contextMenuAxis,
732
+ axisIndex: model.sheet[contextMenuAxis === "row" ? "rows" : "columns"][contextMenuOpen[contextMenuAxis]]
733
+ }));
734
+ }
735
+ }, [
736
+ contextMenuAxis,
737
+ contextMenuOpen,
738
+ model,
739
+ dispatch
740
+ ]);
741
+ const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
742
+ const extension = useMemo2(() => [
743
+ editorKeys({
744
+ onClose: handleClose,
745
+ ...editing?.initialContent && {
746
+ onNav: handleClose
747
+ }
748
+ }),
749
+ sheetExtension({
750
+ functions: model.graph.getFunctions()
751
+ }),
752
+ rangeExtension({
753
+ onInit: (fn) => rangeController.current = fn,
754
+ onStateChange: (state) => {
755
+ if (dxGrid) {
756
+ dxGrid.mode = typeof state.activeRange === "undefined" ? "edit" : "edit-select";
757
+ }
758
+ }
759
+ })
760
+ ], [
761
+ model,
762
+ handleClose,
763
+ editing
764
+ ]);
765
+ const getCellContent = useCallback4((index) => {
766
+ return model.getCellText(parseCellIndex(index));
767
+ }, [
768
+ model
769
+ ]);
770
+ useUpdateFocusedCellOnThreadSelection(dxGrid);
771
+ useSelectThreadOnCellFocus();
772
+ return (
773
+ // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
774
+ /* @__PURE__ */ React4.createElement("div", {
775
+ role: "none",
776
+ className: "relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent "
777
+ }, /* @__PURE__ */ React4.createElement(GridCellEditor, {
778
+ getCellContent,
779
+ extension,
780
+ onBlur: handleBlur
781
+ }), /* @__PURE__ */ React4.createElement(Grid2.Content, {
782
+ initialCells,
783
+ limitColumns: DEFAULT_COLS,
784
+ limitRows: DEFAULT_ROWS,
785
+ columns,
786
+ rows,
787
+ // TODO(burdon): `col` vs. `column`?
788
+ columnDefault: sheetColDefault,
789
+ rowDefault: sheetRowDefault,
790
+ frozen,
791
+ onAxisResize: handleAxisResize,
792
+ onSelect: handleSelect,
793
+ onFocus: handleFocus,
794
+ onWheelCapture: handleWheel,
795
+ onKeyDown: handleKeyDown,
796
+ onContextMenu: handleContextMenu,
797
+ onClick: handleClick,
798
+ overscroll: "trap",
799
+ className: "[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-be [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator",
800
+ activeRefs,
801
+ ref: setDxGrid
802
+ }), /* @__PURE__ */ React4.createElement(DropdownMenu.Root, {
803
+ modal: false,
804
+ open: !!contextMenuOpen,
805
+ onOpenChange: (nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)
806
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.VirtualTrigger, {
807
+ virtualRef: contextMenuAnchorRef
808
+ }), /* @__PURE__ */ React4.createElement(DropdownMenu.Content, {
809
+ side: contextMenuAxis === "col" ? "bottom" : "right",
810
+ sideOffset: 4,
811
+ collisionPadding: 8
812
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
813
+ onClick: () => handleAxisMenuAction("insert-before"),
814
+ "data-testid": `grid.${contextMenuAxis}.insert-before`
815
+ }, /* @__PURE__ */ React4.createElement(Icon, {
816
+ size: 5,
817
+ icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
818
+ }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
819
+ onClick: () => handleAxisMenuAction("insert-after"),
820
+ "data-testid": `grid.${contextMenuAxis}.insert-after`
821
+ }, /* @__PURE__ */ React4.createElement(Icon, {
822
+ size: 5,
823
+ icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
824
+ }), /* @__PURE__ */ React4.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React4.createElement(DropdownMenu.Item, {
825
+ onClick: () => handleAxisMenuAction("drop"),
826
+ "data-testid": `grid.${contextMenuAxis}.drop`
827
+ }, /* @__PURE__ */ React4.createElement(Icon, {
828
+ size: 5,
829
+ icon: "ph--backspace--regular"
830
+ }), /* @__PURE__ */ React4.createElement("span", null, t(`delete ${contextMenuAxis} label`)))), /* @__PURE__ */ React4.createElement(DropdownMenu.Arrow, null))))
831
+ );
832
+ } finally {
833
+ _effect.f();
834
+ }
835
+ };
836
+
837
+ // packages/plugins/plugin-sheet/src/components/index.ts
838
+ var SheetContainer = lazy(() => import("./SheetContainer-F5POTD67.mjs"));
839
+
840
+ export {
841
+ ComputeGraphContextProvider,
842
+ useComputeGraph,
843
+ useSheetContext,
844
+ SheetProvider,
845
+ GridSheet,
846
+ RangeList,
847
+ SheetContainer
848
+ };
849
+ //# sourceMappingURL=chunk-THXJQL4R.mjs.map