import "./tabs.css"; import type * as React from "react"; import { type ReactNode } from "react"; import { type TabsRootProps } from "@base-ui/react/tabs"; import type { ColorName } from "./color_tokens"; import { type PartAccessor, type StyleProps } from "./style_props"; type TabItemPart = "tab" | "surface" | "line" | "status" | "label" | "count" | "caption"; /** `free`: destinations in any order, wrapping. `sequence`: a lifecycle — chevrons between stages, a rule * before outcomes, one scrolling line, since a wrapped flow reads as two pipelines. */ export type TabsOrder = "free" | "sequence"; export interface TabOption { label: string; value: T; testID?: string; /** Set only when the tab's area needs attention; omit at rest. */ status?: ColorName; /** Rows in the tab's band, after the label — a prop, never formatted into `label` as a second copy; * yours, since a paged or filtered band counts what matched. */ count?: number; /** One preformatted figure under the label; once any tab has one, all reserve the line. */ caption?: string; /** A mark before the label, on its line — a section's step or glyph where the tabs are a record's sections * (`RecordFrame`). Decorative: the label names the tab. */ lead?: ReactNode; } /** Whether the reader walks to this stage or leaves at it: outcomes come last, past a rule, with no * chevrons. `all` opens the strip, fenced off by the same rule. Only a sequence's options carry `place`. */ export interface TabStage extends TabOption { place?: "flow" | "outcome" | "all"; } interface TabsBase extends StyleProps { accessibilityLabel: string; selectedTab: T; onSelectTab?: (value: T) => void; testID?: string; ref?: React.Ref; render?: TabsRootProps["render"]; } export type TabsProps = (TabsBase & { order?: "free"; options: TabOption[]; }) | (TabsBase & { order: "sequence"; options: TabStage[]; }); /** A WAI-ARIA tablist over Base UI's Tabs (roving tabindex, arrow/Home/End). `order="sequence"` is a * run of stages: in array order, never re-ranked. Renders the bar only — the panel is the * caller's, hence no `aria-controls`; a control changing a view parameter is a `ChoiceStrip`. */ export declare function Tabs({ accessibilityLabel, options, selectedTab, onSelectTab, order, testID, render, ref, ...props }: TabsProps): React.JSX.Element; /** The anatomy both orders share, taking the strip's part accessor so every strip renders * `lotics-tabs__tab`. */ export declare function TabItem(props: { option: TabOption; part: PartAccessor; captionSlot: boolean; tabRef?: React.Ref; }): React.JSX.Element; export {};