import { type ElementType, type HTMLProps } from 'react'; import { type ChildrenProps, type ClickEvents, type SpacingProp, type SpiritPolymorphicElementPropsWithRef, type StyleProps, type TransferProps } from './shared'; export type TabId = string | number; export type TabListProps = ChildrenProps & TransferProps; export interface TabsOnSelectionChange { onSelectionChange?: (previousId: TabId, currentId?: TabId) => void; } export interface TabItemProps extends ChildrenProps, TransferProps, ClickEvents { forTabPane: TabId; } export interface SpiritTabsProps extends SpacingProp { selectedId?: TabId; id?: TabId; forTabPane?: TabId; } export interface TabsProps extends ChildrenProps, SpacingProp, TransferProps, TabsOnSelectionChange { selectedTab: TabId; toggle: TabsToggler; } export type TabLinkItemProps = StyleProps & HTMLProps; export interface TabLinkBaseProps extends ChildrenProps, StyleProps, TransferProps { itemProps?: TabLinkItemProps; } export type TabLinkProps = { elementType?: E; } & TabLinkBaseProps; export type SpiritTabLinkProps = TabLinkProps & SpiritPolymorphicElementPropsWithRef>; export type TabsToggler = (id: TabId) => void; export interface TabsContextType extends SpacingProp, TabsOnSelectionChange { selectedId: TabId; selectTab: TabsToggler; } export interface TabPaneProps extends ChildrenProps, TransferProps { id: TabId; } export type TabContentProps = ChildrenProps & TransferProps; export interface UncontrolledTabsProps extends ChildrenProps, SpacingProp, TransferProps, TabsOnSelectionChange { defaultSelectedTab: TabId; }