import type { HTMLAttributes } from 'react';
import { AsProps } from '../../../types';
export type SnapType = 'mandatory' | 'proximity' | 'none';
export type SnapAlign = 'start' | 'center' | 'end';
export type SnapStop = 'normal' | 'always';
export type ScrollAxis = 'x' | 'y';
export type ScrollAlign = 'start' | 'center' | 'end' | 'activeDirection';
export interface BasicProps extends AsProps, HTMLAttributes {
/**
* Индекс текущего элемента
*/
index: number;
/**
* Ось прокрутки
*/
axis: ScrollAxis;
/**
* Тип CSS Scroll Snap
*/
scrollSnapType?: SnapType;
/**
* Центрирование активного элемента при скролле
*/
scrollAlign?: ScrollAlign;
/**
* Отступ в начале, используется при центрировании крайних элементов
*/
paddingStart?: string;
/**
* Отступ в конце, используется при центрировании крайних элементов
*/
paddingEnd?: string;
/**
* Анимированная прокрутка с помощью requestAnimationFrame
*/
animatedScrollByIndex?: boolean;
/**
* Throttling внутренних обработчиков события onScroll
*/
throttleMs?: number;
/**
* Debounce внутренних обработчиков события onScroll
*/
debounceMs?: number;
/**
* Сменить WAI-ARIA Role списка.
*/
listRole?: string;
/**
* Сменить WAI-ARIA Label списка.
*/
listAriaLabel?: string;
}
export interface DetectionProps {
/**
* Вычислять активный элемент
*/
detectActive: true;
/**
* Пороговое значение определения центрального элемента (0-1)
*/
detectThreshold: number;
/**
* Коллбек изменения индекса
*/
onIndexChange?: (index: number) => void;
/**
* Коллбек изменения позиции скролла
*/
onDetectActiveItem?: (index: number) => void;
/**
* Обработчик стилизации элемента во вьюпорте
*/
scaleCallback?: (itemEl: HTMLElement, slot: number) => void;
/**
* Обработчик для сброса стилей элементов, находящихся вне вьюпорта
*/
scaleResetCallback?: (itemEl: HTMLElement) => void;
}
export interface NoDetectionProps {
detectActive?: false;
detectThreshold?: never;
onIndexChange?: never;
onDetectActiveItem?: never;
scaleCallback?: never;
scaleResetCallback?: never;
}
type CarouselPropsBase = BasicProps & (DetectionProps | NoDetectionProps);
export type CarouselProps = Omit & {
/**
* При значении `polite` скринридер будет объявлять переключаемые слайды.
*/
ariaLive?: 'off' | 'polite';
isDragScrollDisabled?: boolean;
};
export type CarouselItemProps = {
scrollSnapAlign?: SnapAlign;
scrollSnapStop?: SnapStop;
} & AsProps & HTMLAttributes;
export {};
//# sourceMappingURL=Carousel.types.d.ts.map