import { StackItemHeaderConfig } from '../config';
import type { AbstractContentItem, Stack } from '../items';
import type LayoutManager from '../LayoutManager';
import { EventEmitter } from '../utils';
import HeaderButton from './HeaderButton';
import Tab from './Tab';
/**
 * This class represents a header above a Stack ContentItem.
 *
 * @param layoutManager
 * @param parent
 */
export default class Header extends EventEmitter {
    private static _template;
    private static _previousButtonTemplate;
    private static _nextButtonTemplate;
    layoutManager: LayoutManager;
    element: JQuery<HTMLElement>;
    tabsContainer: JQuery<HTMLElement>;
    tabDropdownContainer: JQuery<HTMLElement>;
    tabDropdownSearch: JQuery<HTMLElement>;
    tabDropdownList: JQuery<HTMLElement> | null;
    controlsContainer: JQuery<HTMLElement>;
    parent: Stack;
    tabs: Tab[];
    activeContentItem: AbstractContentItem | null;
    closeButton: HeaderButton | null;
    tabDropdownButton: HeaderButton | null;
    tabNextButton: JQuery<HTMLElement>;
    tabPreviousButton: JQuery<HTMLElement>;
    holdTimer: number | null;
    rAF: number | null;
    CLICK_TIMEOUT: number;
    START_SPEED: number;
    ACCELERATION: number;
    PADDING: 10;
    SCROLL_LEFT: "left";
    SCROLL_RIGHT: "right";
    isDraggingTab: boolean;
    isOverflowing: boolean;
    isDropdownShown: boolean;
    dropdownKeyIndex: number;
    private _lastVisibleTabIndex;
    private _tabControlOffset?;
    constructor(layoutManager: LayoutManager, parent: Stack);
    /**
     * Creates a new tab and associates it with a contentItem
     *
     * @param contentItem
     * @param index The position of the tab
     */
    createTab(contentItem: AbstractContentItem, index?: number): void;
    /**
     * Finds a tab based on the contentItem its associated with and removes it.
     *
     * @param contentItem
     */
    removeTab(contentItem: AbstractContentItem): void;
    /**
     * The programmatical equivalent of clicking a Tab.
     *
     * @param contentItem
     */
    setActiveContentItem(contentItem: AbstractContentItem): void;
    /**
     * Programmatically operate with header position.
     *
     * @param position one of ('top','left','right','bottom') to set or empty to get it.
     *
     * @returns previous header position
     */
    position(position?: 'top' | 'left' | 'right' | 'bottom'): boolean | "top" | "left" | "right" | "bottom" | undefined;
    _attachWheelListener(): void;
    _detachWheelListener(): void;
    _handleWheelEvent(event: WheelEvent): void;
    _handleScrollEvent(): void;
    _handleItemPickedUp(): void;
    _handleItemDropped(): void;
    _handleNextMouseEnter(): void;
    _handlePreviousMouseEnter(): void;
    _handleNextMouseLeave(): void;
    _handlePreviousMouseLeave(): void;
    _handleNextButtonMouseDown(): void;
    _handlePreviousButtonMouseDown(): void;
    _handleScrollButtonMouseDown(direction: 'right' | 'left'): void;
    _handleScrollButtonMouseUp(): void;
    _checkScrollArrows(): void;
    _handleScrollRepeat(direction: 'left' | 'right', startX: number, deltaX?: number, prevTimestamp?: number): void;
    /**
     * Programmatically set closability.
     * @param isClosable Whether to enable/disable closability.
     * @returns Whether the action was successful
     */
    _$setClosable(isClosable: boolean): boolean;
    /**
     * Destroys the entire header
     */
    _$destroy(): void;
    /**
     * get settings from header
     *
     * @returns when exists
     */
    _getHeaderSetting<N extends 'show' | 'popout' | 'maximise' | 'close' | 'minimise'>(name: N): StackItemHeaderConfig[N];
    /**
     * Creates the popout, maximise and close buttons in the header's top right corner
     */
    _createControls(): void;
    /**
     * Shows drop down for additional tabs when there are too many to display.
     *
     * @returns {void}
     */
    _showAdditionalTabsDropdown(): void;
    _handleFilterKeydown(e: JQuery.TriggeredEvent): void;
    _handleFilterInput(event: JQuery.TriggeredEvent): void;
    /**
     * Hides drop down for additional tabs when needed. It is called via mousedown
     * event on document when list is open, or programmatically when drag starts,
     * or active tab changes etc.
     */
    _hideAdditionalTabsDropdown(event?: JQuery.UIEventBase): void;
    /**
     * Ensures additional tab drop down which is absolutely positioned in the root
     * doesn't overflow the screen, and instead becomes scrollable. Positions the
     * floating menu in the correct location relative to the dropdown button.
     */
    _updateAdditionalTabsDropdown(): void;
    /**
     * Checks whether the header is closable based on the parent config and
     * the global config.
     *
     * @returns Whether the header is closable.
     */
    _isClosable(): boolean;
    _onPopoutClick(): void;
    /**
     * Invoked when the header's background is clicked (not it's tabs or controls)
     *
     * @param event
     */
    _onHeaderClick(event: JQuery.UIEventBase): void;
    /**
     * Pushes the tabs to the tab dropdown if the available space is not sufficient
     */
    _updateTabSizes(): void;
}
//# sourceMappingURL=Header.d.ts.map