fix(date) : borne la saisie clavier pour empêcher les dates absurdes (99/99/9999) #79
Reference in New Issue
Block a user
Delete Branch "feature/date-bounded-mask"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
Sur la famille Date editable, le masque maska n'imposait que la forme (
##/##/####). Une valeur structurellement absurde comme99/99/9999était donc saisissable, puis rejetée a posteriori par la validation. Le métier veut que ce soit impossible à taper.Solution (masque borné + validation en filet)
composables/maskTemplate.ts—buildBoundedMask(template): borne le premier chiffre de chaque champ (jour0-3, mois0-1, heure0-2, minute0-5). Distingue le mois des minutes (même lettreM) selon la présence d'heures dans le gabarit, pour ne pas brider la saisie des minutes du DateTime.internal/CalendarField.vue— branche le builder dansmaskaOptions(remplace lereplace(/[A-Za-z]/g, '#')).Les impossibilités plus fines (
31/02, 29/02 non bissextile, horsmin/max) restent captées par la validation (invalidMessage+update:valid=false).Tests
maskTemplate.test.ts(5) — bornes par champ, structure du masque, non-confusion mois/minutes.Date.test.ts— testinvalidMessageadapté (32/13/2026, typable→invalide) + garde de non-régression :99/99/9999ne s'inscrit jamais et n'émet aucune date.Doc :
COMPONENTS.md(MalioDate) +CHANGELOG.md(Fixed) à jour.