@kenos-ui/react-select 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/index.cjs +1162 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +320 -0
- package/dist/index.d.ts +320 -0
- package/dist/index.js +1158 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.parts.ts","../src/store.ts","../src/context.ts","../src/utils/extract-items.ts","../src/utils/scroll-to-index.ts","../src/root/SelectRoot.tsx","../src/label/SelectLabel.tsx","../src/trigger/SelectTrigger.tsx","../src/utils/labels.ts","../src/value/SelectValue.tsx","../src/icon/SelectIcon.tsx","../src/positioner/PositionerContext.ts","../src/portal/SelectPortal.tsx","../src/utils/align-with-trigger.ts","../src/utils/use-align-item-with-trigger.ts","../src/content/SelectContent.tsx","../src/positioner/SelectPositioner.tsx","../src/backdrop/SelectBackdrop.tsx","../src/clear-trigger/SelectClearTrigger.tsx","../src/list/SelectList.tsx","../src/item/SelectItem.tsx","../src/item-text/SelectItemText.tsx","../src/item-indicator/SelectItemIndicator.tsx","../src/group/GroupContext.ts","../src/group/SelectGroup.tsx","../src/group-label/SelectGroupLabel.tsx","../src/hidden-select/SelectHiddenSelect.tsx","../src/utils/use-list-scroll-overflow.ts","../src/scroll-button/SelectScrollButton.tsx","../src/scroll-up-button/SelectScrollUpButton.tsx","../src/scroll-down-button/SelectScrollDownButton.tsx"],"names":["useSyncExternalStore","useCallback","createContext","useContext","Children","isValidElement","useId","useMemo","useRef","useEffect","restoreFocus","jsx","createPortal","useState","useLayoutEffect","useFloating","usePresence","useClickOutside","useEscapeKey","useFocusTrap","useListNavigation","useTypeahead","jsxs"],"mappings":"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","file":"index.cjs","sourcesContent":["// Parts barrel — exported as the `Select` namespace.\n// packages/select/src/index.parts.ts\n\nexport { Root } from \"./root/SelectRoot\";\nexport { Label } from \"./label/SelectLabel\";\nexport { Trigger } from \"./trigger/SelectTrigger\";\nexport { Value } from \"./value/SelectValue\";\nexport { Icon } from \"./icon/SelectIcon\";\nexport { Content } from \"./content/SelectContent\";\nexport { Portal } from \"./portal/SelectPortal\";\nexport { Positioner } from \"./positioner/SelectPositioner\";\nexport { Backdrop } from \"./backdrop/SelectBackdrop\";\nexport { ClearTrigger } from \"./clear-trigger/SelectClearTrigger\";\nexport { List } from \"./list/SelectList\";\nexport { Item } from \"./item/SelectItem\";\nexport { ItemText } from \"./item-text/SelectItemText\";\nexport { ItemIndicator } from \"./item-indicator/SelectItemIndicator\";\nexport { Group } from \"./group/SelectGroup\";\nexport { GroupLabel } from \"./group-label/SelectGroupLabel\";\nexport { HiddenSelect } from \"./hidden-select/SelectHiddenSelect\";\nexport { ScrollUpButton } from \"./scroll-up-button/SelectScrollUpButton\";\nexport { ScrollDownButton } from \"./scroll-down-button/SelectScrollDownButton\";\n","import { useSyncExternalStore, useCallback, useRef } from \"react\";\nimport type { SelectItemEqualFn, SelectStoreState, SelectItemRecord } from \"./types\";\n\n// ── SelectStore ────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nfunction arraysEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nexport class SelectStore {\n private state: SelectStoreState;\n private listeners = new Set<Listener>();\n\n constructor(initial: Partial<SelectStoreState> = {}) {\n this.state = {\n open: false,\n openSource: null,\n value: null,\n highlightedValue: null,\n items: new Map(),\n ...initial,\n };\n }\n\n getState(): SelectStoreState {\n return this.state;\n }\n\n subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify(): void {\n for (const listener of this.listeners) {\n listener();\n }\n }\n\n // ── Mutations ────────────────────────────────────────────────────────────\n\n setOpen(open: boolean, source: \"trigger\" | null = null): void {\n if (this.state.open === open) return;\n this.state = {\n ...this.state,\n open,\n openSource: open ? source : null,\n // Reset highlight when closing\n highlightedValue: open ? this.state.highlightedValue : null,\n };\n this.notify();\n }\n\n setValue(value: string | null): void {\n if (this.state.value === value) return;\n this.state = { ...this.state, value };\n this.notify();\n }\n\n setValues(values: string[]): void {\n const current = this.state.value;\n if (Array.isArray(current) && arraysEqual(current, values)) return;\n this.state = { ...this.state, value: values };\n this.notify();\n }\n\n toggleValue(value: string, comparator: SelectItemEqualFn): void {\n const current = this.state.value;\n const next = Array.isArray(current) ? [...current] : [];\n const index = next.findIndex((item) => comparator(item, value));\n\n if (index >= 0) {\n next.splice(index, 1);\n } else {\n next.push(value);\n }\n\n if (Array.isArray(current) && arraysEqual(current, next)) return;\n\n this.state = { ...this.state, value: next };\n this.notify();\n }\n\n clearValue(multiple: boolean): void {\n const next = multiple ? [] : null;\n const current = this.state.value;\n\n if (multiple) {\n if (Array.isArray(current) && current.length === 0) return;\n } else if (current === null) {\n return;\n }\n\n this.state = { ...this.state, value: next };\n this.notify();\n }\n\n isSelected(value: string, multiple: boolean, comparator: SelectItemEqualFn): boolean {\n const current = this.state.value;\n\n if (multiple) {\n return Array.isArray(current) && current.some((item) => comparator(item, value));\n }\n\n return typeof current === \"string\" && comparator(current, value);\n }\n\n setHighlightedValue(value: string | null): void {\n if (this.state.highlightedValue === value) return;\n this.state = { ...this.state, highlightedValue: value };\n this.notify();\n }\n\n registerItem(record: SelectItemRecord): void {\n const next = new Map(this.state.items);\n next.set(record.value, record);\n this.state = { ...this.state, items: next };\n this.notify();\n }\n\n unregisterItem(value: string): void {\n if (!this.state.items.has(value)) return;\n const next = new Map(this.state.items);\n next.delete(value);\n this.state = { ...this.state, items: next };\n this.notify();\n }\n\n updateItemRef(value: string, ref: HTMLElement | null): void {\n const item = this.state.items.get(value);\n if (!item || item.ref === ref) return;\n const next = new Map(this.state.items);\n next.set(value, { ...item, ref });\n this.state = { ...this.state, items: next };\n // Don't notify for ref updates — avoids render cascades\n }\n}\n\n// ── useSelectStore ─────────────────────────────────────────────────────────\n\n/**\n * Subscribe to a slice of the SelectStore.\n * Re-renders only when the selected slice changes (by reference).\n */\nexport function useSelectStore<T>(store: SelectStore, selector: (s: SelectStoreState) => T): T {\n return useSyncExternalStore(\n useCallback((cb) => store.subscribe(cb), [store]),\n () => selector(store.getState()),\n () => selector(store.getState()),\n );\n}\n\n// ── useSelectStoreRef ──────────────────────────────────────────────────────\n\n/**\n * Return a stable ref to the store's current state getter.\n * Useful for event handlers that need a snapshot without subscribing.\n */\nexport function useSelectStateRef(store: SelectStore): React.RefObject<SelectStoreState> {\n const ref = useRef(store.getState());\n // Keep in sync each render (no subscription overhead).\n ref.current = store.getState();\n return ref;\n}","import { createContext, useContext, type RefObject } from \"react\";\nimport type { SelectStore } from \"./store\";\nimport type { SelectItemEqualFn, ScrollToIndexOptions } from \"./types\";\n\nexport interface SelectRefs {\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n listRef: RefObject<HTMLUListElement | null>;\n}\n\nexport interface SelectContextValue {\n store: SelectStore;\n ids: {\n root: string;\n label: string;\n trigger: string;\n content: string;\n };\n refs: SelectRefs;\n config: {\n disabled: boolean;\n required: boolean;\n readOnly: boolean;\n modal: boolean;\n name: string | undefined;\n multiple: boolean;\n items: Record<string, string>;\n isItemEqualToValue: SelectItemEqualFn;\n openOnFocus: boolean;\n };\n isControlledOpen: boolean;\n isControlledValue: boolean;\n onOpenChangeComplete: ((open: boolean) => void) | undefined;\n /** Close the listbox and restore focus to the trigger. */\n close: () => void;\n /** Select a value (toggle in multiple mode, set + close in single mode). */\n selectValue: (value: string) => void;\n /** Alias for selectValue — kept for backward compatibility. */\n selectAndClose: (value: string) => void;\n /** Clear the current selection. */\n clearValue: () => void;\n /** Scroll the list to the item at the given index. */\n scrollToIndex: (index: number, options?: ScrollToIndexOptions) => void;\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null);\n\nexport function useSelectContext(): SelectContextValue {\n const ctx = useContext(SelectContext);\n if (!ctx) {\n throw new Error(\"Select compound components must be rendered inside <Select.Root>.\");\n }\n return ctx;\n}","import { Children, isValidElement, type ReactNode } from \"react\";\n\nfunction extractItemTextLabel(children: ReactNode): string | null {\n let label: string | null = null;\n\n Children.forEach(children, (child) => {\n if (label != null || !isValidElement(child)) return;\n\n const type = child.type as { displayName?: string; name?: string };\n const isItemText =\n type?.displayName === \"Select.ItemText\" || type?.name === \"ItemText\";\n\n if (isItemText) {\n const content = child.props.children;\n if (typeof content === \"string\" || typeof content === \"number\") {\n label = String(content);\n }\n return;\n }\n\n if (child.props?.children != null) {\n label = extractItemTextLabel(child.props.children);\n }\n });\n\n return label;\n}\n\nfunction isSelectItemElement(child: React.ReactElement): boolean {\n const type = child.type as { displayName?: string; name?: string };\n return type?.displayName === \"Select.Item\" || type?.name === \"Item\";\n}\n\n/** Walk the Root children tree and collect value→label pairs from Item/ItemText. */\nexport function extractItemsFromChildren(children: ReactNode): Record<string, string> {\n const items: Record<string, string> = {};\n\n const walk = (node: ReactNode): void => {\n Children.forEach(node, (child) => {\n if (!isValidElement(child)) return;\n\n if (isSelectItemElement(child)) {\n const value = child.props.value as string | undefined;\n const label = extractItemTextLabel(child.props.children) ?? value;\n if (value != null && label != null) {\n items[value] = label;\n }\n }\n\n if (child.props?.children != null) {\n walk(child.props.children);\n }\n });\n };\n\n walk(children);\n return items;\n}","import type { ScrollToIndexAlign, ScrollToIndexOptions, SelectStoreState } from \"../types\";\n\nfunction toScrollBlock(align: ScrollToIndexAlign): ScrollLogicalPosition {\n switch (align) {\n case \"start\":\n return \"start\";\n case \"end\":\n return \"end\";\n case \"center\":\n return \"center\";\n case \"nearest\":\n case \"auto\":\n default:\n return \"nearest\";\n }\n}\n\nexport function scrollToIndexInState(\n state: SelectStoreState,\n index: number,\n options: ScrollToIndexOptions = {},\n): void {\n const items = Array.from(state.items.values());\n const item = items[index];\n if (!item?.ref) return;\n\n item.ref.scrollIntoView({\n block: toScrollBlock(options.align ?? \"nearest\"),\n });\n}","import React, { useId, useMemo, useRef, useEffect, useCallback } from \"react\";\nimport { restoreFocus } from \"@kenos-ui/utils\";\nimport { SelectStore } from \"../store\";\nimport { SelectContext } from \"../context\";\nimport type { SelectRootProps } from \"../types\";\nimport { extractItemsFromChildren } from \"../utils/extract-items\";\nimport { scrollToIndexInState } from \"../utils/scroll-to-index\";\nimport type { ScrollToIndexOptions } from \"../types\";\n\nconst defaultIsItemEqualToValue = (a: string, b: string) => a === b;\n\nfunction valuesEqual(\n a: string | string[] | null | undefined,\n b: string | string[] | null | undefined,\n): boolean {\n if (a === b) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n return false;\n}\n\nexport function Root(props: SelectRootProps) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n name,\n disabled = false,\n required = false,\n readOnly = false,\n modal = false,\n id,\n items = {},\n isItemEqualToValue = defaultIsItemEqualToValue,\n multiple = false,\n openOnFocus = false,\n } = props;\n\n const uid = useId();\n const prefix = id ?? `sel-${uid.replace(/:/g, \"\")}`;\n\n const ids = useMemo(\n () => ({\n root: prefix,\n label: `${prefix}-label`,\n trigger: `${prefix}-trigger`,\n content: `${prefix}-content`,\n }),\n [prefix],\n );\n\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const listRef = useRef<HTMLUListElement | null>(null);\n\n const isControlledValue = value !== undefined;\n const isControlledOpen = open !== undefined;\n\n const initialValue = isControlledValue\n ? multiple\n ? (value ?? [])\n : (value ?? null)\n : multiple\n ? (defaultValue ?? [])\n : (defaultValue ?? null);\n\n const storeRef = useRef<SelectStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new SelectStore({\n value: initialValue,\n open: isControlledOpen ? (open ?? false) : (defaultOpen ?? false),\n });\n }\n const store = storeRef.current;\n\n const prevControlledValue = useRef(value);\n useEffect(() => {\n if (!isControlledValue) return;\n if (valuesEqual(value, prevControlledValue.current)) return;\n prevControlledValue.current = value;\n\n if (multiple) {\n store.setValues(Array.isArray(value) ? value : []);\n } else {\n store.setValue(typeof value === \"string\" ? value : null);\n }\n }, [isControlledValue, value, store, multiple]);\n\n const prevControlledOpen = useRef(open);\n useEffect(() => {\n if (!isControlledOpen) return;\n if (open === prevControlledOpen.current) return;\n prevControlledOpen.current = open;\n store.setOpen(open ?? false);\n }, [isControlledOpen, open, store]);\n\n const onValueChangeRef = useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n\n const prevStoreValue = useRef(store.getState().value);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (!valuesEqual(state.value, prevStoreValue.current)) {\n prevStoreValue.current = state.value;\n if (multiple) {\n (onValueChangeRef.current as ((value: string[]) => void) | undefined)?.(\n Array.isArray(state.value) ? state.value : [],\n );\n } else {\n (onValueChangeRef.current as ((value: string | null) => void) | undefined)?.(\n typeof state.value === \"string\" ? state.value : null,\n );\n }\n }\n });\n }, [store, multiple]);\n\n const onOpenChangeRef = useRef(onOpenChange);\n onOpenChangeRef.current = onOpenChange;\n\n const prevStoreOpen = useRef(store.getState().open);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (state.open !== prevStoreOpen.current) {\n prevStoreOpen.current = state.open;\n onOpenChangeRef.current?.(state.open);\n }\n });\n }, [store]);\n\n const close = useCallback(() => {\n const state = store.getState();\n if (!state.open) return;\n store.setOpen(false);\n restoreFocus({\n openSource: state.openSource ?? \"trigger\",\n trigger: triggerRef.current,\n });\n }, [store]);\n\n const selectValue = useCallback(\n (itemValue: string) => {\n if (multiple) {\n store.toggleValue(itemValue, isItemEqualToValue);\n return;\n }\n store.setValue(itemValue);\n close();\n },\n [store, close, multiple, isItemEqualToValue],\n );\n\n const clearValue = useCallback(() => {\n store.clearValue(multiple);\n }, [store, multiple]);\n\n const scrollToIndex = useCallback(\n (index: number, options?: ScrollToIndexOptions) => {\n scrollToIndexInState(store.getState(), index, options);\n },\n [store],\n );\n\n const discoveredItems = useMemo(() => extractItemsFromChildren(children), [children]);\n const mergedItems = useMemo(\n () => ({ ...discoveredItems, ...items }),\n [discoveredItems, items],\n );\n\n const config = useMemo(\n () => ({\n disabled,\n required,\n readOnly,\n modal,\n name,\n multiple,\n items: mergedItems,\n isItemEqualToValue,\n openOnFocus,\n }),\n [disabled, required, readOnly, modal, name, multiple, mergedItems, isItemEqualToValue, openOnFocus],\n );\n\n const ctx = useMemo(\n () => ({\n store,\n ids,\n refs: { triggerRef, contentRef, listRef },\n config,\n isControlledValue,\n isControlledOpen,\n onOpenChangeComplete,\n close,\n selectValue,\n selectAndClose: selectValue,\n clearValue,\n scrollToIndex,\n }),\n [\n store,\n ids,\n config,\n isControlledValue,\n isControlledOpen,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n scrollToIndex,\n ],\n );\n\n return <SelectContext.Provider value={ctx}>{children}</SelectContext.Provider>;\n}","import React from \"react\";\nimport { useSelectContext } from \"../context\";\n\nexport type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;\n\nexport function Label({ children, ...props }: LabelProps) {\n const { ids } = useSelectContext();\n return (\n <label id={ids.label} htmlFor={ids.trigger} {...props}>\n {children}\n </label>\n );\n}\n","import React from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\n\nexport type TriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-haspopup\" | \"aria-expanded\" | \"aria-controls\"\n> & {\n /**\n * When true, focusing the trigger opens the listbox.\n * Overrides `openOnFocus` on `<Select.Root>` when set.\n */\n openOnFocus?: boolean | undefined;\n};\n\nexport function Trigger({\n children,\n onClick,\n onFocus,\n disabled,\n openOnFocus: openOnFocusProp,\n ...props\n}: TriggerProps) {\n const { store, ids, refs, config } = useSelectContext();\n const open = useSelectStore(store, (s) => s.open);\n const highlightedValue = useSelectStore(store, (s) => s.highlightedValue);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = config.readOnly;\n const openOnFocus = openOnFocusProp ?? config.openOnFocus;\n\n const activeDescendantId =\n open && highlightedValue != null ? `${ids.content}-opt-${highlightedValue}` : undefined;\n\n return (\n <button\n ref={refs.triggerRef}\n type=\"button\"\n id={ids.trigger}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-labelledby={ids.label ? `${ids.label} ${ids.trigger}` : undefined}\n aria-activedescendant={activeDescendantId}\n aria-disabled={isDisabled || isReadOnly || undefined}\n data-disabled={isDisabled || isReadOnly ? \"true\" : undefined}\n data-open={open ? \"true\" : undefined}\n data-state={open ? \"open\" : \"closed\"}\n disabled={isDisabled || isReadOnly}\n onClick={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setOpen(!open, \"trigger\");\n onClick?.(e);\n }}\n onFocus={(e) => {\n if (openOnFocus && !isDisabled && !isReadOnly && !open) {\n store.setOpen(true, \"trigger\");\n }\n onFocus?.(e);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}","import type { SelectItemRecord } from \"../types\";\n\n/** Resolve display label: registry wins over static map, then raw value. */\nexport function resolveItemLabel(\n value: string,\n registry: Map<string, SelectItemRecord>,\n staticItems: Record<string, string>,\n): string {\n return registry.get(value)?.label ?? staticItems[value] ?? value;\n}\n\n/** Merge option values from registry and static items (registry order first). */\nexport function mergeOptionValues(\n registry: Map<string, SelectItemRecord>,\n staticItems: Record<string, string>,\n): string[] {\n const seen = new Set<string>();\n const values: string[] = [];\n\n for (const value of registry.keys()) {\n if (!seen.has(value)) {\n seen.add(value);\n values.push(value);\n }\n }\n\n for (const value of Object.keys(staticItems)) {\n if (!seen.has(value)) {\n seen.add(value);\n values.push(value);\n }\n }\n\n return values;\n}","import React, { useMemo } from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport { resolveItemLabel } from \"../utils/labels\";\n\nexport interface ValueProps extends React.HTMLAttributes<HTMLSpanElement> {\n placeholder?: string | undefined;\n}\n\nexport function Value({ placeholder = \"\", ...props }: ValueProps) {\n const { store, config } = useSelectContext();\n const value = useSelectStore(store, (s) => s.value);\n const registry = useSelectStore(store, (s) => s.items);\n\n const label = useMemo(() => {\n if (config.multiple) {\n const values = Array.isArray(value) ? value : [];\n if (values.length === 0) return null;\n return values\n .map((itemValue) => resolveItemLabel(itemValue, registry, config.items))\n .join(\", \");\n }\n\n if (typeof value !== \"string\") return null;\n return resolveItemLabel(value, registry, config.items);\n }, [config.multiple, config.items, registry, value]);\n\n return (\n <span data-placeholder={label == null ? \"true\" : undefined} {...props}>\n {label ?? placeholder}\n </span>\n );\n}","import React from \"react\";\n\nexport type IconProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** Chevron/arrow slot — render your own icon as children. */\nexport function Icon({ children, ...props }: IconProps) {\n return (\n <span aria-hidden=\"true\" {...props}>\n {children ?? \"▾\"}\n </span>\n );\n}\n","import { createContext, useContext, type CSSProperties } from \"react\";\n\nexport interface PositionerContextValue {\n floatingStyles: CSSProperties;\n isPositioned: boolean;\n setFloating: (node: HTMLElement | null) => void;\n alignItemWithTriggerActive: boolean;\n}\n\nexport const PositionerContext = createContext<PositionerContextValue | null>(null);\n\nexport function usePositionerContext(): PositionerContextValue | null {\n return useContext(PositionerContext);\n}","import React, { createContext, useContext } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SelectPortalContainer, SelectPortalProps } from \"../types\";\n\nexport const PortalContext = createContext(false);\n\nexport function usePortalContext(): boolean {\n return useContext(PortalContext);\n}\n\nexport function resolvePortalContainer(\n container: SelectPortalContainer | undefined,\n): HTMLElement | null {\n if (container == null) {\n return typeof document !== \"undefined\" ? document.body : null;\n }\n if (typeof HTMLElement !== \"undefined\" && container instanceof HTMLElement) {\n return container;\n }\n if (typeof container === \"object\" && \"current\" in container) {\n return container.current;\n }\n return null;\n}\n\nexport function Portal({ children, container = null }: SelectPortalProps) {\n const mountNode = resolvePortalContainer(container);\n\n if (!mountNode) {\n return null;\n }\n\n return (\n <PortalContext.Provider value>\n {createPortal(children, mountNode)}\n </PortalContext.Provider>\n );\n}","import type { FloatingSide } from \"@kenos-ui/utils\";\n\nexport function getAlignItemWithTriggerOffset(\n alignItemWithTrigger: boolean,\n side: FloatingSide,\n triggerHeight: number,\n sideOffset: number,\n): number {\n if (!alignItemWithTrigger || triggerHeight <= 0) {\n return sideOffset;\n }\n\n if (side === \"bottom\" || side === \"top\") {\n return -triggerHeight + sideOffset;\n }\n\n return sideOffset;\n}\n\nexport function shouldDisableFlipForAlign(alignItemWithTrigger: boolean): boolean {\n return alignItemWithTrigger;\n}","import { useLayoutEffect, useState } from \"react\";\nimport type { FloatingSide } from \"@kenos-ui/utils\";\nimport type { SelectRefs } from \"../context\";\nimport {\n getAlignItemWithTriggerOffset,\n shouldDisableFlipForAlign,\n} from \"./align-with-trigger\";\n\nexport interface AlignItemWithTriggerOptions {\n alignItemWithTrigger: boolean;\n side: FloatingSide;\n sideOffset: number;\n open: boolean;\n refs: SelectRefs;\n}\n\nexport function useAlignItemWithTrigger({\n alignItemWithTrigger,\n side,\n sideOffset,\n open,\n refs,\n}: AlignItemWithTriggerOptions) {\n const [triggerHeight, setTriggerHeight] = useState(0);\n\n useLayoutEffect(() => {\n if (!alignItemWithTrigger || !open) {\n setTriggerHeight(0);\n return;\n }\n\n const trigger = refs.triggerRef.current;\n if (!trigger) return;\n\n const update = () => setTriggerHeight(trigger.offsetHeight);\n update();\n\n const observer = new ResizeObserver(update);\n observer.observe(trigger);\n\n return () => observer.disconnect();\n }, [alignItemWithTrigger, open, refs.triggerRef]);\n\n const effectiveSideOffset = getAlignItemWithTriggerOffset(\n alignItemWithTrigger,\n side,\n triggerHeight,\n sideOffset,\n );\n\n const avoidCollisionsOverride = shouldDisableFlipForAlign(alignItemWithTrigger)\n ? false\n : undefined;\n\n return {\n alignItemWithTriggerActive: alignItemWithTrigger && triggerHeight > 0,\n effectiveSideOffset,\n avoidCollisionsOverride,\n };\n}","import React, {\n useEffect,\n useCallback,\n useLayoutEffect,\n useState,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useFloating,\n usePresence,\n useClickOutside,\n useEscapeKey,\n useListNavigation,\n useTypeahead,\n useFocusTrap,\n} from \"@kenos-ui/utils\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport { usePositionerContext } from \"../positioner/PositionerContext\";\nimport { resolvePortalContainer, usePortalContext } from \"../portal/SelectPortal\";\nimport type { SelectContentProps } from \"../types\";\nimport { useAlignItemWithTrigger } from \"../utils/use-align-item-with-trigger\";\n\nexport function Content({\n children,\n forceMount,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n alignOffset = 0,\n avoidCollisions = true,\n collisionPadding = 8,\n portal = false,\n container = null,\n sameWidth = false,\n alignItemWithTrigger = false,\n lazyMount = true,\n unmountOnExit = false,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n style,\n onKeyDown,\n ...props\n}: SelectContentProps & React.HTMLAttributes<HTMLDivElement>) {\n const {\n store,\n ids,\n refs,\n config,\n close,\n selectValue,\n onOpenChangeComplete: onOpenChangeCompleteRoot,\n } = useSelectContext();\n const open = useSelectStore(store, (s) => s.open);\n const highlightedValue = useSelectStore(store, (s) => s.highlightedValue);\n const items = useSelectStore(store, (s) => s.items);\n const positionerContext = usePositionerContext();\n const isInsidePortal = usePortalContext();\n\n const onOpenChangeComplete = onOpenChangeCompleteProp ?? onOpenChangeCompleteRoot;\n\n const ownAlign = useAlignItemWithTrigger({\n alignItemWithTrigger: positionerContext ? false : alignItemWithTrigger,\n side,\n sideOffset,\n open,\n refs,\n });\n\n const ownFloating = useFloating({\n open: positionerContext ? false : open,\n side,\n align,\n sideOffset: ownAlign.effectiveSideOffset,\n alignOffset,\n avoidCollisions: ownAlign.avoidCollisionsOverride ?? avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n const { setReference } = ownFloating;\n const setFloating = positionerContext?.setFloating ?? ownFloating.setFloating;\n const floatingStyles = positionerContext?.floatingStyles ?? ownFloating.floatingStyles;\n const isPositioned = positionerContext?.isPositioned ?? ownFloating.isPositioned;\n const alignItemWithTriggerActive =\n positionerContext?.alignItemWithTriggerActive ?? ownAlign.alignItemWithTriggerActive;\n\n useLayoutEffect(() => {\n if (positionerContext || !open) return;\n setReference(refs.triggerRef.current);\n }, [open, positionerContext, refs.triggerRef, setReference]);\n\n const mergedRef = useCallback(\n (node: HTMLDivElement | null) => {\n refs.contentRef.current = node;\n setFloating(node);\n },\n [refs.contentRef, setFloating],\n );\n\n const { present } = usePresence({\n open,\n lazyMount,\n unmountOnExit,\n onOpenChangeComplete,\n });\n\n useClickOutside([refs.contentRef, refs.triggerRef], close, open);\n\n useEscapeKey({\n enabled: open,\n stopPropagation: true,\n onEscape: close,\n });\n\n useFocusTrap(refs.contentRef, open && config.modal);\n\n const navItems = Array.from(items.values()).map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { onKeyDown: onNavKeyDown } = useListNavigation({\n enabled: open && !config.disabled && !config.readOnly,\n items: navItems,\n highlightedValue,\n onHighlight: (v) => store.setHighlightedValue(v),\n loop: true,\n });\n\n const typeaheadItems = Array.from(items.values()).map((item) => ({\n value: item.value,\n disabled: item.disabled,\n textValue: item.textValue,\n }));\n\n const { onKeyDown: onTypeaheadKeyDown } = useTypeahead({\n enabled: open && !config.disabled && !config.readOnly,\n items: typeaheadItems,\n onMatch: (v) => store.setHighlightedValue(v),\n });\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n if (highlightedValue != null) {\n e.preventDefault();\n const item = items.get(highlightedValue);\n if (item && !item.disabled) {\n selectValue(highlightedValue);\n }\n }\n return;\n }\n onNavKeyDown(e);\n onTypeaheadKeyDown(e);\n onKeyDown?.(e);\n },\n [highlightedValue, items, selectValue, onNavKeyDown, onTypeaheadKeyDown, onKeyDown],\n );\n\n const [transitionsReady, setTransitionsReady] = useState(false);\n useEffect(() => {\n if (!open || !isPositioned) {\n setTransitionsReady(false);\n return;\n }\n const raf = requestAnimationFrame(() => setTransitionsReady(true));\n return () => cancelAnimationFrame(raf);\n }, [open, isPositioned]);\n\n useEffect(() => {\n if (!open || !refs.contentRef.current) return;\n const state = store.getState();\n if (state.highlightedValue == null) {\n const first = navItems.find((i) => !i.disabled);\n if (first) store.setHighlightedValue(first.value);\n }\n refs.contentRef.current.focus({ preventScroll: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on open\n }, [open]);\n\n useEffect(() => {\n if (!open || !highlightedValue) return;\n const item = items.get(highlightedValue);\n if (typeof item?.ref?.scrollIntoView === \"function\") {\n item.ref.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedValue, items, open]);\n\n if (!present && !forceMount) return null;\n\n const content = (\n <div\n ref={mergedRef}\n id={ids.content}\n data-state={open ? \"open\" : \"closed\"}\n data-open={open ? \"true\" : undefined}\n data-align-trigger={alignItemWithTriggerActive ? \"true\" : undefined}\n aria-modal={config.modal ? \"true\" : undefined}\n tabIndex={-1}\n style={{\n ...floatingStyles,\n ...(!open ? { display: \"none\" } : undefined),\n ...(open && !isPositioned ? { opacity: 0, pointerEvents: \"none\" } : undefined),\n ...(open && !transitionsReady ? { transition: \"none\" } : undefined),\n ...style,\n }}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </div>\n );\n\n if (isInsidePortal || !portal) {\n return content;\n }\n\n const mountNode = resolvePortalContainer(container);\n if (!mountNode) {\n return content;\n }\n\n return createPortal(content, mountNode);\n}","import React, { useLayoutEffect, useMemo } from \"react\";\nimport { useFloating } from \"@kenos-ui/utils\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport type { SelectPositionerProps } from \"../types\";\nimport { useAlignItemWithTrigger } from \"../utils/use-align-item-with-trigger\";\nimport { PositionerContext } from \"./PositionerContext\";\n\nexport function Positioner({\n children,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n alignOffset = 0,\n avoidCollisions = true,\n collisionPadding = 8,\n sameWidth = false,\n alignItemWithTrigger = false,\n}: SelectPositionerProps) {\n const { store, refs } = useSelectContext();\n const open = useSelectStore(store, (s) => s.open);\n\n const { alignItemWithTriggerActive, effectiveSideOffset, avoidCollisionsOverride } =\n useAlignItemWithTrigger({\n alignItemWithTrigger,\n side,\n sideOffset,\n open,\n refs,\n });\n\n const { setReference, setFloating, floatingStyles, isPositioned } = useFloating({\n open,\n side,\n align,\n sideOffset: effectiveSideOffset,\n alignOffset,\n avoidCollisions: avoidCollisionsOverride ?? avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n useLayoutEffect(() => {\n if (!open) return;\n setReference(refs.triggerRef.current);\n }, [open, refs.triggerRef, setReference]);\n\n const contextValue = useMemo(\n () => ({\n floatingStyles,\n isPositioned,\n setFloating,\n alignItemWithTriggerActive,\n }),\n [floatingStyles, isPositioned, setFloating, alignItemWithTriggerActive],\n );\n\n return (\n <PositionerContext.Provider value={contextValue}>{children}</PositionerContext.Provider>\n );\n}","import React from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport type { SelectBackdropProps } from \"../types\";\n\nexport function Backdrop({ style, ...props }: SelectBackdropProps) {\n const { store, config } = useSelectContext();\n const open = useSelectStore(store, (s) => s.open);\n\n if (!config.modal) {\n return null;\n }\n\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n data-state={open ? \"open\" : \"closed\"}\n style={{\n position: \"fixed\",\n inset: 0,\n pointerEvents: open ? undefined : \"none\",\n ...style,\n }}\n {...props}\n />\n );\n}","import React, { useCallback } from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport type { SelectClearTriggerProps } from \"../types\";\n\nexport function ClearTrigger({ onClick, ...props }: SelectClearTriggerProps) {\n const { store, config, clearValue } = useSelectContext();\n const value = useSelectStore(store, (s) => s.value);\n\n const hasValue = config.multiple\n ? Array.isArray(value) && value.length > 0\n : value != null;\n\n const handleActivate = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n onClick?.(e as React.MouseEvent<HTMLSpanElement>);\n },\n [clearValue, onClick],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n handleActivate(e);\n }\n },\n [handleActivate],\n );\n\n if (!hasValue || config.disabled || config.readOnly) {\n return null;\n }\n\n return (\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Clear selection\"\n onClick={handleActivate}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}","import React, { useEffect } from \"react\";\nimport { useSelectContext } from \"../context\";\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement> & {\n /**\n * When set, scrolls the list to the item at this index.\n * Useful with virtualization or controlled scroll sync.\n */\n scrollToIndex?: number | undefined;\n};\n\nexport function List({ children, scrollToIndex, ...props }: ListProps) {\n const { ids, refs, config, scrollToIndex: scrollToIndexFn } = useSelectContext();\n\n useEffect(() => {\n if (scrollToIndex == null || scrollToIndex < 0) return;\n scrollToIndexFn(scrollToIndex);\n }, [scrollToIndex, scrollToIndexFn]);\n\n return (\n <ul\n ref={refs.listRef}\n role=\"listbox\"\n id={`${ids.content}-list`}\n aria-labelledby={ids.label}\n aria-multiselectable={config.multiple ? true : undefined}\n {...props}\n >\n {children}\n </ul>\n );\n}","import React, { useRef, useLayoutEffect, useCallback } from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\n\nexport interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean | undefined;\n textValue?: string | undefined;\n}\n\nItem.displayName = \"Select.Item\";\n\nexport function Item({\n value,\n disabled = false,\n textValue,\n children,\n onClick,\n onPointerMove,\n ...props\n}: ItemProps) {\n const { store, ids, config, selectValue } = useSelectContext();\n const selectedValue = useSelectStore(store, (s) => s.value);\n const highlightedValue = useSelectStore(store, (s) => s.highlightedValue);\n const liRef = useRef<HTMLLIElement>(null);\n\n const isSelected = config.multiple\n ? Array.isArray(selectedValue) &&\n selectedValue.some((item) => config.isItemEqualToValue(item, value))\n : typeof selectedValue === \"string\" && config.isItemEqualToValue(selectedValue, value);\n const isHighlighted = highlightedValue === value;\n const isDisabled = disabled || config.disabled || config.readOnly;\n\n useLayoutEffect(() => {\n const el = liRef.current;\n const label = textValue ?? (el?.textContent ?? value);\n\n store.registerItem({\n value,\n label,\n textValue: textValue ?? label,\n disabled: isDisabled,\n ref: el,\n groupId: null,\n });\n\n return () => store.unregisterItem(value);\n }, [value, isDisabled, store, textValue, children]);\n\n useLayoutEffect(() => {\n store.updateItemRef(value, liRef.current);\n });\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLLIElement>) => {\n if (isDisabled) return;\n selectValue(value);\n onClick?.(e);\n },\n [isDisabled, selectValue, value, onClick],\n );\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent<HTMLLIElement>) => {\n if (!isDisabled) store.setHighlightedValue(value);\n onPointerMove?.(e);\n },\n [isDisabled, store, value, onPointerMove],\n );\n\n return (\n <li\n ref={liRef}\n id={`${ids.content}-opt-${value}`}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n tabIndex={-1}\n onClick={handleClick}\n onPointerMove={handlePointerMove}\n {...props}\n >\n {children}\n </li>\n );\n}","import React from \"react\";\n\nexport type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** Text label for a Select.Item — also used by Select.Value to display the selected label. */\nexport function ItemText({ children, ...props }: ItemTextProps) {\n return <span {...props}>{children}</span>;\n}\n","import React from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\n\nexport interface ItemIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** The item value to check — reads from the nearest Item when not provided. */\n value?: string | undefined;\n}\n\n/**\n * Renders only when the parent item is selected.\n * Wrap a checkmark or any indicator icon as children.\n */\nexport function ItemIndicator({ value, children, style, ...props }: ItemIndicatorProps) {\n const { store } = useSelectContext();\n const selectedValue = useSelectStore(store, (s) => s.value);\n\n const isSelected = value != null ? selectedValue === value : false;\n\n return (\n <span\n aria-hidden=\"true\"\n data-state={isSelected ? \"checked\" : \"unchecked\"}\n style={{ visibility: isSelected ? undefined : \"hidden\", ...style }}\n {...props}\n >\n {children}\n </span>\n );\n}\n","import { createContext, useContext } from \"react\";\n\nexport interface GroupContextValue {\n labelId: string;\n}\n\nexport const GroupContext = createContext<GroupContextValue | null>(null);\n\nexport function useGroupContext(): GroupContextValue | null {\n return useContext(GroupContext);\n}\n","import React, { useId } from \"react\";\nimport { GroupContext } from \"./GroupContext\";\n\nexport type GroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Group({ children, ...props }: GroupProps) {\n const groupId = useId();\n const labelId = `${groupId}-label`;\n\n return (\n <GroupContext.Provider value={{ labelId }}>\n <div role=\"group\" aria-labelledby={labelId} {...props}>\n {children}\n </div>\n </GroupContext.Provider>\n );\n}\n","import React from \"react\";\nimport { useGroupContext } from \"../group/GroupContext\";\n\nexport type GroupLabelProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function GroupLabel({ children, ...props }: GroupLabelProps) {\n const group = useGroupContext();\n\n return (\n <div id={group?.labelId} {...props}>\n {children}\n </div>\n );\n}\n","import React from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport { mergeOptionValues, resolveItemLabel } from \"../utils/labels\";\n\nexport function HiddenSelect() {\n const { store, config } = useSelectContext();\n const value = useSelectStore(store, (s) => s.value);\n const registry = useSelectStore(store, (s) => s.items);\n\n if (!config.name) return null;\n\n const optionValues = mergeOptionValues(registry, config.items);\n const selectedValues = config.multiple\n ? Array.isArray(value)\n ? value\n : []\n : typeof value === \"string\"\n ? [value]\n : [];\n\n if (config.multiple) {\n const allOptionValues = [\n ...optionValues,\n ...selectedValues.filter(\n (selected) => !optionValues.some((v) => config.isItemEqualToValue(v, selected)),\n ),\n ];\n\n return (\n <select\n aria-hidden=\"true\"\n tabIndex={-1}\n name={config.name}\n multiple\n required={config.required}\n disabled={config.disabled}\n value={selectedValues}\n onChange={() => undefined}\n style={{\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: 0,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n opacity: 0,\n }}\n data-part=\"hidden-select\"\n >\n {allOptionValues.map((optionValue) => {\n const record = registry.get(optionValue);\n return (\n <option key={optionValue} value={optionValue} disabled={record?.disabled}>\n {resolveItemLabel(optionValue, registry, config.items)}\n </option>\n );\n })}\n </select>\n );\n }\n\n const singleValue = typeof value === \"string\" ? value : \"\";\n const hasValueOption =\n singleValue !== \"\" && optionValues.some((v) => config.isItemEqualToValue(v, singleValue));\n\n return (\n <select\n aria-hidden=\"true\"\n tabIndex={-1}\n name={config.name}\n required={config.required}\n disabled={config.disabled}\n value={singleValue}\n onChange={() => undefined}\n style={{\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: 0,\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n opacity: 0,\n }}\n data-part=\"hidden-select\"\n >\n <option value=\"\" disabled hidden />\n {optionValues.map((optionValue) => {\n const record = registry.get(optionValue);\n return (\n <option key={optionValue} value={optionValue} disabled={record?.disabled}>\n {resolveItemLabel(optionValue, registry, config.items)}\n </option>\n );\n })}\n {singleValue !== \"\" && !hasValueOption && <option value={singleValue}>{singleValue}</option>}\n </select>\n );\n}","import { useCallback, useLayoutEffect, useState, type RefObject } from \"react\";\n\nexport interface ListScrollOverflow {\n canScrollUp: boolean;\n canScrollDown: boolean;\n update: () => void;\n}\n\nexport function useListScrollOverflow(\n listRef: RefObject<HTMLUListElement | null>,\n enabled: boolean,\n): ListScrollOverflow {\n const [canScrollUp, setCanScrollUp] = useState(false);\n const [canScrollDown, setCanScrollDown] = useState(false);\n\n const update = useCallback(() => {\n const list = listRef.current;\n if (!list) {\n setCanScrollUp(false);\n setCanScrollDown(false);\n return;\n }\n\n const { scrollTop, scrollHeight, clientHeight } = list;\n setCanScrollUp(scrollTop > 0);\n setCanScrollDown(scrollTop + clientHeight < scrollHeight - 1);\n }, [listRef]);\n\n useLayoutEffect(() => {\n if (!enabled) {\n setCanScrollUp(false);\n setCanScrollDown(false);\n return;\n }\n\n update();\n\n const list = listRef.current;\n if (!list) return;\n\n list.addEventListener(\"scroll\", update, { passive: true });\n\n const observer = new ResizeObserver(update);\n observer.observe(list);\n\n return () => {\n list.removeEventListener(\"scroll\", update);\n observer.disconnect();\n };\n }, [enabled, listRef, update]);\n\n return { canScrollUp, canScrollDown, update };\n}","import React, { useCallback } from \"react\";\nimport { useSelectContext } from \"../context\";\nimport { useSelectStore } from \"../store\";\nimport { useListScrollOverflow } from \"../utils/use-list-scroll-overflow\";\nimport type { SelectScrollButtonProps } from \"../types\";\n\nconst SCROLL_STEP_PX = 40;\n\nexport function ScrollButton({\n direction,\n keepMounted = false,\n onClick,\n children,\n style,\n ...props\n}: SelectScrollButtonProps) {\n const { store, refs } = useSelectContext();\n const open = useSelectStore(store, (s) => s.open);\n const isUp = direction === \"up\";\n\n const { canScrollUp, canScrollDown, update } = useListScrollOverflow(refs.listRef, open);\n const visible = isUp ? canScrollUp : canScrollDown;\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const list = refs.listRef.current;\n if (list) {\n const delta = isUp ? -SCROLL_STEP_PX : SCROLL_STEP_PX;\n if (typeof list.scrollBy === \"function\") {\n list.scrollBy({ top: delta, behavior: \"smooth\" });\n } else {\n list.scrollTop += delta;\n }\n list.dispatchEvent(new Event(\"scroll\"));\n update();\n }\n onClick?.(event);\n },\n [isUp, onClick, refs.listRef, update],\n );\n\n if (!visible && !keepMounted) {\n return null;\n }\n\n return (\n <button\n type=\"button\"\n aria-hidden\n tabIndex={-1}\n data-direction={direction}\n data-visible={visible ? \"true\" : \"false\"}\n style={{\n display: visible || keepMounted ? undefined : \"none\",\n ...style,\n }}\n onClick={handleClick}\n {...props}\n >\n {children ?? (isUp ? \"▲\" : \"▼\")}\n </button>\n );\n}","import React from \"react\";\nimport { ScrollButton } from \"../scroll-button/SelectScrollButton\";\nimport type { SelectScrollButtonProps } from \"../types\";\n\nexport type ScrollUpButtonProps = Omit<SelectScrollButtonProps, \"direction\">;\n\nexport function ScrollUpButton(props: ScrollUpButtonProps) {\n return <ScrollButton direction=\"up\" {...props} />;\n}","import React from \"react\";\nimport { ScrollButton } from \"../scroll-button/SelectScrollButton\";\nimport type { SelectScrollButtonProps } from \"../types\";\n\nexport type ScrollDownButtonProps = Omit<SelectScrollButtonProps, \"direction\">;\n\nexport function ScrollDownButton(props: ScrollDownButtonProps) {\n return <ScrollButton direction=\"down\" {...props} />;\n}"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React, { HTMLAttributes, ReactNode, RefObject, ButtonHTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
interface SelectItemRecord {
|
|
5
|
+
value: string;
|
|
6
|
+
/** Displayed label (from ItemText child). */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Used by typeahead. Defaults to label. */
|
|
9
|
+
textValue: string;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
/** The DOM element for the option — needed for aria-activedescendant. */
|
|
12
|
+
ref: HTMLElement | null;
|
|
13
|
+
groupId: string | null;
|
|
14
|
+
}
|
|
15
|
+
type SelectItemEqualFn = (a: string, b: string) => boolean;
|
|
16
|
+
interface SelectStoreState {
|
|
17
|
+
open: boolean;
|
|
18
|
+
openSource: "trigger" | null;
|
|
19
|
+
value: string | string[] | null;
|
|
20
|
+
highlightedValue: string | null;
|
|
21
|
+
/** Item registry: populated as Select.Item mounts. */
|
|
22
|
+
items: Map<string, SelectItemRecord>;
|
|
23
|
+
}
|
|
24
|
+
interface SelectRootPropsBase {
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
/** Controlled open state. */
|
|
27
|
+
open?: boolean | undefined;
|
|
28
|
+
defaultOpen?: boolean | undefined;
|
|
29
|
+
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
30
|
+
/** Fires when open transitions finish (including presence exit). */
|
|
31
|
+
onOpenChangeComplete?: ((open: boolean) => void) | undefined;
|
|
32
|
+
/** Native <select> name for form submission. */
|
|
33
|
+
name?: string | undefined;
|
|
34
|
+
disabled?: boolean | undefined;
|
|
35
|
+
required?: boolean | undefined;
|
|
36
|
+
readOnly?: boolean | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* When true, a focus trap + aria-modal is applied.
|
|
39
|
+
* **Default: false** (interop-first per popup-policy).
|
|
40
|
+
*/
|
|
41
|
+
modal?: boolean | undefined;
|
|
42
|
+
/** Unique id prefix (auto-generated when omitted). */
|
|
43
|
+
id?: string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Static value→label map for Value/HiddenSelect when items are not mounted.
|
|
46
|
+
* Registry labels take precedence when both exist.
|
|
47
|
+
*/
|
|
48
|
+
items?: Record<string, string> | undefined;
|
|
49
|
+
/** Custom equality for value matching. Default: strict `===`. */
|
|
50
|
+
isItemEqualToValue?: SelectItemEqualFn | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* When true, focusing the trigger opens the listbox.
|
|
53
|
+
* **Default: false**
|
|
54
|
+
*/
|
|
55
|
+
openOnFocus?: boolean | undefined;
|
|
56
|
+
}
|
|
57
|
+
interface SelectRootPropsSingle extends SelectRootPropsBase {
|
|
58
|
+
multiple?: false | undefined;
|
|
59
|
+
/** Controlled value. */
|
|
60
|
+
value?: string | null | undefined;
|
|
61
|
+
/** Uncontrolled default value. */
|
|
62
|
+
defaultValue?: string | null | undefined;
|
|
63
|
+
onValueChange?: ((value: string | null) => void) | undefined;
|
|
64
|
+
}
|
|
65
|
+
interface SelectRootPropsMultiple extends SelectRootPropsBase {
|
|
66
|
+
multiple: true;
|
|
67
|
+
/** Controlled value. */
|
|
68
|
+
value?: string[] | undefined;
|
|
69
|
+
/** Uncontrolled default value. */
|
|
70
|
+
defaultValue?: string[] | undefined;
|
|
71
|
+
onValueChange?: ((value: string[]) => void) | undefined;
|
|
72
|
+
}
|
|
73
|
+
type SelectRootProps = SelectRootPropsSingle | SelectRootPropsMultiple;
|
|
74
|
+
type SelectPortalContainer = HTMLElement | RefObject<HTMLElement | null> | null;
|
|
75
|
+
interface SelectPortalProps {
|
|
76
|
+
children?: ReactNode;
|
|
77
|
+
/** Portal mount target. Defaults to `document.body`. */
|
|
78
|
+
container?: SelectPortalContainer | undefined;
|
|
79
|
+
}
|
|
80
|
+
interface SelectPositionerProps {
|
|
81
|
+
children?: ReactNode;
|
|
82
|
+
side?: "top" | "bottom" | "left" | "right" | undefined;
|
|
83
|
+
align?: "start" | "center" | "end" | undefined;
|
|
84
|
+
sideOffset?: number | undefined;
|
|
85
|
+
alignOffset?: number | undefined;
|
|
86
|
+
avoidCollisions?: boolean | undefined;
|
|
87
|
+
collisionPadding?: number | undefined;
|
|
88
|
+
/** Match the trigger's width. Default: false. */
|
|
89
|
+
sameWidth?: boolean | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* When true, positions content to cover the trigger.
|
|
92
|
+
* For `side="bottom"`, aligns the top of content with the top of the trigger.
|
|
93
|
+
* **Default: false**
|
|
94
|
+
*/
|
|
95
|
+
alignItemWithTrigger?: boolean | undefined;
|
|
96
|
+
}
|
|
97
|
+
interface SelectBackdropProps extends HTMLAttributes<HTMLDivElement> {
|
|
98
|
+
}
|
|
99
|
+
interface SelectClearTriggerProps extends HTMLAttributes<HTMLSpanElement> {
|
|
100
|
+
}
|
|
101
|
+
interface SelectScrollButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
102
|
+
direction: "up" | "down";
|
|
103
|
+
/**
|
|
104
|
+
* Keep the button in the DOM when the list is not scrollable in this direction.
|
|
105
|
+
* **Default: false**
|
|
106
|
+
*/
|
|
107
|
+
keepMounted?: boolean | undefined;
|
|
108
|
+
}
|
|
109
|
+
type SelectScrollUpButtonProps = Omit<SelectScrollButtonProps, "direction">;
|
|
110
|
+
type SelectScrollDownButtonProps = Omit<SelectScrollButtonProps, "direction">;
|
|
111
|
+
type ScrollToIndexAlign = "auto" | "start" | "end" | "center" | "nearest";
|
|
112
|
+
interface ScrollToIndexOptions {
|
|
113
|
+
align?: ScrollToIndexAlign | undefined;
|
|
114
|
+
}
|
|
115
|
+
interface SelectContentProps {
|
|
116
|
+
children?: ReactNode;
|
|
117
|
+
/** Force content to stay in the DOM even when closed. */
|
|
118
|
+
forceMount?: boolean | undefined;
|
|
119
|
+
side?: "top" | "bottom" | "left" | "right" | undefined;
|
|
120
|
+
align?: "start" | "center" | "end" | undefined;
|
|
121
|
+
sideOffset?: number | undefined;
|
|
122
|
+
alignOffset?: number | undefined;
|
|
123
|
+
avoidCollisions?: boolean | undefined;
|
|
124
|
+
collisionPadding?: number | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* When true, the content renders in a portal appended to document.body.
|
|
127
|
+
* **Default: false** (interop-first per popup-policy).
|
|
128
|
+
*/
|
|
129
|
+
portal?: boolean | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Portal mount target when `portal` is true.
|
|
132
|
+
* Defaults to `document.body`. Ignored when nested inside `<Select.Portal>`.
|
|
133
|
+
*/
|
|
134
|
+
container?: SelectPortalContainer | undefined;
|
|
135
|
+
/** Match the trigger's width. Default: false. */
|
|
136
|
+
sameWidth?: boolean | undefined;
|
|
137
|
+
/**
|
|
138
|
+
* When true, positions content to cover the trigger.
|
|
139
|
+
* For `side="bottom"`, aligns the top of content with the top of the trigger.
|
|
140
|
+
* **Default: false**
|
|
141
|
+
*/
|
|
142
|
+
alignItemWithTrigger?: boolean | undefined;
|
|
143
|
+
/** Skip DOM until first open. Default: true. */
|
|
144
|
+
lazyMount?: boolean | undefined;
|
|
145
|
+
/** Remove from DOM when closed. Default: false. */
|
|
146
|
+
unmountOnExit?: boolean | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Fires when open transitions finish (including presence exit).
|
|
149
|
+
* Prefer `onOpenChangeComplete` on `<Select.Root>`; this prop overrides the root callback.
|
|
150
|
+
*/
|
|
151
|
+
onOpenChangeComplete?: ((open: boolean) => void) | undefined;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
declare function Root(props: SelectRootProps): react_jsx_runtime.JSX.Element;
|
|
155
|
+
|
|
156
|
+
type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;
|
|
157
|
+
declare function Label({ children, ...props }: LabelProps): react_jsx_runtime.JSX.Element;
|
|
158
|
+
|
|
159
|
+
type TriggerProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "aria-haspopup" | "aria-expanded" | "aria-controls"> & {
|
|
160
|
+
/**
|
|
161
|
+
* When true, focusing the trigger opens the listbox.
|
|
162
|
+
* Overrides `openOnFocus` on `<Select.Root>` when set.
|
|
163
|
+
*/
|
|
164
|
+
openOnFocus?: boolean | undefined;
|
|
165
|
+
};
|
|
166
|
+
declare function Trigger({ children, onClick, onFocus, disabled, openOnFocus: openOnFocusProp, ...props }: TriggerProps): react_jsx_runtime.JSX.Element;
|
|
167
|
+
|
|
168
|
+
interface ValueProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
169
|
+
placeholder?: string | undefined;
|
|
170
|
+
}
|
|
171
|
+
declare function Value({ placeholder, ...props }: ValueProps): react_jsx_runtime.JSX.Element;
|
|
172
|
+
|
|
173
|
+
type IconProps = React.HTMLAttributes<HTMLSpanElement>;
|
|
174
|
+
/** Chevron/arrow slot — render your own icon as children. */
|
|
175
|
+
declare function Icon({ children, ...props }: IconProps): react_jsx_runtime.JSX.Element;
|
|
176
|
+
|
|
177
|
+
declare function Content({ children, forceMount, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, portal, container, sameWidth, alignItemWithTrigger, lazyMount, unmountOnExit, onOpenChangeComplete: onOpenChangeCompleteProp, style, onKeyDown, ...props }: SelectContentProps & React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element | null;
|
|
178
|
+
|
|
179
|
+
declare function Portal({ children, container }: SelectPortalProps): react_jsx_runtime.JSX.Element | null;
|
|
180
|
+
|
|
181
|
+
declare function Positioner({ children, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, sameWidth, alignItemWithTrigger, }: SelectPositionerProps): react_jsx_runtime.JSX.Element;
|
|
182
|
+
|
|
183
|
+
declare function Backdrop({ style, ...props }: SelectBackdropProps): react_jsx_runtime.JSX.Element | null;
|
|
184
|
+
|
|
185
|
+
declare function ClearTrigger({ onClick, ...props }: SelectClearTriggerProps): react_jsx_runtime.JSX.Element | null;
|
|
186
|
+
|
|
187
|
+
type ListProps = React.HTMLAttributes<HTMLUListElement> & {
|
|
188
|
+
/**
|
|
189
|
+
* When set, scrolls the list to the item at this index.
|
|
190
|
+
* Useful with virtualization or controlled scroll sync.
|
|
191
|
+
*/
|
|
192
|
+
scrollToIndex?: number | undefined;
|
|
193
|
+
};
|
|
194
|
+
declare function List({ children, scrollToIndex, ...props }: ListProps): react_jsx_runtime.JSX.Element;
|
|
195
|
+
|
|
196
|
+
interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
197
|
+
value: string;
|
|
198
|
+
disabled?: boolean | undefined;
|
|
199
|
+
textValue?: string | undefined;
|
|
200
|
+
}
|
|
201
|
+
declare function Item({ value, disabled, textValue, children, onClick, onPointerMove, ...props }: ItemProps): react_jsx_runtime.JSX.Element;
|
|
202
|
+
declare namespace Item {
|
|
203
|
+
var displayName: string;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;
|
|
207
|
+
/** Text label for a Select.Item — also used by Select.Value to display the selected label. */
|
|
208
|
+
declare function ItemText({ children, ...props }: ItemTextProps): react_jsx_runtime.JSX.Element;
|
|
209
|
+
|
|
210
|
+
interface ItemIndicatorProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
211
|
+
/** The item value to check — reads from the nearest Item when not provided. */
|
|
212
|
+
value?: string | undefined;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Renders only when the parent item is selected.
|
|
216
|
+
* Wrap a checkmark or any indicator icon as children.
|
|
217
|
+
*/
|
|
218
|
+
declare function ItemIndicator({ value, children, style, ...props }: ItemIndicatorProps): react_jsx_runtime.JSX.Element;
|
|
219
|
+
|
|
220
|
+
type GroupProps = React.HTMLAttributes<HTMLDivElement>;
|
|
221
|
+
declare function Group({ children, ...props }: GroupProps): react_jsx_runtime.JSX.Element;
|
|
222
|
+
|
|
223
|
+
type GroupLabelProps = React.HTMLAttributes<HTMLDivElement>;
|
|
224
|
+
declare function GroupLabel({ children, ...props }: GroupLabelProps): react_jsx_runtime.JSX.Element;
|
|
225
|
+
|
|
226
|
+
declare function HiddenSelect(): react_jsx_runtime.JSX.Element | null;
|
|
227
|
+
|
|
228
|
+
type ScrollUpButtonProps = Omit<SelectScrollButtonProps, "direction">;
|
|
229
|
+
declare function ScrollUpButton(props: ScrollUpButtonProps): react_jsx_runtime.JSX.Element;
|
|
230
|
+
|
|
231
|
+
type ScrollDownButtonProps = Omit<SelectScrollButtonProps, "direction">;
|
|
232
|
+
declare function ScrollDownButton(props: ScrollDownButtonProps): react_jsx_runtime.JSX.Element;
|
|
233
|
+
|
|
234
|
+
declare const index_parts_Backdrop: typeof Backdrop;
|
|
235
|
+
declare const index_parts_ClearTrigger: typeof ClearTrigger;
|
|
236
|
+
declare const index_parts_Content: typeof Content;
|
|
237
|
+
declare const index_parts_Group: typeof Group;
|
|
238
|
+
declare const index_parts_GroupLabel: typeof GroupLabel;
|
|
239
|
+
declare const index_parts_HiddenSelect: typeof HiddenSelect;
|
|
240
|
+
declare const index_parts_Icon: typeof Icon;
|
|
241
|
+
declare const index_parts_Item: typeof Item;
|
|
242
|
+
declare const index_parts_ItemIndicator: typeof ItemIndicator;
|
|
243
|
+
declare const index_parts_ItemText: typeof ItemText;
|
|
244
|
+
declare const index_parts_Label: typeof Label;
|
|
245
|
+
declare const index_parts_List: typeof List;
|
|
246
|
+
declare const index_parts_Portal: typeof Portal;
|
|
247
|
+
declare const index_parts_Positioner: typeof Positioner;
|
|
248
|
+
declare const index_parts_Root: typeof Root;
|
|
249
|
+
declare const index_parts_ScrollDownButton: typeof ScrollDownButton;
|
|
250
|
+
declare const index_parts_ScrollUpButton: typeof ScrollUpButton;
|
|
251
|
+
declare const index_parts_Trigger: typeof Trigger;
|
|
252
|
+
declare const index_parts_Value: typeof Value;
|
|
253
|
+
declare namespace index_parts {
|
|
254
|
+
export { index_parts_Backdrop as Backdrop, index_parts_ClearTrigger as ClearTrigger, index_parts_Content as Content, index_parts_Group as Group, index_parts_GroupLabel as GroupLabel, index_parts_HiddenSelect as HiddenSelect, index_parts_Icon as Icon, index_parts_Item as Item, index_parts_ItemIndicator as ItemIndicator, index_parts_ItemText as ItemText, index_parts_Label as Label, index_parts_List as List, index_parts_Portal as Portal, index_parts_Positioner as Positioner, index_parts_Root as Root, index_parts_ScrollDownButton as ScrollDownButton, index_parts_ScrollUpButton as ScrollUpButton, index_parts_Trigger as Trigger, index_parts_Value as Value };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
declare function scrollToIndexInState(state: SelectStoreState, index: number, options?: ScrollToIndexOptions): void;
|
|
258
|
+
|
|
259
|
+
type Listener = () => void;
|
|
260
|
+
declare class SelectStore {
|
|
261
|
+
private state;
|
|
262
|
+
private listeners;
|
|
263
|
+
constructor(initial?: Partial<SelectStoreState>);
|
|
264
|
+
getState(): SelectStoreState;
|
|
265
|
+
subscribe(listener: Listener): () => void;
|
|
266
|
+
private notify;
|
|
267
|
+
setOpen(open: boolean, source?: "trigger" | null): void;
|
|
268
|
+
setValue(value: string | null): void;
|
|
269
|
+
setValues(values: string[]): void;
|
|
270
|
+
toggleValue(value: string, comparator: SelectItemEqualFn): void;
|
|
271
|
+
clearValue(multiple: boolean): void;
|
|
272
|
+
isSelected(value: string, multiple: boolean, comparator: SelectItemEqualFn): boolean;
|
|
273
|
+
setHighlightedValue(value: string | null): void;
|
|
274
|
+
registerItem(record: SelectItemRecord): void;
|
|
275
|
+
unregisterItem(value: string): void;
|
|
276
|
+
updateItemRef(value: string, ref: HTMLElement | null): void;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
interface SelectRefs {
|
|
280
|
+
triggerRef: RefObject<HTMLButtonElement | null>;
|
|
281
|
+
contentRef: RefObject<HTMLDivElement | null>;
|
|
282
|
+
listRef: RefObject<HTMLUListElement | null>;
|
|
283
|
+
}
|
|
284
|
+
interface SelectContextValue {
|
|
285
|
+
store: SelectStore;
|
|
286
|
+
ids: {
|
|
287
|
+
root: string;
|
|
288
|
+
label: string;
|
|
289
|
+
trigger: string;
|
|
290
|
+
content: string;
|
|
291
|
+
};
|
|
292
|
+
refs: SelectRefs;
|
|
293
|
+
config: {
|
|
294
|
+
disabled: boolean;
|
|
295
|
+
required: boolean;
|
|
296
|
+
readOnly: boolean;
|
|
297
|
+
modal: boolean;
|
|
298
|
+
name: string | undefined;
|
|
299
|
+
multiple: boolean;
|
|
300
|
+
items: Record<string, string>;
|
|
301
|
+
isItemEqualToValue: SelectItemEqualFn;
|
|
302
|
+
openOnFocus: boolean;
|
|
303
|
+
};
|
|
304
|
+
isControlledOpen: boolean;
|
|
305
|
+
isControlledValue: boolean;
|
|
306
|
+
onOpenChangeComplete: ((open: boolean) => void) | undefined;
|
|
307
|
+
/** Close the listbox and restore focus to the trigger. */
|
|
308
|
+
close: () => void;
|
|
309
|
+
/** Select a value (toggle in multiple mode, set + close in single mode). */
|
|
310
|
+
selectValue: (value: string) => void;
|
|
311
|
+
/** Alias for selectValue — kept for backward compatibility. */
|
|
312
|
+
selectAndClose: (value: string) => void;
|
|
313
|
+
/** Clear the current selection. */
|
|
314
|
+
clearValue: () => void;
|
|
315
|
+
/** Scroll the list to the item at the given index. */
|
|
316
|
+
scrollToIndex: (index: number, options?: ScrollToIndexOptions) => void;
|
|
317
|
+
}
|
|
318
|
+
declare function useSelectContext(): SelectContextValue;
|
|
319
|
+
|
|
320
|
+
export { type ScrollToIndexAlign, type ScrollToIndexOptions, index_parts as Select, type SelectContentProps, type SelectContextValue, type SelectItemRecord, type SelectRootProps, type SelectScrollDownButtonProps, type SelectScrollUpButtonProps, type SelectStoreState, scrollToIndexInState, useSelectContext };
|