@ebay/ebayui-core
Version:
Collection of core eBay components; considered to be the building blocks for all composite structures, pages & apps.
131 lines (130 loc) • 4.13 kB
TypeScript
import { scrollTransition } from "./utils/scroll-transition";
import type { WithNormalizedProps } from "../../global";
type Direction = typeof LEFT | typeof RIGHT;
declare const LEFT = -1;
declare const RIGHT = 1;
interface Item {
htmlAttributes?: Marko.HTML.LI;
key?: string;
class?: Marko.HTMLAttributes["class"];
style?: Marko.HTMLAttributes["style"];
transform?: string;
fullyVisible?: boolean;
renderBody?: Marko.Body;
}
interface CarouselInput {
item?: Marko.AttrTag<Item>;
gap?: number | string;
index?: number | string;
"items-per-slide"?: number | string;
autoplay?: number | string | boolean;
"image-treatment"?: "none" | "matte";
"hidden-scrollbar"?: boolean;
paused?: boolean;
"no-peek"?: boolean;
class?: Marko.HTMLAttributes["class"];
style?: Marko.HTMLAttributes["style"];
"a11y-previous-text"?: Marko.HTMLAttributes["aria-label"];
"a11y-next-text"?: Marko.HTMLAttributes["aria-label"];
"a11y-pause-text"?: Marko.HTMLAttributes["aria-label"];
"a11y-play-text"?: Marko.HTMLAttributes["aria-label"];
"aria-roledescription"?: string;
"on-move"?: (event: {
visibleIndexes: number[];
}) => void;
"on-scroll"?: (event: {
index: number;
}) => void;
"on-slide"?: (event: {
slide: number;
originalEvent: Event;
}) => void;
"on-next"?: (event: {
originalEvent: Event;
}) => void;
"on-previous"?: (event: {
originalEvent: Event;
}) => void;
"on-play"?: (event: {
originalEvent: Event;
}) => void;
"on-pause"?: (event: {
originalEvent: Event;
}) => void;
}
export interface Input extends WithNormalizedProps<CarouselInput> {
}
interface State {
htmlAttributes: Record<string, string>;
classes: Marko.HTMLAttributes["class"];
style: Marko.HTMLAttributes["style"];
config: {
preserveItems?: boolean;
nativeScrolling?: boolean;
offsetOverride?: number;
scrollTransitioning?: boolean;
};
items: (Item & {
left?: number;
right?: number;
})[];
index: number;
slideWidth: number;
gap: number;
itemsPerSlide: number;
autoplayInterval: number;
paused: boolean;
interacting: boolean;
bothControlsDisabled: boolean;
peek: number;
a11yPreviousText: string;
a11yNextText: string;
a11yPauseText: string;
a11yPlayText: string;
}
declare class Carousel extends Marko.Component<Input, State> {
autoplayTimeout: ReturnType<typeof setTimeout>;
interactionEndTimeout: ReturnType<typeof setTimeout>;
renderFrame: number;
focusFrame: number;
cancelScrollTransition?: ReturnType<typeof scrollTransition>;
skipScrolling: boolean;
isMoving: boolean;
listEl: HTMLElement;
nextEl: HTMLElement;
containerEl: HTMLElement;
cleanupAsync(): void;
emitUpdate(): void;
handleScroll(scrollLeft: number): void;
getOffset(state: State): number;
getMaxOffset({ items, slideWidth }: State): number;
getSlide({ index, itemsPerSlide }: State, i?: number): number | undefined;
normalizeIndex({ items, itemsPerSlide }: State, index: number): number;
isAnimating(state: State): boolean;
getNextIndex(state: State, delta: Direction): number;
getTemplateData(state: State): State & {
items: (Item & {
left?: number;
right?: number;
})[];
slide: number | undefined;
offset: number | undefined;
disableTransition: boolean;
totalSlides: number | undefined;
prevControlDisabled: boolean;
nextControlDisabled: boolean;
bothControlsDisabled: boolean;
};
move(delta: Direction): number;
handleMove(direction: Direction, originalEvent: MouseEvent): void;
handleStartInteraction(): void;
handleEndInteraction(): void;
togglePlay(originalEvent: MouseEvent): void;
onInput(input: Input): void;
onRender(): void;
onMount(): void;
onUpdate(): void;
onDestroy(): void;
onRenderLegacy(): void;
}
export default Carousel;