@zevra/ui 0.51.1 → 0.53.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 +38 -0
- package/dist/catalogue.d.ts.map +1 -1
- package/dist/catalogue.js +4 -2
- package/dist/catalogue.js.map +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/forms.d.ts +8 -1
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +2 -2
- package/dist/forms.js.map +1 -1
- package/package.json +1 -1
- package/react/catalogue.tsx +6 -1
- package/react/css-inline.ts +1 -1
- package/react/forms.tsx +13 -2
- package/src/forms.css +49 -0
- package/src/navigation.css +2 -1
- package/src/tokens.css +3 -0
- package/tokens/index.js +2 -0
package/react/forms.tsx
CHANGED
|
@@ -235,16 +235,26 @@ export interface SwitchProps
|
|
|
235
235
|
/** Libellé accolé : c'est lui qui porte le sens, la piste seule ne dit pas
|
|
236
236
|
* ce qui est activé. */
|
|
237
237
|
texte?: ReactNode
|
|
238
|
+
/** Valeur IMPOSÉE, qui doit rester lisible : piste pâle, cadenas, aucun
|
|
239
|
+
* clic. À ne pas confondre avec `disabled` (momentanément indisponible,
|
|
240
|
+
* le contrôle s'efface). Voir DECISIONS, 03/11/2026. */
|
|
241
|
+
verrouille?: boolean
|
|
242
|
+
/** Pourquoi c'est verrouillé (« Toujours inclus », « Fixé par
|
|
243
|
+
* l'administrateur ») : infobulle native et annonce au lecteur d'écran. */
|
|
244
|
+
motif?: string
|
|
238
245
|
className?: string
|
|
239
246
|
}
|
|
240
247
|
|
|
241
|
-
export function Switch({ on, texte, className, ...reste }: SwitchProps) {
|
|
248
|
+
export function Switch({ on, texte, verrouille, motif, className, disabled, title, ...reste }: SwitchProps) {
|
|
242
249
|
return (
|
|
243
250
|
<button
|
|
244
251
|
type="button"
|
|
245
252
|
role="switch"
|
|
246
253
|
aria-checked={on}
|
|
247
|
-
|
|
254
|
+
disabled={disabled || verrouille}
|
|
255
|
+
title={title ?? (verrouille ? motif : undefined)}
|
|
256
|
+
aria-description={verrouille ? motif : undefined}
|
|
257
|
+
className={cx('zv-switch-hit', verrouille && 'zv-switch-hit--verrouille', className)}
|
|
248
258
|
{...reste}
|
|
249
259
|
>
|
|
250
260
|
<span className={cx('zv-switch', on && 'zv-switch--on')}>
|
|
@@ -253,6 +263,7 @@ export function Switch({ on, texte, className, ...reste }: SwitchProps) {
|
|
|
253
263
|
{texte && (
|
|
254
264
|
<span className={cx('zv-switch__text', on && 'zv-switch__text--on')}>{texte}</span>
|
|
255
265
|
)}
|
|
266
|
+
{verrouille && <Icon nom="cadenas" taille="sm" className="zv-switch__cadenas" />}
|
|
256
267
|
</button>
|
|
257
268
|
)
|
|
258
269
|
}
|
package/src/forms.css
CHANGED
|
@@ -674,6 +674,55 @@
|
|
|
674
674
|
color: var(--accent);
|
|
675
675
|
}
|
|
676
676
|
|
|
677
|
+
/* Désactivé et verrouillé (DECISIONS, 03/11/2026). HORS RELEVÉ.
|
|
678
|
+
* Désactivé : momentanément indisponible, le contrôle s'efface. */
|
|
679
|
+
.zv-switch-hit:disabled {
|
|
680
|
+
cursor: not-allowed;
|
|
681
|
+
opacity: 0.5;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
.zv-switch-hit:disabled:hover .zv-switch {
|
|
685
|
+
border-color: var(--line);
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
.zv-switch-hit:disabled:hover .zv-switch--on {
|
|
689
|
+
border-color: var(--accent);
|
|
690
|
+
background: var(--accent);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
/* Verrouillé : la valeur est imposée et reste lisible. Pas d'effacement,
|
|
694
|
+
* pas de curseur interdit (ce n'est pas une faute) ; une piste pâle et un
|
|
695
|
+
* cadenas disent qu'on ne la change pas d'ici. */
|
|
696
|
+
.zv-switch-hit--verrouille,
|
|
697
|
+
.zv-switch-hit--verrouille:disabled {
|
|
698
|
+
cursor: default;
|
|
699
|
+
opacity: 1;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
.zv-switch-hit--verrouille .zv-switch,
|
|
703
|
+
.zv-switch-hit--verrouille:hover .zv-switch {
|
|
704
|
+
border-color: var(--line);
|
|
705
|
+
background: var(--paper);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.zv-switch-hit--verrouille .zv-switch__knob {
|
|
709
|
+
background: var(--line);
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.zv-switch-hit--verrouille .zv-switch--on,
|
|
713
|
+
.zv-switch-hit--verrouille:hover .zv-switch--on {
|
|
714
|
+
border-color: var(--accent-line);
|
|
715
|
+
background: var(--accent-soft);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.zv-switch-hit--verrouille .zv-switch--on .zv-switch__knob {
|
|
719
|
+
background: var(--accent-line);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.zv-switch__cadenas {
|
|
723
|
+
color: var(--label);
|
|
724
|
+
}
|
|
725
|
+
|
|
677
726
|
/* ─── Curseur ───────────────────────────────────────────────────────────
|
|
678
727
|
* HORS RELEVÉ (25/08/2026, voir DECISIONS.md). Aucune source ; dérivé de
|
|
679
728
|
* l'interrupteur redessiné : bouton CARRÉ de 14 px (la taille exacte du
|
package/src/navigation.css
CHANGED
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
|
|
71
71
|
.zv-sidebar {
|
|
72
72
|
display: flex;
|
|
73
|
-
|
|
73
|
+
/* Une constante, réglable par l'app (`--sidebar-w`, 03/11/2026). */
|
|
74
|
+
width: var(--sidebar-w);
|
|
74
75
|
/* Sans `flex: none`, une entrée de nav un peu longue élargit la colonne et
|
|
75
76
|
* décale le contenu : la largeur est une constante, pas un résultat. */
|
|
76
77
|
flex: none;
|
package/src/tokens.css
CHANGED
|
@@ -145,6 +145,9 @@
|
|
|
145
145
|
/* Mesures */
|
|
146
146
|
--tap: 40px; /* cible tactile minimale, sous le point de rupture */
|
|
147
147
|
--topbar-h: 52px; /* hauteur de la barre supérieure applicative */
|
|
148
|
+
/* Largeur de la colonne de navigation applicative (DECISIONS, 03/11/2026) :
|
|
149
|
+
* 224 px relevés, réglable par une app dont les libellés sont plus longs. */
|
|
150
|
+
--sidebar-w: 224px;
|
|
148
151
|
|
|
149
152
|
/* Ombre de menu déroulant : la seule surface qui flotte au-dessus du
|
|
150
153
|
* contenu sans être une carte ; ni --shadow-card ni --shadow-panel ne
|
package/tokens/index.js
CHANGED
|
@@ -106,6 +106,8 @@ export const tailles = {
|
|
|
106
106
|
export const mesures = {
|
|
107
107
|
tap: '40px',
|
|
108
108
|
topbarH: '52px',
|
|
109
|
+
/** Largeur de la colonne de navigation : réglable par l'app (03/11/2026). */
|
|
110
|
+
sidebarW: '224px',
|
|
109
111
|
specFilet: '56px',
|
|
110
112
|
/* Largeur de page : au-delà, les enveloppes se centrent (0.12.4). */
|
|
111
113
|
pageMax: '1440px',
|