diff --git a/CHANGELOG.md b/CHANGELOG.md index 9da9db9e..7ae2c4b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,12 @@ Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/) et le pr ### Added +- **`ng add @4sh/ui-kit-schematics` pose l'arborescence d'assets maison** (FSHSP-164). `src/assets/` ne recevait qu'un `assets-map.json` vide, et seulement si `ui-image` faisait partie des composants copiés : le consommateur héritait de composants qui résolvent `assets/img/{marque}/{type}/…` sans un seul dossier pour les accueillir, ni rien qui dise où déposer une police ou un favicon. La fondation pose désormais `fonts/{police,icon}/` et `img/{common,brand1,brand2,brand3}/{jpg,png,svg}/` (les dossiers vides portent un `.gitkeep` — ni git ni un `Tree` de schematic ne livre un dossier sans fichier), un `src/assets/README.md` qui documente la convention et le format de l'`assets-map.json`, et l'`assets-map.json` lui-même quels que soient les composants choisis. Les sous-dossiers `light/`/`dark/` ne sont pas échafaudés : ils sont l'exception, et le README dit où les créer. + - **`src/assets` est enfin déclaré au builder** (`assets` de la cible `build`, et de `test` quand elle est en Karma), en s'AJOUTANT au `public/` d'`ng new` plutôt qu'en le remplaçant. Sans cette entrée, tout ce que le kit résout sous `/assets/` répondait 404 dans l'application — `ui-image` tombant alors sur son placeholder sans rien dire de la cause. Les cibles `storybook`/`build-storybook` reprennent maintenant les assets de `build` au lieu de recoder la leur : la preview était le seul endroit où `/assets/` était servi, et elle y perdait au passage le `public/` du projet. Le `README.md` et les `.gitkeep` sont exclus du build (`ignore`). + - **Deux fichiers sont fournis, le reste est un emplacement vide** : les **drapeaux** SVG (`img/common/svg/flags/`), génériques et codés en dur par la story `ui-input-group` — sans eux, son indicatif téléphonique affichait une image cassée chez le consommateur — et un **favicon** placeholder, sur lequel le `` de l'`index.html` est pointé, uniquement s'il porte encore le `favicon.ico` d'`ng new` (jamais par-dessus un `href` choisi par le projet). L'ancien `public/favicon.ico` est laissé sur le disque, simplement plus référencé. + - **Aucun fichier de police n'est livré**, ni aucune fixture de démo : 2,2 Mo de `.ttf` de marque (dans un format qui n'est même pas celui que notre doc recommande) et 428 Ko de visuels de test arriveraient chez le consommateur comme du bruit à supprimer. À la place, un scaffold `src/styles/vendors/_fonts.scss` — mixin `variable-font`, exemple commenté, déjà `@use` par `main.scss`, et qui n'émet rien tant que rien n'est décommenté — plus la recette complète dans `src/assets/README.md`. + - Corrigé au passage : les chemins d'assets du scaffold `src/styles/variables.scss` pointaient vers `../assets/images/`, un dossier qui n'a jamais existé (l'arborescence dit `img/`), et il manquait `$path-police`. + - **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 `