import { type Accessor, type JSX, type Setter, createContext, useContext, } from "solid-js"; import type { ListState } from "../list"; import type { CollectionNode } from "../primitives"; import type { FocusStrategy, KeyboardDelegate } from "../selection"; export interface SelectDataSet { "data-expanded": string | undefined; "data-closed": string | undefined; } export interface SelectContextValue { dataset: Accessor; isOpen: Accessor; isDisabled: Accessor; isMultiple: Accessor; isVirtualized: Accessor; isModal: Accessor; preventScroll: Accessor; disallowTypeAhead: Accessor; shouldFocusWrap: Accessor; selectedOptions: Accessor; contentPresent: Accessor; autoFocus: Accessor; triggerRef: Accessor; triggerId: Accessor; valueId: Accessor; listboxId: Accessor; listboxAriaLabelledBy: Accessor; listState: Accessor; keyboardDelegate: Accessor; setListboxAriaLabelledBy: Setter; setTriggerRef: (el: HTMLElement) => void; setContentRef: (el: HTMLElement) => void; setListboxRef: (el: HTMLElement) => void; open: (focusStrategy: FocusStrategy | boolean) => void; close: () => void; toggle: (focusStrategy: FocusStrategy | boolean) => void; placeholder: Accessor; renderItem: (item: CollectionNode) => JSX.Element; renderSection: (section: CollectionNode) => JSX.Element; removeOptionFromSelection: (option: any) => void; generateId: (part: string) => string; registerTriggerId: (id: string) => () => void; registerValueId: (id: string) => () => void; registerListboxId: (id: string) => () => void; } export const SelectContext = createContext(); export function useSelectContext() { const context = useContext(SelectContext); if (context === undefined) { throw new Error( "[kobalte]: `useSelectContext` must be used within a `Select` component", ); } return context; }