@uplink-protocol/calendar-controller
Version:
Flexible calendar and time picker API supporting both calendar, date-picker, and time-picker integrations for any JavaScript framework or library
110 lines (109 loc) • 3.16 kB
TypeScript
/**
* TimeSegment - Interface for time segment objects (hours, minutes, seconds)
*/
export interface TimeSegment {
value: number;
display: string;
isSelected: boolean;
isDisabled: boolean;
isFocused?: boolean;
}
/**
* TimeOptions - Interface for time picker configuration options
*/
export interface TimeOptions {
/** Minimum selectable time */
minTime?: Date;
/** Maximum selectable time */
maxTime?: Date;
/** List of disabled times */
disabledTimes?: Date[];
/** List of disabled hours (0-23) */
disabledHours?: number[];
/** List of disabled minutes (0-59) */
disabledMinutes?: number[];
/** List of disabled seconds (0-59) */
disabledSeconds?: number[];
/** Start with a specific time selected */
initialSelectedTime?: Date;
/** Time format for output (defaults to HH:mm:ss) */
timeFormat?: string;
/** Locale for internationalization (defaults to 'en-US') */
locale?: string;
/** Time format options for Intl.DateTimeFormat */
timeFormatOptions?: Intl.DateTimeFormatOptions;
/** Use 12-hour format instead of 24-hour */
use12HourFormat?: boolean;
/** Show seconds in time picker */
showSeconds?: boolean;
/** Show milliseconds in time picker */
showMilliseconds?: boolean;
/** Step interval for minutes (1, 5, 10, 15, 30) */
minuteStep?: number;
/** Step interval for seconds (1, 5, 10, 15, 30) */
secondStep?: number;
/** Enable time range selection mode */
isRangeSelection?: boolean;
}
/**
* TimeRange - Interface for time range selection
*/
export interface TimeRange {
startTime: Date | null;
endTime: Date | null;
}
/**
* TimePeriod - Interface for AM/PM periods
*/
export interface TimePeriod {
value: 'AM' | 'PM';
display: string;
isSelected: boolean;
isDisabled: boolean;
}
/**
* TimeView - Interface for complete time view
*/
export interface TimeView {
hours: TimeSegment[];
minutes: TimeSegment[];
seconds: TimeSegment[];
milliseconds?: TimeSegment[];
period: TimePeriod | null;
use12Hour: boolean;
}
/**
* TimeState - Interface for time picker state
*/
export interface TimeState {
selectedTime: Date | null;
selectedTimeRange: TimeRange;
focusedSegment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period' | null;
use12HourFormat: boolean;
showSeconds: boolean;
showMilliseconds: boolean;
minuteStep: number;
secondStep: number;
locale: string;
}
/**
* TimeGenerationOptions - Options for generating time segments
*/
export interface TimeGenerationOptions {
selectedTime: Date | null;
selectedTimeRange: TimeRange;
focusedSegment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period' | null;
minTime: Date | null;
maxTime: Date | null;
disabledTimes: Date[];
disabledHours: number[];
disabledMinutes: number[];
disabledSeconds: number[];
use12HourFormat: boolean;
showSeconds: boolean;
showMilliseconds: boolean;
minuteStep: number;
secondStep: number;
locale: string;
isTimeDisabledFn?: (time: Date) => boolean;
}