import { ElementRef, EventEmitter, OnDestroy, QueryList } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import * as i0 from "@angular/core";
export declare const DEFAULT_TRANSITION_DURATION = "150ms";
export interface CarouselItemInterface {
    element: HTMLElement;
    getHeight(): number;
    getWidth(): number;
}
export interface CarouselConfig {
    /** Defines if carousel items are placed vertically */
    vertical?: boolean;
    /** Amount of visible elements in carousel */
    elementsAtOnce?: number;
    /** Defines if support for gestures, like touch swipe or mouse drag should be enabled */
    gestureSupport?: boolean;
    /** Defines if carousel should move elements to sides. It allows to slide infinitely in one direction */
    infinite?: boolean;
    /** Transition time of CSS translate, `150ms` by default */
    transition?: string;
}
export interface PanEndOutput {
    item: CarouselItemInterface;
    after: boolean;
}
/** @dynamic */
export declare class CarouselService implements OnDestroy {
    private readonly _document;
    /** Event thrown when element is dragged. Emits "true" when drag starts and "false" when drag ends. */
    readonly dragStateChange$: EventEmitter<boolean>;
    /** Event thrown, when active element is changed */
    readonly activeChange$: EventEmitter<PanEndOutput>;
    /** Configuration for carousel */
    config: CarouselConfig;
    /** Initial active item of carousel, position first + offset */
    active: Nullable<CarouselItemInterface>;
    /** Set to true for rtl mode */
    isRtl: boolean;
    /** carousel items query list */
    items: QueryList<CarouselItemInterface>;
    /** Current transition value in px */
    set currentTransitionPx(currentTransitionPx: number);
    get currentTransitionPx(): number;
    /** @hidden */
    private get elementsAtOnce();
    /** @hidden */
    private _lastDistance;
    /** @hidden */
    private _currentTransitionPx;
    /** @hidden */
    private _element;
    /** @hidden */
    private _initialDragPosition;
    /** @hidden */
    private _lastDragPosition;
    /** @hidden */
    private _listenToMouseMove;
    /** @hidden */
    private _dragStarted;
    /**
     * @hidden
     */
    private readonly _destroyRef;
    /** @hidden */
    constructor(_document: Document | null);
    /** @hidden */
    ngOnDestroy(): void;
    /** set initial values for the service */
    initialise(config: CarouselConfig, items: QueryList<CarouselItemInterface>, listElementReference: ElementRef): void;
    /** update config value for the service */
    updateConfig(config: CarouselConfig): void;
    /** set element ref */
    setElement(elementRef: ElementRef): void;
    /** set items and assign active item, if not already there */
    setItems(items: QueryList<CarouselItemInterface>): void;
    /** Change active element */
    goToItem(item: CarouselItemInterface, smooth?: boolean): void;
    /** pick next element and set it active */
    pickNext(): void;
    /** pick previous element and set it active */
    pickPrevious(): void;
    /** @hidden */
    private _centerActive;
    /** @hidden */
    private _transitionToIndex;
    /** @hidden Get closes element, based on current transition */
    private _getClosest;
    /** @hidden */
    private _getIndexOfItem;
    /** @hidden Getting size of carousel, width for horizontal, height for vertical */
    private _getSize;
    /** @hidden */
    private _handlePan;
    /** @hidden */
    private _handlePanEnd;
    /**
     * @hidden Animates the carousel to the currently selected slide.
     */
    private _transitionCarousel;
    /** @hidden Pam Start handler, removes transition duration, */
    private _handlePanStart;
    /** @hidden */
    private _setupGestures;
    /** @hidden */
    private _subscribeToEvents;
    /** @hidden */
    private _setupDragStart;
    /** @hidden */
    private _setupDrag;
    /** @hidden */
    private _setupDragEnd;
    /** @hidden */
    private _getTransition;
    /** @hidden */
    private _getDraggedDelta;
    /** @hidden */
    private _getDragCoordinate;
    /** @hidden */
    private _isTouchEvent;
    static ɵfac: i0.ɵɵFactoryDeclaration<CarouselService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<CarouselService>;
}
