import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, QueryList, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';
import { LyTheme2, LyRippleService, LyFocusState, ThemeRef, StyleCollection, LyClasses, StyleTemplate, StyleRenderer } from '@alyle/ui';
import { LyButton } from '@alyle/ui/button';
import { LyTabContent } from './tab-content.directive';
import { ViewportRuler } from '@angular/cdk/scrolling';
import { Platform } from '@angular/cdk/platform';
import { TemplatePortal } from '@angular/cdk/portal';
export interface LyTabTheme {
    /** Styles for Tab Component */
    root?: StyleCollection<((classes: LyClasses<typeof STYLES>) => StyleTemplate)> | ((classes: LyClasses<typeof STYLES>) => StyleTemplate);
}
export interface LyTabVariables {
    tab?: LyTabTheme;
}
export declare type AlignTabs = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
export declare type LyTabsHeaderPlacement = 'before' | 'after' | 'above' | 'below';
export declare const STYLES: (theme: import("@alyle/ui/alyle-ui").LyStyleUtils & import("@alyle/ui/alyle-ui").ThemeConfig & LyTabVariables, ref: ThemeRef) => {
    $name: string;
    $priority: number;
    root: () => (className: string) => string;
    tab: (className: string) => string;
    /** Tab container */
    contentContainer: (className: string) => string;
    /** Tab header */
    labels: (className: string) => string;
    labelsContainer: () => (className: string) => string;
    label: (className: string) => string;
    labelActive: (className: string) => string;
    contents: (className: string) => string;
    content: (className: string) => string;
    contentActive: (className: string) => string;
    contentInner: any;
    indicator: (className: string) => string;
    indicatorForServer: (className: string) => string;
    rippleContainer: (className: string) => string;
    scrollable: any;
    hiddenContent: () => (className: string) => string;
    column: any;
    row: any;
};
/** @docs-private */
export declare class LyTabsBase {
    _theme: LyTheme2;
    constructor(_theme: LyTheme2);
}
/** @docs-private */
export declare const LyTabsMixinBase: import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/build-common-behaviors").CanStyleUpdater> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/bg").CanBg> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/elevation").CanElevation> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/shadow-color").CanShadowColor> & typeof LyTabsBase;
/** @docs-private */
export declare class LyTabLabelBase {
    _theme: LyTheme2;
    _ngZone: NgZone;
    _platform: Platform;
    constructor(_theme: LyTheme2, _ngZone: NgZone, _platform: Platform);
}
/** @docs-private */
export declare const LyTabLabelMixinBase: import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/build-common-behaviors").CanStyleUpdater> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/bg").CanBg> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/color").CanColor> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/raised").CanRaised> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/alyle-ui").CanDisable> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/outlined").CanOutlined> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/elevation").CanElevation> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/shadow-color").CanShadowColor> & import("@alyle/ui/src/common/constructor").Constructor<import("@alyle/ui/src/common/disable-ripple").CanDisableRipple> & typeof LyTabLabelBase;
/**
 * @dynamic
 */
export declare class LyTabs extends LyTabsMixinBase implements OnChanges, OnInit, AfterViewInit, AfterContentInit, OnDestroy {
    private theme;
    private renderer;
    private el;
    private cd;
    private _viewportRuler;
    readonly sRenderer: StyleRenderer;
    private _platform;
    private _ngZone;
    /** @docs-private */
    static и: string;
    /** @docs-private */
    $priority: number;
    /** @docs-private */
    readonly classes: Pick<{
        $name: string;
        $priority: string;
        root: string;
        tab: string;
        contentContainer: string;
        labels: string;
        labelsContainer: string;
        label: string;
        labelActive: string;
        contents: string;
        content: string;
        contentActive: string;
        contentInner: string;
        indicator: string;
        indicatorForServer: string;
        rippleContainer: string;
        scrollable: string;
        hiddenContent: string;
        column: string;
        row: string;
    }, "root" | "tab" | "contentContainer" | "labels" | "labelsContainer" | "label" | "labelActive" | "contents" | "content" | "contentActive" | "contentInner" | "indicator" | "indicatorForServer" | "rippleContainer" | "scrollable" | "hiddenContent" | "column" | "row">;
    _selectedIndex: number;
    _selectedBeforeIndex: number;
    _selectedTab: LyTab | null;
    _selectedBeforeTab: LyTab | null;
    _isViewInitLoaded: boolean;
    private _tabsSubscription;
    private _headerPlacement;
    private _headerPlacementClass;
    private _alignTabs;
    private _alignTabsClass;
    private _textColor;
    private _textColorClass;
    private _tabResizeSub;
    private _scrollable;
    private _timeoutIds;
    /** Emits whenever the component is destroyed. */
    private readonly _destroy;
    tabsRef: ElementRef;
    tabContents: ElementRef<HTMLDivElement>;
    tabsIndicator?: ElementRef;
    selectedIndexOnChange: 'auto' | number;
    /**
     * Keep the content.
     * By default, when changing a tab, the previous one is created and deleted.
     * With this, the content will only be hidden instead of deleting it.
     */
    keepContent: boolean;
    private _keepContent;
    /** Animation duration in milliseconds */
    animationDuration: number;
    private _animationDuration;
    /**
     * Whether the tab group should grow to the size of the active tab.
     */
    dynamicHeight: boolean;
    private _dynamicHeight;
    scrollable: any;
    indicatorColor: string;
    headerPlacement: LyTabsHeaderPlacement;
    alignTabs: AlignTabs;
    textColor: string;
    selectedIndex: number;
    selectedIndexChange: EventEmitter<any>;
    tabsList: QueryList<LyTab>;
    tabContentList: QueryList<ElementRef<HTMLDivElement>>;
    constructor(theme: LyTheme2, renderer: Renderer2, el: ElementRef, cd: ChangeDetectorRef, _viewportRuler: ViewportRuler, sRenderer: StyleRenderer, _platform: Platform, _ngZone: NgZone);
    ngOnChanges(): void;
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private _findIndex;
    _updateIndicator(currentTab: LyTab, beforeTab?: LyTab): void;
    _markForCheck(): void;
    private _updateTabs;
    loadTemplate(tab: LyTab, index: number): TemplatePortal<any> | null;
    private _getFlexDirection;
    private _updateContentStyle;
    /** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */
    private _runTimeoutOutsideZone;
    private _clearTimeouts;
}
export declare class LyTab implements OnInit {
    private _tabs;
    _renderer: Renderer2;
    _el: ElementRef;
    readonly sRenderer: StyleRenderer;
    private _platform;
    private _viewContainerRef;
    /** Current tab index */
    index: number;
    _isBrowser: boolean;
    _templateRefLazy: TemplateRef<LyTabContent>;
    _templateRef: TemplateRef<any>;
    _tabIndicator: ElementRef;
    _tabLabel: LyTabLabel & {};
    /** Portal that will be the hosted content of the tab */
    private _contentPortal;
    /** @docs-private */
    readonly content: TemplatePortal | null;
    _activeContent: boolean;
    constructor(_tabs: LyTabs, _renderer: Renderer2, _el: ElementRef, sRenderer: StyleRenderer, _platform: Platform, _viewContainerRef: ViewContainerRef);
    ngOnInit(): void;
}
export declare class LyTabLabel extends LyButton implements OnInit, AfterViewInit {
    readonly sRenderer: StyleRenderer;
    private _tab;
    private _tabs;
    private _activeTabStyle;
    private _active;
    disableRipple: boolean;
    _isBrowser: any;
    active: boolean;
    _rippleContainer: ElementRef;
    _onClickTab(): void;
    constructor(_el: ElementRef, _renderer: Renderer2, _theme: LyTheme2, _ngZone: NgZone, _rippleService: LyRippleService, _focusState: LyFocusState, sRenderer: StyleRenderer, _tab: LyTab, _tabs: LyTabs, platform: Platform);
    ngOnInit(): void;
    _updateTabState(): void;
    _updateTabScroll(): void;
    ngAfterViewInit(): void;
}
