import type React from 'react' import { type CSSProperties } from 'react' import { type BezierComponentProps, type ChildrenProps, type DisableProps, type SizeProps, } from '~/src/types/props' export type TabSize = 'l' | 'm' | 's' export interface TabListContextValue { size: TabSize } interface TabsOwnProps { /** * When automatic, tabs are activated when receiving focus. * When manual, tabs are activated when clicked. * @default automatic */ activationMode?: 'automatic' | 'manual' /** * Use when you do not need to control the state of the component. */ defaultValue?: string /** * The controlled value of the tab to activate. */ value?: string /** * Event handler called when value is changed. */ onValueChange?: (value: string) => void } interface TabActionOwnProps { /** * TabAction acts as a link when href is given, otherwise as a button. */ href?: Link /** * Event handler called when tab action is clicked. */ onClick?: Link extends string ? never : React.MouseEventHandler } interface TabItemOwnProps { /** * A unique value that associates the trigger with a content. */ value: string maxWidth?: CSSProperties['maxWidth'] } interface TabContentOwnProps { /** * A unique value that associates the trigger with a content. */ value: string } export interface TabsProps extends Omit, keyof TabsOwnProps>, ChildrenProps, TabsOwnProps {} export interface TabListProps extends BezierComponentProps<'div'>, ChildrenProps, SizeProps {} export interface TabItemsProps extends BezierComponentProps<'div'>, ChildrenProps {} export interface TabItemProps extends Omit, keyof TabItemOwnProps>, ChildrenProps, DisableProps, TabItemOwnProps {} export interface TabActionsProps extends BezierComponentProps<'div'>, ChildrenProps {} export type TabActionElement = [Link] extends [string] ? HTMLAnchorElement : HTMLButtonElement export interface TabActionProps extends Omit>, ChildrenProps, TabActionOwnProps, Omit>, 'onClick'> {} export interface TabContentProps extends BezierComponentProps<'div'>, ChildrenProps, TabContentOwnProps {}