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 {}