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.
- package/README.md +175 -13
- package/dist/canvas/geometry.d.ts +92 -0
- package/dist/canvas/geometry.d.ts.map +1 -0
- package/dist/canvas/geometry.js +197 -0
- package/dist/canvas/geometry.js.map +1 -0
- package/dist/canvas/grid-canvas.d.ts +161 -0
- package/dist/canvas/grid-canvas.d.ts.map +1 -0
- package/dist/canvas/grid-canvas.js +1146 -0
- package/dist/canvas/grid-canvas.js.map +1 -0
- package/dist/canvas/hooks.d.ts +61 -0
- package/dist/canvas/hooks.d.ts.map +1 -0
- package/dist/canvas/hooks.js +2 -0
- package/dist/canvas/hooks.js.map +1 -0
- package/dist/canvas/keys.d.ts +26 -0
- package/dist/canvas/keys.d.ts.map +1 -0
- package/dist/canvas/keys.js +133 -0
- package/dist/canvas/keys.js.map +1 -0
- package/dist/canvas/layout.d.ts +26 -0
- package/dist/canvas/layout.d.ts.map +1 -0
- package/dist/canvas/layout.js +73 -0
- package/dist/canvas/layout.js.map +1 -0
- package/dist/canvas/scroll.d.ts +31 -0
- package/dist/canvas/scroll.d.ts.map +1 -0
- package/dist/canvas/scroll.js +111 -0
- package/dist/canvas/scroll.js.map +1 -0
- package/dist/canvas/text.d.ts +23 -0
- package/dist/canvas/text.d.ts.map +1 -0
- package/dist/canvas/text.js +142 -0
- package/dist/canvas/text.js.map +1 -0
- package/dist/{theme.d.ts → canvas/theme.d.ts} +8 -0
- package/dist/canvas/theme.d.ts.map +1 -0
- package/dist/canvas/theme.js +62 -0
- package/dist/canvas/theme.js.map +1 -0
- package/dist/core/cache.d.ts +48 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +222 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/checked.d.ts +20 -0
- package/dist/core/checked.d.ts.map +1 -0
- package/dist/core/checked.js +61 -0
- package/dist/core/checked.js.map +1 -0
- package/dist/core/client.d.ts +33 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +103 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/conditions.d.ts +48 -0
- package/dist/core/conditions.d.ts.map +1 -0
- package/dist/core/conditions.js +105 -0
- package/dist/core/conditions.js.map +1 -0
- package/dist/core/evaluate.d.ts +20 -0
- package/dist/core/evaluate.d.ts.map +1 -0
- package/dist/core/evaluate.js +210 -0
- package/dist/core/evaluate.js.map +1 -0
- package/dist/core/filters.d.ts +51 -0
- package/dist/core/filters.d.ts.map +1 -0
- package/dist/core/filters.js +303 -0
- package/dist/core/filters.js.map +1 -0
- package/dist/core/format.d.ts +14 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +303 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/measures.d.ts +26 -0
- package/dist/core/measures.d.ts.map +1 -0
- package/dist/core/measures.js +105 -0
- package/dist/core/measures.js.map +1 -0
- package/dist/core/request-ids.d.ts +20 -0
- package/dist/core/request-ids.d.ts.map +1 -0
- package/dist/core/request-ids.js +55 -0
- package/dist/core/request-ids.js.map +1 -0
- package/dist/core/rows.d.ts +79 -0
- package/dist/core/rows.d.ts.map +1 -0
- package/dist/core/rows.js +173 -0
- package/dist/core/rows.js.map +1 -0
- package/dist/core/store.d.ts +233 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +1162 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/totals.d.ts +24 -0
- package/dist/core/totals.d.ts.map +1 -0
- package/dist/core/totals.js +49 -0
- package/dist/core/totals.js.map +1 -0
- package/dist/core/trace.d.ts +7 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +26 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/transports.d.ts +50 -0
- package/dist/core/transports.d.ts.map +1 -0
- package/dist/core/transports.js +160 -0
- package/dist/core/transports.js.map +1 -0
- package/dist/core/types.d.ts +150 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +45 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core.d.ts +12 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +11 -0
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -7
- package/dist/index.js.map +1 -1
- package/dist/react/accessible-rows.d.ts +13 -0
- package/dist/react/accessible-rows.d.ts.map +1 -0
- package/dist/react/accessible-rows.js +320 -0
- package/dist/react/accessible-rows.js.map +1 -0
- package/dist/react/cell-editor.d.ts +22 -0
- package/dist/react/cell-editor.d.ts.map +1 -0
- package/dist/react/cell-editor.js +431 -0
- package/dist/react/cell-editor.js.map +1 -0
- package/dist/react/cell-menu.d.ts +18 -0
- package/dist/react/cell-menu.d.ts.map +1 -0
- package/dist/react/cell-menu.js +299 -0
- package/dist/react/cell-menu.js.map +1 -0
- package/dist/react/column-menu.d.ts +16 -0
- package/dist/react/column-menu.d.ts.map +1 -0
- package/dist/react/column-menu.js +1311 -0
- package/dist/react/column-menu.js.map +1 -0
- package/dist/react/columns-menu.d.ts +7 -0
- package/dist/react/columns-menu.d.ts.map +1 -0
- package/dist/react/columns-menu.js +249 -0
- package/dist/react/columns-menu.js.map +1 -0
- package/dist/react/conditions-menu.d.ts +10 -0
- package/dist/react/conditions-menu.d.ts.map +1 -0
- package/dist/react/conditions-menu.js +795 -0
- package/dist/react/conditions-menu.js.map +1 -0
- package/dist/react/context.d.ts +29 -0
- package/dist/react/context.d.ts.map +1 -0
- package/dist/react/context.js +18 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/data-grid.d.ts +79 -0
- package/dist/react/data-grid.d.ts.map +1 -0
- package/dist/react/data-grid.js +653 -0
- package/dist/react/data-grid.js.map +1 -0
- package/dist/react/detail-panel.d.ts +22 -0
- package/dist/react/detail-panel.d.ts.map +1 -0
- package/dist/react/detail-panel.js +242 -0
- package/dist/react/detail-panel.js.map +1 -0
- package/dist/react/export-menu.d.ts +11 -0
- package/dist/react/export-menu.d.ts.map +1 -0
- package/dist/react/export-menu.js +304 -0
- package/dist/react/export-menu.js.map +1 -0
- package/dist/react/find-bar.d.ts +11 -0
- package/dist/react/find-bar.d.ts.map +1 -0
- package/dist/react/find-bar.js +303 -0
- package/dist/react/find-bar.js.map +1 -0
- package/dist/react/format-form.d.ts +12 -0
- package/dist/react/format-form.d.ts.map +1 -0
- package/dist/react/format-form.js +863 -0
- package/dist/react/format-form.js.map +1 -0
- package/dist/react/formula-menu.d.ts +6 -0
- package/dist/react/formula-menu.d.ts.map +1 -0
- package/dist/react/formula-menu.js +343 -0
- package/dist/react/formula-menu.js.map +1 -0
- package/dist/react/grid-body.d.ts +33 -0
- package/dist/react/grid-body.d.ts.map +1 -0
- package/dist/react/grid-body.js +1389 -0
- package/dist/react/grid-body.js.map +1 -0
- package/dist/react/group-menu.d.ts +7 -0
- package/dist/react/group-menu.d.ts.map +1 -0
- package/dist/react/group-menu.js +508 -0
- package/dist/react/group-menu.js.map +1 -0
- package/dist/react/hooks.d.ts +33 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +161 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/messages.d.ts +180 -0
- package/dist/react/messages.d.ts.map +1 -0
- package/dist/react/messages.js +414 -0
- package/dist/react/messages.js.map +1 -0
- package/dist/react/save.d.ts +9 -0
- package/dist/react/save.d.ts.map +1 -0
- package/dist/react/save.js +102 -0
- package/dist/react/save.js.map +1 -0
- package/dist/react/static-rows.d.ts +9 -0
- package/dist/react/static-rows.d.ts.map +1 -0
- package/dist/react/static-rows.js +176 -0
- package/dist/react/static-rows.js.map +1 -0
- package/dist/react/status-bar.d.ts +12 -0
- package/dist/react/status-bar.d.ts.map +1 -0
- package/dist/react/status-bar.js +413 -0
- package/dist/react/status-bar.js.map +1 -0
- package/dist/react/toolbar-popover.d.ts +14 -0
- package/dist/react/toolbar-popover.d.ts.map +1 -0
- package/dist/react/toolbar-popover.js +143 -0
- package/dist/react/toolbar-popover.js.map +1 -0
- package/dist/react/toolbar.d.ts +13 -0
- package/dist/react/toolbar.d.ts.map +1 -0
- package/dist/react/toolbar.js +344 -0
- package/dist/react/toolbar.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +45 -0
- package/dist/server.js.map +1 -0
- package/dist/styles.css +496 -316
- package/package.json +43 -18
- package/src/canvas/geometry.ts +197 -0
- package/src/canvas/grid-canvas.ts +1222 -0
- package/src/canvas/hooks.ts +61 -0
- package/src/canvas/keys.ts +96 -0
- package/src/canvas/layout.ts +77 -0
- package/src/canvas/scroll.ts +120 -0
- package/src/canvas/text.ts +155 -0
- package/src/{theme.ts → canvas/theme.ts} +14 -1
- package/src/core/cache.ts +247 -0
- package/src/core/checked.ts +64 -0
- package/src/core/client.ts +103 -0
- package/src/core/conditions.ts +89 -0
- package/src/core/evaluate.ts +221 -0
- package/src/core/filters.ts +268 -0
- package/src/core/format.ts +309 -0
- package/src/core/measures.ts +99 -0
- package/src/core/request-ids.ts +54 -0
- package/src/core/rows.ts +213 -0
- package/src/core/store.ts +1122 -0
- package/src/core/totals.ts +59 -0
- package/src/core/trace.ts +44 -0
- package/src/core/transports.ts +177 -0
- package/src/core/types.ts +168 -0
- package/src/core.ts +39 -0
- package/src/index.ts +24 -12
- package/src/react/accessible-rows.tsx +242 -0
- package/src/react/cell-editor.tsx +216 -0
- package/src/react/cell-menu.tsx +166 -0
- package/src/react/column-menu.tsx +619 -0
- package/src/react/columns-menu.tsx +116 -0
- package/src/react/conditions-menu.tsx +289 -0
- package/src/react/context.ts +33 -0
- package/src/react/data-grid.tsx +286 -0
- package/src/react/detail-panel.tsx +92 -0
- package/src/react/export-menu.tsx +112 -0
- package/src/react/find-bar.tsx +112 -0
- package/src/react/format-form.tsx +421 -0
- package/src/react/formula-menu.tsx +163 -0
- package/src/react/grid-body.tsx +744 -0
- package/src/react/group-menu.tsx +214 -0
- package/src/react/hooks.ts +104 -0
- package/src/react/messages.ts +556 -0
- package/src/react/save.ts +42 -0
- package/src/react/static-rows.tsx +59 -0
- package/src/react/status-bar.tsx +175 -0
- package/src/react/toolbar-popover.tsx +69 -0
- package/src/react/toolbar.tsx +152 -0
- package/src/server.ts +58 -0
- package/src/styles.css +496 -316
- package/dist/components/bars.d.ts +0 -14
- package/dist/components/bars.d.ts.map +0 -1
- package/dist/components/bars.js +0 -67
- package/dist/components/bars.js.map +0 -1
- package/dist/components/cell-inspector.d.ts +0 -11
- package/dist/components/cell-inspector.d.ts.map +0 -1
- package/dist/components/cell-inspector.js +0 -37
- package/dist/components/cell-inspector.js.map +0 -1
- package/dist/components/columns-panel.d.ts +0 -12
- package/dist/components/columns-panel.d.ts.map +0 -1
- package/dist/components/columns-panel.js +0 -11
- package/dist/components/columns-panel.js.map +0 -1
- package/dist/components/filter-panel.d.ts +0 -17
- package/dist/components/filter-panel.d.ts.map +0 -1
- package/dist/components/filter-panel.js +0 -165
- package/dist/components/filter-panel.js.map +0 -1
- package/dist/components/find-bar.d.ts +0 -9
- package/dist/components/find-bar.d.ts.map +0 -1
- package/dist/components/find-bar.js +0 -46
- package/dist/components/find-bar.js.map +0 -1
- package/dist/components/popover.d.ts +0 -38
- package/dist/components/popover.d.ts.map +0 -1
- package/dist/components/popover.js +0 -104
- package/dist/components/popover.js.map +0 -1
- package/dist/components/stats-panel.d.ts +0 -12
- package/dist/components/stats-panel.d.ts.map +0 -1
- package/dist/components/stats-panel.js +0 -40
- package/dist/components/stats-panel.js.map +0 -1
- package/dist/controller.d.ts +0 -218
- package/dist/controller.d.ts.map +0 -1
- package/dist/controller.js +0 -788
- package/dist/controller.js.map +0 -1
- package/dist/data-grid.d.ts +0 -51
- package/dist/data-grid.d.ts.map +0 -1
- package/dist/data-grid.js +0 -698
- package/dist/data-grid.js.map +0 -1
- package/dist/labels.d.ts +0 -9
- package/dist/labels.d.ts.map +0 -1
- package/dist/labels.js +0 -38
- package/dist/labels.js.map +0 -1
- package/dist/messages.d.ts +0 -99
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js +0 -276
- package/dist/messages.js.map +0 -1
- package/dist/renderer.d.ts +0 -52
- package/dist/renderer.d.ts.map +0 -1
- package/dist/renderer.js +0 -522
- package/dist/renderer.js.map +0 -1
- package/dist/text.d.ts +0 -14
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js +0 -63
- package/dist/text.js.map +0 -1
- package/dist/theme.d.ts.map +0 -1
- package/dist/theme.js +0 -54
- package/dist/theme.js.map +0 -1
- package/src/components/bars.tsx +0 -179
- package/src/components/cell-inspector.tsx +0 -70
- package/src/components/columns-panel.tsx +0 -59
- package/src/components/filter-panel.tsx +0 -290
- package/src/components/find-bar.tsx +0 -104
- package/src/components/popover.tsx +0 -194
- package/src/components/stats-panel.tsx +0 -153
- package/src/controller.ts +0 -887
- package/src/data-grid.tsx +0 -1029
- package/src/labels.ts +0 -46
- package/src/messages.ts +0 -390
- package/src/renderer.ts +0 -535
- package/src/text.ts +0 -55
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
2
|
+
import { use, useId, useRef, useState, useTransition } from "react";
|
|
3
|
+
import { CommandError } from "vastgrid-spec";
|
|
4
|
+
import { LocaleContext } from "./context.js";
|
|
5
|
+
import { useGridSelector, useGridStore } from "./hooks.js";
|
|
6
|
+
|
|
7
|
+
/** The media types of the formats of §8.2, for files that an engine answers as data. */
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
9
|
+
const MEDIA_TYPES = {
|
|
10
|
+
csv: "text/csv;charset=utf-8",
|
|
11
|
+
tsv: "text/tab-separated-values;charset=utf-8",
|
|
12
|
+
json: "application/json;charset=utf-8",
|
|
13
|
+
parquet: "application/vnd.apache.parquet",
|
|
14
|
+
xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/** Downloads a file at a URL, as a link with `download` does: under `name`, or the name the server gives. */
|
|
18
|
+
function download(url, name = "") {
|
|
19
|
+
const link = document.createElement("a");
|
|
20
|
+
link.href = url;
|
|
21
|
+
link.download = name;
|
|
22
|
+
link.rel = "noopener";
|
|
23
|
+
document.body.append(link);
|
|
24
|
+
link.click();
|
|
25
|
+
link.remove();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The toolbar's export menu (§6.6 of the specification): the rows of the view or the whole table, with the hidden
|
|
30
|
+
* columns or not, in one of the formats the engine exports. It runs as an Action: the button shows that it runs, and
|
|
31
|
+
* the outcome is announced. An export without a target is downloaded from where the transport gives it
|
|
32
|
+
* (`Transport.exportUrl`), or, from an engine that answers the file's bytes (`delivery` `data`), as a file made of
|
|
33
|
+
* them.
|
|
34
|
+
*/
|
|
35
|
+
export function ExportMenu(t0) {
|
|
36
|
+
const $ = _c(52);
|
|
37
|
+
const {
|
|
38
|
+
announce
|
|
39
|
+
} = t0;
|
|
40
|
+
const store = useGridStore();
|
|
41
|
+
const {
|
|
42
|
+
messages,
|
|
43
|
+
number
|
|
44
|
+
} = use(LocaleContext);
|
|
45
|
+
const formats = useGridSelector(_temp);
|
|
46
|
+
const [rows, setRows] = useState("view");
|
|
47
|
+
const [allColumns, setAllColumns] = useState(false);
|
|
48
|
+
const [pending, startExport] = useTransition();
|
|
49
|
+
const id = useId();
|
|
50
|
+
const buttonRef = useRef(null);
|
|
51
|
+
if (!formats || formats.length === 0) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
let t1;
|
|
55
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
56
|
+
t1 = event => {
|
|
57
|
+
const button = buttonRef.current;
|
|
58
|
+
if (event.newState !== "open" || !button) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const rect = button.getBoundingClientRect();
|
|
62
|
+
const menu = event.currentTarget;
|
|
63
|
+
menu.style.top = `${rect.bottom + 4}px`;
|
|
64
|
+
menu.style.left = `${Math.max(8, rect.right - menu.offsetWidth)}px`;
|
|
65
|
+
};
|
|
66
|
+
$[0] = t1;
|
|
67
|
+
} else {
|
|
68
|
+
t1 = $[0];
|
|
69
|
+
}
|
|
70
|
+
const place = t1;
|
|
71
|
+
let t2;
|
|
72
|
+
if ($[1] !== allColumns || $[2] !== announce || $[3] !== id || $[4] !== messages || $[5] !== number || $[6] !== rows || $[7] !== store) {
|
|
73
|
+
t2 = format => {
|
|
74
|
+
document.getElementById(id)?.hidePopover?.();
|
|
75
|
+
startExport(async () => {
|
|
76
|
+
const outcome = await store.dispatch({
|
|
77
|
+
command: "export",
|
|
78
|
+
format,
|
|
79
|
+
rows,
|
|
80
|
+
columns: allColumns ? "all" : "displayed"
|
|
81
|
+
});
|
|
82
|
+
if (!outcome.ok) {
|
|
83
|
+
const reason = outcome.error instanceof CommandError ? outcome.error.reason : null;
|
|
84
|
+
announce(messages.failed(reason === "not_loaded" ? messages.loading : outcome.error.message));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const result = outcome.output;
|
|
88
|
+
if (result.data) {
|
|
89
|
+
const url = URL.createObjectURL(new Blob([result.data.bytes], {
|
|
90
|
+
type: MEDIA_TYPES[format] ?? ""
|
|
91
|
+
}));
|
|
92
|
+
download(url, store.exportName(format));
|
|
93
|
+
setTimeout(() => URL.revokeObjectURL(url), 60000);
|
|
94
|
+
} else {
|
|
95
|
+
const url_0 = result.target === null ? null : store.exportUrl(result.target);
|
|
96
|
+
if (url_0) {
|
|
97
|
+
download(url_0);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
announce(messages.exported(number.format(result.rows)));
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
$[1] = allColumns;
|
|
104
|
+
$[2] = announce;
|
|
105
|
+
$[3] = id;
|
|
106
|
+
$[4] = messages;
|
|
107
|
+
$[5] = number;
|
|
108
|
+
$[6] = rows;
|
|
109
|
+
$[7] = store;
|
|
110
|
+
$[8] = t2;
|
|
111
|
+
} else {
|
|
112
|
+
t2 = $[8];
|
|
113
|
+
}
|
|
114
|
+
const run = t2;
|
|
115
|
+
const t3 = pending ? messages.exporting : messages.export;
|
|
116
|
+
let t4;
|
|
117
|
+
if ($[9] !== id || $[10] !== pending || $[11] !== t3) {
|
|
118
|
+
t4 = /*#__PURE__*/_jsx("button", {
|
|
119
|
+
ref: buttonRef,
|
|
120
|
+
type: "button",
|
|
121
|
+
className: "vg-button",
|
|
122
|
+
popoverTarget: id,
|
|
123
|
+
disabled: pending,
|
|
124
|
+
children: t3
|
|
125
|
+
});
|
|
126
|
+
$[9] = id;
|
|
127
|
+
$[10] = pending;
|
|
128
|
+
$[11] = t3;
|
|
129
|
+
$[12] = t4;
|
|
130
|
+
} else {
|
|
131
|
+
t4 = $[12];
|
|
132
|
+
}
|
|
133
|
+
const t5 = messages.export;
|
|
134
|
+
const t6 = `${id}-rows`;
|
|
135
|
+
const t7 = rows === "view";
|
|
136
|
+
let t8;
|
|
137
|
+
if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
|
|
138
|
+
t8 = () => setRows("view");
|
|
139
|
+
$[13] = t8;
|
|
140
|
+
} else {
|
|
141
|
+
t8 = $[13];
|
|
142
|
+
}
|
|
143
|
+
let t9;
|
|
144
|
+
if ($[14] !== t6 || $[15] !== t7) {
|
|
145
|
+
t9 = /*#__PURE__*/_jsx("input", {
|
|
146
|
+
type: "radio",
|
|
147
|
+
name: t6,
|
|
148
|
+
checked: t7,
|
|
149
|
+
onChange: t8
|
|
150
|
+
});
|
|
151
|
+
$[14] = t6;
|
|
152
|
+
$[15] = t7;
|
|
153
|
+
$[16] = t9;
|
|
154
|
+
} else {
|
|
155
|
+
t9 = $[16];
|
|
156
|
+
}
|
|
157
|
+
let t10;
|
|
158
|
+
if ($[17] !== messages.exportView || $[18] !== t9) {
|
|
159
|
+
t10 = /*#__PURE__*/_jsxs("label", {
|
|
160
|
+
children: [t9, messages.exportView]
|
|
161
|
+
});
|
|
162
|
+
$[17] = messages.exportView;
|
|
163
|
+
$[18] = t9;
|
|
164
|
+
$[19] = t10;
|
|
165
|
+
} else {
|
|
166
|
+
t10 = $[19];
|
|
167
|
+
}
|
|
168
|
+
const t11 = `${id}-rows`;
|
|
169
|
+
const t12 = rows === "table";
|
|
170
|
+
let t13;
|
|
171
|
+
if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
|
|
172
|
+
t13 = () => setRows("table");
|
|
173
|
+
$[20] = t13;
|
|
174
|
+
} else {
|
|
175
|
+
t13 = $[20];
|
|
176
|
+
}
|
|
177
|
+
let t14;
|
|
178
|
+
if ($[21] !== t11 || $[22] !== t12) {
|
|
179
|
+
t14 = /*#__PURE__*/_jsx("input", {
|
|
180
|
+
type: "radio",
|
|
181
|
+
name: t11,
|
|
182
|
+
checked: t12,
|
|
183
|
+
onChange: t13
|
|
184
|
+
});
|
|
185
|
+
$[21] = t11;
|
|
186
|
+
$[22] = t12;
|
|
187
|
+
$[23] = t14;
|
|
188
|
+
} else {
|
|
189
|
+
t14 = $[23];
|
|
190
|
+
}
|
|
191
|
+
let t15;
|
|
192
|
+
if ($[24] !== messages.exportTable || $[25] !== t14) {
|
|
193
|
+
t15 = /*#__PURE__*/_jsxs("label", {
|
|
194
|
+
children: [t14, messages.exportTable]
|
|
195
|
+
});
|
|
196
|
+
$[24] = messages.exportTable;
|
|
197
|
+
$[25] = t14;
|
|
198
|
+
$[26] = t15;
|
|
199
|
+
} else {
|
|
200
|
+
t15 = $[26];
|
|
201
|
+
}
|
|
202
|
+
let t16;
|
|
203
|
+
if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
|
|
204
|
+
t16 = event_0 => setAllColumns(event_0.target.checked);
|
|
205
|
+
$[27] = t16;
|
|
206
|
+
} else {
|
|
207
|
+
t16 = $[27];
|
|
208
|
+
}
|
|
209
|
+
let t17;
|
|
210
|
+
if ($[28] !== allColumns) {
|
|
211
|
+
t17 = /*#__PURE__*/_jsx("input", {
|
|
212
|
+
type: "checkbox",
|
|
213
|
+
checked: allColumns,
|
|
214
|
+
onChange: t16
|
|
215
|
+
});
|
|
216
|
+
$[28] = allColumns;
|
|
217
|
+
$[29] = t17;
|
|
218
|
+
} else {
|
|
219
|
+
t17 = $[29];
|
|
220
|
+
}
|
|
221
|
+
let t18;
|
|
222
|
+
if ($[30] !== messages.exportAllColumns || $[31] !== t17) {
|
|
223
|
+
t18 = /*#__PURE__*/_jsxs("label", {
|
|
224
|
+
children: [t17, messages.exportAllColumns]
|
|
225
|
+
});
|
|
226
|
+
$[30] = messages.exportAllColumns;
|
|
227
|
+
$[31] = t17;
|
|
228
|
+
$[32] = t18;
|
|
229
|
+
} else {
|
|
230
|
+
t18 = $[32];
|
|
231
|
+
}
|
|
232
|
+
let t19;
|
|
233
|
+
if ($[33] !== t10 || $[34] !== t15 || $[35] !== t18) {
|
|
234
|
+
t19 = /*#__PURE__*/_jsxs("fieldset", {
|
|
235
|
+
className: "vg-menu__group",
|
|
236
|
+
children: [t10, t15, t18]
|
|
237
|
+
});
|
|
238
|
+
$[33] = t10;
|
|
239
|
+
$[34] = t15;
|
|
240
|
+
$[35] = t18;
|
|
241
|
+
$[36] = t19;
|
|
242
|
+
} else {
|
|
243
|
+
t19 = $[36];
|
|
244
|
+
}
|
|
245
|
+
let t20;
|
|
246
|
+
if ($[37] !== formats || $[38] !== messages.exportFormats || $[39] !== run) {
|
|
247
|
+
let t21;
|
|
248
|
+
if ($[41] !== messages.exportFormats || $[42] !== run) {
|
|
249
|
+
t21 = format_0 => /*#__PURE__*/_jsx("button", {
|
|
250
|
+
type: "button",
|
|
251
|
+
className: "vg-menu__item",
|
|
252
|
+
onClick: () => run(format_0),
|
|
253
|
+
children: messages.exportFormats[format_0] ?? format_0
|
|
254
|
+
}, format_0);
|
|
255
|
+
$[41] = messages.exportFormats;
|
|
256
|
+
$[42] = run;
|
|
257
|
+
$[43] = t21;
|
|
258
|
+
} else {
|
|
259
|
+
t21 = $[43];
|
|
260
|
+
}
|
|
261
|
+
t20 = formats.map(t21);
|
|
262
|
+
$[37] = formats;
|
|
263
|
+
$[38] = messages.exportFormats;
|
|
264
|
+
$[39] = run;
|
|
265
|
+
$[40] = t20;
|
|
266
|
+
} else {
|
|
267
|
+
t20 = $[40];
|
|
268
|
+
}
|
|
269
|
+
let t21;
|
|
270
|
+
if ($[44] !== id || $[45] !== messages.export || $[46] !== t19 || $[47] !== t20) {
|
|
271
|
+
t21 = /*#__PURE__*/_jsxs("div", {
|
|
272
|
+
id: id,
|
|
273
|
+
popover: "auto",
|
|
274
|
+
role: "dialog",
|
|
275
|
+
className: "vg-menu",
|
|
276
|
+
"aria-label": t5,
|
|
277
|
+
onToggle: place,
|
|
278
|
+
children: [t19, t20]
|
|
279
|
+
});
|
|
280
|
+
$[44] = id;
|
|
281
|
+
$[45] = messages.export;
|
|
282
|
+
$[46] = t19;
|
|
283
|
+
$[47] = t20;
|
|
284
|
+
$[48] = t21;
|
|
285
|
+
} else {
|
|
286
|
+
t21 = $[48];
|
|
287
|
+
}
|
|
288
|
+
let t22;
|
|
289
|
+
if ($[49] !== t21 || $[50] !== t4) {
|
|
290
|
+
t22 = /*#__PURE__*/_jsxs(_Fragment, {
|
|
291
|
+
children: [t4, t21]
|
|
292
|
+
});
|
|
293
|
+
$[49] = t21;
|
|
294
|
+
$[50] = t4;
|
|
295
|
+
$[51] = t22;
|
|
296
|
+
} else {
|
|
297
|
+
t22 = $[51];
|
|
298
|
+
}
|
|
299
|
+
return t22;
|
|
300
|
+
}
|
|
301
|
+
function _temp(snapshot) {
|
|
302
|
+
return snapshot.table?.capabilities.export?.formats;
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=export-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["use","useId","useRef","useState","useTransition","CommandError","LocaleContext","useGridSelector","useGridStore","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","MEDIA_TYPES","csv","tsv","json","parquet","xlsx","download","url","name","link","document","createElement","href","rel","body","append","click","remove","ExportMenu","t0","$","_c","announce","store","messages","number","formats","_temp","rows","setRows","allColumns","setAllColumns","pending","startExport","id","buttonRef","length","t1","Symbol","for","event","button","current","newState","rect","getBoundingClientRect","menu","currentTarget","style","top","bottom","left","Math","max","right","offsetWidth","place","t2","format","getElementById","hidePopover","outcome","dispatch","command","columns","ok","reason","error","failed","loading","message","result","output","data","URL","createObjectURL","Blob","bytes","type","exportName","setTimeout","revokeObjectURL","url_0","target","exportUrl","exported","run","t3","exporting","export","t4","className","children","t5","t6","t7","t8","t9","checked","onChange","t10","exportView","t11","t12","t13","t14","t15","exportTable","t16","event_0","t17","t18","exportAllColumns","t19","t20","exportFormats","t21","format_0","onClick","map","popover","role","t22","snapshot","table","capabilities"],"sources":["export-menu.tsx"],"sourcesContent":["import { type ToggleEvent, use, useId, useRef, useState, useTransition } from \"react\";\nimport { CommandError } from \"vastgrid-spec\";\nimport { LocaleContext } from \"./context.js\";\nimport { useGridSelector, useGridStore } from \"./hooks.js\";\n\n/** The media types of the formats of §8.2, for files that an engine answers as data. */\nconst MEDIA_TYPES: Record<string, string> = {\n csv: \"text/csv;charset=utf-8\",\n tsv: \"text/tab-separated-values;charset=utf-8\",\n json: \"application/json;charset=utf-8\",\n parquet: \"application/vnd.apache.parquet\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n};\n\n/** Downloads a file at a URL, as a link with `download` does: under `name`, or the name the server gives. */\nfunction download(url: string, name = \"\") {\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = name;\n link.rel = \"noopener\";\n document.body.append(link);\n link.click();\n link.remove();\n}\n\n/**\n * The toolbar's export menu (§6.6 of the specification): the rows of the view or the whole table, with the hidden\n * columns or not, in one of the formats the engine exports. It runs as an Action: the button shows that it runs, and\n * the outcome is announced. An export without a target is downloaded from where the transport gives it\n * (`Transport.exportUrl`), or, from an engine that answers the file's bytes (`delivery` `data`), as a file made of\n * them.\n */\nexport function ExportMenu({ announce }: { announce: (text: string) => void }) {\n const store = useGridStore();\n const { messages, number } = use(LocaleContext);\n const formats = useGridSelector((snapshot) => snapshot.table?.capabilities.export?.formats);\n const [rows, setRows] = useState<\"view\" | \"table\">(\"view\");\n const [allColumns, setAllColumns] = useState(false);\n const [pending, startExport] = useTransition();\n const id = useId();\n const buttonRef = useRef<HTMLButtonElement>(null);\n if (!formats || formats.length === 0) return null;\n\n // The menu opens under its button, its right edge at the button's (popovers open in the middle otherwise).\n const place = (event: ToggleEvent<HTMLDivElement>) => {\n const button = buttonRef.current;\n if (event.newState !== \"open\" || !button) return;\n const rect = button.getBoundingClientRect();\n const menu = event.currentTarget;\n menu.style.top = `${rect.bottom + 4}px`;\n menu.style.left = `${Math.max(8, rect.right - menu.offsetWidth)}px`;\n };\n\n const run = (format: string) => {\n document.getElementById(id)?.hidePopover?.();\n startExport(async () => {\n const outcome = await store.dispatch({\n command: \"export\",\n format,\n rows,\n columns: allColumns ? \"all\" : \"displayed\",\n });\n if (!outcome.ok) {\n const reason = outcome.error instanceof CommandError ? outcome.error.reason : null;\n announce(messages.failed(reason === \"not_loaded\" ? messages.loading : outcome.error.message));\n return;\n }\n const result = outcome.output as { target: string | null; rows: number; data?: { bytes: Uint8Array } };\n if (result.data) {\n const url = URL.createObjectURL(\n new Blob([result.data.bytes as Uint8Array<ArrayBuffer>], { type: MEDIA_TYPES[format] ?? \"\" }),\n );\n download(url, store.exportName(format));\n // The link has started the download; the browser keeps the file's bytes until it is done.\n setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } else {\n const url = result.target === null ? null : store.exportUrl(result.target);\n if (url) download(url);\n }\n announce(messages.exported(number.format(result.rows)));\n });\n };\n\n return (\n <>\n <button ref={buttonRef} type=\"button\" className=\"vg-button\" popoverTarget={id} disabled={pending}>\n {pending ? messages.exporting : messages.export}\n </button>\n <div id={id} popover=\"auto\" role=\"dialog\" className=\"vg-menu\" aria-label={messages.export} onToggle={place}>\n <fieldset className=\"vg-menu__group\">\n <label>\n <input type=\"radio\" name={`${id}-rows`} checked={rows === \"view\"} onChange={() => setRows(\"view\")} />\n {messages.exportView}\n </label>\n <label>\n <input type=\"radio\" name={`${id}-rows`} checked={rows === \"table\"} onChange={() => setRows(\"table\")} />\n {messages.exportTable}\n </label>\n <label>\n <input type=\"checkbox\" checked={allColumns} onChange={(event) => setAllColumns(event.target.checked)} />\n {messages.exportAllColumns}\n </label>\n </fieldset>\n {formats.map((format) => (\n <button key={format} type=\"button\" className=\"vg-menu__item\" onClick={() => run(format)}>\n {messages.exportFormats[format] ?? format}\n </button>\n ))}\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type RefObject } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* The find bar (⌘F or Ctrl+F on the grid): finds the next cell of the view whose text contains what is typed, from
|
|
4
|
+
* the active cell, in the displayed columns (`GridStore.find`, `find` of §8.2), and makes it the active cell. Enter
|
|
5
|
+
* finds the next one, Shift+Enter the one before, and Esc closes the bar and gives the focus back to the grid.
|
|
6
|
+
*/
|
|
7
|
+
export declare function FindBar({ onClose, scrollerRef, }: {
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
scrollerRef: RefObject<HTMLDivElement | null>;
|
|
10
|
+
}): import("react").JSX.Element | null;
|
|
11
|
+
//# sourceMappingURL=find-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-bar.d.ts","sourceRoot":"","sources":["../../src/react/find-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,SAAS,EAAyD,MAAM,OAAO,CAAC;AAIlH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC/C,sCAgGA"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
2
|
+
import { use, useLayoutEffect, useRef, useState, useTransition } from "react";
|
|
3
|
+
import { LocaleContext } from "./context.js";
|
|
4
|
+
import { useGridSelector, useGridStore } from "./hooks.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The find bar (⌘F or Ctrl+F on the grid): finds the next cell of the view whose text contains what is typed, from
|
|
8
|
+
* the active cell, in the displayed columns (`GridStore.find`, `find` of §8.2), and makes it the active cell. Enter
|
|
9
|
+
* finds the next one, Shift+Enter the one before, and Esc closes the bar and gives the focus back to the grid.
|
|
10
|
+
*/
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
export function FindBar(t0) {
|
|
13
|
+
const $ = _c(51);
|
|
14
|
+
const {
|
|
15
|
+
onClose,
|
|
16
|
+
scrollerRef
|
|
17
|
+
} = t0;
|
|
18
|
+
const store = useGridStore();
|
|
19
|
+
const {
|
|
20
|
+
messages
|
|
21
|
+
} = use(LocaleContext);
|
|
22
|
+
const finds = useGridSelector(_temp);
|
|
23
|
+
const [text, setText] = useState("");
|
|
24
|
+
const [caseSensitive, setCaseSensitive] = useState(false);
|
|
25
|
+
const [status, setStatus] = useState("");
|
|
26
|
+
const [pending, startFind] = useTransition();
|
|
27
|
+
const inputRef = useRef(null);
|
|
28
|
+
let t1;
|
|
29
|
+
let t2;
|
|
30
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
31
|
+
t1 = () => {
|
|
32
|
+
inputRef.current?.focus();
|
|
33
|
+
inputRef.current?.select();
|
|
34
|
+
};
|
|
35
|
+
t2 = [];
|
|
36
|
+
$[0] = t1;
|
|
37
|
+
$[1] = t2;
|
|
38
|
+
} else {
|
|
39
|
+
t1 = $[0];
|
|
40
|
+
t2 = $[1];
|
|
41
|
+
}
|
|
42
|
+
useLayoutEffect(t1, t2);
|
|
43
|
+
let t3;
|
|
44
|
+
if ($[2] !== onClose || $[3] !== scrollerRef) {
|
|
45
|
+
t3 = () => {
|
|
46
|
+
onClose();
|
|
47
|
+
scrollerRef.current?.focus({
|
|
48
|
+
preventScroll: true
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
$[2] = onClose;
|
|
52
|
+
$[3] = scrollerRef;
|
|
53
|
+
$[4] = t3;
|
|
54
|
+
} else {
|
|
55
|
+
t3 = $[4];
|
|
56
|
+
}
|
|
57
|
+
const close = t3;
|
|
58
|
+
let t4;
|
|
59
|
+
if ($[5] !== caseSensitive || $[6] !== messages || $[7] !== store || $[8] !== text) {
|
|
60
|
+
t4 = direction => {
|
|
61
|
+
if (text === "") {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
startFind(async () => {
|
|
65
|
+
const {
|
|
66
|
+
session,
|
|
67
|
+
displayed
|
|
68
|
+
} = store.getSnapshot();
|
|
69
|
+
const from = session.active ?? {
|
|
70
|
+
row: 0,
|
|
71
|
+
column: displayed[0]?.column.name ?? ""
|
|
72
|
+
};
|
|
73
|
+
;
|
|
74
|
+
try {
|
|
75
|
+
const found = await store.find(text, {
|
|
76
|
+
from,
|
|
77
|
+
direction,
|
|
78
|
+
caseSensitive
|
|
79
|
+
});
|
|
80
|
+
if (!found) {
|
|
81
|
+
setStatus(messages.noMatches);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
setStatus("");
|
|
85
|
+
await store.dispatch({
|
|
86
|
+
command: "select",
|
|
87
|
+
row: found.row,
|
|
88
|
+
column: found.column
|
|
89
|
+
});
|
|
90
|
+
} catch (t5) {
|
|
91
|
+
const error = t5;
|
|
92
|
+
setStatus(messages.failed(error instanceof Error ? error.message : String(error)));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
$[5] = caseSensitive;
|
|
97
|
+
$[6] = messages;
|
|
98
|
+
$[7] = store;
|
|
99
|
+
$[8] = text;
|
|
100
|
+
$[9] = t4;
|
|
101
|
+
} else {
|
|
102
|
+
t4 = $[9];
|
|
103
|
+
}
|
|
104
|
+
const find = t4;
|
|
105
|
+
let t5;
|
|
106
|
+
if ($[10] !== close || $[11] !== find) {
|
|
107
|
+
t5 = event => {
|
|
108
|
+
if (event.nativeEvent.isComposing || event.keyCode === 229) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (event.key === "Escape") {
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
close();
|
|
114
|
+
} else {
|
|
115
|
+
if (event.key === "Enter" && event.target === inputRef.current) {
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
find(event.shiftKey ? -1 : 1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
$[10] = close;
|
|
122
|
+
$[11] = find;
|
|
123
|
+
$[12] = t5;
|
|
124
|
+
} else {
|
|
125
|
+
t5 = $[12];
|
|
126
|
+
}
|
|
127
|
+
const onKeyDown = t5;
|
|
128
|
+
if (!finds) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
let t6;
|
|
132
|
+
if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
|
|
133
|
+
t6 = event_0 => {
|
|
134
|
+
setText(event_0.target.value);
|
|
135
|
+
setStatus("");
|
|
136
|
+
};
|
|
137
|
+
$[13] = t6;
|
|
138
|
+
} else {
|
|
139
|
+
t6 = $[13];
|
|
140
|
+
}
|
|
141
|
+
let t7;
|
|
142
|
+
if ($[14] !== messages.find || $[15] !== text) {
|
|
143
|
+
t7 = /*#__PURE__*/_jsx("input", {
|
|
144
|
+
ref: inputRef,
|
|
145
|
+
type: "search",
|
|
146
|
+
className: "vg-input vg-find__input",
|
|
147
|
+
"aria-label": messages.find,
|
|
148
|
+
placeholder: messages.find,
|
|
149
|
+
value: text,
|
|
150
|
+
onChange: t6
|
|
151
|
+
});
|
|
152
|
+
$[14] = messages.find;
|
|
153
|
+
$[15] = text;
|
|
154
|
+
$[16] = t7;
|
|
155
|
+
} else {
|
|
156
|
+
t7 = $[16];
|
|
157
|
+
}
|
|
158
|
+
let t8;
|
|
159
|
+
if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
|
|
160
|
+
t8 = event_1 => setCaseSensitive(event_1.target.checked);
|
|
161
|
+
$[17] = t8;
|
|
162
|
+
} else {
|
|
163
|
+
t8 = $[17];
|
|
164
|
+
}
|
|
165
|
+
let t9;
|
|
166
|
+
if ($[18] !== caseSensitive) {
|
|
167
|
+
t9 = /*#__PURE__*/_jsx("input", {
|
|
168
|
+
type: "checkbox",
|
|
169
|
+
checked: caseSensitive,
|
|
170
|
+
onChange: t8
|
|
171
|
+
});
|
|
172
|
+
$[18] = caseSensitive;
|
|
173
|
+
$[19] = t9;
|
|
174
|
+
} else {
|
|
175
|
+
t9 = $[19];
|
|
176
|
+
}
|
|
177
|
+
let t10;
|
|
178
|
+
if ($[20] !== messages.matchCase) {
|
|
179
|
+
t10 = /*#__PURE__*/_jsx("span", {
|
|
180
|
+
children: messages.matchCase
|
|
181
|
+
});
|
|
182
|
+
$[20] = messages.matchCase;
|
|
183
|
+
$[21] = t10;
|
|
184
|
+
} else {
|
|
185
|
+
t10 = $[21];
|
|
186
|
+
}
|
|
187
|
+
let t11;
|
|
188
|
+
if ($[22] !== t10 || $[23] !== t9) {
|
|
189
|
+
t11 = /*#__PURE__*/_jsxs("label", {
|
|
190
|
+
className: "vg-filter__value",
|
|
191
|
+
children: [t9, t10]
|
|
192
|
+
});
|
|
193
|
+
$[22] = t10;
|
|
194
|
+
$[23] = t9;
|
|
195
|
+
$[24] = t11;
|
|
196
|
+
} else {
|
|
197
|
+
t11 = $[24];
|
|
198
|
+
}
|
|
199
|
+
const t12 = pending || text === "";
|
|
200
|
+
let t13;
|
|
201
|
+
if ($[25] !== find) {
|
|
202
|
+
t13 = () => find(-1);
|
|
203
|
+
$[25] = find;
|
|
204
|
+
$[26] = t13;
|
|
205
|
+
} else {
|
|
206
|
+
t13 = $[26];
|
|
207
|
+
}
|
|
208
|
+
let t14;
|
|
209
|
+
if ($[27] !== messages.findPrevious || $[28] !== t12 || $[29] !== t13) {
|
|
210
|
+
t14 = /*#__PURE__*/_jsx("button", {
|
|
211
|
+
type: "button",
|
|
212
|
+
className: "vg-button vg-button--small",
|
|
213
|
+
"aria-label": messages.findPrevious,
|
|
214
|
+
disabled: t12,
|
|
215
|
+
onClick: t13,
|
|
216
|
+
children: "\u2191"
|
|
217
|
+
});
|
|
218
|
+
$[27] = messages.findPrevious;
|
|
219
|
+
$[28] = t12;
|
|
220
|
+
$[29] = t13;
|
|
221
|
+
$[30] = t14;
|
|
222
|
+
} else {
|
|
223
|
+
t14 = $[30];
|
|
224
|
+
}
|
|
225
|
+
const t15 = pending || text === "";
|
|
226
|
+
let t16;
|
|
227
|
+
if ($[31] !== find) {
|
|
228
|
+
t16 = () => find(1);
|
|
229
|
+
$[31] = find;
|
|
230
|
+
$[32] = t16;
|
|
231
|
+
} else {
|
|
232
|
+
t16 = $[32];
|
|
233
|
+
}
|
|
234
|
+
let t17;
|
|
235
|
+
if ($[33] !== messages.findNext || $[34] !== t15 || $[35] !== t16) {
|
|
236
|
+
t17 = /*#__PURE__*/_jsx("button", {
|
|
237
|
+
type: "button",
|
|
238
|
+
className: "vg-button vg-button--small",
|
|
239
|
+
"aria-label": messages.findNext,
|
|
240
|
+
disabled: t15,
|
|
241
|
+
onClick: t16,
|
|
242
|
+
children: "\u2193"
|
|
243
|
+
});
|
|
244
|
+
$[33] = messages.findNext;
|
|
245
|
+
$[34] = t15;
|
|
246
|
+
$[35] = t16;
|
|
247
|
+
$[36] = t17;
|
|
248
|
+
} else {
|
|
249
|
+
t17 = $[36];
|
|
250
|
+
}
|
|
251
|
+
let t18;
|
|
252
|
+
if ($[37] !== status) {
|
|
253
|
+
t18 = /*#__PURE__*/_jsx("span", {
|
|
254
|
+
className: "vg-find__status",
|
|
255
|
+
role: "status",
|
|
256
|
+
children: status
|
|
257
|
+
});
|
|
258
|
+
$[37] = status;
|
|
259
|
+
$[38] = t18;
|
|
260
|
+
} else {
|
|
261
|
+
t18 = $[38];
|
|
262
|
+
}
|
|
263
|
+
let t19;
|
|
264
|
+
if ($[39] !== close || $[40] !== messages.closeFind) {
|
|
265
|
+
t19 = /*#__PURE__*/_jsx("button", {
|
|
266
|
+
type: "button",
|
|
267
|
+
className: "vg-button vg-button--small",
|
|
268
|
+
"aria-label": messages.closeFind,
|
|
269
|
+
onClick: close,
|
|
270
|
+
children: "\xD7"
|
|
271
|
+
});
|
|
272
|
+
$[39] = close;
|
|
273
|
+
$[40] = messages.closeFind;
|
|
274
|
+
$[41] = t19;
|
|
275
|
+
} else {
|
|
276
|
+
t19 = $[41];
|
|
277
|
+
}
|
|
278
|
+
let t20;
|
|
279
|
+
if ($[42] !== messages.find || $[43] !== onKeyDown || $[44] !== t11 || $[45] !== t14 || $[46] !== t17 || $[47] !== t18 || $[48] !== t19 || $[49] !== t7) {
|
|
280
|
+
t20 = /*#__PURE__*/_jsxs("search", {
|
|
281
|
+
className: "vg-find",
|
|
282
|
+
"aria-label": messages.find,
|
|
283
|
+
onKeyDown: onKeyDown,
|
|
284
|
+
children: [t7, t11, t14, t17, t18, t19]
|
|
285
|
+
});
|
|
286
|
+
$[42] = messages.find;
|
|
287
|
+
$[43] = onKeyDown;
|
|
288
|
+
$[44] = t11;
|
|
289
|
+
$[45] = t14;
|
|
290
|
+
$[46] = t17;
|
|
291
|
+
$[47] = t18;
|
|
292
|
+
$[48] = t19;
|
|
293
|
+
$[49] = t7;
|
|
294
|
+
$[50] = t20;
|
|
295
|
+
} else {
|
|
296
|
+
t20 = $[50];
|
|
297
|
+
}
|
|
298
|
+
return t20;
|
|
299
|
+
}
|
|
300
|
+
function _temp(snapshot) {
|
|
301
|
+
return snapshot.table?.capabilities.find === true;
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=find-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["use","useLayoutEffect","useRef","useState","useTransition","LocaleContext","useGridSelector","useGridStore","jsx","_jsx","jsxs","_jsxs","FindBar","t0","$","_c","onClose","scrollerRef","store","messages","finds","_temp","text","setText","caseSensitive","setCaseSensitive","status","setStatus","pending","startFind","inputRef","t1","t2","Symbol","for","current","focus","select","t3","preventScroll","close","t4","direction","session","displayed","getSnapshot","from","active","row","column","name","found","find","noMatches","dispatch","command","t5","error","failed","Error","message","String","event","nativeEvent","isComposing","keyCode","key","preventDefault","target","shiftKey","onKeyDown","t6","event_0","value","t7","type","className","placeholder","onChange","t8","event_1","checked","t9","t10","matchCase","children","t11","t12","t13","t14","findPrevious","disabled","onClick","t15","t16","t17","findNext","t18","role","t19","closeFind","t20","snapshot","table","capabilities"],"sources":["find-bar.tsx"],"sourcesContent":["import { type KeyboardEvent, type RefObject, use, useLayoutEffect, useRef, useState, useTransition } from \"react\";\nimport { LocaleContext } from \"./context.js\";\nimport { useGridSelector, useGridStore } from \"./hooks.js\";\n\n/**\n * The find bar (⌘F or Ctrl+F on the grid): finds the next cell of the view whose text contains what is typed, from\n * the active cell, in the displayed columns (`GridStore.find`, `find` of §8.2), and makes it the active cell. Enter\n * finds the next one, Shift+Enter the one before, and Esc closes the bar and gives the focus back to the grid.\n */\nexport function FindBar({\n onClose,\n scrollerRef,\n}: {\n onClose: () => void;\n scrollerRef: RefObject<HTMLDivElement | null>;\n}) {\n const store = useGridStore();\n const { messages } = use(LocaleContext);\n const finds = useGridSelector((snapshot) => snapshot.table?.capabilities.find === true);\n const [text, setText] = useState(\"\");\n const [caseSensitive, setCaseSensitive] = useState(false);\n const [status, setStatus] = useState(\"\");\n const [pending, startFind] = useTransition();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useLayoutEffect(() => {\n inputRef.current?.focus();\n inputRef.current?.select();\n }, []);\n\n const close = () => {\n onClose();\n scrollerRef.current?.focus({ preventScroll: true });\n };\n\n const find = (direction: 1 | -1) => {\n if (text === \"\") return;\n startFind(async () => {\n const { session, displayed } = store.getSnapshot();\n const from = session.active ?? { row: 0, column: displayed[0]?.column.name ?? \"\" };\n try {\n const found = await store.find(text, { from, direction, caseSensitive });\n if (!found) {\n setStatus(messages.noMatches);\n return;\n }\n setStatus(\"\");\n await store.dispatch({ command: \"select\", row: found.row, column: found.column });\n } catch (error) {\n setStatus(messages.failed(error instanceof Error ? error.message : String(error)));\n }\n });\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n // Keys that end an IME's composition are the IME's.\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n } else if (event.key === \"Enter\" && event.target === inputRef.current) {\n event.preventDefault();\n find(event.shiftKey ? -1 : 1);\n }\n };\n\n if (!finds) return null;\n return (\n <search className=\"vg-find\" aria-label={messages.find} onKeyDown={onKeyDown}>\n <input\n ref={inputRef}\n type=\"search\"\n className=\"vg-input vg-find__input\"\n aria-label={messages.find}\n placeholder={messages.find}\n value={text}\n onChange={(event) => {\n setText(event.target.value);\n setStatus(\"\");\n }}\n />\n <label className=\"vg-filter__value\">\n <input type=\"checkbox\" checked={caseSensitive} onChange={(event) => setCaseSensitive(event.target.checked)} />\n <span>{messages.matchCase}</span>\n </label>\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n aria-label={messages.findPrevious}\n disabled={pending || text === \"\"}\n onClick={() => find(-1)}\n >\n ↑\n </button>\n <button\n type=\"button\"\n className=\"vg-button vg-button--small\"\n aria-label={messages.findNext}\n disabled={pending || text === \"\"}\n onClick={() => find(1)}\n >\n ↓\n </button>\n <span className=\"vg-find__status\" role=\"status\">\n {status}\n </span>\n <button type=\"button\" className=\"vg-button vg-button--small\" aria-label={messages.closeFind} onClick={close}>\n ×\n </button>\n </search>\n );\n}\n"],"mappings":";AAAA,SAA6CA,GAAG,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,aAAa,QAAQ,OAAO;AACjH,SAASC,aAAa,QAAQ,cAAc;AAC5C,SAASC,eAAe,EAAEC,YAAY,QAAQ,YAAY;;AAE1D;AACA;AACA;AACA;AACA;AAJA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAKA,OAAO,SAAAC,QAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAiB;IAAAC,OAAA;IAAAC;EAAA,IAAAJ,EAMvB;EACC,MAAAK,KAAA,GAAcX,YAAY,CAAC,CAAC;EAC5B;IAAAY;EAAA,IAAqBnB,GAAG,CAACK,aAAa,CAAC;EACvC,MAAAe,KAAA,GAAcd,eAAe,CAACe,KAAwD,CAAC;EACvF,OAAAC,IAAA,EAAAC,OAAA,IAAwBpB,QAAQ,CAAC,EAAE,CAAC;EACpC,OAAAqB,aAAA,EAAAC,gBAAA,IAA0CtB,QAAQ,CAAC,KAAK,CAAC;EACzD,OAAAuB,MAAA,EAAAC,SAAA,IAA4BxB,QAAQ,CAAC,EAAE,CAAC;EACxC,OAAAyB,OAAA,EAAAC,SAAA,IAA6BzB,aAAa,CAAC,CAAC;EAC5C,MAAA0B,QAAA,GAAiB5B,MAAM,CAAmB,IAAI,CAAC;EAAC,IAAA6B,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAlB,CAAA,QAAAmB,MAAA,CAAAC,GAAA;IAEhCH,EAAA,GAAAA,CAAA;MACdD,QAAQ,CAAAK,OAAe,EAAAC,KAAE,CAAD,CAAC;MACzBN,QAAQ,CAAAK,OAAgB,EAAAE,MAAE,CAAD,CAAC;IAAA,CAC3B;IAAEL,EAAA,KAAE;IAAAlB,CAAA,MAAAiB,EAAA;IAAAjB,CAAA,MAAAkB,EAAA;EAAA;IAAAD,EAAA,GAAAjB,CAAA;IAAAkB,EAAA,GAAAlB,CAAA;EAAA;EAHLb,eAAe,CAAC8B,EAGf,EAAEC,EAAE,CAAC;EAAA,IAAAM,EAAA;EAAA,IAAAxB,CAAA,QAAAE,OAAA,IAAAF,CAAA,QAAAG,WAAA;IAEQqB,EAAA,GAAAA,CAAA;MACZtB,OAAO,CAAC,CAAC;MACTC,WAAW,CAAAkB,OAAe,EAAAC,KAAyB,CAAxB;QAAAG,aAAA,EAAiB;MAAK,CAAC,CAAC;IAAA,CACpD;IAAAzB,CAAA,MAAAE,OAAA;IAAAF,CAAA,MAAAG,WAAA;IAAAH,CAAA,MAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EAHD,MAAA0B,KAAA,GAAcF,EAGb;EAAC,IAAAG,EAAA;EAAA,IAAA3B,CAAA,QAAAU,aAAA,IAAAV,CAAA,QAAAK,QAAA,IAAAL,CAAA,QAAAI,KAAA,IAAAJ,CAAA,QAAAQ,IAAA;IAEWmB,EAAA,GAAAC,SAAA;MACX,IAAIpB,IAAI,KAAK,EAAE;QAAA;MAAA;MACfO,SAAS,CAAC;QACR;UAAAc,OAAA;UAAAC;QAAA,IAA+B1B,KAAK,CAAA2B,WAAY,CAAC,CAAC;QAClD,MAAAC,IAAA,GAAaH,OAAO,CAAAI,MAA8D,IAArE;UAAAC,GAAA,EAAyB,CAAC;UAAAC,MAAA,EAAUL,SAAS,GAAW,EAAAK,MAAK,CAAAC,IAAM,IAA/B;QAAgC,CAAC;QAAC;QACnF;UACE,MAAAC,KAAA,GAAc,MAAMjC,KAAK,CAAAkC,IAAK,CAAC9B,IAAI,EAAE;YAAAwB,IAAA;YAAAJ,SAAA;YAAAlB;UAAiC,CAAC,CAAC;UACxE,IAAI,CAAC2B,KAAK;YACRxB,SAAS,CAACR,QAAQ,CAAAkC,SAAU,CAAC;YAAA;UAAA;UAG/B1B,SAAS,CAAC,EAAE,CAAC;UACb,MAAMT,KAAK,CAAAoC,QAAS,CAAC;YAAAC,OAAA,EAAW,QAAQ;YAAAP,GAAA,EAAOG,KAAK,CAAAH,GAAI;YAAAC,MAAA,EAAUE,KAAK,CAAAF;UAAQ,CAAC,CAAC;QAAA,SAAAO,EAAA;UAC1EC,KAAA,CAAAA,KAAA,CAAAA,CAAA,CAAAA,EAAK;UACZ9B,SAAS,CAACR,QAAQ,CAAAuC,MAAO,CAACD,KAAK,YAAYE,KAAqC,GAA7BF,KAAK,CAAAG,OAAwB,GAAbC,MAAM,CAACJ,KAAK,CAAC,CAAC,CAAC;QAAA;MACnF,CACF,CAAC;IAAA,CACH;IAAA3C,CAAA,MAAAU,aAAA;IAAAV,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAI,KAAA;IAAAJ,CAAA,MAAAQ,IAAA;IAAAR,CAAA,MAAA2B,EAAA;EAAA;IAAAA,EAAA,GAAA3B,CAAA;EAAA;EAjBD,MAAAsC,IAAA,GAAaX,EAiBZ;EAAC,IAAAe,EAAA;EAAA,IAAA1C,CAAA,SAAA0B,KAAA,IAAA1B,CAAA,SAAAsC,IAAA;IAEgBI,EAAA,GAAAM,KAAA;MAEhB,IAAIA,KAAK,CAAAC,WAAY,CAAAC,WAAqC,IAArBF,KAAK,CAAAG,OAAQ,KAAK,GAAG;QAAA;MAAA;MAC1D,IAAIH,KAAK,CAAAI,GAAI,KAAK,QAAQ;QACxBJ,KAAK,CAAAK,cAAe,CAAC,CAAC;QACtB3B,KAAK,CAAC,CAAC;MAAA;QACF,IAAIsB,KAAK,CAAAI,GAAI,KAAK,OAA4C,IAAjCJ,KAAK,CAAAM,MAAO,KAAKtC,QAAQ,CAAAK,OAAQ;UACnE2B,KAAK,CAAAK,cAAe,CAAC,CAAC;UACtBf,IAAI,CAACU,KAAK,CAAAO,QAAkB,GAAvB,EAAuB,GAAvB,CAAuB,CAAC;QAAA;MAC9B;IAAA,CACF;IAAAvD,CAAA,OAAA0B,KAAA;IAAA1B,CAAA,OAAAsC,IAAA;IAAAtC,CAAA,OAAA0C,EAAA;EAAA;IAAAA,EAAA,GAAA1C,CAAA;EAAA;EAVD,MAAAwD,SAAA,GAAkBd,EAUjB;EAED,IAAI,CAACpC,KAAK;IAAA,OAAS,IAAI;EAAA;EAAC,IAAAmD,EAAA;EAAA,IAAAzD,CAAA,SAAAmB,MAAA,CAAAC,GAAA;IAURqC,EAAA,GAAAC,OAAA;MACRjD,OAAO,CAACuC,OAAK,CAAAM,MAAO,CAAAK,KAAM,CAAC;MAC3B9C,SAAS,CAAC,EAAE,CAAC;IAAA,CACd;IAAAb,CAAA,OAAAyD,EAAA;EAAA;IAAAA,EAAA,GAAAzD,CAAA;EAAA;EAAA,IAAA4D,EAAA;EAAA,IAAA5D,CAAA,SAAAK,QAAA,CAAAiC,IAAA,IAAAtC,CAAA,SAAAQ,IAAA;IAVHoD,EAAA,gBAAAjE,IAAA;MACOqB,GAAQ,EAARA,QAAQ;MACR6C,IAAQ,EAAR,QAAQ;MACHC,SAAyB,EAAzB,yBAAyB;MACvB,cAAAzD,QAAQ,CAAAiC,IAAK;MACZyB,WAAa,EAAb1D,QAAQ,CAAAiC,IAAK;MACnB9B,KAAI,EAAJA,IAAI;MACDwD,QAGT,EAHSP;IAGT,CACF,CAAC;IAAAzD,CAAA,OAAAK,QAAA,CAAAiC,IAAA;IAAAtC,CAAA,OAAAQ,IAAA;IAAAR,CAAA,OAAA4D,EAAA;EAAA;IAAAA,EAAA,GAAA5D,CAAA;EAAA;EAAA,IAAAiE,EAAA;EAAA,IAAAjE,CAAA,SAAAmB,MAAA,CAAAC,GAAA;IAEyD6C,EAAA,GAAAC,OAAA,IAAWvD,gBAAgB,CAACqC,OAAK,CAAAM,MAAO,CAAAa,OAAQ,CAAC;IAAAnE,CAAA,OAAAiE,EAAA;EAAA;IAAAA,EAAA,GAAAjE,CAAA;EAAA;EAAA,IAAAoE,EAAA;EAAA,IAAApE,CAAA,SAAAU,aAAA;IAA1G0D,EAAA,gBAAAzE,IAAA;MAAYkE,IAAU,EAAV,UAAU;MAAUnD,OAAa,EAAbA,aAAa;MAAYsD,QAAiD,EAAjDC;IAAiD,CAAG,CAAC;IAAAjE,CAAA,OAAAU,aAAA;IAAAV,CAAA,OAAAoE,EAAA;EAAA;IAAAA,EAAA,GAAApE,CAAA;EAAA;EAAA,IAAAqE,GAAA;EAAA,IAAArE,CAAA,SAAAK,QAAA,CAAAiE,SAAA;IAC9GD,GAAA,gBAAA1E,IAAA;MAAA4E,QAAA,EAAOlE,QAAQ,CAAAiE;IAAU,CAAO,CAAC;IAAAtE,CAAA,OAAAK,QAAA,CAAAiE,SAAA;IAAAtE,CAAA,OAAAqE,GAAA;EAAA;IAAAA,GAAA,GAAArE,CAAA;EAAA;EAAA,IAAAwE,GAAA;EAAA,IAAAxE,CAAA,SAAAqE,GAAA,IAAArE,CAAA,SAAAoE,EAAA;IAFnCI,GAAA,gBAAA3E,KAAA;MAAiBiE,SAAkB,EAAlB,kBAAkB;MAAAS,QAAA,GACjCH,EAA8G,EAC9GC,GAAiC;IAAA,CAC5B,CAAC;IAAArE,CAAA,OAAAqE,GAAA;IAAArE,CAAA,OAAAoE,EAAA;IAAApE,CAAA,OAAAwE,GAAA;EAAA;IAAAA,GAAA,GAAAxE,CAAA;EAAA;EAKI,MAAAyE,GAAA,GAAA3D,OAAsB,IAAXN,IAAI,KAAK,EAAE;EAAA,IAAAkE,GAAA;EAAA,IAAA1E,CAAA,SAAAsC,IAAA;IACvBoC,GAAA,GAAAA,CAAA,KAAMpC,IAAI,CAAC,EAAE,CAAC;IAAAtC,CAAA,OAAAsC,IAAA;IAAAtC,CAAA,OAAA0E,GAAA;EAAA;IAAAA,GAAA,GAAA1E,CAAA;EAAA;EAAA,IAAA2E,GAAA;EAAA,IAAA3E,CAAA,SAAAK,QAAA,CAAAuE,YAAA,IAAA5E,CAAA,SAAAyE,GAAA,IAAAzE,CAAA,SAAA0E,GAAA;IALzBC,GAAA,gBAAAhF,IAAA;MACOkE,IAAQ,EAAR,QAAQ;MACHC,SAA4B,EAA5B,4BAA4B;MAC1B,cAAAzD,QAAQ,CAAAuE,YAAa;MACvBC,QAAsB,EAAtBJ,GAAsB;MACvBK,OAAc,EAAdJ,GAAc;MAAAH,QAAA,EACxB;IAED,CAAQ,CAAC;IAAAvE,CAAA,OAAAK,QAAA,CAAAuE,YAAA;IAAA5E,CAAA,OAAAyE,GAAA;IAAAzE,CAAA,OAAA0E,GAAA;IAAA1E,CAAA,OAAA2E,GAAA;EAAA;IAAAA,GAAA,GAAA3E,CAAA;EAAA;EAKG,MAAA+E,GAAA,GAAAjE,OAAsB,IAAXN,IAAI,KAAK,EAAE;EAAA,IAAAwE,GAAA;EAAA,IAAAhF,CAAA,SAAAsC,IAAA;IACvB0C,GAAA,GAAAA,CAAA,KAAM1C,IAAI,CAAC,CAAC,CAAC;IAAAtC,CAAA,OAAAsC,IAAA;IAAAtC,CAAA,OAAAgF,GAAA;EAAA;IAAAA,GAAA,GAAAhF,CAAA;EAAA;EAAA,IAAAiF,GAAA;EAAA,IAAAjF,CAAA,SAAAK,QAAA,CAAA6E,QAAA,IAAAlF,CAAA,SAAA+E,GAAA,IAAA/E,CAAA,SAAAgF,GAAA;IALxBC,GAAA,gBAAAtF,IAAA;MACOkE,IAAQ,EAAR,QAAQ;MACHC,SAA4B,EAA5B,4BAA4B;MAC1B,cAAAzD,QAAQ,CAAA6E,QAAS;MACnBL,QAAsB,EAAtBE,GAAsB;MACvBD,OAAa,EAAbE,GAAa;MAAAT,QAAA,EACvB;IAED,CAAQ,CAAC;IAAAvE,CAAA,OAAAK,QAAA,CAAA6E,QAAA;IAAAlF,CAAA,OAAA+E,GAAA;IAAA/E,CAAA,OAAAgF,GAAA;IAAAhF,CAAA,OAAAiF,GAAA;EAAA;IAAAA,GAAA,GAAAjF,CAAA;EAAA;EAAA,IAAAmF,GAAA;EAAA,IAAAnF,CAAA,SAAAY,MAAA;IACTuE,GAAA,gBAAAxF,IAAA;MAAgBmE,SAAiB,EAAjB,iBAAiB;MAAMsB,IAAQ,EAAR,QAAQ;MAAAb,QAAA,EAC5C3D;IAAM,CACH,CAAC;IAAAZ,CAAA,OAAAY,MAAA;IAAAZ,CAAA,OAAAmF,GAAA;EAAA;IAAAA,GAAA,GAAAnF,CAAA;EAAA;EAAA,IAAAqF,GAAA;EAAA,IAAArF,CAAA,SAAA0B,KAAA,IAAA1B,CAAA,SAAAK,QAAA,CAAAiF,SAAA;IACPD,GAAA,gBAAA1F,IAAA;MAAakE,IAAQ,EAAR,QAAQ;MAAWC,SAA4B,EAA5B,4BAA4B;MAAa,cAAAzD,QAAQ,CAAAiF,SAAU;MAAW5D,OAAK,EAALA,KAAK;MAAA6C,QAAA,EAAE;IAE7G,CAAQ,CAAC;IAAAvE,CAAA,OAAA0B,KAAA;IAAA1B,CAAA,OAAAK,QAAA,CAAAiF,SAAA;IAAAtF,CAAA,OAAAqF,GAAA;EAAA;IAAAA,GAAA,GAAArF,CAAA;EAAA;EAAA,IAAAuF,GAAA;EAAA,IAAAvF,CAAA,SAAAK,QAAA,CAAAiC,IAAA,IAAAtC,CAAA,SAAAwD,SAAA,IAAAxD,CAAA,SAAAwE,GAAA,IAAAxE,CAAA,SAAA2E,GAAA,IAAA3E,CAAA,SAAAiF,GAAA,IAAAjF,CAAA,SAAAmF,GAAA,IAAAnF,CAAA,SAAAqF,GAAA,IAAArF,CAAA,SAAA4D,EAAA;IAxCX2B,GAAA,gBAAA1F,KAAA;MAAkBiE,SAAS,EAAT,SAAS;MAAa,cAAAzD,QAAQ,CAAAiC,IAAK;MAAakB,SAAS,EAATA,SAAS;MAAAe,QAAA,GACzEX,EAWE,EACFY,GAGQ,EACRG,GAQS,EACTM,GAQS,EACTE,GAEO,EACPE,GAES;IAAA,CACH,CAAC;IAAArF,CAAA,OAAAK,QAAA,CAAAiC,IAAA;IAAAtC,CAAA,OAAAwD,SAAA;IAAAxD,CAAA,OAAAwE,GAAA;IAAAxE,CAAA,OAAA2E,GAAA;IAAA3E,CAAA,OAAAiF,GAAA;IAAAjF,CAAA,OAAAmF,GAAA;IAAAnF,CAAA,OAAAqF,GAAA;IAAArF,CAAA,OAAA4D,EAAA;IAAA5D,CAAA,OAAAuF,GAAA;EAAA;IAAAA,GAAA,GAAAvF,CAAA;EAAA;EAAA,OAzCTuF,GAyCS;AAAA;AApGN,SAAAhF,MAAAiF,QAAA;EAAA,OASuCA,QAAQ,CAAAC,KAAoB,EAAAC,YAAK,CAAApD,IAAA,KAAK,IAAI;AAAA","ignoreList":[]}
|