import type { InputHTMLAttributes, SyntheticEvent, KeyboardEvent, MutableRefObject, ReactNode, CSSProperties } from 'react';
import type { DateInfo } from '../Calendar/Calendar.types';
import type { DatePickerPopoverProps, DatePickerTextFieldProps } from '../DatePicker/SingleDate/SingleDate.types';
import type { HintProps, LabelProps } from '../TextField/TextField.types';
import type { DatePickerCalendarProps } from '../DatePicker/DatePickerBase.types';
import type { CalendarStateType } from '../Calendar';
import type { Langs } from '../DatePicker/utils/dateHelper';
export type FormattedValues = {
originalDate?: Date;
isoDate?: string;
quarterInfo?: DateInfo;
};
export type DateShortcutItemBase = {
/**
* Подпись к предустановленной дате
*/
label: string;
/**
* Неактивный элемент
*/
disabled?: boolean;
/**
* Слот для контента слева
*/
contentLeft?: ReactNode;
/**
* Слот для контента справа
*/
contentRight?: ReactNode;
};
export type DateShortcutItem = DateShortcutItemBase & {
/**
* Значение даты, которое будет установлено при выборе
*/
value: Date;
};
export type InputProps = {
/**
* Обработчик вызывается при вводе корректной даты, выборе дня на календаре или по нажатию Enter в поле ввода.
* @param value - значение даты с временем
* @param {Object} formattedValues - набор дат в разных форматах
* @param formattedValue.originalDate - дата как экземпляр Date
* @param formattedValue.isoDate - дата в формате ISO
* @param formattedValue.quarterInfo - информация о кварталах, если `type='Quarters'`
* @return void
*/
onCommitDate?: (value: string, formattedValues: FormattedValues) => void;
/**
* Обработчик изменения значения.
* @param event - событие при изменении значения
* @param value - значение даты с временем
* @param {Object} formattedValues - набор дат в разных форматах
* @param formattedValue.originalDate - дата как экземпляр Date
* @param formattedValue.isoDate - дата в формате ISO
* @return void
*/
onChangeValue?: (event: SyntheticEvent | null, value?: string, formattedValues?: Omit) => void;
/**
* Обработчик по нажатию Enter
* @param event - событие при изменении значения
* @param value - значение даты с временем
* @return void
*/
onSearch?: (event?: KeyboardEvent, value?: string) => void;
} & Omit & LabelProps & Omit, 'defaultValue' | 'value' | 'size'> & Pick;
export type PopoverProps = Omit & Pick;
export type CalendarProps = {
/**
* Формат даты без времени
* @default `DD.MM.YYYY`
*/
dateFormat?: string;
/**
* Формат времени
* @default `HH:mm:ss`
*/
timeFormat?: string;
/**
* Разделитель между датой и временем
* @default ` `
*/
dateTimeSeparator?: string;
/**
* Формат даты и времени применяется в качестве маски ввода.
*/
maskWithFormat?: boolean;
/**
* Режим отображения: одиночный или двойной.
*/
isDouble?: boolean;
/**
* Дата, которая будет установлена,
* если пользователь сперва выберет время на TimeGrid.
*/
dateOnTimeSelectOnly?: Date;
/**
* Список предустановленных дат,
* которые можно выбрать в выпадающем календаре
*/
dateShortcuts?: DateShortcutItem[];
/**
* Ширина списка предустановленных дат
*/
dateShortcutsWidth?: CSSProperties['width'];
/**
* Положение списка предустановленных дат
* @default 'left'
*/
dateShortcutsPlacement?: 'right' | 'left';
} & Omit;
type VariationProps = {
/**
* Стиль для UI конфигурации
* Влияет на выбор предустановленного набора токенов
* @default 'default'
*/
appearance?: 'default' | 'clear';
/**
* Флаг наличия разделителя для clear appearance
* @default false
*/
hasClearDivider?: boolean;
/**
* Размер компонента.
*/
size?: string;
/**
* Вид компонента.
*/
view?: string;
/**
* Компонент доступен только для чтения.
*/
readOnly?: boolean;
/**
* Компонент неактивен.
*/
disabled?: boolean;
};
export type DateTimePickerProps = VariationProps & CalendarProps & PopoverProps & InputProps & HintProps;
export type DateTimePickerRootProps = {
eventTooltipSize?: string;
} & Omit;
export type CorrectDates = {
input: string;
calendar: Date | undefined;
time: Date | undefined;
};
export type UseDateTimePickerArgs = {
inputRef: MutableRefObject;
outerValue?: Date | string;
defaultDate?: Date;
preserveInvalidOnBlur?: boolean;
valueError?: boolean;
valueSuccess?: boolean;
type?: CalendarStateType;
lang?: Langs;
disabled?: boolean;
readOnly?: boolean;
maskWithFormat?: boolean;
dateFormat?: string;
timeFormat?: string;
dateTimeSeparator?: string;
min?: Date;
max?: Date;
includeEdgeDates?: boolean;
dateOnTimeSelectOnly?: Date;
onChangeValue?: InputProps['onChangeValue'];
onCommitDate?: InputProps['onCommitDate'];
onBlur?: InputProps['onBlur'];
};
export {};
//# sourceMappingURL=DateTimePicker.types.d.ts.map