import { type Accessor, type Setter, createContext, useContext, } from "solid-js"; import type { Placement } from "../popper/utils"; export interface NavigationMenuDataSet { "data-expanded": string | undefined; "data-closed": string | undefined; } export interface NavigationMenuContextValue { dataset: Accessor; delayDuration: Accessor; skipDelayDuration: Accessor; autoFocusMenu: Accessor; setAutoFocusMenu: Setter; startLeaveTimer: () => void; cancelLeaveTimer: () => void; rootRef: Accessor; setRootRef: Setter; viewportRef: Accessor; setViewportRef: Setter; viewportPresent: Accessor; currentPlacement: Accessor; previousMenu: Accessor; setPreviousMenu: Setter; } export const NavigationMenuContext = createContext(); export function useOptionalNavigationMenuContext() { return useContext(NavigationMenuContext); } export function useNavigationMenuContext() { const context = useOptionalNavigationMenuContext(); if (context === undefined) { throw new Error( "[kobalte]: `useNavigationMenuContext` must be used within a `NavigationMenu` component", ); } return context; }