@alifd/next
Version:
A configurable component library for web built on React.
393 lines (392 loc) • 11.3 kB
TypeScript
/// <reference types="node" />
import type { HTMLAttributes, CSSProperties, ReactNode, ReactElement, MouseEvent, MouseEventHandler } from 'react';
import type { CommonProps } from '../util';
interface HTMLAttributesWeak extends Omit<HTMLAttributes<HTMLElement>, 'onMouseEnter' | 'onMouseLeave'> {
}
export interface TrackCSSProps extends Omit<InnerSliderProps, 'slideCount' | 'slideWidth' | 'slideHeight'>, InnerSliderState {
left: number;
}
export interface TrackLeftProps extends Omit<InnerSliderProps, 'slideCount' | 'slideWidth' | 'slideHeight'>, InnerSliderState {
slideIndex: number;
trackRef: HTMLDivElement;
}
export interface OptionProps {
message?: string;
index?: number;
currentSlide?: number;
slidesToScroll?: number;
}
interface BasicSlideProps {
centerMode?: SliderProps['centerMode'];
infinite?: SliderProps['infinite'];
slidesToShow?: SliderProps['slidesToShow'];
slidesToScroll?: SliderProps['slidesToScroll'];
slideCount?: number | null;
currentSlide?: number;
}
export interface TrackProps extends Omit<CommonProps, 'locale'>, BasicSlideProps {
activeIndex?: SliderProps['activeIndex'];
trackStyle?: CSSProperties;
lazyLoad?: SliderProps['lazyLoad'];
lazyLoadedList?: number[];
animation?: SliderProps['animation'];
variableWidth?: boolean;
slideWidth?: number | null;
slideHeight?: number | null;
cssEase?: SliderProps['cssEase'];
speed?: SliderProps['speed'];
vertical?: boolean;
children?: ReactNode;
focusOnSelect?: ((options: OptionProps) => void) | null;
}
export interface DotsProps extends Omit<CommonProps, 'locale'>, BasicSlideProps {
dotsClass?: string;
dotsDirection?: SliderProps['dotsDirection'];
triggerType?: SliderProps['triggerType'];
dotsRender?: SliderProps['dotsRender'];
changeSlide?: (options: OptionProps) => void;
}
export interface ArrowProps extends HTMLAttributesWeak, Omit<CommonProps, 'locale'>, Omit<BasicSlideProps, 'slidesToScroll'> {
type?: 'prev' | 'next';
arrowSize?: SliderProps['arrowSize'];
arrowPosition?: SliderProps['arrowPosition'];
arrowDirection?: SliderProps['arrowDirection'];
children?: ReactElement;
clickHandler?: (options: OptionProps, e: MouseEvent<HTMLElement>) => void;
onMouseEnter?: MouseEventHandler<HTMLDivElement | HTMLButtonElement>;
onMouseLeave?: MouseEventHandler<HTMLDivElement | HTMLButtonElement>;
}
export interface InnerSliderProps extends Omit<SliderProps, 'slideDirection' | 'style' | 'className' | 'vertical' | 'verticalSwiping'> {
/**
* 是否启用垂直轮播
* @en Whether to use vertical carousel
*/
vertical?: boolean;
/**
* 是否启用垂直滑动
* @en Whether to use vertical sliding
*/
verticalSwiping?: boolean;
}
export interface InnerSliderState {
lazyLoadedList?: number[];
slideCount?: number | null;
currentSlide?: number;
trackStyle?: CSSProperties;
animating?: boolean;
dragging?: boolean;
autoPlayTimer?: NodeJS.Timeout | null;
currentDirection?: number;
currentLeft?: number | null;
direction?: number;
listWidth?: number | null;
listHeight?: number | null;
slideWidth?: number | null;
slideHeight?: number | null;
slideHeightList?: number[];
swipeLeft?: number | null;
touchObject?: {
startX?: number;
startY?: number;
curX?: number;
curY?: number;
swipeLength?: number;
};
initialized?: boolean;
edgeDragged?: boolean;
swiped?: boolean;
trackWidth?: number;
children?: ReactNode;
}
/**
* @api
*/
export interface SliderProps extends Omit<HTMLAttributesWeak, 'onChange' | 'draggable' | 'children'>, Omit<CommonProps, 'locale'> {
/**
* 自定义传入的样式
* @en Custom className
*/
className?: string;
/**
* 是否使用自适应高度
* @en Whether to use adaptive height
* @defaultValue false
*/
adaptiveHeight?: boolean;
/**
* 动效类型,默认是'slide'
* @en Animation type, default value is 'slide'
* @defaultValue 'slide'
*/
animation?: string | boolean;
/**
* 是否显示箭头
* @en Whether to display arrows
* @defaultValue true
*/
arrows?: boolean;
/**
* 导航箭头大小
* @en Size of the arrow
* @defaultValue 'medium'
*/
arrowSize?: 'medium' | 'large';
/**
* 导航箭头位置
* @en Position of the arrow
* @defaultValue 'inner'
*/
arrowPosition?: 'inner' | 'outer';
/**
* 导航箭头方向
* @en Direction of the arrow
* @defaultValue 'hoz'
*/
arrowDirection?: 'hoz' | 'ver';
/**
* 是否自动播放
* @en Whether to play automatically
* @defaultValue false
*/
autoplay?: boolean;
/**
* 自动播放的速度
* @en Autoplay speed
* @defaultValue 3000
*/
autoplaySpeed?: number;
/**
* 前向箭头节点
* @en Prev arrow
*/
prevArrow?: ReactElement;
/**
* 后向箭头节点
* @en Next arrow
*/
nextArrow?: ReactElement;
/**
* 是否启用居中模式
* @en Whether to use center mode
* @defaultValue false
*/
centerMode?: boolean;
/**
* 是否显示导航锚点
* @en Whether to display dots
* @defaultValue true
*/
dots?: boolean;
/**
* 导航锚点方向
* @en Direction for navigation dots
* @defaultValue 'hoz'
*/
dotsDirection?: 'hoz' | 'ver';
/**
* 自定义导航锚点
* @en Render navigation dots
* @param index - 锚点编号
* @param current - 当前幻灯片编号
*/
dotsRender?: (index: number, current: number) => void;
/**
* 是否可拖拽
* @en Whether it can be dragged
* @defaultValue true
*/
draggable?: boolean;
/**
* 是否使用无穷循环模式
* @en Whether to use infinite loop mode
* @defaultValue true
*/
infinite?: boolean;
/**
* 初始被激活的轮播图
* @en The default activated slide index
* @defaultValue 0
*/
defaultActiveIndex?: number;
/**
* 是否启用懒加载
* @en Whether to enable lazy load
* @defaultValue false
*/
lazyLoad?: boolean;
/**
* 轮播方向
* @en Slide direction
* @defaultValue 'hoz'
*/
slideDirection?: 'hoz' | 'ver';
/**
* 同时展示的图片数量
* @en Number of slides showed at the same time
* @defaultValue 1
*/
slidesToShow?: number;
/**
* 同时滑动的图片数量
* @en Number of slides scrolled at the same time
* @defaultValue 1
*/
slidesToScroll?: number;
/**
* 轮播速度
* @en Carousel speed
* @defaultValue 600
*/
speed?: number;
/**
* 跳转到指定的轮播图(受控)
* @en Jump to the specified carousel image (controlled)
*/
activeIndex?: number;
/**
* 导航锚点触发方式
* @en Triggering method for navigation dots
* @defaultValue 'click'
*/
triggerType?: 'click' | 'hover';
/**
* 轮播切换的回调函数
* @en Callback function for slides switching
*/
onChange?: (index: number) => void;
/**
* center 模式下的边缘 padding 值 (px or %);
* @en Side padding when in center mode (px or %);
* @defaultValue '50px'
*/
centerPadding?: string;
/**
* CSS3 Animation Easing,默认‘ease’
* @en CSS3 Animation Easing, default value is 'ease'
* @defaultValue 'ease'
*/
cssEase?: string;
/**
* 多图轮播时,是否在点击选中后自动居中
* @en When multiple slides are rotated, whether to be automatically centered after clicking to select them.
* @defaultValue 'false'
*/
focusOnSelect?: boolean;
/**
* 自定义样式
* @en Custom style
*/
style?: CSSProperties;
/**
* 是否等待动画结束后再执行动作
* @en Whether to wait for the animation to end before executing the action
* @defaultValue true
*/
waitForAnimate?: boolean;
/**
* @deprecated use arrowPosition instead
* @skip
*/
arrowPos?: SliderProps['arrowPosition'] | 'inline';
/**
* @deprecated use defaultActiveIndex instead
* @skip
*/
initialSlide?: number;
/**
* @deprecated use activeIndex instead
* @skip
*/
slickGoTo?: number;
/**
* @deprecated use onChange instead
* @skip
*/
afterChange?: (index: number) => void;
/**
* @deprecated use onBeforeChange instead
* @skip
*/
beforeChange?: (index: number) => void;
/**
* 是否启用无障碍支持,使用左右键可以切换轮播图
* @en Whether to enable accessibility support, using the left and right keys to switch the carousel image
* @defaultValue false
*/
accessibility?: boolean;
/**
* 子元素
* @en Children
*/
children?: ReactNode;
/**
* 导航锚点样式类名
* @en Dots class name
*/
dotsClass?: string;
/**
* Slider 在默认情况下会认为所有的子元素是等宽的。通过设置 `variableWidth` 为 `true`,您可以在 Slider 中放置不同宽度的图片。
* @en By default, Slider considers all child elements to be equal. By setting `variableWidth` to `true`, you can place images of different widths in the Slider.
*/
variableWidth?: boolean;
/**
* 是否启用垂直轮播
* @en Whether to use vertical carousel
* @deprecated use slideDirection=ver instead
* @skip
*/
vertical?: boolean;
/**
* 是否启用垂直滑动
* @en Whether to use vertical sliding
* @deprecated use slideDirection=ver instead
* @skip
*/
verticalSwiping?: boolean;
/**
* 轮播切换前的回调函数
* @en Callback function before slides switching
*/
onBeforeChange?: (index: number, currentIndex?: number) => void;
/**
* 是否启用滑动
* @en Whether to use swipe
* @defaultValue true
*/
swipe?: boolean;
/**
* 在滑动到头时触发的回调函数
* @en Callback function triggered when sliding to the edge
*/
edgeEvent?: (swipeDirection: 'left' | 'right') => void;
/**
* 边缘摩擦系数,数值越大,滑动越慢
* @en Edge friction coefficient, the larger the number, the slower the sliding
* @defaultValue 0.35
*/
edgeFriction?: number;
/**
* 滑动事件回调函数
* @en Callback function for swipe events
*/
swipeEvent?: (swipeDirection: 'left' | 'right' | 'vertical' | 'down' | 'up') => void;
/**
* @skip
*/
touchThreshold?: number;
/**
* @skip
*/
swipeToSlide?: boolean;
/**
* 在鼠标悬浮时自动停止轮播
* @en Whether to stop the carousel automatically when the mouse hovers
* @defaultValue false
*/
pauseOnHover?: boolean;
/**
* @skip
*/
useCSS?: boolean;
}
export {};