@kenos-ui/react-combobox 0.2.0 → 0.2.2

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 CHANGED
@@ -1,11 +1,47 @@
1
1
  # @kenos-ui/react-combobox
2
2
 
3
+ ## 0.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [9c9de3d]
8
+ - Updated dependencies [f2ea00f]
9
+ - @kenos-ui/utils@1.0.0
10
+
11
+ ## 0.2.1
12
+
13
+ ### Minor Changes
14
+
15
+ - **Kenos UI Combobox — feature release** (`@kenos-ui/react-combobox@0.2.1`)
16
+
17
+ Headless, accessible, composable Combobox primitive for React 19+, fully unstyled.
18
+
19
+ **Compound API**
20
+
21
+ - Parts: `Root`, `Label`, `Input`, `Trigger`, `Content`, `List`, `Item`, `ItemText`, `Empty`, `Clear`
22
+
23
+ **Filtering & selection**
24
+
25
+ - Type-to-filter via `useSelectCollection` from `@kenos-ui/utils`
26
+ - `ComboboxStore`: `open`, `value`, `inputValue`, `highlightedValue`, item registry
27
+ - Keyboard: filter on type, arrow navigation, Enter to select
28
+ - `Empty` state when filtered collection has no matches
29
+ - `Clear` resets value and input text
30
+
31
+ **Popup policy**
32
+
33
+ - Floating UI positioning on `Content`; `lazyMount` / dialog-interop patterns aligned with Select
34
+ - Re-exported from `@kenos-ui/react` as `Combobox` namespace
35
+
36
+ **Packaging**
37
+
38
+ - Add `license: MIT` to `package.json` (fixes npm registry showing "no license")
39
+
3
40
  ## 0.2.0
4
41
 
5
42
  ### Minor Changes
6
43
 
7
44
  - aaa8a57: Initial Combobox scaffold (`@kenos-ui/react-combobox@0.1.0`):
8
-
9
45
  - Parts: Root, Label, Input, Trigger, Content, List, Item, ItemText, Empty, Clear
10
46
  - `ComboboxStore` with `open`, `value`, `inputValue`, `highlightedValue`, item registry
11
47
  - `useSelectCollection` hook in `@kenos-ui/utils` for type-to-filter
package/README.md CHANGED
@@ -11,7 +11,7 @@ pnpm add @kenos-ui/react-combobox
11
11
  ## Usage
12
12
 
13
13
  ```tsx
14
- import { Combobox } from '@kenos-ui/react-combobox';
14
+ import { Combobox } from "@kenos-ui/react-combobox";
15
15
 
16
16
  <Combobox.Root onValueChange={setValue}>
17
17
  <Combobox.Label>Language</Combobox.Label>
@@ -29,23 +29,23 @@ import { Combobox } from '@kenos-ui/react-combobox';
29
29
  <Combobox.Empty>No results</Combobox.Empty>
30
30
  </Combobox.Content>
31
31
  <Combobox.Clear />
32
- </Combobox.Root>
32
+ </Combobox.Root>;
33
33
  ```
34
34
 
35
35
  ## API
36
36
 
37
- | Part | Description |
38
- |------|-------------|
39
- | `Root` | Context + state provider |
40
- | `Label` | Associated `<label>` |
41
- | `Input` | Text input (`role="combobox"`) — type to filter |
42
- | `Trigger` | Button that toggles the listbox |
43
- | `Content` | Listbox container (floating, lazyMount) |
44
- | `List` | `role="listbox"` wrapper |
45
- | `Item` | `role="option"` — registers value/label |
46
- | `ItemText` | Option label slot |
47
- | `Empty` | Shown when the filtered collection is empty |
48
- | `Clear` | Clears value and input text |
37
+ | Part | Description |
38
+ | ---------- | ----------------------------------------------- |
39
+ | `Root` | Context + state provider |
40
+ | `Label` | Associated `<label>` |
41
+ | `Input` | Text input (`role="combobox"`) — type to filter |
42
+ | `Trigger` | Button that toggles the listbox |
43
+ | `Content` | Listbox container (floating, lazyMount) |
44
+ | `List` | `role="listbox"` wrapper |
45
+ | `Item` | `role="option"` — registers value/label |
46
+ | `ItemText` | Option label slot |
47
+ | `Empty` | Shown when the filtered collection is empty |
48
+ | `Clear` | Clears value and input text |
49
49
 
50
50
  ## Store
51
51
 
@@ -65,4 +65,4 @@ Filtering uses `useSelectCollection` from `@kenos-ui/utils` (not a dependency on
65
65
  - `lazyMount` — content is not in the DOM until first opened
66
66
  - Escape `stopPropagation` — closes Combobox without closing a parent Dialog
67
67
 
68
- See [popup-policy.md](../../docs/popup-policy.md).
68
+ See [popup-policy.md](../../docs/popup-policy.md).
package/dist/index.cjs CHANGED
@@ -207,9 +207,7 @@ function Root(props) {
207
207
  const state = store.getState();
208
208
  if (state.value !== prevStoreValue.current) {
209
209
  prevStoreValue.current = state.value;
210
- onValueChangeRef.current?.(
211
- typeof state.value === "string" ? state.value : null
212
- );
210
+ onValueChangeRef.current?.(typeof state.value === "string" ? state.value : null);
213
211
  }
214
212
  });
215
213
  }, [store]);
@@ -308,14 +306,7 @@ function Label({ children, ...props }) {
308
306
  const { ids } = useComboboxContext();
309
307
  return /* @__PURE__ */ jsxRuntime.jsx("label", { id: ids.label, htmlFor: ids.input, ...props, children });
310
308
  }
311
- function Input({
312
- onChange,
313
- onFocus,
314
- onKeyDown,
315
- disabled,
316
- readOnly,
317
- ...props
318
- }) {
309
+ function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }) {
319
310
  const { store, ids, refs, config, close, selectValue } = useComboboxContext();
320
311
  const open = useComboboxStore(store, (s) => s.open);
321
312
  const inputValue = useComboboxStore(store, (s) => s.inputValue);
@@ -363,16 +354,7 @@ function Input({
363
354
  }
364
355
  onKeyDown?.(e);
365
356
  },
366
- [
367
- open,
368
- highlightedValue,
369
- items,
370
- store,
371
- onNavKeyDown,
372
- selectValue,
373
- close,
374
- onKeyDown
375
- ]
357
+ [open, highlightedValue, items, store, onNavKeyDown, selectValue, close, onKeyDown]
376
358
  );
377
359
  return /* @__PURE__ */ jsxRuntime.jsx(
378
360
  "input",
@@ -444,15 +426,11 @@ function Trigger({ children, onClick, disabled, ...props }) {
444
426
  }
445
427
  );
446
428
  }
447
- var ComboboxCollectionContext = react.createContext(
448
- null
449
- );
429
+ var ComboboxCollectionContext = react.createContext(null);
450
430
  function useComboboxCollection() {
451
431
  const ctx = react.useContext(ComboboxCollectionContext);
452
432
  if (!ctx) {
453
- throw new Error(
454
- "Combobox collection context is missing. Render inside <Combobox.Content>."
455
- );
433
+ throw new Error("Combobox collection context is missing. Render inside <Combobox.Content>.");
456
434
  }
457
435
  return ctx;
458
436
  }
@@ -646,7 +624,7 @@ function Item({
646
624
  const isDisabled = disabled || config.disabled || config.readOnly;
647
625
  react.useLayoutEffect(() => {
648
626
  const el = liRef.current;
649
- const label = textValue ?? (el?.textContent ?? value);
627
+ const label = textValue ?? el?.textContent ?? value;
650
628
  store.registerItem({
651
629
  value,
652
630
  label,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.parts.ts","../src/store.ts","../src/context.ts","../src/root/ComboboxRoot.tsx","../src/label/ComboboxLabel.tsx","../src/input/ComboboxInput.tsx","../src/trigger/ComboboxTrigger.tsx","../src/collection-context.ts","../src/content/ComboboxContent.tsx","../src/list/ComboboxList.tsx","../src/item/ComboboxItem.tsx","../src/item-text/ComboboxItemText.tsx","../src/empty/ComboboxEmpty.tsx","../src/clear/ComboboxClear.tsx"],"names":["useSyncExternalStore","useCallback","createContext","useContext","useId","useMemo","useRef","useEffect","restoreFocus","jsx","useListNavigation","useSelectCollection","useFloating","useLayoutEffect","usePresence","useClickOutside","useEscapeKey","useFocusTrap","useState"],"mappings":"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","file":"index.cjs","sourcesContent":["// Parts barrel — exported as the `Combobox` namespace.\n// packages/combobox/src/index.parts.ts\n\nexport { Root } from \"./root/ComboboxRoot\";\nexport { Label } from \"./label/ComboboxLabel\";\nexport { Input } from \"./input/ComboboxInput\";\nexport { Trigger } from \"./trigger/ComboboxTrigger\";\nexport { Content } from \"./content/ComboboxContent\";\nexport { List } from \"./list/ComboboxList\";\nexport { Item } from \"./item/ComboboxItem\";\nexport { ItemText } from \"./item-text/ComboboxItemText\";\nexport { Empty } from \"./empty/ComboboxEmpty\";\nexport { Clear } from \"./clear/ComboboxClear\";","import { useSyncExternalStore, useCallback, useRef } from \"react\";\nimport type { ComboboxItemEqualFn, ComboboxStoreState, ComboboxItemRecord } from \"./types\";\n\n// ── ComboboxStore ────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nexport class ComboboxStore {\n private state: ComboboxStoreState;\n private listeners = new Set<Listener>();\n\n constructor(initial: Partial<ComboboxStoreState> = {}) {\n this.state = {\n open: false,\n openSource: null,\n value: null,\n inputValue: \"\",\n highlightedValue: null,\n items: new Map(),\n ...initial,\n };\n }\n\n getState(): ComboboxStoreState {\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: \"input\" | \"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 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 setInputValue(inputValue: string): void {\n if (this.state.inputValue === inputValue) return;\n this.state = { ...this.state, inputValue };\n this.notify();\n }\n\n clearValue(): void {\n if (this.state.value === null && this.state.inputValue === \"\") return;\n this.state = { ...this.state, value: null, inputValue: \"\" };\n this.notify();\n }\n\n isSelected(value: string, comparator: ComboboxItemEqualFn): boolean {\n const current = this.state.value;\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: ComboboxItemRecord): 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// ── useComboboxStore ─────────────────────────────────────────────────────────\n\n/**\n * Subscribe to a slice of the ComboboxStore.\n * Re-renders only when the selected slice changes (by reference).\n */\nexport function useComboboxStore<T>(\n store: ComboboxStore,\n selector: (s: ComboboxStoreState) => T,\n): T {\n return useSyncExternalStore(\n useCallback((cb) => store.subscribe(cb), [store]),\n () => selector(store.getState()),\n () => selector(store.getState()),\n );\n}\n\n// ── useComboboxStateRef ──────────────────────────────────────────────────────\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 useComboboxStateRef(\n store: ComboboxStore,\n): React.RefObject<ComboboxStoreState> {\n const ref = useRef(store.getState());\n ref.current = store.getState();\n return ref;\n}","import { createContext, useContext, type RefObject } from \"react\";\nimport type { SelectCollectionFilterFn } from \"@kenos-ui/utils\";\nimport type { ComboboxStore } from \"./store\";\nimport type { ComboboxItemEqualFn } from \"./types\";\n\nexport interface ComboboxRefs {\n inputRef: RefObject<HTMLInputElement | null>;\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n listRef: RefObject<HTMLUListElement | null>;\n}\n\nexport interface ComboboxContextValue {\n store: ComboboxStore;\n ids: {\n root: string;\n label: string;\n input: string;\n trigger: string;\n content: string;\n };\n refs: ComboboxRefs;\n config: {\n disabled: boolean;\n required: boolean;\n readOnly: boolean;\n modal: boolean;\n items: Record<string, string>;\n isItemEqualToValue: ComboboxItemEqualFn;\n filter: SelectCollectionFilterFn;\n };\n isControlledOpen: boolean;\n isControlledValue: boolean;\n isControlledInputValue: boolean;\n onOpenChangeComplete: ((open: boolean) => void) | undefined;\n /** Close the listbox and restore focus to the input. */\n close: () => void;\n /** Select a value, sync input text, and close. */\n selectValue: (value: string) => void;\n /** Clear the current selection and input text. */\n clearValue: () => void;\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nexport function useComboboxContext(): ComboboxContextValue {\n const ctx = useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(\"Combobox compound components must be rendered inside <Combobox.Root>.\");\n }\n return ctx;\n}","import React, { useId, useMemo, useRef, useEffect, useCallback } from \"react\";\nimport { restoreFocus } from \"@kenos-ui/utils\";\nimport { ComboboxStore } from \"../store\";\nimport { ComboboxContext } from \"../context\";\nimport type { ComboboxRootProps } from \"../types\";\n\nconst defaultIsItemEqualToValue = (a: string, b: string) => a === b;\n\nfunction resolveLabel(\n value: string | null,\n items: Map<string, { label: string }>,\n staticItems: Record<string, string>,\n): string {\n if (value == null) return \"\";\n return items.get(value)?.label ?? staticItems[value] ?? value;\n}\n\nexport function Root(props: ComboboxRootProps) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n inputValue,\n defaultInputValue,\n onInputValueChange,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n disabled = false,\n required = false,\n readOnly = false,\n modal = false,\n id,\n items = {},\n isItemEqualToValue = defaultIsItemEqualToValue,\n filter,\n } = props;\n\n const uid = useId();\n const prefix = id ?? `cbx-${uid.replace(/:/g, \"\")}`;\n\n const ids = useMemo(\n () => ({\n root: prefix,\n label: `${prefix}-label`,\n input: `${prefix}-input`,\n trigger: `${prefix}-trigger`,\n content: `${prefix}-content`,\n }),\n [prefix],\n );\n\n const inputRef = useRef<HTMLInputElement | null>(null);\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 const isControlledInputValue = inputValue !== undefined;\n\n const initialValue = isControlledValue ? (value ?? null) : (defaultValue ?? null);\n const initialInputValue = isControlledInputValue\n ? (inputValue ?? \"\")\n : (defaultInputValue ?? resolveLabel(initialValue, new Map(), items));\n\n const storeRef = useRef<ComboboxStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new ComboboxStore({\n value: initialValue,\n inputValue: initialInputValue,\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 (value === prevControlledValue.current) return;\n prevControlledValue.current = value;\n store.setValue(typeof value === \"string\" ? value : null);\n }, [isControlledValue, value, store]);\n\n const prevControlledInputValue = useRef(inputValue);\n useEffect(() => {\n if (!isControlledInputValue) return;\n if (inputValue === prevControlledInputValue.current) return;\n prevControlledInputValue.current = inputValue;\n store.setInputValue(inputValue ?? \"\");\n }, [isControlledInputValue, inputValue, store]);\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 (state.value !== prevStoreValue.current) {\n prevStoreValue.current = state.value;\n onValueChangeRef.current?.(\n typeof state.value === \"string\" ? state.value : null,\n );\n }\n });\n }, [store]);\n\n const onInputValueChangeRef = useRef(onInputValueChange);\n onInputValueChangeRef.current = onInputValueChange;\n\n const prevStoreInputValue = useRef(store.getState().inputValue);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (state.inputValue !== prevStoreInputValue.current) {\n prevStoreInputValue.current = state.inputValue;\n onInputValueChangeRef.current?.(state.inputValue);\n }\n });\n }, [store]);\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\" ? \"trigger\" : \"input\",\n trigger: inputRef.current ?? triggerRef.current,\n });\n }, [store]);\n\n const selectValue = useCallback(\n (itemValue: string) => {\n const item = store.getState().items.get(itemValue);\n const label = item?.label ?? items[itemValue] ?? itemValue;\n store.setValue(itemValue);\n store.setInputValue(label);\n close();\n },\n [store, close, items],\n );\n\n const clearValue = useCallback(() => {\n store.clearValue();\n }, [store]);\n\n const config = useMemo(\n () => ({\n disabled,\n required,\n readOnly,\n modal,\n items,\n isItemEqualToValue,\n filter: filter ?? ((item, query) => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) return true;\n return (\n item.textValue.toLowerCase().includes(normalized) ||\n item.label.toLowerCase().includes(normalized)\n );\n }),\n }),\n [disabled, required, readOnly, modal, items, isItemEqualToValue, filter],\n );\n\n const ctx = useMemo(\n () => ({\n store,\n ids,\n refs: { inputRef, triggerRef, contentRef, listRef },\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n }),\n [\n store,\n ids,\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n ],\n );\n\n return <ComboboxContext.Provider value={ctx}>{children}</ComboboxContext.Provider>;\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;\n\nexport function Label({ children, ...props }: LabelProps) {\n const { ids } = useComboboxContext();\n return (\n <label id={ids.label} htmlFor={ids.input} {...props}>\n {children}\n </label>\n );\n}","import React, { useCallback } from \"react\";\nimport { useListNavigation } from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"role\" | \"aria-expanded\" | \"aria-controls\" | \"aria-autocomplete\" | \"value\" | \"defaultValue\"\n>;\n\nexport function Input({\n onChange,\n onFocus,\n onKeyDown,\n disabled,\n readOnly,\n ...props\n}: InputProps) {\n const { store, ids, refs, config, close, selectValue } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const items = useComboboxStore(store, (s) => s.items);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = readOnly ?? config.readOnly;\n\n const filteredItems = Array.from(items.values())\n .filter((item) => config.filter(item, inputValue))\n .map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { onKeyDown: onNavKeyDown } = useListNavigation({\n enabled: open && !isDisabled && !isReadOnly,\n items: filteredItems,\n highlightedValue,\n onHighlight: (v) => store.setHighlightedValue(v),\n loop: true,\n });\n\n const activeDescendantId =\n open && highlightedValue != null ? `${ids.content}-opt-${highlightedValue}` : undefined;\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n if (!open) {\n store.setOpen(true, \"input\");\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Enter\" && open && highlightedValue != null) {\n const item = items.get(highlightedValue);\n if (item && !item.disabled) {\n e.preventDefault();\n selectValue(highlightedValue);\n }\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Escape\" && open) {\n e.preventDefault();\n e.stopPropagation();\n close();\n onKeyDown?.(e);\n return;\n }\n\n onKeyDown?.(e);\n },\n [\n open,\n highlightedValue,\n items,\n store,\n onNavKeyDown,\n selectValue,\n close,\n onKeyDown,\n ],\n );\n\n return (\n <input\n ref={refs.inputRef}\n type=\"text\"\n id={ids.input}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-autocomplete=\"list\"\n aria-labelledby={ids.label ? `${ids.label} ${ids.input}` : undefined}\n aria-activedescendant={activeDescendantId}\n aria-disabled={isDisabled || isReadOnly || undefined}\n autoComplete=\"off\"\n data-disabled={isDisabled || isReadOnly ? \"true\" : undefined}\n data-open={open ? \"true\" : undefined}\n data-state={open ? \"open\" : \"closed\"}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={inputValue}\n onChange={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setInputValue(e.target.value);\n store.setOpen(true, \"input\");\n onChange?.(e);\n }}\n onFocus={(e) => {\n if (!isDisabled && !isReadOnly) {\n store.setOpen(true, \"input\");\n }\n onFocus?.(e);\n }}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type TriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-expanded\" | \"aria-controls\"\n>;\n\nexport function Trigger({ children, onClick, disabled, ...props }: TriggerProps) {\n const { store, ids, refs, config } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = config.readOnly;\n\n return (\n <button\n ref={refs.triggerRef}\n type=\"button\"\n id={ids.trigger}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-label=\"Toggle suggestions\"\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 tabIndex={-1}\n onClick={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setOpen(!open, \"trigger\");\n refs.inputRef.current?.focus();\n onClick?.(e);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}","import { createContext, useContext } from \"react\";\nimport type { SelectCollectionItem } from \"@kenos-ui/utils\";\n\nexport interface ComboboxCollectionContextValue {\n filteredItems: SelectCollectionItem[];\n enabledItems: SelectCollectionItem[];\n isEmpty: boolean;\n}\n\nexport const ComboboxCollectionContext = createContext<ComboboxCollectionContextValue | null>(\n null,\n);\n\nexport function useComboboxCollection(): ComboboxCollectionContextValue {\n const ctx = useContext(ComboboxCollectionContext);\n if (!ctx) {\n throw new Error(\n \"Combobox collection context is missing. Render inside <Combobox.Content>.\",\n );\n }\n return ctx;\n}","import React, {\n useEffect,\n useCallback,\n useLayoutEffect,\n useState,\n useMemo,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useFloating,\n usePresence,\n useClickOutside,\n useEscapeKey,\n useListNavigation,\n useSelectCollection,\n useFocusTrap,\n} from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { ComboboxCollectionContext } from \"../collection-context\";\nimport type { ComboboxContentProps } from \"../types\";\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 sameWidth = false,\n lazyMount = true,\n unmountOnExit = false,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n style,\n onKeyDown,\n ...props\n}: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>) {\n const {\n store,\n ids,\n refs,\n config,\n close,\n selectValue,\n onOpenChangeComplete: onOpenChangeCompleteRoot,\n } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const allItems = useComboboxStore(store, (s) => s.items);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const onOpenChangeComplete = onOpenChangeCompleteProp ?? onOpenChangeCompleteRoot;\n\n const collection = useSelectCollection({\n items: allItems,\n inputValue,\n filter: config.filter,\n });\n\n const collectionValue = useMemo(\n () => ({\n filteredItems: collection.items,\n enabledItems: collection.enabledItems,\n isEmpty: collection.isEmpty,\n }),\n [collection.items, collection.enabledItems, collection.isEmpty],\n );\n\n const navItems = collection.enabledItems.map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { setReference, setFloating, floatingStyles, isPositioned } = useFloating({\n open,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n useLayoutEffect(() => {\n if (!open) return;\n setReference(refs.inputRef.current);\n }, [open, refs.inputRef, 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.inputRef, 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 { 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 handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n if (highlightedValue != null) {\n e.preventDefault();\n const item = allItems.get(highlightedValue);\n if (item && !item.disabled) {\n selectValue(highlightedValue);\n }\n }\n return;\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n },\n [highlightedValue, allItems, selectValue, onNavKeyDown, 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) 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 // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on open/filter change\n }, [open, inputValue, navItems.length]);\n\n useEffect(() => {\n if (!open || !highlightedValue) return;\n const item = allItems.get(highlightedValue);\n if (typeof item?.ref?.scrollIntoView === \"function\") {\n item.ref.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedValue, allItems, open]);\n\n if (!present && !forceMount) return null;\n\n return (\n <ComboboxCollectionContext.Provider value={collectionValue}>\n <div\n ref={mergedRef}\n id={ids.content}\n data-state={open ? \"open\" : \"closed\"}\n data-open={open ? \"true\" : undefined}\n data-empty={collection.isEmpty ? \"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 </ComboboxCollectionContext.Provider>\n );\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport function List({ children, ...props }: ListProps) {\n const { ids, refs } = useComboboxContext();\n\n return (\n <ul\n ref={refs.listRef}\n role=\"listbox\"\n id={`${ids.content}-list`}\n aria-labelledby={ids.label}\n {...props}\n >\n {children}\n </ul>\n );\n}","import React, { useRef, useLayoutEffect, useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean | undefined;\n textValue?: string | undefined;\n}\n\nItem.displayName = \"Combobox.Item\";\n\nexport function Item({\n value,\n disabled = false,\n textValue,\n children,\n onClick,\n onPointerMove,\n style,\n ...props\n}: ItemProps) {\n const { store, ids, config, selectValue } = useComboboxContext();\n const selectedValue = useComboboxStore(store, (s) => s.value);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const { filteredItems } = useComboboxCollection();\n const liRef = useRef<HTMLLIElement>(null);\n\n const isVisible = filteredItems.some((item) => item.value === value);\n const isSelected =\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 });\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 aria-hidden={!isVisible ? true : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n data-hidden={!isVisible ? \"true\" : undefined}\n tabIndex={-1}\n style={{\n ...style,\n display: isVisible ? style?.display : \"none\",\n }}\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 Combobox.Item. */\nexport function ItemText({ children, ...props }: ItemTextProps) {\n return <span {...props}>{children}</span>;\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport type EmptyProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Empty({ children = \"No results found\", ...props }: EmptyProps) {\n const { store } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const { isEmpty } = useComboboxCollection();\n\n if (!open || !isEmpty) {\n return null;\n }\n\n return (\n <div role=\"status\" aria-live=\"polite\" data-empty=\"true\" {...props}>\n {children}\n </div>\n );\n}","import React, { useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport type { ComboboxClearProps } from \"../types\";\n\nexport function Clear({ onClick, ...props }: ComboboxClearProps) {\n const { store, config, clearValue, refs } = useComboboxContext();\n const value = useComboboxStore(store, (s) => s.value);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const hasValue = value != null || inputValue.length > 0;\n\n const handleActivate = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n refs.inputRef.current?.focus();\n onClick?.(e as React.MouseEvent<HTMLSpanElement>);\n },\n [clearValue, onClick, refs.inputRef],\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\"\n onClick={handleActivate}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}"]}
1
+ {"version":3,"sources":["../src/index.parts.ts","../src/store.ts","../src/context.ts","../src/root/ComboboxRoot.tsx","../src/label/ComboboxLabel.tsx","../src/input/ComboboxInput.tsx","../src/trigger/ComboboxTrigger.tsx","../src/collection-context.ts","../src/content/ComboboxContent.tsx","../src/list/ComboboxList.tsx","../src/item/ComboboxItem.tsx","../src/item-text/ComboboxItemText.tsx","../src/empty/ComboboxEmpty.tsx","../src/clear/ComboboxClear.tsx"],"names":["useSyncExternalStore","useCallback","createContext","useContext","useId","useMemo","useRef","useEffect","restoreFocus","jsx","useListNavigation","useSelectCollection","useFloating","useLayoutEffect","usePresence","useClickOutside","useEscapeKey","useFocusTrap","useState"],"mappings":"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","file":"index.cjs","sourcesContent":["// Parts barrel — exported as the `Combobox` namespace.\n// packages/combobox/src/index.parts.ts\n\nexport { Root } from \"./root/ComboboxRoot\";\nexport { Label } from \"./label/ComboboxLabel\";\nexport { Input } from \"./input/ComboboxInput\";\nexport { Trigger } from \"./trigger/ComboboxTrigger\";\nexport { Content } from \"./content/ComboboxContent\";\nexport { List } from \"./list/ComboboxList\";\nexport { Item } from \"./item/ComboboxItem\";\nexport { ItemText } from \"./item-text/ComboboxItemText\";\nexport { Empty } from \"./empty/ComboboxEmpty\";\nexport { Clear } from \"./clear/ComboboxClear\";\n","import { useSyncExternalStore, useCallback, useRef } from \"react\";\nimport type { ComboboxItemEqualFn, ComboboxStoreState, ComboboxItemRecord } from \"./types\";\n\n// ── ComboboxStore ────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nexport class ComboboxStore {\n private state: ComboboxStoreState;\n private listeners = new Set<Listener>();\n\n constructor(initial: Partial<ComboboxStoreState> = {}) {\n this.state = {\n open: false,\n openSource: null,\n value: null,\n inputValue: \"\",\n highlightedValue: null,\n items: new Map(),\n ...initial,\n };\n }\n\n getState(): ComboboxStoreState {\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: \"input\" | \"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 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 setInputValue(inputValue: string): void {\n if (this.state.inputValue === inputValue) return;\n this.state = { ...this.state, inputValue };\n this.notify();\n }\n\n clearValue(): void {\n if (this.state.value === null && this.state.inputValue === \"\") return;\n this.state = { ...this.state, value: null, inputValue: \"\" };\n this.notify();\n }\n\n isSelected(value: string, comparator: ComboboxItemEqualFn): boolean {\n const current = this.state.value;\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: ComboboxItemRecord): 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// ── useComboboxStore ─────────────────────────────────────────────────────────\n\n/**\n * Subscribe to a slice of the ComboboxStore.\n * Re-renders only when the selected slice changes (by reference).\n */\nexport function useComboboxStore<T>(\n store: ComboboxStore,\n selector: (s: ComboboxStoreState) => T,\n): T {\n return useSyncExternalStore(\n useCallback((cb) => store.subscribe(cb), [store]),\n () => selector(store.getState()),\n () => selector(store.getState()),\n );\n}\n\n// ── useComboboxStateRef ──────────────────────────────────────────────────────\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 useComboboxStateRef(store: ComboboxStore): React.RefObject<ComboboxStoreState> {\n const ref = useRef(store.getState());\n ref.current = store.getState();\n return ref;\n}\n","import { createContext, useContext, type RefObject } from \"react\";\nimport type { SelectCollectionFilterFn } from \"@kenos-ui/utils\";\nimport type { ComboboxStore } from \"./store\";\nimport type { ComboboxItemEqualFn } from \"./types\";\n\nexport interface ComboboxRefs {\n inputRef: RefObject<HTMLInputElement | null>;\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n listRef: RefObject<HTMLUListElement | null>;\n}\n\nexport interface ComboboxContextValue {\n store: ComboboxStore;\n ids: {\n root: string;\n label: string;\n input: string;\n trigger: string;\n content: string;\n };\n refs: ComboboxRefs;\n config: {\n disabled: boolean;\n required: boolean;\n readOnly: boolean;\n modal: boolean;\n items: Record<string, string>;\n isItemEqualToValue: ComboboxItemEqualFn;\n filter: SelectCollectionFilterFn;\n };\n isControlledOpen: boolean;\n isControlledValue: boolean;\n isControlledInputValue: boolean;\n onOpenChangeComplete: ((open: boolean) => void) | undefined;\n /** Close the listbox and restore focus to the input. */\n close: () => void;\n /** Select a value, sync input text, and close. */\n selectValue: (value: string) => void;\n /** Clear the current selection and input text. */\n clearValue: () => void;\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nexport function useComboboxContext(): ComboboxContextValue {\n const ctx = useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(\"Combobox compound components must be rendered inside <Combobox.Root>.\");\n }\n return ctx;\n}\n","import React, { useId, useMemo, useRef, useEffect, useCallback } from \"react\";\nimport { restoreFocus } from \"@kenos-ui/utils\";\nimport { ComboboxStore } from \"../store\";\nimport { ComboboxContext } from \"../context\";\nimport type { ComboboxRootProps } from \"../types\";\n\nconst defaultIsItemEqualToValue = (a: string, b: string) => a === b;\n\nfunction resolveLabel(\n value: string | null,\n items: Map<string, { label: string }>,\n staticItems: Record<string, string>,\n): string {\n if (value == null) return \"\";\n return items.get(value)?.label ?? staticItems[value] ?? value;\n}\n\nexport function Root(props: ComboboxRootProps) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n inputValue,\n defaultInputValue,\n onInputValueChange,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n disabled = false,\n required = false,\n readOnly = false,\n modal = false,\n id,\n items = {},\n isItemEqualToValue = defaultIsItemEqualToValue,\n filter,\n } = props;\n\n const uid = useId();\n const prefix = id ?? `cbx-${uid.replace(/:/g, \"\")}`;\n\n const ids = useMemo(\n () => ({\n root: prefix,\n label: `${prefix}-label`,\n input: `${prefix}-input`,\n trigger: `${prefix}-trigger`,\n content: `${prefix}-content`,\n }),\n [prefix],\n );\n\n const inputRef = useRef<HTMLInputElement | null>(null);\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 const isControlledInputValue = inputValue !== undefined;\n\n const initialValue = isControlledValue ? (value ?? null) : (defaultValue ?? null);\n const initialInputValue = isControlledInputValue\n ? (inputValue ?? \"\")\n : (defaultInputValue ?? resolveLabel(initialValue, new Map(), items));\n\n const storeRef = useRef<ComboboxStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new ComboboxStore({\n value: initialValue,\n inputValue: initialInputValue,\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 (value === prevControlledValue.current) return;\n prevControlledValue.current = value;\n store.setValue(typeof value === \"string\" ? value : null);\n }, [isControlledValue, value, store]);\n\n const prevControlledInputValue = useRef(inputValue);\n useEffect(() => {\n if (!isControlledInputValue) return;\n if (inputValue === prevControlledInputValue.current) return;\n prevControlledInputValue.current = inputValue;\n store.setInputValue(inputValue ?? \"\");\n }, [isControlledInputValue, inputValue, store]);\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 (state.value !== prevStoreValue.current) {\n prevStoreValue.current = state.value;\n onValueChangeRef.current?.(typeof state.value === \"string\" ? state.value : null);\n }\n });\n }, [store]);\n\n const onInputValueChangeRef = useRef(onInputValueChange);\n onInputValueChangeRef.current = onInputValueChange;\n\n const prevStoreInputValue = useRef(store.getState().inputValue);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (state.inputValue !== prevStoreInputValue.current) {\n prevStoreInputValue.current = state.inputValue;\n onInputValueChangeRef.current?.(state.inputValue);\n }\n });\n }, [store]);\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\" ? \"trigger\" : \"input\",\n trigger: inputRef.current ?? triggerRef.current,\n });\n }, [store]);\n\n const selectValue = useCallback(\n (itemValue: string) => {\n const item = store.getState().items.get(itemValue);\n const label = item?.label ?? items[itemValue] ?? itemValue;\n store.setValue(itemValue);\n store.setInputValue(label);\n close();\n },\n [store, close, items],\n );\n\n const clearValue = useCallback(() => {\n store.clearValue();\n }, [store]);\n\n const config = useMemo(\n () => ({\n disabled,\n required,\n readOnly,\n modal,\n items,\n isItemEqualToValue,\n filter:\n filter ??\n ((item, query) => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) return true;\n return (\n item.textValue.toLowerCase().includes(normalized) ||\n item.label.toLowerCase().includes(normalized)\n );\n }),\n }),\n [disabled, required, readOnly, modal, items, isItemEqualToValue, filter],\n );\n\n const ctx = useMemo(\n () => ({\n store,\n ids,\n refs: { inputRef, triggerRef, contentRef, listRef },\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n }),\n [\n store,\n ids,\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n ],\n );\n\n return <ComboboxContext.Provider value={ctx}>{children}</ComboboxContext.Provider>;\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;\n\nexport function Label({ children, ...props }: LabelProps) {\n const { ids } = useComboboxContext();\n return (\n <label id={ids.label} htmlFor={ids.input} {...props}>\n {children}\n </label>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useListNavigation } from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"role\" | \"aria-expanded\" | \"aria-controls\" | \"aria-autocomplete\" | \"value\" | \"defaultValue\"\n>;\n\nexport function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps) {\n const { store, ids, refs, config, close, selectValue } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const items = useComboboxStore(store, (s) => s.items);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = readOnly ?? config.readOnly;\n\n const filteredItems = Array.from(items.values())\n .filter((item) => config.filter(item, inputValue))\n .map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { onKeyDown: onNavKeyDown } = useListNavigation({\n enabled: open && !isDisabled && !isReadOnly,\n items: filteredItems,\n highlightedValue,\n onHighlight: (v) => store.setHighlightedValue(v),\n loop: true,\n });\n\n const activeDescendantId =\n open && highlightedValue != null ? `${ids.content}-opt-${highlightedValue}` : undefined;\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n if (!open) {\n store.setOpen(true, \"input\");\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Enter\" && open && highlightedValue != null) {\n const item = items.get(highlightedValue);\n if (item && !item.disabled) {\n e.preventDefault();\n selectValue(highlightedValue);\n }\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Escape\" && open) {\n e.preventDefault();\n e.stopPropagation();\n close();\n onKeyDown?.(e);\n return;\n }\n\n onKeyDown?.(e);\n },\n [open, highlightedValue, items, store, onNavKeyDown, selectValue, close, onKeyDown],\n );\n\n return (\n <input\n ref={refs.inputRef}\n type=\"text\"\n id={ids.input}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-autocomplete=\"list\"\n aria-labelledby={ids.label ? `${ids.label} ${ids.input}` : undefined}\n aria-activedescendant={activeDescendantId}\n aria-disabled={isDisabled || isReadOnly || undefined}\n autoComplete=\"off\"\n data-disabled={isDisabled || isReadOnly ? \"true\" : undefined}\n data-open={open ? \"true\" : undefined}\n data-state={open ? \"open\" : \"closed\"}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={inputValue}\n onChange={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setInputValue(e.target.value);\n store.setOpen(true, \"input\");\n onChange?.(e);\n }}\n onFocus={(e) => {\n if (!isDisabled && !isReadOnly) {\n store.setOpen(true, \"input\");\n }\n onFocus?.(e);\n }}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type TriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-expanded\" | \"aria-controls\"\n>;\n\nexport function Trigger({ children, onClick, disabled, ...props }: TriggerProps) {\n const { store, ids, refs, config } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = config.readOnly;\n\n return (\n <button\n ref={refs.triggerRef}\n type=\"button\"\n id={ids.trigger}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-label=\"Toggle suggestions\"\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 tabIndex={-1}\n onClick={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setOpen(!open, \"trigger\");\n refs.inputRef.current?.focus();\n onClick?.(e);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { SelectCollectionItem } from \"@kenos-ui/utils\";\n\nexport interface ComboboxCollectionContextValue {\n filteredItems: SelectCollectionItem[];\n enabledItems: SelectCollectionItem[];\n isEmpty: boolean;\n}\n\nexport const ComboboxCollectionContext = createContext<ComboboxCollectionContextValue | null>(null);\n\nexport function useComboboxCollection(): ComboboxCollectionContextValue {\n const ctx = useContext(ComboboxCollectionContext);\n if (!ctx) {\n throw new Error(\"Combobox collection context is missing. Render inside <Combobox.Content>.\");\n }\n return ctx;\n}\n","import React, {\n useEffect,\n useCallback,\n useLayoutEffect,\n useState,\n useMemo,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useFloating,\n usePresence,\n useClickOutside,\n useEscapeKey,\n useListNavigation,\n useSelectCollection,\n useFocusTrap,\n} from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { ComboboxCollectionContext } from \"../collection-context\";\nimport type { ComboboxContentProps } from \"../types\";\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 sameWidth = false,\n lazyMount = true,\n unmountOnExit = false,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n style,\n onKeyDown,\n ...props\n}: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>) {\n const {\n store,\n ids,\n refs,\n config,\n close,\n selectValue,\n onOpenChangeComplete: onOpenChangeCompleteRoot,\n } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const allItems = useComboboxStore(store, (s) => s.items);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const onOpenChangeComplete = onOpenChangeCompleteProp ?? onOpenChangeCompleteRoot;\n\n const collection = useSelectCollection({\n items: allItems,\n inputValue,\n filter: config.filter,\n });\n\n const collectionValue = useMemo(\n () => ({\n filteredItems: collection.items,\n enabledItems: collection.enabledItems,\n isEmpty: collection.isEmpty,\n }),\n [collection.items, collection.enabledItems, collection.isEmpty],\n );\n\n const navItems = collection.enabledItems.map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { setReference, setFloating, floatingStyles, isPositioned } = useFloating({\n open,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n useLayoutEffect(() => {\n if (!open) return;\n setReference(refs.inputRef.current);\n }, [open, refs.inputRef, 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.inputRef, 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 { 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 handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n if (highlightedValue != null) {\n e.preventDefault();\n const item = allItems.get(highlightedValue);\n if (item && !item.disabled) {\n selectValue(highlightedValue);\n }\n }\n return;\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n },\n [highlightedValue, allItems, selectValue, onNavKeyDown, 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) 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 // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on open/filter change\n }, [open, inputValue, navItems.length]);\n\n useEffect(() => {\n if (!open || !highlightedValue) return;\n const item = allItems.get(highlightedValue);\n if (typeof item?.ref?.scrollIntoView === \"function\") {\n item.ref.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedValue, allItems, open]);\n\n if (!present && !forceMount) return null;\n\n return (\n <ComboboxCollectionContext.Provider value={collectionValue}>\n <div\n ref={mergedRef}\n id={ids.content}\n data-state={open ? \"open\" : \"closed\"}\n data-open={open ? \"true\" : undefined}\n data-empty={collection.isEmpty ? \"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 </ComboboxCollectionContext.Provider>\n );\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport function List({ children, ...props }: ListProps) {\n const { ids, refs } = useComboboxContext();\n\n return (\n <ul\n ref={refs.listRef}\n role=\"listbox\"\n id={`${ids.content}-list`}\n aria-labelledby={ids.label}\n {...props}\n >\n {children}\n </ul>\n );\n}\n","import React, { useRef, useLayoutEffect, useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean | undefined;\n textValue?: string | undefined;\n}\n\nItem.displayName = \"Combobox.Item\";\n\nexport function Item({\n value,\n disabled = false,\n textValue,\n children,\n onClick,\n onPointerMove,\n style,\n ...props\n}: ItemProps) {\n const { store, ids, config, selectValue } = useComboboxContext();\n const selectedValue = useComboboxStore(store, (s) => s.value);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const { filteredItems } = useComboboxCollection();\n const liRef = useRef<HTMLLIElement>(null);\n\n const isVisible = filteredItems.some((item) => item.value === value);\n const isSelected =\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 });\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 aria-hidden={!isVisible ? true : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n data-hidden={!isVisible ? \"true\" : undefined}\n tabIndex={-1}\n style={{\n ...style,\n display: isVisible ? style?.display : \"none\",\n }}\n onClick={handleClick}\n onPointerMove={handlePointerMove}\n {...props}\n >\n {children}\n </li>\n );\n}\n","import React from \"react\";\n\nexport type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** Text label for a Combobox.Item. */\nexport function ItemText({ children, ...props }: ItemTextProps) {\n return <span {...props}>{children}</span>;\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport type EmptyProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Empty({ children = \"No results found\", ...props }: EmptyProps) {\n const { store } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const { isEmpty } = useComboboxCollection();\n\n if (!open || !isEmpty) {\n return null;\n }\n\n return (\n <div role=\"status\" aria-live=\"polite\" data-empty=\"true\" {...props}>\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport type { ComboboxClearProps } from \"../types\";\n\nexport function Clear({ onClick, ...props }: ComboboxClearProps) {\n const { store, config, clearValue, refs } = useComboboxContext();\n const value = useComboboxStore(store, (s) => s.value);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const hasValue = value != null || inputValue.length > 0;\n\n const handleActivate = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n refs.inputRef.current?.focus();\n onClick?.(e as React.MouseEvent<HTMLSpanElement>);\n },\n [clearValue, onClick, refs.inputRef],\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\"\n onClick={handleActivate}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import React, { HTMLAttributes, ReactNode, RefObject } from 'react';
3
2
  import { SelectCollectionFilterFn } from '@kenos-ui/utils';
4
3
 
@@ -85,40 +84,40 @@ interface ComboboxContentProps {
85
84
  interface ComboboxClearProps extends HTMLAttributes<HTMLSpanElement> {
86
85
  }
87
86
 
88
- declare function Root(props: ComboboxRootProps): react_jsx_runtime.JSX.Element;
87
+ declare function Root(props: ComboboxRootProps): React.JSX.Element;
89
88
 
90
89
  type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;
91
- declare function Label({ children, ...props }: LabelProps): react_jsx_runtime.JSX.Element;
90
+ declare function Label({ children, ...props }: LabelProps): React.JSX.Element;
92
91
 
93
92
  type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, "role" | "aria-expanded" | "aria-controls" | "aria-autocomplete" | "value" | "defaultValue">;
94
- declare function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps): react_jsx_runtime.JSX.Element;
93
+ declare function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps): React.JSX.Element;
95
94
 
96
95
  type TriggerProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "aria-expanded" | "aria-controls">;
97
- declare function Trigger({ children, onClick, disabled, ...props }: TriggerProps): react_jsx_runtime.JSX.Element;
96
+ declare function Trigger({ children, onClick, disabled, ...props }: TriggerProps): React.JSX.Element;
98
97
 
99
- declare function Content({ children, forceMount, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, sameWidth, lazyMount, unmountOnExit, onOpenChangeComplete: onOpenChangeCompleteProp, style, onKeyDown, ...props }: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element | null;
98
+ declare function Content({ children, forceMount, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, sameWidth, lazyMount, unmountOnExit, onOpenChangeComplete: onOpenChangeCompleteProp, style, onKeyDown, ...props }: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>): React.JSX.Element | null;
100
99
 
101
100
  type ListProps = React.HTMLAttributes<HTMLUListElement>;
102
- declare function List({ children, ...props }: ListProps): react_jsx_runtime.JSX.Element;
101
+ declare function List({ children, ...props }: ListProps): React.JSX.Element;
103
102
 
104
103
  interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {
105
104
  value: string;
106
105
  disabled?: boolean | undefined;
107
106
  textValue?: string | undefined;
108
107
  }
109
- declare function Item({ value, disabled, textValue, children, onClick, onPointerMove, style, ...props }: ItemProps): react_jsx_runtime.JSX.Element;
108
+ declare function Item({ value, disabled, textValue, children, onClick, onPointerMove, style, ...props }: ItemProps): React.JSX.Element;
110
109
  declare namespace Item {
111
110
  var displayName: string;
112
111
  }
113
112
 
114
113
  type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;
115
114
  /** Text label for a Combobox.Item. */
116
- declare function ItemText({ children, ...props }: ItemTextProps): react_jsx_runtime.JSX.Element;
115
+ declare function ItemText({ children, ...props }: ItemTextProps): React.JSX.Element;
117
116
 
118
117
  type EmptyProps = React.HTMLAttributes<HTMLDivElement>;
119
- declare function Empty({ children, ...props }: EmptyProps): react_jsx_runtime.JSX.Element | null;
118
+ declare function Empty({ children, ...props }: EmptyProps): React.JSX.Element | null;
120
119
 
121
- declare function Clear({ onClick, ...props }: ComboboxClearProps): react_jsx_runtime.JSX.Element | null;
120
+ declare function Clear({ onClick, ...props }: ComboboxClearProps): React.JSX.Element | null;
122
121
 
123
122
  declare const index_parts_Clear: typeof Clear;
124
123
  declare const index_parts_Content: typeof Content;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import React, { HTMLAttributes, ReactNode, RefObject } from 'react';
3
2
  import { SelectCollectionFilterFn } from '@kenos-ui/utils';
4
3
 
@@ -85,40 +84,40 @@ interface ComboboxContentProps {
85
84
  interface ComboboxClearProps extends HTMLAttributes<HTMLSpanElement> {
86
85
  }
87
86
 
88
- declare function Root(props: ComboboxRootProps): react_jsx_runtime.JSX.Element;
87
+ declare function Root(props: ComboboxRootProps): React.JSX.Element;
89
88
 
90
89
  type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;
91
- declare function Label({ children, ...props }: LabelProps): react_jsx_runtime.JSX.Element;
90
+ declare function Label({ children, ...props }: LabelProps): React.JSX.Element;
92
91
 
93
92
  type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, "role" | "aria-expanded" | "aria-controls" | "aria-autocomplete" | "value" | "defaultValue">;
94
- declare function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps): react_jsx_runtime.JSX.Element;
93
+ declare function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps): React.JSX.Element;
95
94
 
96
95
  type TriggerProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "aria-expanded" | "aria-controls">;
97
- declare function Trigger({ children, onClick, disabled, ...props }: TriggerProps): react_jsx_runtime.JSX.Element;
96
+ declare function Trigger({ children, onClick, disabled, ...props }: TriggerProps): React.JSX.Element;
98
97
 
99
- declare function Content({ children, forceMount, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, sameWidth, lazyMount, unmountOnExit, onOpenChangeComplete: onOpenChangeCompleteProp, style, onKeyDown, ...props }: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element | null;
98
+ declare function Content({ children, forceMount, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, sameWidth, lazyMount, unmountOnExit, onOpenChangeComplete: onOpenChangeCompleteProp, style, onKeyDown, ...props }: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>): React.JSX.Element | null;
100
99
 
101
100
  type ListProps = React.HTMLAttributes<HTMLUListElement>;
102
- declare function List({ children, ...props }: ListProps): react_jsx_runtime.JSX.Element;
101
+ declare function List({ children, ...props }: ListProps): React.JSX.Element;
103
102
 
104
103
  interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {
105
104
  value: string;
106
105
  disabled?: boolean | undefined;
107
106
  textValue?: string | undefined;
108
107
  }
109
- declare function Item({ value, disabled, textValue, children, onClick, onPointerMove, style, ...props }: ItemProps): react_jsx_runtime.JSX.Element;
108
+ declare function Item({ value, disabled, textValue, children, onClick, onPointerMove, style, ...props }: ItemProps): React.JSX.Element;
110
109
  declare namespace Item {
111
110
  var displayName: string;
112
111
  }
113
112
 
114
113
  type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;
115
114
  /** Text label for a Combobox.Item. */
116
- declare function ItemText({ children, ...props }: ItemTextProps): react_jsx_runtime.JSX.Element;
115
+ declare function ItemText({ children, ...props }: ItemTextProps): React.JSX.Element;
117
116
 
118
117
  type EmptyProps = React.HTMLAttributes<HTMLDivElement>;
119
- declare function Empty({ children, ...props }: EmptyProps): react_jsx_runtime.JSX.Element | null;
118
+ declare function Empty({ children, ...props }: EmptyProps): React.JSX.Element | null;
120
119
 
121
- declare function Clear({ onClick, ...props }: ComboboxClearProps): react_jsx_runtime.JSX.Element | null;
120
+ declare function Clear({ onClick, ...props }: ComboboxClearProps): React.JSX.Element | null;
122
121
 
123
122
  declare const index_parts_Clear: typeof Clear;
124
123
  declare const index_parts_Content: typeof Content;
package/dist/index.js CHANGED
@@ -205,9 +205,7 @@ function Root(props) {
205
205
  const state = store.getState();
206
206
  if (state.value !== prevStoreValue.current) {
207
207
  prevStoreValue.current = state.value;
208
- onValueChangeRef.current?.(
209
- typeof state.value === "string" ? state.value : null
210
- );
208
+ onValueChangeRef.current?.(typeof state.value === "string" ? state.value : null);
211
209
  }
212
210
  });
213
211
  }, [store]);
@@ -306,14 +304,7 @@ function Label({ children, ...props }) {
306
304
  const { ids } = useComboboxContext();
307
305
  return /* @__PURE__ */ jsx("label", { id: ids.label, htmlFor: ids.input, ...props, children });
308
306
  }
309
- function Input({
310
- onChange,
311
- onFocus,
312
- onKeyDown,
313
- disabled,
314
- readOnly,
315
- ...props
316
- }) {
307
+ function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }) {
317
308
  const { store, ids, refs, config, close, selectValue } = useComboboxContext();
318
309
  const open = useComboboxStore(store, (s) => s.open);
319
310
  const inputValue = useComboboxStore(store, (s) => s.inputValue);
@@ -361,16 +352,7 @@ function Input({
361
352
  }
362
353
  onKeyDown?.(e);
363
354
  },
364
- [
365
- open,
366
- highlightedValue,
367
- items,
368
- store,
369
- onNavKeyDown,
370
- selectValue,
371
- close,
372
- onKeyDown
373
- ]
355
+ [open, highlightedValue, items, store, onNavKeyDown, selectValue, close, onKeyDown]
374
356
  );
375
357
  return /* @__PURE__ */ jsx(
376
358
  "input",
@@ -442,15 +424,11 @@ function Trigger({ children, onClick, disabled, ...props }) {
442
424
  }
443
425
  );
444
426
  }
445
- var ComboboxCollectionContext = createContext(
446
- null
447
- );
427
+ var ComboboxCollectionContext = createContext(null);
448
428
  function useComboboxCollection() {
449
429
  const ctx = useContext(ComboboxCollectionContext);
450
430
  if (!ctx) {
451
- throw new Error(
452
- "Combobox collection context is missing. Render inside <Combobox.Content>."
453
- );
431
+ throw new Error("Combobox collection context is missing. Render inside <Combobox.Content>.");
454
432
  }
455
433
  return ctx;
456
434
  }
@@ -644,7 +622,7 @@ function Item({
644
622
  const isDisabled = disabled || config.disabled || config.readOnly;
645
623
  useLayoutEffect(() => {
646
624
  const el = liRef.current;
647
- const label = textValue ?? (el?.textContent ?? value);
625
+ const label = textValue ?? el?.textContent ?? value;
648
626
  store.registerItem({
649
627
  value,
650
628
  label,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.parts.ts","../src/store.ts","../src/context.ts","../src/root/ComboboxRoot.tsx","../src/label/ComboboxLabel.tsx","../src/input/ComboboxInput.tsx","../src/trigger/ComboboxTrigger.tsx","../src/collection-context.ts","../src/content/ComboboxContent.tsx","../src/list/ComboboxList.tsx","../src/item/ComboboxItem.tsx","../src/item-text/ComboboxItemText.tsx","../src/empty/ComboboxEmpty.tsx","../src/clear/ComboboxClear.tsx"],"names":["useRef","useCallback","jsx","createContext","useContext","useMemo","useListNavigation","useEffect","useLayoutEffect"],"mappings":"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","file":"index.js","sourcesContent":["// Parts barrel — exported as the `Combobox` namespace.\n// packages/combobox/src/index.parts.ts\n\nexport { Root } from \"./root/ComboboxRoot\";\nexport { Label } from \"./label/ComboboxLabel\";\nexport { Input } from \"./input/ComboboxInput\";\nexport { Trigger } from \"./trigger/ComboboxTrigger\";\nexport { Content } from \"./content/ComboboxContent\";\nexport { List } from \"./list/ComboboxList\";\nexport { Item } from \"./item/ComboboxItem\";\nexport { ItemText } from \"./item-text/ComboboxItemText\";\nexport { Empty } from \"./empty/ComboboxEmpty\";\nexport { Clear } from \"./clear/ComboboxClear\";","import { useSyncExternalStore, useCallback, useRef } from \"react\";\nimport type { ComboboxItemEqualFn, ComboboxStoreState, ComboboxItemRecord } from \"./types\";\n\n// ── ComboboxStore ────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nexport class ComboboxStore {\n private state: ComboboxStoreState;\n private listeners = new Set<Listener>();\n\n constructor(initial: Partial<ComboboxStoreState> = {}) {\n this.state = {\n open: false,\n openSource: null,\n value: null,\n inputValue: \"\",\n highlightedValue: null,\n items: new Map(),\n ...initial,\n };\n }\n\n getState(): ComboboxStoreState {\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: \"input\" | \"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 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 setInputValue(inputValue: string): void {\n if (this.state.inputValue === inputValue) return;\n this.state = { ...this.state, inputValue };\n this.notify();\n }\n\n clearValue(): void {\n if (this.state.value === null && this.state.inputValue === \"\") return;\n this.state = { ...this.state, value: null, inputValue: \"\" };\n this.notify();\n }\n\n isSelected(value: string, comparator: ComboboxItemEqualFn): boolean {\n const current = this.state.value;\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: ComboboxItemRecord): 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// ── useComboboxStore ─────────────────────────────────────────────────────────\n\n/**\n * Subscribe to a slice of the ComboboxStore.\n * Re-renders only when the selected slice changes (by reference).\n */\nexport function useComboboxStore<T>(\n store: ComboboxStore,\n selector: (s: ComboboxStoreState) => T,\n): T {\n return useSyncExternalStore(\n useCallback((cb) => store.subscribe(cb), [store]),\n () => selector(store.getState()),\n () => selector(store.getState()),\n );\n}\n\n// ── useComboboxStateRef ──────────────────────────────────────────────────────\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 useComboboxStateRef(\n store: ComboboxStore,\n): React.RefObject<ComboboxStoreState> {\n const ref = useRef(store.getState());\n ref.current = store.getState();\n return ref;\n}","import { createContext, useContext, type RefObject } from \"react\";\nimport type { SelectCollectionFilterFn } from \"@kenos-ui/utils\";\nimport type { ComboboxStore } from \"./store\";\nimport type { ComboboxItemEqualFn } from \"./types\";\n\nexport interface ComboboxRefs {\n inputRef: RefObject<HTMLInputElement | null>;\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n listRef: RefObject<HTMLUListElement | null>;\n}\n\nexport interface ComboboxContextValue {\n store: ComboboxStore;\n ids: {\n root: string;\n label: string;\n input: string;\n trigger: string;\n content: string;\n };\n refs: ComboboxRefs;\n config: {\n disabled: boolean;\n required: boolean;\n readOnly: boolean;\n modal: boolean;\n items: Record<string, string>;\n isItemEqualToValue: ComboboxItemEqualFn;\n filter: SelectCollectionFilterFn;\n };\n isControlledOpen: boolean;\n isControlledValue: boolean;\n isControlledInputValue: boolean;\n onOpenChangeComplete: ((open: boolean) => void) | undefined;\n /** Close the listbox and restore focus to the input. */\n close: () => void;\n /** Select a value, sync input text, and close. */\n selectValue: (value: string) => void;\n /** Clear the current selection and input text. */\n clearValue: () => void;\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nexport function useComboboxContext(): ComboboxContextValue {\n const ctx = useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(\"Combobox compound components must be rendered inside <Combobox.Root>.\");\n }\n return ctx;\n}","import React, { useId, useMemo, useRef, useEffect, useCallback } from \"react\";\nimport { restoreFocus } from \"@kenos-ui/utils\";\nimport { ComboboxStore } from \"../store\";\nimport { ComboboxContext } from \"../context\";\nimport type { ComboboxRootProps } from \"../types\";\n\nconst defaultIsItemEqualToValue = (a: string, b: string) => a === b;\n\nfunction resolveLabel(\n value: string | null,\n items: Map<string, { label: string }>,\n staticItems: Record<string, string>,\n): string {\n if (value == null) return \"\";\n return items.get(value)?.label ?? staticItems[value] ?? value;\n}\n\nexport function Root(props: ComboboxRootProps) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n inputValue,\n defaultInputValue,\n onInputValueChange,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n disabled = false,\n required = false,\n readOnly = false,\n modal = false,\n id,\n items = {},\n isItemEqualToValue = defaultIsItemEqualToValue,\n filter,\n } = props;\n\n const uid = useId();\n const prefix = id ?? `cbx-${uid.replace(/:/g, \"\")}`;\n\n const ids = useMemo(\n () => ({\n root: prefix,\n label: `${prefix}-label`,\n input: `${prefix}-input`,\n trigger: `${prefix}-trigger`,\n content: `${prefix}-content`,\n }),\n [prefix],\n );\n\n const inputRef = useRef<HTMLInputElement | null>(null);\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 const isControlledInputValue = inputValue !== undefined;\n\n const initialValue = isControlledValue ? (value ?? null) : (defaultValue ?? null);\n const initialInputValue = isControlledInputValue\n ? (inputValue ?? \"\")\n : (defaultInputValue ?? resolveLabel(initialValue, new Map(), items));\n\n const storeRef = useRef<ComboboxStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new ComboboxStore({\n value: initialValue,\n inputValue: initialInputValue,\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 (value === prevControlledValue.current) return;\n prevControlledValue.current = value;\n store.setValue(typeof value === \"string\" ? value : null);\n }, [isControlledValue, value, store]);\n\n const prevControlledInputValue = useRef(inputValue);\n useEffect(() => {\n if (!isControlledInputValue) return;\n if (inputValue === prevControlledInputValue.current) return;\n prevControlledInputValue.current = inputValue;\n store.setInputValue(inputValue ?? \"\");\n }, [isControlledInputValue, inputValue, store]);\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 (state.value !== prevStoreValue.current) {\n prevStoreValue.current = state.value;\n onValueChangeRef.current?.(\n typeof state.value === \"string\" ? state.value : null,\n );\n }\n });\n }, [store]);\n\n const onInputValueChangeRef = useRef(onInputValueChange);\n onInputValueChangeRef.current = onInputValueChange;\n\n const prevStoreInputValue = useRef(store.getState().inputValue);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (state.inputValue !== prevStoreInputValue.current) {\n prevStoreInputValue.current = state.inputValue;\n onInputValueChangeRef.current?.(state.inputValue);\n }\n });\n }, [store]);\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\" ? \"trigger\" : \"input\",\n trigger: inputRef.current ?? triggerRef.current,\n });\n }, [store]);\n\n const selectValue = useCallback(\n (itemValue: string) => {\n const item = store.getState().items.get(itemValue);\n const label = item?.label ?? items[itemValue] ?? itemValue;\n store.setValue(itemValue);\n store.setInputValue(label);\n close();\n },\n [store, close, items],\n );\n\n const clearValue = useCallback(() => {\n store.clearValue();\n }, [store]);\n\n const config = useMemo(\n () => ({\n disabled,\n required,\n readOnly,\n modal,\n items,\n isItemEqualToValue,\n filter: filter ?? ((item, query) => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) return true;\n return (\n item.textValue.toLowerCase().includes(normalized) ||\n item.label.toLowerCase().includes(normalized)\n );\n }),\n }),\n [disabled, required, readOnly, modal, items, isItemEqualToValue, filter],\n );\n\n const ctx = useMemo(\n () => ({\n store,\n ids,\n refs: { inputRef, triggerRef, contentRef, listRef },\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n }),\n [\n store,\n ids,\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n ],\n );\n\n return <ComboboxContext.Provider value={ctx}>{children}</ComboboxContext.Provider>;\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;\n\nexport function Label({ children, ...props }: LabelProps) {\n const { ids } = useComboboxContext();\n return (\n <label id={ids.label} htmlFor={ids.input} {...props}>\n {children}\n </label>\n );\n}","import React, { useCallback } from \"react\";\nimport { useListNavigation } from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"role\" | \"aria-expanded\" | \"aria-controls\" | \"aria-autocomplete\" | \"value\" | \"defaultValue\"\n>;\n\nexport function Input({\n onChange,\n onFocus,\n onKeyDown,\n disabled,\n readOnly,\n ...props\n}: InputProps) {\n const { store, ids, refs, config, close, selectValue } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const items = useComboboxStore(store, (s) => s.items);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = readOnly ?? config.readOnly;\n\n const filteredItems = Array.from(items.values())\n .filter((item) => config.filter(item, inputValue))\n .map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { onKeyDown: onNavKeyDown } = useListNavigation({\n enabled: open && !isDisabled && !isReadOnly,\n items: filteredItems,\n highlightedValue,\n onHighlight: (v) => store.setHighlightedValue(v),\n loop: true,\n });\n\n const activeDescendantId =\n open && highlightedValue != null ? `${ids.content}-opt-${highlightedValue}` : undefined;\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n if (!open) {\n store.setOpen(true, \"input\");\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Enter\" && open && highlightedValue != null) {\n const item = items.get(highlightedValue);\n if (item && !item.disabled) {\n e.preventDefault();\n selectValue(highlightedValue);\n }\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Escape\" && open) {\n e.preventDefault();\n e.stopPropagation();\n close();\n onKeyDown?.(e);\n return;\n }\n\n onKeyDown?.(e);\n },\n [\n open,\n highlightedValue,\n items,\n store,\n onNavKeyDown,\n selectValue,\n close,\n onKeyDown,\n ],\n );\n\n return (\n <input\n ref={refs.inputRef}\n type=\"text\"\n id={ids.input}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-autocomplete=\"list\"\n aria-labelledby={ids.label ? `${ids.label} ${ids.input}` : undefined}\n aria-activedescendant={activeDescendantId}\n aria-disabled={isDisabled || isReadOnly || undefined}\n autoComplete=\"off\"\n data-disabled={isDisabled || isReadOnly ? \"true\" : undefined}\n data-open={open ? \"true\" : undefined}\n data-state={open ? \"open\" : \"closed\"}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={inputValue}\n onChange={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setInputValue(e.target.value);\n store.setOpen(true, \"input\");\n onChange?.(e);\n }}\n onFocus={(e) => {\n if (!isDisabled && !isReadOnly) {\n store.setOpen(true, \"input\");\n }\n onFocus?.(e);\n }}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type TriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-expanded\" | \"aria-controls\"\n>;\n\nexport function Trigger({ children, onClick, disabled, ...props }: TriggerProps) {\n const { store, ids, refs, config } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = config.readOnly;\n\n return (\n <button\n ref={refs.triggerRef}\n type=\"button\"\n id={ids.trigger}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-label=\"Toggle suggestions\"\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 tabIndex={-1}\n onClick={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setOpen(!open, \"trigger\");\n refs.inputRef.current?.focus();\n onClick?.(e);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}","import { createContext, useContext } from \"react\";\nimport type { SelectCollectionItem } from \"@kenos-ui/utils\";\n\nexport interface ComboboxCollectionContextValue {\n filteredItems: SelectCollectionItem[];\n enabledItems: SelectCollectionItem[];\n isEmpty: boolean;\n}\n\nexport const ComboboxCollectionContext = createContext<ComboboxCollectionContextValue | null>(\n null,\n);\n\nexport function useComboboxCollection(): ComboboxCollectionContextValue {\n const ctx = useContext(ComboboxCollectionContext);\n if (!ctx) {\n throw new Error(\n \"Combobox collection context is missing. Render inside <Combobox.Content>.\",\n );\n }\n return ctx;\n}","import React, {\n useEffect,\n useCallback,\n useLayoutEffect,\n useState,\n useMemo,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useFloating,\n usePresence,\n useClickOutside,\n useEscapeKey,\n useListNavigation,\n useSelectCollection,\n useFocusTrap,\n} from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { ComboboxCollectionContext } from \"../collection-context\";\nimport type { ComboboxContentProps } from \"../types\";\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 sameWidth = false,\n lazyMount = true,\n unmountOnExit = false,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n style,\n onKeyDown,\n ...props\n}: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>) {\n const {\n store,\n ids,\n refs,\n config,\n close,\n selectValue,\n onOpenChangeComplete: onOpenChangeCompleteRoot,\n } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const allItems = useComboboxStore(store, (s) => s.items);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const onOpenChangeComplete = onOpenChangeCompleteProp ?? onOpenChangeCompleteRoot;\n\n const collection = useSelectCollection({\n items: allItems,\n inputValue,\n filter: config.filter,\n });\n\n const collectionValue = useMemo(\n () => ({\n filteredItems: collection.items,\n enabledItems: collection.enabledItems,\n isEmpty: collection.isEmpty,\n }),\n [collection.items, collection.enabledItems, collection.isEmpty],\n );\n\n const navItems = collection.enabledItems.map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { setReference, setFloating, floatingStyles, isPositioned } = useFloating({\n open,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n useLayoutEffect(() => {\n if (!open) return;\n setReference(refs.inputRef.current);\n }, [open, refs.inputRef, 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.inputRef, 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 { 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 handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n if (highlightedValue != null) {\n e.preventDefault();\n const item = allItems.get(highlightedValue);\n if (item && !item.disabled) {\n selectValue(highlightedValue);\n }\n }\n return;\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n },\n [highlightedValue, allItems, selectValue, onNavKeyDown, 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) 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 // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on open/filter change\n }, [open, inputValue, navItems.length]);\n\n useEffect(() => {\n if (!open || !highlightedValue) return;\n const item = allItems.get(highlightedValue);\n if (typeof item?.ref?.scrollIntoView === \"function\") {\n item.ref.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedValue, allItems, open]);\n\n if (!present && !forceMount) return null;\n\n return (\n <ComboboxCollectionContext.Provider value={collectionValue}>\n <div\n ref={mergedRef}\n id={ids.content}\n data-state={open ? \"open\" : \"closed\"}\n data-open={open ? \"true\" : undefined}\n data-empty={collection.isEmpty ? \"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 </ComboboxCollectionContext.Provider>\n );\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport function List({ children, ...props }: ListProps) {\n const { ids, refs } = useComboboxContext();\n\n return (\n <ul\n ref={refs.listRef}\n role=\"listbox\"\n id={`${ids.content}-list`}\n aria-labelledby={ids.label}\n {...props}\n >\n {children}\n </ul>\n );\n}","import React, { useRef, useLayoutEffect, useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean | undefined;\n textValue?: string | undefined;\n}\n\nItem.displayName = \"Combobox.Item\";\n\nexport function Item({\n value,\n disabled = false,\n textValue,\n children,\n onClick,\n onPointerMove,\n style,\n ...props\n}: ItemProps) {\n const { store, ids, config, selectValue } = useComboboxContext();\n const selectedValue = useComboboxStore(store, (s) => s.value);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const { filteredItems } = useComboboxCollection();\n const liRef = useRef<HTMLLIElement>(null);\n\n const isVisible = filteredItems.some((item) => item.value === value);\n const isSelected =\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 });\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 aria-hidden={!isVisible ? true : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n data-hidden={!isVisible ? \"true\" : undefined}\n tabIndex={-1}\n style={{\n ...style,\n display: isVisible ? style?.display : \"none\",\n }}\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 Combobox.Item. */\nexport function ItemText({ children, ...props }: ItemTextProps) {\n return <span {...props}>{children}</span>;\n}","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport type EmptyProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Empty({ children = \"No results found\", ...props }: EmptyProps) {\n const { store } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const { isEmpty } = useComboboxCollection();\n\n if (!open || !isEmpty) {\n return null;\n }\n\n return (\n <div role=\"status\" aria-live=\"polite\" data-empty=\"true\" {...props}>\n {children}\n </div>\n );\n}","import React, { useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport type { ComboboxClearProps } from \"../types\";\n\nexport function Clear({ onClick, ...props }: ComboboxClearProps) {\n const { store, config, clearValue, refs } = useComboboxContext();\n const value = useComboboxStore(store, (s) => s.value);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const hasValue = value != null || inputValue.length > 0;\n\n const handleActivate = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n refs.inputRef.current?.focus();\n onClick?.(e as React.MouseEvent<HTMLSpanElement>);\n },\n [clearValue, onClick, refs.inputRef],\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\"\n onClick={handleActivate}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}"]}
1
+ {"version":3,"sources":["../src/index.parts.ts","../src/store.ts","../src/context.ts","../src/root/ComboboxRoot.tsx","../src/label/ComboboxLabel.tsx","../src/input/ComboboxInput.tsx","../src/trigger/ComboboxTrigger.tsx","../src/collection-context.ts","../src/content/ComboboxContent.tsx","../src/list/ComboboxList.tsx","../src/item/ComboboxItem.tsx","../src/item-text/ComboboxItemText.tsx","../src/empty/ComboboxEmpty.tsx","../src/clear/ComboboxClear.tsx"],"names":["useRef","useCallback","jsx","createContext","useContext","useMemo","useListNavigation","useEffect","useLayoutEffect"],"mappings":"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","file":"index.js","sourcesContent":["// Parts barrel — exported as the `Combobox` namespace.\n// packages/combobox/src/index.parts.ts\n\nexport { Root } from \"./root/ComboboxRoot\";\nexport { Label } from \"./label/ComboboxLabel\";\nexport { Input } from \"./input/ComboboxInput\";\nexport { Trigger } from \"./trigger/ComboboxTrigger\";\nexport { Content } from \"./content/ComboboxContent\";\nexport { List } from \"./list/ComboboxList\";\nexport { Item } from \"./item/ComboboxItem\";\nexport { ItemText } from \"./item-text/ComboboxItemText\";\nexport { Empty } from \"./empty/ComboboxEmpty\";\nexport { Clear } from \"./clear/ComboboxClear\";\n","import { useSyncExternalStore, useCallback, useRef } from \"react\";\nimport type { ComboboxItemEqualFn, ComboboxStoreState, ComboboxItemRecord } from \"./types\";\n\n// ── ComboboxStore ────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nexport class ComboboxStore {\n private state: ComboboxStoreState;\n private listeners = new Set<Listener>();\n\n constructor(initial: Partial<ComboboxStoreState> = {}) {\n this.state = {\n open: false,\n openSource: null,\n value: null,\n inputValue: \"\",\n highlightedValue: null,\n items: new Map(),\n ...initial,\n };\n }\n\n getState(): ComboboxStoreState {\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: \"input\" | \"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 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 setInputValue(inputValue: string): void {\n if (this.state.inputValue === inputValue) return;\n this.state = { ...this.state, inputValue };\n this.notify();\n }\n\n clearValue(): void {\n if (this.state.value === null && this.state.inputValue === \"\") return;\n this.state = { ...this.state, value: null, inputValue: \"\" };\n this.notify();\n }\n\n isSelected(value: string, comparator: ComboboxItemEqualFn): boolean {\n const current = this.state.value;\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: ComboboxItemRecord): 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// ── useComboboxStore ─────────────────────────────────────────────────────────\n\n/**\n * Subscribe to a slice of the ComboboxStore.\n * Re-renders only when the selected slice changes (by reference).\n */\nexport function useComboboxStore<T>(\n store: ComboboxStore,\n selector: (s: ComboboxStoreState) => T,\n): T {\n return useSyncExternalStore(\n useCallback((cb) => store.subscribe(cb), [store]),\n () => selector(store.getState()),\n () => selector(store.getState()),\n );\n}\n\n// ── useComboboxStateRef ──────────────────────────────────────────────────────\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 useComboboxStateRef(store: ComboboxStore): React.RefObject<ComboboxStoreState> {\n const ref = useRef(store.getState());\n ref.current = store.getState();\n return ref;\n}\n","import { createContext, useContext, type RefObject } from \"react\";\nimport type { SelectCollectionFilterFn } from \"@kenos-ui/utils\";\nimport type { ComboboxStore } from \"./store\";\nimport type { ComboboxItemEqualFn } from \"./types\";\n\nexport interface ComboboxRefs {\n inputRef: RefObject<HTMLInputElement | null>;\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n listRef: RefObject<HTMLUListElement | null>;\n}\n\nexport interface ComboboxContextValue {\n store: ComboboxStore;\n ids: {\n root: string;\n label: string;\n input: string;\n trigger: string;\n content: string;\n };\n refs: ComboboxRefs;\n config: {\n disabled: boolean;\n required: boolean;\n readOnly: boolean;\n modal: boolean;\n items: Record<string, string>;\n isItemEqualToValue: ComboboxItemEqualFn;\n filter: SelectCollectionFilterFn;\n };\n isControlledOpen: boolean;\n isControlledValue: boolean;\n isControlledInputValue: boolean;\n onOpenChangeComplete: ((open: boolean) => void) | undefined;\n /** Close the listbox and restore focus to the input. */\n close: () => void;\n /** Select a value, sync input text, and close. */\n selectValue: (value: string) => void;\n /** Clear the current selection and input text. */\n clearValue: () => void;\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nexport function useComboboxContext(): ComboboxContextValue {\n const ctx = useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(\"Combobox compound components must be rendered inside <Combobox.Root>.\");\n }\n return ctx;\n}\n","import React, { useId, useMemo, useRef, useEffect, useCallback } from \"react\";\nimport { restoreFocus } from \"@kenos-ui/utils\";\nimport { ComboboxStore } from \"../store\";\nimport { ComboboxContext } from \"../context\";\nimport type { ComboboxRootProps } from \"../types\";\n\nconst defaultIsItemEqualToValue = (a: string, b: string) => a === b;\n\nfunction resolveLabel(\n value: string | null,\n items: Map<string, { label: string }>,\n staticItems: Record<string, string>,\n): string {\n if (value == null) return \"\";\n return items.get(value)?.label ?? staticItems[value] ?? value;\n}\n\nexport function Root(props: ComboboxRootProps) {\n const {\n children,\n value,\n defaultValue,\n onValueChange,\n inputValue,\n defaultInputValue,\n onInputValueChange,\n open,\n defaultOpen,\n onOpenChange,\n onOpenChangeComplete,\n disabled = false,\n required = false,\n readOnly = false,\n modal = false,\n id,\n items = {},\n isItemEqualToValue = defaultIsItemEqualToValue,\n filter,\n } = props;\n\n const uid = useId();\n const prefix = id ?? `cbx-${uid.replace(/:/g, \"\")}`;\n\n const ids = useMemo(\n () => ({\n root: prefix,\n label: `${prefix}-label`,\n input: `${prefix}-input`,\n trigger: `${prefix}-trigger`,\n content: `${prefix}-content`,\n }),\n [prefix],\n );\n\n const inputRef = useRef<HTMLInputElement | null>(null);\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 const isControlledInputValue = inputValue !== undefined;\n\n const initialValue = isControlledValue ? (value ?? null) : (defaultValue ?? null);\n const initialInputValue = isControlledInputValue\n ? (inputValue ?? \"\")\n : (defaultInputValue ?? resolveLabel(initialValue, new Map(), items));\n\n const storeRef = useRef<ComboboxStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = new ComboboxStore({\n value: initialValue,\n inputValue: initialInputValue,\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 (value === prevControlledValue.current) return;\n prevControlledValue.current = value;\n store.setValue(typeof value === \"string\" ? value : null);\n }, [isControlledValue, value, store]);\n\n const prevControlledInputValue = useRef(inputValue);\n useEffect(() => {\n if (!isControlledInputValue) return;\n if (inputValue === prevControlledInputValue.current) return;\n prevControlledInputValue.current = inputValue;\n store.setInputValue(inputValue ?? \"\");\n }, [isControlledInputValue, inputValue, store]);\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 (state.value !== prevStoreValue.current) {\n prevStoreValue.current = state.value;\n onValueChangeRef.current?.(typeof state.value === \"string\" ? state.value : null);\n }\n });\n }, [store]);\n\n const onInputValueChangeRef = useRef(onInputValueChange);\n onInputValueChangeRef.current = onInputValueChange;\n\n const prevStoreInputValue = useRef(store.getState().inputValue);\n useEffect(() => {\n return store.subscribe(() => {\n const state = store.getState();\n if (state.inputValue !== prevStoreInputValue.current) {\n prevStoreInputValue.current = state.inputValue;\n onInputValueChangeRef.current?.(state.inputValue);\n }\n });\n }, [store]);\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\" ? \"trigger\" : \"input\",\n trigger: inputRef.current ?? triggerRef.current,\n });\n }, [store]);\n\n const selectValue = useCallback(\n (itemValue: string) => {\n const item = store.getState().items.get(itemValue);\n const label = item?.label ?? items[itemValue] ?? itemValue;\n store.setValue(itemValue);\n store.setInputValue(label);\n close();\n },\n [store, close, items],\n );\n\n const clearValue = useCallback(() => {\n store.clearValue();\n }, [store]);\n\n const config = useMemo(\n () => ({\n disabled,\n required,\n readOnly,\n modal,\n items,\n isItemEqualToValue,\n filter:\n filter ??\n ((item, query) => {\n const normalized = query.trim().toLowerCase();\n if (!normalized) return true;\n return (\n item.textValue.toLowerCase().includes(normalized) ||\n item.label.toLowerCase().includes(normalized)\n );\n }),\n }),\n [disabled, required, readOnly, modal, items, isItemEqualToValue, filter],\n );\n\n const ctx = useMemo(\n () => ({\n store,\n ids,\n refs: { inputRef, triggerRef, contentRef, listRef },\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n }),\n [\n store,\n ids,\n config,\n isControlledValue,\n isControlledOpen,\n isControlledInputValue,\n onOpenChangeComplete,\n close,\n selectValue,\n clearValue,\n ],\n );\n\n return <ComboboxContext.Provider value={ctx}>{children}</ComboboxContext.Provider>;\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;\n\nexport function Label({ children, ...props }: LabelProps) {\n const { ids } = useComboboxContext();\n return (\n <label id={ids.label} htmlFor={ids.input} {...props}>\n {children}\n </label>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useListNavigation } from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"role\" | \"aria-expanded\" | \"aria-controls\" | \"aria-autocomplete\" | \"value\" | \"defaultValue\"\n>;\n\nexport function Input({ onChange, onFocus, onKeyDown, disabled, readOnly, ...props }: InputProps) {\n const { store, ids, refs, config, close, selectValue } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const items = useComboboxStore(store, (s) => s.items);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = readOnly ?? config.readOnly;\n\n const filteredItems = Array.from(items.values())\n .filter((item) => config.filter(item, inputValue))\n .map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { onKeyDown: onNavKeyDown } = useListNavigation({\n enabled: open && !isDisabled && !isReadOnly,\n items: filteredItems,\n highlightedValue,\n onHighlight: (v) => store.setHighlightedValue(v),\n loop: true,\n });\n\n const activeDescendantId =\n open && highlightedValue != null ? `${ids.content}-opt-${highlightedValue}` : undefined;\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n if (!open) {\n store.setOpen(true, \"input\");\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Enter\" && open && highlightedValue != null) {\n const item = items.get(highlightedValue);\n if (item && !item.disabled) {\n e.preventDefault();\n selectValue(highlightedValue);\n }\n onKeyDown?.(e);\n return;\n }\n\n if (e.key === \"Escape\" && open) {\n e.preventDefault();\n e.stopPropagation();\n close();\n onKeyDown?.(e);\n return;\n }\n\n onKeyDown?.(e);\n },\n [open, highlightedValue, items, store, onNavKeyDown, selectValue, close, onKeyDown],\n );\n\n return (\n <input\n ref={refs.inputRef}\n type=\"text\"\n id={ids.input}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-autocomplete=\"list\"\n aria-labelledby={ids.label ? `${ids.label} ${ids.input}` : undefined}\n aria-activedescendant={activeDescendantId}\n aria-disabled={isDisabled || isReadOnly || undefined}\n autoComplete=\"off\"\n data-disabled={isDisabled || isReadOnly ? \"true\" : undefined}\n data-open={open ? \"true\" : undefined}\n data-state={open ? \"open\" : \"closed\"}\n disabled={isDisabled}\n readOnly={isReadOnly}\n value={inputValue}\n onChange={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setInputValue(e.target.value);\n store.setOpen(true, \"input\");\n onChange?.(e);\n }}\n onFocus={(e) => {\n if (!isDisabled && !isReadOnly) {\n store.setOpen(true, \"input\");\n }\n onFocus?.(e);\n }}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\n\nexport type TriggerProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"aria-expanded\" | \"aria-controls\"\n>;\n\nexport function Trigger({ children, onClick, disabled, ...props }: TriggerProps) {\n const { store, ids, refs, config } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n\n const isDisabled = disabled ?? config.disabled;\n const isReadOnly = config.readOnly;\n\n return (\n <button\n ref={refs.triggerRef}\n type=\"button\"\n id={ids.trigger}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? ids.content : undefined}\n aria-label=\"Toggle suggestions\"\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 tabIndex={-1}\n onClick={(e) => {\n if (isDisabled || isReadOnly) return;\n store.setOpen(!open, \"trigger\");\n refs.inputRef.current?.focus();\n onClick?.(e);\n }}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import { createContext, useContext } from \"react\";\nimport type { SelectCollectionItem } from \"@kenos-ui/utils\";\n\nexport interface ComboboxCollectionContextValue {\n filteredItems: SelectCollectionItem[];\n enabledItems: SelectCollectionItem[];\n isEmpty: boolean;\n}\n\nexport const ComboboxCollectionContext = createContext<ComboboxCollectionContextValue | null>(null);\n\nexport function useComboboxCollection(): ComboboxCollectionContextValue {\n const ctx = useContext(ComboboxCollectionContext);\n if (!ctx) {\n throw new Error(\"Combobox collection context is missing. Render inside <Combobox.Content>.\");\n }\n return ctx;\n}\n","import React, {\n useEffect,\n useCallback,\n useLayoutEffect,\n useState,\n useMemo,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useFloating,\n usePresence,\n useClickOutside,\n useEscapeKey,\n useListNavigation,\n useSelectCollection,\n useFocusTrap,\n} from \"@kenos-ui/utils\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { ComboboxCollectionContext } from \"../collection-context\";\nimport type { ComboboxContentProps } from \"../types\";\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 sameWidth = false,\n lazyMount = true,\n unmountOnExit = false,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n style,\n onKeyDown,\n ...props\n}: ComboboxContentProps & React.HTMLAttributes<HTMLDivElement>) {\n const {\n store,\n ids,\n refs,\n config,\n close,\n selectValue,\n onOpenChangeComplete: onOpenChangeCompleteRoot,\n } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const allItems = useComboboxStore(store, (s) => s.items);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const onOpenChangeComplete = onOpenChangeCompleteProp ?? onOpenChangeCompleteRoot;\n\n const collection = useSelectCollection({\n items: allItems,\n inputValue,\n filter: config.filter,\n });\n\n const collectionValue = useMemo(\n () => ({\n filteredItems: collection.items,\n enabledItems: collection.enabledItems,\n isEmpty: collection.isEmpty,\n }),\n [collection.items, collection.enabledItems, collection.isEmpty],\n );\n\n const navItems = collection.enabledItems.map((item) => ({\n value: item.value,\n disabled: item.disabled,\n }));\n\n const { setReference, setFloating, floatingStyles, isPositioned } = useFloating({\n open,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n sameWidth,\n });\n\n useLayoutEffect(() => {\n if (!open) return;\n setReference(refs.inputRef.current);\n }, [open, refs.inputRef, 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.inputRef, 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 { 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 handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n if (highlightedValue != null) {\n e.preventDefault();\n const item = allItems.get(highlightedValue);\n if (item && !item.disabled) {\n selectValue(highlightedValue);\n }\n }\n return;\n }\n onNavKeyDown(e);\n onKeyDown?.(e);\n },\n [highlightedValue, allItems, selectValue, onNavKeyDown, 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) 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 // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on open/filter change\n }, [open, inputValue, navItems.length]);\n\n useEffect(() => {\n if (!open || !highlightedValue) return;\n const item = allItems.get(highlightedValue);\n if (typeof item?.ref?.scrollIntoView === \"function\") {\n item.ref.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedValue, allItems, open]);\n\n if (!present && !forceMount) return null;\n\n return (\n <ComboboxCollectionContext.Provider value={collectionValue}>\n <div\n ref={mergedRef}\n id={ids.content}\n data-state={open ? \"open\" : \"closed\"}\n data-open={open ? \"true\" : undefined}\n data-empty={collection.isEmpty ? \"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 </ComboboxCollectionContext.Provider>\n );\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement>;\n\nexport function List({ children, ...props }: ListProps) {\n const { ids, refs } = useComboboxContext();\n\n return (\n <ul\n ref={refs.listRef}\n role=\"listbox\"\n id={`${ids.content}-list`}\n aria-labelledby={ids.label}\n {...props}\n >\n {children}\n </ul>\n );\n}\n","import React, { useRef, useLayoutEffect, useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport interface ItemProps extends React.HTMLAttributes<HTMLLIElement> {\n value: string;\n disabled?: boolean | undefined;\n textValue?: string | undefined;\n}\n\nItem.displayName = \"Combobox.Item\";\n\nexport function Item({\n value,\n disabled = false,\n textValue,\n children,\n onClick,\n onPointerMove,\n style,\n ...props\n}: ItemProps) {\n const { store, ids, config, selectValue } = useComboboxContext();\n const selectedValue = useComboboxStore(store, (s) => s.value);\n const highlightedValue = useComboboxStore(store, (s) => s.highlightedValue);\n const { filteredItems } = useComboboxCollection();\n const liRef = useRef<HTMLLIElement>(null);\n\n const isVisible = filteredItems.some((item) => item.value === value);\n const isSelected =\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 });\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 aria-hidden={!isVisible ? true : undefined}\n data-highlighted={isHighlighted ? \"true\" : undefined}\n data-selected={isSelected ? \"true\" : undefined}\n data-disabled={isDisabled ? \"true\" : undefined}\n data-hidden={!isVisible ? \"true\" : undefined}\n tabIndex={-1}\n style={{\n ...style,\n display: isVisible ? style?.display : \"none\",\n }}\n onClick={handleClick}\n onPointerMove={handlePointerMove}\n {...props}\n >\n {children}\n </li>\n );\n}\n","import React from \"react\";\n\nexport type ItemTextProps = React.HTMLAttributes<HTMLSpanElement>;\n\n/** Text label for a Combobox.Item. */\nexport function ItemText({ children, ...props }: ItemTextProps) {\n return <span {...props}>{children}</span>;\n}\n","import React from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport { useComboboxCollection } from \"../collection-context\";\n\nexport type EmptyProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Empty({ children = \"No results found\", ...props }: EmptyProps) {\n const { store } = useComboboxContext();\n const open = useComboboxStore(store, (s) => s.open);\n const { isEmpty } = useComboboxCollection();\n\n if (!open || !isEmpty) {\n return null;\n }\n\n return (\n <div role=\"status\" aria-live=\"polite\" data-empty=\"true\" {...props}>\n {children}\n </div>\n );\n}\n","import React, { useCallback } from \"react\";\nimport { useComboboxContext } from \"../context\";\nimport { useComboboxStore } from \"../store\";\nimport type { ComboboxClearProps } from \"../types\";\n\nexport function Clear({ onClick, ...props }: ComboboxClearProps) {\n const { store, config, clearValue, refs } = useComboboxContext();\n const value = useComboboxStore(store, (s) => s.value);\n const inputValue = useComboboxStore(store, (s) => s.inputValue);\n\n const hasValue = value != null || inputValue.length > 0;\n\n const handleActivate = useCallback(\n (e: React.SyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n clearValue();\n refs.inputRef.current?.focus();\n onClick?.(e as React.MouseEvent<HTMLSpanElement>);\n },\n [clearValue, onClick, refs.inputRef],\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\"\n onClick={handleActivate}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@kenos-ui/react-combobox",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Headless Combobox primitive for React — Kenos UI",
5
+ "license": "MIT",
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "https://github.com/allysontsoares/kenos-ui",
@@ -28,7 +29,7 @@
28
29
  "access": "public"
29
30
  },
30
31
  "dependencies": {
31
- "@kenos-ui/utils": "0.0.1"
32
+ "@kenos-ui/utils": "1.0.0"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@testing-library/jest-dom": "^6.4.0",