@baseplate-dev/ui-components 0.6.1 → 1.0.7

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.
Files changed (207) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +114 -123
  3. package/dist/base-styles.css +5 -4
  4. package/dist/components/ui/async-combobox-field/async-combobox-field.d.ts +7 -5
  5. package/dist/components/ui/async-combobox-field/async-combobox-field.d.ts.map +1 -1
  6. package/dist/components/ui/async-combobox-field/async-combobox-field.js +142 -135
  7. package/dist/components/ui/async-combobox-field/async-combobox-field.js.map +1 -1
  8. package/dist/components/ui/async-combobox-field/async-combobox-field.unit.test.d.ts +2 -0
  9. package/dist/components/ui/async-combobox-field/async-combobox-field.unit.test.d.ts.map +1 -0
  10. package/dist/components/ui/async-combobox-field/async-combobox-field.unit.test.js +147 -0
  11. package/dist/components/ui/async-combobox-field/async-combobox-field.unit.test.js.map +1 -0
  12. package/dist/components/ui/autocomplete/autocomplete.d.ts +32 -0
  13. package/dist/components/ui/autocomplete/autocomplete.d.ts.map +1 -0
  14. package/dist/components/ui/autocomplete/autocomplete.js +59 -0
  15. package/dist/components/ui/autocomplete/autocomplete.js.map +1 -0
  16. package/dist/components/ui/badge/badge.d.ts +4 -11
  17. package/dist/components/ui/badge/badge.d.ts.map +1 -1
  18. package/dist/components/ui/badge/badge.js +22 -16
  19. package/dist/components/ui/badge/badge.js.map +1 -1
  20. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +8 -4
  21. package/dist/components/ui/breadcrumb/breadcrumb.d.ts.map +1 -1
  22. package/dist/components/ui/breadcrumb/breadcrumb.js +24 -9
  23. package/dist/components/ui/breadcrumb/breadcrumb.js.map +1 -1
  24. package/dist/components/ui/button/button.d.ts +5 -5
  25. package/dist/components/ui/button/button.d.ts.map +1 -1
  26. package/dist/components/ui/button/button.js +4 -5
  27. package/dist/components/ui/button/button.js.map +1 -1
  28. package/dist/components/ui/checkbox/checkbox.d.ts +2 -3
  29. package/dist/components/ui/checkbox/checkbox.d.ts.map +1 -1
  30. package/dist/components/ui/checkbox/checkbox.js +2 -2
  31. package/dist/components/ui/checkbox/checkbox.js.map +1 -1
  32. package/dist/components/ui/checkbox-field/checkbox-field.d.ts +2 -2
  33. package/dist/components/ui/checkbox-field/checkbox-field.d.ts.map +1 -1
  34. package/dist/components/ui/checkbox-field/checkbox-field.js +8 -5
  35. package/dist/components/ui/checkbox-field/checkbox-field.js.map +1 -1
  36. package/dist/components/ui/code-editor-field/code-editor-field.d.ts.map +1 -1
  37. package/dist/components/ui/code-editor-field/code-editor-field.js +7 -7
  38. package/dist/components/ui/code-editor-field/code-editor-field.js.map +1 -1
  39. package/dist/components/ui/collapsible/collapsible.d.ts +4 -5
  40. package/dist/components/ui/collapsible/collapsible.d.ts.map +1 -1
  41. package/dist/components/ui/collapsible/collapsible.js +3 -4
  42. package/dist/components/ui/collapsible/collapsible.js.map +1 -1
  43. package/dist/components/ui/color-picker-field/color-picker-field.d.ts.map +1 -1
  44. package/dist/components/ui/color-picker-field/color-picker-field.js +9 -9
  45. package/dist/components/ui/color-picker-field/color-picker-field.js.map +1 -1
  46. package/dist/components/ui/combobox/combobox.d.ts +31 -69
  47. package/dist/components/ui/combobox/combobox.d.ts.map +1 -1
  48. package/dist/components/ui/combobox/combobox.js +62 -167
  49. package/dist/components/ui/combobox/combobox.js.map +1 -1
  50. package/dist/components/ui/combobox-field/combobox-field.d.ts +7 -3
  51. package/dist/components/ui/combobox-field/combobox-field.d.ts.map +1 -1
  52. package/dist/components/ui/combobox-field/combobox-field.js +15 -23
  53. package/dist/components/ui/combobox-field/combobox-field.js.map +1 -1
  54. package/dist/components/ui/date-picker-field/date-picker-field.d.ts.map +1 -1
  55. package/dist/components/ui/date-picker-field/date-picker-field.js +3 -3
  56. package/dist/components/ui/date-picker-field/date-picker-field.js.map +1 -1
  57. package/dist/components/ui/date-time-picker-field/date-time-picker-field.d.ts.map +1 -1
  58. package/dist/components/ui/date-time-picker-field/date-time-picker-field.js +3 -3
  59. package/dist/components/ui/date-time-picker-field/date-time-picker-field.js.map +1 -1
  60. package/dist/components/ui/dialog/dialog.d.ts +15 -13
  61. package/dist/components/ui/dialog/dialog.d.ts.map +1 -1
  62. package/dist/components/ui/dialog/dialog.js +12 -13
  63. package/dist/components/ui/dialog/dialog.js.map +1 -1
  64. package/dist/components/ui/dropdown/dropdown.d.ts +24 -16
  65. package/dist/components/ui/dropdown/dropdown.d.ts.map +1 -1
  66. package/dist/components/ui/dropdown/dropdown.js +31 -27
  67. package/dist/components/ui/dropdown/dropdown.js.map +1 -1
  68. package/dist/components/ui/field/field.d.ts +34 -0
  69. package/dist/components/ui/field/field.d.ts.map +1 -0
  70. package/dist/components/ui/field/field.js +77 -0
  71. package/dist/components/ui/field/field.js.map +1 -0
  72. package/dist/components/ui/form-action-bar/form-action-bar.d.ts.map +1 -1
  73. package/dist/components/ui/form-action-bar/form-action-bar.js +1 -1
  74. package/dist/components/ui/form-action-bar/form-action-bar.js.map +1 -1
  75. package/dist/components/ui/form-item/form-item.d.ts +6 -4
  76. package/dist/components/ui/form-item/form-item.d.ts.map +1 -1
  77. package/dist/components/ui/form-item/form-item.js +17 -3
  78. package/dist/components/ui/form-item/form-item.js.map +1 -1
  79. package/dist/components/ui/index.d.ts +5 -3
  80. package/dist/components/ui/index.d.ts.map +1 -1
  81. package/dist/components/ui/index.js +5 -3
  82. package/dist/components/ui/index.js.map +1 -1
  83. package/dist/components/ui/input-field/input-field.d.ts.map +1 -1
  84. package/dist/components/ui/input-field/input-field.js +7 -5
  85. package/dist/components/ui/input-field/input-field.js.map +1 -1
  86. package/dist/components/ui/input-group/input-group.d.ts +26 -0
  87. package/dist/components/ui/input-group/input-group.d.ts.map +1 -0
  88. package/dist/components/ui/input-group/input-group.js +65 -0
  89. package/dist/components/ui/input-group/input-group.js.map +1 -0
  90. package/dist/components/ui/label/label.d.ts +1 -2
  91. package/dist/components/ui/label/label.d.ts.map +1 -1
  92. package/dist/components/ui/label/label.js +3 -2
  93. package/dist/components/ui/label/label.js.map +1 -1
  94. package/dist/components/ui/multi-combobox-field/multi-combobox-field.d.ts +2 -2
  95. package/dist/components/ui/multi-combobox-field/multi-combobox-field.d.ts.map +1 -1
  96. package/dist/components/ui/multi-combobox-field/multi-combobox-field.js +23 -24
  97. package/dist/components/ui/multi-combobox-field/multi-combobox-field.js.map +1 -1
  98. package/dist/components/ui/multi-switch-field/multi-switch-field.js +3 -3
  99. package/dist/components/ui/multi-switch-field/multi-switch-field.js.map +1 -1
  100. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +16 -15
  101. package/dist/components/ui/navigation-menu/navigation-menu.d.ts.map +1 -1
  102. package/dist/components/ui/navigation-menu/navigation-menu.js +17 -16
  103. package/dist/components/ui/navigation-menu/navigation-menu.js.map +1 -1
  104. package/dist/components/ui/navigation-tabs/navigation-tabs.d.ts +6 -3
  105. package/dist/components/ui/navigation-tabs/navigation-tabs.d.ts.map +1 -1
  106. package/dist/components/ui/navigation-tabs/navigation-tabs.js +16 -4
  107. package/dist/components/ui/navigation-tabs/navigation-tabs.js.map +1 -1
  108. package/dist/components/ui/popover/popover.d.ts +8 -10
  109. package/dist/components/ui/popover/popover.d.ts.map +1 -1
  110. package/dist/components/ui/popover/popover.js +12 -6
  111. package/dist/components/ui/popover/popover.js.map +1 -1
  112. package/dist/components/ui/scroll-area/scroll-area.d.ts +3 -4
  113. package/dist/components/ui/scroll-area/scroll-area.d.ts.map +1 -1
  114. package/dist/components/ui/scroll-area/scroll-area.js +2 -4
  115. package/dist/components/ui/scroll-area/scroll-area.js.map +1 -1
  116. package/dist/components/ui/select/select.d.ts +12 -17
  117. package/dist/components/ui/select/select.d.ts.map +1 -1
  118. package/dist/components/ui/select/select.js +20 -30
  119. package/dist/components/ui/select/select.js.map +1 -1
  120. package/dist/components/ui/select-field/select-field.d.ts +1 -0
  121. package/dist/components/ui/select-field/select-field.d.ts.map +1 -1
  122. package/dist/components/ui/select-field/select-field.js +6 -12
  123. package/dist/components/ui/select-field/select-field.js.map +1 -1
  124. package/dist/components/ui/separator/separator.d.ts +2 -3
  125. package/dist/components/ui/separator/separator.d.ts.map +1 -1
  126. package/dist/components/ui/separator/separator.js +3 -3
  127. package/dist/components/ui/separator/separator.js.map +1 -1
  128. package/dist/components/ui/sheet/sheet.d.ts +11 -11
  129. package/dist/components/ui/sheet/sheet.d.ts.map +1 -1
  130. package/dist/components/ui/sheet/sheet.js +7 -10
  131. package/dist/components/ui/sheet/sheet.js.map +1 -1
  132. package/dist/components/ui/sidebar/sidebar.d.ts +6 -12
  133. package/dist/components/ui/sidebar/sidebar.d.ts.map +1 -1
  134. package/dist/components/ui/sidebar/sidebar.js +79 -28
  135. package/dist/components/ui/sidebar/sidebar.js.map +1 -1
  136. package/dist/components/ui/skeleton/skeleton.js +1 -1
  137. package/dist/components/ui/skeleton/skeleton.js.map +1 -1
  138. package/dist/components/ui/slider/slider.d.ts +13 -0
  139. package/dist/components/ui/slider/slider.d.ts.map +1 -0
  140. package/dist/components/ui/slider/slider.js +22 -0
  141. package/dist/components/ui/slider/slider.js.map +1 -0
  142. package/dist/components/ui/spinner/spinner.d.ts +10 -0
  143. package/dist/components/ui/spinner/spinner.d.ts.map +1 -0
  144. package/dist/components/ui/spinner/spinner.js +13 -0
  145. package/dist/components/ui/spinner/spinner.js.map +1 -0
  146. package/dist/components/ui/switch/switch.d.ts +7 -3
  147. package/dist/components/ui/switch/switch.d.ts.map +1 -1
  148. package/dist/components/ui/switch/switch.js +6 -3
  149. package/dist/components/ui/switch/switch.js.map +1 -1
  150. package/dist/components/ui/switch-field/switch-field.d.ts +5 -3
  151. package/dist/components/ui/switch-field/switch-field.d.ts.map +1 -1
  152. package/dist/components/ui/switch-field/switch-field.js +7 -4
  153. package/dist/components/ui/switch-field/switch-field.js.map +1 -1
  154. package/dist/components/ui/tabs/tabs.d.ts +13 -7
  155. package/dist/components/ui/tabs/tabs.d.ts.map +1 -1
  156. package/dist/components/ui/tabs/tabs.js +23 -8
  157. package/dist/components/ui/tabs/tabs.js.map +1 -1
  158. package/dist/components/ui/textarea/textarea.js +1 -1
  159. package/dist/components/ui/textarea/textarea.js.map +1 -1
  160. package/dist/components/ui/textarea-field/textarea-field.d.ts.map +1 -1
  161. package/dist/components/ui/textarea-field/textarea-field.js +7 -5
  162. package/dist/components/ui/textarea-field/textarea-field.js.map +1 -1
  163. package/dist/components/ui/tooltip/tooltip.d.ts +10 -6
  164. package/dist/components/ui/tooltip/tooltip.d.ts.map +1 -1
  165. package/dist/components/ui/tooltip/tooltip.js +11 -6
  166. package/dist/components/ui/tooltip/tooltip.js.map +1 -1
  167. package/dist/constants/strings.d.ts +1 -0
  168. package/dist/constants/strings.d.ts.map +1 -1
  169. package/dist/constants/strings.js +1 -0
  170. package/dist/constants/strings.js.map +1 -1
  171. package/dist/contexts/component-strings.d.ts +1 -0
  172. package/dist/contexts/component-strings.d.ts.map +1 -1
  173. package/dist/hooks/use-event-callback.d.ts +2 -2
  174. package/dist/hooks/use-event-callback.d.ts.map +1 -1
  175. package/dist/hooks/use-event-callback.js +2 -1
  176. package/dist/hooks/use-event-callback.js.map +1 -1
  177. package/dist/styles/button.d.ts +1 -1
  178. package/dist/styles/button.d.ts.map +1 -1
  179. package/dist/styles/button.js +15 -11
  180. package/dist/styles/button.js.map +1 -1
  181. package/dist/styles/index.d.ts +0 -1
  182. package/dist/styles/index.d.ts.map +1 -1
  183. package/dist/styles/index.js +0 -1
  184. package/dist/styles/index.js.map +1 -1
  185. package/dist/theme.css +8 -0
  186. package/dist/utilities.css +100 -0
  187. package/package.json +10 -10
  188. package/dist/components/ui/color-picker/color-picker.d.ts +0 -16
  189. package/dist/components/ui/color-picker/color-picker.d.ts.map +0 -1
  190. package/dist/components/ui/color-picker/color-picker.js +0 -19
  191. package/dist/components/ui/color-picker/color-picker.js.map +0 -1
  192. package/dist/components/ui/combobox/combobox.test.d.ts +0 -2
  193. package/dist/components/ui/combobox/combobox.test.d.ts.map +0 -1
  194. package/dist/components/ui/combobox/combobox.test.js +0 -148
  195. package/dist/components/ui/combobox/combobox.test.js.map +0 -1
  196. package/dist/components/ui/command/command.d.ts +0 -22
  197. package/dist/components/ui/command/command.d.ts.map +0 -1
  198. package/dist/components/ui/command/command.js +0 -40
  199. package/dist/components/ui/command/command.js.map +0 -1
  200. package/dist/components/ui/multi-combobox/multi-combobox.d.ts +0 -47
  201. package/dist/components/ui/multi-combobox/multi-combobox.d.ts.map +0 -1
  202. package/dist/components/ui/multi-combobox/multi-combobox.js +0 -114
  203. package/dist/components/ui/multi-combobox/multi-combobox.js.map +0 -1
  204. package/dist/styles/select.d.ts +0 -9
  205. package/dist/styles/select.d.ts.map +0 -1
  206. package/dist/styles/select.js +0 -22
  207. package/dist/styles/select.js.map +0 -1
@@ -1,115 +1,93 @@
1
1
  'use client';
2
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useId, useMemo, useReducer, useRef, useState } from 'react';
4
4
  import { useComponentStrings } from '#src/contexts/component-strings.js';
5
5
  import { useControllerMerged } from '#src/hooks/use-controller-merged.js';
6
- import { useDebounce } from '#src/hooks/use-debounce.js';
7
- import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxLoading, } from '../combobox/combobox.js';
8
- import { FormControl, FormDescription, FormItem, FormLabel, FormMessage, } from '../form-item/form-item.js';
6
+ import { useEventCallback } from '#src/hooks/use-event-callback.js';
7
+ import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, ComboboxList, ComboboxStatus, } from '../combobox/combobox.js';
8
+ import { Field, FieldDescription, FieldError, FieldLabel, } from '../field/field.js';
9
+ function searchReducer(state, action) {
10
+ switch (action.type) {
11
+ case 'reset': {
12
+ return {
13
+ options: action.initialOptions,
14
+ isLoading: false,
15
+ loadError: null,
16
+ hasSearched: false,
17
+ };
18
+ }
19
+ case 'searchStarted': {
20
+ return { ...state, isLoading: true, loadError: null, hasSearched: true };
21
+ }
22
+ case 'searchSucceeded': {
23
+ return { ...state, options: action.options, isLoading: false };
24
+ }
25
+ case 'searchFailed': {
26
+ return {
27
+ ...state,
28
+ options: [],
29
+ isLoading: false,
30
+ loadError: action.error,
31
+ };
32
+ }
33
+ case 'cleared': {
34
+ return {
35
+ options: action.initialOptions,
36
+ isLoading: false,
37
+ loadError: null,
38
+ hasSearched: false,
39
+ };
40
+ }
41
+ }
42
+ }
9
43
  /**
10
44
  * Field with label and error states that wraps a Combobox component with async option loading.
11
45
  */
12
- function AsyncComboboxField({ label, description, error, value, placeholder, renderItemLabel, onChange, getOptionLabel = (val) => val.label, getOptionValue = (val) => val.value, className, noResultsText, loadingText, errorText, formatError, loadOptions, resolveValue, debounceMs = 300, loadingDelay = 200, minSearchLength = 0, initialOptions = [], ...props }) {
13
- const [options, setOptions] = useState(initialOptions);
14
- const [searchQuery, setSearchQuery] = useState('');
15
- const [isLoading, setIsLoading] = useState(false);
16
- const [loadError, setLoadError] = useState(null);
46
+ function AsyncComboboxField({ label, description, error, value, placeholder, renderItemLabel, onChange, getOptionLabel = (val) => val.label, getOptionValue = (val) => val.value, className, noResultsText, typeToSearchText, loadingText, errorText, formatError, loadOptions, debounceMs = 300, minSearchLength = 0, initialOptions = [], disabled, }) {
47
+ const [{ options, isLoading, loadError, hasSearched }, dispatch] = useReducer((searchReducer), {
48
+ options: initialOptions,
49
+ isLoading: false,
50
+ loadError: null,
51
+ hasSearched: false,
52
+ });
17
53
  // Cache the selected option to persist it across searches
18
54
  const [selectedOptionCache, setSelectedOptionCache] = useState(null);
19
- const debouncedSearchQuery = useDebounce(searchQuery, debounceMs);
20
- const { comboboxNoResults, comboboxLoading } = useComponentStrings();
21
- const loadOptionsRef = useRef(loadOptions);
22
- loadOptionsRef.current = loadOptions;
55
+ const { comboboxNoResults, comboboxTypeToSearch, comboboxLoading } = useComponentStrings();
56
+ const id = useId();
57
+ // Stable callbacks that always reference the latest closure
58
+ const stableLoadOptions = useEventCallback(loadOptions);
59
+ const stableFormatError = useEventCallback(formatError);
60
+ const stableGetOptionValue = useEventCallback(getOptionValue);
23
61
  const initialOptionsRef = useRef(initialOptions);
24
62
  initialOptionsRef.current = initialOptions;
25
- const formatErrorRef = useRef(formatError);
26
- formatErrorRef.current = formatError;
63
+ // Refs for cancellation
64
+ const searchAbortRef = useRef(null);
65
+ const debounceTimerRef = useRef(null);
66
+ // Cleanup on unmount
67
+ useEffect(() => () => {
68
+ if (debounceTimerRef.current) {
69
+ clearTimeout(debounceTimerRef.current);
70
+ }
71
+ searchAbortRef.current?.abort();
72
+ }, []);
27
73
  // Handle external value changes and try to resolve the option
28
74
  useEffect(() => {
29
75
  if (value === null || value === undefined) {
30
76
  setSelectedOptionCache(null);
31
77
  return;
32
78
  }
33
- // Check if we already have this option cached
34
- if (selectedOptionCache && getOptionValue(selectedOptionCache) === value) {
35
- return;
36
- }
37
- // Try to find the option in current options
38
- const optionInResults = options.find((o) => getOptionValue(o) === value);
39
- if (optionInResults) {
40
- setSelectedOptionCache(optionInResults);
41
- return;
42
- }
43
- // Try to find in initial options
44
- const optionInInitial = initialOptions.find((o) => getOptionValue(o) === value);
45
- if (optionInInitial) {
46
- setSelectedOptionCache(optionInInitial);
79
+ // Check if already cached
80
+ if (selectedOptionCache &&
81
+ stableGetOptionValue(selectedOptionCache) === value) {
47
82
  return;
48
83
  }
49
- // If we have a resolveValue function, try to resolve the option
50
- if (resolveValue) {
51
- resolveValue(value)
52
- .then((resolvedOption) => {
53
- if (resolvedOption && getOptionValue(resolvedOption) === value) {
54
- setSelectedOptionCache(resolvedOption);
55
- }
56
- })
57
- .catch(() => {
58
- // If resolution fails, we'll show the value as-is
59
- });
60
- }
61
- }, [
62
- value,
63
- options,
64
- initialOptions,
65
- selectedOptionCache,
66
- getOptionValue,
67
- resolveValue,
68
- ]);
69
- useEffect(() => {
70
- let isAborted = false;
71
- // Skip loading if search query is shorter than minimum length
72
- if (debouncedSearchQuery.length < minSearchLength) {
73
- setOptions(initialOptions);
74
- setLoadError(null);
75
- setIsLoading(false);
76
- return;
84
+ // Try to find in current options or initial options
85
+ const found = options.find((o) => stableGetOptionValue(o) === value) ??
86
+ initialOptionsRef.current.find((o) => stableGetOptionValue(o) === value);
87
+ if (found) {
88
+ setSelectedOptionCache(found);
77
89
  }
78
- // Clear any previous error state
79
- setLoadError(null);
80
- // Set up loading timeout to prevent flashing for fast requests
81
- const loadingTimeout = setTimeout(() => {
82
- setIsLoading(true);
83
- }, loadingDelay);
84
- // Execute the async request
85
- loadOptionsRef
86
- .current(debouncedSearchQuery)
87
- .then((newOptions) => {
88
- if (!isAborted) {
89
- setOptions(newOptions);
90
- }
91
- })
92
- .catch((err) => {
93
- if (!isAborted) {
94
- const errorMessage = formatErrorRef.current
95
- ? formatErrorRef.current(err)
96
- : err instanceof Error
97
- ? err.message
98
- : 'Failed to load options';
99
- setLoadError(errorMessage);
100
- setOptions([]);
101
- }
102
- })
103
- .finally(() => {
104
- clearTimeout(loadingTimeout);
105
- setIsLoading(false);
106
- });
107
- // Cleanup function to handle cancellation
108
- return () => {
109
- clearTimeout(loadingTimeout);
110
- isAborted = true;
111
- };
112
- }, [debouncedSearchQuery, minSearchLength, loadingDelay, initialOptions]);
90
+ }, [value, options, stableGetOptionValue, selectedOptionCache]);
113
91
  const selectedOption = useMemo(() => {
114
92
  if (value === null || value === undefined)
115
93
  return null;
@@ -128,52 +106,81 @@ function AsyncComboboxField({ label, description, error, value, placeholder, ren
128
106
  return optionInInitial;
129
107
  }
130
108
  return null;
131
- }, [value, selectedOptionCache, options, initialOptions, getOptionValue]);
132
- const selectedComboboxOption = useMemo(() => {
133
- if (value === undefined)
109
+ }, [value, options, initialOptions, getOptionValue, selectedOptionCache]);
110
+ const handleInputValueChange = useEventCallback((inputValue, eventDetails) => {
111
+ // Don't re-fetch when user selects an item
112
+ if (eventDetails.reason === 'item-press') {
134
113
  return;
135
- if (selectedOption) {
136
- return {
137
- label: getOptionLabel(selectedOption),
138
- value: getOptionValue(selectedOption),
139
- };
140
114
  }
141
- // Fallback: if we have a value but no option, show the value as the label
142
- if (value !== null) {
143
- return {
144
- label: value,
145
- value,
146
- };
115
+ // Clear previous debounce timer and abort previous request
116
+ if (debounceTimerRef.current) {
117
+ clearTimeout(debounceTimerRef.current);
147
118
  }
148
- return null;
149
- }, [value, selectedOption, getOptionLabel, getOptionValue]);
150
- const handleSearchQueryChange = (query) => {
151
- setSearchQuery(query);
152
- };
153
- const renderContent = () => {
154
- if (isLoading) {
155
- return (_jsx(ComboboxLoading, { children: loadingText ?? comboboxLoading }));
156
- }
157
- if (loadError) {
158
- return (_jsx("div", { role: "alert", className: "p-4 text-sm text-destructive", children: errorText ?? loadError }));
159
- }
160
- return (_jsxs(_Fragment, { children: [options.map((option) => {
161
- const val = getOptionValue(option);
162
- const label = getOptionLabel(option);
163
- return (_jsx(ComboboxItem, { value: val, label: label, children: renderItemLabel
164
- ? renderItemLabel(option, { selected: val === value })
165
- : label }, val));
166
- }), _jsx(ComboboxEmpty, { children: noResultsText ?? comboboxNoResults })] }));
167
- };
168
- return (_jsxs(FormItem, { error: error, className: className, children: [_jsx(FormLabel, { children: label }), _jsxs(Combobox, { value: selectedComboboxOption, onChange: (comboboxValue) => {
169
- const selectedValue = comboboxValue.value;
170
- // Find the full option object that was selected and cache it
171
- const fullOption = options.find((o) => getOptionValue(o) === selectedValue);
172
- if (fullOption) {
173
- setSelectedOptionCache(fullOption);
119
+ searchAbortRef.current?.abort();
120
+ // Clear input: clear selection and reset to initial options
121
+ if (inputValue === '') {
122
+ onChange?.(null);
123
+ setSelectedOptionCache(null);
124
+ dispatch({
125
+ type: 'cleared',
126
+ initialOptions: initialOptionsRef.current,
127
+ });
128
+ return;
129
+ }
130
+ // Below min search length: reset to initial options
131
+ if (inputValue.trim().length < minSearchLength) {
132
+ dispatch({ type: 'reset', initialOptions: initialOptionsRef.current });
133
+ return;
134
+ }
135
+ // Debounce the actual fetch
136
+ debounceTimerRef.current = setTimeout(() => {
137
+ const controller = new AbortController();
138
+ searchAbortRef.current = controller;
139
+ dispatch({ type: 'searchStarted' });
140
+ stableLoadOptions(inputValue)
141
+ .then((newOptions) => {
142
+ if (!controller.signal.aborted) {
143
+ dispatch({ type: 'searchSucceeded', options: newOptions });
144
+ }
145
+ })
146
+ .catch((err) => {
147
+ if (!controller.signal.aborted) {
148
+ const errorMessage = stableFormatError
149
+ ? stableFormatError(err)
150
+ : err instanceof Error
151
+ ? err.message
152
+ : 'Failed to load options';
153
+ dispatch({ type: 'searchFailed', error: errorMessage });
154
+ }
155
+ });
156
+ }, debounceMs);
157
+ });
158
+ return (_jsxs(Field, { "data-invalid": !!error, className: className, children: [_jsx(FieldLabel, { htmlFor: id, children: label }), _jsxs(Combobox, { value: selectedOption, onValueChange: (option) => {
159
+ if (option) {
160
+ setSelectedOptionCache(option);
161
+ }
162
+ onChange?.(option ? getOptionValue(option) : null);
163
+ }, onInputValueChange: handleInputValueChange, onOpenChangeComplete: (open) => {
164
+ if (!open) {
165
+ if (debounceTimerRef.current) {
166
+ clearTimeout(debounceTimerRef.current);
167
+ debounceTimerRef.current = null;
168
+ }
169
+ searchAbortRef.current?.abort();
170
+ dispatch({
171
+ type: 'reset',
172
+ initialOptions: initialOptionsRef.current,
173
+ });
174
174
  }
175
- onChange?.(selectedValue);
176
- }, searchQuery: searchQuery, onSearchQueryChange: handleSearchQueryChange, ...props, children: [_jsx(FormControl, { children: _jsx(ComboboxInput, { placeholder: placeholder }) }), _jsx(ComboboxContent, { children: renderContent() })] }), _jsx(FormDescription, { children: description }), _jsx(FormMessage, {})] }));
175
+ }, disabled: disabled, items: options, itemToStringLabel: (option) => getOptionLabel(option), itemToStringValue: (option) => getOptionValue(option) ?? '', filter: null, children: [_jsx(ComboboxInput, { id: id, placeholder: placeholder }), _jsxs(ComboboxContent, { children: [isLoading ? (_jsx(ComboboxStatus, { className: "flex items-center justify-center p-4 text-sm text-muted-foreground", children: loadingText ?? comboboxLoading })) : loadError ? (_jsx(ComboboxStatus, { role: "alert", className: "p-4 text-sm text-destructive", children: errorText ?? loadError })) : null, !isLoading && !loadError && (_jsx(ComboboxEmpty, { className: "p-4 text-sm text-muted-foreground", children: hasSearched
176
+ ? (noResultsText ?? comboboxNoResults)
177
+ : (typeToSearchText ?? comboboxTypeToSearch) })), !isLoading && !loadError && (_jsx(ComboboxList, { children: (option) => {
178
+ const val = getOptionValue(option);
179
+ const optionLabel = getOptionLabel(option);
180
+ return (_jsx(ComboboxItem, { value: option, children: renderItemLabel
181
+ ? renderItemLabel(option, { selected: val === value })
182
+ : optionLabel }, val));
183
+ } }))] })] }), _jsx(FieldDescription, { children: description }), _jsx(FieldError, { children: error })] }));
177
184
  }
178
185
  function AsyncComboboxFieldController({ name, control, ...rest }) {
179
186
  const { field, fieldState: { error }, } = useControllerMerged({ name, control }, rest);
@@ -1 +1 @@
1
- {"version":3,"file":"async-combobox-field.js","sourceRoot":"","sources":["../../../../src/components/ui/async-combobox-field/async-combobox-field.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-combobox-field.js","sourceRoot":"","sources":["../../../../src/components/ui/async-combobox-field/async-combobox-field.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAKb,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EACL,QAAQ,EACR,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,GACX,MAAM,mBAAmB,CAAC;AAsC3B,SAAS,aAAa,CACpB,KAA8B,EAC9B,MAAgC;IAEhC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,cAAc;gBAC9B,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;aACnB,CAAC;QACJ,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACjE,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,OAAO;gBACL,GAAG,KAAK;gBACR,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,MAAM,CAAC,KAAK;aACxB,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,cAAc;gBAC9B,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;aACnB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAa,EACtC,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,WAAW,EACX,eAAe,EACf,QAAQ,EACR,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE,CAAE,GAAyB,CAAC,KAAK,EAC1D,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE,CAAE,GAAgC,CAAC,KAAK,EACjE,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,GAAG,GAAG,EAChB,eAAe,GAAG,CAAC,EACnB,cAAc,GAAG,EAAE,EACnB,QAAQ,GAE2B;IACnC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,QAAQ,CAAC,GAAG,UAAU,CAC3E,CAAA,aAAyB,CAAA,EACzB;QACE,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,KAAK;KACnB,CACF,CAAC;IAEF,0DAA0D;IAC1D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GACjD,QAAQ,CAAoB,IAAI,CAAC,CAAC;IAEpC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,EAAE,GAChE,mBAAmB,EAAE,CAAC;IAExB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,4DAA4D;IAC5D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAE3C,wBAAwB;IACxB,MAAM,cAAc,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAE5E,qBAAqB;IACrB,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC,EACD,EAAE,CACH,CAAC;IAEF,8DAA8D;IAC9D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IACE,mBAAmB;YACnB,oBAAoB,CAAC,mBAAmB,CAAC,KAAK,KAAK,EACnD,CAAC;YACD,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YACtD,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAE3E,IAAI,KAAK,EAAE,CAAC;YACV,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEvD,+DAA+D;QAC/D,IAAI,mBAAmB,IAAI,cAAc,CAAC,mBAAmB,CAAC,KAAK,KAAK,EAAE,CAAC;YACzE,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QAED,sDAAsD;QACtD,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QACzE,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,8CAA8C;QAC9C,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,CACnC,CAAC;QACF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE1E,MAAM,sBAAsB,GAAG,gBAAgB,CAC7C,CAAC,UAAkB,EAAE,YAAgC,EAAE,EAAE;QACvD,2CAA2C;QAC3C,IAAI,YAAY,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,2DAA2D;QAC3D,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAEhC,4DAA4D;QAC5D,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC7B,QAAQ,CAAC;gBACP,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE,iBAAiB,CAAC,OAAO;aAC1C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC/C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QAED,4BAA4B;QAC5B,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC;YAEpC,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;YAEpC,iBAAiB,CAAC,UAAU,CAAC;iBAC1B,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC/B,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC/B,MAAM,YAAY,GAAG,iBAAiB;wBACpC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC;wBACxB,CAAC,CAAC,GAAG,YAAY,KAAK;4BACpB,CAAC,CAAC,GAAG,CAAC,OAAO;4BACb,CAAC,CAAC,wBAAwB,CAAC;oBAC/B,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CACF,CAAC;IAEF,OAAO,CACL,MAAC,KAAK,oBAAe,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,aAChD,KAAC,UAAU,IAAC,OAAO,EAAE,EAAE,YAAG,KAAK,GAAc,EAC7C,MAAC,QAAQ,IACP,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;oBACxB,IAAI,MAAM,EAAE,CAAC;wBACX,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBACjC,CAAC;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrD,CAAC,EACD,kBAAkB,EAAE,sBAAsB,EAC1C,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;4BAC7B,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;4BACvC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;wBAClC,CAAC;wBACD,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBAChC,QAAQ,CAAC;4BACP,IAAI,EAAE,OAAO;4BACb,cAAc,EAAE,iBAAiB,CAAC,OAAO;yBAC1C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,EACD,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,OAAO,EACd,iBAAiB,EAAE,CAAC,MAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EACjE,iBAAiB,EAAE,CAAC,MAAkB,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,EACvE,MAAM,EAAE,IAAI,aAEZ,KAAC,aAAa,IAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,GAAI,EACnD,MAAC,eAAe,eACb,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,cAAc,IAAC,SAAS,EAAC,oEAAoE,YAC3F,WAAW,IAAI,eAAe,GAChB,CAClB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACd,KAAC,cAAc,IACb,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,8BAA8B,YAEvC,SAAS,IAAI,SAAS,GACR,CAClB,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAC3B,KAAC,aAAa,IAAC,SAAS,EAAC,mCAAmC,YACzD,WAAW;oCACV,CAAC,CAAC,CAAC,aAAa,IAAI,iBAAiB,CAAC;oCACtC,CAAC,CAAC,CAAC,gBAAgB,IAAI,oBAAoB,CAAC,GAChC,CACjB,EACA,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAC3B,KAAC,YAAY,cACV,CAAC,MAAkB,EAAE,EAAE;oCACtB,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oCACnC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oCAC3C,OAAO,CACL,KAAC,YAAY,IAAC,KAAK,EAAE,MAAM,YACxB,eAAe;4CACd,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC;4CACtD,CAAC,CAAC,WAAW,IAHiB,GAAG,CAItB,CAChB,CAAC;gCACJ,CAAC,GACY,CAChB,IACe,IACT,EACX,KAAC,gBAAgB,cAAE,WAAW,GAAoB,EAClD,KAAC,UAAU,cAAE,KAAK,GAAc,IAC1B,CACT,CAAC;AACJ,CAAC;AAiBD,SAAS,4BAA4B,CAInC,EACA,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EAE4B;IACnC,MAAM,EACJ,KAAK,EACL,UAAU,EAAE,EAAE,KAAK,EAAE,GACtB,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,IACmB,CAAC;IAEtC,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,SAAS,KAC9B,SAAS,KACT,KAAK,EACT,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,GAC1B,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=async-combobox-field.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-combobox-field.unit.test.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/async-combobox-field/async-combobox-field.unit.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { act, fireEvent, screen, waitFor } from '@testing-library/react';
3
+ import { userEvent } from '@testing-library/user-event';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { renderWithProviders } from '#src/tests/render.test-helper.js';
6
+ import { AsyncComboboxField } from './async-combobox-field.js';
7
+ const MOCK_OPTIONS = [
8
+ { label: 'Apple', value: 'apple' },
9
+ { label: 'Banana', value: 'banana' },
10
+ { label: 'Cherry', value: 'cherry' },
11
+ ];
12
+ function createLoadOptions(options = MOCK_OPTIONS) {
13
+ const mock = vi.fn((query) => {
14
+ const filtered = options.filter((o) => o.label.toLowerCase().includes(query.toLowerCase()));
15
+ return Promise.resolve(filtered);
16
+ });
17
+ return { loadOptions: mock, mock };
18
+ }
19
+ function createFailingLoadOptions(errorMessage = 'Load failed') {
20
+ const mock = vi.fn(() => Promise.reject(new Error(errorMessage)));
21
+ return { loadOptions: mock, mock };
22
+ }
23
+ function typeInInput(input, value) {
24
+ fireEvent.change(input, { target: { value } });
25
+ }
26
+ describe('AsyncComboboxField', () => {
27
+ it('should render with label and placeholder', () => {
28
+ const { loadOptions } = createLoadOptions();
29
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Select fruit", placeholder: "Search fruits...", loadOptions: loadOptions, value: null }));
30
+ expect(screen.getByText('Select fruit')).toBeInTheDocument();
31
+ expect(screen.getByPlaceholderText('Search fruits...')).toBeInTheDocument();
32
+ });
33
+ describe('with fake timers', () => {
34
+ beforeEach(() => {
35
+ vi.useFakeTimers();
36
+ });
37
+ afterEach(() => {
38
+ vi.useRealTimers();
39
+ });
40
+ it('should debounce search calls', async () => {
41
+ const { loadOptions, mock } = createLoadOptions();
42
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, debounceMs: 300, value: null }));
43
+ const input = screen.getByRole('combobox');
44
+ // Simulate rapid typing
45
+ typeInInput(input, 'a');
46
+ await act(async () => {
47
+ await vi.advanceTimersByTimeAsync(50);
48
+ });
49
+ typeInInput(input, 'ap');
50
+ await act(async () => {
51
+ await vi.advanceTimersByTimeAsync(50);
52
+ });
53
+ typeInInput(input, 'app');
54
+ // Not yet past debounce
55
+ expect(mock).not.toHaveBeenCalled();
56
+ // Advance past debounce
57
+ await act(async () => {
58
+ await vi.advanceTimersByTimeAsync(300);
59
+ });
60
+ expect(mock).toHaveBeenCalledTimes(1);
61
+ expect(mock).toHaveBeenCalledWith('app');
62
+ });
63
+ it('should respect minSearchLength', async () => {
64
+ const { loadOptions, mock } = createLoadOptions();
65
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, debounceMs: 100, minSearchLength: 3, value: null }));
66
+ const input = screen.getByRole('combobox');
67
+ // Type fewer chars than minSearchLength
68
+ typeInInput(input, 'ab');
69
+ await act(async () => {
70
+ await vi.advanceTimersByTimeAsync(200);
71
+ });
72
+ expect(mock).not.toHaveBeenCalled();
73
+ // Now type enough chars
74
+ typeInInput(input, 'abc');
75
+ await act(async () => {
76
+ await vi.advanceTimersByTimeAsync(100);
77
+ });
78
+ expect(mock).toHaveBeenCalledTimes(1);
79
+ });
80
+ it('should call onChange with null when input is cleared', () => {
81
+ const onChange = vi.fn();
82
+ const { loadOptions } = createLoadOptions();
83
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, onChange: onChange, debounceMs: 100, value: null }));
84
+ const input = screen.getByRole('combobox');
85
+ // Type something then clear it
86
+ typeInInput(input, 'Apple');
87
+ typeInInput(input, '');
88
+ expect(onChange).toHaveBeenCalledWith(null);
89
+ });
90
+ });
91
+ describe('with real timers', () => {
92
+ it('should show options after successful load', async () => {
93
+ const { loadOptions } = createLoadOptions();
94
+ const user = userEvent.setup();
95
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, debounceMs: 0, value: null }));
96
+ const input = screen.getByRole('combobox');
97
+ await user.type(input, 'a');
98
+ await waitFor(() => {
99
+ expect(screen.getByText('Apple')).toBeInTheDocument();
100
+ expect(screen.getByText('Banana')).toBeInTheDocument();
101
+ });
102
+ });
103
+ it('should call onChange when an option is selected', async () => {
104
+ const { loadOptions } = createLoadOptions();
105
+ const onChange = vi.fn();
106
+ const user = userEvent.setup();
107
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, onChange: onChange, debounceMs: 0, value: null }));
108
+ const input = screen.getByRole('combobox');
109
+ await user.type(input, 'Apple');
110
+ await waitFor(() => {
111
+ expect(screen.getByText('Apple')).toBeInTheDocument();
112
+ });
113
+ await user.click(screen.getByText('Apple'));
114
+ expect(onChange).toHaveBeenCalledWith('apple');
115
+ });
116
+ it('should show error state when loadOptions fails', async () => {
117
+ const { loadOptions } = createFailingLoadOptions('Load failed');
118
+ const user = userEvent.setup();
119
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, debounceMs: 0, value: null }));
120
+ const input = screen.getByRole('combobox');
121
+ await user.type(input, 'test');
122
+ await waitFor(() => {
123
+ expect(screen.getByText('Load failed')).toBeInTheDocument();
124
+ });
125
+ });
126
+ it('should show loading state while fetching', async () => {
127
+ let resolveLoad;
128
+ const loadOptions = vi.fn(() => new Promise((resolve) => {
129
+ resolveLoad = () => {
130
+ resolve(MOCK_OPTIONS);
131
+ };
132
+ }));
133
+ const user = userEvent.setup();
134
+ renderWithProviders(_jsx(AsyncComboboxField, { label: "Fruit", loadOptions: loadOptions, getOptionLabel: (o) => o.label, getOptionValue: (o) => o.value, debounceMs: 0, value: null }));
135
+ const input = screen.getByRole('combobox');
136
+ await user.type(input, 'app');
137
+ await waitFor(() => {
138
+ expect(screen.getByText('Loading...')).toBeInTheDocument();
139
+ });
140
+ // Cleanup: resolve the pending promise
141
+ act(() => {
142
+ resolveLoad?.();
143
+ });
144
+ });
145
+ });
146
+ });
147
+ //# sourceMappingURL=async-combobox-field.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-combobox-field.unit.test.js","sourceRoot":"","sources":["../../../../src/components/ui/async-combobox-field/async-combobox-field.unit.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type * as React from 'react';
2
+ import { Autocomplete as AutocompletePrimitive } from '@base-ui/react/autocomplete';
3
+ /**
4
+ * An autocomplete input that allows users to filter a list of suggestions
5
+ * while accepting free-form text input.
6
+ *
7
+ * Unlike Combobox, Autocomplete does not enforce selection — the input
8
+ * accepts any value, and suggestions are optional aids.
9
+ *
10
+ * https://base-ui.com/react/components/autocomplete
11
+ */
12
+ declare const Autocomplete: typeof AutocompletePrimitive.Root;
13
+ declare function AutocompleteValue({ ...props }: AutocompletePrimitive.Value.Props): React.ReactElement;
14
+ declare function AutocompleteTrigger({ className, children, ...props }: AutocompletePrimitive.Trigger.Props): React.ReactElement;
15
+ declare function AutocompleteClear({ className, ...props }: AutocompletePrimitive.Clear.Props): React.ReactElement;
16
+ declare function AutocompleteInput({ className, children, disabled, showTrigger, showClear, showSpinner, ...props }: AutocompletePrimitive.Input.Props & {
17
+ showTrigger?: boolean;
18
+ showClear?: boolean;
19
+ showSpinner?: boolean;
20
+ }): React.ReactElement;
21
+ declare function AutocompleteContent({ className, side, sideOffset, align, alignOffset, anchor, ...props }: AutocompletePrimitive.Popup.Props & Pick<AutocompletePrimitive.Positioner.Props, 'side' | 'align' | 'sideOffset' | 'alignOffset' | 'anchor'>): React.ReactElement;
22
+ declare function AutocompleteList({ className, ...props }: AutocompletePrimitive.List.Props): React.ReactElement;
23
+ declare function AutocompleteItem({ className, children, ...props }: AutocompletePrimitive.Item.Props): React.ReactElement;
24
+ declare function AutocompleteGroup({ className, ...props }: AutocompletePrimitive.Group.Props): React.ReactElement;
25
+ declare function AutocompleteLabel({ className, ...props }: AutocompletePrimitive.GroupLabel.Props): React.ReactElement;
26
+ declare function AutocompleteCollection({ ...props }: AutocompletePrimitive.Collection.Props): React.ReactElement;
27
+ declare function AutocompleteEmpty({ className, ...props }: AutocompletePrimitive.Empty.Props): React.ReactElement;
28
+ declare function AutocompleteStatus({ className, ...props }: AutocompletePrimitive.Status.Props): React.ReactElement;
29
+ declare function AutocompleteSeparator({ className, ...props }: AutocompletePrimitive.Separator.Props): React.ReactElement;
30
+ declare const useAutocompleteFilter: (options?: import("@base-ui/react/autocomplete").AutocompleteFilterOptions) => import("@base-ui/react/autocomplete").AutocompleteFilter;
31
+ export { Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteContent, AutocompleteEmpty, AutocompleteGroup, AutocompleteInput, AutocompleteItem, AutocompleteLabel, AutocompleteList, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, useAutocompleteFilter, };
32
+ //# sourceMappingURL=autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/autocomplete/autocomplete.tsx"],"names":[],"mappings":"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"}