@zevra/ui 0.42.0 → 0.43.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.
- package/DECISIONS.md +131 -0
- package/dist/css-inline.d.ts.map +1 -1
- package/dist/css-inline.js +1 -1
- package/dist/css-inline.js.map +1 -1
- package/dist/data-table.d.ts +45 -3
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +89 -8
- package/dist/data-table.js.map +1 -1
- package/dist/grille.d.ts +203 -0
- package/dist/grille.d.ts.map +1 -0
- package/dist/grille.js +809 -0
- package/dist/grille.js.map +1 -0
- package/dist/use-persisted-state.d.ts +14 -0
- package/dist/use-persisted-state.d.ts.map +1 -0
- package/dist/use-persisted-state.js +97 -0
- package/dist/use-persisted-state.js.map +1 -0
- package/package.json +16 -2
- package/react/css-inline.ts +1 -1
- package/react/data-table.tsx +148 -26
- package/react/grille.tsx +1480 -0
- package/react/use-persisted-state.ts +105 -0
- package/src/data.css +407 -3
- package/src/forms.css +14 -0
package/dist/css-inline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-inline.js","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAE1E;;;iEAGiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAW,
|
|
1
|
+
{"version":3,"file":"css-inline.js","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAE1E;;;iEAGiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAW,gw6SAAgw6S,CAAA;AAEny6S;;;yBAGyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAW,y3BAAy3B,CAAA"}
|
package/dist/data-table.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type RowData, type Table as TableTanstack } from '@tanstack/react-table';
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
import { type Column, type Header, type RowData, type Table as TableTanstack } from '@tanstack/react-table';
|
|
3
3
|
declare module '@tanstack/react-table' {
|
|
4
4
|
interface ColumnMeta<TData extends RowData, TValue> {
|
|
5
5
|
/** `nom` : colonne d'identité, la seule en encre pleine.
|
|
@@ -13,10 +13,36 @@ declare module '@tanstack/react-table' {
|
|
|
13
13
|
/** Largeur de la colonne dans la grille (syntaxe grid-template-columns).
|
|
14
14
|
* Par défaut : `minmax(0, 1fr)`. */
|
|
15
15
|
largeur?: string;
|
|
16
|
+
/** Famille du filtre de colonne dans la grille (`DataGrid`). Déduite
|
|
17
|
+
* des valeurs si absente : nombre, date (Date ou ISO), choix (peu de
|
|
18
|
+
* valeurs qui se répètent), texte. `false` retire le filtre. */
|
|
19
|
+
filtre?: 'texte' | 'nombre' | 'date' | 'choix' | false;
|
|
20
|
+
/** Classe de cellule supplémentaire, réservée au paquet (la case de
|
|
21
|
+
* sélection de la grille). Une app n'y écrit rien : le CSS du paquet
|
|
22
|
+
* est hors couche, une classe d'app y serait inerte. */
|
|
23
|
+
classe?: string;
|
|
16
24
|
}
|
|
17
25
|
}
|
|
26
|
+
/** Ce que reçoit un rendu d'en-tête substitué (`celluleEntete`) : la cellule
|
|
27
|
+
* telle que le tableau l'aurait rendue, classes, style et contenu compris.
|
|
28
|
+
* Le substitut l'ENVELOPPE (une poignée, un comportement), il ne la refait
|
|
29
|
+
* pas : c'est ce qui garde l'en-tête identique d'un tableau à l'autre. */
|
|
30
|
+
export interface CelluleEnteteProps<T> {
|
|
31
|
+
entete: Header<T, unknown>;
|
|
32
|
+
className: string;
|
|
33
|
+
style?: CSSProperties;
|
|
34
|
+
'aria-sort'?: 'ascending' | 'descending';
|
|
35
|
+
children: ReactNode;
|
|
36
|
+
}
|
|
18
37
|
export interface DataTableProps<T> {
|
|
19
38
|
table: TableTanstack<T>;
|
|
39
|
+
/** Remplace le rendu de chaque cellule d'en-tête. Sert à la grille
|
|
40
|
+
* (poignées de déplacement et de largeur) ; un tableau simple n'en a
|
|
41
|
+
* pas besoin. */
|
|
42
|
+
celluleEntete?: (props: CelluleEnteteProps<T>) => ReactNode;
|
|
43
|
+
/** Rangée posée SOUS les intitulés, avant les lignes : les filtres de
|
|
44
|
+
* colonne de la grille. */
|
|
45
|
+
sousEntete?: ReactNode;
|
|
20
46
|
/** Rendu à la place des lignes quand le modèle est vide. ⚠️ C'est la LIGNE
|
|
21
47
|
* d'absence qu'on attend ici (filtre trop étroit), pas l'écran d'absence :
|
|
22
48
|
* l'en-tête doit rester visible pour qu'on puisse élargir le filtre. */
|
|
@@ -24,7 +50,23 @@ export interface DataTableProps<T> {
|
|
|
24
50
|
/** Appelé au clic sur une ligne. Sans lui, la ligne n'est pas cliquable :
|
|
25
51
|
* et elle ne doit pas en avoir l'air. */
|
|
26
52
|
onRowClick?: (ligne: T) => void;
|
|
53
|
+
/** La ligne dont on regarde le détail (l'aperçu ouvert à côté de la
|
|
54
|
+
* liste). Elle porte un filet d'accent à gauche, distinct de la ligne
|
|
55
|
+
* COCHÉE, qui est une sélection pour agir. */
|
|
56
|
+
ligneActive?: (ligne: T) => boolean;
|
|
27
57
|
className?: string;
|
|
28
58
|
}
|
|
29
|
-
|
|
59
|
+
/** Classes et décalage d'une cellule épinglée (en-tête, filtres ou corps).
|
|
60
|
+
* Exporté pour la rangée de filtres de la grille, qui doit coller avec ses
|
|
61
|
+
* colonnes. */
|
|
62
|
+
export declare function epinglage<T>(c: Column<T, unknown>, table: TableTanstack<T>): {
|
|
63
|
+
classes: string | false;
|
|
64
|
+
style?: CSSProperties;
|
|
65
|
+
};
|
|
66
|
+
/** Les colonnes visibles DANS L'ORDRE DU RENDU : épinglées à gauche,
|
|
67
|
+
* centrales, épinglées à droite. C'est l'ordre des en-têtes et des cellules ;
|
|
68
|
+
* `getVisibleLeafColumns()`, lui, ignore l'épinglage, et un gabarit bâti
|
|
69
|
+
* dessus donne à la première colonne la largeur d'une autre. */
|
|
70
|
+
export declare function colonnesAffichees<T>(table: TableTanstack<T>): Column<T, unknown>[];
|
|
71
|
+
export declare function DataTable<T>({ table, vide, onRowClick, celluleEntete, sousEntete, ligneActive, className, }: DataTableProps<T>): import("react").JSX.Element;
|
|
30
72
|
//# sourceMappingURL=data-table.d.ts.map
|
package/dist/data-table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../react/data-table.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../react/data-table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,KAAK,KAAK,IAAI,aAAa,EAC5B,MAAM,uBAAuB,CAAA;AAM9B,OAAO,QAAQ,uBAAuB,CAAC;IAErC,UAAU,UAAU,CAAC,KAAK,SAAS,OAAO,EAAE,MAAM;QAChD;sEAC8D;QAC9D,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;QACxB;6DACqD;QACrD,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,8CAA8C;QAC9C,KAAK,CAAC,EAAE,SAAS,CAAA;QACjB;6CACqC;QACrC,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;yEAEiE;QACjE,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;QACtD;;iEAEyD;QACzD,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB;CACF;AAED;;;2EAG2E;AAC3E,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,WAAW,CAAC,EAAE,WAAW,GAAG,YAAY,CAAA;IACxC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB;;sBAEkB;IAClB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAA;IAC3D;gCAC4B;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;6EAEyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;8CAC0C;IAC1C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC/B;;mDAE+C;IAC/C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAA;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAcD;;gBAEgB;AAChB,wBAAgB,SAAS,CAAC,CAAC,EACzB,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EACrB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GACtB;IAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAiBpD;AAED;;;iEAGiE;AACjE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAMlF;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAC3B,KAAK,EACL,IAAI,EACJ,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,GACV,EAAE,cAAc,CAAC,CAAC,CAAC,+BA+HnB"}
|
package/dist/data-table.js
CHANGED
|
@@ -1,23 +1,103 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Tableau piloté par TanStack Table.
|
|
3
|
+
//
|
|
4
|
+
// ⚠️ CE FICHIER N'EST PAS DANS LE BARREL, et c'est délibéré :
|
|
5
|
+
// `@tanstack/react-table` est une dépendance OPTIONNELLE. L'importer depuis
|
|
6
|
+
// `@zevra/ui/react` casserait toutes les apps qui ne l'ont pas installée :
|
|
7
|
+
// une landing n'a aucun tableau. D'où le sous-chemin dédié :
|
|
8
|
+
//
|
|
9
|
+
// import { DataTable } from '@zevra/ui/react/table'
|
|
10
|
+
//
|
|
11
|
+
// POURQUOI TANSTACK plutôt que notre propre tri/pagination : tri multi-colonnes,
|
|
12
|
+
// filtres, groupement, virtualisation, sélection de lignes : c'est un travail
|
|
13
|
+
// de plusieurs mois que personne ici n'a envie de refaire, et mal. TanStack est
|
|
14
|
+
// HEADLESS : il ne rend rien, il calcule des modèles de lignes. Ce fichier lui
|
|
15
|
+
// donne l'apparence du paquet, exactement comme shadcn le fait avec ses
|
|
16
|
+
// variables. Aucune classe nouvelle n'entre par cette porte : ce sont les
|
|
17
|
+
// mêmes .zv-table / .zv-row / .zv-cell que le tableau écrit à la main.
|
|
18
|
+
import { Fragment } from 'react';
|
|
2
19
|
import { flexRender, } from '@tanstack/react-table';
|
|
3
20
|
import { cx } from './cx.js';
|
|
4
|
-
|
|
5
|
-
|
|
21
|
+
/** MODE GRILLE : activé par `enableColumnResizing`. Les largeurs viennent
|
|
22
|
+
* alors de TanStack en pixels (`size` = plancher, `columnSizing` = réglage
|
|
23
|
+
* de l'utilisateur), et les colonnes épinglées collent au bord du cadre.
|
|
24
|
+
* Sans ce réglage, le tableau rend exactement ce qu'il rendait avant. */
|
|
25
|
+
function piste(c, regle) {
|
|
26
|
+
const taille = c.getSize();
|
|
27
|
+
// Réglée ou épinglée : fixe. Sinon : un plancher, et une part de l'espace
|
|
28
|
+
// libre PROPORTIONNELLE au plancher, pour que les colonnes larges restent
|
|
29
|
+
// larges en s'étirant.
|
|
30
|
+
return regle || c.getIsPinned() ? `${taille}px` : `minmax(${taille}px, ${taille}fr)`;
|
|
31
|
+
}
|
|
32
|
+
/** Classes et décalage d'une cellule épinglée (en-tête, filtres ou corps).
|
|
33
|
+
* Exporté pour la rangée de filtres de la grille, qui doit coller avec ses
|
|
34
|
+
* colonnes. */
|
|
35
|
+
export function epinglage(c, table) {
|
|
36
|
+
const cote = c.getIsPinned();
|
|
37
|
+
if (!cote)
|
|
38
|
+
return { classes: false };
|
|
39
|
+
const voisines = cote === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();
|
|
40
|
+
const rang = voisines.findIndex((v) => v.id === c.id);
|
|
41
|
+
// Le bord : la dernière à gauche, la première à droite, celle qui touche
|
|
42
|
+
// ce qui défile.
|
|
43
|
+
const bord = cote === 'left' ? rang === voisines.length - 1 : rang === 0;
|
|
44
|
+
const decalage = cote === 'left'
|
|
45
|
+
? { px: c.getStart('left'), gouttieres: rang }
|
|
46
|
+
: { px: c.getAfter('right'), gouttieres: voisines.length - 1 - rang };
|
|
47
|
+
const valeur = `calc(${decalage.px}px + ${decalage.gouttieres} * var(--zv-grille-gap))`;
|
|
48
|
+
return {
|
|
49
|
+
classes: cx('zv-cell--pin', cote === 'right' && 'zv-cell--pin-droite', bord && 'zv-cell--pin-bord'),
|
|
50
|
+
style: cote === 'left' ? { left: valeur } : { right: valeur },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Les colonnes visibles DANS L'ORDRE DU RENDU : épinglées à gauche,
|
|
54
|
+
* centrales, épinglées à droite. C'est l'ordre des en-têtes et des cellules ;
|
|
55
|
+
* `getVisibleLeafColumns()`, lui, ignore l'épinglage, et un gabarit bâti
|
|
56
|
+
* dessus donne à la première colonne la largeur d'une autre. */
|
|
57
|
+
export function colonnesAffichees(table) {
|
|
58
|
+
return [
|
|
59
|
+
...table.getLeftVisibleLeafColumns(),
|
|
60
|
+
...table.getCenterVisibleLeafColumns(),
|
|
61
|
+
...table.getRightVisibleLeafColumns(),
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
export function DataTable({ table, vide, onRowClick, celluleEntete, sousEntete, ligneActive, className, }) {
|
|
65
|
+
const grille = table.options.enableColumnResizing === true;
|
|
66
|
+
const reglages = table.getState().columnSizing;
|
|
67
|
+
const colonnes = colonnesAffichees(table);
|
|
6
68
|
const gabarit = colonnes
|
|
7
|
-
.map((c) => c.columnDef.meta?.largeur ?? 'minmax(0, 1fr)')
|
|
69
|
+
.map((c) => grille ? piste(c, reglages[c.id] != null) : (c.columnDef.meta?.largeur ?? 'minmax(0, 1fr)'))
|
|
8
70
|
.join(' ');
|
|
9
71
|
const lignes = table.getRowModel().rows;
|
|
10
|
-
|
|
72
|
+
const style = { '--zv-cols': gabarit };
|
|
73
|
+
if (grille) {
|
|
74
|
+
style['--zv-cols-somme'] = `${colonnes.reduce((s, c) => s + c.getSize(), 0)}px`;
|
|
75
|
+
style['--zv-cols-n'] = String(colonnes.length);
|
|
76
|
+
}
|
|
77
|
+
return (_jsxs("div", { className: cx('zv-table', className), style: style, children: [table.getHeaderGroups().map((groupe) => (_jsx("div", { className: "zv-table__head", children: groupe.headers.map((entete) => {
|
|
11
78
|
const triable = entete.column.getCanSort();
|
|
12
79
|
const sens = entete.column.getIsSorted();
|
|
13
80
|
const registre = entete.column.columnDef.meta?.registre;
|
|
14
81
|
const contenu = entete.isPlaceholder
|
|
15
82
|
? null
|
|
16
83
|
: flexRender(entete.column.columnDef.header, entete.getContext());
|
|
17
|
-
|
|
18
|
-
|
|
84
|
+
const pin = grille ? epinglage(entete.column, table) : { classes: false };
|
|
85
|
+
const ariaSort = sens === 'asc' ? 'ascending' : sens === 'desc' ? 'descending' : undefined;
|
|
86
|
+
const props = {
|
|
87
|
+
entete,
|
|
88
|
+
className: cx('zv-cell', registre === 'num' && 'zv-cell--num', pin.classes),
|
|
89
|
+
style: pin.style,
|
|
90
|
+
// La colonne triée est annoncée : sans aria-sort, le tri est
|
|
91
|
+
// une information purement visuelle.
|
|
92
|
+
'aria-sort': ariaSort,
|
|
93
|
+
children: triable ? (_jsxs("button", { type: "button", className: "zv-sort", onClick: entete.column.getToggleSortingHandler(), children: [celluleEntete ? _jsx("span", { className: "zv-colhead__label", children: contenu }) : contenu, _jsx("span", { className: "zv-sort__mark", "aria-hidden": "true", children: sens === 'asc' ? '↑' : sens === 'desc' ? '↓' : '↕' })] })) : celluleEntete ? (_jsx("span", { className: "zv-colhead__label", children: contenu })) : (contenu),
|
|
94
|
+
};
|
|
95
|
+
if (celluleEntete)
|
|
96
|
+
return _jsx(Fragment, { children: celluleEntete(props) }, entete.id);
|
|
97
|
+
return (_jsx("div", { className: props.className, style: props.style, "aria-sort": props['aria-sort'], children: props.children }, entete.id));
|
|
98
|
+
}) }, groupe.id))), sousEntete, lignes.length === 0
|
|
19
99
|
? vide
|
|
20
|
-
: lignes.map((ligne) => (_jsx("div", { className:
|
|
100
|
+
: lignes.map((ligne) => (_jsx("div", { className: cx('zv-row', ligne.getIsSelected() && 'zv-row--selected', ligneActive?.(ligne.original) && 'zv-row--on'), "aria-current": ligneActive?.(ligne.original) || undefined,
|
|
21
101
|
// Le clavier suit le clic : une ligne cliquable qui n'est pas
|
|
22
102
|
// atteignable au clavier est une action inaccessible.
|
|
23
103
|
role: onRowClick ? 'button' : undefined, tabIndex: onRowClick ? 0 : undefined, style: onRowClick ? undefined : { cursor: 'default' }, onClick: onRowClick ? () => onRowClick(ligne.original) : undefined, onKeyDown: onRowClick
|
|
@@ -29,7 +109,8 @@ export function DataTable({ table, vide, onRowClick, className }) {
|
|
|
29
109
|
}
|
|
30
110
|
: undefined, children: ligne.getVisibleCells().map((cellule) => {
|
|
31
111
|
const meta = cellule.column.columnDef.meta;
|
|
32
|
-
|
|
112
|
+
const pin = grille ? epinglage(cellule.column, table) : { classes: false };
|
|
113
|
+
return (_jsxs("div", { className: cx('zv-cell', meta?.registre === 'nom' && 'zv-cell--name', meta?.registre === 'num' && 'zv-cell--num', meta?.classe, pin.classes), style: pin.style, children: [meta?.label && _jsx("span", { className: "zv-cell__label", children: meta.label }), flexRender(cellule.column.columnDef.cell, cellule.getContext()), meta?.unite && _jsx("span", { className: "zv-cell__unit", children: meta.unite })] }, cellule.id));
|
|
33
114
|
}) }, ligne.id)))] }));
|
|
34
115
|
}
|
|
35
116
|
//# sourceMappingURL=data-table.js.map
|
package/dist/data-table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","sourceRoot":"","sources":["../react/data-table.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"data-table.js","sourceRoot":"","sources":["../react/data-table.tsx"],"names":[],"mappings":"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"}
|
package/dist/grille.d.ts
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type Column, type ColumnDef, type ColumnOrderState, type ColumnPinningState, type ColumnSizingState, type FilterFn, type SortingState, type Table as TableTanstack, type VisibilityState } from '@tanstack/react-table';
|
|
3
|
+
import { usePersistedState } from './use-persisted-state.js';
|
|
4
|
+
export { usePersistedState };
|
|
5
|
+
/** Identifiant réservé de la colonne de cases. */
|
|
6
|
+
export declare const COLONNE_SELECTION = "__selection";
|
|
7
|
+
/** Ce que la grille enregistre, par tableau. Les filtres et la sélection
|
|
8
|
+
* n'en font PAS partie : retrouver un filtre oublié d'une visite à l'autre
|
|
9
|
+
* fait croire que des lignes ont disparu. */
|
|
10
|
+
export interface VueGrille {
|
|
11
|
+
columnOrder: ColumnOrderState;
|
|
12
|
+
columnVisibility: VisibilityState;
|
|
13
|
+
columnSizing: ColumnSizingState;
|
|
14
|
+
columnPinning: ColumnPinningState;
|
|
15
|
+
sorting: SortingState;
|
|
16
|
+
pageSize: number;
|
|
17
|
+
}
|
|
18
|
+
/** Les tailles de page proposées au pied. */
|
|
19
|
+
export declare const TAILLES_PAGE: readonly [25, 50, 100];
|
|
20
|
+
/** Toute la copie de la grille. Aucun libellé, visible ou annoncé, n'est
|
|
21
|
+
* écrit en dur : une app anglaise passe les siens par `textes`, sans quoi
|
|
22
|
+
* elle n'aurait AUCUN recours (le CSS ne traduit pas un aria-label). */
|
|
23
|
+
export interface TextesGrille {
|
|
24
|
+
rechercher: string;
|
|
25
|
+
colonnes: string;
|
|
26
|
+
colonnesAffichees: string;
|
|
27
|
+
exporter: string;
|
|
28
|
+
reinitialiser: string;
|
|
29
|
+
filtrer: string;
|
|
30
|
+
/** Première option d'un filtre à choix : aucune restriction. */
|
|
31
|
+
tous: string;
|
|
32
|
+
du: string;
|
|
33
|
+
au: string;
|
|
34
|
+
min: string;
|
|
35
|
+
max: string;
|
|
36
|
+
effacer: string;
|
|
37
|
+
/** Raccourcis de période du filtre de dates. */
|
|
38
|
+
periodes: string;
|
|
39
|
+
aujourdhui: string;
|
|
40
|
+
septJours: string;
|
|
41
|
+
trenteJours: string;
|
|
42
|
+
ceMois: string;
|
|
43
|
+
cetteAnnee: string;
|
|
44
|
+
/** Résumé d'une plage dans son déclencheur (« ≥ 10 », « 01/03 → 15/03 »).
|
|
45
|
+
* Les dates arrivent en ISO (AAAA-MM-JJ). */
|
|
46
|
+
resumeNombres: (min: string, max: string) => string;
|
|
47
|
+
resumeDates: (du: string, au: string) => string;
|
|
48
|
+
filtrerColonne: (nom: string) => string;
|
|
49
|
+
deplacer: (nom: string) => string;
|
|
50
|
+
largeur: (nom: string) => string;
|
|
51
|
+
largeurAide: string;
|
|
52
|
+
epinglerGauche: (nom: string) => string;
|
|
53
|
+
epinglerDroite: (nom: string) => string;
|
|
54
|
+
detacher: (nom: string) => string;
|
|
55
|
+
aGauche: string;
|
|
56
|
+
aDroite: string;
|
|
57
|
+
toutSelectionner: string;
|
|
58
|
+
selectionnerLigne: string;
|
|
59
|
+
choisies: (n: number) => string;
|
|
60
|
+
aucuneDonnee: string;
|
|
61
|
+
aucunResultat: string;
|
|
62
|
+
aucuneLigne: string;
|
|
63
|
+
compte: (debut: number, fin: number, total: number) => string;
|
|
64
|
+
parPage: (n: number) => string;
|
|
65
|
+
lignesParPage: string;
|
|
66
|
+
pagination: string;
|
|
67
|
+
pagePrecedente: string;
|
|
68
|
+
pageSuivante: string;
|
|
69
|
+
page: (page: number, pages: number) => string;
|
|
70
|
+
dndInstructions: string;
|
|
71
|
+
dndSaisie: (nom: string) => string;
|
|
72
|
+
dndSurvol: (nom: string, cible: string) => string;
|
|
73
|
+
dndHors: (nom: string) => string;
|
|
74
|
+
dndPose: (nom: string, cible: string) => string;
|
|
75
|
+
dndReposee: (nom: string) => string;
|
|
76
|
+
dndAnnule: (nom: string) => string;
|
|
77
|
+
}
|
|
78
|
+
export declare const TEXTES_GRILLE: TextesGrille;
|
|
79
|
+
export interface DataGridProps<T> {
|
|
80
|
+
/** Identifiant STABLE du tableau : il nomme la vue enregistrée
|
|
81
|
+
* (`table:<tableId>:v1`). Deux tableaux qui le partagent partagent leur
|
|
82
|
+
* vue ; le changer fait oublier celle de tous les utilisateurs. */
|
|
83
|
+
tableId: string;
|
|
84
|
+
data: T[];
|
|
85
|
+
/** Colonnes TanStack. Chacune doit avoir un `id` ou un `accessorKey`
|
|
86
|
+
* textuel : c'est lui que la vue enregistre. `size` est la largeur
|
|
87
|
+
* PLANCHER en pixels (150 par défaut) : la colonne s'étire au-delà tant
|
|
88
|
+
* qu'on ne l'a pas réglée. `meta.registre`, `meta.label`, `meta.unite`
|
|
89
|
+
* sont ceux de `DataTable`. */
|
|
90
|
+
columns: ColumnDef<T, any>[];
|
|
91
|
+
/** Clic (ou Entrée) sur une ligne. Sans lui, la ligne n'est pas
|
|
92
|
+
* cliquable, et elle n'en a pas l'air. */
|
|
93
|
+
onRowClick?: (ligne: T) => void;
|
|
94
|
+
/** La ligne dont l'aperçu est ouvert : filet d'accent à gauche. */
|
|
95
|
+
ligneActive?: (ligne: T) => boolean;
|
|
96
|
+
/** Identifiant de ligne. Indispensable avec `selection` dès que les
|
|
97
|
+
* données se rechargent : par défaut c'est l'INDEX, et une ligne cochée
|
|
98
|
+
* deviendrait une autre ligne après un tri côté serveur. */
|
|
99
|
+
getRowId?: (ligne: T, index: number) => string;
|
|
100
|
+
/** Une colonne de cases, épinglée à gauche. */
|
|
101
|
+
selection?: boolean;
|
|
102
|
+
onSelectionChange?: (lignes: T[]) => void;
|
|
103
|
+
/** Lignes par page (25, 50 ou 100), ou `false` pour tout afficher. */
|
|
104
|
+
parPage?: (typeof TAILLES_PAGE)[number] | false;
|
|
105
|
+
/** Champ de recherche sur toutes les colonnes. Par défaut : oui. */
|
|
106
|
+
recherche?: boolean;
|
|
107
|
+
/** Rangée de filtres sous les intitulés. Par défaut : oui. */
|
|
108
|
+
filtres?: boolean;
|
|
109
|
+
/** Bouton d'export CSV des lignes filtrées et triées, colonnes visibles.
|
|
110
|
+
* Une chaîne nomme le fichier (sans extension). Par défaut : oui. */
|
|
111
|
+
exportCsv?: boolean | string;
|
|
112
|
+
/** Vue par défaut : colonnes masquées, épinglées, tri. C'est elle que
|
|
113
|
+
* « Réinitialiser la vue » rétablit. */
|
|
114
|
+
vueInitiale?: {
|
|
115
|
+
masquees?: string[];
|
|
116
|
+
epingleesGauche?: string[];
|
|
117
|
+
epingleesDroite?: string[];
|
|
118
|
+
tri?: SortingState;
|
|
119
|
+
};
|
|
120
|
+
/** Ligne d'absence quand aucune ligne ne correspond. */
|
|
121
|
+
vide?: ReactNode;
|
|
122
|
+
/** Actions propres à l'app, posées dans la barre avant les réglages de
|
|
123
|
+
* vue. ⚠️ Un seul bouton plein par page : la grille n'en pose aucun, le
|
|
124
|
+
* vôtre peut être celui-là. */
|
|
125
|
+
outils?: ReactNode;
|
|
126
|
+
/** Copie de la grille, à remplacer en tout ou partie (traduction). */
|
|
127
|
+
textes?: Partial<TextesGrille>;
|
|
128
|
+
className?: string;
|
|
129
|
+
}
|
|
130
|
+
/** L'identifiant d'une définition de colonne, tel que TanStack le dérive. */
|
|
131
|
+
export declare function idDeColonne<T>(c: ColumnDef<T, any>): string | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* Adapte une vue LUE (d'une version précédente du code, ou abîmée) aux
|
|
134
|
+
* colonnes d'aujourd'hui : un identifiant qui n'existe plus est ignoré, une
|
|
135
|
+
* colonne nouvelle s'ajoute en FIN d'ordre. Sans cela, ajouter une colonne
|
|
136
|
+
* au code la ferait disparaître chez tous ceux qui avaient déplacé une
|
|
137
|
+
* colonne avant. Rend `undefined` si rien n'est exploitable.
|
|
138
|
+
*/
|
|
139
|
+
export declare function reconcilierVue(lu: unknown, defaut: VueGrille, ids: string[]): VueGrille | undefined;
|
|
140
|
+
/** Les quatre familles de filtre. Elles se DÉDUISENT des données (voir
|
|
141
|
+
* `typeDeFiltre`) ; une colonne peut l'imposer par `meta.filtre`. */
|
|
142
|
+
export type TypeFiltre = 'texte' | 'nombre' | 'date' | 'choix';
|
|
143
|
+
/** La valeur d'un filtre de colonne, telle que TanStack la tient. */
|
|
144
|
+
export type ValeurFiltre = {
|
|
145
|
+
type: 'texte';
|
|
146
|
+
valeur: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: 'choix';
|
|
149
|
+
valeur: string;
|
|
150
|
+
} | {
|
|
151
|
+
type: 'nombre';
|
|
152
|
+
min: string;
|
|
153
|
+
max: string;
|
|
154
|
+
} | {
|
|
155
|
+
type: 'date';
|
|
156
|
+
du: string;
|
|
157
|
+
au: string;
|
|
158
|
+
};
|
|
159
|
+
/** Une valeur ramenée au jour, `AAAA-MM-JJ`, dans le fuseau du NAVIGATEUR :
|
|
160
|
+
* une échéance au 3 mars à 23 h 30 à Paris est le 3 mars, pas le 4 qu'en
|
|
161
|
+
* dirait `toISOString()`. Rend `null` pour ce qui n'est pas une date. */
|
|
162
|
+
export declare function versJour(v: unknown): string | null;
|
|
163
|
+
/** Au-delà, une liste déroulante devient plus longue à parcourir qu'un mot
|
|
164
|
+
* à taper : la colonne reste en texte libre. */
|
|
165
|
+
export declare const CHOIX_MAX = 20;
|
|
166
|
+
/**
|
|
167
|
+
* La famille de filtre d'une colonne, d'après ses valeurs : `meta.filtre`
|
|
168
|
+
* d'abord, puis un nombre (registre `num`, ou valeurs numériques), une date
|
|
169
|
+
* (objets `Date` ou chaînes ISO), un CHOIX quand les valeurs distinctes sont
|
|
170
|
+
* peu nombreuses ET se répètent (sinon chaque ligne serait une option), du
|
|
171
|
+
* texte enfin.
|
|
172
|
+
*/
|
|
173
|
+
export declare function typeDeFiltre(meta: {
|
|
174
|
+
filtre?: TypeFiltre | false;
|
|
175
|
+
registre?: 'nom' | 'num';
|
|
176
|
+
} | undefined, valeurs: unknown[]): TypeFiltre | false;
|
|
177
|
+
/** Le filtre de toutes les colonnes de la grille : il lit la FORME de la
|
|
178
|
+
* valeur, pas la colonne. Bornes comprises. */
|
|
179
|
+
export declare const filtreGrille: FilterFn<any>;
|
|
180
|
+
/** Ne garde d'une saisie que ce qui peut faire un nombre : chiffres, un
|
|
181
|
+
* signe moins en tête, un séparateur décimal. Les lettres ne s'écrivent
|
|
182
|
+
* pas, plutôt que de s'écrire puis d'être refusées. */
|
|
183
|
+
export declare function saisieNombre(texte: string): string;
|
|
184
|
+
/** Une date saisie est-elle COMPLÈTE ? Le champ date natif rend une valeur
|
|
185
|
+
* dès que les trois segments sont remplis, y compris pendant qu'on tape
|
|
186
|
+
* l'année : « 0002 », puis « 0020 », puis « 0202 ». Filtrer sur ces états
|
|
187
|
+
* intermédiaires faisait disparaître puis revenir toutes les lignes à
|
|
188
|
+
* chaque chiffre. On n'applique qu'une année plausible. */
|
|
189
|
+
export declare function dateComplete(v: string): boolean;
|
|
190
|
+
/** Les raccourcis de période, en jours ISO, calculés depuis `maintenant`. */
|
|
191
|
+
export declare function periodes(maintenant: Date): Record<'aujourdhui' | 'septJours' | 'trenteJours' | 'ceMois' | 'cetteAnnee', [
|
|
192
|
+
string,
|
|
193
|
+
string
|
|
194
|
+
]>;
|
|
195
|
+
/** L'intitulé lisible d'une colonne : pour les menus, l'export, les annonces. */
|
|
196
|
+
export declare function libelleColonne<T>(c: Column<T, unknown>): string;
|
|
197
|
+
/** Les lignes filtrées et triées, colonnes visibles, en CSV : point-virgule
|
|
198
|
+
* (le séparateur qu'Excel attend en français), guillemets doublés, dates en
|
|
199
|
+
* ISO. Les VALEURS, pas le rendu : une pastille d'état s'exporte par son
|
|
200
|
+
* libellé de données, pas par son HTML. */
|
|
201
|
+
export declare function versCsv<T>(table: TableTanstack<T>): string;
|
|
202
|
+
export declare function DataGrid<T>({ tableId, data, columns, onRowClick, ligneActive, getRowId, selection, onSelectionChange, parPage, recherche, filtres, exportCsv, vueInitiale, vide, outils, textes, className, }: DataGridProps<T>): import("react").JSX.Element;
|
|
203
|
+
//# sourceMappingURL=grille.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grille.d.ts","sourceRoot":"","sources":["../react/grille.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIV,SAAS,EACV,MAAM,OAAO,CAAA;AACd,OAAO,EAQL,KAAK,MAAM,EACX,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EAKb,KAAK,YAAY,EACjB,KAAK,KAAK,IAAI,aAAa,EAE3B,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAA;AAsB9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAU5D,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B,kDAAkD;AAClD,eAAO,MAAM,iBAAiB,gBAAgB,CAAA;AAE9C;;8CAE8C;AAC9C,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,gBAAgB,CAAA;IAC7B,gBAAgB,EAAE,eAAe,CAAA;IACjC,YAAY,EAAE,iBAAiB,CAAA;IAC/B,aAAa,EAAE,kBAAkB,CAAA;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,6CAA6C;AAC7C,eAAO,MAAM,YAAY,YAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU,CAAA;AAElD;;yEAEyE;AACzE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB;kDAC8C;IAC9C,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7D,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9B,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7C,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAChC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CACnC;AAED,eAAO,MAAM,aAAa,EAAE,YAuD3B,CAAA;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B;;wEAEoE;IACpE,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,CAAC,EAAE,CAAA;IACT;;;;oCAIgC;IAChC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IAC5B;+CAC2C;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC/B,mEAAmE;IACnE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAA;IACnC;;iEAE6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9C,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IACzC,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAC/C,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;0EACsE;IACtE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B;6CACyC;IACzC,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;QAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;QAC1B,GAAG,CAAC,EAAE,YAAY,CAAA;KACnB,CAAA;IACD,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;oCAEgC;IAChC,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,CAIvE;AAUD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,MAAM,EAAE,GACZ,SAAS,GAAG,SAAS,CA6CvB;AAED;sEACsE;AACtE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE9D,qEAAqE;AACrE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5C;;0EAE0E;AAC1E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQlD;AAED;iDACiD;AACjD,eAAO,MAAM,SAAS,KAAK,CAAA;AAE3B;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;CAAE,GAAG,SAAS,EAC3E,OAAO,EAAE,OAAO,EAAE,GACjB,UAAU,GAAG,KAAK,CAYpB;AAQD;gDACgD;AAChD,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,GAAG,CAsBtC,CAAA;AAQD;;wDAEwD;AACxD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;4DAI4D;AAC5D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,CAChD,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY,EACpE;IAAC,MAAM;IAAE,MAAM;CAAC,CACjB,CAeA;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,CAG/D;AAED;;;4CAG4C;AAC5C,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAY1D;AA+oBD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAC1B,OAAO,EACP,IAAI,EACJ,OAAO,EACP,UAAU,EACV,WAAW,EACX,QAAQ,EACR,SAAiB,EACjB,iBAAiB,EACjB,OAAY,EACZ,SAAgB,EAChB,OAAc,EACd,SAAgB,EAChB,WAAW,EACX,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,aAAa,CAAC,CAAC,CAAC,+BAyTlB"}
|