import { clsx } from "clsx"; import { Tabs as TabsPrimitive } from "radix-ui"; import * as React from "react"; import { useEvent, useGetKey, useGetSet } from "../../hooks"; const TabsContext = React.createContext<{ "data-variant": string; "data-size": string; }>({ "data-variant": "enclosed", "data-size": "md", }); export const Tabs = ({ className, defaultValue, variant = "enclosed", size = "md", ...props }: TabsPrimitive.TabsProps & { variant?: "enclosed" | "line" | "subtle" | "outline"; size?: "sm" | "md" | "lg"; }) => { const key = useGetKey(props as any); const initialValue = React.useMemo( () => ({ value: defaultValue as string | undefined }), [defaultValue], ); const [{ value }, setState] = useGetSet<{ value: string | undefined; }>(key, initialValue); const open = React.useCallback( (value: string) => { setState({ value }, process.env.PREVIEW ? `onPreviewToggle` : undefined); }, [setState], ); const id = props["data-id"]; useEvent(id, "open", open); const ctx = React.useMemo( () => ({ "data-variant": variant, "data-size": size }), [variant, size], ); return ( { setState( { value }, process.env.PREVIEW ? `onValueChange` : undefined, ); }} /> ); }; Tabs.TabsList = ({ className, ...props }: TabsPrimitive.TabsListProps) => { const themeProps = React.use(TabsContext); return ( ); }; Tabs.TabsTrigger = ({ className, ...props }: TabsPrimitive.TabsTriggerProps) => { const themeProps = React.use(TabsContext); return ( ); }; Tabs.TabsContent = ({ className, preview, ...props }: TabsPrimitive.TabsContentProps & { preview?: true }) => { const themeProps = React.use(TabsContext); return ( ); };