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,176 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { textOf } from "vastgrid-spec";
3
+ import { readRows, useGridSelector, useGridStore } from "./hooks.js";
4
+
5
+ /** Rows that the server sends as HTML at most. */
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const MAX_ROWS = 100;
8
+ function alignOf(column) {
9
+ return column.type === "integer" || column.type === "bigint" || column.type === "decimal" || column.type === "float" ? "vg-static__number" : undefined;
10
+ }
11
+
12
+ /**
13
+ * What the server sends in place of the canvas (§7 of react.md): the first rows that the store has, from
14
+ * `initial`, as an HTML table that is readable before any script runs; without rows, an empty body that is
15
+ * busy. It has the size of the body, so that the canvas replaces it without moving anything.
16
+ */
17
+ export function StaticRows(t0) {
18
+ const $ = _c(30);
19
+ const {
20
+ label
21
+ } = t0;
22
+ const store = useGridStore();
23
+ const view = useGridSelector(_temp);
24
+ const columns = useGridSelector(_temp2);
25
+ if (!view) {
26
+ let t1;
27
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
28
+ t1 = /*#__PURE__*/_jsx("div", {
29
+ className: "vg-body",
30
+ "aria-busy": "true"
31
+ });
32
+ $[0] = t1;
33
+ } else {
34
+ t1 = $[0];
35
+ }
36
+ return t1;
37
+ }
38
+ let t1;
39
+ let t2;
40
+ let t3;
41
+ let t4;
42
+ let t5;
43
+ let t6;
44
+ let t7;
45
+ if ($[1] !== columns || $[2] !== label || $[3] !== store || $[4] !== view.rowCount) {
46
+ const names = columns.map(_temp3);
47
+ const read = readRows(store, 0, 0, Math.min(view.rowCount, MAX_ROWS), names);
48
+ const loaded = read.findIndex(_temp5);
49
+ const rows = loaded < 0 ? read : read.slice(0, loaded);
50
+ t6 = "vg-body";
51
+ t7 = "true";
52
+ t2 = "vg-static";
53
+ t3 = label;
54
+ t4 = view.rowCount + 1;
55
+ let t8;
56
+ if ($[12] !== columns) {
57
+ t8 = columns.map(_temp6);
58
+ $[12] = columns;
59
+ $[13] = t8;
60
+ } else {
61
+ t8 = $[13];
62
+ }
63
+ if ($[14] !== t8) {
64
+ t5 = /*#__PURE__*/_jsx("thead", {
65
+ children: /*#__PURE__*/_jsx("tr", {
66
+ children: t8
67
+ })
68
+ });
69
+ $[14] = t8;
70
+ $[15] = t5;
71
+ } else {
72
+ t5 = $[15];
73
+ }
74
+ let t9;
75
+ if ($[16] !== columns) {
76
+ t9 = (values_0, row) => /*#__PURE__*/_jsx("tr", {
77
+ children: values_0.map((value_0, index) => {
78
+ const column = columns[index].column;
79
+ return /*#__PURE__*/_jsx("td", {
80
+ className: alignOf(column),
81
+ children: value_0 === undefined || value_0 === null ? "" : textOf(value_0, column) ?? ""
82
+ }, column.name);
83
+ })
84
+ }, row);
85
+ $[16] = columns;
86
+ $[17] = t9;
87
+ } else {
88
+ t9 = $[17];
89
+ }
90
+ t1 = rows.map(t9);
91
+ $[1] = columns;
92
+ $[2] = label;
93
+ $[3] = store;
94
+ $[4] = view.rowCount;
95
+ $[5] = t1;
96
+ $[6] = t2;
97
+ $[7] = t3;
98
+ $[8] = t4;
99
+ $[9] = t5;
100
+ $[10] = t6;
101
+ $[11] = t7;
102
+ } else {
103
+ t1 = $[5];
104
+ t2 = $[6];
105
+ t3 = $[7];
106
+ t4 = $[8];
107
+ t5 = $[9];
108
+ t6 = $[10];
109
+ t7 = $[11];
110
+ }
111
+ let t8;
112
+ if ($[18] !== t1) {
113
+ t8 = /*#__PURE__*/_jsx("tbody", {
114
+ children: t1
115
+ });
116
+ $[18] = t1;
117
+ $[19] = t8;
118
+ } else {
119
+ t8 = $[19];
120
+ }
121
+ let t9;
122
+ if ($[20] !== t2 || $[21] !== t3 || $[22] !== t4 || $[23] !== t5 || $[24] !== t8) {
123
+ t9 = /*#__PURE__*/_jsxs("table", {
124
+ className: t2,
125
+ "aria-label": t3,
126
+ "aria-rowcount": t4,
127
+ children: [t5, t8]
128
+ });
129
+ $[20] = t2;
130
+ $[21] = t3;
131
+ $[22] = t4;
132
+ $[23] = t5;
133
+ $[24] = t8;
134
+ $[25] = t9;
135
+ } else {
136
+ t9 = $[25];
137
+ }
138
+ let t10;
139
+ if ($[26] !== t6 || $[27] !== t7 || $[28] !== t9) {
140
+ t10 = /*#__PURE__*/_jsx("div", {
141
+ className: t6,
142
+ "aria-busy": t7,
143
+ children: t9
144
+ });
145
+ $[26] = t6;
146
+ $[27] = t7;
147
+ $[28] = t9;
148
+ $[29] = t10;
149
+ } else {
150
+ t10 = $[29];
151
+ }
152
+ return t10;
153
+ }
154
+ function _temp6(item_0) {
155
+ return /*#__PURE__*/_jsx("th", {
156
+ scope: "col",
157
+ className: alignOf(item_0.column),
158
+ children: item_0.setting.format?.label ?? item_0.column.name
159
+ }, item_0.column.name);
160
+ }
161
+ function _temp5(values) {
162
+ return values.every(_temp4);
163
+ }
164
+ function _temp4(value) {
165
+ return value === undefined;
166
+ }
167
+ function _temp3(item) {
168
+ return item.column.name;
169
+ }
170
+ function _temp2(snapshot_0) {
171
+ return snapshot_0.displayed;
172
+ }
173
+ function _temp(snapshot) {
174
+ return snapshot.view;
175
+ }
176
+ //# sourceMappingURL=static-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["textOf","readRows","useGridSelector","useGridStore","jsx","_jsx","jsxs","_jsxs","MAX_ROWS","alignOf","column","type","undefined","StaticRows","t0","$","_c","label","store","view","_temp","columns","_temp2","t1","Symbol","for","className","t2","t3","t4","t5","t6","t7","rowCount","names","map","_temp3","read","Math","min","loaded","findIndex","_temp5","rows","slice","t8","_temp6","children","t9","values_0","row","values","value_0","index","value","name","t10","item_0","scope","item","setting","format","every","_temp4","snapshot_0","snapshot","displayed"],"sources":["static-rows.tsx"],"sourcesContent":["import { type Column, textOf } from \"vastgrid-spec\";\nimport { readRows, useGridSelector, useGridStore } from \"./hooks.js\";\n\n/** Rows that the server sends as HTML at most. */\nconst MAX_ROWS = 100;\n\nfunction alignOf(column: Column) {\n return column.type === \"integer\" || column.type === \"bigint\" || column.type === \"decimal\" || column.type === \"float\"\n ? \"vg-static__number\"\n : undefined;\n}\n\n/**\n * What the server sends in place of the canvas (§7 of react.md): the first rows that the store has, from\n * `initial`, as an HTML table that is readable before any script runs; without rows, an empty body that is\n * busy. It has the size of the body, so that the canvas replaces it without moving anything.\n */\nexport function StaticRows({ label }: { label: string }) {\n const store = useGridStore();\n const view = useGridSelector((snapshot) => snapshot.view);\n const columns = useGridSelector((snapshot) => snapshot.displayed);\n if (!view) return <div className=\"vg-body\" aria-busy=\"true\" />;\n const names = columns.map((item) => item.column.name);\n // The rows that the store has from the start of the view, which `initial` gave.\n const read = readRows(store, 0, 0, Math.min(view.rowCount, MAX_ROWS), names);\n const loaded = read.findIndex((values) => values.every((value) => value === undefined));\n const rows = loaded < 0 ? read : read.slice(0, loaded);\n return (\n <div className=\"vg-body\" aria-busy=\"true\">\n <table className=\"vg-static\" aria-label={label} aria-rowcount={view.rowCount + 1}>\n <thead>\n <tr>\n {columns.map((item) => (\n <th key={item.column.name} scope=\"col\" className={alignOf(item.column)}>\n {item.setting.format?.label ?? item.column.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((values, row) => (\n // Rows of a view have no other identity here: the server renders them once.\n // biome-ignore lint/suspicious/noArrayIndexKey: the rows are the view's first rows, in order.\n <tr key={row}>\n {values.map((value, index) => {\n const column = columns[index].column;\n return (\n <td key={column.name} className={alignOf(column)}>\n {value === undefined || value === null ? \"\" : (textOf(value, column) ?? \"\")}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ interface StatusBarProps {
2
+ announce: (text: string) => void;
3
+ /** Gives the focus back to the grid, once a button that had it is gone. */
4
+ onDone: () => void;
5
+ }
6
+ /**
7
+ * The status bar: the active cell, the sum of the selection, what the grid is doing (saving and the outcome of the
8
+ * last save included) or that the file changed on disk, a write that failed, the cells not saved yet and the rows.
9
+ */
10
+ export declare function StatusBar({ announce, onDone }: StatusBarProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=status-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../src/react/status-bar.tsx"],"names":[],"mappings":"AAsDA,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,2EAA2E;IAC3E,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AA+CD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,cAAc,+BAiE7D"}
@@ -0,0 +1,413 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { use, useEffect, useState } from "react";
3
+ import { checkedCount } from "../core/checked.js";
4
+ import { LocaleContext, SaveContext } from "./context.js";
5
+ import { useGridSelector, useGridStore } from "./hooks.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ /** How long the selection must stay before it is summed. */
8
+ const SUMMARY_DELAY = 150;
9
+
10
+ /**
11
+ * The count and sum of a selection of one range of several cells (`summarize`, §8.2), read once the selection has
12
+ * stayed for a moment, so that holding a key or dragging never waits for it; null otherwise.
13
+ */
14
+ function useSummary(store, selection) {
15
+ const $ = _c(7);
16
+ const [result, setResult] = useState(null);
17
+ const summarizes = useGridSelector(_temp);
18
+ const range = selection?.length === 1 ? selection[0] : undefined;
19
+ const several = range !== undefined && (range.rows === "all" || range.rows[1] - range.rows[0] > 1 || range.columns === "all" || range.columns.length > 1);
20
+ let t0;
21
+ let t1;
22
+ if ($[0] !== range || $[1] !== selection || $[2] !== several || $[3] !== store || $[4] !== summarizes) {
23
+ t0 = () => {
24
+ if (!summarizes || !several || !selection || !range) {
25
+ return;
26
+ }
27
+ const abort = new AbortController();
28
+ const timer = setTimeout(() => {
29
+ const snapshot_0 = store.getSnapshot();
30
+ const rowCount = snapshot_0.view?.rowCount ?? 0;
31
+ const rows = range.rows === "all" ? [0, rowCount] : [range.rows[0], range.rows[1]];
32
+ const columns = range.columns === "all" ? snapshot_0.displayed.map(_temp2) : range.columns;
33
+ store.summarize([rows], columns, abort.signal).then(summary => setResult({
34
+ selection,
35
+ summary
36
+ })).catch(_temp3);
37
+ }, SUMMARY_DELAY);
38
+ return () => {
39
+ clearTimeout(timer);
40
+ abort.abort();
41
+ };
42
+ };
43
+ t1 = [store, summarizes, several, selection, range];
44
+ $[0] = range;
45
+ $[1] = selection;
46
+ $[2] = several;
47
+ $[3] = store;
48
+ $[4] = summarizes;
49
+ $[5] = t0;
50
+ $[6] = t1;
51
+ } else {
52
+ t0 = $[5];
53
+ t1 = $[6];
54
+ }
55
+ useEffect(t0, t1);
56
+ return result && result.selection === selection ? result.summary : null;
57
+ }
58
+ function _temp3() {}
59
+ function _temp2(item) {
60
+ return item.column.name;
61
+ }
62
+ function _temp(snapshot) {
63
+ return snapshot.table?.capabilities.summarize === true;
64
+ }
65
+ function format(number, value) {
66
+ if (typeof value === "number") return number.format(value);
67
+ return typeof value === "string" ? value : "";
68
+ }
69
+ /**
70
+ * The last write that failed (§6.6 of react.md): why, with Retry (Overwrite after a conflict) while the table
71
+ * has the revision its rows were read at, and Discard. Both give the focus back to the grid.
72
+ */
73
+ function FailedWrite(t0) {
74
+ const $ = _c(28);
75
+ const {
76
+ announce,
77
+ onDone
78
+ } = t0;
79
+ const store = useGridStore();
80
+ const {
81
+ messages
82
+ } = use(LocaleContext);
83
+ const failed = useGridSelector(_temp4);
84
+ const revision = useGridSelector(_temp5);
85
+ if (!failed) {
86
+ return null;
87
+ }
88
+ const retry = failed.revision === revision ? failed.retry : null;
89
+ let t1;
90
+ if ($[0] !== failed.error.code || $[1] !== failed.error.message || $[2] !== failed.retry || $[3] !== messages || $[4] !== retry) {
91
+ t1 = failed.error.code === "revision_changed" || failed.retry !== null && retry === null ? messages.writeRevisionChanged : failed.error.code === "edit_conflict" ? messages.writeConflict : messages.writeFailed(failed.error.message);
92
+ $[0] = failed.error.code;
93
+ $[1] = failed.error.message;
94
+ $[2] = failed.retry;
95
+ $[3] = messages;
96
+ $[4] = retry;
97
+ $[5] = t1;
98
+ } else {
99
+ t1 = $[5];
100
+ }
101
+ const text = t1;
102
+ let t2;
103
+ if ($[6] !== announce || $[7] !== messages || $[8] !== onDone || $[9] !== store) {
104
+ t2 = () => {
105
+ onDone();
106
+ store.retryWrite().then(outcome => {
107
+ if (!outcome.ok && !store.getSnapshot().failedWrite) {
108
+ announce(messages.writeFailed(outcome.error.message));
109
+ }
110
+ });
111
+ };
112
+ $[6] = announce;
113
+ $[7] = messages;
114
+ $[8] = onDone;
115
+ $[9] = store;
116
+ $[10] = t2;
117
+ } else {
118
+ t2 = $[10];
119
+ }
120
+ const send = t2;
121
+ let t3;
122
+ if ($[11] !== text) {
123
+ t3 = /*#__PURE__*/_jsx("span", {
124
+ className: "vg-statusbar__error",
125
+ children: text
126
+ });
127
+ $[11] = text;
128
+ $[12] = t3;
129
+ } else {
130
+ t3 = $[12];
131
+ }
132
+ let t4;
133
+ if ($[13] !== messages.overwrite || $[14] !== messages.retry || $[15] !== retry || $[16] !== send) {
134
+ t4 = retry && /*#__PURE__*/_jsx("button", {
135
+ type: "button",
136
+ className: "vg-button vg-button--small",
137
+ onClick: send,
138
+ children: retry === "overwrite" ? messages.overwrite : messages.retry
139
+ });
140
+ $[13] = messages.overwrite;
141
+ $[14] = messages.retry;
142
+ $[15] = retry;
143
+ $[16] = send;
144
+ $[17] = t4;
145
+ } else {
146
+ t4 = $[17];
147
+ }
148
+ let t5;
149
+ if ($[18] !== onDone || $[19] !== store) {
150
+ t5 = () => {
151
+ onDone();
152
+ store.discardWrite();
153
+ };
154
+ $[18] = onDone;
155
+ $[19] = store;
156
+ $[20] = t5;
157
+ } else {
158
+ t5 = $[20];
159
+ }
160
+ let t6;
161
+ if ($[21] !== messages.discard || $[22] !== t5) {
162
+ t6 = /*#__PURE__*/_jsx("button", {
163
+ type: "button",
164
+ className: "vg-button vg-button--small",
165
+ onClick: t5,
166
+ children: messages.discard
167
+ });
168
+ $[21] = messages.discard;
169
+ $[22] = t5;
170
+ $[23] = t6;
171
+ } else {
172
+ t6 = $[23];
173
+ }
174
+ let t7;
175
+ if ($[24] !== t3 || $[25] !== t4 || $[26] !== t6) {
176
+ t7 = /*#__PURE__*/_jsxs("span", {
177
+ className: "vg-statusbar__failed",
178
+ role: "alert",
179
+ children: [t3, t4, t6]
180
+ });
181
+ $[24] = t3;
182
+ $[25] = t4;
183
+ $[26] = t6;
184
+ $[27] = t7;
185
+ } else {
186
+ t7 = $[27];
187
+ }
188
+ return t7;
189
+ }
190
+
191
+ /**
192
+ * The status bar: the active cell, the sum of the selection, what the grid is doing (saving and the outcome of the
193
+ * last save included) or that the file changed on disk, a write that failed, the cells not saved yet and the rows.
194
+ */
195
+ function _temp5(snapshot_0) {
196
+ return snapshot_0.table?.revision;
197
+ }
198
+ function _temp4(snapshot) {
199
+ return snapshot.failedWrite;
200
+ }
201
+ export function StatusBar(t0) {
202
+ const $ = _c(49);
203
+ const {
204
+ announce,
205
+ onDone
206
+ } = t0;
207
+ const store = useGridStore();
208
+ const {
209
+ messages,
210
+ number
211
+ } = use(LocaleContext);
212
+ const saving = use(SaveContext);
213
+ const saves = useGridSelector(_temp6);
214
+ const edits = useGridSelector(_temp7);
215
+ const revision = useGridSelector(_temp8);
216
+ const fileChanged = useGridSelector(_temp9);
217
+ const rowCount = useGridSelector(_temp0);
218
+ const building = useGridSelector(_temp1);
219
+ const pending = useGridSelector(_temp10);
220
+ const failedWrite = useGridSelector(_temp11);
221
+ const error = useGridSelector(_temp12);
222
+ const active = useGridSelector(_temp13);
223
+ const selection = useGridSelector(_temp14);
224
+ const summary = useSummary(store, selection);
225
+ const checked = useGridSelector(_temp15);
226
+ let t1;
227
+ if ($[0] !== building || $[1] !== edits || $[2] !== error || $[3] !== fileChanged || $[4] !== messages || $[5] !== pending || $[6] !== revision || $[7] !== rowCount || $[8] !== saving) {
228
+ t1 = error ? messages.failed(error.message) : rowCount === undefined ? messages.loading : saving?.pending ? messages.saving : saving?.outcome && edits && revision === saving.outcome.revision && edits.version <= saving.outcome.version ? saving.outcome.text : fileChanged ? messages.changedOnDisk : pending || building ? messages.reading : "";
229
+ $[0] = building;
230
+ $[1] = edits;
231
+ $[2] = error;
232
+ $[3] = fileChanged;
233
+ $[4] = messages;
234
+ $[5] = pending;
235
+ $[6] = revision;
236
+ $[7] = rowCount;
237
+ $[8] = saving;
238
+ $[9] = t1;
239
+ } else {
240
+ t1 = $[9];
241
+ }
242
+ const doing = t1;
243
+ let t2;
244
+ if ($[10] !== active || $[11] !== messages || $[12] !== number || $[13] !== rowCount) {
245
+ t2 = active && rowCount !== undefined && rowCount > 0 ? messages.cell(number.format(active.row + 1), active.column) : "";
246
+ $[10] = active;
247
+ $[11] = messages;
248
+ $[12] = number;
249
+ $[13] = rowCount;
250
+ $[14] = t2;
251
+ } else {
252
+ t2 = $[14];
253
+ }
254
+ let t3;
255
+ if ($[15] !== t2) {
256
+ t3 = /*#__PURE__*/_jsx("span", {
257
+ className: "vg-statusbar__cell",
258
+ children: t2
259
+ });
260
+ $[15] = t2;
261
+ $[16] = t3;
262
+ } else {
263
+ t3 = $[16];
264
+ }
265
+ let t4;
266
+ if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
267
+ t4 = /*#__PURE__*/_jsx("span", {
268
+ className: "vg-toolbar__spacer"
269
+ });
270
+ $[17] = t4;
271
+ } else {
272
+ t4 = $[17];
273
+ }
274
+ let t5;
275
+ if ($[18] !== messages || $[19] !== number || $[20] !== summary) {
276
+ t5 = summary && /*#__PURE__*/_jsxs("span", {
277
+ className: "vg-statusbar__summary",
278
+ children: [/*#__PURE__*/_jsx("span", {
279
+ children: messages.count(number.format(summary.count))
280
+ }), summary.numericCount > 0 && /*#__PURE__*/_jsx("span", {
281
+ children: messages.sum(format(number, summary.sum))
282
+ }), summary.numericCount > 0 && /*#__PURE__*/_jsx("span", {
283
+ children: messages.average(format(number, summary.average))
284
+ })]
285
+ });
286
+ $[18] = messages;
287
+ $[19] = number;
288
+ $[20] = summary;
289
+ $[21] = t5;
290
+ } else {
291
+ t5 = $[21];
292
+ }
293
+ let t6;
294
+ if ($[22] !== announce || $[23] !== doing || $[24] !== failedWrite || $[25] !== onDone) {
295
+ t6 = failedWrite ? /*#__PURE__*/_jsx(FailedWrite, {
296
+ announce: announce,
297
+ onDone: onDone
298
+ }) : /*#__PURE__*/_jsx("span", {
299
+ className: "vg-statusbar__muted",
300
+ role: "status",
301
+ children: doing
302
+ });
303
+ $[22] = announce;
304
+ $[23] = doing;
305
+ $[24] = failedWrite;
306
+ $[25] = onDone;
307
+ $[26] = t6;
308
+ } else {
309
+ t6 = $[26];
310
+ }
311
+ let t7;
312
+ if ($[27] !== checked || $[28] !== messages || $[29] !== number) {
313
+ t7 = checked !== 0 && /*#__PURE__*/_jsx("span", {
314
+ className: "vg-statusbar__checked",
315
+ children: checked === null ? messages.checkedUnknown : messages.checkedRows(number.format(checked))
316
+ });
317
+ $[27] = checked;
318
+ $[28] = messages;
319
+ $[29] = number;
320
+ $[30] = t7;
321
+ } else {
322
+ t7 = $[30];
323
+ }
324
+ let t8;
325
+ if ($[31] !== edits || $[32] !== messages || $[33] !== number || $[34] !== saves) {
326
+ t8 = saves && edits && edits.cells > 0 && /*#__PURE__*/_jsx("span", {
327
+ className: "vg-statusbar__unsaved",
328
+ children: messages.unsaved(number.format(edits.cells))
329
+ });
330
+ $[31] = edits;
331
+ $[32] = messages;
332
+ $[33] = number;
333
+ $[34] = saves;
334
+ $[35] = t8;
335
+ } else {
336
+ t8 = $[35];
337
+ }
338
+ let t9;
339
+ if ($[36] !== messages || $[37] !== number || $[38] !== rowCount) {
340
+ t9 = rowCount === undefined ? "" : messages.rows(number.format(rowCount));
341
+ $[36] = messages;
342
+ $[37] = number;
343
+ $[38] = rowCount;
344
+ $[39] = t9;
345
+ } else {
346
+ t9 = $[39];
347
+ }
348
+ let t10;
349
+ if ($[40] !== t9) {
350
+ t10 = /*#__PURE__*/_jsx("span", {
351
+ className: "vg-toolbar__count",
352
+ children: t9
353
+ });
354
+ $[40] = t9;
355
+ $[41] = t10;
356
+ } else {
357
+ t10 = $[41];
358
+ }
359
+ let t11;
360
+ if ($[42] !== t10 || $[43] !== t3 || $[44] !== t5 || $[45] !== t6 || $[46] !== t7 || $[47] !== t8) {
361
+ t11 = /*#__PURE__*/_jsxs("div", {
362
+ className: "vg-statusbar",
363
+ children: [t3, t4, t5, t6, t7, t8, t10]
364
+ });
365
+ $[42] = t10;
366
+ $[43] = t3;
367
+ $[44] = t5;
368
+ $[45] = t6;
369
+ $[46] = t7;
370
+ $[47] = t8;
371
+ $[48] = t11;
372
+ } else {
373
+ t11 = $[48];
374
+ }
375
+ return t11;
376
+ }
377
+ function _temp15(snapshot_10) {
378
+ return checkedCount(snapshot_10.session.checked, snapshot_10.document.plan, snapshot_10.view?.rowCount ?? 0);
379
+ }
380
+ function _temp14(snapshot_9) {
381
+ return snapshot_9.session.selection;
382
+ }
383
+ function _temp13(snapshot_8) {
384
+ return snapshot_8.session.active;
385
+ }
386
+ function _temp12(snapshot_7) {
387
+ return snapshot_7.error;
388
+ }
389
+ function _temp11(snapshot_6) {
390
+ return snapshot_6.failedWrite !== null;
391
+ }
392
+ function _temp10(snapshot_5) {
393
+ return snapshot_5.pending !== null;
394
+ }
395
+ function _temp1(snapshot_4) {
396
+ return snapshot_4.view?.status === "building";
397
+ }
398
+ function _temp0(snapshot_3) {
399
+ return snapshot_3.view?.rowCount;
400
+ }
401
+ function _temp9(snapshot_2) {
402
+ return snapshot_2.table?.fileChanged === true;
403
+ }
404
+ function _temp8(snapshot_1) {
405
+ return snapshot_1.table?.revision;
406
+ }
407
+ function _temp7(snapshot_0) {
408
+ return snapshot_0.table?.edits;
409
+ }
410
+ function _temp6(snapshot) {
411
+ return snapshot.table?.capabilities.save === true;
412
+ }
413
+ //# sourceMappingURL=status-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["use","useEffect","useState","checkedCount","LocaleContext","SaveContext","useGridSelector","useGridStore","jsx","_jsx","jsxs","_jsxs","SUMMARY_DELAY","useSummary","store","selection","$","_c","result","setResult","summarizes","_temp","range","length","undefined","several","rows","columns","t0","t1","abort","AbortController","timer","setTimeout","snapshot_0","getSnapshot","rowCount","snapshot","view","displayed","map","_temp2","summarize","signal","then","summary","catch","_temp3","clearTimeout","item","column","name","table","capabilities","format","number","value","FailedWrite","announce","onDone","messages","failed","_temp4","revision","_temp5","retry","error","code","message","writeRevisionChanged","writeConflict","writeFailed","text","t2","retryWrite","outcome","ok","failedWrite","send","t3","className","children","t4","overwrite","type","t5","discardWrite","t6","discard","onClick","t7","role","StatusBar","saving","saves","_temp6","edits","_temp7","_temp8","fileChanged","_temp9","_temp0","building","_temp1","pending","_temp10","_temp11","_temp12","active","_temp13","_temp14","checked","_temp15","loading","version","changedOnDisk","reading","doing","cell","row","Symbol","for","count","numericCount","sum","average","checkedUnknown","checkedRows","t8","cells","unsaved","t9","t10","t11","snapshot_10","session","document","plan","snapshot_9","snapshot_8","snapshot_7","snapshot_6","snapshot_5","snapshot_4","status","snapshot_3","snapshot_2","snapshot_1","save"],"sources":["status-bar.tsx"],"sourcesContent":["import { use, useEffect, useState } from \"react\";\nimport type { CellRange } from \"vastgrid-spec\";\nimport { checkedCount } from \"../core/checked.js\";\nimport type { GridStore } from \"../core/store.js\";\nimport { LocaleContext, SaveContext } from \"./context.js\";\nimport { useGridSelector, useGridStore } from \"./hooks.js\";\n\ninterface Summary {\n count: number;\n numericCount: number;\n sum: unknown;\n average: unknown;\n}\n\n/** How long the selection must stay before it is summed. */\nconst SUMMARY_DELAY = 150;\n\n/**\n * The count and sum of a selection of one range of several cells (`summarize`, §8.2), read once the selection has\n * stayed for a moment, so that holding a key or dragging never waits for it; null otherwise.\n */\nfunction useSummary(store: GridStore, selection: readonly CellRange[] | undefined): Summary | null {\n const [result, setResult] = useState<{ selection: readonly CellRange[]; summary: Summary } | null>(null);\n const summarizes = useGridSelector((snapshot) => snapshot.table?.capabilities.summarize === true);\n const range = selection?.length === 1 ? selection[0] : undefined;\n const several =\n range !== undefined &&\n (range.rows === \"all\" || range.rows[1] - range.rows[0] > 1 || range.columns === \"all\" || range.columns.length > 1);\n useEffect(() => {\n if (!summarizes || !several || !selection || !range) return;\n const abort = new AbortController();\n const timer = setTimeout(() => {\n const snapshot = store.getSnapshot();\n const rowCount = snapshot.view?.rowCount ?? 0;\n const rows: [number, number] = range.rows === \"all\" ? [0, rowCount] : [range.rows[0], range.rows[1]];\n const columns = range.columns === \"all\" ? snapshot.displayed.map((item) => item.column.name) : range.columns;\n store\n .summarize([rows], columns, abort.signal)\n .then((summary) => setResult({ selection, summary }))\n .catch(() => {});\n }, SUMMARY_DELAY);\n return () => {\n clearTimeout(timer);\n abort.abort();\n };\n }, [store, summarizes, several, selection, range]);\n return result && result.selection === selection ? result.summary : null;\n}\n\nfunction format(number: Intl.NumberFormat, value: unknown) {\n if (typeof value === \"number\") return number.format(value);\n return typeof value === \"string\" ? value : \"\";\n}\n\ninterface StatusBarProps {\n announce: (text: string) => void;\n /** Gives the focus back to the grid, once a button that had it is gone. */\n onDone: () => void;\n}\n\n/**\n * The last write that failed (§6.6 of react.md): why, with Retry (Overwrite after a conflict) while the table\n * has the revision its rows were read at, and Discard. Both give the focus back to the grid.\n */\nfunction FailedWrite({ announce, onDone }: StatusBarProps) {\n const store = useGridStore();\n const { messages } = use(LocaleContext);\n const failed = useGridSelector((snapshot) => snapshot.failedWrite);\n const revision = useGridSelector((snapshot) => snapshot.table?.revision);\n if (!failed) return null;\n const retry = failed.revision === revision ? failed.retry : null;\n const text =\n failed.error.code === \"revision_changed\" || (failed.retry !== null && retry === null)\n ? messages.writeRevisionChanged\n : failed.error.code === \"edit_conflict\"\n ? messages.writeConflict\n : messages.writeFailed(failed.error.message);\n const send = () => {\n onDone();\n void store.retryWrite().then((outcome) => {\n if (!outcome.ok && !store.getSnapshot().failedWrite) announce(messages.writeFailed(outcome.error.message));\n });\n };\n return (\n <span className=\"vg-statusbar__failed\" role=\"alert\">\n <span className=\"vg-statusbar__error\">{text}</span>\n {retry && (\n <button type=\"button\" className=\"vg-button vg-button--small\" onClick={send}>\n {retry === \"overwrite\" ? messages.overwrite : messages.retry}\n </button>\n )}\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n onClick={() => {\n onDone();\n store.discardWrite();\n }}\n >\n {messages.discard}\n </button>\n </span>\n );\n}\n\n/**\n * The status bar: the active cell, the sum of the selection, what the grid is doing (saving and the outcome of the\n * last save included) or that the file changed on disk, a write that failed, the cells not saved yet and the rows.\n */\nexport function StatusBar({ announce, onDone }: StatusBarProps) {\n const store = useGridStore();\n const { messages, number } = use(LocaleContext);\n const saving = use(SaveContext);\n const saves = useGridSelector((snapshot) => snapshot.table?.capabilities.save === true);\n const edits = useGridSelector((snapshot) => snapshot.table?.edits);\n const revision = useGridSelector((snapshot) => snapshot.table?.revision);\n const fileChanged = useGridSelector((snapshot) => snapshot.table?.fileChanged === true);\n const rowCount = useGridSelector((snapshot) => snapshot.view?.rowCount);\n const building = useGridSelector((snapshot) => snapshot.view?.status === \"building\");\n const pending = useGridSelector((snapshot) => snapshot.pending !== null);\n const failedWrite = useGridSelector((snapshot) => snapshot.failedWrite !== null);\n const error = useGridSelector((snapshot) => snapshot.error);\n const active = useGridSelector((snapshot) => snapshot.session.active);\n const selection = useGridSelector((snapshot) => snapshot.session.selection);\n const summary = useSummary(store, selection);\n const checked = useGridSelector((snapshot) =>\n checkedCount(snapshot.session.checked, snapshot.document.plan, snapshot.view?.rowCount ?? 0),\n );\n const doing = error\n ? messages.failed(error.message)\n : rowCount === undefined\n ? messages.loading\n : saving?.pending\n ? messages.saving\n : saving?.outcome && edits && revision === saving.outcome.revision && edits.version <= saving.outcome.version\n ? saving.outcome.text\n : fileChanged\n ? messages.changedOnDisk\n : pending || building\n ? messages.reading\n : \"\";\n return (\n <div className=\"vg-statusbar\">\n <span className=\"vg-statusbar__cell\">\n {active && rowCount !== undefined && rowCount > 0\n ? messages.cell(number.format(active.row + 1), active.column)\n : \"\"}\n </span>\n <span className=\"vg-toolbar__spacer\" />\n {summary && (\n <span className=\"vg-statusbar__summary\">\n <span>{messages.count(number.format(summary.count))}</span>\n {summary.numericCount > 0 && <span>{messages.sum(format(number, summary.sum))}</span>}\n {summary.numericCount > 0 && <span>{messages.average(format(number, summary.average))}</span>}\n </span>\n )}\n {failedWrite ? (\n <FailedWrite announce={announce} onDone={onDone} />\n ) : (\n <span className=\"vg-statusbar__muted\" role=\"status\">\n {doing}\n </span>\n )}\n {checked !== 0 && (\n <span className=\"vg-statusbar__checked\">\n {checked === null ? messages.checkedUnknown : messages.checkedRows(number.format(checked))}\n </span>\n )}\n {saves && edits && edits.cells > 0 && (\n <span className=\"vg-statusbar__unsaved\">{messages.unsaved(number.format(edits.cells))}</span>\n )}\n <span className=\"vg-toolbar__count\">{rowCount === undefined ? \"\" : messages.rows(number.format(rowCount))}</span>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}