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

## Contexte — MUI-48
« Le champ adresse disparaît après un copier-coller » (Malio UI, bug frontend).

## Repro exacte
1. Taper une adresse, **sélectionner une suggestion** dans la liste.
2. Sans re-cliquer dans le champ : `Ctrl+A` puis `Ctrl+V` pour remplacer.
3. → Le champ se **vide** (label qui redescend, dropdown « Tapez pour rechercher »), la valeur collée est perdue.

À la souris (re-clic dans le champ) le bug ne se produit pas.

## Cause racine
`onSelect` repassait `isFocused` à `false` alors que l'input **garde le focus DOM** (l'option est cliquée en `mousedown.prevent`). Au collage, `onInput` émet `update:modelValue(null)` ; le `watch` de synchronisation, protégé par le seul `isFocused`, remettait alors `inputValue` à `''`.

## Correctif
`onInput` resynchronise `isFocused = true` : recevoir un évènement `input` prouve que le champ est en cours d'édition. Le `watch` se protège correctement et ne stompe plus la valeur collée. Correctif d'une ligne, au point exact de la cause.

## Tests / vérifs
- Test de non-régression colocalisé (séquence sélection → `Ctrl+A`/`Ctrl+V`) — échoue sans le fix, passe avec.
- Suite complète : **1057/1057** tests OK, lint sans erreur.
- Page playground : nouvelle section **allowCreate + BAN** dédiée au test manuel.
- `CHANGELOG.md` : entrée `Fixed` MUI-48.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #87
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #87.
This commit is contained in:
2026-06-25 08:42:42 +00:00
committed by Autin
parent 37434fbfc6
commit 82f9321506
4 changed files with 104 additions and 1 deletions
@@ -393,6 +393,11 @@ const scheduleSearch = () => {
const onInput = (event: Event) => {
const target = event.target as HTMLInputElement
// Un évènement input prouve que le champ est en cours d'édition : on resynchronise
// isFocused, qu'une sélection précédente (onSelect) a pu passer à false tout en gardant
// le focus DOM (clic option en mousedown.prevent). Sans ça, le watch ci-dessous remettrait
// inputValue à '' au collage et la valeur collée serait perdue (MUI-48).
isFocused.value = true
inputValue.value = target.value
if (!isOpen.value) isOpen.value = true
activeIndex.value = -1