@simplybusiness/mobius 5.8.0 → 5.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/components/Combobox/Combobox.js +35 -22
  3. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  4. package/dist/cjs/components/Combobox/Listbox.js +2 -4
  5. package/dist/cjs/components/Combobox/Listbox.js.map +1 -1
  6. package/dist/cjs/components/Combobox/fixtures.js +195 -4
  7. package/dist/cjs/components/Combobox/fixtures.js.map +1 -1
  8. package/dist/cjs/components/Combobox/useComboboxOptions.js +69 -0
  9. package/dist/cjs/components/Combobox/useComboboxOptions.js.map +1 -0
  10. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js +2 -1
  11. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  12. package/dist/cjs/hooks/index.js +2 -0
  13. package/dist/cjs/hooks/index.js.map +1 -1
  14. package/dist/cjs/hooks/useDebouncedValue/index.js +20 -0
  15. package/dist/cjs/hooks/useDebouncedValue/index.js.map +1 -0
  16. package/dist/cjs/hooks/useDebouncedValue/useDebouncedValue.js +36 -0
  17. package/dist/cjs/hooks/useDebouncedValue/useDebouncedValue.js.map +1 -0
  18. package/dist/cjs/hooks/useOnUnmount/index.js +20 -0
  19. package/dist/cjs/hooks/useOnUnmount/index.js.map +1 -0
  20. package/dist/cjs/hooks/useOnUnmount/useOnUnmount.js +27 -0
  21. package/dist/cjs/hooks/useOnUnmount/useOnUnmount.js.map +1 -0
  22. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  23. package/dist/esm/components/Combobox/Combobox.js +37 -24
  24. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  25. package/dist/esm/components/Combobox/Listbox.js +2 -4
  26. package/dist/esm/components/Combobox/Listbox.js.map +1 -1
  27. package/dist/esm/components/Combobox/fixtures.js +189 -1
  28. package/dist/esm/components/Combobox/fixtures.js.map +1 -1
  29. package/dist/esm/components/Combobox/types.js.map +1 -1
  30. package/dist/esm/components/Combobox/useComboboxOptions.js +59 -0
  31. package/dist/esm/components/Combobox/useComboboxOptions.js.map +1 -0
  32. package/dist/esm/components/VisuallyHidden/VisuallyHidden.js +2 -1
  33. package/dist/esm/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  34. package/dist/esm/hooks/index.js +2 -0
  35. package/dist/esm/hooks/index.js.map +1 -1
  36. package/dist/esm/hooks/useDebouncedValue/index.js +3 -0
  37. package/dist/esm/hooks/useDebouncedValue/index.js.map +1 -0
  38. package/dist/esm/hooks/useDebouncedValue/useDebouncedValue.js +26 -0
  39. package/dist/esm/hooks/useDebouncedValue/useDebouncedValue.js.map +1 -0
  40. package/dist/esm/hooks/useOnUnmount/index.js +3 -0
  41. package/dist/esm/hooks/useOnUnmount/index.js.map +1 -0
  42. package/dist/esm/hooks/useOnUnmount/useOnUnmount.js +17 -0
  43. package/dist/esm/hooks/useOnUnmount/useOnUnmount.js.map +1 -0
  44. package/dist/types/components/Combobox/Combobox.stories.d.ts +1 -0
  45. package/dist/types/components/Combobox/Listbox.d.ts +1 -2
  46. package/dist/types/components/Combobox/fixtures.d.ts +8 -1
  47. package/dist/types/components/Combobox/types.d.ts +1 -1
  48. package/dist/types/components/Combobox/useComboboxOptions.d.ts +10 -0
  49. package/dist/types/components/Combobox/useComboboxOptions.test.d.ts +1 -0
  50. package/dist/types/components/VisuallyHidden/VisuallyHidden.d.ts +3 -1
  51. package/dist/types/hooks/index.d.ts +2 -0
  52. package/dist/types/hooks/useDebouncedValue/index.d.ts +1 -0
  53. package/dist/types/hooks/useDebouncedValue/useDebouncedValue.d.ts +1 -0
  54. package/dist/types/hooks/useDebouncedValue/useDebouncedValue.test.d.ts +1 -0
  55. package/dist/types/hooks/useOnUnmount/index.d.ts +1 -0
  56. package/dist/types/hooks/useOnUnmount/useOnUnmount.d.ts +1 -0
  57. package/dist/types/hooks/useOnUnmount/useOnUnmount.test.d.ts +1 -0
  58. package/package.json +2 -2
  59. package/src/components/Combobox/Combobox.css +1 -1
  60. package/src/components/Combobox/Combobox.stories.tsx +26 -2
  61. package/src/components/Combobox/Combobox.test.tsx +679 -732
  62. package/src/components/Combobox/Combobox.tsx +44 -22
  63. package/src/components/Combobox/Listbox.tsx +1 -5
  64. package/src/components/Combobox/fixtures.tsx +58 -1
  65. package/src/components/Combobox/loading-dots.svg +27 -0
  66. package/src/components/Combobox/types.tsx +1 -1
  67. package/src/components/Combobox/useComboboxOptions.test.ts +423 -0
  68. package/src/components/Combobox/useComboboxOptions.ts +67 -0
  69. package/src/components/VisuallyHidden/VisuallyHidden.tsx +10 -2
  70. package/src/hooks/index.tsx +2 -0
  71. package/src/hooks/useDebouncedValue/index.tsx +1 -0
  72. package/src/hooks/useDebouncedValue/useDebouncedValue.test.tsx +62 -0
  73. package/src/hooks/useDebouncedValue/useDebouncedValue.tsx +25 -0
  74. package/src/hooks/useOnUnmount/index.tsx +1 -0
  75. package/src/hooks/useOnUnmount/useOnUnmount.test.tsx +37 -0
  76. package/src/hooks/useOnUnmount/useOnUnmount.tsx +19 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3a925d9: Add async support to Combobox
8
+
9
+ ### Patch Changes
10
+
11
+ - e3a86f9: Display combobox label
12
+
13
+ ## 5.8.1
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [78d44a8]
18
+ - @simplybusiness/icons@4.16.0
19
+
3
20
  ## 5.8.0
4
21
 
5
22
  ### Minor Changes
@@ -11,9 +11,12 @@ Object.defineProperty(exports, "Combobox", {
11
11
  const _jsxruntime = require("react/jsx-runtime");
12
12
  const _dedupe = /*#__PURE__*/ _interop_require_default(require("classnames/dedupe"));
13
13
  const _react = require("react");
14
+ const _hooks = require("../../hooks");
14
15
  const _TextField = require("../TextField");
16
+ const _VisuallyHidden = require("../VisuallyHidden");
15
17
  const _Listbox = require("./Listbox");
16
18
  const _useComboboxHighlight = require("./useComboboxHighlight");
19
+ const _useComboboxOptions = require("./useComboboxOptions");
17
20
  const _utils = require("./utils");
18
21
  function _interop_require_default(obj) {
19
22
  return obj && obj.__esModule ? obj : {
@@ -21,31 +24,25 @@ function _interop_require_default(obj) {
21
24
  };
22
25
  }
23
26
  const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
24
- const { defaultValue, options, asyncOptions, onSelected, className, placeholder, icon } = props;
27
+ const { defaultValue, options, asyncOptions, delay, minLength, onSelected, className, placeholder, icon, ...otherProps } = props;
25
28
  const fallbackRef = (0, _react.useRef)(null);
26
29
  const [inputValue, setInputValue] = (0, _react.useState)(defaultValue || "");
27
30
  const [isOpen, setIsOpen] = (0, _react.useState)(false);
28
- const [filteredOptions, setFilteredOptions] = (0, _react.useState)([]);
31
+ const { filteredOptions, isLoading } = (0, _useComboboxOptions.useComboboxOptions)({
32
+ options,
33
+ asyncOptions,
34
+ inputValue,
35
+ delay,
36
+ minLength
37
+ });
29
38
  const { highlightedIndex, highlightedGroupIndex, highlightNextOption, highlightPreviousOption, highlightFirstOption, highlightLastOption, clearHighlight } = (0, _useComboboxHighlight.useComboboxHighlight)(filteredOptions);
30
39
  const inputRef = ref || fallbackRef;
31
40
  const listboxId = (0, _react.useId)();
41
+ const statusId = (0, _react.useId)();
32
42
  const blurTimeoutRef = (0, _react.useRef)(null);
33
- (0, _react.useEffect)(()=>{
34
- const fetchOptions = async ()=>{
35
- if (asyncOptions) {
36
- const result = await asyncOptions(inputValue);
37
- setFilteredOptions(result);
38
- } else {
39
- setFilteredOptions((0, _utils.filterOptions)(options, inputValue));
40
- }
41
- };
42
- fetchOptions();
43
- }, [
44
- inputValue,
45
- options,
46
- asyncOptions
47
- ]);
43
+ const showListbox = isOpen && filteredOptions.length > 0;
48
44
  const handleFocus = ()=>{
45
+ if (filteredOptions.length === 0) return;
49
46
  if (blurTimeoutRef.current) {
50
47
  clearTimeout(blurTimeoutRef.current);
51
48
  blurTimeoutRef.current = null;
@@ -57,6 +54,11 @@ const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
57
54
  setIsOpen(false);
58
55
  }, 150);
59
56
  };
57
+ (0, _hooks.useOnUnmount)(()=>{
58
+ if (blurTimeoutRef.current) {
59
+ clearTimeout(blurTimeoutRef.current);
60
+ }
61
+ });
60
62
  const handleInputChange = (e)=>{
61
63
  const newValue = e.target.value;
62
64
  setInputValue(newValue);
@@ -68,7 +70,7 @@ const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
68
70
  if (!value) return;
69
71
  setIsOpen(false);
70
72
  setInputValue(value);
71
- onSelected === null || onSelected === void 0 ? void 0 : onSelected(value);
73
+ onSelected === null || onSelected === void 0 ? void 0 : onSelected(option);
72
74
  };
73
75
  function getHighlightedOption() {
74
76
  if (highlightedIndex === -1) return undefined;
@@ -115,12 +117,23 @@ const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
115
117
  }
116
118
  };
117
119
  const classes = (0, _dedupe.default)("mobius mobius-combobox", {
118
- expanded: isOpen
120
+ "mobius-combobox--is-expanded": isOpen,
121
+ "mobius-combobox--is-loading": isLoading
119
122
  }, className);
120
123
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
124
+ "data-testid": "mobius-combobox__wrapper",
121
125
  className: classes,
122
126
  children: [
127
+ isLoading && /*#__PURE__*/ (0, _jsxruntime.jsx)(_VisuallyHidden.VisuallyHidden, {
128
+ role: "status",
129
+ "aria-live": "polite",
130
+ id: statusId,
131
+ elementType: "div",
132
+ className: "mobius-combobox__status",
133
+ children: "Loading options"
134
+ }),
123
135
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_TextField.TextField, {
136
+ ...otherProps,
124
137
  className: "mobius-combobox__input",
125
138
  role: "combobox",
126
139
  value: inputValue,
@@ -130,6 +143,7 @@ const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
130
143
  onKeyDown: handleKeyDown,
131
144
  onChange: handleInputChange,
132
145
  autoComplete: "off",
146
+ "aria-describedby": isLoading ? statusId : undefined,
133
147
  "aria-autocomplete": "list",
134
148
  "aria-haspopup": "listbox",
135
149
  "aria-controls": listboxId,
@@ -138,13 +152,12 @@ const Combobox = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
138
152
  prefixInside: icon,
139
153
  ref: inputRef
140
154
  }),
141
- isOpen && /*#__PURE__*/ (0, _jsxruntime.jsx)(_Listbox.Listbox, {
155
+ showListbox && /*#__PURE__*/ (0, _jsxruntime.jsx)(_Listbox.Listbox, {
142
156
  id: listboxId,
143
157
  options: filteredOptions,
144
158
  highlightedIndex: highlightedIndex,
145
159
  highlightedGroupIndex: highlightedGroupIndex,
146
- onOptionSelect: handleOptionSelect,
147
- expanded: isOpen
160
+ onOptionSelect: handleOptionSelect
148
161
  })
149
162
  ]
150
163
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import classNames from \"classnames/dedupe\";\nimport { forwardRef, useEffect, useId, useRef, useState } from \"react\";\nimport type { ForwardedRefComponent } from \"../../types\";\nimport { TextField } from \"../TextField\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type {\n ComboboxElementType,\n ComboboxOption,\n ComboboxOptions,\n ComboboxProps,\n ComboboxRef,\n} from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { filterOptions, getOptionValue, isOptionGroup } from \"./utils\";\n\nexport const Combobox: ForwardedRefComponent<\n ComboboxProps,\n ComboboxElementType\n> = forwardRef((props: ComboboxProps, ref: ComboboxRef) => {\n const {\n defaultValue,\n options,\n asyncOptions,\n onSelected,\n className,\n placeholder,\n icon,\n } = props;\n\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [filteredOptions, setFilteredOptions] = useState<ComboboxOptions>([]);\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n useEffect(() => {\n const fetchOptions = async () => {\n if (asyncOptions) {\n const result = await asyncOptions(inputValue);\n setFilteredOptions(result);\n } else {\n setFilteredOptions(filterOptions(options, inputValue));\n }\n };\n\n fetchOptions();\n }, [inputValue, options, asyncOptions]);\n\n const handleFocus = () => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n setIsOpen(true);\n };\n\n const handleBlur = () => {\n blurTimeoutRef.current = setTimeout(() => {\n setIsOpen(false);\n }, 150);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setIsOpen(true);\n clearHighlight();\n };\n\n const handleOptionSelect = (option: ComboboxOption) => {\n const value = getOptionValue(option);\n if (!value) return;\n setIsOpen(false);\n setInputValue(value);\n onSelected?.(value);\n };\n\n function getHighlightedOption() {\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n handleOptionSelect(getHighlightedOption()!);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n { expanded: isOpen },\n className,\n );\n\n return (\n <div className={classes}>\n <TextField\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1\n ? undefined\n : `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`\n }\n prefixInside={icon}\n ref={inputRef}\n />\n {isOpen && (\n <Listbox\n id={listboxId}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n expanded={isOpen}\n />\n )}\n </div>\n );\n});\n"],"names":["Combobox","forwardRef","props","ref","defaultValue","options","asyncOptions","onSelected","className","placeholder","icon","fallbackRef","useRef","inputValue","setInputValue","useState","isOpen","setIsOpen","filteredOptions","setFilteredOptions","highlightedIndex","highlightedGroupIndex","highlightNextOption","highlightPreviousOption","highlightFirstOption","highlightLastOption","clearHighlight","useComboboxHighlight","inputRef","listboxId","useId","blurTimeoutRef","useEffect","fetchOptions","result","filterOptions","handleFocus","current","clearTimeout","handleBlur","setTimeout","handleInputChange","e","newValue","target","value","handleOptionSelect","option","getOptionValue","getHighlightedOption","undefined","isOptionGroup","group","handleKeyDown","key","preventDefault","classes","classNames","expanded","div","TextField","role","onFocus","onBlur","onKeyDown","onChange","autoComplete","aria-autocomplete","aria-haspopup","aria-controls","aria-expanded","aria-activedescendant","prefixInside","Listbox","id","onOptionSelect"],"mappings":";;;;+BAeaA;;;eAAAA;;;;+DAfU;uBACwC;2BAErC;yBACF;sCAQa;uBACwB;;;;;;AAEtD,MAAMA,yBAGTC,IAAAA,iBAAU,EAAC,CAACC,OAAsBC;IACpC,MAAM,EACJC,YAAY,EACZC,OAAO,EACPC,YAAY,EACZC,UAAU,EACVC,SAAS,EACTC,WAAW,EACXC,IAAI,EACL,GAAGR;IAEJ,MAAMS,cAAcC,IAAAA,aAAM,EAAmB;IAC7C,MAAM,CAACC,YAAYC,cAAc,GAAGC,IAAAA,eAAQ,EAACX,gBAAgB;IAC7D,MAAM,CAACY,QAAQC,UAAU,GAAGF,IAAAA,eAAQ,EAAC;IACrC,MAAM,CAACG,iBAAiBC,mBAAmB,GAAGJ,IAAAA,eAAQ,EAAkB,EAAE;IAC1E,MAAM,EACJK,gBAAgB,EAChBC,qBAAqB,EACrBC,mBAAmB,EACnBC,uBAAuB,EACvBC,oBAAoB,EACpBC,mBAAmB,EACnBC,cAAc,EACf,GAAGC,IAAAA,0CAAoB,EAACT;IAEzB,MAAMU,WAAWzB,OAAOQ;IACxB,MAAMkB,YAAYC,IAAAA,YAAK;IACvB,MAAMC,iBAAiBnB,IAAAA,aAAM,EAAwB;IAErDoB,IAAAA,gBAAS,EAAC;QACR,MAAMC,eAAe;YACnB,IAAI3B,cAAc;gBAChB,MAAM4B,SAAS,MAAM5B,aAAaO;gBAClCM,mBAAmBe;YACrB,OAAO;gBACLf,mBAAmBgB,IAAAA,oBAAa,EAAC9B,SAASQ;YAC5C;QACF;QAEAoB;IACF,GAAG;QAACpB;QAAYR;QAASC;KAAa;IAEtC,MAAM8B,cAAc;QAClB,IAAIL,eAAeM,OAAO,EAAE;YAC1BC,aAAaP,eAAeM,OAAO;YACnCN,eAAeM,OAAO,GAAG;QAC3B;QACApB,UAAU;IACZ;IAEA,MAAMsB,aAAa;QACjBR,eAAeM,OAAO,GAAGG,WAAW;YAClCvB,UAAU;QACZ,GAAG;IACL;IAEA,MAAMwB,oBAAoB,CAACC;QACzB,MAAMC,WAAWD,EAAEE,MAAM,CAACC,KAAK;QAC/B/B,cAAc6B;QACd1B,UAAU;QACVS;IACF;IAEA,MAAMoB,qBAAqB,CAACC;QAC1B,MAAMF,QAAQG,IAAAA,qBAAc,EAACD;QAC7B,IAAI,CAACF,OAAO;QACZ5B,UAAU;QACVH,cAAc+B;QACdtC,uBAAAA,iCAAAA,WAAasC;IACf;IAEA,SAASI;QACP,IAAI7B,qBAAqB,CAAC,GAAG,OAAO8B;QAEpC,IAAIC,IAAAA,oBAAa,EAACjC,kBAAkB;YAClC,MAAMkC,QAAQlC,eAAe,CAACG,sBAAsB;YACpD,OAAO+B,kBAAAA,4BAAAA,MAAO/C,OAAO,CAACe,iBAAiB;QACzC;QAEA,OAAOF,eAAe,CAACE,iBAAiB;IAC1C;IAEA,MAAMiC,gBAAgB,CAACX;QACrB,OAAQA,EAAEY,GAAG;YACX,KAAK;gBACHZ,EAAEa,cAAc;gBAChBtC,UAAU;gBACVK;gBACA;YACF,KAAK;gBACHoB,EAAEa,cAAc;gBAChBtC,UAAU;gBACVM;gBACA;YACF,KAAK;gBACHmB,EAAEa,cAAc;gBAChBtC,UAAU;gBACVO;gBACA;YACF,KAAK;gBACHkB,EAAEa,cAAc;gBAChBtC,UAAU;gBACVQ;gBACA;YACF,KAAK;gBACHiB,EAAEa,cAAc;gBAChB,IAAIvC,QAAQ;oBACV8B,mBAAmBG;gBACrB;gBACA;YACF,KAAK;gBACHP,EAAEa,cAAc;gBAChBtC,UAAU;gBACVS;gBACA;YACF;QAEF;IACF;IAEA,MAAM8B,UAAUC,IAAAA,eAAU,EACxB,0BACA;QAAEC,UAAU1C;IAAO,GACnBR;IAGF,qBACE,sBAACmD;QAAInD,WAAWgD;;0BACd,qBAACI,oBAAS;gBACRpD,WAAU;gBACVqD,MAAK;gBACLhB,OAAOhC;gBACPJ,aAAaA;gBACbqD,SAAS1B;gBACT2B,QAAQxB;gBACRyB,WAAWX;gBACXY,UAAUxB;gBACVyB,cAAa;gBACbC,qBAAkB;gBAClBC,iBAAc;gBACdC,iBAAexC;gBACfyC,iBAAetD;gBACfuD,yBACEnD,qBAAqB,CAAC,IAClB8B,YACA,GAAGrB,UAAU,QAAQ,EAAER,sBAAsB,CAAC,EAAED,kBAAkB;gBAExEoD,cAAc9D;gBACdP,KAAKyB;;YAENZ,wBACC,qBAACyD,gBAAO;gBACNC,IAAI7C;gBACJxB,SAASa;gBACTE,kBAAkBA;gBAClBC,uBAAuBA;gBACvBsD,gBAAgB7B;gBAChBY,UAAU1C;;;;AAKpB"}
1
+ {"version":3,"sources":["../../../../src/components/Combobox/Combobox.tsx"],"sourcesContent":["import classNames from \"classnames/dedupe\";\nimport { forwardRef, useId, useRef, useState } from \"react\";\nimport { useOnUnmount } from \"../../hooks\";\nimport type { ForwardedRefComponent } from \"../../types\";\nimport { TextField } from \"../TextField\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type {\n ComboboxElementType,\n ComboboxOption,\n ComboboxProps,\n ComboboxRef,\n} from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { useComboboxOptions } from \"./useComboboxOptions\";\nimport { getOptionValue, isOptionGroup } from \"./utils\";\n\nexport const Combobox: ForwardedRefComponent<\n ComboboxProps,\n ComboboxElementType\n> = forwardRef((props: ComboboxProps, ref: ComboboxRef) => {\n const {\n defaultValue,\n options,\n asyncOptions,\n delay,\n minLength,\n onSelected,\n className,\n placeholder,\n icon,\n ...otherProps\n } = props;\n\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const { filteredOptions, isLoading } = useComboboxOptions({\n options,\n asyncOptions,\n inputValue,\n delay,\n minLength,\n });\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const statusId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const showListbox = isOpen && filteredOptions.length > 0;\n\n const handleFocus = () => {\n if (filteredOptions.length === 0) return;\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n setIsOpen(true);\n };\n\n const handleBlur = () => {\n blurTimeoutRef.current = setTimeout(() => {\n setIsOpen(false);\n }, 150);\n };\n\n useOnUnmount(() => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setIsOpen(true);\n clearHighlight();\n };\n\n const handleOptionSelect = (option: ComboboxOption) => {\n const value = getOptionValue(option);\n if (!value) return;\n setIsOpen(false);\n setInputValue(value);\n onSelected?.(option);\n };\n\n function getHighlightedOption() {\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n handleOptionSelect(getHighlightedOption()!);\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n {\n \"mobius-combobox--is-expanded\": isOpen,\n \"mobius-combobox--is-loading\": isLoading,\n },\n className,\n );\n\n return (\n <div data-testid=\"mobius-combobox__wrapper\" className={classes}>\n {isLoading && (\n <VisuallyHidden\n role=\"status\"\n aria-live=\"polite\"\n id={statusId}\n elementType=\"div\"\n className=\"mobius-combobox__status\"\n >\n Loading options\n </VisuallyHidden>\n )}\n <TextField\n {...otherProps}\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-describedby={isLoading ? statusId : undefined}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1\n ? undefined\n : `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`\n }\n prefixInside={icon}\n ref={inputRef}\n />\n {showListbox && (\n <Listbox\n id={listboxId}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n />\n )}\n </div>\n );\n});\n"],"names":["Combobox","forwardRef","props","ref","defaultValue","options","asyncOptions","delay","minLength","onSelected","className","placeholder","icon","otherProps","fallbackRef","useRef","inputValue","setInputValue","useState","isOpen","setIsOpen","filteredOptions","isLoading","useComboboxOptions","highlightedIndex","highlightedGroupIndex","highlightNextOption","highlightPreviousOption","highlightFirstOption","highlightLastOption","clearHighlight","useComboboxHighlight","inputRef","listboxId","useId","statusId","blurTimeoutRef","showListbox","length","handleFocus","current","clearTimeout","handleBlur","setTimeout","useOnUnmount","handleInputChange","e","newValue","target","value","handleOptionSelect","option","getOptionValue","getHighlightedOption","undefined","isOptionGroup","group","handleKeyDown","key","preventDefault","classes","classNames","div","data-testid","VisuallyHidden","role","aria-live","id","elementType","TextField","onFocus","onBlur","onKeyDown","onChange","autoComplete","aria-describedby","aria-autocomplete","aria-haspopup","aria-controls","aria-expanded","aria-activedescendant","prefixInside","Listbox","onOptionSelect"],"mappings":"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"}
@@ -17,10 +17,8 @@ function _interop_require_default(obj) {
17
17
  default: obj
18
18
  };
19
19
  }
20
- const Listbox = ({ id, options, highlightedIndex, highlightedGroupIndex, onOptionSelect, expanded = false })=>{
21
- const classes = (0, _classnames.default)("mobius-combobox__list", {
22
- expanded
23
- });
20
+ const Listbox = ({ id, options, highlightedIndex, highlightedGroupIndex, onOptionSelect })=>{
21
+ const classes = (0, _classnames.default)("mobius-combobox__list");
24
22
  return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
25
23
  role: "listbox",
26
24
  id: id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Combobox/Listbox.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { Option } from \"./Option\";\nimport type { ComboboxOption, ComboboxOptions } from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nexport type ListboxProps = {\n id: string;\n options: ComboboxOptions;\n highlightedIndex: number;\n highlightedGroupIndex: number;\n onOptionSelect: (option: ComboboxOption) => void;\n expanded?: boolean;\n};\n\nexport const Listbox = ({\n id,\n options,\n highlightedIndex,\n highlightedGroupIndex,\n onOptionSelect,\n expanded = false,\n}: ListboxProps) => {\n const classes = classNames(\"mobius-combobox__list\", {\n expanded,\n });\n\n return (\n <div role=\"listbox\" id={id} className={classes}>\n {isOptionGroup(options)\n ? options.map((option, groupIndex) => (\n <ul\n role=\"group\"\n key={option.heading}\n aria-labelledby={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group\"\n >\n <li\n role=\"presentation\"\n id={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group-label\"\n >\n {option.heading}\n </li>\n {option.options.map((groupOption, index) => (\n <Option\n // eslint-disable-next-line react/no-array-index-key\n key={`${id}-option-${groupIndex}-${index}`}\n option={groupOption}\n index={index}\n groupIndex={groupIndex}\n isHighlighted={\n highlightedIndex === index &&\n highlightedGroupIndex === groupIndex\n }\n onOptionSelect={onOptionSelect}\n id={id}\n />\n ))}\n </ul>\n ))\n : options.map((option, index) => (\n <Option\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n option={option}\n index={index}\n isHighlighted={highlightedIndex === index}\n onOptionSelect={onOptionSelect}\n id={id}\n />\n ))}\n </div>\n );\n};\n"],"names":["Listbox","id","options","highlightedIndex","highlightedGroupIndex","onOptionSelect","expanded","classes","classNames","div","role","className","isOptionGroup","map","option","groupIndex","ul","aria-labelledby","li","heading","groupOption","index","Option","isHighlighted"],"mappings":";;;;+BAcaA;;;eAAAA;;;;mEAdU;wBACA;uBAEO;;;;;;AAWvB,MAAMA,UAAU,CAAC,EACtBC,EAAE,EACFC,OAAO,EACPC,gBAAgB,EAChBC,qBAAqB,EACrBC,cAAc,EACdC,WAAW,KAAK,EACH;IACb,MAAMC,UAAUC,IAAAA,mBAAU,EAAC,yBAAyB;QAClDF;IACF;IAEA,qBACE,qBAACG;QAAIC,MAAK;QAAUT,IAAIA;QAAIU,WAAWJ;kBACpCK,IAAAA,oBAAa,EAACV,WACXA,QAAQW,GAAG,CAAC,CAACC,QAAQC,2BACnB,sBAACC;gBACCN,MAAK;gBAELO,mBAAiB,GAAGhB,GAAG,OAAO,EAAEc,YAAY;gBAC5CJ,WAAU;;kCAEV,qBAACO;wBACCR,MAAK;wBACLT,IAAI,GAAGA,GAAG,OAAO,EAAEc,YAAY;wBAC/BJ,WAAU;kCAETG,OAAOK,OAAO;;oBAEhBL,OAAOZ,OAAO,CAACW,GAAG,CAAC,CAACO,aAAaC,sBAChC,qBAACC,cAAM;4BAGLR,QAAQM;4BACRC,OAAOA;4BACPN,YAAYA;4BACZQ,eACEpB,qBAAqBkB,SACrBjB,0BAA0BW;4BAE5BV,gBAAgBA;4BAChBJ,IAAIA;2BATC,GAAGA,GAAG,QAAQ,EAAEc,WAAW,CAAC,EAAEM,OAAO;;eAdzCP,OAAOK,OAAO,KA4BvBjB,QAAQW,GAAG,CAAC,CAACC,QAAQO,sBACnB,qBAACC,cAAM;gBAGLR,QAAQA;gBACRO,OAAOA;gBACPE,eAAepB,qBAAqBkB;gBACpChB,gBAAgBA;gBAChBJ,IAAIA;eALCoB;;AAUnB"}
1
+ {"version":3,"sources":["../../../../src/components/Combobox/Listbox.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { Option } from \"./Option\";\nimport type { ComboboxOption, ComboboxOptions } from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nexport type ListboxProps = {\n id: string;\n options: ComboboxOptions;\n highlightedIndex: number;\n highlightedGroupIndex: number;\n onOptionSelect: (option: ComboboxOption) => void;\n};\n\nexport const Listbox = ({\n id,\n options,\n highlightedIndex,\n highlightedGroupIndex,\n onOptionSelect,\n}: ListboxProps) => {\n const classes = classNames(\"mobius-combobox__list\");\n\n return (\n <div role=\"listbox\" id={id} className={classes}>\n {isOptionGroup(options)\n ? options.map((option, groupIndex) => (\n <ul\n role=\"group\"\n key={option.heading}\n aria-labelledby={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group\"\n >\n <li\n role=\"presentation\"\n id={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group-label\"\n >\n {option.heading}\n </li>\n {option.options.map((groupOption, index) => (\n <Option\n // eslint-disable-next-line react/no-array-index-key\n key={`${id}-option-${groupIndex}-${index}`}\n option={groupOption}\n index={index}\n groupIndex={groupIndex}\n isHighlighted={\n highlightedIndex === index &&\n highlightedGroupIndex === groupIndex\n }\n onOptionSelect={onOptionSelect}\n id={id}\n />\n ))}\n </ul>\n ))\n : options.map((option, index) => (\n <Option\n // eslint-disable-next-line react/no-array-index-key\n key={index}\n option={option}\n index={index}\n isHighlighted={highlightedIndex === index}\n onOptionSelect={onOptionSelect}\n id={id}\n />\n ))}\n </div>\n );\n};\n"],"names":["Listbox","id","options","highlightedIndex","highlightedGroupIndex","onOptionSelect","classes","classNames","div","role","className","isOptionGroup","map","option","groupIndex","ul","aria-labelledby","li","heading","groupOption","index","Option","isHighlighted"],"mappings":";;;;+BAaaA;;;eAAAA;;;;mEAbU;wBACA;uBAEO;;;;;;AAUvB,MAAMA,UAAU,CAAC,EACtBC,EAAE,EACFC,OAAO,EACPC,gBAAgB,EAChBC,qBAAqB,EACrBC,cAAc,EACD;IACb,MAAMC,UAAUC,IAAAA,mBAAU,EAAC;IAE3B,qBACE,qBAACC;QAAIC,MAAK;QAAUR,IAAIA;QAAIS,WAAWJ;kBACpCK,IAAAA,oBAAa,EAACT,WACXA,QAAQU,GAAG,CAAC,CAACC,QAAQC,2BACnB,sBAACC;gBACCN,MAAK;gBAELO,mBAAiB,GAAGf,GAAG,OAAO,EAAEa,YAAY;gBAC5CJ,WAAU;;kCAEV,qBAACO;wBACCR,MAAK;wBACLR,IAAI,GAAGA,GAAG,OAAO,EAAEa,YAAY;wBAC/BJ,WAAU;kCAETG,OAAOK,OAAO;;oBAEhBL,OAAOX,OAAO,CAACU,GAAG,CAAC,CAACO,aAAaC,sBAChC,qBAACC,cAAM;4BAGLR,QAAQM;4BACRC,OAAOA;4BACPN,YAAYA;4BACZQ,eACEnB,qBAAqBiB,SACrBhB,0BAA0BU;4BAE5BT,gBAAgBA;4BAChBJ,IAAIA;2BATC,GAAGA,GAAG,QAAQ,EAAEa,WAAW,CAAC,EAAEM,OAAO;;eAdzCP,OAAOK,OAAO,KA4BvBhB,QAAQU,GAAG,CAAC,CAACC,QAAQO,sBACnB,qBAACC,cAAM;gBAGLR,QAAQA;gBACRO,OAAOA;gBACPE,eAAenB,qBAAqBiB;gBACpCf,gBAAgBA;gBAChBJ,IAAIA;eALCmB;;AAUnB"}
@@ -12,12 +12,15 @@ _export(exports, {
12
12
  FRUITS: function() {
13
13
  return FRUITS;
14
14
  },
15
- FRUITS_GROUPS: function() {
16
- return FRUITS_GROUPS;
17
- },
18
15
  FRUITS_OBJECTS: function() {
19
16
  return FRUITS_OBJECTS;
20
17
  },
18
+ FRUITS_OBJECT_GROUPS: function() {
19
+ return FRUITS_OBJECT_GROUPS;
20
+ },
21
+ FRUITS_STRING_GROUPS: function() {
22
+ return FRUITS_STRING_GROUPS;
23
+ },
21
24
  US_STATES: function() {
22
25
  return US_STATES;
23
26
  }
@@ -246,7 +249,7 @@ const FRUITS_OBJECTS = [
246
249
  value: "watermelon"
247
250
  }
248
251
  ];
249
- const FRUITS_GROUPS = [
252
+ const FRUITS_STRING_GROUPS = [
250
253
  {
251
254
  heading: "A-L",
252
255
  options: [
@@ -302,6 +305,194 @@ const FRUITS_GROUPS = [
302
305
  ]
303
306
  }
304
307
  ];
308
+ const FRUITS_OBJECT_GROUPS = [
309
+ {
310
+ heading: "A-L",
311
+ options: [
312
+ {
313
+ label: "Apple",
314
+ value: "apple"
315
+ },
316
+ {
317
+ label: "Apricot",
318
+ value: "apricot"
319
+ },
320
+ {
321
+ label: "Avocado",
322
+ value: "avocado"
323
+ },
324
+ {
325
+ label: "Banana",
326
+ value: "banana"
327
+ },
328
+ {
329
+ label: "Blackberry",
330
+ value: "blackberry"
331
+ },
332
+ {
333
+ label: "Blueberry",
334
+ value: "blueberry"
335
+ },
336
+ {
337
+ label: "Cantaloupe",
338
+ value: "cantaloupe"
339
+ },
340
+ {
341
+ label: "Cherry",
342
+ value: "cherry"
343
+ },
344
+ {
345
+ label: "Clementine",
346
+ value: "clementine"
347
+ },
348
+ {
349
+ label: "Coconut",
350
+ value: "coconut"
351
+ },
352
+ {
353
+ label: "Cranberry",
354
+ value: "cranberry"
355
+ },
356
+ {
357
+ label: "Date",
358
+ value: "date"
359
+ },
360
+ {
361
+ label: "Dragonfruit",
362
+ value: "dragonfruit"
363
+ },
364
+ {
365
+ label: "Durian",
366
+ value: "durian"
367
+ },
368
+ {
369
+ label: "Elderberry",
370
+ value: "elderberry"
371
+ },
372
+ {
373
+ label: "Fig",
374
+ value: "fig"
375
+ },
376
+ {
377
+ label: "Grape",
378
+ value: "grape"
379
+ },
380
+ {
381
+ label: "Grapefruit",
382
+ value: "grapefruit"
383
+ },
384
+ {
385
+ label: "Guava",
386
+ value: "guava"
387
+ },
388
+ {
389
+ label: "Honeydew",
390
+ value: "honeydew"
391
+ },
392
+ {
393
+ label: "Jackfruit",
394
+ value: "jackfruit"
395
+ },
396
+ {
397
+ label: "Kiwi",
398
+ value: "kiwi"
399
+ },
400
+ {
401
+ label: "Kumquat",
402
+ value: "kumquat"
403
+ },
404
+ {
405
+ label: "Lemon",
406
+ value: "lemon"
407
+ },
408
+ {
409
+ label: "Lime",
410
+ value: "lime"
411
+ },
412
+ {
413
+ label: "Lychee",
414
+ value: "lychee"
415
+ }
416
+ ]
417
+ },
418
+ {
419
+ heading: "M-Z",
420
+ options: [
421
+ {
422
+ label: "Mango",
423
+ value: "mango"
424
+ },
425
+ {
426
+ label: "Mulberry",
427
+ value: "mulberry"
428
+ },
429
+ {
430
+ label: "Nectarine",
431
+ value: "nectarine"
432
+ },
433
+ {
434
+ label: "Orange",
435
+ value: "orange"
436
+ },
437
+ {
438
+ label: "Papaya",
439
+ value: "papaya"
440
+ },
441
+ {
442
+ label: "Passionfruit",
443
+ value: "passionfruit"
444
+ },
445
+ {
446
+ label: "Peach",
447
+ value: "peach"
448
+ },
449
+ {
450
+ label: "Pear",
451
+ value: "pear"
452
+ },
453
+ {
454
+ label: "Persimmon",
455
+ value: "persimmon"
456
+ },
457
+ {
458
+ label: "Pineapple",
459
+ value: "pineapple"
460
+ },
461
+ {
462
+ label: "Plum",
463
+ value: "plum"
464
+ },
465
+ {
466
+ label: "Pomegranate",
467
+ value: "pomegranate"
468
+ },
469
+ {
470
+ label: "Raspberry",
471
+ value: "raspberry"
472
+ },
473
+ {
474
+ label: "Redcurrant",
475
+ value: "redcurrant"
476
+ },
477
+ {
478
+ label: "Starfruit",
479
+ value: "starfruit"
480
+ },
481
+ {
482
+ label: "Strawberry",
483
+ value: "strawberry"
484
+ },
485
+ {
486
+ label: "Tangerine",
487
+ value: "tangerine"
488
+ },
489
+ {
490
+ label: "Watermelon",
491
+ value: "watermelon"
492
+ }
493
+ ]
494
+ }
495
+ ];
305
496
  const US_STATES = [
306
497
  "Alabama",
307
498
  "Alaska",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Combobox/fixtures.tsx"],"sourcesContent":["export const FRUITS = [\n \"Apple\",\n \"Apricot\",\n \"Avocado\",\n \"Banana\",\n \"Blackberry\",\n \"Blueberry\",\n \"Cantaloupe\",\n \"Cherry\",\n \"Clementine\",\n \"Coconut\",\n \"Cranberry\",\n \"Date\",\n \"Dragonfruit\",\n \"Durian\",\n \"Elderberry\",\n \"Fig\",\n \"Grape\",\n \"Grapefruit\",\n \"Guava\",\n \"Honeydew\",\n \"Jackfruit\",\n \"Kiwi\",\n \"Kumquat\",\n \"Lemon\",\n \"Lime\",\n \"Lychee\",\n \"Mango\",\n \"Mulberry\",\n \"Nectarine\",\n \"Orange\",\n \"Papaya\",\n \"Passionfruit\",\n \"Peach\",\n \"Pear\",\n \"Persimmon\",\n \"Pineapple\",\n \"Plum\",\n \"Pomegranate\",\n \"Raspberry\",\n \"Redcurrant\",\n \"Starfruit\",\n \"Strawberry\",\n \"Tangerine\",\n \"Watermelon\",\n];\n\nexport const FRUITS_OBJECTS = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Apricot\", value: \"apricot\" },\n { label: \"Avocado\", value: \"avocado\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blackberry\", value: \"blackberry\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Cantaloupe\", value: \"cantaloupe\" },\n { label: \"Cherry\", value: \"cherry\" },\n { label: \"Clementine\", value: \"clementine\" },\n { label: \"Coconut\", value: \"coconut\" },\n { label: \"Cranberry\", value: \"cranberry\" },\n { label: \"Date\", value: \"date\" },\n { label: \"Dragonfruit\", value: \"dragonfruit\" },\n { label: \"Durian\", value: \"durian\" },\n { label: \"Elderberry\", value: \"elderberry\" },\n { label: \"Fig\", value: \"fig\" },\n { label: \"Grape\", value: \"grape\" },\n { label: \"Grapefruit\", value: \"grapefruit\" },\n { label: \"Guava\", value: \"guava\" },\n { label: \"Honeydew\", value: \"honeydew\" },\n { label: \"Jackfruit\", value: \"jackfruit\" },\n { label: \"Kiwi\", value: \"kiwi\" },\n { label: \"Kumquat\", value: \"kumquat\" },\n { label: \"Lemon\", value: \"lemon\" },\n { label: \"Lime\", value: \"lime\" },\n { label: \"Lychee\", value: \"lychee\" },\n { label: \"Mango\", value: \"mango\" },\n { label: \"Mulberry\", value: \"mulberry\" },\n { label: \"Nectarine\", value: \"nectarine\" },\n { label: \"Orange\", value: \"orange\" },\n { label: \"Papaya\", value: \"papaya\" },\n { label: \"Passionfruit\", value: \"passionfruit\" },\n { label: \"Peach\", value: \"peach\" },\n { label: \"Pear\", value: \"pear\" },\n { label: \"Persimmon\", value: \"persimmon\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Plum\", value: \"plum\" },\n { label: \"Pomegranate\", value: \"pomegranate\" },\n { label: \"Raspberry\", value: \"raspberry\" },\n { label: \"Redcurrant\", value: \"redcurrant\" },\n { label: \"Starfruit\", value: \"starfruit\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Tangerine\", value: \"tangerine\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n];\n\nexport const FRUITS_GROUPS = [\n {\n heading: \"A-L\",\n options: [\n \"Apple\",\n \"Apricot\",\n \"Avocado\",\n \"Banana\",\n \"Blackberry\",\n \"Blueberry\",\n \"Cantaloupe\",\n \"Cherry\",\n \"Clementine\",\n \"Coconut\",\n \"Cranberry\",\n \"Date\",\n \"Dragonfruit\",\n \"Durian\",\n \"Elderberry\",\n \"Fig\",\n \"Grape\",\n \"Grapefruit\",\n \"Guava\",\n \"Honeydew\",\n \"Jackfruit\",\n \"Kiwi\",\n \"Kumquat\",\n \"Lemon\",\n \"Lime\",\n \"Lychee\",\n ],\n },\n {\n heading: \"M-Z\",\n options: [\n \"Mango\",\n \"Mulberry\",\n \"Nectarine\",\n \"Orange\",\n \"Papaya\",\n \"Passionfruit\",\n \"Peach\",\n \"Pear\",\n \"Persimmon\",\n \"Pineapple\",\n \"Plum\",\n \"Pomegranate\",\n \"Raspberry\",\n \"Redcurrant\",\n \"Starfruit\",\n \"Strawberry\",\n \"Tangerine\",\n \"Watermelon\",\n ],\n },\n];\n\nexport const US_STATES = [\n \"Alabama\",\n \"Alaska\",\n \"Arizona\",\n \"Arkansas\",\n \"California\",\n \"Colorado\",\n \"Connecticut\",\n \"Delaware\",\n \"District Of Columbia\",\n \"Florida\",\n \"Georgia\",\n \"Hawaii\",\n \"Idaho\",\n \"Illinois\",\n \"Indiana\",\n \"Iowa\",\n \"Kansas\",\n \"Kentucky\",\n \"Louisiana\",\n \"Maine\",\n \"Maryland\",\n \"Massachusetts\",\n \"Michigan\",\n \"Minnesota\",\n \"Mississippi\",\n \"Missouri\",\n \"Montana\",\n \"Nebraska\",\n \"Nevada\",\n \"New Hampshire\",\n \"New Jersey\",\n \"New Mexico\",\n \"New York\",\n \"North Carolina\",\n \"North Dakota\",\n \"Ohio\",\n \"Oklahoma\",\n \"Oregon\",\n \"Pennsylvania\",\n \"Rhode Island\",\n \"South Carolina\",\n \"South Dakota\",\n \"Tennessee\",\n \"Texas\",\n \"Utah\",\n \"Vermont\",\n \"Virginia\",\n \"Washington\",\n \"West Virginia\",\n \"Wisconsin\",\n \"Wyoming\",\n];\n"],"names":["FRUITS","FRUITS_GROUPS","FRUITS_OBJECTS","US_STATES","label","value","heading","options"],"mappings":";;;;;;;;;;;IAAaA,MAAM;eAANA;;IA8FAC,aAAa;eAAbA;;IA/CAC,cAAc;eAAdA;;IAwGAC,SAAS;eAATA;;;AAvJN,MAAMH,SAAS;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,MAAME,iBAAiB;IAC5B;QAAEE,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAWC,OAAO;IAAU;IACrC;QAAED,OAAO;QAAWC,OAAO;IAAU;IACrC;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAWC,OAAO;IAAU;IACrC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAQC,OAAO;IAAO;IAC/B;QAAED,OAAO;QAAeC,OAAO;IAAc;IAC7C;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAOC,OAAO;IAAM;IAC7B;QAAED,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAYC,OAAO;IAAW;IACvC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAQC,OAAO;IAAO;IAC/B;QAAED,OAAO;QAAWC,OAAO;IAAU;IACrC;QAAED,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAQC,OAAO;IAAO;IAC/B;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAYC,OAAO;IAAW;IACvC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAAUC,OAAO;IAAS;IACnC;QAAED,OAAO;QAAgBC,OAAO;IAAe;IAC/C;QAAED,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAQC,OAAO;IAAO;IAC/B;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAQC,OAAO;IAAO;IAC/B;QAAED,OAAO;QAAeC,OAAO;IAAc;IAC7C;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAcC,OAAO;IAAa;IAC3C;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAcC,OAAO;IAAa;CAC5C;AAEM,MAAMJ,gBAAgB;IAC3B;QACEK,SAAS;QACTC,SAAS;YACP;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;IACH;IACA;QACED,SAAS;QACTC,SAAS;YACP;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;IACH;CACD;AAEM,MAAMJ,YAAY;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD"}
1
+ {"version":3,"sources":["../../../../src/components/Combobox/fixtures.tsx"],"sourcesContent":["export const FRUITS = [\n \"Apple\",\n \"Apricot\",\n \"Avocado\",\n \"Banana\",\n \"Blackberry\",\n \"Blueberry\",\n \"Cantaloupe\",\n \"Cherry\",\n \"Clementine\",\n \"Coconut\",\n \"Cranberry\",\n \"Date\",\n \"Dragonfruit\",\n \"Durian\",\n \"Elderberry\",\n \"Fig\",\n \"Grape\",\n \"Grapefruit\",\n \"Guava\",\n \"Honeydew\",\n \"Jackfruit\",\n \"Kiwi\",\n \"Kumquat\",\n \"Lemon\",\n \"Lime\",\n \"Lychee\",\n \"Mango\",\n \"Mulberry\",\n \"Nectarine\",\n \"Orange\",\n \"Papaya\",\n \"Passionfruit\",\n \"Peach\",\n \"Pear\",\n \"Persimmon\",\n \"Pineapple\",\n \"Plum\",\n \"Pomegranate\",\n \"Raspberry\",\n \"Redcurrant\",\n \"Starfruit\",\n \"Strawberry\",\n \"Tangerine\",\n \"Watermelon\",\n];\n\nexport const FRUITS_OBJECTS = [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Apricot\", value: \"apricot\" },\n { label: \"Avocado\", value: \"avocado\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blackberry\", value: \"blackberry\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Cantaloupe\", value: \"cantaloupe\" },\n { label: \"Cherry\", value: \"cherry\" },\n { label: \"Clementine\", value: \"clementine\" },\n { label: \"Coconut\", value: \"coconut\" },\n { label: \"Cranberry\", value: \"cranberry\" },\n { label: \"Date\", value: \"date\" },\n { label: \"Dragonfruit\", value: \"dragonfruit\" },\n { label: \"Durian\", value: \"durian\" },\n { label: \"Elderberry\", value: \"elderberry\" },\n { label: \"Fig\", value: \"fig\" },\n { label: \"Grape\", value: \"grape\" },\n { label: \"Grapefruit\", value: \"grapefruit\" },\n { label: \"Guava\", value: \"guava\" },\n { label: \"Honeydew\", value: \"honeydew\" },\n { label: \"Jackfruit\", value: \"jackfruit\" },\n { label: \"Kiwi\", value: \"kiwi\" },\n { label: \"Kumquat\", value: \"kumquat\" },\n { label: \"Lemon\", value: \"lemon\" },\n { label: \"Lime\", value: \"lime\" },\n { label: \"Lychee\", value: \"lychee\" },\n { label: \"Mango\", value: \"mango\" },\n { label: \"Mulberry\", value: \"mulberry\" },\n { label: \"Nectarine\", value: \"nectarine\" },\n { label: \"Orange\", value: \"orange\" },\n { label: \"Papaya\", value: \"papaya\" },\n { label: \"Passionfruit\", value: \"passionfruit\" },\n { label: \"Peach\", value: \"peach\" },\n { label: \"Pear\", value: \"pear\" },\n { label: \"Persimmon\", value: \"persimmon\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Plum\", value: \"plum\" },\n { label: \"Pomegranate\", value: \"pomegranate\" },\n { label: \"Raspberry\", value: \"raspberry\" },\n { label: \"Redcurrant\", value: \"redcurrant\" },\n { label: \"Starfruit\", value: \"starfruit\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Tangerine\", value: \"tangerine\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n];\n\nexport const FRUITS_STRING_GROUPS = [\n {\n heading: \"A-L\",\n options: [\n \"Apple\",\n \"Apricot\",\n \"Avocado\",\n \"Banana\",\n \"Blackberry\",\n \"Blueberry\",\n \"Cantaloupe\",\n \"Cherry\",\n \"Clementine\",\n \"Coconut\",\n \"Cranberry\",\n \"Date\",\n \"Dragonfruit\",\n \"Durian\",\n \"Elderberry\",\n \"Fig\",\n \"Grape\",\n \"Grapefruit\",\n \"Guava\",\n \"Honeydew\",\n \"Jackfruit\",\n \"Kiwi\",\n \"Kumquat\",\n \"Lemon\",\n \"Lime\",\n \"Lychee\",\n ],\n },\n {\n heading: \"M-Z\",\n options: [\n \"Mango\",\n \"Mulberry\",\n \"Nectarine\",\n \"Orange\",\n \"Papaya\",\n \"Passionfruit\",\n \"Peach\",\n \"Pear\",\n \"Persimmon\",\n \"Pineapple\",\n \"Plum\",\n \"Pomegranate\",\n \"Raspberry\",\n \"Redcurrant\",\n \"Starfruit\",\n \"Strawberry\",\n \"Tangerine\",\n \"Watermelon\",\n ],\n },\n];\n\nexport const FRUITS_OBJECT_GROUPS = [\n {\n heading: \"A-L\",\n options: [\n { label: \"Apple\", value: \"apple\" },\n { label: \"Apricot\", value: \"apricot\" },\n { label: \"Avocado\", value: \"avocado\" },\n { label: \"Banana\", value: \"banana\" },\n { label: \"Blackberry\", value: \"blackberry\" },\n { label: \"Blueberry\", value: \"blueberry\" },\n { label: \"Cantaloupe\", value: \"cantaloupe\" },\n { label: \"Cherry\", value: \"cherry\" },\n { label: \"Clementine\", value: \"clementine\" },\n { label: \"Coconut\", value: \"coconut\" },\n { label: \"Cranberry\", value: \"cranberry\" },\n { label: \"Date\", value: \"date\" },\n { label: \"Dragonfruit\", value: \"dragonfruit\" },\n { label: \"Durian\", value: \"durian\" },\n { label: \"Elderberry\", value: \"elderberry\" },\n { label: \"Fig\", value: \"fig\" },\n { label: \"Grape\", value: \"grape\" },\n { label: \"Grapefruit\", value: \"grapefruit\" },\n { label: \"Guava\", value: \"guava\" },\n { label: \"Honeydew\", value: \"honeydew\" },\n { label: \"Jackfruit\", value: \"jackfruit\" },\n { label: \"Kiwi\", value: \"kiwi\" },\n { label: \"Kumquat\", value: \"kumquat\" },\n { label: \"Lemon\", value: \"lemon\" },\n { label: \"Lime\", value: \"lime\" },\n { label: \"Lychee\", value: \"lychee\" },\n ],\n },\n {\n heading: \"M-Z\",\n options: [\n { label: \"Mango\", value: \"mango\" },\n { label: \"Mulberry\", value: \"mulberry\" },\n { label: \"Nectarine\", value: \"nectarine\" },\n { label: \"Orange\", value: \"orange\" },\n { label: \"Papaya\", value: \"papaya\" },\n { label: \"Passionfruit\", value: \"passionfruit\" },\n { label: \"Peach\", value: \"peach\" },\n { label: \"Pear\", value: \"pear\" },\n { label: \"Persimmon\", value: \"persimmon\" },\n { label: \"Pineapple\", value: \"pineapple\" },\n { label: \"Plum\", value: \"plum\" },\n { label: \"Pomegranate\", value: \"pomegranate\" },\n { label: \"Raspberry\", value: \"raspberry\" },\n { label: \"Redcurrant\", value: \"redcurrant\" },\n { label: \"Starfruit\", value: \"starfruit\" },\n { label: \"Strawberry\", value: \"strawberry\" },\n { label: \"Tangerine\", value: \"tangerine\" },\n { label: \"Watermelon\", value: \"watermelon\" },\n ],\n },\n];\n\nexport const US_STATES = [\n \"Alabama\",\n \"Alaska\",\n \"Arizona\",\n \"Arkansas\",\n \"California\",\n \"Colorado\",\n \"Connecticut\",\n \"Delaware\",\n \"District Of Columbia\",\n \"Florida\",\n \"Georgia\",\n \"Hawaii\",\n \"Idaho\",\n \"Illinois\",\n \"Indiana\",\n \"Iowa\",\n \"Kansas\",\n \"Kentucky\",\n \"Louisiana\",\n \"Maine\",\n \"Maryland\",\n \"Massachusetts\",\n \"Michigan\",\n \"Minnesota\",\n \"Mississippi\",\n \"Missouri\",\n \"Montana\",\n \"Nebraska\",\n \"Nevada\",\n \"New Hampshire\",\n \"New Jersey\",\n \"New Mexico\",\n \"New York\",\n \"North Carolina\",\n \"North Dakota\",\n \"Ohio\",\n \"Oklahoma\",\n \"Oregon\",\n \"Pennsylvania\",\n \"Rhode Island\",\n \"South Carolina\",\n \"South Dakota\",\n \"Tennessee\",\n \"Texas\",\n \"Utah\",\n \"Vermont\",\n \"Virginia\",\n \"Washington\",\n \"West Virginia\",\n \"Wisconsin\",\n \"Wyoming\",\n];\n"],"names":["FRUITS","FRUITS_OBJECTS","FRUITS_OBJECT_GROUPS","FRUITS_STRING_GROUPS","US_STATES","label","value","heading","options"],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useComboboxOptions", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useComboboxOptions;
9
+ }
10
+ });
11
+ const _react = require("react");
12
+ const _utils = require("./utils");
13
+ const _hooks = require("../../hooks");
14
+ function useComboboxOptions({ options, asyncOptions, delay = 300, minLength = 3, inputValue = "" }) {
15
+ const [filteredOptions, setFilteredOptions] = (0, _react.useState)([]);
16
+ const debouncedInputValue = (0, _hooks.useDebouncedValue)(inputValue, // Don't debounce synchronous options
17
+ options ? 0 : delay);
18
+ const [isLoading, setIsLoading] = (0, _react.useState)(false);
19
+ const [error, setError] = (0, _react.useState)(null);
20
+ (0, _react.useEffect)(()=>{
21
+ const controller = new AbortController();
22
+ const { signal } = controller;
23
+ const fetchOptions = async ()=>{
24
+ setIsLoading(true);
25
+ setError(null);
26
+ try {
27
+ if (asyncOptions) {
28
+ if (debouncedInputValue.length < minLength) {
29
+ setFilteredOptions([]);
30
+ return;
31
+ }
32
+ const result = await asyncOptions(debouncedInputValue, {
33
+ signal
34
+ });
35
+ setFilteredOptions(result);
36
+ } else {
37
+ // @ts-expect-error options will always be set here, fix the types
38
+ setFilteredOptions((0, _utils.filterOptions)(options, debouncedInputValue));
39
+ }
40
+ } catch (e) {
41
+ if (e instanceof DOMException && e.name === "AbortError") {
42
+ // Ignore abort errors
43
+ return;
44
+ }
45
+ setError(e);
46
+ } finally{
47
+ setIsLoading(false);
48
+ }
49
+ };
50
+ fetchOptions();
51
+ return ()=>{
52
+ controller.abort();
53
+ };
54
+ }, [
55
+ debouncedInputValue,
56
+ options,
57
+ asyncOptions,
58
+ delay,
59
+ minLength
60
+ ]);
61
+ return {
62
+ filteredOptions,
63
+ isLoading,
64
+ error,
65
+ isError: error != null
66
+ };
67
+ }
68
+
69
+ //# sourceMappingURL=useComboboxOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Combobox/useComboboxOptions.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { ComboboxOptions, ComboboxProps } from \"./types\";\nimport { filterOptions } from \"./utils\";\nimport { useDebouncedValue } from \"../../hooks\";\n\nexport type UseComboboxOptionsProps = Pick<\n ComboboxProps,\n \"options\" | \"asyncOptions\" | \"delay\" | \"minLength\"\n> & {\n inputValue?: string;\n};\n\nexport function useComboboxOptions({\n options,\n asyncOptions,\n delay = 300,\n minLength = 3,\n inputValue = \"\",\n}: UseComboboxOptionsProps) {\n const [filteredOptions, setFilteredOptions] = useState<ComboboxOptions>([]);\n const debouncedInputValue = useDebouncedValue(\n inputValue,\n // Don't debounce synchronous options\n options ? 0 : delay,\n );\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const controller = new AbortController();\n const { signal } = controller;\n\n const fetchOptions = async () => {\n setIsLoading(true);\n setError(null);\n try {\n if (asyncOptions) {\n if (debouncedInputValue.length < minLength) {\n setFilteredOptions([]);\n return;\n }\n const result = await asyncOptions(debouncedInputValue, { signal });\n setFilteredOptions(result);\n } else {\n // @ts-expect-error options will always be set here, fix the types\n setFilteredOptions(filterOptions(options, debouncedInputValue));\n }\n } catch (e: unknown) {\n if (e instanceof DOMException && e.name === \"AbortError\") {\n // Ignore abort errors\n return;\n }\n setError(e as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchOptions();\n\n return () => {\n controller.abort();\n };\n }, [debouncedInputValue, options, asyncOptions, delay, minLength]);\n\n return { filteredOptions, isLoading, error, isError: error != null };\n}\n"],"names":["useComboboxOptions","options","asyncOptions","delay","minLength","inputValue","filteredOptions","setFilteredOptions","useState","debouncedInputValue","useDebouncedValue","isLoading","setIsLoading","error","setError","useEffect","controller","AbortController","signal","fetchOptions","length","result","filterOptions","e","DOMException","name","abort","isError"],"mappings":";;;;+BAYgBA;;;eAAAA;;;uBAZoB;uBAEN;uBACI;AAS3B,SAASA,mBAAmB,EACjCC,OAAO,EACPC,YAAY,EACZC,QAAQ,GAAG,EACXC,YAAY,CAAC,EACbC,aAAa,EAAE,EACS;IACxB,MAAM,CAACC,iBAAiBC,mBAAmB,GAAGC,IAAAA,eAAQ,EAAkB,EAAE;IAC1E,MAAMC,sBAAsBC,IAAAA,wBAAiB,EAC3CL,YACA,qCAAqC;IACrCJ,UAAU,IAAIE;IAEhB,MAAM,CAACQ,WAAWC,aAAa,GAAGJ,IAAAA,eAAQ,EAAC;IAC3C,MAAM,CAACK,OAAOC,SAAS,GAAGN,IAAAA,eAAQ,EAAe;IAEjDO,IAAAA,gBAAS,EAAC;QACR,MAAMC,aAAa,IAAIC;QACvB,MAAM,EAAEC,MAAM,EAAE,GAAGF;QAEnB,MAAMG,eAAe;YACnBP,aAAa;YACbE,SAAS;YACT,IAAI;gBACF,IAAIZ,cAAc;oBAChB,IAAIO,oBAAoBW,MAAM,GAAGhB,WAAW;wBAC1CG,mBAAmB,EAAE;wBACrB;oBACF;oBACA,MAAMc,SAAS,MAAMnB,aAAaO,qBAAqB;wBAAES;oBAAO;oBAChEX,mBAAmBc;gBACrB,OAAO;oBACL,kEAAkE;oBAClEd,mBAAmBe,IAAAA,oBAAa,EAACrB,SAASQ;gBAC5C;YACF,EAAE,OAAOc,GAAY;gBACnB,IAAIA,aAAaC,gBAAgBD,EAAEE,IAAI,KAAK,cAAc;oBACxD,sBAAsB;oBACtB;gBACF;gBACAX,SAASS;YACX,SAAU;gBACRX,aAAa;YACf;QACF;QAEAO;QAEA,OAAO;YACLH,WAAWU,KAAK;QAClB;IACF,GAAG;QAACjB;QAAqBR;QAASC;QAAcC;QAAOC;KAAU;IAEjE,OAAO;QAAEE;QAAiBK;QAAWE;QAAOc,SAASd,SAAS;IAAK;AACrE"}
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "VisuallyHidden", {
10
10
  });
11
11
  const _jsxruntime = require("react/jsx-runtime");
12
12
  function VisuallyHidden(props) {
13
- const { className, children, elementType: Component = "div" } = props;
13
+ const { className, children, elementType: Component = "div", ...otherProps } = props;
14
14
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {
15
15
  className: className,
16
16
  style: {
@@ -25,6 +25,7 @@ function VisuallyHidden(props) {
25
25
  width: "1px",
26
26
  whiteSpace: "nowrap"
27
27
  },
28
+ ...otherProps,
28
29
  children: children
29
30
  });
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["import type { JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const { className, children, elementType: Component = \"div\" } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Component>\n );\n}\n"],"names":["VisuallyHidden","props","className","children","elementType","Component","style","border","clip","clipPath","height","margin","overflow","padding","position","width","whiteSpace"],"mappings":";;;;+BAcgBA;;;eAAAA;;;;AAAT,SAASA,eAAeC,KAA0B;IACvD,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,aAAaC,YAAY,KAAK,EAAE,GAAGJ;IAEhE,qBACE,qBAACI;QACCH,WAAWA;QACXI,OAAO;YACLC,QAAQ;YACRC,MAAM;YACNC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,UAAU;YACVC,SAAS;YACTC,UAAU;YACVC,OAAO;YACPC,YAAY;QACd;kBAECb;;AAGP"}
1
+ {"version":3,"sources":["../../../../src/components/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n"],"names":["VisuallyHidden","props","className","children","elementType","Component","otherProps","style","border","clip","clipPath","height","margin","overflow","padding","position","width","whiteSpace"],"mappings":";;;;+BAgBgBA;;;eAAAA;;;;AAAT,SAASA,eAAeC,KAA0B;IACvD,MAAM,EACJC,SAAS,EACTC,QAAQ,EACRC,aAAaC,YAAY,KAAK,EAC9B,GAAGC,YACJ,GAAGL;IAEJ,qBACE,qBAACI;QACCH,WAAWA;QACXK,OAAO;YACLC,QAAQ;YACRC,MAAM;YACNC,UAAU;YACVC,QAAQ;YACRC,QAAQ;YACRC,UAAU;YACVC,SAAS;YACTC,UAAU;YACVC,OAAO;YACPC,YAAY;QACd;QACC,GAAGX,UAAU;kBAEbH;;AAGP"}
@@ -5,11 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  _export_star(require("./useBodyScrollLock"), exports);
6
6
  _export_star(require("./useBreakpoint"), exports);
7
7
  _export_star(require("./useButton"), exports);
8
+ _export_star(require("./useDebouncedValue"), exports);
8
9
  _export_star(require("./useDeprecationWarning"), exports);
9
10
  _export_star(require("./useDialog"), exports);
10
11
  _export_star(require("./useDialogPolyfill"), exports);
11
12
  _export_star(require("./useLabel"), exports);
12
13
  _export_star(require("./useOnClickOutside"), exports);
14
+ _export_star(require("./useOnUnmount"), exports);
13
15
  _export_star(require("./usePrefersReducedMotion"), exports);
14
16
  _export_star(require("./useRenderCount"), exports);
15
17
  _export_star(require("./useTextField"), exports);