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,795 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { use, useState, useTransition } from "react";
3
+ import { formulaText } from "vastgrid-spec";
4
+ import { ConditionError, nodeId, readConditions, writeConditions } from "../core/conditions.js";
5
+ import { operatorsFor, takesNoValue } from "../core/filters.js";
6
+ import { rowColumns } from "../core/measures.js";
7
+ import { LocaleContext } from "./context.js";
8
+ import { useGridSelector, useGridStore } from "./hooks.js";
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ /** A tree with one node changed, or removed when `change` gives null. */
11
+ function changed(group, id, change) {
12
+ const items = group.items.flatMap(item => {
13
+ if (item.id === id) {
14
+ const next = change(item);
15
+ return next ? [next] : [];
16
+ }
17
+ return item.kind === "group" ? [changed(item, id, change)] : [item];
18
+ });
19
+ return group.id === id ? change(group) ?? {
20
+ ...group,
21
+ items: []
22
+ } : {
23
+ ...group,
24
+ items
25
+ };
26
+ }
27
+
28
+ /** A condition on the first column, with the first operator of its type. */
29
+ function newCondition(columns) {
30
+ const column = columns[0];
31
+ return {
32
+ kind: "condition",
33
+ id: nodeId(),
34
+ column: column?.name ?? "",
35
+ filter: {
36
+ kind: "condition",
37
+ operator: column ? operatorsFor(column.type)[0] : "eq",
38
+ first: "",
39
+ second: ""
40
+ }
41
+ };
42
+ }
43
+
44
+ /** An expression as a formula (§4.11), or its JSON when it has none. */
45
+ function expressionText(expr) {
46
+ try {
47
+ return formulaText(expr);
48
+ } catch {
49
+ return JSON.stringify(expr);
50
+ }
51
+ }
52
+ /** A condition: its column, operator and texts. */
53
+ function ConditionRow(t0) {
54
+ const $ = _c(74);
55
+ const {
56
+ node,
57
+ columns,
58
+ invalid,
59
+ messages,
60
+ onChange
61
+ } = t0;
62
+ let first;
63
+ let operator;
64
+ let second;
65
+ let set;
66
+ let t1;
67
+ let t2;
68
+ let t3;
69
+ let t4;
70
+ let t5;
71
+ let t6;
72
+ let t7;
73
+ if ($[0] !== columns || $[1] !== messages.condition || $[2] !== messages.conditionColumn || $[3] !== messages.operators || $[4] !== node.column || $[5] !== node.filter || $[6] !== node.id || $[7] !== onChange) {
74
+ let t8;
75
+ if ($[19] !== node.column) {
76
+ t8 = item => item.name === node.column;
77
+ $[19] = node.column;
78
+ $[20] = t8;
79
+ } else {
80
+ t8 = $[20];
81
+ }
82
+ const column = columns.find(t8);
83
+ const operators = column ? operatorsFor(column.type) : [];
84
+ ({
85
+ operator,
86
+ first,
87
+ second
88
+ } = node.filter);
89
+ let t9;
90
+ if ($[21] !== node.id || $[22] !== onChange) {
91
+ t9 = filter => onChange(node.id, current => current.kind === "condition" ? {
92
+ ...current,
93
+ filter: {
94
+ ...current.filter,
95
+ ...filter
96
+ }
97
+ } : current);
98
+ $[21] = node.id;
99
+ $[22] = onChange;
100
+ $[23] = t9;
101
+ } else {
102
+ t9 = $[23];
103
+ }
104
+ set = t9;
105
+ t6 = "vg-conditions__row";
106
+ const t10 = messages.conditionColumn;
107
+ const t11 = node.column;
108
+ let t12;
109
+ if ($[24] !== columns || $[25] !== node.id || $[26] !== onChange || $[27] !== operator) {
110
+ t12 = event => {
111
+ const next = columns.find(item_0 => item_0.name === event.target.value);
112
+ if (!next) {
113
+ return;
114
+ }
115
+ const kept = operatorsFor(next.type).includes(operator) ? operator : operatorsFor(next.type)[0];
116
+ onChange(node.id, current_0 => current_0.kind === "condition" ? {
117
+ ...current_0,
118
+ column: next.name,
119
+ filter: {
120
+ ...current_0.filter,
121
+ operator: kept
122
+ }
123
+ } : current_0);
124
+ };
125
+ $[24] = columns;
126
+ $[25] = node.id;
127
+ $[26] = onChange;
128
+ $[27] = operator;
129
+ $[28] = t12;
130
+ } else {
131
+ t12 = $[28];
132
+ }
133
+ let t13;
134
+ if ($[29] !== columns) {
135
+ t13 = columns.map(_temp);
136
+ $[29] = columns;
137
+ $[30] = t13;
138
+ } else {
139
+ t13 = $[30];
140
+ }
141
+ if ($[31] !== messages.conditionColumn || $[32] !== node.column || $[33] !== t12 || $[34] !== t13) {
142
+ t7 = /*#__PURE__*/_jsx("select", {
143
+ className: "vg-input",
144
+ "aria-label": t10,
145
+ value: t11,
146
+ onChange: t12,
147
+ children: t13
148
+ });
149
+ $[31] = messages.conditionColumn;
150
+ $[32] = node.column;
151
+ $[33] = t12;
152
+ $[34] = t13;
153
+ $[35] = t7;
154
+ } else {
155
+ t7 = $[35];
156
+ }
157
+ t1 = "vg-input";
158
+ t2 = messages.condition;
159
+ t3 = operator;
160
+ if ($[36] !== set) {
161
+ t4 = event_0 => set({
162
+ operator: event_0.target.value
163
+ });
164
+ $[36] = set;
165
+ $[37] = t4;
166
+ } else {
167
+ t4 = $[37];
168
+ }
169
+ let t14;
170
+ if ($[38] !== messages.operators) {
171
+ t14 = item_2 => /*#__PURE__*/_jsx("option", {
172
+ value: item_2,
173
+ children: messages.operators[item_2]
174
+ }, item_2);
175
+ $[38] = messages.operators;
176
+ $[39] = t14;
177
+ } else {
178
+ t14 = $[39];
179
+ }
180
+ t5 = operators.map(t14);
181
+ $[0] = columns;
182
+ $[1] = messages.condition;
183
+ $[2] = messages.conditionColumn;
184
+ $[3] = messages.operators;
185
+ $[4] = node.column;
186
+ $[5] = node.filter;
187
+ $[6] = node.id;
188
+ $[7] = onChange;
189
+ $[8] = first;
190
+ $[9] = operator;
191
+ $[10] = second;
192
+ $[11] = set;
193
+ $[12] = t1;
194
+ $[13] = t2;
195
+ $[14] = t3;
196
+ $[15] = t4;
197
+ $[16] = t5;
198
+ $[17] = t6;
199
+ $[18] = t7;
200
+ } else {
201
+ first = $[8];
202
+ operator = $[9];
203
+ second = $[10];
204
+ set = $[11];
205
+ t1 = $[12];
206
+ t2 = $[13];
207
+ t3 = $[14];
208
+ t4 = $[15];
209
+ t5 = $[16];
210
+ t6 = $[17];
211
+ t7 = $[18];
212
+ }
213
+ let t8;
214
+ if ($[40] !== t1 || $[41] !== t2 || $[42] !== t3 || $[43] !== t4 || $[44] !== t5) {
215
+ t8 = /*#__PURE__*/_jsx("select", {
216
+ className: t1,
217
+ "aria-label": t2,
218
+ value: t3,
219
+ onChange: t4,
220
+ children: t5
221
+ });
222
+ $[40] = t1;
223
+ $[41] = t2;
224
+ $[42] = t3;
225
+ $[43] = t4;
226
+ $[44] = t5;
227
+ $[45] = t8;
228
+ } else {
229
+ t8 = $[45];
230
+ }
231
+ let t9;
232
+ if ($[46] !== first || $[47] !== invalid || $[48] !== messages.minimum || $[49] !== messages.value || $[50] !== node.id || $[51] !== operator || $[52] !== set) {
233
+ t9 = !takesNoValue(operator) && /*#__PURE__*/_jsx("input", {
234
+ className: "vg-input",
235
+ "aria-label": operator === "between" ? messages.minimum : messages.value,
236
+ placeholder: operator === "between" ? messages.minimum : messages.value,
237
+ "aria-invalid": invalid === node.id,
238
+ value: first,
239
+ onChange: event_1 => set({
240
+ first: event_1.target.value
241
+ })
242
+ });
243
+ $[46] = first;
244
+ $[47] = invalid;
245
+ $[48] = messages.minimum;
246
+ $[49] = messages.value;
247
+ $[50] = node.id;
248
+ $[51] = operator;
249
+ $[52] = set;
250
+ $[53] = t9;
251
+ } else {
252
+ t9 = $[53];
253
+ }
254
+ let t10;
255
+ if ($[54] !== invalid || $[55] !== messages.maximum || $[56] !== node.id || $[57] !== operator || $[58] !== second || $[59] !== set) {
256
+ t10 = operator === "between" && /*#__PURE__*/_jsx("input", {
257
+ className: "vg-input",
258
+ "aria-label": messages.maximum,
259
+ placeholder: messages.maximum,
260
+ "aria-invalid": invalid === node.id,
261
+ value: second,
262
+ onChange: event_2 => set({
263
+ second: event_2.target.value
264
+ })
265
+ });
266
+ $[54] = invalid;
267
+ $[55] = messages.maximum;
268
+ $[56] = node.id;
269
+ $[57] = operator;
270
+ $[58] = second;
271
+ $[59] = set;
272
+ $[60] = t10;
273
+ } else {
274
+ t10 = $[60];
275
+ }
276
+ let t11;
277
+ if ($[61] !== node.id || $[62] !== onChange) {
278
+ t11 = () => onChange(node.id, _temp2);
279
+ $[61] = node.id;
280
+ $[62] = onChange;
281
+ $[63] = t11;
282
+ } else {
283
+ t11 = $[63];
284
+ }
285
+ let t12;
286
+ if ($[64] !== messages.removeCondition || $[65] !== t11) {
287
+ t12 = /*#__PURE__*/_jsx("button", {
288
+ type: "button",
289
+ className: "vg-button vg-button--small",
290
+ "aria-label": messages.removeCondition,
291
+ onClick: t11,
292
+ children: "\xD7"
293
+ });
294
+ $[64] = messages.removeCondition;
295
+ $[65] = t11;
296
+ $[66] = t12;
297
+ } else {
298
+ t12 = $[66];
299
+ }
300
+ let t13;
301
+ if ($[67] !== t10 || $[68] !== t12 || $[69] !== t6 || $[70] !== t7 || $[71] !== t8 || $[72] !== t9) {
302
+ t13 = /*#__PURE__*/_jsxs("li", {
303
+ className: t6,
304
+ children: [t7, t8, t9, t10, t12]
305
+ });
306
+ $[67] = t10;
307
+ $[68] = t12;
308
+ $[69] = t6;
309
+ $[70] = t7;
310
+ $[71] = t8;
311
+ $[72] = t9;
312
+ $[73] = t13;
313
+ } else {
314
+ t13 = $[73];
315
+ }
316
+ return t13;
317
+ }
318
+
319
+ /** A group: whether all of its items hold or one of them, its items, and buttons that add to it. */
320
+ function _temp2() {
321
+ return null;
322
+ }
323
+ function _temp(item_1) {
324
+ return /*#__PURE__*/_jsx("option", {
325
+ value: item_1.name,
326
+ children: item_1.name
327
+ }, item_1.name);
328
+ }
329
+ function GroupBlock(t0) {
330
+ const $ = _c(60);
331
+ const {
332
+ node,
333
+ columns,
334
+ invalid,
335
+ messages,
336
+ onChange,
337
+ top
338
+ } = t0;
339
+ const t1 = top ? "vg-conditions__group vg-conditions__group--top" : "vg-conditions__group";
340
+ let t2;
341
+ if ($[0] !== node.id || $[1] !== onChange) {
342
+ t2 = event => {
343
+ const op = event.target.value;
344
+ onChange(node.id, current => current.kind === "group" ? {
345
+ ...current,
346
+ op
347
+ } : current);
348
+ };
349
+ $[0] = node.id;
350
+ $[1] = onChange;
351
+ $[2] = t2;
352
+ } else {
353
+ t2 = $[2];
354
+ }
355
+ let t3;
356
+ if ($[3] !== messages.matchAll) {
357
+ t3 = /*#__PURE__*/_jsx("option", {
358
+ value: "and",
359
+ children: messages.matchAll
360
+ });
361
+ $[3] = messages.matchAll;
362
+ $[4] = t3;
363
+ } else {
364
+ t3 = $[4];
365
+ }
366
+ let t4;
367
+ if ($[5] !== messages.matchAny) {
368
+ t4 = /*#__PURE__*/_jsx("option", {
369
+ value: "or",
370
+ children: messages.matchAny
371
+ });
372
+ $[5] = messages.matchAny;
373
+ $[6] = t4;
374
+ } else {
375
+ t4 = $[6];
376
+ }
377
+ let t5;
378
+ if ($[7] !== messages.matchLabel || $[8] !== node.op || $[9] !== t2 || $[10] !== t3 || $[11] !== t4) {
379
+ t5 = /*#__PURE__*/_jsx("legend", {
380
+ children: /*#__PURE__*/_jsxs("select", {
381
+ className: "vg-input",
382
+ "aria-label": messages.matchLabel,
383
+ value: node.op,
384
+ onChange: t2,
385
+ children: [t3, t4]
386
+ })
387
+ });
388
+ $[7] = messages.matchLabel;
389
+ $[8] = node.op;
390
+ $[9] = t2;
391
+ $[10] = t3;
392
+ $[11] = t4;
393
+ $[12] = t5;
394
+ } else {
395
+ t5 = $[12];
396
+ }
397
+ let t6;
398
+ if ($[13] !== messages.noConditions || $[14] !== node.items.length || $[15] !== top) {
399
+ t6 = node.items.length === 0 && top && /*#__PURE__*/_jsx("p", {
400
+ className: "vg-filter__note",
401
+ children: messages.noConditions
402
+ });
403
+ $[13] = messages.noConditions;
404
+ $[14] = node.items.length;
405
+ $[15] = top;
406
+ $[16] = t6;
407
+ } else {
408
+ t6 = $[16];
409
+ }
410
+ let t7;
411
+ if ($[17] !== columns || $[18] !== invalid || $[19] !== messages || $[20] !== node.items || $[21] !== onChange) {
412
+ let t8;
413
+ if ($[23] !== columns || $[24] !== invalid || $[25] !== messages || $[26] !== onChange) {
414
+ t8 = item => item.kind === "group" ? /*#__PURE__*/_jsx("li", {
415
+ children: /*#__PURE__*/_jsx(GroupBlock, {
416
+ node: item,
417
+ columns: columns,
418
+ invalid: invalid,
419
+ messages: messages,
420
+ onChange: onChange
421
+ })
422
+ }, item.id) : item.kind === "condition" ? /*#__PURE__*/_jsx(ConditionRow, {
423
+ node: item,
424
+ columns: columns,
425
+ invalid: invalid,
426
+ messages: messages,
427
+ onChange: onChange
428
+ }, item.id) : /*#__PURE__*/_jsxs("li", {
429
+ className: "vg-conditions__row",
430
+ children: [/*#__PURE__*/_jsx("code", {
431
+ className: "vg-conditions__expression",
432
+ children: expressionText(item.expr)
433
+ }), /*#__PURE__*/_jsx("button", {
434
+ type: "button",
435
+ className: "vg-button vg-button--small",
436
+ "aria-label": messages.removeCondition,
437
+ onClick: () => onChange(item.id, _temp3),
438
+ children: "\xD7"
439
+ })]
440
+ }, item.id);
441
+ $[23] = columns;
442
+ $[24] = invalid;
443
+ $[25] = messages;
444
+ $[26] = onChange;
445
+ $[27] = t8;
446
+ } else {
447
+ t8 = $[27];
448
+ }
449
+ t7 = node.items.map(t8);
450
+ $[17] = columns;
451
+ $[18] = invalid;
452
+ $[19] = messages;
453
+ $[20] = node.items;
454
+ $[21] = onChange;
455
+ $[22] = t7;
456
+ } else {
457
+ t7 = $[22];
458
+ }
459
+ let t8;
460
+ if ($[28] !== t7) {
461
+ t8 = /*#__PURE__*/_jsx("ul", {
462
+ className: "vg-conditions__items",
463
+ children: t7
464
+ });
465
+ $[28] = t7;
466
+ $[29] = t8;
467
+ } else {
468
+ t8 = $[29];
469
+ }
470
+ let t9;
471
+ if ($[30] !== columns || $[31] !== node.id || $[32] !== onChange) {
472
+ t9 = () => {
473
+ const added = newCondition(columns);
474
+ onChange(node.id, current_0 => current_0.kind === "group" ? {
475
+ ...current_0,
476
+ items: [...current_0.items, added]
477
+ } : current_0);
478
+ };
479
+ $[30] = columns;
480
+ $[31] = node.id;
481
+ $[32] = onChange;
482
+ $[33] = t9;
483
+ } else {
484
+ t9 = $[33];
485
+ }
486
+ let t10;
487
+ if ($[34] !== messages.addCondition || $[35] !== t9) {
488
+ t10 = /*#__PURE__*/_jsx("button", {
489
+ type: "button",
490
+ className: "vg-button vg-button--small",
491
+ onClick: t9,
492
+ children: messages.addCondition
493
+ });
494
+ $[34] = messages.addCondition;
495
+ $[35] = t9;
496
+ $[36] = t10;
497
+ } else {
498
+ t10 = $[36];
499
+ }
500
+ let t11;
501
+ if ($[37] !== columns || $[38] !== node.id || $[39] !== node.op || $[40] !== onChange) {
502
+ t11 = () => {
503
+ const added_0 = {
504
+ kind: "group",
505
+ id: nodeId(),
506
+ op: node.op === "and" ? "or" : "and",
507
+ items: [newCondition(columns)]
508
+ };
509
+ onChange(node.id, current_1 => current_1.kind === "group" ? {
510
+ ...current_1,
511
+ items: [...current_1.items, added_0]
512
+ } : current_1);
513
+ };
514
+ $[37] = columns;
515
+ $[38] = node.id;
516
+ $[39] = node.op;
517
+ $[40] = onChange;
518
+ $[41] = t11;
519
+ } else {
520
+ t11 = $[41];
521
+ }
522
+ let t12;
523
+ if ($[42] !== messages.addGroup || $[43] !== t11) {
524
+ t12 = /*#__PURE__*/_jsx("button", {
525
+ type: "button",
526
+ className: "vg-button vg-button--small",
527
+ onClick: t11,
528
+ children: messages.addGroup
529
+ });
530
+ $[42] = messages.addGroup;
531
+ $[43] = t11;
532
+ $[44] = t12;
533
+ } else {
534
+ t12 = $[44];
535
+ }
536
+ let t13;
537
+ if ($[45] !== messages.removeGroup || $[46] !== node.id || $[47] !== onChange || $[48] !== top) {
538
+ t13 = !top && /*#__PURE__*/_jsx("button", {
539
+ type: "button",
540
+ className: "vg-button vg-button--small",
541
+ onClick: () => onChange(node.id, _temp4),
542
+ children: messages.removeGroup
543
+ });
544
+ $[45] = messages.removeGroup;
545
+ $[46] = node.id;
546
+ $[47] = onChange;
547
+ $[48] = top;
548
+ $[49] = t13;
549
+ } else {
550
+ t13 = $[49];
551
+ }
552
+ let t14;
553
+ if ($[50] !== t10 || $[51] !== t12 || $[52] !== t13) {
554
+ t14 = /*#__PURE__*/_jsxs("div", {
555
+ className: "vg-conditions__add",
556
+ children: [t10, t12, t13]
557
+ });
558
+ $[50] = t10;
559
+ $[51] = t12;
560
+ $[52] = t13;
561
+ $[53] = t14;
562
+ } else {
563
+ t14 = $[53];
564
+ }
565
+ let t15;
566
+ if ($[54] !== t1 || $[55] !== t14 || $[56] !== t5 || $[57] !== t6 || $[58] !== t8) {
567
+ t15 = /*#__PURE__*/_jsxs("fieldset", {
568
+ className: t1,
569
+ children: [t5, t6, t8, t14]
570
+ });
571
+ $[54] = t1;
572
+ $[55] = t14;
573
+ $[56] = t5;
574
+ $[57] = t6;
575
+ $[58] = t8;
576
+ $[59] = t15;
577
+ } else {
578
+ t15 = $[59];
579
+ }
580
+ return t15;
581
+ }
582
+
583
+ /**
584
+ * The content of the toolbar's conditions menu (§6.2.1 of the specification): every condition of the plan, those
585
+ * across columns included, as groups of conditions that all hold or one of which holds, nested. It reads `where`
586
+ * when it opens, and applying dispatches `filter.set`, which keeps the search. Expressions that it does not take
587
+ * apart are shown as formulas and kept, or removed. The toolbar loads it when the menu first opens.
588
+ */
589
+ function _temp4() {
590
+ return null;
591
+ }
592
+ function _temp3() {
593
+ return null;
594
+ }
595
+ export default function ConditionsPanel(t0) {
596
+ const $ = _c(39);
597
+ const {
598
+ close
599
+ } = t0;
600
+ const store = useGridStore();
601
+ const {
602
+ messages
603
+ } = use(LocaleContext);
604
+ const table = useGridSelector(_temp5);
605
+ const plan = useGridSelector(_temp6);
606
+ let t1;
607
+ if ($[0] !== store) {
608
+ t1 = () => readConditions(store.getSnapshot().document.plan?.where);
609
+ $[0] = store;
610
+ $[1] = t1;
611
+ } else {
612
+ t1 = $[1];
613
+ }
614
+ const [draft, setDraft] = useState(t1);
615
+ const [invalid, setInvalid] = useState(null);
616
+ const [error, setError] = useState(null);
617
+ const [pending, startApply] = useTransition();
618
+ if (!table) {
619
+ return null;
620
+ }
621
+ let t2;
622
+ if ($[2] !== plan || $[3] !== table) {
623
+ t2 = rowColumns(plan, table);
624
+ $[2] = plan;
625
+ $[3] = table;
626
+ $[4] = t2;
627
+ } else {
628
+ t2 = $[4];
629
+ }
630
+ const columns = t2;
631
+ let t3;
632
+ if ($[5] !== close || $[6] !== columns || $[7] !== messages.invalidCondition || $[8] !== store) {
633
+ t3 = group => {
634
+ let where;
635
+ ;
636
+ try {
637
+ where = writeConditions(group, columns);
638
+ } catch (t4) {
639
+ const failure = t4;
640
+ if (!(failure instanceof ConditionError)) {
641
+ throw failure;
642
+ }
643
+ setInvalid(failure.node);
644
+ setError(messages.invalidCondition);
645
+ return;
646
+ }
647
+ startApply(async () => {
648
+ const outcome = await store.dispatch({
649
+ command: "filter.set",
650
+ where
651
+ });
652
+ if (!outcome.ok) {
653
+ setError(outcome.error.message);
654
+ return;
655
+ }
656
+ setInvalid(null);
657
+ setError(null);
658
+ close();
659
+ });
660
+ };
661
+ $[5] = close;
662
+ $[6] = columns;
663
+ $[7] = messages.invalidCondition;
664
+ $[8] = store;
665
+ $[9] = t3;
666
+ } else {
667
+ t3 = $[9];
668
+ }
669
+ const apply = t3;
670
+ let t4;
671
+ if ($[10] !== apply || $[11] !== draft) {
672
+ t4 = event => {
673
+ event.preventDefault();
674
+ apply(draft);
675
+ };
676
+ $[10] = apply;
677
+ $[11] = draft;
678
+ $[12] = t4;
679
+ } else {
680
+ t4 = $[12];
681
+ }
682
+ let t5;
683
+ if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
684
+ t5 = (target, change) => setDraft(current => changed(current, target, change));
685
+ $[13] = t5;
686
+ } else {
687
+ t5 = $[13];
688
+ }
689
+ let t6;
690
+ if ($[14] !== columns || $[15] !== draft || $[16] !== invalid || $[17] !== messages) {
691
+ t6 = /*#__PURE__*/_jsx(GroupBlock, {
692
+ top: true,
693
+ node: draft,
694
+ columns: columns,
695
+ invalid: invalid,
696
+ messages: messages,
697
+ onChange: t5
698
+ });
699
+ $[14] = columns;
700
+ $[15] = draft;
701
+ $[16] = invalid;
702
+ $[17] = messages;
703
+ $[18] = t6;
704
+ } else {
705
+ t6 = $[18];
706
+ }
707
+ let t7;
708
+ if ($[19] !== error) {
709
+ t7 = error !== null && /*#__PURE__*/_jsx("p", {
710
+ role: "alert",
711
+ className: "vg-filter__error",
712
+ children: error
713
+ });
714
+ $[19] = error;
715
+ $[20] = t7;
716
+ } else {
717
+ t7 = $[20];
718
+ }
719
+ let t8;
720
+ if ($[21] !== apply || $[22] !== draft) {
721
+ t8 = () => apply({
722
+ ...draft,
723
+ items: []
724
+ });
725
+ $[21] = apply;
726
+ $[22] = draft;
727
+ $[23] = t8;
728
+ } else {
729
+ t8 = $[23];
730
+ }
731
+ let t9;
732
+ if ($[24] !== messages.clearConditions || $[25] !== pending || $[26] !== t8) {
733
+ t9 = /*#__PURE__*/_jsx("button", {
734
+ type: "button",
735
+ className: "vg-button",
736
+ disabled: pending,
737
+ onClick: t8,
738
+ children: messages.clearConditions
739
+ });
740
+ $[24] = messages.clearConditions;
741
+ $[25] = pending;
742
+ $[26] = t8;
743
+ $[27] = t9;
744
+ } else {
745
+ t9 = $[27];
746
+ }
747
+ let t10;
748
+ if ($[28] !== messages.apply || $[29] !== pending) {
749
+ t10 = /*#__PURE__*/_jsx("button", {
750
+ type: "submit",
751
+ className: "vg-button vg-button--primary",
752
+ disabled: pending,
753
+ children: messages.apply
754
+ });
755
+ $[28] = messages.apply;
756
+ $[29] = pending;
757
+ $[30] = t10;
758
+ } else {
759
+ t10 = $[30];
760
+ }
761
+ let t11;
762
+ if ($[31] !== t10 || $[32] !== t9) {
763
+ t11 = /*#__PURE__*/_jsxs("div", {
764
+ className: "vg-filter__actions",
765
+ children: [t9, t10]
766
+ });
767
+ $[31] = t10;
768
+ $[32] = t9;
769
+ $[33] = t11;
770
+ } else {
771
+ t11 = $[33];
772
+ }
773
+ let t12;
774
+ if ($[34] !== t11 || $[35] !== t4 || $[36] !== t6 || $[37] !== t7) {
775
+ t12 = /*#__PURE__*/_jsxs("form", {
776
+ onSubmit: t4,
777
+ children: [t6, t7, t11]
778
+ });
779
+ $[34] = t11;
780
+ $[35] = t4;
781
+ $[36] = t6;
782
+ $[37] = t7;
783
+ $[38] = t12;
784
+ } else {
785
+ t12 = $[38];
786
+ }
787
+ return t12;
788
+ }
789
+ function _temp6(snapshot_0) {
790
+ return snapshot_0.document.plan;
791
+ }
792
+ function _temp5(snapshot) {
793
+ return snapshot.table;
794
+ }
795
+ //# sourceMappingURL=conditions-menu.js.map