import * as _angular_core from '@angular/core';
import { TemplateRef, ElementRef } from '@angular/core';
import { BaseComponent } from 'primeng/basecomponent';
import * as i1 from 'primeng/bind';
import { Bind } from 'primeng/bind';
import { TabsPassThrough, TabsScrollStrategy, TabPanelsPassThrough, TabPanelPassThrough, TabListPassThrough, TabPassThrough } from 'primeng/types/tabs';
import { BaseStyle } from 'primeng/base';
import * as i1$1 from 'primeng/ripple';

/**
 *
 * Tabs facilitates seamless switching between different views.
 *
 * [Live Demo](https://www.primeng.org/tabs/)
 *
 * @module tabsstyle
 *
 */
declare enum TabsClasses {
    /**
     * Class name of the root element
     */
    root = "p-tabs",
    /**
     * Class name of the wrapper element
     */
    list = "p-tablist",
    /**
     * Class name of the content element
     */
    content = "p-tablist-content",
    /**
     * Class name of the tab list element
     */
    tablist = "p-tablist-tab-list",
    /**
     * Class name of the tab list element
     */
    tab = "p-tab",
    /**
     * Class name of the inkbar element
     */
    inkbar = "p-tablist-active-bar",
    /**
     * Class name of the navigation buttons
     */
    button = "p-tablist-nav-button",
    /**
     * Class name of the tab panels wrapper
     */
    tabpanels = "p-tabpanels",
    /**
     * Class name of the tab panel element
     */
    tabpanel = "p-tabs-panel"
}
declare class TabsStyle extends BaseStyle {
    name: string;
    style: string;
    classes: {
        root: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<TabsStyle>;
}
interface TabsStyle extends BaseStyle {
}

/**
 * Tabs facilitates seamless switching between different views.
 * @group Components
 */
declare class Tabs extends BaseComponent<TabsPassThrough> {
    componentName: string;
    $pcTabs: Tabs | undefined;
    bindDirectiveInstance: Bind;
    onAfterViewChecked(): void;
    /**
     * Value of the active tab.
     * @defaultValue undefined
     * @group Props
     */
    value: _angular_core.ModelSignal<string | number | undefined>;
    /**
     * Scrolling is enabled by default. This property is no longer needed.
     * @defaultValue false
     * @group Props
     * @deprecated Scrolling is now the default behavior. This property will be removed in a future version.
     */
    scrollable: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * When enabled, tabs are not rendered until activation.
     * @type boolean
     * @defaultValue false
     * @group Props
     */
    lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * When enabled, the focused tab is activated.
     * @type boolean
     * @defaultValue false
     * @group Props
     */
    selectOnFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Whether to display navigation buttons in container when scrollable is enabled.
     * @type boolean
     * @defaultValue true
     * @group Props
     */
    showNavigators: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Tabindex of the tab buttons.
     * @type number
     * @defaultValue 0
     * @group Props
     */
    tabindex: _angular_core.InputSignalWithTransform<number, unknown>;
    /**
     * Defines the scrolling behavior when the active tab changes. Use 'nearest' to scroll only if the tab is not fully visible, 'center' to always center the active tab, or false to disable auto-scrolling.
     * @defaultValue 'nearest'
     * @group Props
     */
    scrollStrategy: _angular_core.InputSignal<TabsScrollStrategy>;
    id: _angular_core.WritableSignal<string>;
    _componentStyle: TabsStyle;
    updateValue(newValue: string | number | undefined): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tabs, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "p-tabs", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "scrollable": { "alias": "scrollable"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "selectOnFocus": { "alias": "selectOnFocus"; "required": false; "isSignal": true; }; "showNavigators": { "alias": "showNavigators"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}

declare class TabPanelsStyle extends BaseStyle {
    name: string;
    classes: {
        root: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanelsStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<TabPanelsStyle>;
}
interface TabPanelsStyle extends BaseStyle {
}

/**
 * TabPanels is a helper component for Tabs component.
 * @group Components
 */
declare class TabPanels extends BaseComponent<TabPanelsPassThrough> {
    componentName: string;
    $pcTabPanels: TabPanels | undefined;
    bindDirectiveInstance: Bind;
    _componentStyle: TabPanelsStyle;
    onAfterViewChecked(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanels, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabPanels, "p-tabpanels", never, {}, {}, never, ["*"], true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}

declare class TabPanelStyle extends BaseStyle {
    name: string;
    classes: {
        root: ({ instance }: {
            instance: any;
        }) => (string | {
            'p-tabpanel-active': any;
        })[];
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanelStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<TabPanelStyle>;
}
interface TabPanelStyle extends BaseStyle {
}

/**
 * TabPanel is a helper component for Tabs component.
 * @group Components
 */
declare class TabPanel extends BaseComponent<TabPanelPassThrough> {
    componentName: string;
    $pcTabPanel: TabPanel | undefined;
    bindDirectiveInstance: Bind;
    pcTabs: Tabs;
    onAfterViewChecked(): void;
    /**
     * When enabled, tab is not rendered until activation.
     * @type boolean
     * @defaultValue false
     * @group Props
     */
    lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /**
     * Value of the active tab.
     * @defaultValue undefined
     * @group Props
     */
    value: _angular_core.ModelSignal<string | number | undefined>;
    /**
     * Template for initializing complex content when lazy is enabled.
     * @group Templates
     */
    content: _angular_core.Signal<unknown>;
    id: _angular_core.Signal<string>;
    ariaLabelledby: _angular_core.Signal<string>;
    active: _angular_core.Signal<boolean>;
    isLazyEnabled: _angular_core.Signal<boolean>;
    private hasBeenRendered;
    shouldRender: _angular_core.Signal<boolean>;
    _componentStyle: TabPanelStyle;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabPanel, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabPanel, "p-tabpanel", never, { "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, ["content"], ["*"], true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}

declare class TabListStyle extends BaseStyle {
    name: string;
    classes: {
        root: string;
        content: string;
        activeBar: string;
        prevButton: string;
        nextButton: string;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabListStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<TabListStyle>;
}
interface TabListStyle extends BaseStyle {
}

/**
 * TabList is a helper component for Tabs component.
 * @group Components
 */
declare class TabList extends BaseComponent<TabListPassThrough> {
    componentName: string;
    $pcTabList: TabList | undefined;
    bindDirectiveInstance: Bind;
    onAfterViewChecked(): void;
    /**
     * A template reference variable that represents the previous icon in a UI component.
     * @type {TemplateRef<any> | undefined}
     * @group Templates
     */
    prevIconTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
    /**
     * A template reference variable that represents the next icon in a UI component.
     * @type {TemplateRef<any> | undefined}
     * @group Templates
     */
    nextIconTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
    content: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
    prevButton: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
    nextButton: _angular_core.Signal<ElementRef<HTMLButtonElement> | undefined>;
    inkbar: _angular_core.Signal<ElementRef<HTMLSpanElement> | undefined>;
    pcTabs: any;
    isPrevButtonEnabled: _angular_core.WritableSignal<boolean>;
    isNextButtonEnabled: _angular_core.WritableSignal<boolean>;
    resizeObserver: ResizeObserver;
    showNavigators: _angular_core.Signal<any>;
    tabindex: _angular_core.Signal<any>;
    scrollable: _angular_core.Signal<any>;
    _componentStyle: TabListStyle;
    constructor();
    get prevButtonAriaLabel(): string | undefined;
    get nextButtonAriaLabel(): string | undefined;
    onAfterViewInit(): void;
    onDestroy(): void;
    onScroll(event: Event): void;
    onPrevButtonClick(): void;
    onNextButtonClick(): void;
    updateButtonState(): void;
    updateInkBar(): void;
    scrollToActiveTab(): void;
    getVisibleButtonWidths(): number;
    bindResizeObserver(): void;
    unbindResizeObserver(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabList, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabList, "p-tablist", never, {}, {}, ["prevIconTemplate", "nextIconTemplate"], ["*"], true, [{ directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}

declare class TabStyle extends BaseStyle {
    name: string;
    classes: {
        root: ({ instance }: {
            instance: any;
        }) => (string | {
            'p-tab-active': any;
            'p-disabled': any;
        })[];
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabStyle, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<TabStyle>;
}
interface TabStyle extends BaseStyle {
}

/**
 * Defines valid properties in Tab component.
 * @group Components
 */
declare class Tab extends BaseComponent<TabPassThrough> {
    componentName: string;
    $pcTab: Tab | undefined;
    bindDirectiveInstance: Bind;
    onAfterViewChecked(): void;
    /**
     * Value of tab.
     * @defaultValue undefined
     * @group Props
     */
    value: _angular_core.ModelSignal<string | number | undefined>;
    /**
     * Whether the tab is disabled.
     * @defaultValue false
     * @group Props
     */
    disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
    pcTabs: any;
    pcTabList: any;
    el: ElementRef<any>;
    _componentStyle: TabStyle;
    ripple: _angular_core.Signal<boolean>;
    id: _angular_core.Signal<string>;
    ariaControls: _angular_core.Signal<string>;
    active: _angular_core.Signal<boolean>;
    tabindex: _angular_core.Signal<any>;
    mutationObserver: MutationObserver | undefined;
    onFocus(event: FocusEvent): void;
    onClick(event: MouseEvent): void;
    onKeyDown(event: KeyboardEvent): void;
    onAfterViewInit(): void;
    onArrowRightKey(event: KeyboardEvent): void;
    onArrowLeftKey(event: KeyboardEvent): void;
    onHomeKey(event: KeyboardEvent): void;
    onEndKey(event: KeyboardEvent): void;
    onPageDownKey(event: KeyboardEvent): void;
    onPageUpKey(event: KeyboardEvent): void;
    onEnterKey(event: KeyboardEvent): void;
    findNextTab(tabElement: Element | null, selfCheck?: boolean): Element | null;
    findPrevTab(tabElement: Element | null, selfCheck?: boolean): Element | null;
    findFirstTab(): Element | null;
    findLastTab(): Element | null;
    changeActiveValue(): void;
    changeFocusedTab(element: Element | null): void;
    scrollInView(element: Element | null): void;
    bindMutationObserver(): void;
    unbindMutationObserver(): void;
    onDestroy(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tab, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tab, "p-tab", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, [{ directive: typeof i1$1.Ripple; inputs: {}; outputs: {}; }, { directive: typeof i1.Bind; inputs: {}; outputs: {}; }]>;
}

declare class TabsModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<TabsModule, never, [typeof Tabs, typeof TabPanels, typeof TabPanel, typeof TabList, typeof Tab, typeof i1.BindModule], [typeof Tabs, typeof TabPanels, typeof TabPanel, typeof TabList, typeof Tab, typeof i1.BindModule]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<TabsModule>;
}

export { Tab, TabList, TabPanel, TabPanels, Tabs, TabsClasses, TabsModule, TabsStyle };
