@zevra/ui 0.7.0 → 0.8.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/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 +30 -0
- package/dist/data-table.d.ts.map +1 -0
- package/dist/data-table.js +35 -0
- package/dist/data-table.js.map +1 -0
- package/package.json +18 -3
- package/react/css-inline.ts +1 -1
- package/react/data-table.tsx +153 -0
- package/src/data.css +45 -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,mp8LAAmp8L,CAAA;AAEtr8L;;;yBAGyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAW,03BAA03B,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type RowData, type Table as TableTanstack } from '@tanstack/react-table';
|
|
3
|
+
declare module '@tanstack/react-table' {
|
|
4
|
+
interface ColumnMeta<TData extends RowData, TValue> {
|
|
5
|
+
/** `nom` : colonne d'identité, la seule en encre pleine.
|
|
6
|
+
* `num` : chiffres alignés à droite, en chasse tabulaire. */
|
|
7
|
+
registre?: 'nom' | 'num';
|
|
8
|
+
/** Intitulé qui REMPLACE l'en-tête sous le point de rupture, où les
|
|
9
|
+
* colonnes s'empilent et où l'en-tête disparaît. */
|
|
10
|
+
label?: string;
|
|
11
|
+
/** Unité accolée au nombre, en plus petit. */
|
|
12
|
+
unite?: ReactNode;
|
|
13
|
+
/** Largeur de la colonne dans la grille (syntaxe grid-template-columns).
|
|
14
|
+
* Par défaut : `minmax(0, 1fr)`. */
|
|
15
|
+
largeur?: string;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export interface DataTableProps<T> {
|
|
19
|
+
table: TableTanstack<T>;
|
|
20
|
+
/** Rendu à la place des lignes quand le modèle est vide. ⚠️ C'est la LIGNE
|
|
21
|
+
* d'absence qu'on attend ici (filtre trop étroit), pas l'écran d'absence :
|
|
22
|
+
* l'en-tête doit rester visible pour qu'on puisse élargir le filtre. */
|
|
23
|
+
vide?: ReactNode;
|
|
24
|
+
/** Appelé au clic sur une ligne. Sans lui, la ligne n'est pas cliquable —
|
|
25
|
+
* et elle ne doit pas en avoir l'air. */
|
|
26
|
+
onRowClick?: (ligne: T) => void;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function DataTable<T>({ table, vide, onRowClick, className }: DataTableProps<T>): import("react").JSX.Element;
|
|
30
|
+
//# sourceMappingURL=data-table.d.ts.map
|
|
@@ -0,0 +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;AACtC,OAAO,EAEL,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;KACjB;CACF;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB;;6EAEyE;IACzE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;8CAC0C;IAC1C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,+BA+FrF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { flexRender, } from '@tanstack/react-table';
|
|
3
|
+
import { cx } from './cx.js';
|
|
4
|
+
export function DataTable({ table, vide, onRowClick, className }) {
|
|
5
|
+
const colonnes = table.getVisibleLeafColumns();
|
|
6
|
+
const gabarit = colonnes
|
|
7
|
+
.map((c) => c.columnDef.meta?.largeur ?? 'minmax(0, 1fr)')
|
|
8
|
+
.join(' ');
|
|
9
|
+
const lignes = table.getRowModel().rows;
|
|
10
|
+
return (_jsxs("div", { className: cx('zv-table', className), style: { ['--zv-cols']: gabarit }, children: [table.getHeaderGroups().map((groupe) => (_jsx("div", { className: "zv-table__head", children: groupe.headers.map((entete) => {
|
|
11
|
+
const triable = entete.column.getCanSort();
|
|
12
|
+
const sens = entete.column.getIsSorted();
|
|
13
|
+
const registre = entete.column.columnDef.meta?.registre;
|
|
14
|
+
const contenu = entete.isPlaceholder
|
|
15
|
+
? null
|
|
16
|
+
: flexRender(entete.column.columnDef.header, entete.getContext());
|
|
17
|
+
return (_jsx("div", { className: cx('zv-cell', registre === 'num' && 'zv-cell--num'), "aria-sort": sens === 'asc' ? 'ascending' : sens === 'desc' ? 'descending' : undefined, children: triable ? (_jsxs("button", { type: "button", className: "zv-sort", onClick: entete.column.getToggleSortingHandler(), children: [contenu, _jsx("span", { className: "zv-sort__mark", "aria-hidden": "true", children: sens === 'asc' ? '↑' : sens === 'desc' ? '↓' : '↕' })] })) : (contenu) }, entete.id));
|
|
18
|
+
}) }, groupe.id))), lignes.length === 0
|
|
19
|
+
? vide
|
|
20
|
+
: lignes.map((ligne) => (_jsx("div", { className: "zv-row",
|
|
21
|
+
// Le clavier suit le clic : une ligne cliquable qui n'est pas
|
|
22
|
+
// atteignable au clavier est une action inaccessible.
|
|
23
|
+
role: onRowClick ? 'button' : undefined, tabIndex: onRowClick ? 0 : undefined, style: onRowClick ? undefined : { cursor: 'default' }, onClick: onRowClick ? () => onRowClick(ligne.original) : undefined, onKeyDown: onRowClick
|
|
24
|
+
? (e) => {
|
|
25
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
onRowClick(ligne.original);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
: undefined, children: ligne.getVisibleCells().map((cellule) => {
|
|
31
|
+
const meta = cellule.column.columnDef.meta;
|
|
32
|
+
return (_jsxs("div", { className: cx('zv-cell', meta?.registre === 'nom' && 'zv-cell--name', meta?.registre === 'num' && 'zv-cell--num'), 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
|
+
}) }, ligne.id)))] }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table.js","sourceRoot":"","sources":["../react/data-table.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zevra/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Design system Zevra « Encre & Papier » — tokens, CSS des composants et logos officiels.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
"types": "./dist/css-inline.d.ts",
|
|
35
35
|
"default": "./dist/css-inline.js"
|
|
36
36
|
},
|
|
37
|
+
"./react/table": {
|
|
38
|
+
"types": "./dist/data-table.d.ts",
|
|
39
|
+
"default": "./dist/data-table.js"
|
|
40
|
+
},
|
|
37
41
|
"./css": "./src/index.css",
|
|
38
42
|
"./tokens.css": "./src/tokens.css",
|
|
39
43
|
"./fonts.css": "./src/fonts.css",
|
|
@@ -66,14 +70,21 @@
|
|
|
66
70
|
"scripts": {
|
|
67
71
|
"build": "node scripts/build-icon-react.mjs && node scripts/build-css-bundle.mjs && tsc -p tsconfig.json",
|
|
68
72
|
"test": "npm run build && vitest run",
|
|
69
|
-
"prepublishOnly": "npm run build"
|
|
73
|
+
"prepublishOnly": "npm run build",
|
|
74
|
+
"storybook": "npm run build && node scripts/build-stories.mjs && storybook dev -p 6006 --no-open",
|
|
75
|
+
"build:storybook": "npm run build && node scripts/build-stories.mjs && storybook build -o storybook-static"
|
|
70
76
|
},
|
|
71
77
|
"devDependencies": {
|
|
78
|
+
"@storybook/addon-docs": "^10.5.10",
|
|
79
|
+
"@storybook/react-vite": "^10.5.10",
|
|
80
|
+
"@tanstack/react-table": "^8.21.3",
|
|
72
81
|
"@types/react": "^19.2.18",
|
|
73
82
|
"@types/react-dom": "^19.2.5",
|
|
74
83
|
"react": "^19.2.8",
|
|
75
84
|
"react-dom": "^19.2.8",
|
|
85
|
+
"storybook": "^10.5.10",
|
|
76
86
|
"typescript": "^7.0.2",
|
|
87
|
+
"vite": "^7.3.6",
|
|
77
88
|
"vitest": "^3.2.4"
|
|
78
89
|
},
|
|
79
90
|
"keywords": [
|
|
@@ -84,11 +95,15 @@
|
|
|
84
95
|
"components"
|
|
85
96
|
],
|
|
86
97
|
"peerDependencies": {
|
|
87
|
-
"react": ">=18"
|
|
98
|
+
"react": ">=18",
|
|
99
|
+
"@tanstack/react-table": ">=8"
|
|
88
100
|
},
|
|
89
101
|
"peerDependenciesMeta": {
|
|
90
102
|
"react": {
|
|
91
103
|
"optional": true
|
|
104
|
+
},
|
|
105
|
+
"@tanstack/react-table": {
|
|
106
|
+
"optional": true
|
|
92
107
|
}
|
|
93
108
|
}
|
|
94
109
|
}
|