vastgrid 0.1.0 → 0.2.0

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 (312) hide show
  1. package/README.md +175 -13
  2. package/dist/canvas/geometry.d.ts +92 -0
  3. package/dist/canvas/geometry.d.ts.map +1 -0
  4. package/dist/canvas/geometry.js +197 -0
  5. package/dist/canvas/geometry.js.map +1 -0
  6. package/dist/canvas/grid-canvas.d.ts +161 -0
  7. package/dist/canvas/grid-canvas.d.ts.map +1 -0
  8. package/dist/canvas/grid-canvas.js +1146 -0
  9. package/dist/canvas/grid-canvas.js.map +1 -0
  10. package/dist/canvas/hooks.d.ts +61 -0
  11. package/dist/canvas/hooks.d.ts.map +1 -0
  12. package/dist/canvas/hooks.js +2 -0
  13. package/dist/canvas/hooks.js.map +1 -0
  14. package/dist/canvas/keys.d.ts +26 -0
  15. package/dist/canvas/keys.d.ts.map +1 -0
  16. package/dist/canvas/keys.js +133 -0
  17. package/dist/canvas/keys.js.map +1 -0
  18. package/dist/canvas/layout.d.ts +26 -0
  19. package/dist/canvas/layout.d.ts.map +1 -0
  20. package/dist/canvas/layout.js +73 -0
  21. package/dist/canvas/layout.js.map +1 -0
  22. package/dist/canvas/scroll.d.ts +31 -0
  23. package/dist/canvas/scroll.d.ts.map +1 -0
  24. package/dist/canvas/scroll.js +111 -0
  25. package/dist/canvas/scroll.js.map +1 -0
  26. package/dist/canvas/text.d.ts +23 -0
  27. package/dist/canvas/text.d.ts.map +1 -0
  28. package/dist/canvas/text.js +142 -0
  29. package/dist/canvas/text.js.map +1 -0
  30. package/dist/{theme.d.ts → canvas/theme.d.ts} +8 -0
  31. package/dist/canvas/theme.d.ts.map +1 -0
  32. package/dist/canvas/theme.js +62 -0
  33. package/dist/canvas/theme.js.map +1 -0
  34. package/dist/core/cache.d.ts +48 -0
  35. package/dist/core/cache.d.ts.map +1 -0
  36. package/dist/core/cache.js +222 -0
  37. package/dist/core/cache.js.map +1 -0
  38. package/dist/core/checked.d.ts +20 -0
  39. package/dist/core/checked.d.ts.map +1 -0
  40. package/dist/core/checked.js +61 -0
  41. package/dist/core/checked.js.map +1 -0
  42. package/dist/core/client.d.ts +33 -0
  43. package/dist/core/client.d.ts.map +1 -0
  44. package/dist/core/client.js +103 -0
  45. package/dist/core/client.js.map +1 -0
  46. package/dist/core/conditions.d.ts +48 -0
  47. package/dist/core/conditions.d.ts.map +1 -0
  48. package/dist/core/conditions.js +105 -0
  49. package/dist/core/conditions.js.map +1 -0
  50. package/dist/core/evaluate.d.ts +20 -0
  51. package/dist/core/evaluate.d.ts.map +1 -0
  52. package/dist/core/evaluate.js +210 -0
  53. package/dist/core/evaluate.js.map +1 -0
  54. package/dist/core/filters.d.ts +51 -0
  55. package/dist/core/filters.d.ts.map +1 -0
  56. package/dist/core/filters.js +303 -0
  57. package/dist/core/filters.js.map +1 -0
  58. package/dist/core/format.d.ts +14 -0
  59. package/dist/core/format.d.ts.map +1 -0
  60. package/dist/core/format.js +303 -0
  61. package/dist/core/format.js.map +1 -0
  62. package/dist/core/measures.d.ts +26 -0
  63. package/dist/core/measures.d.ts.map +1 -0
  64. package/dist/core/measures.js +105 -0
  65. package/dist/core/measures.js.map +1 -0
  66. package/dist/core/request-ids.d.ts +20 -0
  67. package/dist/core/request-ids.d.ts.map +1 -0
  68. package/dist/core/request-ids.js +55 -0
  69. package/dist/core/request-ids.js.map +1 -0
  70. package/dist/core/rows.d.ts +79 -0
  71. package/dist/core/rows.d.ts.map +1 -0
  72. package/dist/core/rows.js +173 -0
  73. package/dist/core/rows.js.map +1 -0
  74. package/dist/core/store.d.ts +233 -0
  75. package/dist/core/store.d.ts.map +1 -0
  76. package/dist/core/store.js +1162 -0
  77. package/dist/core/store.js.map +1 -0
  78. package/dist/core/totals.d.ts +24 -0
  79. package/dist/core/totals.d.ts.map +1 -0
  80. package/dist/core/totals.js +49 -0
  81. package/dist/core/totals.js.map +1 -0
  82. package/dist/core/trace.d.ts +7 -0
  83. package/dist/core/trace.d.ts.map +1 -0
  84. package/dist/core/trace.js +26 -0
  85. package/dist/core/trace.js.map +1 -0
  86. package/dist/core/transports.d.ts +50 -0
  87. package/dist/core/transports.d.ts.map +1 -0
  88. package/dist/core/transports.js +160 -0
  89. package/dist/core/transports.js.map +1 -0
  90. package/dist/core/types.d.ts +150 -0
  91. package/dist/core/types.d.ts.map +1 -0
  92. package/dist/core/types.js +45 -0
  93. package/dist/core/types.js.map +1 -0
  94. package/dist/core.d.ts +12 -0
  95. package/dist/core.d.ts.map +1 -0
  96. package/dist/core.js +11 -0
  97. package/dist/core.js.map +1 -0
  98. package/dist/index.d.ts +15 -6
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +13 -7
  101. package/dist/index.js.map +1 -1
  102. package/dist/react/accessible-rows.d.ts +13 -0
  103. package/dist/react/accessible-rows.d.ts.map +1 -0
  104. package/dist/react/accessible-rows.js +320 -0
  105. package/dist/react/accessible-rows.js.map +1 -0
  106. package/dist/react/cell-editor.d.ts +22 -0
  107. package/dist/react/cell-editor.d.ts.map +1 -0
  108. package/dist/react/cell-editor.js +431 -0
  109. package/dist/react/cell-editor.js.map +1 -0
  110. package/dist/react/cell-menu.d.ts +18 -0
  111. package/dist/react/cell-menu.d.ts.map +1 -0
  112. package/dist/react/cell-menu.js +299 -0
  113. package/dist/react/cell-menu.js.map +1 -0
  114. package/dist/react/column-menu.d.ts +16 -0
  115. package/dist/react/column-menu.d.ts.map +1 -0
  116. package/dist/react/column-menu.js +1311 -0
  117. package/dist/react/column-menu.js.map +1 -0
  118. package/dist/react/columns-menu.d.ts +7 -0
  119. package/dist/react/columns-menu.d.ts.map +1 -0
  120. package/dist/react/columns-menu.js +249 -0
  121. package/dist/react/columns-menu.js.map +1 -0
  122. package/dist/react/conditions-menu.d.ts +10 -0
  123. package/dist/react/conditions-menu.d.ts.map +1 -0
  124. package/dist/react/conditions-menu.js +795 -0
  125. package/dist/react/conditions-menu.js.map +1 -0
  126. package/dist/react/context.d.ts +29 -0
  127. package/dist/react/context.d.ts.map +1 -0
  128. package/dist/react/context.js +18 -0
  129. package/dist/react/context.js.map +1 -0
  130. package/dist/react/data-grid.d.ts +79 -0
  131. package/dist/react/data-grid.d.ts.map +1 -0
  132. package/dist/react/data-grid.js +653 -0
  133. package/dist/react/data-grid.js.map +1 -0
  134. package/dist/react/detail-panel.d.ts +22 -0
  135. package/dist/react/detail-panel.d.ts.map +1 -0
  136. package/dist/react/detail-panel.js +242 -0
  137. package/dist/react/detail-panel.js.map +1 -0
  138. package/dist/react/export-menu.d.ts +11 -0
  139. package/dist/react/export-menu.d.ts.map +1 -0
  140. package/dist/react/export-menu.js +304 -0
  141. package/dist/react/export-menu.js.map +1 -0
  142. package/dist/react/find-bar.d.ts +11 -0
  143. package/dist/react/find-bar.d.ts.map +1 -0
  144. package/dist/react/find-bar.js +303 -0
  145. package/dist/react/find-bar.js.map +1 -0
  146. package/dist/react/format-form.d.ts +12 -0
  147. package/dist/react/format-form.d.ts.map +1 -0
  148. package/dist/react/format-form.js +863 -0
  149. package/dist/react/format-form.js.map +1 -0
  150. package/dist/react/formula-menu.d.ts +6 -0
  151. package/dist/react/formula-menu.d.ts.map +1 -0
  152. package/dist/react/formula-menu.js +343 -0
  153. package/dist/react/formula-menu.js.map +1 -0
  154. package/dist/react/grid-body.d.ts +33 -0
  155. package/dist/react/grid-body.d.ts.map +1 -0
  156. package/dist/react/grid-body.js +1389 -0
  157. package/dist/react/grid-body.js.map +1 -0
  158. package/dist/react/group-menu.d.ts +7 -0
  159. package/dist/react/group-menu.d.ts.map +1 -0
  160. package/dist/react/group-menu.js +508 -0
  161. package/dist/react/group-menu.js.map +1 -0
  162. package/dist/react/hooks.d.ts +33 -0
  163. package/dist/react/hooks.d.ts.map +1 -0
  164. package/dist/react/hooks.js +161 -0
  165. package/dist/react/hooks.js.map +1 -0
  166. package/dist/react/messages.d.ts +180 -0
  167. package/dist/react/messages.d.ts.map +1 -0
  168. package/dist/react/messages.js +414 -0
  169. package/dist/react/messages.js.map +1 -0
  170. package/dist/react/save.d.ts +9 -0
  171. package/dist/react/save.d.ts.map +1 -0
  172. package/dist/react/save.js +102 -0
  173. package/dist/react/save.js.map +1 -0
  174. package/dist/react/static-rows.d.ts +9 -0
  175. package/dist/react/static-rows.d.ts.map +1 -0
  176. package/dist/react/static-rows.js +176 -0
  177. package/dist/react/static-rows.js.map +1 -0
  178. package/dist/react/status-bar.d.ts +12 -0
  179. package/dist/react/status-bar.d.ts.map +1 -0
  180. package/dist/react/status-bar.js +413 -0
  181. package/dist/react/status-bar.js.map +1 -0
  182. package/dist/react/toolbar-popover.d.ts +14 -0
  183. package/dist/react/toolbar-popover.d.ts.map +1 -0
  184. package/dist/react/toolbar-popover.js +143 -0
  185. package/dist/react/toolbar-popover.js.map +1 -0
  186. package/dist/react/toolbar.d.ts +13 -0
  187. package/dist/react/toolbar.d.ts.map +1 -0
  188. package/dist/react/toolbar.js +344 -0
  189. package/dist/react/toolbar.js.map +1 -0
  190. package/dist/server.d.ts +22 -0
  191. package/dist/server.d.ts.map +1 -0
  192. package/dist/server.js +45 -0
  193. package/dist/server.js.map +1 -0
  194. package/dist/styles.css +496 -316
  195. package/package.json +43 -18
  196. package/src/canvas/geometry.ts +197 -0
  197. package/src/canvas/grid-canvas.ts +1222 -0
  198. package/src/canvas/hooks.ts +61 -0
  199. package/src/canvas/keys.ts +96 -0
  200. package/src/canvas/layout.ts +77 -0
  201. package/src/canvas/scroll.ts +120 -0
  202. package/src/canvas/text.ts +155 -0
  203. package/src/{theme.ts → canvas/theme.ts} +14 -1
  204. package/src/core/cache.ts +247 -0
  205. package/src/core/checked.ts +64 -0
  206. package/src/core/client.ts +103 -0
  207. package/src/core/conditions.ts +89 -0
  208. package/src/core/evaluate.ts +221 -0
  209. package/src/core/filters.ts +268 -0
  210. package/src/core/format.ts +309 -0
  211. package/src/core/measures.ts +99 -0
  212. package/src/core/request-ids.ts +54 -0
  213. package/src/core/rows.ts +213 -0
  214. package/src/core/store.ts +1122 -0
  215. package/src/core/totals.ts +59 -0
  216. package/src/core/trace.ts +44 -0
  217. package/src/core/transports.ts +177 -0
  218. package/src/core/types.ts +168 -0
  219. package/src/core.ts +39 -0
  220. package/src/index.ts +24 -12
  221. package/src/react/accessible-rows.tsx +242 -0
  222. package/src/react/cell-editor.tsx +216 -0
  223. package/src/react/cell-menu.tsx +166 -0
  224. package/src/react/column-menu.tsx +619 -0
  225. package/src/react/columns-menu.tsx +116 -0
  226. package/src/react/conditions-menu.tsx +289 -0
  227. package/src/react/context.ts +33 -0
  228. package/src/react/data-grid.tsx +286 -0
  229. package/src/react/detail-panel.tsx +92 -0
  230. package/src/react/export-menu.tsx +112 -0
  231. package/src/react/find-bar.tsx +112 -0
  232. package/src/react/format-form.tsx +421 -0
  233. package/src/react/formula-menu.tsx +163 -0
  234. package/src/react/grid-body.tsx +744 -0
  235. package/src/react/group-menu.tsx +214 -0
  236. package/src/react/hooks.ts +104 -0
  237. package/src/react/messages.ts +556 -0
  238. package/src/react/save.ts +42 -0
  239. package/src/react/static-rows.tsx +59 -0
  240. package/src/react/status-bar.tsx +175 -0
  241. package/src/react/toolbar-popover.tsx +69 -0
  242. package/src/react/toolbar.tsx +152 -0
  243. package/src/server.ts +58 -0
  244. package/src/styles.css +496 -316
  245. package/dist/components/bars.d.ts +0 -14
  246. package/dist/components/bars.d.ts.map +0 -1
  247. package/dist/components/bars.js +0 -67
  248. package/dist/components/bars.js.map +0 -1
  249. package/dist/components/cell-inspector.d.ts +0 -11
  250. package/dist/components/cell-inspector.d.ts.map +0 -1
  251. package/dist/components/cell-inspector.js +0 -37
  252. package/dist/components/cell-inspector.js.map +0 -1
  253. package/dist/components/columns-panel.d.ts +0 -12
  254. package/dist/components/columns-panel.d.ts.map +0 -1
  255. package/dist/components/columns-panel.js +0 -11
  256. package/dist/components/columns-panel.js.map +0 -1
  257. package/dist/components/filter-panel.d.ts +0 -17
  258. package/dist/components/filter-panel.d.ts.map +0 -1
  259. package/dist/components/filter-panel.js +0 -165
  260. package/dist/components/filter-panel.js.map +0 -1
  261. package/dist/components/find-bar.d.ts +0 -9
  262. package/dist/components/find-bar.d.ts.map +0 -1
  263. package/dist/components/find-bar.js +0 -46
  264. package/dist/components/find-bar.js.map +0 -1
  265. package/dist/components/popover.d.ts +0 -38
  266. package/dist/components/popover.d.ts.map +0 -1
  267. package/dist/components/popover.js +0 -104
  268. package/dist/components/popover.js.map +0 -1
  269. package/dist/components/stats-panel.d.ts +0 -12
  270. package/dist/components/stats-panel.d.ts.map +0 -1
  271. package/dist/components/stats-panel.js +0 -40
  272. package/dist/components/stats-panel.js.map +0 -1
  273. package/dist/controller.d.ts +0 -218
  274. package/dist/controller.d.ts.map +0 -1
  275. package/dist/controller.js +0 -788
  276. package/dist/controller.js.map +0 -1
  277. package/dist/data-grid.d.ts +0 -51
  278. package/dist/data-grid.d.ts.map +0 -1
  279. package/dist/data-grid.js +0 -698
  280. package/dist/data-grid.js.map +0 -1
  281. package/dist/labels.d.ts +0 -9
  282. package/dist/labels.d.ts.map +0 -1
  283. package/dist/labels.js +0 -38
  284. package/dist/labels.js.map +0 -1
  285. package/dist/messages.d.ts +0 -99
  286. package/dist/messages.d.ts.map +0 -1
  287. package/dist/messages.js +0 -276
  288. package/dist/messages.js.map +0 -1
  289. package/dist/renderer.d.ts +0 -52
  290. package/dist/renderer.d.ts.map +0 -1
  291. package/dist/renderer.js +0 -522
  292. package/dist/renderer.js.map +0 -1
  293. package/dist/text.d.ts +0 -14
  294. package/dist/text.d.ts.map +0 -1
  295. package/dist/text.js +0 -63
  296. package/dist/text.js.map +0 -1
  297. package/dist/theme.d.ts.map +0 -1
  298. package/dist/theme.js +0 -54
  299. package/dist/theme.js.map +0 -1
  300. package/src/components/bars.tsx +0 -179
  301. package/src/components/cell-inspector.tsx +0 -70
  302. package/src/components/columns-panel.tsx +0 -59
  303. package/src/components/filter-panel.tsx +0 -290
  304. package/src/components/find-bar.tsx +0 -104
  305. package/src/components/popover.tsx +0 -194
  306. package/src/components/stats-panel.tsx +0 -153
  307. package/src/controller.ts +0 -887
  308. package/src/data-grid.tsx +0 -1029
  309. package/src/labels.ts +0 -46
  310. package/src/messages.ts +0 -390
  311. package/src/renderer.ts +0 -535
  312. package/src/text.ts +0 -55
@@ -0,0 +1,1389 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { lazy, Suspense, use, useEffect, useEffectEvent, useId, useLayoutEffect, useRef, useState } from "react";
3
+ import { browser } from "react-dom";
4
+ import { CommandError } from "vastgrid-spec";
5
+ import { GridCanvas } from "../canvas/grid-canvas.js";
6
+ import { isApple, keyCommand, typesText } from "../canvas/keys.js";
7
+ import { allState, checkedCount, checkState } from "../core/checked.js";
8
+ import { AccessibleRows, cellId } from "./accessible-rows.js";
9
+ import { CellEditor } from "./cell-editor.js";
10
+ import { LocaleContext, SaveContext } from "./context.js";
11
+ import { useGridSelector, useGridStore } from "./hooks.js";
12
+
13
+ // The menus load when they first open (§10 of react.md).
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ const ColumnMenu = /*#__PURE__*/lazy(() => import("./column-menu.js").then(module => ({
16
+ default: module.ColumnMenu
17
+ })));
18
+ const CellMenu = /*#__PURE__*/lazy(() => import("./cell-menu.js").then(module => ({
19
+ default: module.CellMenu
20
+ })));
21
+ /** The members of a keyboard event that the grid's keys read. */
22
+ function pick(event) {
23
+ return {
24
+ key: event.key,
25
+ shiftKey: event.shiftKey,
26
+ altKey: event.altKey,
27
+ ctrlKey: event.ctrlKey,
28
+ metaKey: event.metaKey
29
+ };
30
+ }
31
+
32
+ /** Writes the output of `copy` (§6.6) into a clipboard. */
33
+ function writeClipboard(data, output) {
34
+ const {
35
+ tsv,
36
+ html
37
+ } = output;
38
+ data.setData("text/plain", tsv);
39
+ data.setData("text/html", html);
40
+ }
41
+ async function writeClipboardLater(output) {
42
+ const {
43
+ tsv,
44
+ html
45
+ } = output;
46
+ const clipboard = typeof navigator === "undefined" ? undefined : navigator.clipboard;
47
+ if (!clipboard) return;
48
+ if (typeof ClipboardItem === "function" && clipboard.write) {
49
+ await clipboard.write([new ClipboardItem({
50
+ "text/plain": new Blob([tsv], {
51
+ type: "text/plain"
52
+ }),
53
+ "text/html": new Blob([html], {
54
+ type: "text/html"
55
+ })
56
+ })]);
57
+ } else {
58
+ await clipboard.writeText(tsv);
59
+ }
60
+ }
61
+
62
+ /** Copies the selection: at once when its rows are read, after reading them otherwise. */
63
+ function useClipboard(store, scroller, announce) {
64
+ const $ = _c(11);
65
+ const {
66
+ messages,
67
+ number
68
+ } = use(LocaleContext);
69
+ let t0;
70
+ if ($[0] !== announce || $[1] !== messages || $[2] !== number) {
71
+ t0 = (output, failure) => {
72
+ announce(failure === null ? messages.copied(number.format(countCells(output))) : messages.failed(failure));
73
+ };
74
+ $[0] = announce;
75
+ $[1] = messages;
76
+ $[2] = number;
77
+ $[3] = t0;
78
+ } else {
79
+ t0 = $[3];
80
+ }
81
+ const report = useEffectEvent(t0);
82
+ let t1;
83
+ if ($[4] !== report || $[5] !== scroller.current || $[6] !== store) {
84
+ t1 = () => {
85
+ const element = scroller.current;
86
+ if (!element) {
87
+ return;
88
+ }
89
+ const onBeforeCopy = event => {
90
+ if (document.activeElement === element) {
91
+ event.preventDefault();
92
+ }
93
+ };
94
+ const onCopy = event_0 => {
95
+ if (document.activeElement !== element || !event_0.clipboardData) {
96
+ return;
97
+ }
98
+ event_0.preventDefault();
99
+ const outcome = store.dispatchSync({
100
+ command: "copy"
101
+ });
102
+ if (outcome.ok) {
103
+ writeClipboard(event_0.clipboardData, outcome.output);
104
+ report(outcome.output, null);
105
+ return;
106
+ }
107
+ if (!(outcome.error instanceof CommandError) || outcome.error.reason !== "not_loaded") {
108
+ report(null, outcome.error.message);
109
+ return;
110
+ }
111
+ store.dispatch({
112
+ command: "copy"
113
+ }).then(async later => {
114
+ if (!later.ok) {
115
+ report(null, later.error.message);
116
+ return;
117
+ }
118
+ await writeClipboardLater(later.output);
119
+ report(later.output, null);
120
+ });
121
+ };
122
+ document.addEventListener("beforecopy", onBeforeCopy);
123
+ const onPaste = event_1 => {
124
+ if (document.activeElement !== element || !event_1.clipboardData) {
125
+ return;
126
+ }
127
+ event_1.preventDefault();
128
+ const text = event_1.clipboardData.getData("text/plain");
129
+ const html = event_1.clipboardData.getData("text/html");
130
+ const clipboard = text ? {
131
+ text
132
+ } : html ? {
133
+ html
134
+ } : {};
135
+ store.dispatch({
136
+ command: "edit.paste"
137
+ }, {
138
+ clipboard
139
+ }).then(outcome_0 => {
140
+ if (!outcome_0.ok) {
141
+ report(null, outcome_0.error.message);
142
+ }
143
+ });
144
+ };
145
+ document.addEventListener("copy", onCopy);
146
+ document.addEventListener("paste", onPaste);
147
+ return () => {
148
+ document.removeEventListener("beforecopy", onBeforeCopy);
149
+ document.removeEventListener("copy", onCopy);
150
+ document.removeEventListener("paste", onPaste);
151
+ };
152
+ };
153
+ $[4] = report;
154
+ $[5] = scroller.current;
155
+ $[6] = store;
156
+ $[7] = t1;
157
+ } else {
158
+ t1 = $[7];
159
+ }
160
+ let t2;
161
+ if ($[8] !== scroller || $[9] !== store) {
162
+ t2 = [store, scroller];
163
+ $[8] = scroller;
164
+ $[9] = store;
165
+ $[10] = t2;
166
+ } else {
167
+ t2 = $[10];
168
+ }
169
+ useEffect(t1, t2);
170
+ }
171
+
172
+ /** The cells of a copy: its TSV's fields. */
173
+ function countCells(output) {
174
+ const {
175
+ tsv
176
+ } = output;
177
+ if (tsv === "") return 0;
178
+ return tsv.split("\n").reduce((count, line) => count + line.split("\t").length, 0);
179
+ }
180
+
181
+ /** A click or Space on a cell that is a link or a button (`cellAction`). */
182
+
183
+ /**
184
+ * The canvas and the scroller over it (§6 of react.md): keys and pointers become commands, the canvas draws
185
+ * the store without rendering React, and the accessibility rows follow when scrolling pauses. Rendered only in
186
+ * the browser: on the server, the nearest Suspense boundary sends its fallback, the first rows as HTML.
187
+ */
188
+ export function GridBody(t0) {
189
+ const $ = _c(176);
190
+ const {
191
+ rowHeight,
192
+ headerHeight,
193
+ checkboxes: t1,
194
+ columnGroups,
195
+ groupHeaderHeight,
196
+ wrapLines,
197
+ hooks,
198
+ onCellAction,
199
+ onFind,
200
+ label,
201
+ scrollerRef,
202
+ announce
203
+ } = t0;
204
+ const checkboxes = t1 === undefined ? false : t1;
205
+ use(browser("The grid draws on a canvas, which only the browser has."));
206
+ const store = useGridStore();
207
+ let t2;
208
+ if ($[0] !== headerHeight || $[1] !== rowHeight) {
209
+ t2 = () => new GridCanvas({
210
+ rowHeight,
211
+ headerHeight
212
+ });
213
+ $[0] = headerHeight;
214
+ $[1] = rowHeight;
215
+ $[2] = t2;
216
+ } else {
217
+ t2 = $[2];
218
+ }
219
+ const [canvas] = useState(t2);
220
+ const {
221
+ geometry
222
+ } = canvas;
223
+ const rootRef = useRef(null);
224
+ const canvasRef = useRef(null);
225
+ const sizerRef = useRef(null);
226
+ const drag = useRef(null);
227
+ const editor = useRef(null);
228
+ const {
229
+ messages,
230
+ locale,
231
+ number
232
+ } = use(LocaleContext);
233
+ const saving = use(SaveContext);
234
+ const follow = useRef(null);
235
+ const id = useId();
236
+ const rowCount = useGridSelector(_temp);
237
+ const columns = useGridSelector(_temp2);
238
+ const busy = useGridSelector(_temp3);
239
+ const active = useGridSelector(_temp4);
240
+ const [menu, setMenu] = useState(null);
241
+ const totalsRow = useGridSelector(_temp6);
242
+ const pressed = useRef(false);
243
+ const later = useRef(null);
244
+ const [cellMenu, setCellMenu] = useState(null);
245
+ let t3;
246
+ let t4;
247
+ if ($[3] !== canvas || $[4] !== headerHeight || $[5] !== rowHeight) {
248
+ t3 = () => {
249
+ canvas.setSizes(rowHeight, headerHeight);
250
+ };
251
+ t4 = [canvas, rowHeight, headerHeight];
252
+ $[3] = canvas;
253
+ $[4] = headerHeight;
254
+ $[5] = rowHeight;
255
+ $[6] = t3;
256
+ $[7] = t4;
257
+ } else {
258
+ t3 = $[6];
259
+ t4 = $[7];
260
+ }
261
+ useLayoutEffect(t3, t4);
262
+ let t5;
263
+ let t6;
264
+ if ($[8] !== canvas || $[9] !== locale) {
265
+ t5 = () => {
266
+ canvas.setLocale(locale);
267
+ };
268
+ t6 = [canvas, locale];
269
+ $[8] = canvas;
270
+ $[9] = locale;
271
+ $[10] = t5;
272
+ $[11] = t6;
273
+ } else {
274
+ t5 = $[10];
275
+ t6 = $[11];
276
+ }
277
+ useLayoutEffect(t5, t6);
278
+ let t7;
279
+ let t8;
280
+ if ($[12] !== canvas || $[13] !== checkboxes) {
281
+ t7 = () => {
282
+ canvas.setCheckboxes(checkboxes);
283
+ };
284
+ t8 = [canvas, checkboxes];
285
+ $[12] = canvas;
286
+ $[13] = checkboxes;
287
+ $[14] = t7;
288
+ $[15] = t8;
289
+ } else {
290
+ t7 = $[14];
291
+ t8 = $[15];
292
+ }
293
+ useLayoutEffect(t7, t8);
294
+ let t10;
295
+ let t9;
296
+ if ($[16] !== canvas || $[17] !== wrapLines) {
297
+ t9 = () => {
298
+ canvas.setWrapLines(wrapLines);
299
+ };
300
+ t10 = [canvas, wrapLines];
301
+ $[16] = canvas;
302
+ $[17] = wrapLines;
303
+ $[18] = t10;
304
+ $[19] = t9;
305
+ } else {
306
+ t10 = $[18];
307
+ t9 = $[19];
308
+ }
309
+ useLayoutEffect(t9, t10);
310
+ let t11;
311
+ let t12;
312
+ if ($[20] !== canvas || $[21] !== columnGroups || $[22] !== groupHeaderHeight) {
313
+ t11 = () => {
314
+ canvas.setColumnGroups(columnGroups, groupHeaderHeight);
315
+ };
316
+ t12 = [canvas, columnGroups, groupHeaderHeight];
317
+ $[20] = canvas;
318
+ $[21] = columnGroups;
319
+ $[22] = groupHeaderHeight;
320
+ $[23] = t11;
321
+ $[24] = t12;
322
+ } else {
323
+ t11 = $[23];
324
+ t12 = $[24];
325
+ }
326
+ useLayoutEffect(t11, t12);
327
+ const {
328
+ cellText,
329
+ cellStyle,
330
+ drawCell,
331
+ cellAction
332
+ } = hooks;
333
+ let t13;
334
+ let t14;
335
+ if ($[25] !== canvas || $[26] !== cellAction || $[27] !== cellStyle || $[28] !== cellText || $[29] !== drawCell) {
336
+ t13 = () => {
337
+ canvas.setHooks({
338
+ cellText,
339
+ cellStyle,
340
+ drawCell,
341
+ cellAction
342
+ });
343
+ };
344
+ t14 = [canvas, cellText, cellStyle, drawCell, cellAction];
345
+ $[25] = canvas;
346
+ $[26] = cellAction;
347
+ $[27] = cellStyle;
348
+ $[28] = cellText;
349
+ $[29] = drawCell;
350
+ $[30] = t13;
351
+ $[31] = t14;
352
+ } else {
353
+ t13 = $[30];
354
+ t14 = $[31];
355
+ }
356
+ useLayoutEffect(t13, t14);
357
+ let t15;
358
+ let t16;
359
+ if ($[32] !== canvas || $[33] !== scrollerRef || $[34] !== store) {
360
+ t15 = () => {
361
+ const root = rootRef.current;
362
+ const element = canvasRef.current;
363
+ const scroller = scrollerRef.current;
364
+ const sizer = sizerRef.current;
365
+ if (!root || !element || !scroller || !sizer) {
366
+ return;
367
+ }
368
+ const detach = canvas.attach({
369
+ root,
370
+ canvas: element,
371
+ scroller,
372
+ sizer
373
+ }, store);
374
+ canvas.draw();
375
+ return () => {
376
+ if (follow.current) {
377
+ cancelAnimationFrame(follow.current.frame);
378
+ }
379
+ follow.current = null;
380
+ detach();
381
+ };
382
+ };
383
+ t16 = [canvas, store, scrollerRef];
384
+ $[32] = canvas;
385
+ $[33] = scrollerRef;
386
+ $[34] = store;
387
+ $[35] = t15;
388
+ $[36] = t16;
389
+ } else {
390
+ t15 = $[35];
391
+ t16 = $[36];
392
+ }
393
+ useLayoutEffect(t15, t16);
394
+ useClipboard(store, scrollerRef, announce);
395
+ const point = _temp7;
396
+ let t17;
397
+ if ($[37] !== store) {
398
+ t17 = column => store.getSnapshot().displayed[column]?.column.name;
399
+ $[37] = store;
400
+ $[38] = t17;
401
+ } else {
402
+ t17 = $[38];
403
+ }
404
+ const nameOf = t17;
405
+ let onPointerDown;
406
+ let onPointerMove;
407
+ let onPointerUp;
408
+ let toggleCheck;
409
+ if ($[39] !== announce || $[40] !== canvas || $[41] !== columns || $[42] !== geometry || $[43] !== messages || $[44] !== nameOf || $[45] !== number || $[46] !== store) {
410
+ onPointerDown = event_0 => {
411
+ pressed.current = event_0.buttons !== 0;
412
+ if (event_0.button !== 0) {
413
+ return;
414
+ }
415
+ const scroller_0 = event_0.currentTarget;
416
+ const {
417
+ x,
418
+ y
419
+ } = point(event_0);
420
+ if (x > scroller_0.clientWidth || y > scroller_0.clientHeight) {
421
+ return;
422
+ }
423
+ scroller_0.focus({
424
+ preventScroll: true
425
+ });
426
+ event_0.preventDefault();
427
+ const hit = geometry.hit(x, y);
428
+ const primary = isApple() ? event_0.metaKey : event_0.ctrlKey;
429
+ const mode = event_0.shiftKey ? "extend" : primary ? "add" : "replace";
430
+ const start = (kind, last, t18) => {
431
+ const extra = t18 === undefined ? {} : t18;
432
+ drag.current = {
433
+ kind,
434
+ pointer: event_0.pointerId,
435
+ last,
436
+ column: 0,
437
+ width: 0,
438
+ x: event_0.clientX,
439
+ ...extra
440
+ };
441
+ scroller_0.setPointerCapture(event_0.pointerId);
442
+ };
443
+ if (hit.area === "cell") {
444
+ const column_0 = nameOf(hit.column);
445
+ if (column_0 === undefined) {
446
+ return;
447
+ }
448
+ store.dispatch({
449
+ command: "select",
450
+ row: hit.row,
451
+ column: column_0,
452
+ mode
453
+ });
454
+ start("cells", `${hit.row}:${hit.column}`);
455
+ } else {
456
+ if (hit.area === "gutter" && hit.check) {
457
+ toggleCheck(hit.row);
458
+ } else {
459
+ if (hit.area === "corner" && hit.check) {
460
+ const {
461
+ session,
462
+ document,
463
+ view
464
+ } = store.getSnapshot();
465
+ const all = allState(session.checked, document.plan, view?.rowCount ?? 0);
466
+ dispatchCheck(all === "all" ? {
467
+ command: "check.clear"
468
+ } : {
469
+ command: "check.all"
470
+ });
471
+ } else {
472
+ if (hit.area === "group" && hit.level !== undefined) {
473
+ const span = canvas.groupSpan(hit.column, hit.level);
474
+ const from = span && nameOf(span[0]);
475
+ const to = span && nameOf(span[1]);
476
+ if (from && to && span) {
477
+ store.dispatch({
478
+ command: "select.columns",
479
+ from,
480
+ to,
481
+ mode
482
+ });
483
+ const names = columns.slice(span[0], span[1] + 1).map(_temp8);
484
+ start("move", "", {
485
+ column: span[0],
486
+ names
487
+ });
488
+ }
489
+ } else {
490
+ if (hit.area === "gutter") {
491
+ store.dispatch({
492
+ command: "select.rows",
493
+ from: hit.row,
494
+ to: hit.row,
495
+ mode
496
+ });
497
+ start("rows", String(hit.row));
498
+ } else {
499
+ if (hit.area === "corner") {
500
+ store.dispatch({
501
+ command: "select.all"
502
+ });
503
+ } else {
504
+ if (hit.area === "header") {
505
+ const column_1 = nameOf(hit.column);
506
+ if (column_1 === undefined) {
507
+ return;
508
+ }
509
+ if (hit.menu) {
510
+ return;
511
+ }
512
+ if (hit.edge) {
513
+ start("resize", "", {
514
+ column: hit.column,
515
+ width: geometry.columnWidth(hit.column)
516
+ });
517
+ } else {
518
+ start("move", "", {
519
+ column: hit.column,
520
+ names: movedWith(column_1),
521
+ shift: event_0.shiftKey
522
+ });
523
+ }
524
+ }
525
+ }
526
+ }
527
+ }
528
+ }
529
+ }
530
+ }
531
+ };
532
+ let t19;
533
+ if ($[51] !== geometry || $[52] !== nameOf || $[53] !== store) {
534
+ t19 = (scroller_1, current, x_0, y_0) => {
535
+ const hit_0 = geometry.hit(Math.max(geometry.gutterWidth + 1, Math.min(scroller_1.clientWidth - 1, x_0)), Math.max(geometry.headerHeight + 1, Math.min(geometry.bottom - 1, y_0)));
536
+ if (current.kind === "cells" && hit_0.area === "cell") {
537
+ const key = `${hit_0.row}:${hit_0.column}`;
538
+ const column_2 = nameOf(hit_0.column);
539
+ if (key === current.last || column_2 === undefined) {
540
+ return;
541
+ }
542
+ current.last = key;
543
+ store.dispatch({
544
+ command: "select",
545
+ row: hit_0.row,
546
+ column: column_2,
547
+ mode: "extend"
548
+ });
549
+ } else {
550
+ if (current.kind === "rows" && (hit_0.area === "cell" || hit_0.area === "gutter")) {
551
+ const key_0 = String(hit_0.row);
552
+ if (key_0 === current.last) {
553
+ return;
554
+ }
555
+ current.last = key_0;
556
+ const anchor = store.getSnapshot().session.anchor?.row ?? hit_0.row;
557
+ store.dispatch({
558
+ command: "select.rows",
559
+ from: anchor,
560
+ to: hit_0.row,
561
+ mode: "extend"
562
+ });
563
+ }
564
+ }
565
+ };
566
+ $[51] = geometry;
567
+ $[52] = nameOf;
568
+ $[53] = store;
569
+ $[54] = t19;
570
+ } else {
571
+ t19 = $[54];
572
+ }
573
+ const extendTo = t19;
574
+ let t20;
575
+ if ($[55] === Symbol.for("react.memo_cache_sentinel")) {
576
+ t20 = () => {
577
+ if (follow.current) {
578
+ cancelAnimationFrame(follow.current.frame);
579
+ }
580
+ follow.current = null;
581
+ };
582
+ $[55] = t20;
583
+ } else {
584
+ t20 = $[55];
585
+ }
586
+ const stopFollowing = t20;
587
+ let t21;
588
+ if ($[56] !== extendTo || $[57] !== geometry.bottom || $[58] !== geometry.gutterWidth || $[59] !== geometry.headerHeight) {
589
+ t21 = (scroller_2, x_1, y_1) => {
590
+ const beyondY = y_1 < geometry.headerHeight ? y_1 - geometry.headerHeight : y_1 > geometry.bottom ? y_1 - geometry.bottom : 0;
591
+ const beyondX = x_1 < geometry.gutterWidth ? x_1 - geometry.gutterWidth : x_1 > scroller_2.clientWidth ? x_1 - scroller_2.clientWidth : 0;
592
+ if (beyondX === 0 && beyondY === 0) {
593
+ stopFollowing();
594
+ return;
595
+ }
596
+ if (follow.current) {
597
+ follow.current.x = x_1;
598
+ follow.current.y = y_1;
599
+ return;
600
+ }
601
+ const state = {
602
+ frame: 0,
603
+ x: x_1,
604
+ y: y_1
605
+ };
606
+ follow.current = state;
607
+ const step = () => {
608
+ const current_0 = drag.current;
609
+ if (follow.current !== state || !current_0) {
610
+ return;
611
+ }
612
+ const dy = state.y < geometry.headerHeight ? state.y - geometry.headerHeight : Math.max(0, state.y - geometry.bottom);
613
+ const dx = state.x < geometry.gutterWidth ? state.x - geometry.gutterWidth : Math.max(0, state.x - scroller_2.clientWidth);
614
+ scroller_2.scrollTop = scroller_2.scrollTop + Math.sign(dy) * Math.min(80, Math.abs(dy) / 2 + 4);
615
+ if (current_0.kind === "cells") {
616
+ scroller_2.scrollLeft = scroller_2.scrollLeft + Math.sign(dx) * Math.min(80, Math.abs(dx) / 2 + 4);
617
+ }
618
+ extendTo(scroller_2, current_0, state.x, state.y);
619
+ state.frame = requestAnimationFrame(step);
620
+ };
621
+ state.frame = requestAnimationFrame(step);
622
+ };
623
+ $[56] = extendTo;
624
+ $[57] = geometry.bottom;
625
+ $[58] = geometry.gutterWidth;
626
+ $[59] = geometry.headerHeight;
627
+ $[60] = t21;
628
+ } else {
629
+ t21 = $[60];
630
+ }
631
+ const followPointer = t21;
632
+ onPointerMove = event_1 => {
633
+ const current_1 = drag.current;
634
+ const {
635
+ x: x_2,
636
+ y: y_2
637
+ } = point(event_1);
638
+ if (!current_1) {
639
+ const hit_1 = geometry.hit(x_2, y_2);
640
+ const action = hit_1.area === "cell" ? canvas.actionAt(hit_1.row, hit_1.column)?.action : undefined;
641
+ event_1.currentTarget.style.cursor = hit_1.area === "header" && hit_1.edge ? "col-resize" : action ? action.cursor ?? "pointer" : "";
642
+ return;
643
+ }
644
+ if (current_1.kind === "resize") {
645
+ canvas.previewWidth(current_1.column, current_1.width + event_1.clientX - current_1.x);
646
+ return;
647
+ }
648
+ if (current_1.kind === "move") {
649
+ if (!current_1.moving && Math.abs(event_1.clientX - current_1.x) < 5) {
650
+ return;
651
+ }
652
+ current_1.moving = true;
653
+ const target = dropAt(x_2, current_1.names ?? []);
654
+ current_1.before = target?.before;
655
+ canvas.previewDrop(target ? target.x : null);
656
+ return;
657
+ }
658
+ extendTo(event_1.currentTarget, current_1, x_2, y_2);
659
+ followPointer(event_1.currentTarget, x_2, y_2);
660
+ };
661
+ let t22;
662
+ if ($[61] !== canvas || $[62] !== nameOf || $[63] !== store) {
663
+ t22 = event_2 => {
664
+ pressed.current = false;
665
+ if (later.current && event_2.type === "pointerup") {
666
+ later.current();
667
+ }
668
+ later.current = null;
669
+ const current_2 = drag.current;
670
+ if (!current_2 || current_2.pointer !== event_2.pointerId) {
671
+ return;
672
+ }
673
+ drag.current = null;
674
+ stopFollowing();
675
+ event_2.currentTarget.releasePointerCapture(event_2.pointerId);
676
+ if (current_2.kind === "move") {
677
+ canvas.previewDrop(null);
678
+ const name = nameOf(current_2.column);
679
+ if (!current_2.moving) {
680
+ if (current_2.names?.length === 1 && name !== undefined && event_2.type === "pointerup") {
681
+ store.dispatch({
682
+ command: "sort.toggle",
683
+ column: name,
684
+ ...(current_2.shift ? {
685
+ add: true
686
+ } : {})
687
+ });
688
+ }
689
+ return;
690
+ }
691
+ if (current_2.before !== undefined && current_2.names && event_2.type === "pointerup") {
692
+ store.dispatch({
693
+ command: "column.move",
694
+ names: current_2.names,
695
+ before: current_2.before
696
+ });
697
+ }
698
+ return;
699
+ }
700
+ if (current_2.kind !== "resize") {
701
+ return;
702
+ }
703
+ const name_0 = nameOf(current_2.column);
704
+ const width = Math.max(40, Math.min(100000, Math.round(current_2.width + event_2.clientX - current_2.x)));
705
+ if (name_0 !== undefined) {
706
+ store.dispatch({
707
+ command: "column.resize",
708
+ name: name_0,
709
+ width
710
+ }).then(() => canvas.previewWidth(current_2.column, null));
711
+ } else {
712
+ canvas.previewWidth(current_2.column, null);
713
+ }
714
+ };
715
+ $[61] = canvas;
716
+ $[62] = nameOf;
717
+ $[63] = store;
718
+ $[64] = t22;
719
+ } else {
720
+ t22 = $[64];
721
+ }
722
+ onPointerUp = t22;
723
+ const dispatchCheck = command => {
724
+ store.dispatch(command).then(outcome => {
725
+ if (!outcome.ok) {
726
+ announce(outcome.error instanceof CommandError && outcome.error.reason === "unknown_state" ? messages.checkedUnknown : messages.failed(outcome.error.message));
727
+ return;
728
+ }
729
+ const {
730
+ session: session_0,
731
+ document: document_0,
732
+ view: view_0
733
+ } = store.getSnapshot();
734
+ const count = checkedCount(session_0.checked, document_0.plan, view_0?.rowCount ?? 0);
735
+ announce(count === null ? messages.checkedUnknown : messages.checkedRows(number.format(count)));
736
+ });
737
+ };
738
+ toggleCheck = row => {
739
+ const key_1 = store.rowKey(row);
740
+ if (!key_1) {
741
+ return;
742
+ }
743
+ const {
744
+ session: session_1,
745
+ document: document_1
746
+ } = store.getSnapshot();
747
+ const state_0 = checkState(session_1.checked, document_1.plan, key_1);
748
+ dispatchCheck({
749
+ command: state_0 === "checked" ? "uncheck" : "check",
750
+ keys: [key_1]
751
+ });
752
+ };
753
+ const movedWith = name_1 => {
754
+ const last_0 = store.getSnapshot().session.selection?.at(-1);
755
+ if (last_0 && last_0.rows === "all" && last_0.columns !== "all" && last_0.columns.includes(name_1)) {
756
+ return columns.map(_temp9).filter(item_2 => last_0.columns.includes(item_2));
757
+ }
758
+ return [name_1];
759
+ };
760
+ const dropAt = (x_3, names_0) => {
761
+ if (columns.length === 0) {
762
+ return;
763
+ }
764
+ let at = geometry.columnAt(Math.max(geometry.gutterWidth, x_3));
765
+ if (at < 0) {
766
+ at = x_3 < geometry.gutterWidth ? 0 : columns.length - 1;
767
+ }
768
+ const middle = geometry.columnX(at) + geometry.columnWidth(at) / 2;
769
+ const index = x_3 < middle ? at : at + 1;
770
+ const before = index < columns.length ? columns[index].column.name : null;
771
+ const moved = names_0.map(name_2 => columns.findIndex(item_3 => item_3.column.name === name_2));
772
+ if (before !== null && names_0.includes(before)) {
773
+ return;
774
+ }
775
+ if (moved.length > 0 && index === Math.max(...moved) + 1 && moved.every((item_4, i) => item_4 === moved[0] + i)) {
776
+ return;
777
+ }
778
+ const lineX = index < columns.length ? geometry.columnX(index) : geometry.columnX(at) + geometry.columnWidth(at);
779
+ return {
780
+ before,
781
+ x: lineX
782
+ };
783
+ };
784
+ $[39] = announce;
785
+ $[40] = canvas;
786
+ $[41] = columns;
787
+ $[42] = geometry;
788
+ $[43] = messages;
789
+ $[44] = nameOf;
790
+ $[45] = number;
791
+ $[46] = store;
792
+ $[47] = onPointerDown;
793
+ $[48] = onPointerMove;
794
+ $[49] = onPointerUp;
795
+ $[50] = toggleCheck;
796
+ } else {
797
+ onPointerDown = $[47];
798
+ onPointerMove = $[48];
799
+ onPointerUp = $[49];
800
+ toggleCheck = $[50];
801
+ }
802
+ let t18;
803
+ if ($[65] !== geometry || $[66] !== scrollerRef) {
804
+ t18 = (column_3, index_0) => {
805
+ const scroller_3 = scrollerRef.current;
806
+ if (!scroller_3) {
807
+ return;
808
+ }
809
+ const rect_0 = scroller_3.getBoundingClientRect();
810
+ setMenu({
811
+ column: column_3,
812
+ x: rect_0.left + Math.max(0, geometry.columnX(index_0) + geometry.columnWidth(index_0) - 200),
813
+ y: rect_0.top + geometry.headerHeight
814
+ });
815
+ };
816
+ $[65] = geometry;
817
+ $[66] = scrollerRef;
818
+ $[67] = t18;
819
+ } else {
820
+ t18 = $[67];
821
+ }
822
+ const openMenu = t18;
823
+ let act;
824
+ let onClick;
825
+ if ($[68] !== canvas || $[69] !== geometry || $[70] !== nameOf || $[71] !== onCellAction || $[72] !== openMenu || $[73] !== store) {
826
+ onClick = event_3 => {
827
+ const rect_1 = event_3.currentTarget.getBoundingClientRect();
828
+ const hit_2 = geometry.hit(event_3.clientX - rect_1.left, event_3.clientY - rect_1.top);
829
+ const column_4 = nameOf(hit_2.column);
830
+ if (hit_2.area === "header" && hit_2.menu && column_4 !== undefined) {
831
+ openMenu(column_4, hit_2.column);
832
+ }
833
+ if (hit_2.area === "cell" && !event_3.shiftKey && !event_3.metaKey && !event_3.ctrlKey) {
834
+ act(hit_2.row, hit_2.column);
835
+ }
836
+ };
837
+ act = (row_0, column_5) => {
838
+ const found = canvas.actionAt(row_0, column_5);
839
+ if (!found || !onCellAction) {
840
+ return false;
841
+ }
842
+ onCellAction({
843
+ ...found.cell,
844
+ action: found.action,
845
+ key: store.rowKey(row_0)
846
+ });
847
+ return true;
848
+ };
849
+ $[68] = canvas;
850
+ $[69] = geometry;
851
+ $[70] = nameOf;
852
+ $[71] = onCellAction;
853
+ $[72] = openMenu;
854
+ $[73] = store;
855
+ $[74] = act;
856
+ $[75] = onClick;
857
+ } else {
858
+ act = $[74];
859
+ onClick = $[75];
860
+ }
861
+ let onContextMenu;
862
+ if ($[76] !== geometry || $[77] !== nameOf || $[78] !== store) {
863
+ onContextMenu = event_4 => {
864
+ const rect_2 = event_4.currentTarget.getBoundingClientRect();
865
+ const hit_3 = geometry.hit(event_4.clientX - rect_2.left, event_4.clientY - rect_2.top);
866
+ const column_6 = nameOf(hit_3.column);
867
+ if (hit_3.area !== "header" && hit_3.area !== "cell" || column_6 === undefined) {
868
+ return;
869
+ }
870
+ event_4.preventDefault();
871
+ const at_0 = {
872
+ x: event_4.clientX,
873
+ y: event_4.clientY
874
+ };
875
+ let open;
876
+ if (hit_3.area === "header") {
877
+ open = () => setMenu({
878
+ column: column_6,
879
+ ...at_0
880
+ });
881
+ } else {
882
+ if (!isSelected(hit_3.row, column_6)) {
883
+ store.dispatch({
884
+ command: "select",
885
+ row: hit_3.row,
886
+ column: column_6
887
+ });
888
+ }
889
+ open = () => setCellMenu({
890
+ row: hit_3.row,
891
+ column: column_6,
892
+ ...at_0
893
+ });
894
+ }
895
+ if (pressed.current) {
896
+ later.current = open;
897
+ } else {
898
+ open();
899
+ }
900
+ };
901
+ const isSelected = (row_1, column_7) => {
902
+ const {
903
+ selection,
904
+ active: active_0
905
+ } = store.getSnapshot().session;
906
+ if (!selection) {
907
+ return active_0?.row === row_1 && active_0.column === column_7;
908
+ }
909
+ return selection.some(range => (range.rows === "all" || row_1 >= range.rows[0] && row_1 < range.rows[1]) && (range.columns === "all" || range.columns.includes(column_7)));
910
+ };
911
+ $[76] = geometry;
912
+ $[77] = nameOf;
913
+ $[78] = store;
914
+ $[79] = onContextMenu;
915
+ } else {
916
+ onContextMenu = $[79];
917
+ }
918
+ let t19;
919
+ if ($[80] !== announce || $[81] !== messages || $[82] !== number || $[83] !== store) {
920
+ t19 = () => {
921
+ store.dispatch({
922
+ command: "copy"
923
+ }).then(async outcome_0 => {
924
+ if (!outcome_0.ok) {
925
+ announce(messages.failed(outcome_0.error.message));
926
+ return;
927
+ }
928
+ ;
929
+ try {
930
+ await writeClipboardLater(outcome_0.output);
931
+ announce(messages.copied(number.format(countCells(outcome_0.output))));
932
+ } catch (t20) {
933
+ const error = t20;
934
+ announce(messages.failed(error instanceof Error ? error.message : String(error)));
935
+ }
936
+ });
937
+ };
938
+ $[80] = announce;
939
+ $[81] = messages;
940
+ $[82] = number;
941
+ $[83] = store;
942
+ $[84] = t19;
943
+ } else {
944
+ t19 = $[84];
945
+ }
946
+ const copySelection = t19;
947
+ let t20;
948
+ if ($[85] !== columns || $[86] !== geometry || $[87] !== scrollerRef || $[88] !== store) {
949
+ t20 = () => {
950
+ const scroller_4 = scrollerRef.current;
951
+ const active_1 = store.getSnapshot().session.active;
952
+ if (!scroller_4 || !active_1) {
953
+ return;
954
+ }
955
+ const index_1 = columns.findIndex(item_5 => item_5.column.name === active_1.column);
956
+ if (index_1 < 0) {
957
+ return;
958
+ }
959
+ const box = geometry.cellBox(active_1.row, index_1);
960
+ const rect_3 = scroller_4.getBoundingClientRect();
961
+ setCellMenu({
962
+ row: active_1.row,
963
+ column: active_1.column,
964
+ x: rect_3.left + box.left,
965
+ y: rect_3.top + box.top + box.height
966
+ });
967
+ };
968
+ $[85] = columns;
969
+ $[86] = geometry;
970
+ $[87] = scrollerRef;
971
+ $[88] = store;
972
+ $[89] = t20;
973
+ } else {
974
+ t20 = $[89];
975
+ }
976
+ const openCellMenu = t20;
977
+ let t21;
978
+ if ($[90] !== scrollerRef) {
979
+ t21 = () => {
980
+ setCellMenu(null);
981
+ scrollerRef.current?.focus({
982
+ preventScroll: true
983
+ });
984
+ };
985
+ $[90] = scrollerRef;
986
+ $[91] = t21;
987
+ } else {
988
+ t21 = $[91];
989
+ }
990
+ const closeCellMenu = t21;
991
+ let t22;
992
+ if ($[92] !== scrollerRef) {
993
+ t22 = () => {
994
+ setMenu(null);
995
+ scrollerRef.current?.focus({
996
+ preventScroll: true
997
+ });
998
+ };
999
+ $[92] = scrollerRef;
1000
+ $[93] = t22;
1001
+ } else {
1002
+ t22 = $[93];
1003
+ }
1004
+ const closeMenu = t22;
1005
+ let onDoubleClick;
1006
+ let startEditing;
1007
+ if ($[94] !== announce || $[95] !== geometry || $[96] !== messages || $[97] !== nameOf || $[98] !== store) {
1008
+ onDoubleClick = event_5 => {
1009
+ const rect_4 = event_5.currentTarget.getBoundingClientRect();
1010
+ const hit_4 = geometry.hit(event_5.clientX - rect_4.left, event_5.clientY - rect_4.top);
1011
+ const name_3 = nameOf(hit_4.column);
1012
+ if (hit_4.area === "header" && hit_4.edge && name_3 !== undefined) {
1013
+ store.dispatch({
1014
+ command: "column.resize",
1015
+ name: name_3,
1016
+ width: null
1017
+ });
1018
+ } else {
1019
+ if (hit_4.area === "cell") {
1020
+ startEditing(undefined);
1021
+ }
1022
+ }
1023
+ };
1024
+ startEditing = text => {
1025
+ const outcome_1 = store.dispatchSync(text === undefined ? {
1026
+ command: "edit.begin"
1027
+ } : {
1028
+ command: "edit.begin",
1029
+ text
1030
+ });
1031
+ if (outcome_1.ok) {
1032
+ if (store.getSnapshot().session.editor) {
1033
+ editor.current?.open();
1034
+ }
1035
+ return true;
1036
+ }
1037
+ if (outcome_1.error instanceof CommandError && outcome_1.error.reason === "read_only") {
1038
+ announce(messages.readOnly);
1039
+ } else {
1040
+ announce(messages.failed(outcome_1.error.message));
1041
+ }
1042
+ return false;
1043
+ };
1044
+ $[94] = announce;
1045
+ $[95] = geometry;
1046
+ $[96] = messages;
1047
+ $[97] = nameOf;
1048
+ $[98] = store;
1049
+ $[99] = onDoubleClick;
1050
+ $[100] = startEditing;
1051
+ } else {
1052
+ onDoubleClick = $[99];
1053
+ startEditing = $[100];
1054
+ }
1055
+ let t23;
1056
+ if ($[101] !== act || $[102] !== checkboxes || $[103] !== columns || $[104] !== onFind || $[105] !== openCellMenu || $[106] !== openMenu || $[107] !== saving || $[108] !== startEditing || $[109] !== store || $[110] !== toggleCheck) {
1057
+ t23 = event_6 => {
1058
+ if (event_6.target !== event_6.currentTarget) {
1059
+ return;
1060
+ }
1061
+ const composing = event_6.nativeEvent.isComposing || event_6.keyCode === 229;
1062
+ if (!composing && event_6.key === " " && !event_6.altKey && !event_6.ctrlKey && !event_6.metaKey && !event_6.shiftKey) {
1063
+ const active_2 = store.getSnapshot().session.active;
1064
+ if (!active_2) {
1065
+ return;
1066
+ }
1067
+ const column_8 = columns.findIndex(item_6 => item_6.column.name === active_2.column);
1068
+ if (act(active_2.row, column_8)) {
1069
+ event_6.preventDefault();
1070
+ return;
1071
+ }
1072
+ if (!checkboxes) {
1073
+ return;
1074
+ }
1075
+ event_6.preventDefault();
1076
+ toggleCheck(active_2.row);
1077
+ return;
1078
+ }
1079
+ if ((isApple() ? event_6.metaKey : event_6.ctrlKey) && (event_6.key === "f" || event_6.key === "F") && !event_6.altKey) {
1080
+ if (!onFind || store.getSnapshot().table?.capabilities.find !== true) {
1081
+ return;
1082
+ }
1083
+ event_6.preventDefault();
1084
+ onFind();
1085
+ return;
1086
+ }
1087
+ if (event_6.key === "ContextMenu" || event_6.key === "F10" && event_6.shiftKey) {
1088
+ event_6.preventDefault();
1089
+ openCellMenu();
1090
+ return;
1091
+ }
1092
+ if (!composing && event_6.altKey && event_6.key === "Enter" && !event_6.ctrlKey && !event_6.metaKey && !event_6.shiftKey) {
1093
+ event_6.preventDefault();
1094
+ const open_0 = store.getSnapshot().session.detail?.open === true;
1095
+ store.dispatch({
1096
+ command: open_0 ? "detail.close" : "detail.open"
1097
+ });
1098
+ return;
1099
+ }
1100
+ if (event_6.altKey && event_6.key === "ArrowDown" && !event_6.ctrlKey && !event_6.metaKey) {
1101
+ const column_9 = store.getSnapshot().session.active?.column;
1102
+ const index_2 = columns.findIndex(item_7 => item_7.column.name === column_9);
1103
+ if (column_9 === undefined || index_2 < 0) {
1104
+ return;
1105
+ }
1106
+ event_6.preventDefault();
1107
+ openMenu(column_9, index_2);
1108
+ return;
1109
+ }
1110
+ if (typesText({
1111
+ ...pick(event_6),
1112
+ keyCode: event_6.keyCode,
1113
+ isComposing: event_6.nativeEvent.isComposing
1114
+ })) {
1115
+ if (!startEditing("")) {
1116
+ event_6.preventDefault();
1117
+ }
1118
+ return;
1119
+ }
1120
+ const command_0 = keyCommand(event_6, isApple());
1121
+ if (!command_0) {
1122
+ return;
1123
+ }
1124
+ if (command_0.command === "save") {
1125
+ if (!saving || store.getSnapshot().table?.capabilities.save !== true) {
1126
+ return;
1127
+ }
1128
+ event_6.preventDefault();
1129
+ saving.save();
1130
+ return;
1131
+ }
1132
+ event_6.preventDefault();
1133
+ store.dispatch(command_0);
1134
+ };
1135
+ $[101] = act;
1136
+ $[102] = checkboxes;
1137
+ $[103] = columns;
1138
+ $[104] = onFind;
1139
+ $[105] = openCellMenu;
1140
+ $[106] = openMenu;
1141
+ $[107] = saving;
1142
+ $[108] = startEditing;
1143
+ $[109] = store;
1144
+ $[110] = toggleCheck;
1145
+ $[111] = t23;
1146
+ } else {
1147
+ t23 = $[111];
1148
+ }
1149
+ const onKeyDown = t23;
1150
+ let t24;
1151
+ let t25;
1152
+ let t26;
1153
+ let t27;
1154
+ let t28;
1155
+ let t29;
1156
+ let t30;
1157
+ let t31;
1158
+ let t32;
1159
+ let t33;
1160
+ let t34;
1161
+ let t35;
1162
+ let t36;
1163
+ if ($[112] !== active || $[113] !== busy || $[114] !== columns || $[115] !== id || $[116] !== label || $[117] !== rowCount || $[118] !== scrollerRef || $[119] !== totalsRow) {
1164
+ const activeColumn = active ? columns.findIndex(item_8 => item_8.column.name === active.column) : 0;
1165
+ const activeRow = active?.row ?? 0;
1166
+ const activeShown = rowCount > 0 && activeColumn >= 0;
1167
+ t34 = "vg-body";
1168
+ t35 = rootRef;
1169
+ if ($[133] === Symbol.for("react.memo_cache_sentinel")) {
1170
+ t36 = /*#__PURE__*/_jsx("canvas", {
1171
+ className: "vg-canvas",
1172
+ ref: canvasRef
1173
+ });
1174
+ $[133] = t36;
1175
+ } else {
1176
+ t36 = $[133];
1177
+ }
1178
+ t24 = "vg-scroller";
1179
+ t25 = scrollerRef;
1180
+ t26 = "grid";
1181
+ t27 = 0;
1182
+ t28 = label;
1183
+ t29 = rowCount + 1 + (totalsRow ? 1 : 0);
1184
+ t30 = columns.length;
1185
+ t31 = "true";
1186
+ t32 = busy;
1187
+ t33 = activeShown ? cellId(id, activeRow, activeColumn) : undefined;
1188
+ $[112] = active;
1189
+ $[113] = busy;
1190
+ $[114] = columns;
1191
+ $[115] = id;
1192
+ $[116] = label;
1193
+ $[117] = rowCount;
1194
+ $[118] = scrollerRef;
1195
+ $[119] = totalsRow;
1196
+ $[120] = t24;
1197
+ $[121] = t25;
1198
+ $[122] = t26;
1199
+ $[123] = t27;
1200
+ $[124] = t28;
1201
+ $[125] = t29;
1202
+ $[126] = t30;
1203
+ $[127] = t31;
1204
+ $[128] = t32;
1205
+ $[129] = t33;
1206
+ $[130] = t34;
1207
+ $[131] = t35;
1208
+ $[132] = t36;
1209
+ } else {
1210
+ t24 = $[120];
1211
+ t25 = $[121];
1212
+ t26 = $[122];
1213
+ t27 = $[123];
1214
+ t28 = $[124];
1215
+ t29 = $[125];
1216
+ t30 = $[126];
1217
+ t31 = $[127];
1218
+ t32 = $[128];
1219
+ t33 = $[129];
1220
+ t34 = $[130];
1221
+ t35 = $[131];
1222
+ t36 = $[132];
1223
+ }
1224
+ let t37;
1225
+ if ($[134] === Symbol.for("react.memo_cache_sentinel")) {
1226
+ t37 = /*#__PURE__*/_jsx("div", {
1227
+ className: "vg-sizer",
1228
+ ref: sizerRef
1229
+ });
1230
+ $[134] = t37;
1231
+ } else {
1232
+ t37 = $[134];
1233
+ }
1234
+ let t38;
1235
+ if ($[135] !== canvas || $[136] !== id) {
1236
+ t38 = /*#__PURE__*/_jsx(AccessibleRows, {
1237
+ canvas: canvas,
1238
+ id: id
1239
+ });
1240
+ $[135] = canvas;
1241
+ $[136] = id;
1242
+ $[137] = t38;
1243
+ } else {
1244
+ t38 = $[137];
1245
+ }
1246
+ let t39;
1247
+ if ($[138] !== onClick || $[139] !== onContextMenu || $[140] !== onDoubleClick || $[141] !== onKeyDown || $[142] !== onPointerDown || $[143] !== onPointerMove || $[144] !== onPointerUp || $[145] !== t24 || $[146] !== t25 || $[147] !== t26 || $[148] !== t27 || $[149] !== t28 || $[150] !== t29 || $[151] !== t30 || $[152] !== t31 || $[153] !== t32 || $[154] !== t33 || $[155] !== t38) {
1248
+ t39 = /*#__PURE__*/_jsxs("div", {
1249
+ className: t24,
1250
+ ref: t25,
1251
+ role: t26,
1252
+ tabIndex: t27,
1253
+ "aria-label": t28,
1254
+ "aria-rowcount": t29,
1255
+ "aria-colcount": t30,
1256
+ "aria-multiselectable": t31,
1257
+ "aria-busy": t32,
1258
+ "aria-activedescendant": t33,
1259
+ onKeyDown: onKeyDown,
1260
+ onPointerDown: onPointerDown,
1261
+ onPointerMove: onPointerMove,
1262
+ onPointerUp: onPointerUp,
1263
+ onPointerCancel: onPointerUp,
1264
+ onDoubleClick: onDoubleClick,
1265
+ onClick: onClick,
1266
+ onContextMenu: onContextMenu,
1267
+ children: [t37, t38]
1268
+ });
1269
+ $[138] = onClick;
1270
+ $[139] = onContextMenu;
1271
+ $[140] = onDoubleClick;
1272
+ $[141] = onKeyDown;
1273
+ $[142] = onPointerDown;
1274
+ $[143] = onPointerMove;
1275
+ $[144] = onPointerUp;
1276
+ $[145] = t24;
1277
+ $[146] = t25;
1278
+ $[147] = t26;
1279
+ $[148] = t27;
1280
+ $[149] = t28;
1281
+ $[150] = t29;
1282
+ $[151] = t30;
1283
+ $[152] = t31;
1284
+ $[153] = t32;
1285
+ $[154] = t33;
1286
+ $[155] = t38;
1287
+ $[156] = t39;
1288
+ } else {
1289
+ t39 = $[156];
1290
+ }
1291
+ let t40;
1292
+ if ($[157] !== announce || $[158] !== canvas || $[159] !== scrollerRef) {
1293
+ t40 = /*#__PURE__*/_jsx(CellEditor, {
1294
+ canvas: canvas,
1295
+ scrollerRef: scrollerRef,
1296
+ announce: announce,
1297
+ ref: editor
1298
+ });
1299
+ $[157] = announce;
1300
+ $[158] = canvas;
1301
+ $[159] = scrollerRef;
1302
+ $[160] = t40;
1303
+ } else {
1304
+ t40 = $[160];
1305
+ }
1306
+ let t41;
1307
+ if ($[161] !== closeMenu || $[162] !== menu) {
1308
+ t41 = menu && /*#__PURE__*/_jsx(Suspense, {
1309
+ fallback: null,
1310
+ children: /*#__PURE__*/_jsx(ColumnMenu, {
1311
+ target: menu,
1312
+ onClose: closeMenu
1313
+ })
1314
+ });
1315
+ $[161] = closeMenu;
1316
+ $[162] = menu;
1317
+ $[163] = t41;
1318
+ } else {
1319
+ t41 = $[163];
1320
+ }
1321
+ let t42;
1322
+ if ($[164] !== cellMenu || $[165] !== closeCellMenu || $[166] !== copySelection) {
1323
+ t42 = cellMenu && /*#__PURE__*/_jsx(Suspense, {
1324
+ fallback: null,
1325
+ children: /*#__PURE__*/_jsx(CellMenu, {
1326
+ target: cellMenu,
1327
+ onClose: closeCellMenu,
1328
+ copy: copySelection
1329
+ })
1330
+ });
1331
+ $[164] = cellMenu;
1332
+ $[165] = closeCellMenu;
1333
+ $[166] = copySelection;
1334
+ $[167] = t42;
1335
+ } else {
1336
+ t42 = $[167];
1337
+ }
1338
+ let t43;
1339
+ if ($[168] !== t34 || $[169] !== t35 || $[170] !== t36 || $[171] !== t39 || $[172] !== t40 || $[173] !== t41 || $[174] !== t42) {
1340
+ t43 = /*#__PURE__*/_jsxs("div", {
1341
+ className: t34,
1342
+ ref: t35,
1343
+ children: [t36, t39, t40, t41, t42]
1344
+ });
1345
+ $[168] = t34;
1346
+ $[169] = t35;
1347
+ $[170] = t36;
1348
+ $[171] = t39;
1349
+ $[172] = t40;
1350
+ $[173] = t41;
1351
+ $[174] = t42;
1352
+ $[175] = t43;
1353
+ } else {
1354
+ t43 = $[175];
1355
+ }
1356
+ return t43;
1357
+ }
1358
+ function _temp9(item_1) {
1359
+ return item_1.column.name;
1360
+ }
1361
+ function _temp8(item_0) {
1362
+ return item_0.column.name;
1363
+ }
1364
+ function _temp7(event) {
1365
+ const rect = event.currentTarget.getBoundingClientRect();
1366
+ return {
1367
+ x: event.clientX - rect.left,
1368
+ y: event.clientY - rect.top
1369
+ };
1370
+ }
1371
+ function _temp6(snapshot_3) {
1372
+ return !snapshot_3.document.plan?.aggregate && snapshot_3.displayed.some(_temp5);
1373
+ }
1374
+ function _temp5(item) {
1375
+ return item.setting.total !== undefined;
1376
+ }
1377
+ function _temp4(snapshot_2) {
1378
+ return snapshot_2.session.active;
1379
+ }
1380
+ function _temp3(snapshot_1) {
1381
+ return snapshot_1.view === null || snapshot_1.pending !== null;
1382
+ }
1383
+ function _temp2(snapshot_0) {
1384
+ return snapshot_0.displayed;
1385
+ }
1386
+ function _temp(snapshot) {
1387
+ return snapshot.view?.rowCount ?? 0;
1388
+ }
1389
+ //# sourceMappingURL=grid-body.js.map