feat : story et page playground de MalioDateRange (#MUI-33)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
56
.playground/pages/composant/date/dateRange.vue
Normal file
56
.playground/pages/composant/date/dateRange.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<template>
|
||||
<div class="max-w-md space-y-6">
|
||||
<h1 class="text-2xl font-bold">MalioDateRange</h1>
|
||||
|
||||
<MalioDateRange
|
||||
v-model="value"
|
||||
label="Période"
|
||||
hint="Clique deux fois pour définir une plage"
|
||||
/>
|
||||
|
||||
<div class="rounded border p-3 text-sm">
|
||||
<p>Début : <code>{{ value?.start ?? 'null' }}</code></p>
|
||||
<p>Fin : <code>{{ value?.end ?? 'null' }}</code></p>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
<button
|
||||
type="button"
|
||||
class="rounded bg-m-primary px-3 py-1.5 text-white"
|
||||
@click="value = {start: '2026-12-20', end: '2026-12-31'}"
|
||||
>
|
||||
Forcer 20→31/12/2026
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="rounded border px-3 py-1.5"
|
||||
@click="value = null"
|
||||
>
|
||||
Réinitialiser
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<MalioDateRange
|
||||
v-model="bounded"
|
||||
label="Plage bornée"
|
||||
:min="todayIso"
|
||||
:max="maxIso"
|
||||
hint="Entre aujourd'hui et +30 jours"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from 'vue'
|
||||
|
||||
type RangeValue = {start: string; end: string}
|
||||
|
||||
const pad = (n: number) => String(n).padStart(2, '0')
|
||||
const toIso = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`
|
||||
const now = new Date()
|
||||
const todayIso = toIso(now)
|
||||
const maxIso = toIso(new Date(now.getTime() + 30 * 86400000))
|
||||
|
||||
const value = ref<RangeValue | null>(null)
|
||||
const bounded = ref<RangeValue | null>(null)
|
||||
</script>
|
||||
77
app/story/date/dateRange.story.vue
Normal file
77
app/story/date/dateRange.story.vue
Normal file
@@ -0,0 +1,77 @@
|
||||
<template>
|
||||
<Story title="Date/DateRange">
|
||||
<div class="grid grid-cols-1 items-start gap-6 md:grid-cols-2">
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Simple</h2>
|
||||
<MalioDateRange
|
||||
v-model="simpleValue"
|
||||
label="Période"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Valeur initiale</h2>
|
||||
<MalioDateRange
|
||||
v-model="initialValue"
|
||||
label="Séjour"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Avec min/max</h2>
|
||||
<MalioDateRange
|
||||
v-model="boundedValue"
|
||||
label="Plage bornée"
|
||||
:min="todayIso"
|
||||
:max="maxIso"
|
||||
hint="Entre aujourd'hui et +30 jours"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Non effaçable</h2>
|
||||
<MalioDateRange
|
||||
v-model="initialValue"
|
||||
label="Période verrouillée"
|
||||
:clearable="false"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Désactivé</h2>
|
||||
<MalioDateRange
|
||||
v-model="initialValue"
|
||||
label="Désactivé"
|
||||
disabled
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border p-4">
|
||||
<h2 class="mb-4 text-xl font-bold">Erreur</h2>
|
||||
<MalioDateRange
|
||||
v-model="errorValue"
|
||||
label="Période"
|
||||
error="Période invalide"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Story>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from 'vue'
|
||||
import MalioDateRange from '../../components/malio/date/DateRange.vue'
|
||||
|
||||
type RangeValue = {start: string; end: string}
|
||||
|
||||
const pad = (n: number) => String(n).padStart(2, '0')
|
||||
const toIso = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`
|
||||
const now = new Date()
|
||||
const todayIso = toIso(now)
|
||||
const maxIso = toIso(new Date(now.getTime() + 30 * 86400000))
|
||||
|
||||
const simpleValue = ref<RangeValue | null>(null)
|
||||
const initialValue = ref<RangeValue | null>({start: todayIso, end: maxIso})
|
||||
const boundedValue = ref<RangeValue | null>(null)
|
||||
const errorValue = ref<RangeValue | null>(null)
|
||||
</script>
|
||||
Reference in New Issue
Block a user