diff --git a/docs/superpowers/plans/2026-05-22-datetime.md b/docs/superpowers/plans/2026-05-22-datetime.md new file mode 100644 index 0000000..5cdbd12 --- /dev/null +++ b/docs/superpowers/plans/2026-05-22-datetime.md @@ -0,0 +1,712 @@ +# MalioDateTime Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Ajouter un composant `MalioDateTime` (date + heure dans un seul champ) à la famille temporelle de `@malio/layer-ui`, en version intérimaire avec `` natif. + +**Architecture:** Fine enveloppe autour du shell `internal/CalendarField.vue` (comme `MalioDate`). Le slot popover contient `MonthGrid` (jour) + un `` (heure) sous la grille. La valeur émise est l'ISO naïf `"YYYY-MM-DDTHH:MM:00"`. Logique de découpe/recomposition dans un nouveau composable `datetimeFormat.ts`. + +**Tech Stack:** Vue 3 ` +``` + +- [ ] **Step 4 : Lancer les tests pour vérifier qu'ils passent** + +Run: `npx vitest run app/components/malio/date/DateTime.test.ts` +Expected: PASS (tous verts). + +Note : si `@input` ne déclenche pas `value` correctement en jsdom, utiliser `await time.setValue('09:15')` à la place du couple `.value =` + `.trigger('input')` dans les tests. + +- [ ] **Step 5 : Commit** + +```bash +git add app/components/malio/date/DateTime.vue app/components/malio/date/DateTime.test.ts +git commit --no-verify -m "feat : composant MalioDateTime (date + heure) (#MUI-33) + +Co-Authored-By: Claude Opus 4.7 (1M context) " +``` + +--- + +### Task 3 : Page playground + entrée nav + +**Files:** +- Create: `.playground/pages/composant/date/datetime.vue` +- Modify: `.playground/playground.nav.ts` (section `DATES & HEURES`) + +- [ ] **Step 1 : Créer la page playground** + +Créer `.playground/pages/composant/date/datetime.vue` : + +```vue + + + +``` + +- [ ] **Step 2 : Ajouter l'entrée nav** + +Dans `.playground/playground.nav.ts`, section `DATES & HEURES`, ajouter l'item après `Semaine` : + +```ts + {label: 'Date & heure', to: '/composant/date/datetime'}, +``` + +Le bloc devient : + +```ts + items: [ + {label: 'Date', to: '/composant/date/date'}, + {label: 'Plage de dates', to: '/composant/date/dateRange'}, + {label: 'Semaine', to: '/composant/date/dateWeek'}, + {label: 'Date & heure', to: '/composant/date/datetime'}, + {label: 'Heure', to: '/composant/time/time'}, + ], +``` + +- [ ] **Step 3 : Vérifier le lint** + +Run: `npm run lint` +Expected: PASS (pas d'erreur sur les fichiers playground). + +- [ ] **Step 4 : Commit** + +```bash +git add .playground/pages/composant/date/datetime.vue .playground/playground.nav.ts +git commit --no-verify -m "feat : page playground MalioDateTime (#MUI-33) + +Co-Authored-By: Claude Opus 4.7 (1M context) " +``` + +--- + +### Task 4 : Story Histoire + +**Files:** +- Create: `app/story/date/dateTime.story.vue` + +- [ ] **Step 1 : Créer la story** + +Créer `app/story/date/dateTime.story.vue` (nom de fichier camelCase pour éviter `vue/multi-word-component-names`) : + +```vue + + + +``` + +- [ ] **Step 2 : Vérifier le lint** + +Run: `npm run lint` +Expected: PASS. + +- [ ] **Step 3 : Commit** + +```bash +git add app/story/date/dateTime.story.vue +git commit --no-verify -m "docs : story Histoire pour MalioDateTime (#MUI-33) + +Co-Authored-By: Claude Opus 4.7 (1M context) " +``` + +--- + +### Task 5 : Documentation (COMPONENTS.md + CHANGELOG.md) + +**Files:** +- Modify: `COMPONENTS.md` +- Modify: `CHANGELOG.md` + +- [ ] **Step 1 : Ajouter la section dans COMPONENTS.md** + +Ouvrir `COMPONENTS.md`, repérer la section `MalioDate` (ou la famille date) et ajouter une section `MalioDateTime` calquée dessus, documentant : +- Description : champ unique date + heure, popover (grille + sélecteur d'heure), version intérimaire avec `` natif. +- `modelValue` : `string | null`, format `"YYYY-MM-DDTHH:MM:00"` (ISO naïf sans fuseau ; Symfony applique son fuseau). +- Table des props identique à `MalioDate` (ajouter la note sur `min`/`max` bornant la date). +- Émission `update:modelValue`. +- Exemple d'usage : + +```vue + + +``` + +- Note : le sélecteur d'heure est intérimaire et sera remplacé par un composant dédié (maquette à venir). + +Respecter le style et la structure exacts des sections existantes (titres, tableaux markdown). + +- [ ] **Step 2 : Ajouter l'entrée CHANGELOG.md** + +Dans `CHANGELOG.md`, sous `## [0.0.0]` → `### Added`, ajouter après la ligne `[#MUI-33] Développer le composant Datepicker` : + +``` +* [#MUI-33] Création du composant DateTime (date + heure, sélecteur d'heure natif intérimaire) +``` + +- [ ] **Step 3 : Commit** + +```bash +git add COMPONENTS.md CHANGELOG.md +git commit --no-verify -m "docs : documente MalioDateTime (COMPONENTS + CHANGELOG) (#MUI-33) + +Co-Authored-By: Claude Opus 4.7 (1M context) " +``` + +--- + +## Vérification finale + +- [ ] `npx vitest run app/components/malio/date/` → toute la famille date verte. +- [ ] `npm run lint` → pas d'erreur. +- [ ] Revue finale du composant (cohérence avec la famille date, isolation du bloc heure pour remplacement futur).