import type { AriaAttributes, HTMLAttributes, KeyboardEvent, MouseEvent, ReactElement } from "react";
import type { EditableLabelProps } from "../editable-label";
import type { OverflowSource, orientationType } from "../responsive";
import type { ExitEditModeHandler } from "./useEditableItem";
export interface FocusAPI {
focus: () => void;
}
export interface TabDescriptor extends OverflowSource {
element?: JSX.Element;
}
export type TabsSource = string[] | TabDescriptor[];
export type navigationProps = Pick;
export type composableTabProps = navigationProps & Pick;
export type TabstripVariant = "primary" | "tertiary";
export interface TabstripProps extends HTMLAttributes {
/**
* when true Tabs may be re-arranged by dragging individual Tabs to new position within Tabstrip.
*/
allowDragDrop?: boolean;
/**
* Boolean that indicates if tabs are centered on the container
*/
centered?: boolean;
defaultSource?: TabsSource;
/**
* index value of Selected Tab, used in uncontrolled mode
*/
defaultActiveTabIndex?: number;
editing?: boolean;
/**
* Boolean that enables add new tab
*/
enableAddTab?: boolean;
/**
* @deprecated
* Boolean that enables closing tabs
*/
enableCloseTab?: boolean;
/**
* Boolean that enables renaming a tab
*/
enableRenameTab?: boolean;
keyBoardActivation?: "manual" | "automatic";
onAddTab?: () => void;
onActiveChange?: (tabIndex: number) => void;
onCloseTab?: (tabIndex: number) => void;
onMoveTab?: (fromIndex: number, toIndex: number) => void;
orientation?: orientationType;
onEnterEditMode?: () => void;
onExitEditMode?: ExitEditModeHandler;
/**
* Boolean that indicates whether to enable overflow dropdown or not
*/
overflowMenu?: boolean;
promptForNewTabName?: boolean;
showActivationIndicator?: boolean;
source?: TabsSource;
/**
* index value of Active Tab, used in controlled mode. Set to `null` for no active tab.
*/
activeTabIndex?: number | null;
/**
* Set variant - defaults 'primary'
*/
variant?: TabstripVariant;
}
export type exitEditHandler = (originalValue: string, editedValue: string, allowDeactivation: boolean, tabIndex: number) => void;
export interface responsiveDataAttributes {
"data-index": number;
"data-overflowed"?: boolean;
"data-priority": number;
}
export type TabProps = Omit, "onClick" | "onKeyUp"> & {
ariaControls?: AriaAttributes["aria-controls"];
closeable?: boolean;
draggable?: boolean;
dragging?: boolean;
editable?: boolean;
editing?: EditableLabelProps["editing"];
focused?: boolean;
focusVisible?: boolean;
focusedChildIndex?: number;
selected?: boolean;
index?: number;
label?: EditableLabelProps["defaultValue"];
onClick?: (e: MouseEvent, index: number) => void;
onClose?: (index: number) => void;
onEnterEditMode?: () => void;
onExitEditMode?: exitEditHandler;
onKeyUp?: (e: KeyboardEvent, index: number) => void;
orientation?: "horizontal" | "vertical";
tabChildIndex?: number;
};
export type TabElement = ReactElement;