import { RadiantElement } from '@ecopages/radiant'; export type RuiCarouselTransition = 'none' | 'slide' | 'fade'; /** Where default prev/next chrome is laid out. `toolbar` places controls below the slide; `overlay` pins them to the slide edges. */ export type RuiCarouselControlsVariant = 'toolbar' | 'overlay'; /** * Defaults the SSR shell depends on. * * @remarks Must match the host `@prop` defaults: the view composes classes and * the accessible name from these before hydration. */ export declare const CAROUSEL_DEFAULTS: { readonly label: 'Carousel'; readonly transition: 'none'; readonly controlsVariant: 'toolbar'; }; export type RuiCarouselProps = { label?: string; index?: number; autoplay?: boolean; /** Autoplay interval in milliseconds. */ interval?: number; transition?: RuiCarouselTransition; /** Layout for built-in prev/next (and rotation) chrome. Default: toolbar below the slide. */ controlsVariant?: RuiCarouselControlsVariant; showIndicators?: boolean; showRotationControl?: boolean; loop?: boolean; /** When true, prev/next wrap and controls stay enabled at the ends. Default: true. */ wrap?: boolean; /** Authored slide count for render-time control state before slot projection. */ slideCount?: number; }; type RuiCarouselBindings = { label: string; }; /** * `` — sequentially displays one slide at a time. * * Implements the [APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/): * labeled `carousel` region, slide groups or tab panels, optional tabbed pickers, * rotation control when autoplay is enabled, and `aria-live` on the slide container. * * @summary Region that cycles slides; optional autoplay, transitions, and chrome. * * @element rui-carousel * * @attr {string} label - Accessible name for the carousel. Default: `Carousel`. * @attr {number} index - Active slide index. Default: `0`. * @attr {boolean} autoplay - Advance automatically. Default: `false`. * @attr {number} interval - Autoplay interval in ms. Default: `4000`. * @attr {('none'|'slide'|'fade')} transition - Slide swap animation. Default: `none`. * @attr {('toolbar'|'overlay')} controls-variant - Chrome layout. Default: `toolbar`. * @attr {boolean} show-indicators - Render tabbed indicator pickers. Default: `false`. * @attr {boolean} show-rotation-control - Render play/pause control. Default: `false`. * @attr {boolean} loop - Allow looping past the last slide. Default: `true`. * @attr {boolean} wrap - Keep controls enabled at the ends. Default: `true`. * @attr {number} slide-count - Authored slide count for render-time control state. Default: `0`. * * @cssclass rui-carousel - Root region (`aria-roledescription="carousel"`). * @cssclass rui-carousel--none - No animation between slides. * @cssclass rui-carousel--slide - Horizontal slide transition. * @cssclass rui-carousel--fade - Cross-fade transition. * @cssclass rui-carousel--controls-toolbar - Controls below the viewport. * @cssclass rui-carousel--controls-overlay - Controls overlaid on the viewport. * @cssclass rui-carousel__stage - Viewport wrapper. * @cssclass rui-carousel__viewport - Overflow-hidden slide window (`aria-live`). * @cssclass rui-carousel__track - Slide track. * @cssclass rui-carousel__footer - Controls row below the viewport (`toolbar`). * @cssclass rui-carousel__toolbar - Toolbar grid. * @cssclass rui-carousel__toolbar-rotation - Rotation control cell. * @cssclass rui-carousel__toolbar-center - Indicators cell. * @cssclass rui-carousel__toolbar-side--start - Prev control cell. * @cssclass rui-carousel__toolbar-side--end - Next control cell. * @cssclass rui-carousel__overlay-chrome - Absolute overlay layer over the viewport. * @cssclass rui-carousel__overlay-rotation - Rotation control overlay position. * @cssclass rui-carousel__controls--overlay - Prev/next overlay row. * @cssclass rui-carousel__indicators - Indicator tablist. * @cssclass rui-carousel__indicators--overlay - Overlay pill indicator tablist. * @cssclass rui-carousel__indicator - Indicator button (`role="tab"`). * * @remarks * Autoplay pauses on hover, pointer interaction, focus, and hidden tabs, and * respects `prefers-reduced-motion`. `aria-live` flips to `off` while rotating. * Prev/next and rotation chrome classes are authored by the `RuiCarouselPrev` / * `RuiCarouselNext` / `RuiCarouselRotation` view helpers for custom placement. */ export declare class RuiCarousel extends RadiantElement { label: string; index: number; autoplay: boolean; interval: number; transition: RuiCarouselTransition; controlsVariant: RuiCarouselControlsVariant; showIndicators: boolean; showRotationControl: boolean; loop: boolean; wrap: boolean; slideCount: number; private timer; private paused; /** User explicitly resumed rotation (e.g. via rotation control) despite reduced motion. */ private userOverrideReducedMotion; private swipePointerId; private swipeStartX; private swipeStartY; protected onConnected(): void; disconnectedCallback(): void; onSlideStateUpdated(): void; onAutoplayUpdated(): void; onIndicatorsUpdated(): void; private prefersReducedMotion; private getCarouselId; private slidePanelId; private tabId; private syncSlideAccessibility; private getSlides; private get shouldWrap(); private normalizeIndex; private sync; private syncPrevNextDisabled; private syncIndicators; private syncRotationControl; private syncAriaLive; private canAutoplayRotate; private syncAutoplay; private start; private stop; private goTo; private userNavigate; private isSwipeExcludedTarget; prev(): void; next(): void; toggleRotation(): void; onIndicatorClick(event: Event): void; onIndicatorKeydown(event: KeyboardEvent): void; onRootPointerEnter(event: PointerEvent): void; onRootPointerLeave(event: PointerEvent): void; onRootFocusIn(): void; onRootFocusOut(event: FocusEvent): void; onViewportPointerDown(event: PointerEvent): void; onViewportPointerMove(event: PointerEvent): void; onViewportPointerUp(event: PointerEvent): void; onViewportPointerCancel(event: PointerEvent): void; } export {};