Kalenderansichten

DayFlow bietet fünf Ansichtstypen, die jeweils auf unterschiedliche Anwendungsfälle und Bedürfnisse zugeschnitten sind. Sie können programmgesteuert zwischen Ansichten wechseln oder Ihren Nutzenden dafür eine Oberfläche anbieten.

Verfügbare Ansichten

Tagesansicht

Die Tagesansicht konzentriert sich mit detaillierten Zeitfenstern auf einen einzelnen Tag – ideal für die Tagesplanung.

Konfiguration

EigenschaftTypStandardBeschreibung
showAllDaybooleantrueLegt fest, ob die Zeile für ganztägige Termine angezeigt wird.
scrollToCurrentTimebooleantrueLegt fest, ob beim Laden zur aktuellen Uhrzeit gescrollt wird.
timeFormat'12h' | '24h''24h'Zeitformat der Zeitachse.
secondaryTimeZonestringundefinedZweite Referenz-Zeitachse, nur in der Tagesansicht.
hourHeightnumber72Höhe jeder Stundenzeile im Zeitraster in Pixeln.
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} />

Wochenansicht

Die Wochenansicht zeigt ein Raster aus sieben Tagen mit Zeitfenstern, in dem Termine mit ihrer genauen Start- und Endzeit erscheinen.

Konfiguration

EigenschaftTypStandardBeschreibung
showWeekendsbooleantrueLegt fest, ob Samstag und Sonntag angezeigt werden.
showAllDaybooleantrueLegt fest, ob die Zeile für ganztägige Termine angezeigt wird.
startOfWeeknumber1Erster Tag der Woche (0 = Sonntag, 1 = Montag usw.).
scrollToCurrentTimebooleantrueLegt fest, ob beim Laden zur aktuellen Uhrzeit gescrollt wird.
timeFormat'12h' | '24h''24h'Zeitformat der Zeitachse.
secondaryTimeZonestringundefinedZweite Referenz-Zeitachse, nur in der Wochenansicht.
gridDateClick'day-view' | 'none' | functionundefinedAktion beim Klick auf eine Datumszelle.
gridDateDoubleClick'create-event' | 'day-view' | 'none' | function'create-event'Aktion beim Doppelklick auf eine Datumszelle. 'create-event' (Standard) legt an der angeklickten Position (Stunde) einen einstündigen Termin an.
hourHeightnumber72Höhe jeder Stundenzeile im Zeitraster in Pixeln.
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} />

Monatsansicht

Die Monatsansicht zeigt das klassische Kalenderraster mit allen Tagen eines Monats.

Konfiguration

EigenschaftTypStandardBeschreibung
showWeekNumbersbooleanfalseLegt fest, ob Kalenderwochen angezeigt werden.
showMonthIndicatorbooleantrueLegt fest, ob beim Scrollen die Monatsangabe eingeblendet wird.
startOfWeeknumber1Erster Tag der Woche (0 = Sonntag, 1 = Montag usw.).
snapToMonthbooleanfalseAktiviert springt die Ansicht an den Anfang des überwiegend sichtbaren Monats, sobald nicht mehr gescrollt wird.
gridDateClick'week-view' | 'day-view' | 'none' | functionundefinedAktion beim Klick auf eine Datumszelle.
gridDateDoubleClick'create-event' | 'week-view' | 'day-view' | 'none' | function'create-event'Aktion beim Doppelklick auf eine Datumszelle. 'create-event' (Standard) legt am angeklickten Datum einen Termin von 9:00 bis 10:00 Uhr an.
eventHeightnumber16Höhe jeder Terminzeile im Monatsraster in Pixeln.
scrollMonthScrollConfigSteuert die Scroll-Sperre und die Animation beim Monatswechsel. Siehe unten.

MonthScrollConfig

EigenschaftTypStandardBeschreibung
disabledbooleanfalseDeaktiviert das fortlaufende Scrollen. Der Monat lässt sich dann nur über die Schaltflächen Zurück / Weiter wechseln.
transition'fade' | undefinedundefinedAnimation beim Monatswechsel (greift nur bei disabled: true). 'fade' blendet den aktuellen Monat mit einer horizontalen Bewegung aus und den nächsten ein. Ohne Angabe bleibt die ursprüngliche weiche Scroll-Animation erhalten.
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} />

Agenda-Ansicht

Die Agenda-Ansicht stellt Termine als chronologische, nach Tagen gruppierte Liste dar. Sie eignet sich besonders für mobile Layouts, langfristige Planung und Feeds, in denen man kommende Termine schnell überfliegen möchte.

Konfiguration

EigenschaftTypStandardBeschreibung
daysToShownumber14Anzahl aufeinanderfolgender Tage in der Agenda-Liste.
showEmptyDaysbooleantrueLegt fest, ob Tage ohne Termine in der Liste sichtbar bleiben.
timeFormat'12h' | '24h''24h'Zeitformat für Zeilen mit Terminen mit Uhrzeit.
gridDateClick'day-view' | 'none' | functionundefinedAktion beim Klick auf einen Tagesabschnitt.
gridDateDoubleClick'day-view' | 'none' | function'day-view'Aktion beim Doppelklick auf einen Tagesabschnitt.
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} />

Jahresansicht

Die Jahresansicht bietet einen vollständigen Jahresüberblick. DayFlow unterstützt dafür drei Modi: year-canvas (fortlaufendes Raster), fixed-week (feste Spalten für 52 Wochen) und grid (ein 4×3-Monatsraster, ideal für Heatmaps).

Konfiguration

EigenschaftTypStandardBeschreibung
mode'year-canvas' | 'fixed-week' | 'grid''year-canvas'Anzeigemodus der Jahresansicht.
startOfWeeknumber1Erster Tag der Woche (0 = Sonntag, 1 = Montag usw.). Wird in den Modi fixed-week und grid verwendet.
showTimedEventsInYearViewbooleanfalseLegt fest, ob Termine mit Uhrzeit in der Jahresansicht erscheinen (Punkte, Indikatoren oder Intensität).
gridDateClick'popup' | 'day-view' | 'none' | function'popup'(Modus grid) Aktion beim Klick auf eine Datumszelle.
gridDateDoubleClick'create-event' | 'day-view' | 'none' | function'create-event'(Modus grid) Aktion beim Doppelklick auf eine Datumszelle. 'create-event' (Standard) legt einen Termin von 9:00 bis 10:00 Uhr an.
gridHeatmapLevelsnumber5(Modus grid) Anzahl der Intensitätsstufen der Heatmap.

Heatmap anpassen (Modus grid)

Mit mode: 'grid' verhält sich der Kalender wie eine Heatmap: Die Intensität (Farbe) eines Tages richtet sich nach der Anzahl der Termine. Die Farben passen Sie an, indem Sie in Ihrem globalen CSS die folgenden CSS-Variablen überschreiben:

/* 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;
}

Wenn Sie gridHeatmapLevels auf einen anderen Wert setzen (etwa 3), definieren Sie die Variablen bis zu dieser Anzahl (also --heat-1 bis --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} />

Mehrere Ansichten verwenden

Sie können mehrere Ansichten registrieren und Nutzende zwischen ihnen wechseln lassen:

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>

Ansichten programmgesteuert steuern

Ansicht wechseln

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

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

Alle Ansichten unterstützen dieselben Navigationsmethoden:

// 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));

Das Enum ViewType

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

Auf dieser Seite