import { ESLBaseElement } from '../../esl-base-element/core';
import { ESLMediaRuleList } from '../../esl-media-query/core';
import type { ESLCarouselRenderer } from './esl-carousel.renderer';
import type { ESLCarouselState, ESLCarouselSlideTarget, ESLCarouselStaticState, ESLCarouselConfig, ESLCarouselActionParams, ESLCarouselFocusPolicy } from './esl-carousel.types';
/**
 * ESLCarousel component
 * @author Julia Murashko, Alexey Stsefanovich (ala'n)
 *
 * ESLCarousel - a slideshow component for cycling through slides.
 */
export declare class ESLCarousel extends ESLBaseElement {
    static is: string;
    static observedAttributes: string[];
    /** Media query pattern used for {@link ESLMediaRuleList} of `type`, `loop` and `count` (default: `all`) */
    media: string;
    /** Renderer type name (`multi` by default). Supports {@link ESLMediaRuleList} syntax */
    type: string;
    /** Marker to enable loop mode for a carousel (`true` by default). Supports {@link ESLMediaRuleList} syntax */
    loop: string | boolean;
    /** Count of slides to show on the screen (`1` by default). Supports {@link ESLMediaRuleList} syntax */
    count: string | number;
    /** Orientation of the carousel (`horizontal` by default). Supports {@link ESLMediaRuleList} syntax */
    vertical: string | boolean;
    /** Duration of the single slide transition */
    stepDuration: string;
    /** Container selector (supports traversing query). Carousel itself by default */
    container: string;
    /** Defines how carousel slides participate in focus flow (`active` by default) */
    focusPolicy: ESLCarouselFocusPolicy;
    /** CSS class to add on the container when carousel is empty */
    containerEmptyClass: string;
    /** CSS class to add on the container when carousel is incomplete */
    containerIncompleteClass: string;
    /** true if carousel is in process of animating */
    animating: boolean;
    /** true if carousel is empty */
    empty: boolean;
    /** true if carousel has only one item */
    singleSlide: boolean;
    /** true if carousel is incomplete (total slides count is less or equal to visible slides count) */
    incomplete: boolean;
    /** Marker/mixin attribute to define slide element */
    get slideAttrName(): string;
    /** Renderer type {@link ESLMediaRuleList} instance */
    get typeRule(): ESLMediaRuleList<string>;
    /** Loop marker {@link ESLMediaRuleList} instance */
    get loopRule(): ESLMediaRuleList<boolean>;
    /** Count of visible slides {@link ESLMediaRuleList} instance */
    get countRule(): ESLMediaRuleList<number>;
    /** Orientation of the carousel {@link ESLMediaRuleList} instance */
    get verticalRule(): ESLMediaRuleList<boolean>;
    /** Duration of the single slide transition {@link ESLMediaRuleList} instance */
    get stepDurationRule(): ESLMediaRuleList<number>;
    /** Returns observed media rules */
    get observedRules(): ESLMediaRuleList[];
    /** Carousel instance current {@link ESLCarouselStaticState} */
    get config(): ESLCarouselStaticState;
    /** Carousel instance configured {@link ESLCarouselStaticState} */
    get configCurrent(): ESLCarouselConfig;
    /** Carousel instance current {@link ESLCarouselState} */
    get state(): ESLCarouselState;
    /** @returns currently active renderer */
    get renderer(): ESLCarouselRenderer;
    /** @returns normalized focus policy with legacy `no-inert` support */
    get focusPolicyCurrent(): ESLCarouselFocusPolicy;
    protected connectedCallback(): void;
    protected attributeChangedCallback(attrName: string, oldVal: string, newVal: string): void;
    protected disconnectedCallback(): void;
    /** Updates the config and the state that is associated with */
    update(): void;
    protected updateStateMarkers(): void;
    /** Updates slide accessibility state according to current focus policy */
    protected updateSlidesA11yState(): void;
    /** Appends slide instance to the current carousel */
    addSlide(slide: HTMLElement): void;
    /** Remove slide instance from the current carousel */
    removeSlide(slide: HTMLElement): void;
    protected updateA11y(): void;
    protected _onRuleUpdate(): void;
    protected _onRegistryUpdate(): void;
    protected _onResize(): void;
    protected _onFocusIn(e: FocusEvent): void;
    protected onShowRequest(e: CustomEvent): void;
    /** @returns slides that are processed by the current carousel. */
    get $slides(): HTMLElement[];
    /**
     * @returns carousel container
     */
    get $container(): Element | null;
    /** @returns carousel slides area */
    get $slidesArea(): HTMLElement;
    /** @returns first active slide */
    get $activeSlide(): HTMLElement | undefined;
    /** @returns list of active slides. */
    get $activeSlides(): HTMLElement[];
    /** @returns count of slides. */
    get size(): number;
    /** @returns additional shift of the stage in pixels */
    get offset(): number;
    /** @returns index of first (the most left in the loop) active slide */
    get activeIndex(): number;
    /** @returns list of active slide indexes. */
    get activeIndexes(): number[];
    /** Goes to the target according to passed params */
    goTo(target: HTMLElement | ESLCarouselSlideTarget, params?: Partial<ESLCarouselActionParams>): Promise<void>;
    /** Moves slides by the passed offset */
    move(offset: number, from?: number, params?: Partial<ESLCarouselActionParams>): void;
    /** Commits slides to the nearest stable position */
    commit(params?: Partial<ESLCarouselActionParams>): Promise<void>;
    /** Merges request params with default params */
    protected mergeParams(params: Partial<ESLCarouselActionParams>): ESLCarouselActionParams;
    /** @returns slide by index (supports not normalized indexes) */
    slideAt(index: number): HTMLElement;
    /** @returns index of the passed slide */
    indexOf(slide: HTMLElement): number;
    /**
     * @returns if the passed slide target can be reached.
     * @see canNavigate
     */
    canNavigate(target: ESLCarouselSlideTarget): boolean;
    /**
     * @returns if the passed navigation target refers to a currently active slide (or group) in this carousel.
     * @see isCurrent
     */
    isCurrent(target: ESLCarouselSlideTarget): boolean;
    /** @returns if the passed element (or slide on a passed index) is an active slide */
    isActive(el: number | HTMLElement): boolean;
    /** @returns if the passed element (or slide on a passed index) is a slide in pre-active state */
    isPreActive(el: number | HTMLElement): boolean;
    /** @returns if the passed element (or slide on a passed index) is a next slide */
    isNext(el: number | HTMLElement): boolean;
    /** @returns if the passed element (or slide on a passed index) is a prev slide */
    isPrev(el: number | HTMLElement): boolean;
    /**
     * Registers component in the {@link customElements} registry
     * @param tagName - custom tag name to register custom element
     */
    static register(tagName?: string): void;
}
declare global {
    export interface ESLCarouselNS {
    }
    export interface ESLLibrary {
        Carousel: typeof ESLCarousel & ESLCarouselNS;
    }
    export interface HTMLElementTagNameMap {
        'esl-carousel': ESLCarousel;
    }
}
