From 4775cbf184c2bd306601e94d3ab7388a2cf7c124 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Wed, 20 May 2026 10:22:17 +0200 Subject: [PATCH] =?UTF-8?q?feat(ui)=20:=20palette=20de=20couleurs=20=C3=A9?= =?UTF-8?q?largie=20+=20couleur=20personnalis=C3=A9e,=20fix=20champ=20code?= =?UTF-8?q?=20projet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ColorPicker : passe de 9 à 18 teintes prédéfinies (les 9 historiques conservées en tête pour ne pas désassocier les couleurs existantes) et ajoute une pastille « couleur personnalisée » (input natif type=color) permettant n'importe quel hex. Partagé, donc bénéficie aussi aux tags, priorités, groupes et workflows. fix(project) : le champ code restait en minuscules. Le @input mutait form.code à partir de l'ancienne valeur, puis l'émission update:modelValue de MalioInputText l'écrasait avec la saisie brute → form.code en minuscules (affiché en majuscules via CSS) → /^[A-Z]{2,10}$/ en échec → création bloquée. Remplacé par un computed setter (source unique de vérité : majuscules + lettres uniquement + max 10) et maxLength sur le champ. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/components/project/ProjectDrawer.vue | 23 ++++++-- frontend/components/ui/ColorPicker.vue | 57 ++++++++++++++++--- 2 files changed, 66 insertions(+), 14 deletions(-) diff --git a/frontend/components/project/ProjectDrawer.vue b/frontend/components/project/ProjectDrawer.vue index db3d837..7410d7f 100644 --- a/frontend/components/project/ProjectDrawer.vue +++ b/frontend/components/project/ProjectDrawer.vue @@ -2,13 +2,13 @@
form.code, + set: (value: string) => { + form.code = (value ?? '').toUpperCase().replace(/[^A-Z]/g, '').slice(0, 10) + }, +}) + const clientOptions = computed(() => props.clients.map(c => ({ label: c.name, value: c.id })) ) @@ -222,7 +233,7 @@ async function handleSubmit() { touched.name = true touched.code = true if (!form.name.trim()) return - if (!isEditing.value && (!form.code.trim() || !/^[A-Z]{2,10}$/.test(form.code.trim()))) return + if (!isEditing.value && !/^[A-Z]{2,10}$/.test(form.code)) return isSubmitting.value = true try { @@ -254,7 +265,7 @@ async function handleSubmit() { if (isEditing.value && props.project) { await update(props.project.id, payload) } else { - payload.code = form.code.trim() + payload.code = form.code await create(payload) } diff --git a/frontend/components/ui/ColorPicker.vue b/frontend/components/ui/ColorPicker.vue index b6c86fe..f8e30c8 100644 --- a/frontend/components/ui/ColorPicker.vue +++ b/frontend/components/ui/ColorPicker.vue @@ -1,22 +1,45 @@