From 9f9723d01c78f624662e2fe5fb4ab5913f0d86b2 Mon Sep 17 00:00:00 2001 From: tristan Date: Thu, 11 Jun 2026 15:16:10 +0000 Subject: [PATCH] =?UTF-8?q?feat(ui)=20:=20MalioDate/DateTime=20=E2=80=94?= =?UTF-8?q?=20validit=C3=A9,=20saisie=20clavier=20&=20gabarit=20(#MUI-43)?= =?UTF-8?q?=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ticket MUI-43 : exposer l'état de validité de MalioDate (saisie invalide avalée silencieusement) + portage de la saisie clavier sur MalioDateTime. ## Contenu **MalioDate** - Nouvel event `update:valid(boolean)` : `false` sur saisie malformée ou hors min/max (qui n'émet pas `modelValue`), `true` sinon ; émis dès le montage. La validité ne couvre pas `required` (champ vide = valide). **MalioDateTime** - Prop `editable` : saisie clavier `JJ/MM/AAAA HH:MM` (masque maska, validation au blur/Entrée, `invalidMessage`) + même `update:valid`. - Nouveau parseur `parseDisplayToIsoDateTime`. **Famille Date editable (Date + DateTime)** - Gabarit fantôme progressif : le format s'affiche en gris et se remplit au fil de la saisie (overlay ghost mirror, texte de l'input transparent). - Séparateurs (/, espace, :) posés automatiquement (maska `eager`), espace insécable pour éviter le collage `12/12/1999HH:MM`. - `CalendarField` : prop `placeholderTemplate` (le masque maska en est dérivé). **Corrections** - La croix d'effacement réinitialise la saisie clavier même après une date invalide (le v-model restant null, le champ ne se vidait pas). - Fix d'un test `Date.test.ts` cassé sur develop (`trigger('keydown.enter')` envoie key='enter' ≠ handler `e.key === 'Enter'`). ## Portée MalioDate seul pour la validité (les cousins DateRange/DateWeek n'ont pas de saisie clavier donc pas le bug). Sémantique `valid` = malformé only. ## Tests `app/components/malio/date/` : 187/187, ESLint propre. Vérifié visuellement dans le playground (page Date & heure). ## Doc COMPONENTS.md + CHANGELOG.md à jour. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: https://gitea.malio.fr/MALIO-DEV/malio-layer-ui/pulls/71 Co-authored-by: tristan Co-committed-by: tristan --- .playground/pages/composant/date/datetime.vue | 16 ++ CHANGELOG.md | 4 + COMPONENTS.md | 16 +- app/components/malio/date/Date.test.ts | 122 ++++++++++++- app/components/malio/date/Date.vue | 28 ++- app/components/malio/date/DateTime.test.ts | 163 ++++++++++++++++++ app/components/malio/date/DateTime.vue | 51 +++++- .../date/composables/datetimeFormat.test.ts | 29 ++++ .../malio/date/composables/datetimeFormat.ts | 12 +- .../malio/date/internal/CalendarField.vue | 42 ++++- 10 files changed, 463 insertions(+), 20 deletions(-) diff --git a/.playground/pages/composant/date/datetime.vue b/.playground/pages/composant/date/datetime.vue index f7d0938..4ffe173 100644 --- a/.playground/pages/composant/date/datetime.vue +++ b/.playground/pages/composant/date/datetime.vue @@ -13,6 +13,20 @@

Valeur (ISO naïf) : {{ value ?? 'null' }}

+ +
+

Valeur éditable (ISO naïf) : {{ editableValue ?? 'null' }}

+

+ Saisie valide : + {{ editableValid }} +

+