Skip to content

Calendars

export function calendarKey(calendarId: CalendarId): string;

export function normalizeIsoWorkingDays(
days: readonly number[] | undefined,
fallback: readonly number[] = DEFAULT_CALENDAR.workingDays,
): readonly number[];

export function jsWeekdayFromIsoWeekday(day: number): number;

export function jsWeekdaysFromIsoWeekdays(days: readonly number[]): readonly number[];

export function normalizeCalendarHolidaySet(holidays: readonly ISODateString[] | undefined): ReadonlySet<string>;

export function normalizeCalendarWorkingHours(
workingHours: CalendarWorkingTimeRange | readonly CalendarWorkingTimeRange[] | undefined,
options:;

export function normalizeCalendar(
calendar: CalendarEntity,
options:;

export function createResolvedCalendarMap(
calendars: readonly CalendarEntity[] | undefined,
options:;

export function createCalendarMap(calendars: readonly CalendarEntity[] | undefined): Map<CalendarId, CalendarEntity>;

export function resolveCalendarFromMap(
target: CalendarLookupTarget,
calendarsById: ReadonlyMap<CalendarId, CalendarEntity>,
primaryCalendar: CalendarEntity | null,
): CalendarEntity | null;

export function resolveCalendarFromList(
context: CalendarListLookupContext,
target?: CalendarLookupTarget,
): CalendarEntity | null;

export function resolveCalendarItemFromMap<T>(
target: CalendarLookupTarget,
items: ReadonlyMap<string, T>,
): T | null;

export function isCalendarHoliday(
date: ISODateString | string,
calendar: Pick<CalendarEntity, 'holidays'> | Pick<ResolvedCalendarEntity, 'holidays'> | null | undefined,
): boolean;

export function isCalendarWorkingWeekday(
weekday: number,
calendar: Pick<CalendarEntity, 'workingDays'> | Pick<ResolvedCalendarEntity, 'workingDays'> | null | undefined,
): boolean;

export function isWorkingCalendarDate(
date: ISODateString | string,
weekday: number,
calendar: (
Pick<CalendarEntity, 'workingDays' | 'holidays'>
| Pick<ResolvedCalendarEntity, 'workingDays' | 'holidays'>
| null
| undefined
),
): boolean;

export function isCalendarWorkingHour(
date: ISODateString | string,
calendar: CalendarEntity | ResolvedCalendarEntity | null | undefined,
): boolean;

Unique identifier for a working calendar.

/** Unique identifier for a working calendar. */
export type CalendarId = string | number;

Time-of-day working window for calendar-aware schedulers.

interface CalendarWorkingTimeRange {
/** Start time in `HH:mm` or AM/PM format. */
readonly start: string;
/** End time in `HH:mm` or AM/PM format. */
readonly end: string
}

Parsed working time window expressed as minutes from midnight.

interface CalendarResolvedWorkingTimeRange {
readonly startMinutes: number;
readonly endMinutes: number
}

Defines the working schedule for tasks, events, and resources. Working days use ISO weekday numbers: 1 = Monday … 7 = Sunday.

interface CalendarEntity {
/** Unique calendar identifier. */
readonly id: CalendarId;
/** Display name, for example `"Standard"` or `"Night Shift"`. */
readonly name: string;
/** IANA time zone, for example `"America/New_York"`. */
readonly timeZone: string;
/** ISO weekday numbers that are working days. */
readonly workingDays: readonly number[];
/** Specific dates that are non-working regardless of weekday. */
readonly holidays: readonly ISODateString[];
/** Optional working time windows inside a working day. */
readonly workingHours?: CalendarWorkingTimeRange | readonly CalendarWorkingTimeRange[];
/** Number of working hours per day, used for effort/capacity calculations. */
readonly hoursPerDay: number
}

Default Monday-Friday calendar shared by Gantt and Event Scheduler.

DEFAULT_CALENDAR: {
id: string;
name: string;
timeZone: string;
workingDays: number[];
holidays: never[];
workingHours: { start: string; end: string; };
hoursPerDay: number;
};

Calendar with derived lookup-friendly fields used by schedulers.

interface ResolvedCalendarEntity {
readonly calendar: CalendarEntity;
readonly workingDays: readonly number[];
readonly workingHours: readonly CalendarResolvedWorkingTimeRange[];
readonly holidays: ReadonlySet<string>
}

interface CalendarListLookupContext {
readonly calendars: readonly CalendarEntity[];
readonly primaryCalendarId?: CalendarId
}

export type CalendarLookupTarget = CalendarId | { readonly calendarId?: CalendarId } | undefined;