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