/** * Pure, framework-free IANA-timezone helpers, built on `Intl` (no date library). * * The scheduler renders in a chosen `timeZone` via a "pseudo-local" trick: * {@link toZonedLocal} turns an absolute instant into a Date whose *local* * wall-clock equals the wall-clock in `timeZone`, so all the existing * local-based date math (startOfDay, minuteOfDay, layout) runs unchanged; then * {@link fromZonedLocal} converts a user edit back to a real instant. When * `timeZone` is undefined every function is the identity on the browser's zone. * * These functions are DST-aware and take no ambient "now" (safe for the model / * headless contexts that forbid `Date.now()`). */ export type ZoneParts = { year: number; month: number; day: number; hour: number; minute: number; second: number; }; /** The wall-clock parts of `instant` in `timeZone` (browser-local if undefined). */ export declare function zoneParts(instant: Date, timeZone?: string): ZoneParts; /** Milliseconds `timeZone` is ahead of UTC at `instant` (DST-aware; negative west of UTC). */ export declare function zoneOffsetMs(instant: Date, timeZone?: string): number; /** An instant -> a Date whose LOCAL fields equal its wall-clock in `timeZone`. */ export declare function toZonedLocal(instant: Date, timeZone?: string): Date; /** The instant whose wall-clock in `timeZone` is the given Y-M-D H:M:S. */ export declare function instantFromWallClock(year: number, month: number, // 1-12 day: number, hour: number, minute: number, second?: number, timeZone?: string, ms?: number): Date; /** Inverse of {@link toZonedLocal}: a pseudo-local Date -> the real instant. */ export declare function fromZonedLocal(pseudo: Date, timeZone?: string): Date; /** Short zone name at `instant`, e.g. "EDT" / "GMT+5:30" - for a ruler header. */ export declare function zoneAbbr(instant: Date, timeZone?: string): string; /** Validate an IANA zone id; returns it if usable, else undefined (falls back to local). */ export declare function normalizeTimeZone(timeZone?: string): string | undefined;