scroll-seamless
Version:
A seamless scroll library for JS, Vue, and React.
225 lines (221 loc) • 5.72 kB
TypeScript
import * as vue from 'vue';
import { VNode } from 'vue';
type ScrollDirection = 'up' | 'down' | 'left' | 'right';
type ScrollSeamlessEvent =
| 'start'
| 'stop'
| 'destroy'
| 'update'
| 'reach-end'
| 'reach-start';
interface PerformancePluginOptions {
enabled?: boolean;
fps?: boolean;
memory?: boolean;
timing?: boolean;
onUpdate?: (metrics: any) => void;
}
interface AccessibilityPluginOptions {
enabled?: boolean;
ariaLabel?: string;
keyboardNavigation?: boolean;
screenReader?: boolean;
focusable?: boolean;
}
interface ScrollSeamlessPlugin {
id: string;
apply: (instance: ScrollSeamlessController) => void;
destroy?: () => void;
}
interface ScrollSeamlessOptions {
data: string[];
direction?: ScrollDirection;
minCountToScroll?: number;
step?: number;
stepWait?: number;
delay?: number;
bezier?: [number, number, number, number];
hoverStop?: boolean;
wheelEnable?: boolean;
singleLine?: boolean;
rows?: number;
cols?: number;
onEvent?: (event: ScrollSeamlessEvent, data?: any) => void;
plugins?: ScrollSeamlessPlugin[];
performance?: PerformancePluginOptions;
accessibility?: AccessibilityPluginOptions;
}
interface ScrollSeamlessController {
start: () => void;
stop: () => void;
destroy: () => void;
updateData: () => void;
setOptions: (options: Partial<ScrollSeamlessOptions>) => void;
isRunning: () => boolean;
getPosition?: () => number;
setPosition?: (position: number) => void;
addPlugin?: (plugin: ScrollSeamlessPlugin) => void;
removePlugin?: (pluginId: string) => void;
getPerformance?: () => any;
}
declare const ScrollSeamlessVue: vue.DefineComponent<vue.ExtractPropTypes<{
data: {
type: ArrayConstructor;
default: () => never[];
};
direction: {
type: StringConstructor;
default: string;
};
minCountToScroll: {
type: NumberConstructor;
default: number;
};
step: {
type: NumberConstructor;
default: number;
};
stepWait: {
type: NumberConstructor;
default: number;
};
delay: {
type: NumberConstructor;
default: number;
};
bezier: {
type: ArrayConstructor;
default: () => number[];
};
hoverStop: {
type: BooleanConstructor;
default: boolean;
};
wheelEnable: {
type: BooleanConstructor;
default: boolean;
};
singleLine: {
type: BooleanConstructor;
default: boolean;
};
class: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
style: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
contentClass: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
itemClass: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
rows: {
type: NumberConstructor;
default: number;
};
cols: {
type: NumberConstructor;
default: number;
};
modelValue: {
type: BooleanConstructor;
default: undefined;
};
}>, () => VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, never[], never, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
data: {
type: ArrayConstructor;
default: () => never[];
};
direction: {
type: StringConstructor;
default: string;
};
minCountToScroll: {
type: NumberConstructor;
default: number;
};
step: {
type: NumberConstructor;
default: number;
};
stepWait: {
type: NumberConstructor;
default: number;
};
delay: {
type: NumberConstructor;
default: number;
};
bezier: {
type: ArrayConstructor;
default: () => number[];
};
hoverStop: {
type: BooleanConstructor;
default: boolean;
};
wheelEnable: {
type: BooleanConstructor;
default: boolean;
};
singleLine: {
type: BooleanConstructor;
default: boolean;
};
class: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
style: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
contentClass: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
itemClass: {
type: (ArrayConstructor | StringConstructor | ObjectConstructor)[];
default: string;
};
rows: {
type: NumberConstructor;
default: number;
};
cols: {
type: NumberConstructor;
default: number;
};
modelValue: {
type: BooleanConstructor;
default: undefined;
};
}>> & Readonly<{}>, {
data: unknown[];
direction: string;
minCountToScroll: number;
step: number;
stepWait: number;
delay: number;
bezier: unknown[];
hoverStop: boolean;
wheelEnable: boolean;
singleLine: boolean;
class: string | Record<string, any> | unknown[];
style: string | Record<string, any> | unknown[];
contentClass: string | Record<string, any> | unknown[];
itemClass: string | Record<string, any> | unknown[];
rows: number;
cols: number;
modelValue: boolean;
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
export { ScrollSeamlessVue as default };
export type { ScrollSeamlessOptions };