# 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).