import type { Dayjs } from "dayjs"; import type { VNodeChild } from "vue"; import type { XyControlStatus, XyControlVariant, XyOverlayPlacement, XySemanticClassNames, XySemanticStyles, XySize } from "../core"; export type XyDatePickerMode = "date" | "month" | "quarter" | "week" | "year" | "yearQuarterMonth"; export type XyYearQuarterMonthGranularity = "year" | "quarter" | "month"; export type XyDateRangeValue = [string, string] | []; export type XyDateValue = Dayjs | string; export type XyDisabledDate = (date: Dayjs) => boolean; export type XyDatePickerSemanticDom = "cell" | "clear" | "footer" | "grid" | "header" | "input" | "panel" | "preset" | "root" | "suffix"; export interface XyDatePickerPreset { label: string; value: XyDateValue | (() => XyDateValue); } export interface XyRangePickerPreset { label: string; value: [XyDateValue, XyDateValue] | (() => [XyDateValue, XyDateValue]); } export interface XyDatePickerProps { allowClear?: boolean; ariaLabel?: string; autofocus?: boolean; classNames?: XyDatePickerClassNames; defaultOpen?: boolean; disabled?: boolean; disabledDate?: XyDisabledDate; format?: string; id?: string; label?: string; maxDate?: XyDateValue; minDate?: XyDateValue; modelValue?: string; open?: boolean; picker?: XyDatePickerMode; placeholder?: string; placement?: XyOverlayPlacement; presets?: XyDatePickerPreset[]; readonly?: boolean; showToday?: boolean; size?: XySize; status?: XyControlStatus; styles?: XyDatePickerStyles; valueFormat?: string; variant?: XyControlVariant; } export type XyDatePickerClassNames = XySemanticClassNames; export type XyDatePickerStyles = XySemanticStyles; export interface XyDatePickerCellSlotProps { current: boolean; date: Dayjs; disabled: boolean; outside: boolean; selected: boolean; } export interface XyDatePickerSlots { cell?: (props: XyDatePickerCellSlotProps) => VNodeChild; footer?: () => VNodeChild; suffix?: () => VNodeChild; } export interface XyDatePickerExpose { blur: () => void; focus: (options?: FocusOptions) => void; nativeElement: HTMLInputElement | undefined; } export type XyRangePickerSemanticDom = "cell" | "end" | "footer" | "grid" | "header" | "panel" | "preset" | "root" | "separator" | "start"; export interface XyRangePickerProps { allowClear?: boolean; ariaLabels?: [string, string]; autofocus?: boolean; classNames?: XyRangePickerClassNames; defaultOpen?: boolean; disabled?: boolean | [boolean, boolean]; disabledDate?: XyDisabledDate; format?: string; id?: string; maxDate?: XyDateValue; minDate?: XyDateValue; modelValue?: XyDateRangeValue; open?: boolean; order?: boolean; picker?: XyDatePickerMode; placement?: XyOverlayPlacement; placeholders?: [string, string]; presets?: XyRangePickerPreset[]; readonly?: boolean; size?: XySize; status?: XyControlStatus; styles?: XyRangePickerStyles; valueFormat?: string; variant?: XyControlVariant; } export type XyRangePickerClassNames = XySemanticClassNames; export type XyRangePickerStyles = XySemanticStyles; export interface XyRangePickerCellSlotProps { current: boolean; date: Dayjs; disabled: boolean; outside: boolean; rangeEnd: boolean; rangeStart: boolean; selected: boolean; } export interface XyRangePickerSlots { cell?: (props: XyRangePickerCellSlotProps) => VNodeChild; footer?: () => VNodeChild; separator?: () => VNodeChild; } export interface XyRangePickerExpose { blur: () => void; focus: (index?: 0 | 1, options?: FocusOptions) => void; nativeElement: HTMLElement | undefined; } export type XyTimePickerFormat = "HH:mm" | "HH:mm:ss"; export type XyTimePickerSemanticDom = "column" | "footer" | "option" | "panel" | "root" | "suffix"; export interface XyTimePickerProps { allowClear?: boolean; ariaLabel?: string; autofocus?: boolean; classNames?: XyTimePickerClassNames; defaultOpen?: boolean; disabled?: boolean; disabledHours?: () => number[]; disabledMinutes?: (hour: number) => number[]; disabledSeconds?: (hour: number, minute: number) => number[]; format?: XyTimePickerFormat; hideDisabledOptions?: boolean; hourStep?: number; id?: string; label?: string; minuteStep?: number; modelValue?: string; needConfirm?: boolean; open?: boolean; placeholder?: string; placement?: XyOverlayPlacement; readonly?: boolean; secondStep?: number; showNow?: boolean; size?: XySize; status?: XyControlStatus; styles?: XyTimePickerStyles; variant?: XyControlVariant; } export type XyTimePickerClassNames = XySemanticClassNames; export type XyTimePickerStyles = XySemanticStyles; export interface XyTimePickerOptionSlotProps { disabled: boolean; part: "hour" | "minute" | "second"; selected: boolean; value: number; } export interface XyTimePickerSlots { footer?: () => VNodeChild; option?: (props: XyTimePickerOptionSlotProps) => VNodeChild; suffix?: () => VNodeChild; } export interface XyTimePickerExpose { blur: () => void; focus: (options?: FocusOptions) => void; nativeElement: HTMLElement | undefined; }