2025-02-28 19:43:11 +08:00

107 lines
4.7 KiB
TypeScript

import type { Ref, Slots, UnwrapNestedRefs } from 'vue';
import { type VirtualListInst } from 'vueuc';
import type { NLocale, NDateLocale } from '../../locales';
import type { ScrollbarInst } from '../../_internal';
import type { IsHourDisabled, IsMinuteDisabled, IsSecondDisabled } from '../../time-picker/src/interface';
import type { TimePickerProps } from '../../time-picker/src/TimePicker';
import type { MergedTheme } from '../../_mixins';
import type { DatePickerTheme } from '../styles/light';
import type { uniCalendarValidation, dualCalendarValidation } from './validation-utils';
export type Value = number | [number, number];
export type DefaultTime = string | [string | undefined, string | undefined];
export type FormattedValue = string | [string, string];
export type Shortcuts = Record<string, number | (() => number)> | Record<string, [number, number] | readonly [number, number] | (() => [number, number] | readonly [number, number])>;
export type OnUpdateValue = (value: number & (number | null) & [
number,
number
] & ([number, number] | null), formattedValue: string & (string | null) & [
string,
string
] & ([string, string] | null)) => void;
export type OnConfirm = OnUpdateValue;
export type OnConfirmImpl = OnUpdateValueImpl;
export type OnUpdateFormattedValue = (value: string & (string | null) & [
string,
string
] & ([string, string] | null), timestampValue: number & (number | null) & [
number,
number
] & ([number, number] | null)) => void;
export type OnUpdateFormattedValueImpl = (value: string | [string, string] | null, timestampValue: number | [number, number] | null) => void;
export type OnUpdateValueImpl = (value: Value | null, formattedValue: string | [string, string] | null) => void;
export type OnPanelUpdateValue = (value: number & (number | null) & [
number,
number
] & ([number, number] | null), doUpdate: boolean) => void;
export type OnPanelUpdateValueImpl = (value: Value | null, doUpdate: boolean) => void;
export type OnClose = (disableUpdateOnClose: boolean) => void;
export interface RangePanelChildComponentRefs {
startYearScrollbarRef: Ref<ScrollbarInst | null>;
endYearScrollbarRef: Ref<ScrollbarInst | null>;
startMonthScrollbarRef: Ref<ScrollbarInst | null>;
endMonthScrollbarRef: Ref<ScrollbarInst | null>;
startYearVlRef: Ref<VirtualListInst | null>;
endYearVlRef: Ref<VirtualListInst | null>;
}
export interface PanelChildComponentRefs {
monthScrollbarRef: Ref<ScrollbarInst | null>;
yearScrollbarRef: Ref<ScrollbarInst | null>;
yearVlRef: Ref<VirtualListInst | null>;
}
export interface PanelRef extends Partial<UnwrapNestedRefs<PanelChildComponentRefs & RangePanelChildComponentRefs>> {
$el: HTMLElement;
}
export type FirstDayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
export type DatePickerInjection = {
mergedClsPrefixRef: Ref<string>;
mergedThemeRef: Ref<MergedTheme<DatePickerTheme>>;
timePickerSizeRef: Ref<'small' | 'medium' | 'large'>;
timePickerPropsRef: Ref<undefined | TimePickerProps | [TimePickerProps, TimePickerProps]>;
localeRef: Ref<NLocale['DatePicker']>;
dateLocaleRef: Ref<NDateLocale>;
isDateDisabledRef: Ref<IsDateDisabled | undefined>;
rangesRef: Ref<Record<string, [number, number]> | undefined>;
closeOnSelectRef: Ref<boolean>;
updateValueOnCloseRef: Ref<boolean>;
firstDayOfWeekRef: Ref<FirstDayOfWeek | undefined>;
monthFormatRef: Ref<string>;
yearFormatRef: Ref<string>;
quarterFormatRef: Ref<string>;
datePickerSlots: Slots;
} & ReturnType<typeof uniCalendarValidation> & ReturnType<typeof dualCalendarValidation>;
export declare const datePickerInjectionKey: import("vue").InjectionKey<DatePickerInjection>;
export type IsDateDisabled = IsSingleDateDisabled | IsRangeDateDisabled;
export type IsSingleDateDisabledDetail = {
type: 'date';
year: number;
month: number;
date: number;
} | {
type: 'month';
year: number;
month: number;
} | {
type: 'year';
year: number;
} | {
type: 'quarter';
year: number;
quarter: number;
} | {
type: 'input';
};
export type IsSingleDateDisabled = (timestamp: number, detail: IsSingleDateDisabledDetail) => boolean;
export type IsRangeDateDisabled = (timestamp: number, position: 'start' | 'end', value: [number, number] | null) => boolean;
export interface TimeValidator {
isHourDisabled?: IsHourDisabled;
isMinuteDisabled?: IsMinuteDisabled;
isSecondDisabled?: IsSecondDisabled;
}
export type IsTimeDisabled = IsSingleTimeDisabled | IsRangeTimeDisabled;
export type IsSingleTimeDisabled = (date: number) => TimeValidator;
export type IsRangeTimeDisabled = (date: number, position: 'start' | 'end', value: [number, number]) => TimeValidator;
export interface DatePickerInst {
focus: () => void;
blur: () => void;
}