import { CarouselOptions } from './carousel.types';
/**
* Headless carousel controller. The scroll/snap engine (drag physics, momentum,
* snapping, loop wrapping, resize handling and axis) is delegated to
* [Embla Carousel](https://www.embla-carousel.com/); this controller stays
* responsible for the headless contract: ARIA wiring, auto-generated dot
* indicators, prev/next controls, keyboard navigation, optional autoplay and
* typed `carousel:change` events. It reflects the active index on
* `data-active` (slides/dots) and `data-active-index` (root) — it applies no
* visual styling itself.
*
* Markup:
* ```html
*
* ```
*/
export declare class Carousel {
private readonly root;
private readonly slides;
private readonly prevBtn;
private readonly nextBtn;
private readonly dotsContainer;
private dots;
private readonly embla;
private readonly autoplayEnabled;
private readonly autoplayInterval;
private readonly pauseOnHover;
private current;
private timer;
private cleanups;
constructor(root: HTMLElement, options?: CarouselOptions);
private init;
private buildDots;
private bindPause;
private onKeydown;
private startTimer;
private stopTimer;
/** Pull the selected index from Embla, update DOM state and emit change. */
private syncFromEngine;
private render;
private toggleControl;
/** Go to a specific slide (clamped by the engine). */
goTo(index: number): void;
/** Advance one slide (wraps when `loop` is enabled). */
next(): void;
/** Go back one slide (wraps when `loop` is enabled). */
prev(): void;
/** Start autoplay. */
play(): void;
/** Stop autoplay. */
pause(): void;
get index(): number;
get length(): number;
/** Subscribe to a DOM event on the root element. Returns an unsubscribe fn. */
on(event: string, handler: (event: E) => void): () => void;
destroy(): void;
}