@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 CHANGED
@@ -1877,3 +1877,134 @@ 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).
1994
+
1995
+ ### Sans menu natif, et avec une ligne active (24/10/2026, 0.43.1)
1996
+
1997
+ En branchant la grille sur Sunday (écran pilote : le parapheur), deux
1998
+ écarts sont apparus.
1999
+
2000
+ - **Aucun `<select>` natif dans la grille.** Sa liste est peinte par le
2001
+ système (menu noir sous macOS sombre) et Sunday l'interdit depuis le
2002
+ 14/09. Le filtre à choix ouvre maintenant une liste DESSINÉE (`Menu`,
2003
+ `MenuItem`, flèches, Origine, Fin, Échap) dans le même panneau flottant
2004
+ que les plages, rendu hors du tableau ; la taille de page passe par
2005
+ `SelectMenu`.
2006
+ - **La ligne active** (`ligneActive`, classe `.zv-row--on`) : celle dont on
2007
+ regarde l'aperçu. Sunday la peignait dans son propre CSS ; un état qu'une
2008
+ app doit dire s'expose en prop, il entre donc au paquet, au dessin de
2009
+ Sunday : le fond du survol et un filet d'accent intérieur à gauche.
2010
+ Distincte de la ligne cochée, qui est une sélection pour agir.
@@ -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,MAAyzhS,CAAA;AAEn1hS;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAk4B,CAAA"}
1
+ {"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAyw6S,CAAA;AAEny6S;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAk4B,CAAA"}