import { type Accessor, createContext, useContext } from "solid-js"; import type { PopoverIntlTranslations } from "./popover.intl"; export interface PopoverDataSet { "data-expanded": string | undefined; "data-closed": string | undefined; } export interface PopoverContextValue { translations: Accessor; dataset: Accessor; isOpen: Accessor; isModal: Accessor; preventScroll: Accessor; contentPresent: Accessor; triggerRef: Accessor; contentId: Accessor; titleId: Accessor; descriptionId: Accessor; setDefaultAnchorRef: (el: HTMLElement) => void; setTriggerRef: (el: HTMLElement) => void; setContentRef: (el: HTMLElement) => void; close: () => void; toggle: () => void; generateId: (part: string) => string; registerContentId: (id: string) => () => void; registerTitleId: (id: string) => () => void; registerDescriptionId: (id: string) => () => void; } export const PopoverContext = createContext(); export function usePopoverContext() { const context = useContext(PopoverContext); if (context === undefined) { throw new Error( "[kobalte]: `usePopoverContext` must be used within a `Popover` component", ); } return context; }