fix(input) : InputAutocomplete garde la valeur collée après sélection (MUI-48)

Après avoir sélectionné une suggestion dans la liste, un collage qui
remplace tout (Ctrl+A puis Ctrl+V, sans re-cliquer dans le champ) vidait
le champ au lieu de prendre la valeur collée.

Cause : onSelect repassait isFocused à false alors que l'input gardait le
focus DOM (option cliquée en mousedown.prevent). Au collage, onInput émet
update:modelValue(null) et le watch de synchronisation, protégé par le seul
isFocused, remettait inputValue à ''. onInput resynchronise désormais
isFocused (un évènement input prouve l'édition).

- test de non-régression colocalisé (séquence sélection → Ctrl+A/Ctrl+V)
- page playground : section allowCreate + BAN dédiée au test
- CHANGELOG : entrée Fixed MUI-48

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-25 10:37:17 +02:00
parent 37434fbfc6
commit b09a96cc53
4 changed files with 104 additions and 1 deletions
+1
View File
@@ -72,6 +72,7 @@ Liste des évolutions de la librairie Malio layer UI
* [#MUI-42] Button / ButtonIcon : l'anneau de focus passe du halo `ring-2 ring-m-primary/50` à l'anneau standard `.m-focus-ring` (outline plein, offset 2px), pour l'homogénéité avec les autres composants.
### Fixed
* [#MUI-48] InputAutocomplete : après avoir **sélectionné une suggestion** dans la liste, un **collage qui remplace tout** (Ctrl+A puis Ctrl+V, sans re-cliquer dans le champ) **vidait le champ** au lieu de prendre la valeur collée (label qui redescend, dropdown « Tapez pour rechercher »). Cause : `onSelect` repassait `isFocused` à `false` alors que l'input gardait le focus DOM (option cliquée en `mousedown.prevent`) ; le `watch` de synchronisation, non protégé, remettait `inputValue` à `''`. `onInput` resynchronise désormais `isFocused`. La sélection à la souris n'était pas affectée (re-clic réalignant l'état).
* [#MUI-47] Sidebar : la **bande de ~4px en haut/bas d'un lien** (padding du `<li>` qui porte le fond de hover) était survolée mais **non cliquable**. Le padding vertical passe du `<li>` à l'`<a>` (`py-1`), si bien que toute la zone survolée devient cliquable — sans changement visuel. Les côtés n'étaient pas affectés (`<a>` en `block`, pas de padding horizontal sur le `<li>`).
* Sidebar : le **lien actif** reste actif sur les **sous-routes** (match par préfixe via `useRoute().path` au lieu de l'`active-class` de NuxtLink qui dépendait de l'imbrication des routes) — ex. `/supplier` reste surligné sur `/supplier/1/edit`. Nouvelle option `exact: true` par item pour forcer le match strict.
* Famille Date (CalendarField) : le **clic sur le picto calendrier** ouvre désormais le popover (le `<Icon>` en overlay absolu interceptait le clic sans le traiter, et ne le laissait pas retomber sur l'input). Couvre Date, DateTime, DateRange, DateWeek. La croix d'effacement conserve son comportement (efface sans ouvrir).