import React, { Children, isValidElement } from 'react'; import { Tabs as Ark } from '@ark-ui/react/tabs'; export interface TabProps extends Omit< React.HTMLAttributes, 'title' > { eventKey: string; title: React.ReactNode; children?: React.ReactNode; } export function Tab(_props: TabProps): null { // Rendered indirectly by . Config shell only. return null; } Tab.displayName = 'Tab'; export interface TabsProps extends Omit< React.HTMLAttributes, 'onChange' | 'onSelect' | 'defaultValue' > { activeKey?: string; defaultActiveKey?: string; onSelect?: (key: string) => void; children?: React.ReactNode; } export function Tabs({ activeKey, defaultActiveKey, onSelect, className = '', children, ...rest }: TabsProps): React.ReactElement { const tabs = Children.toArray(children).filter( (c): c is React.ReactElement => isValidElement(c) && (c.type as React.ComponentType) === Tab ); const fallback = tabs[0]?.props.eventKey ?? ''; const rootClass = ['tabs', className].filter(Boolean).join(' '); return ( onSelect?.(details.value)} {...rest} > {tabs.map(t => ( {t.props.title} ))} {tabs.map(t => ( {t.props.children} ))} ); } Tabs.displayName = 'Tabs';