whensday-calendar-lib
Version:
A flexible calendar library with Whensday/Gregorian calendar systems, event management, and customizable UI components
184 lines • 4.91 kB
TypeScript
import React from 'react';
export interface WhensdayDate {
year: number;
month: number;
day: number;
monthName: string;
isWeensday?: boolean;
isWhensday?: boolean;
}
export interface DayInGrid {
year: number;
month: number;
day: number;
monthName: string;
isWhensdayLeapDay?: boolean;
}
export interface CalendarDay {
date: DayInGrid;
isToday: boolean;
isCurrentMonth: boolean;
}
export type CalendarSystem = 'whensday' | 'gregorian';
export type CalendarView = 'month' | 'week' | 'day';
export interface Layer {
id: string;
name: string;
color: string;
isVisible: boolean;
parentId?: string;
}
export type EventType = 'event' | 'deadline' | 'task' | 'birthday';
export type DuePeriod = 'morning' | 'afternoon' | 'evening';
export interface LocationDetails {
name: string;
placeId: string;
}
export interface Event {
id: string;
name: string;
layerId: string | null;
color?: string;
startDate: number;
endDate?: number;
eventType: EventType;
isAllDay: boolean;
location?: LocationDetails | null;
startLocation?: LocationDetails | null;
endLocation?: LocationDetails | null;
isCompleted?: boolean;
tags?: string[];
startTime?: string;
endTime?: string;
travelTimeBefore?: number;
travelTimeAfter?: number;
doByDate?: number;
doByTime?: string;
dueTime?: string;
duePeriod?: DuePeriod;
isRecurring?: boolean;
naturalLanguageRule?: string;
recurrenceRule?: string;
}
export interface SchedulePattern {
on: number;
off: number;
}
export interface HolidaySettings {
enabled: boolean;
onDays: number;
holidays: number;
bonusDayRate: number;
}
export interface ScheduleExemption {
id: string;
startDate: number;
endDate: number;
resumeAfter: number;
}
export interface Schedule {
id: string;
name: string;
layerId: string | null;
color: string | null;
startDate: number;
endDate?: number;
pattern: SchedulePattern;
isVisible: boolean;
initialHolidayBalance?: number;
bookedHolidays?: number[];
completedDays?: number[];
holidaySettings?: HolidaySettings;
exemptions?: ScheduleExemption[];
bonusDays?: number[];
}
export interface DragState {
eventId: string;
offsetY: number;
ghostHeightPercent: number;
layer: Layer;
event: Event;
}
export interface UserSettings {
homeAddress: LocationDetails | null;
}
export interface CalendarState {
view: CalendarView;
system: CalendarSystem;
displayDate: DayInGrid;
calendarGrid: CalendarDay[];
currentMonthName: string;
currentYear: number;
hourHeight: number;
}
export interface CalendarEventHandlers {
onEventClick?: (event: Event) => void;
onEventAdd?: (date: DayInGrid, time?: string) => void;
onEventUpdate?: (event: Event) => void;
onEventDelete?: (eventId: string) => void;
onEventMove?: (eventId: string, newDayTimestamp: number, newStartTime?: string) => void;
onDateClick?: (date: DayInGrid) => void;
onViewChange?: (view: CalendarView) => void;
onSystemChange?: (system: CalendarSystem) => void;
}
export interface CalendarTheme {
colors: {
primary: string;
secondary: string;
accent: string;
background: string;
surface: string;
text: string;
textSecondary: string;
border: string;
today: string;
whensdayLeap: string;
};
fonts: {
primary: string;
secondary: string;
};
spacing: {
xs: string;
sm: string;
md: string;
lg: string;
xl: string;
};
borderRadius: {
sm: string;
md: string;
lg: string;
};
}
export interface CalendarProps {
events?: Event[];
layers?: Layer[];
schedules?: Schedule[];
view?: CalendarView;
system?: CalendarSystem;
displayDate?: DayInGrid;
onEventClick?: (event: Event) => void;
onEventAdd?: (date: DayInGrid, time?: string) => void;
onEventUpdate?: (event: Event) => void;
onEventDelete?: (eventId: string) => void;
onEventMove?: (eventId: string, newDayTimestamp: number, newStartTime?: string) => void;
onDateClick?: (date: DayInGrid) => void;
onViewChange?: (view: CalendarView) => void;
onSystemChange?: (system: CalendarSystem) => void;
theme?: Partial<CalendarTheme>;
className?: string;
style?: React.CSSProperties;
enableDragAndDrop?: boolean;
enableScheduleManagement?: boolean;
enableHolidayBooking?: boolean;
enableTravelTime?: boolean;
enableRecurringEvents?: boolean;
showWeekNumbers?: boolean;
showTodayIndicator?: boolean;
showHolidayIndicators?: boolean;
showScheduleIndicators?: boolean;
locale?: string;
weekStart?: 0 | 1;
}
//# sourceMappingURL=index.d.ts.map