import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { AccordionState } from '../../interfaces';
import { BalAnimationObserverInfo } from '../../utils/animation';
import { BalBreakpointObserver, BalBreakpoints } from '../../utils/breakpoints';
import { BalConfigObserver, BalConfigState, BalLanguage } from '../../utils/config';
import { Loggable, LogInstance } from '../../utils/log';
import { BalMutationObserver } from '../../utils/mutation';
import { BalResizeInfo, BalResizeObserver } from '../../utils/resize';
import { BalSwipeInfo } from '../../utils/swipe';
import { SwiperChildItem, SwiperInterface, SwiperUtil } from '../../utils/swiper';
import { BalVisibilityObserver } from '../../utils/visibility';
import { BalTabOption } from './bal-tab.type';
import { HTMLStencilElement } from '../../stencil-public-runtime';
export declare class Tabs implements ComponentInterface, Loggable, BalConfigObserver, BalMutationObserver, BalBreakpointObserver, BalResizeObserver, BalVisibilityObserver, SwiperInterface {
    private tabsId;
    private currentRaf;
    private inheritAttributes;
    swiper: SwiperUtil;
    el: HTMLStencilElement;
    isAccordionOpen: boolean;
    accordionState: AccordionState;
    isNavbarOpen: boolean;
    inNavbar: boolean;
    inNavbarLight: boolean;
    enableLineRender: boolean;
    hasAnimated: boolean;
    index: number;
    isMobile: boolean;
    isTablet: boolean;
    language: BalLanguage;
    store: BalTabOption[];
    animated: boolean;
    log: LogInstance;
    createLogger(log: LogInstance): void;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * @deprecated Defines the layout of the tabs. Right only works from the breakpoint
     * high-definition and beyond.
     */
    float: BalProps.BalTabsFloat;
    /**
     * If `true` the tabs is a block element and uses 100% of the width
     */
    fullwidth: boolean;
    /**
     * If `true` the tab items can be open and closed
     */
    accordion: boolean;
    /**
     * If `true` the tabs have a carousel if they need more space than provided.
     */
    overflow: boolean;
    /**
     * Tabs can be passed as a property or through HTML markup.
     */
    options: BalTabOption[];
    protected optionChanged(): Promise<void>;
    /**
     * Defines the layout of the tabs.
     */
    context?: BalProps.BalTabsContext;
    /**
     * Defines the layout of the tabs.
     */
    iconPosition: BalProps.BalTabsIconPosition;
    /**
     * If `true` the field expands over the whole width.
     */
    expanded: boolean;
    protected expandedChanged(): void;
    /**
     * If `true` the tabs container does not have a padding left or right.
     */
    spaceless: boolean;
    /**
     * If `true` the tabs or tabs can be clicked.
     */
    clickable: boolean;
    /**
     * If `true` a light border is shown for the tabs.
     */
    border: boolean;
    /**
     * If `true` the tabs can be uses on dark background
     */
    inverted: boolean;
    /**
     * If `true` the tabs selected line is optional
     */
    optionalTabSelection: boolean;
    /**
     * Set the amount of time, in milliseconds, to wait to trigger the `balChange` event after each keystroke. This also impacts form bindings such as `ngModel` or `v-model`.
     */
    debounce: number;
    protected debounceChanged(): void;
    /**
     * If `true` tabs are align vertically.
     */
    vertical: BalProps.BalTabsVertical;
    protected verticalChanged(): void;
    /**
     * The col size of the tabs on vertical mode.
     */
    verticalColSize: BalProps.BalTabsColSize;
    /**
     * If `true` the tabs are shown as a select component on mobile
     */
    selectOnMobile: boolean;
    value?: string;
    /**
     * if true, inactive elements will have their opacity reduced
     */
    dimInactiveElements: boolean;
    /**
     * If `true` then  isTabList becomes true even if there is a link in the list.
     */
    handleAsTabList: boolean;
    protected valueChanged(newValue?: string, oldValue?: string): Promise<void>;
    /**
     * Emitted when the changes has finished.
     */
    balChange: EventEmitter<BalEvents.BalTabsChangeDetail>;
    /**
     * Emitted before the animation starts
     */
    balWillAnimate: EventEmitter<BalEvents.BalTabsWillAnimateDetail>;
    /**
     * Emitted after the animation has finished
     */
    balDidAnimate: EventEmitter<BalEvents.BalTabsDidAnimateDetail>;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    connectedCallback(): void;
    componentDidRender(): void;
    componentWillRender(): void;
    componentDidLoad(): void;
    componentWillLoad(): void;
    disconnectedCallback(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    mutationObserverActive: boolean;
    mutationListener(): void;
    visibilityListener(): void;
    breakpointListener(breakpoints: BalBreakpoints): void;
    resizeListener(info: BalResizeInfo): void;
    swipeListener({ left, right }: BalSwipeInfo): void;
    animationListener(info: BalAnimationObserverInfo): void;
    listenToKeyDown(ev: KeyboardEvent): void;
    /**
     * PUBLIC METHODS
     * ------------------------------------------------------
     */
    /**
     * @internal define config for the component
     */
    configChanged(state: BalConfigState): Promise<void>;
    /**
     * Go to tab with the given value
     */
    select(tab: BalTabOption): Promise<void>;
    /**
     * Find the options properties by its value
     */
    getOptionByValue(value: string): Promise<BalTabOption>;
    /**
     * @internal
     * Rerenders the line to mark the active tab.
     */
    renderLine(): Promise<void>;
    /**
     * @internal
     * Closes the accordion
     */
    closeAccordion(): Promise<void>;
    swiperOnChange(index: number): void;
    /**
     * GETTERS
     * ------------------------------------------------------
     */
    swiperGetAllChildrenElements(): SwiperChildItem[];
    /**
     * Tells if the component acts as a tab or link list.
     * If only one link is in the list and handleAsTabList has been set to false it will be a link list
     */
    private get isTabList();
    private get items();
    private getOptions;
    private getTargetElement;
    private getLineElement;
    private getBorderElement;
    private getCarouselElement;
    /**
     * PRIVATE METHODS
     * ------------------------------------------------------
     */
    private updateSwiper;
    private isUsedInNavbar;
    private updateStore;
    private setActiveItem;
    private setActiveContent;
    private isTabActive;
    private isTabVisible;
    private parseVertical;
    private isVertical;
    private getLineSize;
    private getOffset;
    private animateLine;
    private toggleAccordionState;
    private expandAccordion;
    private collapseAccordion;
    private shouldAnimate;
    /**
     * PRIVATE Tab Navigation with Arrow Keys
     * ------------------------------------------------------
     */
    private findNextTab;
    private findPreviousTab;
    private tabListSelectNext;
    private tabListSelectPrevious;
    focus(tab: BalTabOption): Promise<void>;
    /**
     * EVENT BINDING
     * ------------------------------------------------------
     */
    private onOptionChange;
    private onOptionChangeInternal;
    private onSelectTab;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
