@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
50 lines (49 loc) • 1.94 kB
TypeScript
import { ComponentPublicInstance } from 'vue';
import { ScrollMode } from '../scroll';
import { EventHandler } from '@vexip-ui/utils';
export type NativeScrollMode = Exclude<ScrollMode, 'horizontal-exact'>;
export interface NativeScrollPayload {
type: NativeScrollMode;
clientX: number;
clientY: number;
percentX: number;
percentY: number;
}
export interface NativeScrollState {
scrollX: number;
scrollY: number;
percentX: number;
percentY: number;
enableXScroll: Readonly<boolean>;
enableYScroll: Readonly<boolean>;
}
export interface NativeScrollSlotParams {
getState: () => NativeScrollState;
refresh: () => void;
scrollTo: (clientX: number, clientY: number, duration?: number) => Promise<void>;
scrollBy: (deltaX: number, deltaY: number, duration?: number) => Promise<void>;
scrollToElement: (el: string | Element, duration?: number, offset?: number) => Promise<void>;
ensureInView: (el: string | Element, duration?: number, offset?: number) => void;
}
export interface NativeScrollExposed extends ComponentPublicInstance {
x: number;
y: number;
percentX: number;
percentY: number;
xScrollLimit: number;
yScrollLimit: number;
enableXScroll: boolean;
enableYScroll: boolean;
xBarLength: number;
yBarLength: number;
content?: HTMLElement;
refresh: () => Promise<void>;
scrollTo: (clientX: number, clientY: number, duration?: number) => Promise<void>;
scrollBy: (deltaX: number, deltaY: number, duration?: number) => Promise<void>;
scrollToElement: (el: string | Element, duration?: number, offset?: number) => Promise<void>;
ensureInView: (el: string | Element, duration?: number, offset?: number) => Promise<void>;
getXScrollLimit: () => number[];
getYScrollLimit: () => number[];
addScrollListener: (listener: EventHandler) => void;
removeScrollListener: (listener: EventHandler) => void;
}