import { DateRange, TemporalDate, TemporalFormat, TemporalFormatStyle, TuRelativeTimeStyle } from "@trackunit/date-and-time-utils"; export type { TuRelativeTimeStyle }; type TemporalTypes = "second" | "seconds" | "minute" | "minutes" | "hour" | "hours" | "day" | "days" | "week" | "weeks" | "month" | "months" | "year" | "years"; export type TemporalArithmeticType = Extract; export type TemporalEdgeOfType = Extract; export type TemporalDifferenceType = Extract; export type TemporalSinceType = "auto" | Extract; export type TemporalDurationType = Extract; export type TemporalIsType = "past" | "present" | "future" | "between"; export type TemporalSameType = Extract; export type TemporalTimeRounding = Extract; interface UseDateAndTimeReturn { /** Current instant in the active timezone as a `Date`. Call when you need “now”; the function reference is stable until the timezone changes; each call returns a fresh time. */ getNowDate: () => Date; /** * @deprecated Use `getNowDate()` instead. This snapshot only updates when the active timezone changes, not as wall-clock time advances (so long-lived sessions can show stale “now”). */ nowDate: Date; formatDate: (date: TemporalDate, format?: TemporalFormat) => string; formatDateWithTimezone: (date: TemporalDate, format?: TemporalFormat, timezone?: string, locale?: string) => string; formatRange: (range: DateRange, format?: Intl.DateTimeFormatOptions) => string; startOf: (date: TemporalDate, type: TemporalEdgeOfType) => Date; endOf: (date: TemporalDate, type: TemporalEdgeOfType) => Date; add: (date: TemporalDate, amount: number, type: TemporalArithmeticType) => Date; subtract: (date: TemporalDate, amount: number, type: TemporalArithmeticType) => Date; difference: (from: TemporalDate, to: TemporalDate, type: TemporalDifferenceType) => number; dateIs: (date: TemporalDate, type: TemporalIsType, betweenDates?: DateRange) => boolean; same: (date: TemporalDate, type: TemporalSameType) => boolean; since: (from: TemporalDate, to: TemporalDate, type: TemporalSinceType, style?: TuRelativeTimeStyle) => string; duration: (from: number | Intl.Duration, type: TemporalDurationType, format?: TemporalFormat["dayFormat"], roundAt?: TemporalTimeRounding) => string; convert: (amount: number, unit: "hour" | "minute" | "second" | "millisecond", conversionType: "hour" | "minute" | "second" | "millisecond") => number; dayName: (date: TemporalDate, format: TemporalFormatStyle) => string; days: (format?: TemporalFormatStyle) => Array; monthName: (date: TemporalDate, format: TemporalFormatStyle) => string; months: (format?: TemporalFormatStyle) => Array; getUTCFromTimeZonedDate: (from: Date, timeZoneId: string) => Date; isEqual: (date1: TemporalDate, date2: TemporalDate) => boolean; } /** * Hook for locale- and timezone-aware date/time operations including formatting, * arithmetic, comparisons, relative time, and duration formatting. * * ### When to use * Use `useDateAndTime` whenever you need to format, compare, or manipulate dates in a * way that respects the user's locale and timezone. * * ### When not to use * - For raw UTC timestamps that never reach the UI — use plain `Date` math or * `date-and-time-utils` directly. * - For date picker value handling — the date/time components already consume locale * and timezone internally. */ export declare const useDateAndTime: () => UseDateAndTimeReturn;