/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { AfterContentChecked, AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, QueryList } from '@angular/core'; import { OuiTab } from './tab'; import { OuiTabHeader } from './tab-header'; import { BooleanInput, NumberInput } from '@angular/cdk/coercion'; import { CanColor, CanDisableRipple, ThemePalette } from '../core'; import { OuiTabsConfig } from './tab-config'; import { FocusOrigin } from '@angular/cdk/a11y'; import * as i0 from "@angular/core"; /** @docs-private */ declare const _OuiTabGroupMixinBase: import("../core").CanColorCtor & import("../core").Constructor & import("../core").AbstractConstructor & { new (_elementRef: ElementRef): { _elementRef: ElementRef; }; }; /** @docs-private */ export interface OuiTabGroupBaseHeader { _alignInkBarToSelectedTab(): void; updatePagination(): void; focusIndex: number; } /** Possible positions for the tab header. */ export type OuiTabHeaderPosition = 'above' | 'below'; /** * Material design tab-group component. Supports basic tab pairs (label + content) and includes * animated ink-bar, keyboard navigation, and screen reader. * See: https://material.io/design/components/tabs.html */ export declare class ouiTabGroup extends _OuiTabGroupMixinBase implements AfterContentInit, AfterContentChecked, OnDestroy, CanColor, CanDisableRipple { private _changeDetectorRef; _animationMode?: string; /** * All tabs inside the tab group. This includes tabs that belong to groups that are nested * inside the current one. We filter out only the tabs that belong to this group in `_tabs`. */ _allTabs: QueryList; _tabBodyWrapper: ElementRef; _tabHeader: OuiTabHeader; /** All of the tabs that belong to the group. */ _tabs: QueryList; /** The tab index that should be selected after the content has been checked. */ private _indexToSelect; /** Index of the tab that was focused last. */ private _lastFocusedTabIndex; /** Snapshot of the height of the tab body wrapper before another tab is activated. */ private _tabBodyWrapperHeight; /** Subscription to tabs being added/removed. */ private _tabsSubscription; /** Subscription to changes in the tab labels. */ private _tabLabelSubscription; /** Whether the ink bar should fit its width to the size of the tab label content. */ get fitInkBarToContent(): boolean; set fitInkBarToContent(v: BooleanInput); private _fitInkBarToContent; /** Whether tabs should be stretched to fill the header. */ get stretchTabs(): boolean; set stretchTabs(v: BooleanInput); private _stretchTabs; /** Whether the tab group should grow to the size of the active tab. */ get dynamicHeight(): boolean; set dynamicHeight(value: BooleanInput); private _dynamicHeight; /** The index of the active tab. */ get selectedIndex(): number | null; set selectedIndex(value: NumberInput); private _selectedIndex; /** Position of the tab header. */ headerPosition: OuiTabHeaderPosition; /** Duration for the tab animation. Will be normalized to milliseconds if no units are set. */ get animationDuration(): string; set animationDuration(value: NumberInput); private _animationDuration; /** * `tabindex` to be set on the inner element that wraps the tab content. Can be used for improved * accessibility when the tab does not have focusable elements or if it has scrollable content. * The `tabindex` will be removed automatically for inactive tabs. * Read more at https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-2/tabs.html */ get contentTabIndex(): number | null; set contentTabIndex(value: NumberInput); private _contentTabIndex; /** * Whether pagination should be disabled. This can be used to avoid unnecessary * layout recalculations if it's known that pagination won't be required. */ get disablePagination(): boolean; set disablePagination(value: BooleanInput); private _disablePagination; /** * By default tabs remove their content from the DOM while it's off-screen. * Setting this to `true` will keep it in the DOM which will prevent elements * like iframes and videos from reloading next time it comes back into the view. */ get preserveContent(): boolean; set preserveContent(value: BooleanInput); private _preserveContent; /** Background color of the tab group. */ get backgroundColor(): ThemePalette; set backgroundColor(value: ThemePalette); private _backgroundColor; /** Output to enable support for two-way binding on `[(selectedIndex)]` */ readonly selectedIndexChange: EventEmitter; /** Event emitted when focus has changed within a tab group. */ readonly focusChange: EventEmitter; /** Event emitted when the body animation has completed */ readonly animationDone: EventEmitter; /** Event emitted when the tab selection has changed. */ readonly selectedTabChange: EventEmitter; private _groupId; getHTMLText: any; updatedTabHTML: any; constructor(elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, defaultConfig?: OuiTabsConfig, _animationMode?: string); /** * After the content is checked, this component knows what tabs have been defined * and what the selected index should be. This is where we can know exactly what position * each tab should be in according to the new selected index, and additionally we know how * a new selected tab should transition in (from the left or right). */ ngAfterContentChecked(): void; ngAfterContentInit(): void; /** Listens to changes in all of the tabs. */ private _subscribeToAllTabChanges; ngOnDestroy(): void; /** Re-aligns the ink bar to the selected tab element. */ realignInkBar(): void; /** * Recalculates the tab group's pagination dimensions. * * WARNING: Calling this method can be very costly in terms of performance. It should be called * as infrequently as possible from outside of the Tabs component as it causes a reflow of the * page. */ updatePagination(): void; /** * Sets focus to a particular tab. * @param index Index of the tab to be focused. */ focusTab(index: number): void; _focusChanged(index: number): void; private _createChangeEvent; _handleEnter(): void; /** * Subscribes to changes in the tab labels. This is needed, because the @Input for the label is * on the OuiTab component, whereas the data binding is inside the ouiTabGroup. In order for the * binding to be updated, we need to subscribe to changes in it and trigger change detection * manually. */ private _subscribeToTabLabels; /** Clamps the given index to the bounds of 0 and the tabs length. */ private _clampTabIndex; /** Returns a unique id for each tab label element */ _getTabLabelId(i: number): string; /** Returns a unique id for each tab content element */ _getTabContentId(i: number): string; /** * Sets the height of the body wrapper to the height of the activating tab if dynamic * height property is true. */ _setTabBodyWrapperHeight(tabHeight: number): void; /** Removes the height of the tab body wrapper. */ _removeTabBodyWrapperHeight(): void; /** Handle click events, setting new selected index if appropriate. */ _handleClick(tab: OuiTab, tabHeader: OuiTabGroupBaseHeader, index: number): void; /** Retrieves the tabindex for the tab. */ _getTabIndex(index: number): number; /** Callback for when the focused state of a tab has changed. */ _tabFocusChanged(focusOrigin: FocusOrigin, index: number): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** A simple change event emitted on focus or selection changes. */ export declare class OuiTabChangeEvent { /** Index of the currently-selected tab. */ index: number; /** Reference to the currently-selected tab. */ tab: OuiTab; event: Event; } export {}; //# sourceMappingURL=tab-group.d.ts.map