@schemavaults/ui 0.67.0 → 0.68.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type ColumnDef, type VisibilityState, type Row, type CellContext, type Cell } from "@tanstack/react-table";
|
|
1
|
+
import { type ColumnDef, type VisibilityState, type Row, type CellContext, type Cell, type RowSelectionState } from "@tanstack/react-table";
|
|
2
2
|
import { type ReactElement, type FC } from "react";
|
|
3
|
-
export type { ColumnDef, ColumnDef as DatatableColumnDef, Row as DatatableRow, CellContext as DatatableCellContext, Cell as DatatableCell, };
|
|
3
|
+
export type { ColumnDef, ColumnDef as DatatableColumnDef, Row as DatatableRow, CellContext as DatatableCellContext, Cell as DatatableCell, RowSelectionState, RowSelectionState as DatatableRowSelectionState, };
|
|
4
4
|
export interface DatatableProps<TData extends object, TValue = unknown> {
|
|
5
5
|
data: TData[];
|
|
6
6
|
columns: ColumnDef<TData, TValue>[];
|
|
@@ -27,6 +27,36 @@ export interface DatatableProps<TData extends object, TValue = unknown> {
|
|
|
27
27
|
id: string;
|
|
28
28
|
desc: boolean;
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Renders a leading checkbox column (with a select-all checkbox in the header)
|
|
32
|
+
* so rows can be selected. Selection state is reflected by `row.getIsSelected()`
|
|
33
|
+
* and highlights the row. Defaults to false.
|
|
34
|
+
*
|
|
35
|
+
* Selection can be observed/controlled regardless of this flag via
|
|
36
|
+
* `selected` / `onSelectedChange`; this prop only toggles the built-in
|
|
37
|
+
* checkbox UI. Provide your own column if you want custom selection controls.
|
|
38
|
+
*/
|
|
39
|
+
enableRowSelection?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Controlled row-selection state, keyed by row id (see `getRowId`). When
|
|
42
|
+
* provided, the component becomes controlled and renders exactly this
|
|
43
|
+
* selection. Pair with `onSelectedChange` to update it. Omit for uncontrolled
|
|
44
|
+
* behavior with internally-managed selection.
|
|
45
|
+
*/
|
|
46
|
+
selected?: RowSelectionState;
|
|
47
|
+
/**
|
|
48
|
+
* Called with the next row-selection state whenever the selection changes
|
|
49
|
+
* (e.g. a checkbox is toggled). Receives a fully-resolved `RowSelectionState`
|
|
50
|
+
* — a `Record<rowId, boolean>` — so a `useState` setter can be passed directly.
|
|
51
|
+
*/
|
|
52
|
+
onSelectedChange?: (selected: RowSelectionState) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Resolves the unique id for a row, which becomes the key used in the
|
|
55
|
+
* selection state. Defaults to the row index. Provide this (e.g.
|
|
56
|
+
* `(user) => user.id`) so controlled selection keys map to your own ids
|
|
57
|
+
* and stay stable across sorting, filtering, and pagination.
|
|
58
|
+
*/
|
|
59
|
+
getRowId?: (originalRow: TData, index: number) => string;
|
|
30
60
|
}
|
|
31
|
-
export declare function Datatable<TData extends object, TValue = unknown>({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter, HeaderButtons, defaultPageSize, pageSizeOptions, sortableColumns, defaultSort, }: DatatableProps<TData, TValue>): ReactElement;
|
|
61
|
+
export declare function Datatable<TData extends object, TValue = unknown>({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter, HeaderButtons, defaultPageSize, pageSizeOptions, sortableColumns, defaultSort, enableRowSelection, selected, onSelectedChange, getRowId, }: DatatableProps<TData, TValue>): ReactElement;
|
|
32
62
|
export default Datatable;
|
|
@@ -3,20 +3,38 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table";
|
|
4
4
|
import { ArrowDown, ArrowUp, ArrowUpDown, ChevronDown } from "lucide-react";
|
|
5
5
|
import { Button } from "../../ui/button";
|
|
6
|
+
import { Checkbox } from "../../ui/checkbox";
|
|
6
7
|
import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger, } from "../../ui/dropdown-menu";
|
|
7
8
|
import { Input } from "../../ui/input";
|
|
8
9
|
import { PaginationControls } from "../../ui/pagination";
|
|
9
10
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../ui/select";
|
|
10
11
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "../../ui/table";
|
|
11
|
-
import { useMemo, useState } from "react";
|
|
12
|
+
import { useCallback, useMemo, useState, } from "react";
|
|
12
13
|
/** Default page size options shown in the rows-per-page selector. */
|
|
13
14
|
const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
14
|
-
|
|
15
|
+
/** Column id for the built-in checkbox selection column. */
|
|
16
|
+
const SELECTION_COLUMN_ID = "__select__";
|
|
17
|
+
export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel, searchColumn, enableGlobalFilter = false, HeaderButtons, defaultPageSize = 10, pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS, sortableColumns, defaultSort, enableRowSelection = false, selected, onSelectedChange, getRowId, }) {
|
|
15
18
|
const [sorting, setSorting] = useState(defaultSort ? [defaultSort] : []);
|
|
16
19
|
const [columnFilters, setColumnFilters] = useState([]);
|
|
17
20
|
const [globalFilter, setGlobalFilter] = useState("");
|
|
18
21
|
const [columnVisibility, setColumnVisibility] = useState(initialVisibleColumns);
|
|
19
|
-
|
|
22
|
+
// Row selection supports both controlled (`selected` provided) and
|
|
23
|
+
// uncontrolled (internal state) usage. When controlled, `selected` is the
|
|
24
|
+
// source of truth; otherwise we manage it locally. Either way,
|
|
25
|
+
// `onSelectedChange` is notified with the fully-resolved next selection.
|
|
26
|
+
const [internalRowSelection, setInternalRowSelection] = useState({});
|
|
27
|
+
const isSelectionControlled = selected !== undefined;
|
|
28
|
+
const rowSelection = selected ?? internalRowSelection;
|
|
29
|
+
const handleRowSelectionChange = useCallback((updaterOrValue) => {
|
|
30
|
+
const nextSelection = typeof updaterOrValue === "function"
|
|
31
|
+
? updaterOrValue(rowSelection)
|
|
32
|
+
: updaterOrValue;
|
|
33
|
+
if (!isSelectionControlled) {
|
|
34
|
+
setInternalRowSelection(nextSelection);
|
|
35
|
+
}
|
|
36
|
+
onSelectedChange?.(nextSelection);
|
|
37
|
+
}, [isSelectionControlled, onSelectedChange, rowSelection]);
|
|
20
38
|
// Determine search mode
|
|
21
39
|
const tanstackGlobalSearchEnabled = enableGlobalFilter || Array.isArray(searchColumn);
|
|
22
40
|
const searchableColumns = Array.isArray(searchColumn)
|
|
@@ -45,9 +63,27 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
45
63
|
enableSorting: colId ? sortableSet.has(colId) : false,
|
|
46
64
|
};
|
|
47
65
|
}), [columns, sortableSet]);
|
|
66
|
+
// Optionally prepend a checkbox column for row selection. The header holds a
|
|
67
|
+
// select-all checkbox (indeterminate when only some page rows are selected)
|
|
68
|
+
// and each cell toggles that row.
|
|
69
|
+
const tableColumns = useMemo(() => {
|
|
70
|
+
if (!enableRowSelection) {
|
|
71
|
+
return columnsWithSorting;
|
|
72
|
+
}
|
|
73
|
+
const selectionColumn = {
|
|
74
|
+
id: SELECTION_COLUMN_ID,
|
|
75
|
+
header: ({ table }) => (_jsx(Checkbox, { checked: table.getIsAllPageRowsSelected() ||
|
|
76
|
+
(table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value), "aria-label": "Select all rows on this page" })),
|
|
77
|
+
cell: ({ row }) => (_jsx(Checkbox, { checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(!!value), "aria-label": "Select row" })),
|
|
78
|
+
enableSorting: false,
|
|
79
|
+
enableHiding: false,
|
|
80
|
+
};
|
|
81
|
+
return [selectionColumn, ...columnsWithSorting];
|
|
82
|
+
}, [enableRowSelection, columnsWithSorting]);
|
|
48
83
|
const table = useReactTable({
|
|
49
84
|
data,
|
|
50
|
-
columns:
|
|
85
|
+
columns: tableColumns,
|
|
86
|
+
...(getRowId && { getRowId }),
|
|
51
87
|
initialState: {
|
|
52
88
|
pagination: {
|
|
53
89
|
pageSize: defaultPageSize,
|
|
@@ -60,7 +96,7 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
60
96
|
getSortedRowModel: getSortedRowModel(),
|
|
61
97
|
getFilteredRowModel: getFilteredRowModel(),
|
|
62
98
|
onColumnVisibilityChange: setColumnVisibility,
|
|
63
|
-
onRowSelectionChange:
|
|
99
|
+
onRowSelectionChange: handleRowSelectionChange,
|
|
64
100
|
...(tanstackGlobalSearchEnabled && {
|
|
65
101
|
globalFilterFn: searchableColumns
|
|
66
102
|
? multiColumnFilterFn
|
|
@@ -98,7 +134,7 @@ export function Datatable({ data, columns, initialVisibleColumns, datatypeLabel,
|
|
|
98
134
|
return (_jsx(DropdownMenuCheckboxItem, { className: "capitalize cursor-pointer", checked: column.getIsVisible(), onCheckedChange: (value) => column.toggleVisibility(!!value), children: column["id"].toUpperCase() }, column.id));
|
|
99
135
|
}) })] })] })] }), _jsx("div", { className: "rounded-md border w-full", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => {
|
|
100
136
|
return (_jsx(TableHead, { children: header.isPlaceholder ? null : header.column.getCanSort() ? (_jsxs(Button, { variant: "ghost", className: "-ml-4", onClick: () => header.column.toggleSorting(header.column.getIsSorted() === "asc"), children: [flexRender(header.column.columnDef.header, header.getContext()), header.column.getIsSorted() === "asc" ? (_jsx(ArrowUp, { className: "ml-2 h-4 w-4" })) : header.column.getIsSorted() === "desc" ? (_jsx(ArrowDown, { className: "ml-2 h-4 w-4" })) : (_jsx(ArrowUpDown, { className: "ml-2 h-4 w-4" }))] })) : (flexRender(header.column.columnDef.header, header.getContext())) }, header.id));
|
|
101
|
-
}) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows?.length ? (table.getRowModel().rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() && "selected", children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx(TableRow, { children: _jsx(TableCell, { colSpan:
|
|
137
|
+
}) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows?.length ? (table.getRowModel().rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() && "selected", children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: table.getVisibleLeafColumns().length, className: "h-24 text-center", children: "No results." }) })) })] }) }), _jsxs("div", { className: "flex flex-col sm:flex-row items-center justify-between gap-4 py-4 w-full", children: [(enableRowSelection || isSelectionControlled) && (_jsxs("div", { className: "text-sm text-muted-foreground", children: [table.getFilteredSelectedRowModel().rows.length, " of", " ", table.getFilteredRowModel().rows.length, " row(s) selected."] })), _jsxs("div", { className: "flex flex-col sm:flex-row items-center gap-4 sm:ml-auto", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-muted-foreground whitespace-nowrap", children: "Rows per page" }), _jsxs(Select, { value: String(table.getState().pagination.pageSize), onValueChange: (value) => {
|
|
102
138
|
table.setPageSize(Number(value));
|
|
103
139
|
}, children: [_jsx(SelectTrigger, { size: "sm", className: "w-[70px]", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: pageSizeOptions.map((size) => (_jsx(SelectItem, { value: String(size), children: size }, size))) })] })] }), _jsx(PaginationControls, { className: "mx-0 w-auto justify-end", size: "sm", variant: "outline", page: table.getState().pagination.pageIndex + 1, totalPages: Math.max(1, table.getPageCount()), onPageChange: (nextPage) => {
|
|
104
140
|
table.setPageIndex(nextPage - 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datatable.js","sourceRoot":"","sources":["../../../../src/components/ui/datatable/datatable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EASL,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,
|
|
1
|
+
{"version":3,"file":"datatable.js","sourceRoot":"","sources":["../../../../src/components/ui/datatable/datatable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EASL,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,WAAW,EACX,OAAO,EACP,QAAQ,GAET,MAAM,OAAO,CAAC;AAYf,qEAAqE;AACrE,MAAM,yBAAyB,GAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAEvE,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,YAAY,CAAC;AA0DzC,MAAM,UAAU,SAAS,CAAyC,EAChE,IAAI,EACJ,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,kBAAkB,GAAG,KAAK,EAC1B,aAAa,EACb,eAAe,GAAG,EAAE,EACpB,eAAe,GAAG,yBAAgD,EAClE,eAAe,EACf,WAAW,EACX,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,EACR,gBAAgB,EAChB,QAAQ,GACsB;IAC9B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAqB,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,qBAAqB,CACtB,CAAC;IAEF,mEAAmE;IACnE,0EAA0E;IAC1E,+DAA+D;IAC/D,yEAAyE;IACzE,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GACnD,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAClC,MAAM,qBAAqB,GAAY,QAAQ,KAAK,SAAS,CAAC;IAC9D,MAAM,YAAY,GAAsB,QAAQ,IAAI,oBAAoB,CAAC;IACzE,MAAM,wBAAwB,GAAG,WAAW,CAC1C,CAAC,cAAc,EAAQ,EAAE;QACvB,MAAM,aAAa,GACjB,OAAO,cAAc,KAAK,UAAU;YAClC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;YAC9B,CAAC,CAAC,cAAc,CAAC;QACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,gBAAgB,EAAE,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CACxD,CAAC;IAEF,wBAAwB;IACxB,MAAM,2BAA2B,GAC/B,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,iBAAiB,GAAkC,KAAK,CAAC,OAAO,CACpE,YAAY,CACb;QACC,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,SAAS,CAAC;IAEd,wEAAwE;IACxE,MAAM,mBAAmB,GAAoB,CAC3C,GAAG,EACH,SAAS,EACT,WAAmB,EACV,EAAE;QACX,IAAI,CAAC,WAAW,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,MAAM,GAAW,WAAW,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;iBACvB,WAAW,EAAE;iBACb,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,yDAAyD;IACzD,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EACpC,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,6EAA6E;IAC7E,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CACH,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,MAAM,KAAK,GACR,GAAgC,CAAC,WAAW;YAC5C,GAAuB,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,GAAG;YACN,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;SACtD,CAAC;IACJ,CAAC,CAAC,EACJ,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;IAEF,6EAA6E;IAC7E,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,YAAY,GAAG,OAAO,CAA6B,GAAG,EAAE;QAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QACD,MAAM,eAAe,GAA6B;YAChD,EAAE,EAAE,mBAAmB;YACvB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAgB,EAAE,CAAC,CACnC,KAAC,QAAQ,IACP,OAAO,EACL,KAAK,CAAC,wBAAwB,EAAE;oBAChC,CAAC,KAAK,CAAC,yBAAyB,EAAE,IAAI,eAAe,CAAC,EAExD,eAAe,EAAE,CAAC,KAAK,EAAQ,EAAE,CAC/B,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAE/B,8BAA8B,GACzC,CACH;YACD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAgB,EAAE,CAAC,CAC/B,KAAC,QAAQ,IACP,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,EAC5B,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,EAC7B,eAAe,EAAE,CAAC,KAAK,EAAQ,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,gBAClD,YAAY,GACvB,CACH;YACD,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,OAAO,CAAC,eAAe,EAAE,GAAG,kBAAkB,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,aAAa,CAAC;QAC1B,IAAI;QACJ,OAAO,EAAE,YAAiD;QAC1D,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC7B,YAAY,EAAE;YACZ,UAAU,EAAE;gBACV,QAAQ,EAAE,eAAe;aAC1B;SACF;QACD,eAAe,EAAE,UAAU;QAC3B,qBAAqB,EAAE,gBAAgB;QACvC,eAAe,EAAE,eAAe,EAAE;QAClC,qBAAqB,EAAE,qBAAqB,EAAE;QAC9C,iBAAiB,EAAE,iBAAiB,EAAE;QACtC,mBAAmB,EAAE,mBAAmB,EAAE;QAC1C,wBAAwB,EAAE,mBAAmB;QAC7C,oBAAoB,EAAE,wBAAwB;QAC9C,GAAG,CAAC,2BAA2B,IAAI;YACjC,cAAc,EAAE,iBAAiB;gBAC/B,CAAC,CAAC,mBAAmB;gBACrB,CAAC,CAAC,gBAAgB;YACpB,oBAAoB,EAAE,eAAe;SACtC,CAAC;QACF,KAAK,EAAE;YACL,OAAO;YACP,aAAa;YACb,gBAAgB;YAChB,YAAY;YACZ,GAAG,CAAC,2BAA2B,IAAI,EAAE,YAAY,EAAE,CAAC;SACrD;KACF,CAAC,CAAC;IAEH,IAAI,kBAAkB,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,SAAS,CACjB,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,iDAAiD,aAE9D,eAAK,SAAS,EAAC,gEAAgE,aAC5E,CAAC,YAAY,IAAI,kBAAkB,CAAC,IAAI,CACvC,KAAC,KAAK,IACJ,WAAW,EAAE,UAAU,aAAa,CAAC,WAAW,EAAE,MAAM,EACxD,KAAK,EACH,2BAA2B;4BACzB,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,CAAE,KAAK;iCACJ,SAAS,CAAC,YAAsB,CAAC;gCAClC,EAAE,cAAc,EAAa,IAAI,EAAE,CAAC,EAE5C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,IAAI,2BAA2B,EAAE,CAAC;gCAChC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACtC,CAAC;iCAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gCAC5C,KAAK;qCACF,SAAS,CAAC,YAAY,CAAC;oCACxB,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACzC,CAAC;wBACH,CAAC,EACD,SAAS,EAAC,+BAA+B,GACzC,CACH,EACD,eAAK,SAAS,EAAC,4DAA4D,aAExE,OAAO,aAAa,KAAK,UAAU,IAAI,KAAC,aAAa,KAAG,EACzD,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,SAAS,yBACnC,KAAC,WAAW,IAAC,SAAS,EAAC,cAAc,GAAG,IACzC,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,KAAK;6CACH,aAAa,EAAE;6CACf,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;6CACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;4CACd,OAAO,CACL,KAAC,wBAAwB,IAEvB,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,EAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACzB,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,YAGjC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAPtB,MAAM,CAAC,EAAE,CAQW,CAC5B,CAAC;wCACJ,CAAC,CAAC,GACgB,IACT,IACX,IACF,EAEN,cAAK,SAAS,EAAC,0BAA0B,YACvC,MAAC,KAAK,eACJ,KAAC,WAAW,cACT,KAAK,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC5C,KAAC,QAAQ,cACN,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oCAClC,OAAO,CACL,KAAC,SAAS,cACP,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAC1D,MAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,OAAO,EACjB,OAAO,EAAE,GAAG,EAAE,CACZ,MAAM,CAAC,MAAM,CAAC,aAAa,CACzB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CACtC,aAGF,UAAU,CACT,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAC9B,MAAM,CAAC,UAAU,EAAE,CACpB,EACA,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CACvC,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,GAAG,CACrC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAC3C,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,CACvC,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,SAAS,EAAC,cAAc,GAAG,CACzC,IACM,CACV,CAAC,CAAC,CAAC,CACF,UAAU,CACR,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAC9B,MAAM,CAAC,UAAU,EAAE,CACpB,CACF,IA5Ba,MAAM,CAAC,EAAE,CA6Bb,CACb,CAAC;gCACJ,CAAC,CAAC,IAlCW,WAAW,CAAC,EAAE,CAmClB,CACZ,CAAC,GACU,EACd,KAAC,SAAS,cACP,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAClC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpC,KAAC,QAAQ,kBAEK,GAAG,CAAC,aAAa,EAAE,IAAI,UAAU,YAE5C,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnC,KAAC,SAAS,cACP,UAAU,CACT,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAC1B,IAAI,CAAC,UAAU,EAAE,CAClB,IAJa,IAAI,CAAC,EAAE,CAKX,CACb,CAAC,IAVG,GAAG,CAAC,EAAE,CAWF,CACZ,CAAC,CACH,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,cACP,KAAC,SAAS,IACR,OAAO,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAC7C,SAAS,EAAC,kBAAkB,4BAGlB,GACH,CACZ,GACS,IACN,GACJ,EAEN,eAAK,SAAS,EAAC,0EAA0E,aACtF,CAAC,kBAAkB,IAAI,qBAAqB,CAAC,IAAI,CAChD,eAAK,SAAS,EAAC,+BAA+B,aAC3C,KAAK,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,MAAM,SAAK,GAAG,EACvD,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,yBACpC,CACP,EACD,eAAK,SAAS,EAAC,yDAAyD,aAEtE,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,iDAAiD,8BAE1D,EACP,MAAC,MAAM,IACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EACnD,aAAa,EAAE,CAAC,KAAa,EAAE,EAAE;4CAC/B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wCACnC,CAAC,aAED,KAAC,aAAa,IAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,UAAU,YAC3C,KAAC,WAAW,KAAG,GACD,EAChB,KAAC,aAAa,cACX,eAAe,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CACrC,KAAC,UAAU,IAAY,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,YACvC,IAAI,IADU,IAAI,CAER,CACd,CAAC,GACY,IACT,IACL,EAEN,KAAC,kBAAkB,IACjB,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,EAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,EAC7C,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE;oCACzB,KAAK,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gCACnC,CAAC,EACD,aAAa,QACb,gBAAgB,QAChB,QAAQ,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,GACnC,IACE,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,SAAS,CAAC"}
|