- nouveau token couleur m-primary-light (#EFEFFD) - popover en largeur du champ, shadow au lieu de bordure, collé au champ - frames semaine (35x45) et jours alignés à 45px, cercle centré, font-medium - colonne semaine étroite + marge, numéros en black/60 (semaine courante en black) - vue mois en toutes lettres sur 3 colonnes, blocs 45px - label bleu et grossissement calibré du champ à l'ouverture - header sans hover, chevrons et titre plaqués en haut Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
71 lines
1.7 KiB
Vue
71 lines
1.7 KiB
Vue
<template>
|
|
<div class="flex h-[36px] justify-between border-b border-black/60 mb-3">
|
|
<button
|
|
type="button"
|
|
data-test="header-prev"
|
|
class="ml-2 flex self-start rounded"
|
|
:aria-label="viewMode === 'days' ? 'Mois précédent' : 'Année précédente'"
|
|
@click="emit('prev')"
|
|
>
|
|
<Icon
|
|
icon="mdi:chevron-left"
|
|
:width="25"
|
|
:height="25"
|
|
/>
|
|
</button>
|
|
|
|
<button
|
|
type="button"
|
|
data-test="header-toggle"
|
|
class="flex gap-1 rounded text-base font-medium"
|
|
@click="emit('toggle-view')"
|
|
>
|
|
<span class="mt-[2px]">{{ label }}</span>
|
|
<Icon
|
|
icon="mdi:chevron-down"
|
|
:width="25"
|
|
:height="25"
|
|
/>
|
|
</button>
|
|
|
|
<button
|
|
type="button"
|
|
data-test="header-next"
|
|
class="mr-2 flex self-start rounded"
|
|
:aria-label="viewMode === 'days' ? 'Mois suivant' : 'Année suivante'"
|
|
@click="emit('next')"
|
|
>
|
|
<Icon
|
|
icon="mdi:chevron-right"
|
|
:width="25"
|
|
:height="25"
|
|
/>
|
|
</button>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import {computed} from 'vue'
|
|
import {Icon} from '@iconify/vue'
|
|
|
|
defineOptions({name: 'MalioDateCalendarHeader'})
|
|
|
|
const props = defineProps<{
|
|
viewMode: 'days' | 'months'
|
|
currentMonth: number
|
|
currentYear: number
|
|
}>()
|
|
|
|
const emit = defineEmits<{
|
|
(e: 'prev' | 'next' | 'toggle-view'): void
|
|
}>()
|
|
|
|
const monthsLong = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin',
|
|
'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']
|
|
|
|
const label = computed(() => {
|
|
const name = monthsLong[props.currentMonth]
|
|
return `${name.charAt(0).toUpperCase()}${name.slice(1)} ${props.currentYear}`
|
|
})
|
|
</script>
|