Event Dialog
DayFlow comes with a powerful built-in event dialog that provides a complete event management experience out of the box. The dialog supports creating, editing, and deleting events with an intuitive interface.
Usage
DayFlow renders the built-in floating detail panel by default. To use the built-in modal dialog instead, enable useEventDetailDialog in useCalendarApp, then render DayFlowCalendar as usual.
import { useCalendarApp, DayFlowCalendar } from '@dayflow/react';
const calendar = useCalendarApp({
views: [...],
useEventDetailDialog: true,
});
<DayFlowCalendar calendar={calendar} />;<template>
<DayFlowCalendar :calendar="calendar" />
</template>
<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
const calendar = useCalendarApp({
views: [...],
useEventDetailDialog: true,
});
</script>import { Component } from '@angular/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: [...],
useEventDetailDialog: true,
};
}<script>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
const calendar = useCalendarApp({
views: [...],
useEventDetailDialog: true,
});
</script>
<DayFlowCalendar {calendar} />Customization
Replace the dialog UI
Use the eventDetailDialog slot to swap in your own dialog component while keeping DayFlow's open/close state management. This requires useEventDetailDialog: true in your useCalendarApp config.
// 1. Enable dialog mode in the calendar config
const calendar = useCalendarApp({
views: [...],
useEventDetailDialog: true,
});
// 2. Provide your own dialog via the slot
<DayFlowCalendar
calendar={calendar}
eventDetailDialog={({ event, isOpen, onClose }) => (
<MyDialog isOpen={isOpen} onClose={onClose}>
<EventForm event={event} />
</MyDialog>
)}
/><template>
<DayFlowCalendar :calendar="calendar">
<template #eventDetailDialog="{ event, isOpen, onClose }">
<MyDialog :isOpen="isOpen" @close="onClose()">
<EventForm :event="event" />
</MyDialog>
</template>
</DayFlowCalendar>
</template>
<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
import MyDialog from './MyDialog.vue';
import EventForm from './EventForm.vue';
const calendar = useCalendarApp({
views: [...],
useEventDetailDialog: true,
});
</script><!-- app.component.html -->
<dayflow-calendar
[calendar]="calendar"
[eventDetailDialog]="dialog"
>
</dayflow-calendar>
<ng-template #dialog let-args>
<my-dialog [isOpen]="args.isOpen" (close)="args.onClose()">
<event-form [event]="args.event"></event-form>
</my-dialog>
</ng-template><DayFlowCalendar {calendar} eventDetailDialog={MyCustomDialog} />
<!-- MyCustomDialog.svelte -->
<script lang="ts">
import type { EventDetailDialogSlotArgs } from '@dayflow/core';
import MyDialog from './MyDialog.svelte';
import EventForm from './EventForm.svelte';
let { event, isOpen, onClose } = $props<EventDetailDialogSlotArgs>();
</script>
<MyDialog {isOpen} {onClose}>
<EventForm {event} />
</MyDialog>Opt out of the built-in panel
If your application manages event detail in its own modals (driven by callbacks or global state), you can suppress the built-in floating panel entirely by setting useEventDetailPanel: false in your useCalendarApp configuration:
import { useCalendarApp, DayFlowCalendar } from '@dayflow/react';
const calendar = useCalendarApp({
// ...
useEventDetailPanel: false,
});
<DayFlowCalendar calendar={calendar} />;<template>
<DayFlowCalendar :calendar="calendar" />
</template>
<script setup>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/vue';
const calendar = useCalendarApp({
// ...
useEventDetailPanel: false,
});
</script>import { Component } from '@angular/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 = {
// ...
useEventDetailPanel: false,
};
}<script>
import { DayFlowCalendar, useCalendarApp } from '@dayflow/svelte';
const calendar = useCalendarApp({
// ...
useEventDetailPanel: false,
});
</script>
<DayFlowCalendar {calendar} />This works across React, Vue, Svelte, and Angular adapters.