@zevra/ui 0.46.1 → 0.48.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/react/grille.tsx CHANGED
@@ -300,6 +300,11 @@ export interface DataGridProps<T> {
300
300
  /** La grille REMPLIT son parent (colonne flex à hauteur bornée) : seules
301
301
  * les lignes défilent, la barre, les intitulés et les filtres restent. */
302
302
  remplir?: boolean
303
+ /** Posée À BORD d'une carte sans retrait (`Card padding="aucun"`) : la
304
+ * barre d'outils et la pagination prennent le retrait de la carte, le
305
+ * tableau court d'un bord à l'autre sans second cadre. Sans elle, la
306
+ * recherche et les cases touchent la bordure. */
307
+ encadree?: boolean
303
308
  /** Sous les lignes, dans la zone qui défile : le déclencheur d'une liste
304
309
  * infinie, qui charge la suite en entrant dans l'écran. */
305
310
  apresLignes?: ReactNode
@@ -1310,6 +1315,7 @@ export function DataGrid<T>({
1310
1315
  pied,
1311
1316
  dense,
1312
1317
  remplir,
1318
+ encadree,
1313
1319
  apresLignes,
1314
1320
  envelopperTableau,
1315
1321
  barre = true,
@@ -1700,7 +1706,7 @@ export function DataGrid<T>({
1700
1706
  )
1701
1707
 
1702
1708
  return (
1703
- <div className={cx('zv-grille', remplir && 'zv-grille--remplir', className)}>
1709
+ <div className={cx('zv-grille', remplir && 'zv-grille--remplir', encadree && 'zv-grille--encadree', className)}>
1704
1710
  {barre && (
1705
1711
  <div className="zv-grille__outils">
1706
1712
  {champRecherche ??
package/react/icon.tsx CHANGED
@@ -57,6 +57,9 @@ export interface IconButtonProps
57
57
  * L'écrire pour l'ACTION (« Fermer le panneau ») et non pour le dessin
58
58
  * (« Croix ») : c'est ce que le lecteur d'écran annonce. */
59
59
  label: string
60
+ /** Geste DESTRUCTIF (la corbeille d'une ligne) : grise au repos, rouge
61
+ * sur fond pâle au survol, comme `variante="fantome-danger"`. */
62
+ danger?: boolean
60
63
  taille?: IconProps['taille']
61
64
  /** `arrondis` (option) ou `vifs` (défaut de la charte). Sans valeur, le
62
65
  * composant suit son conteneur : voir `Angles`. */
@@ -68,6 +71,7 @@ export interface IconButtonProps
68
71
  export function IconButton({
69
72
  icone,
70
73
  label,
74
+ danger,
71
75
  taille = 'lg',
72
76
  angles,
73
77
  className,
@@ -79,7 +83,7 @@ export function IconButton({
79
83
  <button
80
84
  type={type}
81
85
  aria-label={label}
82
- className={cx('zv-icon-btn', classeAngles(angles), className)}
86
+ className={cx('zv-icon-btn', danger && 'zv-icon-btn--danger', classeAngles(angles), className)}
83
87
  {...reste}
84
88
  >
85
89
  {icone ? <Icon nom={icone} taille={taille} /> : children}
package/src/data.css CHANGED
@@ -1442,6 +1442,34 @@
1442
1442
  gap: 14px;
1443
1443
  }
1444
1444
 
1445
+ /* La grille À BORD d'une carte sans retrait (27/10/2026, HORS RELEVÉ, voir
1446
+ * DECISIONS.md). La barre et la pagination reprennent le retrait d'en-tête
1447
+ * de carte (12 / 16 px, celui des écrans de gestion) ; le tableau court d'un
1448
+ * bord à l'autre et rend son cadre à la carte : deux bordures accolées
1449
+ * faisaient un trait double, et le rayon d'un cadre intérieur ne suit pas
1450
+ * celui de la carte. Le filet du haut reste : il sépare la barre des
1451
+ * intitulés. */
1452
+ .zv-grille--encadree {
1453
+ gap: 0;
1454
+ }
1455
+
1456
+ .zv-grille--encadree > .zv-grille__outils {
1457
+ padding: 12px 16px;
1458
+ }
1459
+
1460
+ /* Les coins du BAS suivent ceux de la carte, moins sa bordure : carrés, le
1461
+ * fond blanc du tableau débordait sur l'arrondi et en masquait le filet.
1462
+ * `max` : sous l'angle vif, le rayon de carte vaut 0 et le calcul serait
1463
+ * négatif. */
1464
+ .zv-grille--encadree .zv-table {
1465
+ border-width: 1px 0 0;
1466
+ border-radius: 0 0 max(0px, calc(var(--r-card) - 1px)) max(0px, calc(var(--r-card) - 1px));
1467
+ }
1468
+
1469
+ .zv-grille--encadree > .zv-pager {
1470
+ padding: 12px 16px;
1471
+ }
1472
+
1445
1473
  @media (max-width: 767px) {
1446
1474
  /* En cartes, l'épinglage, les poignées et la largeur minimale n'ont plus
1447
1475
  * de sens : la carte prend la largeur de l'écran. */
package/src/icons.css CHANGED
@@ -81,6 +81,17 @@
81
81
  color: var(--ink);
82
82
  }
83
83
 
84
+ /* L'icône qui DÉTRUIT (27/10/2026, 0.48.0, HORS RELEVÉ, voir DECISIONS.md) :
85
+ * la corbeille d'une ligne. Grise au repos comme les autres ; au survol,
86
+ * l'encre --err sur le fond --err-soft, les teintes du fantôme destructif
87
+ * (`fantome-danger`). Pas d'aplat : une rangée de corbeilles rouges
88
+ * pleines crierait sur toute la liste. Le désactivé, déclaré plus bas à
89
+ * spécificité supérieure, l'emporte. */
90
+ .zv-icon-btn--danger:hover {
91
+ background: var(--err-soft);
92
+ color: var(--err);
93
+ }
94
+
84
95
  /* Désactivé. C'était la SEULE classe interactive du module sans cet état :
85
96
  * .zv-btn, .zv-chrome-btn, .zv-menu__item, .zv-pager__arrow, .zv-range et
86
97
  * les champs en ont tous un. Sans lui, un bouton fermé se rendait comme un