# 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
MalioDateTime
Simple
Valeur (ISO naïf) : {{ value ?? 'null' }}
Valeur initiale + bornes
Valeur (ISO naïf) : {{ bounded ?? 'null' }}
```
- [ ] **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
Simple
Valeur initiale
Avec min/max
Erreur
Désactivé
Lecture seule
```
- [ ] **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).