import type { ElementType, ReactNode } from "react"; import type { ControlSize } from "../../Theme/tokens/primitives/controlSizes"; /** Visual treatment; follows the repo's solid/subtle/outline/ghost/line vocabulary. Defaults to "line". */ export type TabsVariant = "solid" | "subtle" | "outline" | "ghost" | "line"; /** Arrow-key direction and tablist layout axis. */ export type TabsOrientation = "horizontal" | "vertical"; /** "automatic" (default) selects a tab as focus reaches it; "manual" only selects on Enter/Space/click. */ export type TabActivationMode = "automatic" | "manual"; /** Category colour for the selected tab's ink/fill and its count badge. */ export type TabsColorScheme = "primary" | "secondary" | "tertiary" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink"; /** One entry in the declarative `items` API; omit `content` when panels are rendered elsewhere (e.g. a route). With `href` on every item it is a navigation link, not a tab. */ export interface TabItem { /** Unique value of the tab; what `value` and `onChange` use. */ id: string; /** Tab text or node. */ label: ReactNode; /** Decorative — rendered aria-hidden, never a substitute for `label`. */ icon?: ReactNode; /** Renders a soft count badge after the label; omit for no badge. */ count?: number | string; /** Dims the tab and makes it unselectable; also skipped when picking the default selection. */ isDisabled?: boolean; /** Panel body for this tab; if no item in `items` sets one, no panel container is rendered at all. */ content?: ReactNode; /** Makes the item a link. When every item has one, `Tabs` renders a `