@zevra/ui 0.41.0 → 0.43.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/DECISIONS.md +114 -0
- package/dist/catalogue.js +1 -1
- 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 +41 -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 +201 -0
- package/dist/grille.d.ts.map +1 -0
- package/dist/grille.js +780 -0
- package/dist/grille.js.map +1 -0
- package/dist/icon-data.d.ts +1 -1
- package/dist/icon-data.d.ts.map +1 -1
- package/dist/icon-data.js +2 -0
- package/dist/icon-data.js.map +1 -1
- package/dist/icon.d.ts +1 -1
- package/dist/icon.js +1 -1
- 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/icons/index.json +6 -0
- package/icons/sprite.svg +1 -0
- package/package.json +16 -2
- package/react/catalogue.tsx +1 -1
- package/react/css-inline.ts +1 -1
- package/react/data-table.tsx +138 -26
- package/react/grille.tsx +1411 -0
- package/react/icon-data.ts +3 -0
- package/react/icon.tsx +2 -2
- package/react/use-persisted-state.ts +105 -0
- package/src/data.css +381 -0
- package/src/forms.css +14 -0
package/DECISIONS.md
CHANGED
|
@@ -1877,3 +1877,117 @@ autre fichier n'a bougé d'un octet.
|
|
|
1877
1877
|
`build-logo-index.mjs`.
|
|
1878
1878
|
|
|
1879
1879
|
Il hérite du manque des autres : pas de version monochrome, pas de lockup.
|
|
1880
|
+
|
|
1881
|
+
## La grille de données : `DataGrid` (24/10/2026, 0.43.0)
|
|
1882
|
+
|
|
1883
|
+
Demande : un tableau de travail « qui reprend les fonctions d'AG Grid »,
|
|
1884
|
+
pour Sunday d'abord, réutilisable par toutes les apps. Il entre au paquet
|
|
1885
|
+
plutôt que dans Sunday : une grille écrite dans une app est une grille que
|
|
1886
|
+
la suivante réécrit, et les deux divergent.
|
|
1887
|
+
|
|
1888
|
+
**Ce n'est pas un second tableau.** `DataGrid` est une COMPOSITION :
|
|
1889
|
+
TanStack Table calcule, `DataTable` rend (mêmes `.zv-table`, `.zv-row`,
|
|
1890
|
+
`.zv-cell`), et l'outillage vient des composants existants (`Search`,
|
|
1891
|
+
`Button`, `IconButton`, `Menu`, `Checkbox`, `Input`, `Pager`, `Empty`,
|
|
1892
|
+
`Icon`). `DataTable` gagne trois ouvertures rétrocompatibles : un rendu de
|
|
1893
|
+
cellule d'en-tête substituable, une rangée sous l'en-tête, et un mode
|
|
1894
|
+
« grille » activé par `enableColumnResizing` (largeurs en pixels,
|
|
1895
|
+
colonnes épinglées). Sans ce réglage, il rend exactement ce qu'il rendait.
|
|
1896
|
+
|
|
1897
|
+
Sous-chemin dédié, `@zevra/ui/react/grille`, pour la même raison que
|
|
1898
|
+
`react/table` : TanStack et dnd-kit sont des dépendances OPTIONNELLES, et
|
|
1899
|
+
le barrel ne doit pas casser une landing qui n'a aucun tableau.
|
|
1900
|
+
|
|
1901
|
+
### Ce qu'elle fait
|
|
1902
|
+
|
|
1903
|
+
Tri (Maj+clic : multi-colonnes), recherche globale, filtre par colonne
|
|
1904
|
+
TYPÉ (voir plus bas), réordonnancement
|
|
1905
|
+
des colonnes par glisser-déposer (dnd-kit, poignée au clavier : Espace,
|
|
1906
|
+
flèches, Espace), redimensionnement (`columnResizeMode: "onChange"`,
|
|
1907
|
+
poignée au clavier : flèches, Maj+flèches, Entrée pour rendre la largeur
|
|
1908
|
+
d'origine), visibilité et épinglage (gauche, droite) depuis un menu
|
|
1909
|
+
« Colonnes », sélection de lignes à cases, pagination, export CSV des
|
|
1910
|
+
lignes filtrées, et une vue PERSISTÉE par tableau (ordre, visibilité,
|
|
1911
|
+
largeurs, épinglage, tri, taille de page) dans `localStorage`, sous
|
|
1912
|
+
`table:<id>:v1`, que « Réinitialiser la vue » efface.
|
|
1913
|
+
|
|
1914
|
+
### Ce qu'elle ne fait pas, et pourquoi
|
|
1915
|
+
|
|
1916
|
+
Groupement et agrégation, tableau croisé, édition en cellule, données
|
|
1917
|
+
arborescentes, sélection de plages, modèle de lignes côté serveur,
|
|
1918
|
+
virtualisation. TanStack les calcule presque tous, mais chacun demande un
|
|
1919
|
+
dessin que la charte n'a pas (une ligne de groupe, une cellule en
|
|
1920
|
+
édition) : les ajouter sans planche serait inventer. Ils entreront un par
|
|
1921
|
+
un, sur besoin réel. La virtualisation, elle, attend un tableau qui en ait
|
|
1922
|
+
besoin : sous quelques milliers de lignes, la pagination suffit.
|
|
1923
|
+
|
|
1924
|
+
### Ce qui est HORS RELEVÉ (aucune planche ne le dessine)
|
|
1925
|
+
|
|
1926
|
+
- **La ligne sélectionnée**, sur `--accent-soft`. data.css disait « ni état
|
|
1927
|
+
sélectionné » : c'était vrai d'une liste à lire, pas d'une grille où l'on
|
|
1928
|
+
coche pour agir. `--accent-soft` est le fond que le paquet donne déjà à
|
|
1929
|
+
l'entrée de menu choisie : aucun troisième gris n'entre.
|
|
1930
|
+
- **Les colonnes épinglées** : `position: sticky`, fond opaque repris du
|
|
1931
|
+
contexte (blanc, survol, sélection), filet `--line` côté contenu.
|
|
1932
|
+
- **La poignée de déplacement** (icône `menu`, faute d'un glyphe de
|
|
1933
|
+
préhension au jeu) et **la poignée de largeur** (filet `--line`, accent
|
|
1934
|
+
au survol et au focus).
|
|
1935
|
+
- **La case indéterminée** (« une partie des lignes est cochée »), qui
|
|
1936
|
+
n'avait pas de dessin : un trait horizontal sur l'aplat accent, même
|
|
1937
|
+
facture que la coche.
|
|
1938
|
+
- **La barre d'outils et la rangée de filtres** : gouttières de 10 et
|
|
1939
|
+
12 px, reprises du tableau et de la pagination, rien de nouveau.
|
|
1940
|
+
|
|
1941
|
+
### Les choix techniques
|
|
1942
|
+
|
|
1943
|
+
- **La vue se lit APRÈS le montage.** Lue pendant le rendu, elle
|
|
1944
|
+
différerait entre le serveur (qui n'a pas de `localStorage`) et le
|
|
1945
|
+
navigateur : erreur d'hydratation dans Next. Le premier rendu montre
|
|
1946
|
+
donc la vue par défaut, puis la vue enregistrée.
|
|
1947
|
+
- **Une vue enregistrée survit à l'évolution des colonnes.** Au
|
|
1948
|
+
chargement, un identifiant qui n'existe plus est ignoré, une colonne
|
|
1949
|
+
nouvelle s'ajoute en fin d'ordre. Sans cela, ajouter une colonne au
|
|
1950
|
+
code la ferait disparaître chez tous ceux qui avaient déplacé une
|
|
1951
|
+
colonne avant.
|
|
1952
|
+
- **Le redimensionnement est écrit ici**, pas confié au gestionnaire de
|
|
1953
|
+
TanStack : celui-ci part de `getSize()`, qui vaut 150 px pour une
|
|
1954
|
+
colonne souple quelle que soit sa largeur à l'écran. Le premier geste
|
|
1955
|
+
faisait sauter la colonne. On mesure la largeur réelle au premier appui.
|
|
1956
|
+
- **Une colonne a une largeur PLANCHER** (`size`, 150 px par défaut) et
|
|
1957
|
+
s'étire en proportion tant qu'on ne l'a pas réglée ; réglée ou épinglée,
|
|
1958
|
+
elle devient fixe. Le tableau défile dans son cadre quand la somme des
|
|
1959
|
+
planchers dépasse la largeur : jamais une colonne écrasée à zéro.
|
|
1960
|
+
- **Le menu des colonnes est HORS du cadre.** `.zv-table` défile
|
|
1961
|
+
(`overflow-x: auto`, qui force aussi `overflow-y`) : un menu ouvert
|
|
1962
|
+
depuis un en-tête y serait rogné. Il vit dans la barre d'outils.
|
|
1963
|
+
- **Sous 768 px, la grille redevient des cartes**, comme tout tableau du
|
|
1964
|
+
paquet : l'épinglage et les poignées n'y ont pas de sens et s'effacent.
|
|
1965
|
+
|
|
1966
|
+
Le nom suit le paquet (`Button`, pas `ZvButton`) : une app qui tient à
|
|
1967
|
+
son alias l'importe sous `DataGrid as ZvDataTable`.
|
|
1968
|
+
|
|
1969
|
+
### Les filtres ont la forme de leurs données (24/10/2026, demande Sunday)
|
|
1970
|
+
|
|
1971
|
+
Un champ texte partout obligeait à écrire `>10` ou une date à la main.
|
|
1972
|
+
Chaque colonne reçoit désormais le contrôle de sa famille, DÉDUITE des
|
|
1973
|
+
données brutes (`typeDeFiltre`), ou imposée par `meta.filtre` :
|
|
1974
|
+
|
|
1975
|
+
- **Choix** : une liste native quand les valeurs distinctes sont peu
|
|
1976
|
+
nombreuses (20 au plus) ET se répètent. Les options sont celles que les
|
|
1977
|
+
autres filtres laissent passer (modèle facetté).
|
|
1978
|
+
- **Nombre** : une plage min / max. Le champ n'est pas `type="number"`,
|
|
1979
|
+
qui accepte « e » et refuse la virgule selon la langue du système : il
|
|
1980
|
+
est en `inputMode="decimal"`, et les lettres ne s'y écrivent pas.
|
|
1981
|
+
- **Date** : une plage du / au sur le calendrier natif, cinq raccourcis
|
|
1982
|
+
(aujourd'hui, 7 et 30 jours, ce mois-ci, cette année), et « au » ne peut
|
|
1983
|
+
pas précéder « du ». Une date n'est appliquée que COMPLÈTE : pendant
|
|
1984
|
+
qu'on tape l'année, le champ vaut « 0002 », puis « 0020 », et le tableau
|
|
1985
|
+
se vidait puis se remplissait à chaque chiffre.
|
|
1986
|
+
- **Texte** : le reste, sans casse.
|
|
1987
|
+
|
|
1988
|
+
Une plage ne tient pas dans une cellule de 90 px : la rangée de filtres en
|
|
1989
|
+
montre le RÉSUMÉ (« ≥ 10 », « 01/03/2026 → 24/10/2026 »), qui ouvre un
|
|
1990
|
+
popover. Ce popover est rendu HORS du tableau (portail) : le cadre défile,
|
|
1991
|
+
il l'aurait rogné. Il reprend `.zv-popover`, `Field`, `Input`, `MenuItem`
|
|
1992
|
+
pour les raccourcis, sans valeur nouvelle hormis sa largeur (340 px, deux
|
|
1993
|
+
champs de date côte à côte).
|
package/dist/catalogue.js
CHANGED
|
@@ -894,7 +894,7 @@ export const CATALOGUE = [
|
|
|
894
894
|
nom: 'Icônes',
|
|
895
895
|
couche: 'commun',
|
|
896
896
|
css: 'icons.css',
|
|
897
|
-
resume: "
|
|
897
|
+
resume: "73 icônes TRACÉES, jamais pleines : trait 2, grille de 24, BOUTS FRANCS et jonctions vives, le trait carré de la charte, points d'encre carrés compris. Elles héritent de la couleur du texte : c'est ce qui leur permet de fonctionner sur papier comme sur la bande manifeste sans déclinaison. Le tracé est inliné : rien à résoudre côté bundler, rien à autoriser côté CSP.",
|
|
898
898
|
exemples: [
|
|
899
899
|
{
|
|
900
900
|
id: 'jeu',
|
package/dist/css-inline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAos4S,CAAA;AAE9t4S;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAk4B,CAAA"}
|