vastgrid 0.1.1 → 0.2.1

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 +151 -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 +42 -17
  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 +169 -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 -68
  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 -22
  258. package/dist/components/filter-panel.d.ts.map +0 -1
  259. package/dist/components/filter-panel.js +0 -169
  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 -227
  274. package/dist/controller.d.ts.map +0 -1
  275. package/dist/controller.js +0 -845
  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 -704
  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 -180
  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 -293
  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 -945
  308. package/src/data-grid.tsx +0 -1035
  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,508 @@
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { use, useState, useTransition } from "react";
3
+ import { MEASURES, measureTakes } from "vastgrid-spec";
4
+ import { measureName, offers, rowColumns } from "../core/measures.js";
5
+ import { LocaleContext } from "./context.js";
6
+ import { useGridSelector, useGridStore } from "./hooks.js";
7
+
8
+ /** The measures the menu offers; `quantile` needs a `p`, which it does not ask for. */
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
+ const OFFERED = MEASURES.filter(fn => fn !== "quantile");
11
+
12
+ /**
13
+ * The content of the toolbar's group menu, loaded when it first opens (§6.2 of the specification): the columns that the rows are grouped by and the measures of
14
+ * each group (§4.5), each change dispatched as `group.set` with the whole aggregate, or `group.clear` when nothing is
15
+ * left. It is there when the engine groups rows.
16
+ */
17
+ export default function GroupPanel() {
18
+ const $ = _c(88);
19
+ const store = useGridStore();
20
+ const {
21
+ messages
22
+ } = use(LocaleContext);
23
+ const table = useGridSelector(_temp);
24
+ const plan = useGridSelector(_temp2);
25
+ const [fn, setFn] = useState("sum");
26
+ const [column, setColumn] = useState("");
27
+ const [error, setError] = useState(null);
28
+ const [pending, startDispatch] = useTransition();
29
+ if (!table || !offers(table.capabilities, "count")) {
30
+ return null;
31
+ }
32
+ let addMeasure;
33
+ let canAdd;
34
+ let dispatch;
35
+ let t0;
36
+ let t1;
37
+ let t10;
38
+ let t11;
39
+ let t12;
40
+ let t13;
41
+ let t14;
42
+ let t2;
43
+ let t3;
44
+ let t4;
45
+ let t5;
46
+ let t6;
47
+ let t7;
48
+ let t8;
49
+ let t9;
50
+ if ($[0] !== column || $[1] !== fn || $[2] !== messages || $[3] !== pending || $[4] !== plan || $[5] !== store || $[6] !== table) {
51
+ const aggregate = plan?.aggregate ?? {
52
+ keys: [],
53
+ measures: []
54
+ };
55
+ const rows = rowColumns(plan, table);
56
+ let t15;
57
+ if ($[25] !== table.capabilities) {
58
+ t15 = name => offers(table.capabilities, name);
59
+ $[25] = table.capabilities;
60
+ $[26] = t15;
61
+ } else {
62
+ t15 = $[26];
63
+ }
64
+ const measures = OFFERED.filter(t15);
65
+ const columnsFor = name_0 => rows.filter(item => measureTakes(name_0, item));
66
+ const target = column === "" ? undefined : rows.find(item_0 => item_0.name === column);
67
+ canAdd = target ? measureTakes(fn, target) : fn === "count";
68
+ let t16;
69
+ if ($[27] !== store) {
70
+ t16 = command => startDispatch(async () => {
71
+ const outcome = await store.dispatch(command);
72
+ setError(outcome.ok ? null : outcome.error.message);
73
+ });
74
+ $[27] = store;
75
+ $[28] = t16;
76
+ } else {
77
+ t16 = $[28];
78
+ }
79
+ dispatch = t16;
80
+ let t17;
81
+ if ($[29] !== dispatch) {
82
+ t17 = next => dispatch(next.keys.length === 0 && next.measures.length === 0 ? {
83
+ command: "group.clear"
84
+ } : {
85
+ command: "group.set",
86
+ aggregate: next
87
+ });
88
+ $[29] = dispatch;
89
+ $[30] = t17;
90
+ } else {
91
+ t17 = $[30];
92
+ }
93
+ const set = t17;
94
+ const pivots = table.capabilities.plan?.pivot !== false;
95
+ const pivot = aggregate.pivot?.columns ?? [];
96
+ const setPivot = columns => {
97
+ const {
98
+ pivot: _pivot,
99
+ ...rest
100
+ } = aggregate;
101
+ const measures_0 = columns.length > 0 && rest.measures.length === 0 ? [{
102
+ name: measureName("count", undefined, new Set(rest.keys)),
103
+ fn: "count"
104
+ }] : rest.measures;
105
+ set(columns.length > 0 ? {
106
+ ...rest,
107
+ measures: measures_0,
108
+ pivot: {
109
+ columns
110
+ }
111
+ } : rest);
112
+ };
113
+ const taken = () => new Set([...aggregate.keys, ...aggregate.measures.map(_temp3)]);
114
+ addMeasure = () => {
115
+ if (!canAdd) {
116
+ return;
117
+ }
118
+ const name_1 = measureName(fn, target?.name, taken());
119
+ set({
120
+ ...aggregate,
121
+ measures: [...aggregate.measures, {
122
+ name: name_1,
123
+ fn,
124
+ ...(target ? {
125
+ column: target.name
126
+ } : {})
127
+ }]
128
+ });
129
+ };
130
+ let t18;
131
+ if ($[31] !== messages.groupKeys) {
132
+ t18 = /*#__PURE__*/_jsx("legend", {
133
+ children: messages.groupKeys
134
+ });
135
+ $[31] = messages.groupKeys;
136
+ $[32] = t18;
137
+ } else {
138
+ t18 = $[32];
139
+ }
140
+ let t19;
141
+ if ($[33] !== messages.addKey) {
142
+ t19 = /*#__PURE__*/_jsx("option", {
143
+ value: "",
144
+ children: messages.addKey
145
+ });
146
+ $[33] = messages.addKey;
147
+ $[34] = t19;
148
+ } else {
149
+ t19 = $[34];
150
+ }
151
+ t13 = /*#__PURE__*/_jsxs("fieldset", {
152
+ className: "vg-groups__part",
153
+ disabled: pending,
154
+ children: [t18, /*#__PURE__*/_jsx("ul", {
155
+ className: "vg-groups__list",
156
+ children: aggregate.keys.map(key => /*#__PURE__*/_jsxs("li", {
157
+ children: [/*#__PURE__*/_jsx("span", {
158
+ children: key
159
+ }), /*#__PURE__*/_jsx("button", {
160
+ type: "button",
161
+ className: "vg-button vg-button--small",
162
+ "aria-label": messages.remove(key),
163
+ onClick: () => set({
164
+ ...aggregate,
165
+ keys: aggregate.keys.filter(other => other !== key)
166
+ }),
167
+ children: "\xD7"
168
+ })]
169
+ }, key))
170
+ }), /*#__PURE__*/_jsxs("select", {
171
+ className: "vg-input",
172
+ "aria-label": messages.addKey,
173
+ value: "",
174
+ onChange: event => {
175
+ const key_0 = event.target.value;
176
+ if (!key_0) {
177
+ return;
178
+ }
179
+ const measures_1 = plan?.aggregate ? aggregate.measures : [{
180
+ name: measureName("count", undefined, new Set([key_0])),
181
+ fn: "count"
182
+ }];
183
+ set({
184
+ ...aggregate,
185
+ keys: [...aggregate.keys, key_0],
186
+ measures: measures_1
187
+ });
188
+ },
189
+ children: [t19, rows.filter(item_1 => !aggregate.keys.includes(item_1.name) && measureTakes("min", item_1)).map(_temp4)]
190
+ })]
191
+ });
192
+ t14 = pivots && /*#__PURE__*/_jsxs("fieldset", {
193
+ className: "vg-groups__part",
194
+ disabled: pending,
195
+ children: [/*#__PURE__*/_jsx("legend", {
196
+ children: messages.pivotBy
197
+ }), /*#__PURE__*/_jsx("ul", {
198
+ className: "vg-groups__list",
199
+ children: pivot.map(name_2 => /*#__PURE__*/_jsxs("li", {
200
+ children: [/*#__PURE__*/_jsx("span", {
201
+ children: name_2
202
+ }), /*#__PURE__*/_jsx("button", {
203
+ type: "button",
204
+ className: "vg-button vg-button--small",
205
+ "aria-label": messages.remove(name_2),
206
+ onClick: () => setPivot(pivot.filter(other_0 => other_0 !== name_2)),
207
+ children: "\xD7"
208
+ })]
209
+ }, name_2))
210
+ }), /*#__PURE__*/_jsxs("select", {
211
+ className: "vg-input",
212
+ "aria-label": messages.pivotBy,
213
+ value: "",
214
+ onChange: event_0 => {
215
+ if (event_0.target.value) {
216
+ setPivot([...pivot, event_0.target.value]);
217
+ }
218
+ },
219
+ children: [/*#__PURE__*/_jsx("option", {
220
+ value: "",
221
+ children: messages.addPivot
222
+ }), rows.filter(item_3 => !aggregate.keys.includes(item_3.name) && !pivot.includes(item_3.name) && measureTakes("min", item_3)).map(_temp5)]
223
+ })]
224
+ });
225
+ t9 = "vg-groups__part";
226
+ t10 = pending;
227
+ if ($[35] !== messages.measures) {
228
+ t11 = /*#__PURE__*/_jsx("legend", {
229
+ children: messages.measures
230
+ });
231
+ $[35] = messages.measures;
232
+ $[36] = t11;
233
+ } else {
234
+ t11 = $[36];
235
+ }
236
+ t12 = /*#__PURE__*/_jsx("ul", {
237
+ className: "vg-groups__list",
238
+ children: aggregate.measures.map(measure_0 => /*#__PURE__*/_jsxs("li", {
239
+ children: [/*#__PURE__*/_jsx("span", {
240
+ children: measure_0.name
241
+ }), /*#__PURE__*/_jsx("button", {
242
+ type: "button",
243
+ className: "vg-button vg-button--small",
244
+ "aria-label": messages.remove(measure_0.name),
245
+ onClick: () => set({
246
+ ...aggregate,
247
+ measures: aggregate.measures.filter(other_1 => other_1.name !== measure_0.name)
248
+ }),
249
+ children: "\xD7"
250
+ })]
251
+ }, measure_0.name))
252
+ });
253
+ t7 = "vg-groups__add";
254
+ const t20 = messages.measures;
255
+ let t21;
256
+ if ($[37] === Symbol.for("react.memo_cache_sentinel")) {
257
+ t21 = event_1 => setFn(event_1.target.value);
258
+ $[37] = t21;
259
+ } else {
260
+ t21 = $[37];
261
+ }
262
+ let t22;
263
+ if ($[38] !== messages.measureNames) {
264
+ t22 = name_3 => /*#__PURE__*/_jsx("option", {
265
+ value: name_3,
266
+ children: messages.measureNames[name_3]
267
+ }, name_3);
268
+ $[38] = messages.measureNames;
269
+ $[39] = t22;
270
+ } else {
271
+ t22 = $[39];
272
+ }
273
+ const t23 = measures.map(t22);
274
+ if ($[40] !== fn || $[41] !== messages.measures || $[42] !== t23) {
275
+ t8 = /*#__PURE__*/_jsx("select", {
276
+ className: "vg-input",
277
+ "aria-label": t20,
278
+ value: fn,
279
+ onChange: t21,
280
+ children: t23
281
+ });
282
+ $[40] = fn;
283
+ $[41] = messages.measures;
284
+ $[42] = t23;
285
+ $[43] = t8;
286
+ } else {
287
+ t8 = $[43];
288
+ }
289
+ t0 = "vg-input";
290
+ t1 = messages.measureColumn;
291
+ t2 = column;
292
+ if ($[44] === Symbol.for("react.memo_cache_sentinel")) {
293
+ t3 = event_2 => setColumn(event_2.target.value);
294
+ $[44] = t3;
295
+ } else {
296
+ t3 = $[44];
297
+ }
298
+ if ($[45] !== fn || $[46] !== messages.allRows) {
299
+ t4 = fn === "count" && /*#__PURE__*/_jsx("option", {
300
+ value: "",
301
+ children: messages.allRows
302
+ });
303
+ $[45] = fn;
304
+ $[46] = messages.allRows;
305
+ $[47] = t4;
306
+ } else {
307
+ t4 = $[47];
308
+ }
309
+ if ($[48] !== column || $[49] !== fn || $[50] !== messages.measureColumn) {
310
+ t5 = fn !== "count" && column === "" && /*#__PURE__*/_jsx("option", {
311
+ value: "",
312
+ children: messages.measureColumn
313
+ });
314
+ $[48] = column;
315
+ $[49] = fn;
316
+ $[50] = messages.measureColumn;
317
+ $[51] = t5;
318
+ } else {
319
+ t5 = $[51];
320
+ }
321
+ t6 = columnsFor(fn).map(_temp6);
322
+ $[0] = column;
323
+ $[1] = fn;
324
+ $[2] = messages;
325
+ $[3] = pending;
326
+ $[4] = plan;
327
+ $[5] = store;
328
+ $[6] = table;
329
+ $[7] = addMeasure;
330
+ $[8] = canAdd;
331
+ $[9] = dispatch;
332
+ $[10] = t0;
333
+ $[11] = t1;
334
+ $[12] = t10;
335
+ $[13] = t11;
336
+ $[14] = t12;
337
+ $[15] = t13;
338
+ $[16] = t14;
339
+ $[17] = t2;
340
+ $[18] = t3;
341
+ $[19] = t4;
342
+ $[20] = t5;
343
+ $[21] = t6;
344
+ $[22] = t7;
345
+ $[23] = t8;
346
+ $[24] = t9;
347
+ } else {
348
+ addMeasure = $[7];
349
+ canAdd = $[8];
350
+ dispatch = $[9];
351
+ t0 = $[10];
352
+ t1 = $[11];
353
+ t10 = $[12];
354
+ t11 = $[13];
355
+ t12 = $[14];
356
+ t13 = $[15];
357
+ t14 = $[16];
358
+ t2 = $[17];
359
+ t3 = $[18];
360
+ t4 = $[19];
361
+ t5 = $[20];
362
+ t6 = $[21];
363
+ t7 = $[22];
364
+ t8 = $[23];
365
+ t9 = $[24];
366
+ }
367
+ let t15;
368
+ if ($[52] !== t0 || $[53] !== t1 || $[54] !== t2 || $[55] !== t3 || $[56] !== t4 || $[57] !== t5 || $[58] !== t6) {
369
+ t15 = /*#__PURE__*/_jsxs("select", {
370
+ className: t0,
371
+ "aria-label": t1,
372
+ value: t2,
373
+ onChange: t3,
374
+ children: [t4, t5, t6]
375
+ });
376
+ $[52] = t0;
377
+ $[53] = t1;
378
+ $[54] = t2;
379
+ $[55] = t3;
380
+ $[56] = t4;
381
+ $[57] = t5;
382
+ $[58] = t6;
383
+ $[59] = t15;
384
+ } else {
385
+ t15 = $[59];
386
+ }
387
+ const t16 = !canAdd;
388
+ let t17;
389
+ if ($[60] !== addMeasure || $[61] !== messages.addMeasure || $[62] !== t16) {
390
+ t17 = /*#__PURE__*/_jsx("button", {
391
+ type: "button",
392
+ className: "vg-button",
393
+ disabled: t16,
394
+ onClick: addMeasure,
395
+ children: messages.addMeasure
396
+ });
397
+ $[60] = addMeasure;
398
+ $[61] = messages.addMeasure;
399
+ $[62] = t16;
400
+ $[63] = t17;
401
+ } else {
402
+ t17 = $[63];
403
+ }
404
+ let t18;
405
+ if ($[64] !== t15 || $[65] !== t17 || $[66] !== t7 || $[67] !== t8) {
406
+ t18 = /*#__PURE__*/_jsxs("div", {
407
+ className: t7,
408
+ children: [t8, t15, t17]
409
+ });
410
+ $[64] = t15;
411
+ $[65] = t17;
412
+ $[66] = t7;
413
+ $[67] = t8;
414
+ $[68] = t18;
415
+ } else {
416
+ t18 = $[68];
417
+ }
418
+ let t19;
419
+ if ($[69] !== t10 || $[70] !== t11 || $[71] !== t12 || $[72] !== t18 || $[73] !== t9) {
420
+ t19 = /*#__PURE__*/_jsxs("fieldset", {
421
+ className: t9,
422
+ disabled: t10,
423
+ children: [t11, t12, t18]
424
+ });
425
+ $[69] = t10;
426
+ $[70] = t11;
427
+ $[71] = t12;
428
+ $[72] = t18;
429
+ $[73] = t9;
430
+ $[74] = t19;
431
+ } else {
432
+ t19 = $[74];
433
+ }
434
+ let t20;
435
+ if ($[75] !== error) {
436
+ t20 = error !== null && /*#__PURE__*/_jsx("p", {
437
+ role: "alert",
438
+ className: "vg-filter__error",
439
+ children: error
440
+ });
441
+ $[75] = error;
442
+ $[76] = t20;
443
+ } else {
444
+ t20 = $[76];
445
+ }
446
+ let t21;
447
+ if ($[77] !== dispatch || $[78] !== messages.ungroup || $[79] !== pending || $[80] !== plan?.aggregate) {
448
+ t21 = plan?.aggregate && /*#__PURE__*/_jsx("button", {
449
+ type: "button",
450
+ className: "vg-menu__item",
451
+ disabled: pending,
452
+ onClick: () => dispatch({
453
+ command: "group.clear"
454
+ }),
455
+ children: messages.ungroup
456
+ });
457
+ $[77] = dispatch;
458
+ $[78] = messages.ungroup;
459
+ $[79] = pending;
460
+ $[80] = plan?.aggregate;
461
+ $[81] = t21;
462
+ } else {
463
+ t21 = $[81];
464
+ }
465
+ let t22;
466
+ if ($[82] !== t13 || $[83] !== t14 || $[84] !== t19 || $[85] !== t20 || $[86] !== t21) {
467
+ t22 = /*#__PURE__*/_jsxs(_Fragment, {
468
+ children: [t13, t14, t19, t20, t21]
469
+ });
470
+ $[82] = t13;
471
+ $[83] = t14;
472
+ $[84] = t19;
473
+ $[85] = t20;
474
+ $[86] = t21;
475
+ $[87] = t22;
476
+ } else {
477
+ t22 = $[87];
478
+ }
479
+ return t22;
480
+ }
481
+ function _temp6(item_5) {
482
+ return /*#__PURE__*/_jsx("option", {
483
+ value: item_5.name,
484
+ children: item_5.name
485
+ }, item_5.name);
486
+ }
487
+ function _temp5(item_4) {
488
+ return /*#__PURE__*/_jsx("option", {
489
+ value: item_4.name,
490
+ children: item_4.name
491
+ }, item_4.name);
492
+ }
493
+ function _temp4(item_2) {
494
+ return /*#__PURE__*/_jsx("option", {
495
+ value: item_2.name,
496
+ children: item_2.name
497
+ }, item_2.name);
498
+ }
499
+ function _temp3(measure) {
500
+ return measure.name;
501
+ }
502
+ function _temp2(snapshot_0) {
503
+ return snapshot_0.document.plan;
504
+ }
505
+ function _temp(snapshot) {
506
+ return snapshot.table;
507
+ }
508
+ //# sourceMappingURL=group-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["use","useState","useTransition","MEASURES","measureTakes","measureName","offers","rowColumns","LocaleContext","useGridSelector","useGridStore","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","OFFERED","filter","fn","GroupPanel","$","_c","store","messages","table","_temp","plan","_temp2","setFn","column","setColumn","error","setError","pending","startDispatch","capabilities","addMeasure","canAdd","dispatch","t0","t1","t10","t11","t12","t13","t14","t2","t3","t4","t5","t6","t7","t8","t9","aggregate","keys","measures","rows","t15","name","columnsFor","name_0","item","target","undefined","find","item_0","t16","command","outcome","ok","message","t17","next","length","set","pivots","pivot","columns","setPivot","_pivot","rest","measures_0","Set","taken","map","_temp3","name_1","t18","groupKeys","children","t19","addKey","value","className","key","type","remove","onClick","other","onChange","event","key_0","measures_1","item_1","includes","_temp4","pivotBy","name_2","other_0","event_0","addPivot","item_3","_temp5","measure_0","measure","other_1","t20","t21","Symbol","for","event_1","t22","measureNames","name_3","t23","measureColumn","event_2","allRows","_temp6","disabled","role","ungroup","item_5","item_4","item_2","snapshot_0","snapshot","document"],"sources":["group-menu.tsx"],"sourcesContent":["import { use, useState, useTransition } from \"react\";\nimport { type Aggregate, type GridCommand, MEASURES, type MeasureName, measureTakes } from \"vastgrid-spec\";\nimport { measureName, offers, rowColumns } from \"../core/measures.js\";\nimport { LocaleContext } from \"./context.js\";\nimport { useGridSelector, useGridStore } from \"./hooks.js\";\n\n/** The measures the menu offers; `quantile` needs a `p`, which it does not ask for. */\nconst OFFERED = MEASURES.filter((fn) => fn !== \"quantile\");\n\n/**\n * The content of the toolbar's group menu, loaded when it first opens (§6.2 of the specification): the columns that the rows are grouped by and the measures of\n * each group (§4.5), each change dispatched as `group.set` with the whole aggregate, or `group.clear` when nothing is\n * left. It is there when the engine groups rows.\n */\nexport default function GroupPanel() {\n const store = useGridStore();\n const { messages } = use(LocaleContext);\n const table = useGridSelector((snapshot) => snapshot.table);\n const plan = useGridSelector((snapshot) => snapshot.document.plan);\n const [fn, setFn] = useState<MeasureName>(\"sum\");\n const [column, setColumn] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [pending, startDispatch] = useTransition();\n if (!table || !offers(table.capabilities, \"count\")) return null;\n\n const aggregate: Aggregate = plan?.aggregate ?? { keys: [], measures: [] };\n const rows = rowColumns(plan, table);\n const measures = OFFERED.filter((name) => offers(table.capabilities, name));\n const columnsFor = (name: MeasureName) => rows.filter((item) => measureTakes(name, item));\n const target = column === \"\" ? undefined : rows.find((item) => item.name === column);\n const canAdd = target ? measureTakes(fn, target) : fn === \"count\";\n\n const dispatch = (command: GridCommand) =>\n startDispatch(async () => {\n const outcome = await store.dispatch(command);\n setError(outcome.ok ? null : outcome.error.message);\n });\n const set = (next: Aggregate) =>\n dispatch(\n next.keys.length === 0 && next.measures.length === 0\n ? { command: \"group.clear\" }\n : { command: \"group.set\", aggregate: next },\n );\n const pivots = table.capabilities.plan?.pivot !== false;\n const pivot = aggregate.pivot?.columns ?? [];\n // A pivot makes a column per value of its columns and measure (§4.6), so it needs a measure: rows are counted.\n const setPivot = (columns: string[]) => {\n const { pivot: _pivot, ...rest } = aggregate;\n const measures =\n columns.length > 0 && rest.measures.length === 0\n ? [{ name: measureName(\"count\", undefined, new Set(rest.keys)), fn: \"count\" as const }]\n : rest.measures;\n set(columns.length > 0 ? { ...rest, measures, pivot: { columns } } : rest);\n };\n const taken = () => new Set([...aggregate.keys, ...aggregate.measures.map((measure) => measure.name)]);\n const addMeasure = () => {\n if (!canAdd) return;\n const name = measureName(fn, target?.name, taken());\n set({ ...aggregate, measures: [...aggregate.measures, { name, fn, ...(target ? { column: target.name } : {}) }] });\n };\n\n return (\n <>\n <fieldset className=\"vg-groups__part\" disabled={pending}>\n <legend>{messages.groupKeys}</legend>\n <ul className=\"vg-groups__list\">\n {aggregate.keys.map((key) => (\n <li key={key}>\n <span>{key}</span>\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n aria-label={messages.remove(key)}\n onClick={() => set({ ...aggregate, keys: aggregate.keys.filter((other) => other !== key) })}\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n <select\n className=\"vg-input\"\n aria-label={messages.addKey}\n value=\"\"\n onChange={(event) => {\n const key = event.target.value;\n if (!key) return;\n // Rows grouped for the first time are counted.\n const measures = plan?.aggregate\n ? aggregate.measures\n : [{ name: measureName(\"count\", undefined, new Set([key])), fn: \"count\" as const }];\n set({ ...aggregate, keys: [...aggregate.keys, key], measures });\n }}\n >\n <option value=\"\">{messages.addKey}</option>\n {rows\n // Keys are the columns whose values order (§3.9), as `min` takes them.\n .filter((item) => !aggregate.keys.includes(item.name) && measureTakes(\"min\", item))\n .map((item) => (\n <option key={item.name} value={item.name}>\n {item.name}\n </option>\n ))}\n </select>\n </fieldset>\n {pivots && (\n <fieldset className=\"vg-groups__part\" disabled={pending}>\n <legend>{messages.pivotBy}</legend>\n <ul className=\"vg-groups__list\">\n {pivot.map((name) => (\n <li key={name}>\n <span>{name}</span>\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n aria-label={messages.remove(name)}\n onClick={() => setPivot(pivot.filter((other) => other !== name))}\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n <select\n className=\"vg-input\"\n aria-label={messages.pivotBy}\n value=\"\"\n onChange={(event) => {\n if (event.target.value) setPivot([...pivot, event.target.value]);\n }}\n >\n <option value=\"\">{messages.addPivot}</option>\n {rows\n .filter(\n (item) =>\n !aggregate.keys.includes(item.name) && !pivot.includes(item.name) && measureTakes(\"min\", item),\n )\n .map((item) => (\n <option key={item.name} value={item.name}>\n {item.name}\n </option>\n ))}\n </select>\n </fieldset>\n )}\n <fieldset className=\"vg-groups__part\" disabled={pending}>\n <legend>{messages.measures}</legend>\n <ul className=\"vg-groups__list\">\n {aggregate.measures.map((measure) => (\n <li key={measure.name}>\n <span>{measure.name}</span>\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n aria-label={messages.remove(measure.name)}\n onClick={() =>\n set({ ...aggregate, measures: aggregate.measures.filter((other) => other.name !== measure.name) })\n }\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n <div className=\"vg-groups__add\">\n <select\n className=\"vg-input\"\n aria-label={messages.measures}\n value={fn}\n onChange={(event) => setFn(event.target.value as MeasureName)}\n >\n {measures.map((name) => (\n <option key={name} value={name}>\n {messages.measureNames[name]}\n </option>\n ))}\n </select>\n <select\n className=\"vg-input\"\n aria-label={messages.measureColumn}\n value={column}\n onChange={(event) => setColumn(event.target.value)}\n >\n {fn === \"count\" && <option value=\"\">{messages.allRows}</option>}\n {fn !== \"count\" && column === \"\" && <option value=\"\">{messages.measureColumn}</option>}\n {columnsFor(fn).map((item) => (\n <option key={item.name} value={item.name}>\n {item.name}\n </option>\n ))}\n </select>\n <button type=\"button\" className=\"vg-button\" disabled={!canAdd} onClick={addMeasure}>\n {messages.addMeasure}\n </button>\n </div>\n </fieldset>\n {error !== null && (\n <p role=\"alert\" className=\"vg-filter__error\">\n {error}\n </p>\n )}\n {plan?.aggregate && (\n <button\n type=\"button\"\n className=\"vg-menu__item\"\n disabled={pending}\n onClick={() => dispatch({ command: \"group.clear\" })}\n >\n {messages.ungroup}\n </button>\n )}\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import type { JsonValue } from "vastgrid-spec";
2
+ import { type GridStore, type GridStoreOptions } from "../core/store.js";
3
+ import type { GridSnapshot } from "../core/types.js";
4
+ /** The store of the nearest `DataGrid` or `GridProvider`. */
5
+ export declare function useGridStore(): GridStore;
6
+ /** Whether two values are the same, or objects or arrays whose members are the same (`Object.is`). */
7
+ export declare function shallowEqual<T>(a: T, b: T): boolean;
8
+ /**
9
+ * A part of the store's snapshot (§5.3 of react.md). The component renders again only when the selected value
10
+ * changes by `isEqual` (`Object.is` by default). Selectors run on every change of the store: they are cheap and
11
+ * make no new objects unless `isEqual` compares them (`shallowEqual`).
12
+ */
13
+ export declare function useGridSelector<T>(selector: (snapshot: GridSnapshot) => T, isEqual?: (a: T, b: T) => boolean): T;
14
+ /** The store's `dispatch`: the same function on every render. */
15
+ export declare function useGridDispatch(): GridStore["dispatch"];
16
+ /** A store for the life of the component: made once from the first options, connected while it is mounted. */
17
+ export declare function useCreateGridStore(options: GridStoreOptions): GridStore;
18
+ /**
19
+ * Values of rows `[start, end)` of the view on screen, for cells that React renders (a detail panel, an overlay):
20
+ * one array per row, with undefined for values not read yet. Reads them when they are missing, and renders again
21
+ * when rows arrive.
22
+ */
23
+ export declare function useGridRows(range: {
24
+ start: number;
25
+ end: number;
26
+ columns: readonly string[];
27
+ }): (JsonValue | undefined)[][];
28
+ /**
29
+ * Reads rows of the store's cache. The cache changes inside the store, so the version of its rows is an argument:
30
+ * memoization (React Compiler's included) reads them again when it changes.
31
+ */
32
+ export declare function readRows(store: GridStore, _version: number, start: number, end: number, columns: readonly string[]): (JsonValue | undefined)[][];
33
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAmB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,6DAA6D;AAC7D,wBAAgB,YAAY,IAAI,SAAS,CAIxC;AAED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAUnD;AAkBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC,EACvC,OAAO,GAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAmB,GAC3C,CAAC,CAKH;AAED,iEAAiE;AACjE,wBAAgB,eAAe,IAAI,SAAS,CAAC,UAAU,CAAC,CAEvD;AAED,8GAA8G;AAC9G,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,EAAE,CAS9B;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,CAAC,SAAS,GAAG,SAAS,CAAC,EAAE,EAAE,CAI7B"}