import { ReactNode } from 'react';
export interface UnifiedTabItem {
key: string;
/** §13 — ReactNode, not string (allows links/badges/fragments). */
label: ReactNode;
/** §13 — element, not a component-type (accepts or a lucide element). */
icon?: ReactNode;
/** Static count badge; overridable per-render via UnifiedTabsProps.getCount. */
count?: number;
disabled?: boolean;
/** Only consulted by variant="overflow": "overflow" items collapse into "More ▾". */
group?: "primary" | "overflow";
}
export interface UnifiedTabsProps {
tabs: UnifiedTabItem[];
/** Controlled active key. Aligned with the sibling `Tabs` (activeTab/onTabChange). */
activeTab?: string;
/** Uncontrolled initial key (defaults to the first non-disabled tab). */
defaultTab?: string;
onTabChange?: (key: string) => void;
variant?: "underline" | "segmented" | "overflow";
/** History-API URL sync (router-agnostic). true => { param:"tab", history:"replace" }. */
urlSync?: boolean | {
param?: string;
history?: "replace" | "push";
};
/** nodes for keep-mounted content (optional). */
children?: ReactNode;
/** Dynamic override of item.count. */
getCount?: (key: string) => number | undefined;
className?: string;
}
export interface UnifiedTabPanelProps {
tabKey: string;
/** Optional; falls back to the enclosing UnifiedTabs context. */
activeKey?: string;
mount?: "eager" | "lazy-persist" | "lazy-remount";
children: ReactNode;
className?: string;
}
export declare function UnifiedTabs({ tabs, activeTab: controlledValue, defaultTab, onTabChange, variant, urlSync, children, getCount, className, }: UnifiedTabsProps): import("react").JSX.Element;
export declare function UnifiedTabPanel({ tabKey, activeKey: activeKeyProp, mount, children, className, }: UnifiedTabPanelProps): import("react").JSX.Element | null;
//# sourceMappingURL=UnifiedTabs.d.ts.map