import { createContext, Suspense, useCallback, useContext, useMemo, useState, type Dispatch, type PropsWithChildren, type MutableRefObject, type SetStateAction, } from 'react' import { TabsWrapper } from '../index.ts' export interface TabsContextValue { activeTab: string onTabClick: (tabId: string) => void tabsRefList: TabsRefList setTabsRefList: Dispatch> } export const TabsContext = createContext(null) // export interface TabsProviderProps { defaultActiveTab?: string } export type TabsRefList = Record< string, MutableRefObject | HTMLButtonElement | null > export function TabsProvider(props: PropsWithChildren) { const [activeTab, setActiveTab] = useState(props.defaultActiveTab || '') const [tabsRefList, setTabsRefList] = useState({}) const onTabClick = useCallback((tabId: string) => { setActiveTab(tabId) }, []) const value = useMemo( () => ({ activeTab, onTabClick, tabsRefList, setTabsRefList }), [activeTab, onTabClick, tabsRefList], ) return ( {props.children} ) } // useTabs() export function useTabs() { const context = useContext(TabsContext) if (!context) { throw new Error('useTabs must be used within a TabsProvider') } return context }