import type { FC, HTMLAttributes, MutableRefObject, PropsWithChildren, ReactNode } from 'react';
import type { PopoverPlacement, PopoverPlacementBasic } from '../Popover';
import type { CalendarBaseProps } from './CalendarBase/CalendarBase';
import type { CalendarDoubleProps } from './CalendarDouble/CalendarDouble';
import type { CalendarStateType } from './store/types';
export declare enum Keys {
pageUp = 33,
pageDown = 34,
home = 36,
end = 35,
left = 37,
right = 39,
up = 38,
down = 40,
enter = 13,
space = 32
}
export interface DateObject {
day: number;
monthIndex: number;
year: number;
}
export interface ItemProps {
isCurrent: boolean;
isSelected: boolean;
}
export interface DateItem extends ItemProps {
date: DateObject;
isDayInCurrentMonth?: boolean;
inRange?: boolean;
events?: EventDay[];
disabled?: boolean;
isOutOfMinMaxRange?: boolean;
disabledArrowKey?: string;
disabledMonths?: string;
disabledDates?: string;
disabledYears?: string;
monthName?: string;
monthIndex?: number;
monthFullName?: string;
yearValue?: number;
quarterName?: string;
}
export type DateBasePorps = {
isDouble?: boolean;
isHovered?: boolean;
inRange?: boolean;
sideInRange?: 'left' | 'right';
disabled?: boolean;
};
export interface DateStructureProps extends Partial, DateBasePorps {
isDayInCurrentMonth?: boolean;
dayOfWeek?: boolean;
}
export type QuarterPartialDate = {
monthIndex: number;
day: number;
};
export interface QuarterProps extends Partial, DateBasePorps {
quarterName: number;
quarterIndex: number;
}
export interface MonthsProps extends Partial, DateBasePorps {
}
export interface MonthsItem extends ItemProps {
monthName: string;
monthIndex: number;
monthFullName?: string;
}
export interface YearsProps extends ItemProps {
}
export interface YearsItem extends ItemProps {
yearValue: number;
}
export interface EventDay {
date: Date;
color?: string;
eventInfo?: ReactNode;
}
export interface DisabledDay {
date: Date;
}
export type DateType = Date | undefined | null;
export type CalendarValueType = DateType | [DateType, DateType];
export type DateInfo = {
name: string;
fullValue: CalendarValueType;
};
export type Locales = 'ru' | 'en';
export type EventTooltipOptions = {
/**
* Обертка для всплывающей подсказки для событий.
*/
bodyWrapper?: FC;
/**
* Размер всплывающей подсказки для событий.
*/
size?: string;
/**
* Направление раскрытия тултипа.
*/
placement?: PopoverPlacement | Array;
/**
* Отступ окна относительно элемента, у которого оно вызвано.
* @default
* [0, 8]
*/
offset?: [number, number];
/**
* Видимость стрелки (хвоста).
*/
hasArrow?: boolean;
/**
* Анимированное появление/сокрытие.
*/
animated?: boolean;
/**
* Минимальная ширина окна (в rem).
*/
minWidth?: number | string;
/**
* Максимальная ширина окна (в rem).
*/
maxWidth?: number | string;
};
export interface Calendar extends HTMLAttributes {
/**
* Выбранное значение.
*/
value: CalendarValueType;
/**
* Обработчик изменения значения.
*/
onChangeValue: (value: Date, dateInfo?: DateInfo) => void;
/**
* Дата, определяющая отображаемый период календаря.
*/
focusedDate?: DateType;
/**
* Состояние календаря, отвечающее за отображение.
*/
date?: DateObject;
/**
* Минимальное значение даты.
*/
min?: Date;
/**
* Максимальное значение даты.
*/
max?: Date;
/**
* Дата с которой начинается календарная сетка при отсутсвии значения.
*/
renderFromDate?: Date;
/**
* Должны ли значения минимального и максимального дня включаться в диапазон.
*/
includeEdgeDates?: boolean;
/**
* Свойства всплывающей подсказки для событий.
*/
eventTooltipOptions?: EventTooltipOptions;
/**
* Список событий.
*/
eventList?: EventDay[];
/**
* Список отключенных дней.
*/
disabledList?: DisabledDay[];
/**
* Список событий по месяцам.
*/
eventMonthList?: EventDay[];
/**
* Список отключенных месяцев.
*/
disabledMonthList?: DisabledDay[];
/**
* Список событий по кварталам.
*/
eventQuarterList?: EventDay[];
/**
* Список отключенных кварталов.
*/
disabledQuarterList?: DisabledDay[];
/**
* Список событий по годам.
*/
eventYearList?: EventDay[];
/**
* Список отключенных годов.
*/
disabledYearList?: DisabledDay[];
/**
* Конечный тип отображения календаря: дни, месяца, года, кварталы.
*/
type?: CalendarStateType;
/**
* Выбранный язык календаря. Влияет на название дней, месяцев
*/
locale?: Locales;
/**
* Растянуть календарь на всю доступную ширину и высоту
*/
stretched?: boolean;
}
export type CalendarConfigProps = {
/**
* Размер календаря.
*/
size?: string;
/**
* Вид календаря.
*/
view?: string;
};
export type CalendarRange = Omit & {
/**
* Выбранное значение.
*/
value: [DateType, DateType];
/**
* Обработчик изменения значения.
*/
onChangeValue: (values: [DateType, DateType], dateInfo?: DateInfo) => void;
/**
* Обработчик для выбора стартового значения в диапазоне.
*/
onChangeStartOfRange?: (value: Date, dateInfo?: DateInfo) => void;
};
export interface DaysMetaDescription {
refs: MutableRefObject;
rowSize: number;
newRowIndex: number;
newColumnIndex: number;
columnSize: number;
minColumnIndex: number;
defaultState?: number[];
}
export type KeyboardArrowKey = 'left' | 'right' | 'up' | 'down';
type BaseProps = {
/**
* Выбранное значение.
*/
value: Date;
/**
* Режим выбора: диапазон или одинарный.
*/
isRange?: false;
/**
* Режим отображения: двойной или одинарный.
*/
isDouble?: false;
} & CalendarBaseProps;
type BaseRangeProps = {
/**
* Режим выбора: диапазон или одинарный.
*/
isRange: true;
/**
* Режим отображения: двойной или одинарный.
*/
isDouble?: false;
} & CalendarRange;
type DoubleProps = {
/**
* Выбранное значение.
*/
value: Date;
/**
* Режим отображения: двойной или одинарный.
*/
isDouble?: true;
/**
* Режим выбора: диапазон или одинарный.
*/
isRange?: false;
} & CalendarDoubleProps;
type DoubleRangeProps = {
/**
* Режим выбора: диапазон или одинарный.
*/
isRange: true;
/**
* Режим отображения: двойной или одинарный.
*/
isDouble?: true;
} & CalendarRange;
export type ComponentVariation = {
base: React.FC;
baseRange: React.FC>;
double: React.FC;
doubleRange: React.FC>;
};
export type CalendarProps = BaseProps | BaseRangeProps | DoubleProps | DoubleRangeProps;
export {};
//# sourceMappingURL=Calendar.types.d.ts.map