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;
