From f25e92b218c4f6eb469b8ec7e4e3c8b4a519a5d9 Mon Sep 17 00:00:00 2001 From: Robin Lopez Date: Sun, 23 Aug 2026 16:09:38 +0200 Subject: [PATCH] feat(ui-fields): FSHSP-157 Add options floatLabel with variants over / on / in --- CHANGELOG.md | 15 ++ figma/README.md | 4 +- figma/component-vars.json | 140 ++++++++++++- .../ui-kit/forms/src/lib/base-form-field.ts | 17 ++ .../src/lib/ui-autocomplete.html | 2 + .../src/lib/ui-autocomplete.scss | 1 + .../src/lib/ui-autocomplete.ts | 10 +- .../forms/ui-autocomplete/ui-autocomplete.mdx | 14 ++ .../ui-autocomplete.stories.ts | 38 ++++ .../ui-datepicker/src/lib/ui-datepicker.html | 1 + .../forms/ui-datepicker/ui-datepicker.mdx | 17 ++ .../ui-datepicker/ui-datepicker.stories.ts | 30 ++- .../forms/ui-field/src/lib/ui-field.html | 28 ++- .../forms/ui-field/src/lib/ui-field.scss | 188 +++++++++++++++++- .../ui-kit/forms/ui-field/src/lib/ui-field.ts | 26 ++- .../ui-input-mask/src/lib/ui-input-mask.html | 5 +- .../ui-input-mask/src/lib/ui-input-mask.ts | 6 + .../forms/ui-input-mask/ui-input-mask.mdx | 14 ++ .../ui-input-mask/ui-input-mask.stories.ts | 30 ++- .../src/lib/ui-input-number.html | 4 +- .../src/lib/ui-input-number.ts | 6 + .../forms/ui-input-number/ui-input-number.mdx | 16 ++ .../ui-input-number.stories.ts | 30 ++- .../ui-input-tags/src/lib/ui-input-tags.html | 2 + .../ui-input-tags/src/lib/ui-input-tags.scss | 1 + .../ui-input-tags/src/lib/ui-input-tags.ts | 9 +- .../forms/ui-input-tags/ui-input-tags.mdx | 15 ++ .../ui-input-tags/ui-input-tags.stories.ts | 28 +++ .../forms/ui-input/src/lib/ui-input.html | 7 +- .../forms/ui-input/src/lib/ui-input.spec.ts | 147 ++++++++++++++ .../ui-kit/forms/ui-input/src/lib/ui-input.ts | 8 + projects/ui-kit/forms/ui-input/ui-input.mdx | 69 +++++++ .../ui-kit/forms/ui-input/ui-input.stories.ts | 51 ++++- .../forms/ui-label/src/lib/ui-label.scss | 10 + projects/ui-kit/forms/ui-label/ui-label.mdx | 4 + .../forms/ui-select/src/lib/ui-select.html | 6 +- .../forms/ui-select/src/lib/ui-select.scss | 3 + .../forms/ui-select/src/lib/ui-select.ts | 5 + projects/ui-kit/forms/ui-select/ui-select.mdx | 17 ++ .../forms/ui-select/ui-select.stories.ts | 36 +++- .../ui-textarea/src/lib/ui-textarea.html | 4 +- .../ui-textarea/src/lib/ui-textarea.scss | 2 + .../forms/ui-textarea/src/lib/ui-textarea.ts | 6 + .../ui-kit/forms/ui-textarea/ui-textarea.mdx | 16 ++ .../forms/ui-textarea/ui-textarea.stories.ts | 30 ++- projects/ui-kit/styles/component-vars.scss | 13 +- projects/ui-kit/styles/utils/_mixins.scss | 18 +- 47 files changed, 1116 insertions(+), 33 deletions(-) create mode 100644 projects/ui-kit/forms/ui-input/src/lib/ui-input.spec.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index eff79eeb..cb0ee543 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,21 @@ Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et le pr ## [Unreleased] +### Added + +- **Les champs à boîte acceptent un mode `floatLabel`, avec ses trois variantes** (FSHSP-157). Le libellé n'avait qu'une place possible, au-dessus du champ : un formulaire dense n'avait pas d'autre levier que de le retirer et de rabattre l'information sur le `placeholder`, qui disparaît à la première frappe et n'est pas un libellé pour un lecteur d'écran. `floatLabel` le fait descendre **dans** le champ, où il tient le rôle du placeholder, et remonter au focus, dès qu'une valeur est présente, tant qu'un panneau ouvert retient le champ (un déclencheur comme `ui-datepicker` confie le focus à son calendrier sans cesser d'être actif), ou sur autofill du navigateur (qui ne déclenche aucun évènement de saisie). Trois positions hautes, alignées sur celles de PrimeNG : `over` (au-dessus de la boîte), `in` (bande réservée en haut de la boîte, qui grandit d'autant pour que la rangée du contrôle garde sa hauteur) et `on` (à cheval sur le trait, qu'il entaille). Disponible sur les huit champs bâtis sur le shell `ui-field` : `ui-input`, `ui-textarea`, `ui-select`, `ui-autocomplete`, `ui-input-number`, `ui-input-mask`, `ui-input-tags` et `ui-datepicker` (qui le transmet à son déclencheur). L'input est porté par `BaseFormField`, donc un champ écrit sur cette base l'hérite sans code supplémentaire. Non renseigné, rien ne change : le libellé classique reste le défaut, sur tous les champs. + - Le libellé flottant reste un `