welcome-ui
Version:
Customizable design system with react, typescript, tailwindcss and ariakit.
55 lines (54 loc) • 1.74 kB
TypeScript
import { ComponentProps, FC, ReactNode } from 'react';
import { ButtonProps } from '../Button/types';
import { useSwiper } from '.';
export interface SwiperComponent extends FC<SwiperProps> {
NextButton: FC<SwiperNextButtonProps>;
PrevButton: FC<SwiperPrevButtonProps>;
Slides: FC<SwiperSlidesProps>;
}
export type SwiperNextButtonProps = Omit<ButtonProps, 'aria-label' | 'disabled' | 'onClick'> & {
placement?: 'inline' | 'side';
};
export type SwiperPrevButtonProps = Omit<ButtonProps, 'aria-label' | 'disabled' | 'onClick'> & {
placement?: 'inline' | 'side';
};
export type SwiperProps = ComponentProps<'div'> & SwiperOptions;
export type SwiperSlidesProps = {
children: ReactNode;
className?: string;
};
export interface UseSwiperOptions {
/** If true the swiper will automatically transition between slides */
autoplay?: {
duration?: number;
enabled?: boolean;
loop?: boolean;
};
/** Navigation arrow visibility per breakpoint */
navigation?: {
desktop: boolean;
mobile: boolean;
};
/** Slide display and spacing configuration */
slides?: {
/** Visual alignment of slides within the viewport */
alignment?: 'center' | 'default';
expandOnLargeScreens?: boolean;
/** Space between each slides */
gap?: number;
id?: string;
/** Won't be used if alignment is center */
initialIndex?: number;
/** Number of slides to show per view */
perView?: {
desktop: number;
mobile: number;
tablet: number;
};
};
}
interface SwiperOptions {
children: ReactNode;
store: ReturnType<typeof useSwiper>;
}
export {};