Vues du calendrier

DayFlow propose cinq types de vues, chacun optimisé pour des usages et des besoins différents. Vous pouvez changer de vue par programmation ou proposer une interface permettant aux utilisateurs de le faire.

Vues disponibles

Vue Jour

La vue Jour se concentre sur une seule journée avec des créneaux horaires détaillés : idéale pour gérer un planning quotidien.

Configuration

PropriétéTypePar défautDescription
showAllDaybooleantrueIndique si la ligne des événements sur la journée entiÚre est affichée.
scrollToCurrentTimebooleantrueIndique si la vue défile jusqu'à l'heure actuelle au chargement.
timeFormat'12h' | '24h''24h'Format d'heure de l'axe temporel.
secondaryTimeZonestringundefinedAxe temporel de référence secondaire, uniquement dans la vue Jour.
hourHeightnumber72Hauteur en pixels de chaque ligne horaire de la grille.
import {
  useCalendarApp,
  DayFlowCalendar,
  createDayView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createDayView()],
    defaultView: ViewType.DAY,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createDayView, ViewType } from '@dayflow/core';

const calendar = useCalendarApp({
  views: [createDayView()],
  defaultView: ViewType.DAY,
  initialDate: new Date(),
});
</script>
import { Component } from '@angular/core';
import { createDayView, ViewType } from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [createDayView()],
    defaultView: ViewType.DAY,
    initialDate: new Date(),
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createDayView, ViewType } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [createDayView()],
    defaultView: ViewType.DAY,
    initialDate: new Date(),
  });
</script>

<DayFlowCalendar {calendar} />

Vue Semaine

La vue Semaine affiche une grille de 7 jours avec des crĂ©neaux horaires, oĂč chaque Ă©vĂ©nement apparaĂźt avec ses heures exactes de dĂ©but et de fin.

Configuration

PropriétéTypePar défautDescription
showWeekendsbooleantrueIndique si le samedi et le dimanche sont affichés.
showAllDaybooleantrueIndique si la ligne des événements sur la journée entiÚre est affichée.
startOfWeeknumber1Jour de début de la semaine (0 pour dimanche, 1 pour lundi, etc.).
scrollToCurrentTimebooleantrueIndique si la vue défile jusqu'à l'heure actuelle au chargement.
timeFormat'12h' | '24h''24h'Format d'heure de l'axe temporel.
secondaryTimeZonestringundefinedAxe temporel de référence secondaire, uniquement dans la vue Semaine.
gridDateClick'day-view' | 'none' | functionundefinedAction lors d'un clic sur une cellule de date.
gridDateDoubleClick'create-event' | 'day-view' | 'none' | function'create-event'Action lors d'un double-clic sur une cellule de date. 'create-event' (valeur par défaut) crée un événement d'une heure à la position (heure) cliquée.
hourHeightnumber72Hauteur en pixels de chaque ligne horaire de la grille.
import {
  useCalendarApp,
  DayFlowCalendar,
  createWeekView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createWeekView()],
    defaultView: ViewType.WEEK,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createWeekView, ViewType } from '@dayflow/core';

const calendar = useCalendarApp({
  views: [createWeekView()],
  defaultView: ViewType.WEEK,
  initialDate: new Date(),
});
</script>
import { Component } from '@angular/core';
import { createWeekView, ViewType } from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [createWeekView()],
    defaultView: ViewType.WEEK,
    initialDate: new Date(),
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createWeekView, ViewType } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [createWeekView()],
    defaultView: ViewType.WEEK,
    initialDate: new Date(),
  });
</script>

<DayFlowCalendar {calendar} />

Vue Mois

La vue Mois affiche la grille de calendrier classique avec tous les jours du mois.

Configuration

PropriétéTypePar défautDescription
showWeekNumbersbooleanfalseIndique si les numéros de semaine sont affichés.
showMonthIndicatorbooleantrueIndique si le titre indiquant le mois apparaßt lors du défilement.
startOfWeeknumber1Jour de début de la semaine (0 pour dimanche, 1 pour lundi, etc.).
snapToMonthbooleanfalseLorsqu'elle est activée, la vue se cale sur le début du mois dominant dÚs que l'utilisateur cesse de faire défiler.
gridDateClick'week-view' | 'day-view' | 'none' | functionundefinedAction lors d'un clic sur une cellule de date.
gridDateDoubleClick'create-event' | 'week-view' | 'day-view' | 'none' | function'create-event'Action lors d'un double-clic sur une cellule de date. 'create-event' (valeur par défaut) crée un événement de 9h00 à 10h00 à la date cliquée.
eventHeightnumber16Hauteur en pixels de chaque ligne d'événement dans la grille mensuelle.
scrollMonthScrollConfig—ContrĂŽle le verrouillage du dĂ©filement et l'animation de changement de mois. Voir ci-dessous.

MonthScrollConfig

PropriétéTypePar défautDescription
disabledbooleanfalseDĂ©sactive le dĂ©filement continu. Le mois ne peut alors ĂȘtre changĂ© qu'avec les boutons PrĂ©cĂ©dent / Suivant.
transition'fade' | undefinedundefinedAnimation lors du changement de mois (uniquement avec disabled: true). 'fade' fait disparaßtre le mois courant avec un glissement horizontal et fait apparaßtre le suivant en fondu. Si elle est omise, l'animation de défilement fluide d'origine est conservée.
createMonthView({
  scroll: {
    disabled: true, // lock to one month at a time, Prev/Next only
    transition: 'fade', // optional fade animation (omit to keep smooth scroll)
  },
});
import {
  useCalendarApp,
  DayFlowCalendar,
  createMonthView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [createMonthView()],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createMonthView, ViewType } from '@dayflow/core';

const calendar = useCalendarApp({
  views: [createMonthView()],
  defaultView: ViewType.MONTH,
  initialDate: new Date(),
});
</script>
import { Component } from '@angular/core';
import { createMonthView, ViewType } from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [createMonthView()],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createMonthView, ViewType } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [createMonthView()],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
  });
</script>

<DayFlowCalendar {calendar} />

Vue Agenda

La vue Agenda prĂ©sente les Ă©vĂ©nements sous forme de liste chronologique groupĂ©e par jour. Elle convient particuliĂšrement aux mises en page mobiles, Ă  la planification Ă  long terme et aux flux oĂč l'utilisateur souhaite parcourir rapidement les Ă©vĂ©nements Ă  venir.

Configuration

PropriétéTypePar défautDescription
daysToShownumber14Nombre de jours consécutifs affichés dans la liste.
showEmptyDaysbooleantrueIndique si les jours sans événement restent visibles dans la liste.
timeFormat'12h' | '24h''24h'Format d'heure utilisé pour les lignes d'événements horodatés.
gridDateClick'day-view' | 'none' | functionundefinedAction lors d'un clic sur la section d'un jour.
gridDateDoubleClick'day-view' | 'none' | function'day-view'Action lors d'un double-clic sur la section d'un jour.
import {
  useCalendarApp,
  DayFlowCalendar,
  createAgendaView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [
      createAgendaView({
        daysToShow: 14,
        timeFormat: '12h',
        gridDateDoubleClick: 'day-view',
      }),
    ],
    defaultView: ViewType.AGENDA,
    initialDate: new Date(),
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createAgendaView, ViewType } from '@dayflow/core';

const calendar = useCalendarApp({
  views: [
    createAgendaView({
      daysToShow: 14,
      timeFormat: '12h',
      gridDateDoubleClick: 'day-view',
    }),
  ],
  defaultView: ViewType.AGENDA,
  initialDate: new Date(),
});
</script>
import { Component } from '@angular/core';
import { createAgendaView, ViewType } from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [
      createAgendaView({
        daysToShow: 14,
        timeFormat: '12h',
        gridDateDoubleClick: 'day-view',
      }),
    ],
    defaultView: ViewType.AGENDA,
    initialDate: new Date(),
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createAgendaView, ViewType } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [
      createAgendaView({
        daysToShow: 14,
        timeFormat: '12h',
        gridDateDoubleClick: 'day-view',
      }),
    ],
    defaultView: ViewType.AGENDA,
    initialDate: new Date(),
  });
</script>

<DayFlowCalendar {calendar} />

Vue Année

La vue AnnĂ©e offre une vision annuelle complĂšte. Elle prend en charge trois modes : year-canvas (grille continue), fixed-week (52 colonnes hebdomadaires fixes) et grid (une grille de mois 4×3, idĂ©ale pour les cartes de chaleur).

Configuration

PropriétéTypePar défautDescription
mode'year-canvas' | 'fixed-week' | 'grid''year-canvas'Mode d'affichage de la vue Année.
startOfWeeknumber1Jour de début de la semaine (0 pour dimanche, 1 pour lundi, etc.). Utilisé dans les modes fixed-week et grid.
showTimedEventsInYearViewbooleanfalseIndique si les événements horodatés apparaissent dans la vue Année (points, indicateurs ou intensité).
gridDateClick'popup' | 'day-view' | 'none' | function'popup'(Mode grid) Action lors d'un clic sur une cellule de date.
gridDateDoubleClick'create-event' | 'day-view' | 'none' | function'create-event'(Mode grid) Action lors d'un double-clic sur une cellule de date. 'create-event' (valeur par défaut) crée un événement de 9h00 à 10h00.
gridHeatmapLevelsnumber5(Mode grid) Nombre de niveaux d'intensité de la carte de chaleur.

Personnaliser la carte de chaleur (mode grid)

Avec mode: 'grid', le calendrier se comporte comme une carte de chaleur : l'intensité (la couleur) de chaque jour dépend du nombre d'événements. Vous pouvez personnaliser les couleurs en redéfinissant les variables CSS suivantes dans votre CSS global :

/* Light Mode Heatmap */
.df-year-grid-month {
  --heat-1: #ebf5ff;
  --heat-2: #cfe8ff;
  --heat-3: #91d5ff;
  --heat-4: #60a5fa;
  --heat-5: #3b82f6;
}

/* Dark Mode Heatmap */
.dark .df-year-grid-month {
  --heat-1: #1e3a5f;
  --heat-2: #2563eb;
  --heat-3: #1e40af;
  --heat-4: #3b82f6;
  --heat-5: #93c5fd;
}

Si vous donnez une autre valeur à gridHeatmapLevels (par exemple 3), définissez les variables jusqu'à ce nombre (de --heat-1 à --heat-3).

import {
  useCalendarApp,
  DayFlowCalendar,
  createYearView,
  ViewType,
} from '@dayflow/react';

function MyCalendar() {
  const calendar = useCalendarApp({
    views: [
      createYearView({
        mode: 'grid',
        showTimedEventsInYearView: true,
        gridHeatmapLevels: 5,
      }),
    ],
    defaultView: ViewType.YEAR,
  });

  return <DayFlowCalendar calendar={calendar} />;
}
<template>
  <DayFlowCalendar :calendar="calendar" />
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import { createYearView, ViewType } from '@dayflow/core';

const calendar = useCalendarApp({
  views: [
    createYearView({
      mode: 'grid',
      showTimedEventsInYearView: true,
      gridHeatmapLevels: 5,
    }),
  ],
  defaultView: ViewType.YEAR,
});
</script>
import { Component } from '@angular/core';
import { createYearView, ViewType } from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
  `
})
export class AppComponent {
  calendar = {
    views: [
      createYearView({
        mode: 'grid',
        showTimedEventsInYearView: true,
        gridHeatmapLevels: 5,
      }),
    ],
    defaultView: ViewType.YEAR,
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import { createYearView, ViewType } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [
      createYearView({
        mode: 'grid',
        showTimedEventsInYearView: true,
        gridHeatmapLevels: 5,
      }),
    ],
    defaultView: ViewType.YEAR,
  });
</script>

<DayFlowCalendar {calendar} />

Utiliser plusieurs vues

Vous pouvez enregistrer plusieurs vues et laisser les utilisateurs passer de l'une Ă  l'autre :

import {
  useCalendarApp,
  DayFlowCalendar,
  createAgendaView,
  createDayView,
  createWeekView,
  createMonthView,
  createYearView,
  ViewType,
} from '@dayflow/react';

function MultiViewCalendar() {
  const calendar = useCalendarApp({
    views: [
      createAgendaView({ daysToShow: 10 }),
      createDayView(),
      createWeekView(),
      createMonthView(),
      createYearView(),
    ],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
    callbacks: {
      onViewChange: view => {
        console.log('View changed to:', view);
      },
    },
  });

  return (
    <div className='h-screen'>
      <DayFlowCalendar calendar={calendar} />
    </div>
  );
}
<template>
  <div class="h-screen">
    <DayFlowCalendar :calendar="calendar" />
  </div>
</template>

<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import {
  createAgendaView,
  createDayView,
  createWeekView,
  createMonthView,
  createYearView,
  ViewType,
} from '@dayflow/core';

const calendar = useCalendarApp({
  views: [
    createAgendaView({ daysToShow: 10 }),
    createDayView(),
    createWeekView(),
    createMonthView(),
    createYearView(),
  ],
  defaultView: ViewType.MONTH,
  initialDate: new Date(),
  callbacks: {
    onViewChange: (view) => {
      console.log('View changed to:', view);
    },
  },
});
</script>
import { Component } from '@angular/core';
import {
  createAgendaView,
  createDayView,
  createWeekView,
  createMonthView,
  createYearView,
  ViewType,
} from '@dayflow/core';
import { DayFlowCalendarModule } from '@dayflow/angular';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DayFlowCalendarModule],
  template: `
    <div class="h-screen">
      <dayflow-calendar [calendar]="calendar"></dayflow-calendar>
    </div>
  `
})
export class AppComponent {
  calendar = {
    views: [
      createAgendaView({ daysToShow: 10 }),
      createDayView(),
      createWeekView(),
      createMonthView(),
      createYearView(),
    ],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
    callbacks: {
      onViewChange: (view: any) => {
        console.log('View changed to:', view);
      },
    },
  };
}
<script>
  import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
  import {
    createAgendaView,
    createDayView,
    createWeekView,
    createMonthView,
    createYearView,
    ViewType,
  } from '@dayflow/core';

  const calendar = useCalendarApp({
    views: [
      createAgendaView({ daysToShow: 10 }),
      createDayView(),
      createWeekView(),
      createMonthView(),
      createYearView(),
    ],
    defaultView: ViewType.MONTH,
    initialDate: new Date(),
    callbacks: {
      onViewChange: (view) => {
        console.log('View changed to:', view);
      },
    },
  });
</script>

<div class="h-screen">
  <DayFlowCalendar {calendar} />
</div>

ContrĂŽle des vues par programmation

Changer de vue

// Change to a specific view
calendar.changeView(ViewType.WEEK);

// Get current view
const currentView = calendar.app.getCurrentView();
console.log(currentView.type); // 'week'

Toutes les vues prennent en charge les mĂȘmes mĂ©thodes de navigation :

// Go to today
calendar.goToToday();

// Go to previous period (day/week/month/agenda/year depending on current view)
calendar.goToPrevious();

// Go to next period
calendar.goToNext();

// Go to a specific date
calendar.selectDate(new Date(2024, 9, 15));

L'énumération ViewType

enum ViewType {
  DAY = 'day',
  WEEK = 'week',
  MONTH = 'month',
  AGENDA = 'agenda',
  YEAR = 'year',
}

Dans cette page