import type { HTMLAttributes, ReactNode } from 'react'; import type { ArrowButtonProps } from '../arrow-button'; export interface CarouselState { currentOffset: number; isAllItemsVisible: boolean; } export interface CarouselControlData { canUse: boolean; onUse: () => void; type: 'forward' | 'backward'; vertical?: boolean; } export interface CarouselProps { /** Список элементов. */ items?: any[]; /** На сколько элементов прокручивать за раз. */ step?: number; /** Можно ли перетаскивать мышью. */ draggable?: boolean | 'auto'; /** Активирует бесконечную прокрутку. */ infinite?: boolean; /** Вертикальный режим. */ vertical?: boolean; /** Включена ли автоматическая прокрутка. */ autoplay?: boolean; /** Таймаут автоматической прокрутки. */ autoplayTimeout?: number; /** Нужно ли останавливать авто-прокрутку при наведении мыши. */ autoplayHoverPause?: boolean; /** Показывать ли кнопки. */ withControls?: boolean | 'auto'; /** Индекс элемента к которому нужно прокрутиться. */ targetIndex?: number; /** Сработает при монтировании. */ onReady?: (currentIndex: number) => void; /** Вернет содержимое элемента. */ renderItem?: (item: any, index: number) => ReactNode; /** Вернет содержимое кнопки. */ renderControl?: (data: CarouselControlData, props?: ArrowButtonProps) => ReactNode; /** Сработает при смене индекса текущего элемента. */ onChangeTargetIndex?: (newIndex: number) => void; /** Свойства контейнера. */ containerProps?: HTMLAttributes; /** Свойства элемента, формирующего viewport карусели. */ viewportElementProps?: HTMLAttributes; /** Свойства кнопок. */ controlProps?: ArrowButtonProps; } export interface ElementPredicate { (sibling: Element): boolean; }