downshift 9.2.0 → 9.3.1

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 (28) hide show
  1. package/README.md +6 -7
  2. package/dist/{downshift.cjs.js → downshift.cjs.cjs} +86 -78
  3. package/dist/{downshift.esm.js → downshift.esm.mjs} +86 -78
  4. package/dist/{downshift.native.cjs.js → downshift.native.cjs.cjs} +86 -78
  5. package/dist/{downshift.nativeweb.cjs.js → downshift.nativeweb.cjs.cjs} +86 -78
  6. package/dist/downshift.umd.js +121 -98
  7. package/dist/downshift.umd.js.map +1 -1
  8. package/dist/downshift.umd.min.js +1 -1
  9. package/dist/downshift.umd.min.js.map +1 -1
  10. package/dist/hooks/useCombobox/index.d.ts +12 -12
  11. package/dist/hooks/useSelect/index.d.ts +7 -7
  12. package/dist/hooks/useTagGroup/__tests__/utils/renderTagGroup.d.ts +1 -1
  13. package/dist/hooks/useTagGroup/utils/index.d.ts +1 -1
  14. package/dist/hooks/useTagGroup/utils/useElementIds.d.ts +10 -3
  15. package/dist/hooks/utils.d.ts +0 -27
  16. package/dist/hooks/utils.dropdown/__tests__/useElementIds.legacy.test.d.ts +1 -0
  17. package/dist/hooks/utils.dropdown/__tests__/useElementIds.r18.test.d.ts +1 -0
  18. package/dist/hooks/utils.dropdown/useElementIds.d.ts +18 -0
  19. package/package.json +46 -44
  20. package/preact/dist/{downshift.cjs.js → downshift.cjs.cjs} +86 -78
  21. package/preact/dist/{downshift.esm.js → downshift.esm.mjs} +86 -78
  22. package/preact/dist/downshift.umd.js +97 -81
  23. package/preact/dist/downshift.umd.js.map +1 -1
  24. package/preact/dist/downshift.umd.min.js +1 -10
  25. package/preact/dist/downshift.umd.min.js.map +1 -1
  26. package/preact/package.json +3 -3
  27. /package/dist/hooks/useTagGroup/utils/__tests__/{utils.use-element-ids.r18.test.d.ts → useElementIds.legacy.test.d.ts} +0 -0
  28. /package/dist/hooks/useTagGroup/utils/__tests__/{utils.use-element-ids.test.d.ts → useElementIds.r18.test.d.ts} +0 -0
package/README.md CHANGED
@@ -46,9 +46,8 @@ list below.
46
46
 
47
47
  - [useSelect][useselect-readme] for a custom select component.
48
48
  - [useCombobox][combobox-readme] for a combobox or autocomplete input.
49
- - [useMultipleSelection][multiple-selection-readme] for selecting multiple items
50
- in a select or a combobox, as well as deleting items from selection or
51
- navigating between the selected items.
49
+ - [useTagGroup][tag-group-readme] for a tag group component. Also useful to
50
+ build a multiple selection combobox or select component with tags.
52
51
 
53
52
  The second solution is the `Downshift` component, which can also be used to
54
53
  create accessible combobox and select components, providing the logic in the
@@ -734,8 +733,8 @@ check could fail even if the ref is correctly forwarded to the root DOM
734
733
  component. In these cases, you can provide the object
735
734
  `{suppressRefError : true}` as the second argument to `getRootProps` to
736
735
  completely bypass the check.\
737
- **Please use it with extreme care and only if you are absolutely sure that the ref
738
- is correctly forwarded otherwise `Downshift` will unexpectedly fail.**\
736
+ **Please use it with extreme care and only if you are absolutely sure that the
737
+ ref is correctly forwarded otherwise `Downshift` will unexpectedly fail.**\
739
738
  See [#235](https://github.com/downshift-js/downshift/issues/235) for the
740
739
  discussion that lead to this.
741
740
 
@@ -1516,8 +1515,8 @@ MIT
1516
1515
  https://github.com/downshift-js/downshift/blob/master/src/hooks/useSelect
1517
1516
  [combobox-readme]:
1518
1517
  https://github.com/downshift-js/downshift/tree/master/src/hooks/useCombobox
1519
- [multiple-selection-readme]:
1520
- https://github.com/downshift-js/downshift/tree/master/src/hooks/useMultipleSelection
1518
+ [tag-group-readme]:
1519
+ https://github.com/downshift-js/downshift/tree/master/src/hooks/useTagGroup
1521
1520
  [bundle-phobia-link]: https://bundlephobia.com/result?p=downshift@3.4.8
1522
1521
  [aria]: https://www.w3.org/TR/wai-aria-practices/
1523
1522
  [combobox-aria-example]:
@@ -1917,54 +1917,6 @@ var defaultStateValues$1 = {
1917
1917
 
1918
1918
  // istanbul ignore next
1919
1919
  var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
1920
-
1921
- // istanbul ignore next
1922
- var useElementIds$1 = 'useId' in React__namespace // Avoid conditional useId call
1923
- ? function useElementIds(_ref) {
1924
- var id = _ref.id,
1925
- labelId = _ref.labelId,
1926
- menuId = _ref.menuId,
1927
- getItemId = _ref.getItemId,
1928
- toggleButtonId = _ref.toggleButtonId,
1929
- inputId = _ref.inputId;
1930
- // Avoid conditional useId call
1931
- var reactId = "downshift-" + React__namespace.useId();
1932
- if (!id) {
1933
- id = reactId;
1934
- }
1935
- var elementIds = React__namespace.useMemo(function () {
1936
- return {
1937
- labelId: labelId || id + "-label",
1938
- menuId: menuId || id + "-menu",
1939
- getItemId: getItemId || function (index) {
1940
- return id + "-item-" + index;
1941
- },
1942
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1943
- inputId: inputId || id + "-input"
1944
- };
1945
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1946
- return elementIds;
1947
- } : function useElementIds(_ref2) {
1948
- var _ref2$id = _ref2.id,
1949
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
1950
- labelId = _ref2.labelId,
1951
- menuId = _ref2.menuId,
1952
- getItemId = _ref2.getItemId,
1953
- toggleButtonId = _ref2.toggleButtonId,
1954
- inputId = _ref2.inputId;
1955
- var elementIds = React__namespace.useMemo(function () {
1956
- return {
1957
- labelId: labelId || id + "-label",
1958
- menuId: menuId || id + "-menu",
1959
- getItemId: getItemId || function (index) {
1960
- return id + "-item-" + index;
1961
- },
1962
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1963
- inputId: inputId || id + "-input"
1964
- };
1965
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1966
- return elementIds;
1967
- };
1968
1920
  function isAcceptedCharacterKey(key) {
1969
1921
  return /^\S{1}$/.test(key);
1970
1922
  }
@@ -2127,13 +2079,13 @@ if (process.env.NODE_ENV !== 'production') {
2127
2079
  return setGetterPropCallInfo;
2128
2080
  };
2129
2081
  }
2130
- function useScrollIntoView(_ref3) {
2131
- var highlightedIndex = _ref3.highlightedIndex,
2132
- isOpen = _ref3.isOpen,
2133
- itemRefs = _ref3.itemRefs,
2134
- getItemNodeFromIndex = _ref3.getItemNodeFromIndex,
2135
- menuElement = _ref3.menuElement,
2136
- scrollIntoViewProp = _ref3.scrollIntoView;
2082
+ function useScrollIntoView(_ref) {
2083
+ var highlightedIndex = _ref.highlightedIndex,
2084
+ isOpen = _ref.isOpen,
2085
+ itemRefs = _ref.itemRefs,
2086
+ getItemNodeFromIndex = _ref.getItemNodeFromIndex,
2087
+ menuElement = _ref.menuElement,
2088
+ scrollIntoViewProp = _ref.scrollIntoView;
2137
2089
  // used not to scroll on highlight by mouse.
2138
2090
  var shouldScrollRef = React__namespace.useRef(true);
2139
2091
  // Scroll on highlighted item if change comes from keyboard.
@@ -2155,9 +2107,9 @@ function useScrollIntoView(_ref3) {
2155
2107
  var useControlPropsValidator = noop;
2156
2108
  /* istanbul ignore next */
2157
2109
  if (process.env.NODE_ENV !== 'production') {
2158
- useControlPropsValidator = function useControlPropsValidator(_ref4) {
2159
- var props = _ref4.props,
2160
- state = _ref4.state;
2110
+ useControlPropsValidator = function useControlPropsValidator(_ref2) {
2111
+ var props = _ref2.props,
2112
+ state = _ref2.state;
2161
2113
  // used for checking when props are moving from controlled to uncontrolled.
2162
2114
  var prevPropsRef = React__namespace.useRef(props);
2163
2115
  var isInitialMount = useIsInitialMount();
@@ -2480,6 +2432,56 @@ function downshiftSelectReducer(state, props, action) {
2480
2432
  }
2481
2433
  /* eslint-enable complexity */
2482
2434
 
2435
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2436
+ var reactUseId$1 = React__namespace['useId'];
2437
+ var useElementIds$1 = typeof reactUseId$1 === 'function' ? useElementIdsR18$1 : useElementIdsLegacy$1;
2438
+ function useElementIdsR18$1(_ref) {
2439
+ var id = _ref.id,
2440
+ labelId = _ref.labelId,
2441
+ menuId = _ref.menuId,
2442
+ getItemId = _ref.getItemId,
2443
+ toggleButtonId = _ref.toggleButtonId,
2444
+ inputId = _ref.inputId;
2445
+ var reactId = "downshift-" + reactUseId$1();
2446
+ if (!id) {
2447
+ id = reactId;
2448
+ }
2449
+ var elementIds = React__namespace.useMemo(function () {
2450
+ return {
2451
+ labelId: labelId != null ? labelId : id + "-label",
2452
+ menuId: menuId != null ? menuId : id + "-menu",
2453
+ getItemId: getItemId != null ? getItemId : function (index) {
2454
+ return id + "-item-" + index;
2455
+ },
2456
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : id + "-toggle-button",
2457
+ inputId: inputId != null ? inputId : id + "-input"
2458
+ };
2459
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
2460
+ return elementIds;
2461
+ }
2462
+ function useElementIdsLegacy$1(_ref2) {
2463
+ var id = _ref2.id,
2464
+ labelId = _ref2.labelId,
2465
+ menuId = _ref2.menuId,
2466
+ getItemId = _ref2.getItemId,
2467
+ toggleButtonId = _ref2.toggleButtonId,
2468
+ inputId = _ref2.inputId;
2469
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
2470
+ var baseId = baseIdRef.current;
2471
+ var elementIds = React__namespace.useMemo(function () {
2472
+ return {
2473
+ labelId: labelId != null ? labelId : baseId + "-label",
2474
+ menuId: menuId != null ? menuId : baseId + "-menu",
2475
+ getItemId: getItemId != null ? getItemId : function (index) {
2476
+ return baseId + "-item-" + index;
2477
+ },
2478
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : baseId + "-toggle-button",
2479
+ inputId: inputId != null ? inputId : baseId + "-input"
2480
+ };
2481
+ }, [getItemId, inputId, labelId, menuId, toggleButtonId, baseId]);
2482
+ return elementIds;
2483
+ }
2484
+
2483
2485
  var _excluded$3 = ["onClick"],
2484
2486
  _excluded2$3 = ["onMouseLeave", "refKey", "ref"],
2485
2487
  _excluded3$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
@@ -4051,38 +4053,44 @@ function useTagGroupReducer(state, _props, action) {
4051
4053
  return _extends({}, state, changes);
4052
4054
  }
4053
4055
 
4056
+ // eslint-disable-next-line @typescript-eslint/dot-notation
4057
+ var reactUseId = React__namespace['useId'];
4058
+
4054
4059
  // istanbul ignore next
4055
- var useElementIds = 'useId' in React__namespace // Avoid conditional useId call
4056
- ? useElementIdsR18 : useElementIdsLegacy;
4060
+ var useElementIds = typeof reactUseId === 'function' ? useElementIdsR18 : useElementIdsLegacy;
4057
4061
  function useElementIdsR18(_ref) {
4058
4062
  var id = _ref.id,
4059
4063
  tagGroupId = _ref.tagGroupId,
4060
4064
  getTagId = _ref.getTagId;
4061
- // Avoid conditional useId call
4062
- var reactId = "downshift-" + React__namespace.useId();
4065
+ var reactId = "downshift-" + reactUseId();
4063
4066
  if (!id) {
4064
4067
  id = reactId;
4065
4068
  }
4066
- var elementIdsRef = React__namespace.useRef({
4067
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4068
- getTagId: getTagId != null ? getTagId : function (index) {
4069
- return id + "-tag-" + index;
4070
- }
4071
- });
4072
- return elementIdsRef.current;
4069
+ var elementIds = React__namespace.useMemo(function () {
4070
+ return {
4071
+ tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4072
+ getTagId: getTagId != null ? getTagId : function (index) {
4073
+ return id + "-tag-" + index;
4074
+ }
4075
+ };
4076
+ }, [getTagId, id, tagGroupId]);
4077
+ return elementIds;
4073
4078
  }
4074
4079
  function useElementIdsLegacy(_ref2) {
4075
- var _ref2$id = _ref2.id,
4076
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
4080
+ var id = _ref2.id,
4077
4081
  getTagId = _ref2.getTagId,
4078
4082
  tagGroupId = _ref2.tagGroupId;
4079
- var elementIdsRef = React__namespace.useRef({
4080
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4081
- getTagId: getTagId != null ? getTagId : function (index) {
4082
- return id + "-tag-" + index;
4083
- }
4084
- });
4085
- return elementIdsRef.current;
4083
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
4084
+ var baseId = baseIdRef.current;
4085
+ var elementIds = React__namespace.useMemo(function () {
4086
+ return {
4087
+ tagGroupId: tagGroupId != null ? tagGroupId : baseId + "-tag-group",
4088
+ getTagId: getTagId != null ? getTagId : function (index) {
4089
+ return baseId + "-tag-" + index;
4090
+ }
4091
+ };
4092
+ }, [getTagId, baseId, tagGroupId]);
4093
+ return elementIds;
4086
4094
  }
4087
4095
 
4088
4096
  function getInitialState(props) {
@@ -1895,54 +1895,6 @@ var defaultStateValues$1 = {
1895
1895
 
1896
1896
  // istanbul ignore next
1897
1897
  var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
1898
-
1899
- // istanbul ignore next
1900
- var useElementIds$1 = 'useId' in React // Avoid conditional useId call
1901
- ? function useElementIds(_ref) {
1902
- var id = _ref.id,
1903
- labelId = _ref.labelId,
1904
- menuId = _ref.menuId,
1905
- getItemId = _ref.getItemId,
1906
- toggleButtonId = _ref.toggleButtonId,
1907
- inputId = _ref.inputId;
1908
- // Avoid conditional useId call
1909
- var reactId = "downshift-" + React.useId();
1910
- if (!id) {
1911
- id = reactId;
1912
- }
1913
- var elementIds = React.useMemo(function () {
1914
- return {
1915
- labelId: labelId || id + "-label",
1916
- menuId: menuId || id + "-menu",
1917
- getItemId: getItemId || function (index) {
1918
- return id + "-item-" + index;
1919
- },
1920
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1921
- inputId: inputId || id + "-input"
1922
- };
1923
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1924
- return elementIds;
1925
- } : function useElementIds(_ref2) {
1926
- var _ref2$id = _ref2.id,
1927
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
1928
- labelId = _ref2.labelId,
1929
- menuId = _ref2.menuId,
1930
- getItemId = _ref2.getItemId,
1931
- toggleButtonId = _ref2.toggleButtonId,
1932
- inputId = _ref2.inputId;
1933
- var elementIds = React.useMemo(function () {
1934
- return {
1935
- labelId: labelId || id + "-label",
1936
- menuId: menuId || id + "-menu",
1937
- getItemId: getItemId || function (index) {
1938
- return id + "-item-" + index;
1939
- },
1940
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1941
- inputId: inputId || id + "-input"
1942
- };
1943
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1944
- return elementIds;
1945
- };
1946
1898
  function isAcceptedCharacterKey(key) {
1947
1899
  return /^\S{1}$/.test(key);
1948
1900
  }
@@ -2105,13 +2057,13 @@ if (process.env.NODE_ENV !== 'production') {
2105
2057
  return setGetterPropCallInfo;
2106
2058
  };
2107
2059
  }
2108
- function useScrollIntoView(_ref3) {
2109
- var highlightedIndex = _ref3.highlightedIndex,
2110
- isOpen = _ref3.isOpen,
2111
- itemRefs = _ref3.itemRefs,
2112
- getItemNodeFromIndex = _ref3.getItemNodeFromIndex,
2113
- menuElement = _ref3.menuElement,
2114
- scrollIntoViewProp = _ref3.scrollIntoView;
2060
+ function useScrollIntoView(_ref) {
2061
+ var highlightedIndex = _ref.highlightedIndex,
2062
+ isOpen = _ref.isOpen,
2063
+ itemRefs = _ref.itemRefs,
2064
+ getItemNodeFromIndex = _ref.getItemNodeFromIndex,
2065
+ menuElement = _ref.menuElement,
2066
+ scrollIntoViewProp = _ref.scrollIntoView;
2115
2067
  // used not to scroll on highlight by mouse.
2116
2068
  var shouldScrollRef = React.useRef(true);
2117
2069
  // Scroll on highlighted item if change comes from keyboard.
@@ -2133,9 +2085,9 @@ function useScrollIntoView(_ref3) {
2133
2085
  var useControlPropsValidator = noop;
2134
2086
  /* istanbul ignore next */
2135
2087
  if (process.env.NODE_ENV !== 'production') {
2136
- useControlPropsValidator = function useControlPropsValidator(_ref4) {
2137
- var props = _ref4.props,
2138
- state = _ref4.state;
2088
+ useControlPropsValidator = function useControlPropsValidator(_ref2) {
2089
+ var props = _ref2.props,
2090
+ state = _ref2.state;
2139
2091
  // used for checking when props are moving from controlled to uncontrolled.
2140
2092
  var prevPropsRef = React.useRef(props);
2141
2093
  var isInitialMount = useIsInitialMount();
@@ -2458,6 +2410,56 @@ function downshiftSelectReducer(state, props, action) {
2458
2410
  }
2459
2411
  /* eslint-enable complexity */
2460
2412
 
2413
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2414
+ var reactUseId$1 = React['useId'];
2415
+ var useElementIds$1 = typeof reactUseId$1 === 'function' ? useElementIdsR18$1 : useElementIdsLegacy$1;
2416
+ function useElementIdsR18$1(_ref) {
2417
+ var id = _ref.id,
2418
+ labelId = _ref.labelId,
2419
+ menuId = _ref.menuId,
2420
+ getItemId = _ref.getItemId,
2421
+ toggleButtonId = _ref.toggleButtonId,
2422
+ inputId = _ref.inputId;
2423
+ var reactId = "downshift-" + reactUseId$1();
2424
+ if (!id) {
2425
+ id = reactId;
2426
+ }
2427
+ var elementIds = React.useMemo(function () {
2428
+ return {
2429
+ labelId: labelId != null ? labelId : id + "-label",
2430
+ menuId: menuId != null ? menuId : id + "-menu",
2431
+ getItemId: getItemId != null ? getItemId : function (index) {
2432
+ return id + "-item-" + index;
2433
+ },
2434
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : id + "-toggle-button",
2435
+ inputId: inputId != null ? inputId : id + "-input"
2436
+ };
2437
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
2438
+ return elementIds;
2439
+ }
2440
+ function useElementIdsLegacy$1(_ref2) {
2441
+ var id = _ref2.id,
2442
+ labelId = _ref2.labelId,
2443
+ menuId = _ref2.menuId,
2444
+ getItemId = _ref2.getItemId,
2445
+ toggleButtonId = _ref2.toggleButtonId,
2446
+ inputId = _ref2.inputId;
2447
+ var baseIdRef = React.useRef(id != null ? id : "downshift-" + generateId());
2448
+ var baseId = baseIdRef.current;
2449
+ var elementIds = React.useMemo(function () {
2450
+ return {
2451
+ labelId: labelId != null ? labelId : baseId + "-label",
2452
+ menuId: menuId != null ? menuId : baseId + "-menu",
2453
+ getItemId: getItemId != null ? getItemId : function (index) {
2454
+ return baseId + "-item-" + index;
2455
+ },
2456
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : baseId + "-toggle-button",
2457
+ inputId: inputId != null ? inputId : baseId + "-input"
2458
+ };
2459
+ }, [getItemId, inputId, labelId, menuId, toggleButtonId, baseId]);
2460
+ return elementIds;
2461
+ }
2462
+
2461
2463
  var _excluded$3 = ["onClick"],
2462
2464
  _excluded2$3 = ["onMouseLeave", "refKey", "ref"],
2463
2465
  _excluded3$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
@@ -4029,38 +4031,44 @@ function useTagGroupReducer(state, _props, action) {
4029
4031
  return _extends({}, state, changes);
4030
4032
  }
4031
4033
 
4034
+ // eslint-disable-next-line @typescript-eslint/dot-notation
4035
+ var reactUseId = React['useId'];
4036
+
4032
4037
  // istanbul ignore next
4033
- var useElementIds = 'useId' in React // Avoid conditional useId call
4034
- ? useElementIdsR18 : useElementIdsLegacy;
4038
+ var useElementIds = typeof reactUseId === 'function' ? useElementIdsR18 : useElementIdsLegacy;
4035
4039
  function useElementIdsR18(_ref) {
4036
4040
  var id = _ref.id,
4037
4041
  tagGroupId = _ref.tagGroupId,
4038
4042
  getTagId = _ref.getTagId;
4039
- // Avoid conditional useId call
4040
- var reactId = "downshift-" + React.useId();
4043
+ var reactId = "downshift-" + reactUseId();
4041
4044
  if (!id) {
4042
4045
  id = reactId;
4043
4046
  }
4044
- var elementIdsRef = React.useRef({
4045
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4046
- getTagId: getTagId != null ? getTagId : function (index) {
4047
- return id + "-tag-" + index;
4048
- }
4049
- });
4050
- return elementIdsRef.current;
4047
+ var elementIds = React.useMemo(function () {
4048
+ return {
4049
+ tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4050
+ getTagId: getTagId != null ? getTagId : function (index) {
4051
+ return id + "-tag-" + index;
4052
+ }
4053
+ };
4054
+ }, [getTagId, id, tagGroupId]);
4055
+ return elementIds;
4051
4056
  }
4052
4057
  function useElementIdsLegacy(_ref2) {
4053
- var _ref2$id = _ref2.id,
4054
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
4058
+ var id = _ref2.id,
4055
4059
  getTagId = _ref2.getTagId,
4056
4060
  tagGroupId = _ref2.tagGroupId;
4057
- var elementIdsRef = React.useRef({
4058
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4059
- getTagId: getTagId != null ? getTagId : function (index) {
4060
- return id + "-tag-" + index;
4061
- }
4062
- });
4063
- return elementIdsRef.current;
4061
+ var baseIdRef = React.useRef(id != null ? id : "downshift-" + generateId());
4062
+ var baseId = baseIdRef.current;
4063
+ var elementIds = React.useMemo(function () {
4064
+ return {
4065
+ tagGroupId: tagGroupId != null ? tagGroupId : baseId + "-tag-group",
4066
+ getTagId: getTagId != null ? getTagId : function (index) {
4067
+ return baseId + "-tag-" + index;
4068
+ }
4069
+ };
4070
+ }, [getTagId, baseId, tagGroupId]);
4071
+ return elementIds;
4064
4072
  }
4065
4073
 
4066
4074
  function getInitialState(props) {
@@ -1805,54 +1805,6 @@ var defaultStateValues$1 = {
1805
1805
 
1806
1806
  // istanbul ignore next
1807
1807
  var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
1808
-
1809
- // istanbul ignore next
1810
- var useElementIds$1 = 'useId' in React__namespace // Avoid conditional useId call
1811
- ? function useElementIds(_ref) {
1812
- var id = _ref.id,
1813
- labelId = _ref.labelId,
1814
- menuId = _ref.menuId,
1815
- getItemId = _ref.getItemId,
1816
- toggleButtonId = _ref.toggleButtonId,
1817
- inputId = _ref.inputId;
1818
- // Avoid conditional useId call
1819
- var reactId = "downshift-" + React__namespace.useId();
1820
- if (!id) {
1821
- id = reactId;
1822
- }
1823
- var elementIds = React__namespace.useMemo(function () {
1824
- return {
1825
- labelId: labelId || id + "-label",
1826
- menuId: menuId || id + "-menu",
1827
- getItemId: getItemId || function (index) {
1828
- return id + "-item-" + index;
1829
- },
1830
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1831
- inputId: inputId || id + "-input"
1832
- };
1833
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1834
- return elementIds;
1835
- } : function useElementIds(_ref2) {
1836
- var _ref2$id = _ref2.id,
1837
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
1838
- labelId = _ref2.labelId,
1839
- menuId = _ref2.menuId,
1840
- getItemId = _ref2.getItemId,
1841
- toggleButtonId = _ref2.toggleButtonId,
1842
- inputId = _ref2.inputId;
1843
- var elementIds = React__namespace.useMemo(function () {
1844
- return {
1845
- labelId: labelId || id + "-label",
1846
- menuId: menuId || id + "-menu",
1847
- getItemId: getItemId || function (index) {
1848
- return id + "-item-" + index;
1849
- },
1850
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1851
- inputId: inputId || id + "-input"
1852
- };
1853
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1854
- return elementIds;
1855
- };
1856
1808
  function getInitialState$3(props) {
1857
1809
  var selectedItem = getInitialValue$1(props, 'selectedItem', defaultStateValues$1);
1858
1810
  var isOpen = getInitialValue$1(props, 'isOpen', defaultStateValues$1);
@@ -1977,13 +1929,13 @@ if (process.env.NODE_ENV !== 'production') {
1977
1929
  return setGetterPropCallInfo;
1978
1930
  };
1979
1931
  }
1980
- function useScrollIntoView(_ref3) {
1981
- var highlightedIndex = _ref3.highlightedIndex,
1982
- isOpen = _ref3.isOpen,
1983
- itemRefs = _ref3.itemRefs,
1984
- getItemNodeFromIndex = _ref3.getItemNodeFromIndex,
1985
- menuElement = _ref3.menuElement,
1986
- scrollIntoViewProp = _ref3.scrollIntoView;
1932
+ function useScrollIntoView(_ref) {
1933
+ var highlightedIndex = _ref.highlightedIndex,
1934
+ isOpen = _ref.isOpen,
1935
+ itemRefs = _ref.itemRefs,
1936
+ getItemNodeFromIndex = _ref.getItemNodeFromIndex,
1937
+ menuElement = _ref.menuElement,
1938
+ scrollIntoViewProp = _ref.scrollIntoView;
1987
1939
  // used not to scroll on highlight by mouse.
1988
1940
  var shouldScrollRef = React__namespace.useRef(true);
1989
1941
  // Scroll on highlighted item if change comes from keyboard.
@@ -2005,9 +1957,9 @@ function useScrollIntoView(_ref3) {
2005
1957
  var useControlPropsValidator = noop;
2006
1958
  /* istanbul ignore next */
2007
1959
  if (process.env.NODE_ENV !== 'production') {
2008
- useControlPropsValidator = function useControlPropsValidator(_ref4) {
2009
- var props = _ref4.props,
2010
- state = _ref4.state;
1960
+ useControlPropsValidator = function useControlPropsValidator(_ref2) {
1961
+ var props = _ref2.props,
1962
+ state = _ref2.state;
2011
1963
  // used for checking when props are moving from controlled to uncontrolled.
2012
1964
  var prevPropsRef = React__namespace.useRef(props);
2013
1965
  var isInitialMount = useIsInitialMount();
@@ -2330,6 +2282,56 @@ function downshiftSelectReducer(state, props, action) {
2330
2282
  }
2331
2283
  /* eslint-enable complexity */
2332
2284
 
2285
+ // eslint-disable-next-line @typescript-eslint/dot-notation
2286
+ var reactUseId$1 = React__namespace['useId'];
2287
+ var useElementIds$1 = typeof reactUseId$1 === 'function' ? useElementIdsR18$1 : useElementIdsLegacy$1;
2288
+ function useElementIdsR18$1(_ref) {
2289
+ var id = _ref.id,
2290
+ labelId = _ref.labelId,
2291
+ menuId = _ref.menuId,
2292
+ getItemId = _ref.getItemId,
2293
+ toggleButtonId = _ref.toggleButtonId,
2294
+ inputId = _ref.inputId;
2295
+ var reactId = "downshift-" + reactUseId$1();
2296
+ if (!id) {
2297
+ id = reactId;
2298
+ }
2299
+ var elementIds = React__namespace.useMemo(function () {
2300
+ return {
2301
+ labelId: labelId != null ? labelId : id + "-label",
2302
+ menuId: menuId != null ? menuId : id + "-menu",
2303
+ getItemId: getItemId != null ? getItemId : function (index) {
2304
+ return id + "-item-" + index;
2305
+ },
2306
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : id + "-toggle-button",
2307
+ inputId: inputId != null ? inputId : id + "-input"
2308
+ };
2309
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
2310
+ return elementIds;
2311
+ }
2312
+ function useElementIdsLegacy$1(_ref2) {
2313
+ var id = _ref2.id,
2314
+ labelId = _ref2.labelId,
2315
+ menuId = _ref2.menuId,
2316
+ getItemId = _ref2.getItemId,
2317
+ toggleButtonId = _ref2.toggleButtonId,
2318
+ inputId = _ref2.inputId;
2319
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
2320
+ var baseId = baseIdRef.current;
2321
+ var elementIds = React__namespace.useMemo(function () {
2322
+ return {
2323
+ labelId: labelId != null ? labelId : baseId + "-label",
2324
+ menuId: menuId != null ? menuId : baseId + "-menu",
2325
+ getItemId: getItemId != null ? getItemId : function (index) {
2326
+ return baseId + "-item-" + index;
2327
+ },
2328
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : baseId + "-toggle-button",
2329
+ inputId: inputId != null ? inputId : baseId + "-input"
2330
+ };
2331
+ }, [getItemId, inputId, labelId, menuId, toggleButtonId, baseId]);
2332
+ return elementIds;
2333
+ }
2334
+
2333
2335
  var _excluded$3 = ["onClick"],
2334
2336
  _excluded2$3 = ["onMouseLeave", "refKey", "ref"],
2335
2337
  _excluded3$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
@@ -3901,38 +3903,44 @@ function useTagGroupReducer(state, _props, action) {
3901
3903
  return _extends({}, state, changes);
3902
3904
  }
3903
3905
 
3906
+ // eslint-disable-next-line @typescript-eslint/dot-notation
3907
+ var reactUseId = React__namespace['useId'];
3908
+
3904
3909
  // istanbul ignore next
3905
- var useElementIds = 'useId' in React__namespace // Avoid conditional useId call
3906
- ? useElementIdsR18 : useElementIdsLegacy;
3910
+ var useElementIds = typeof reactUseId === 'function' ? useElementIdsR18 : useElementIdsLegacy;
3907
3911
  function useElementIdsR18(_ref) {
3908
3912
  var id = _ref.id,
3909
3913
  tagGroupId = _ref.tagGroupId,
3910
3914
  getTagId = _ref.getTagId;
3911
- // Avoid conditional useId call
3912
- var reactId = "downshift-" + React__namespace.useId();
3915
+ var reactId = "downshift-" + reactUseId();
3913
3916
  if (!id) {
3914
3917
  id = reactId;
3915
3918
  }
3916
- var elementIdsRef = React__namespace.useRef({
3917
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
3918
- getTagId: getTagId != null ? getTagId : function (index) {
3919
- return id + "-tag-" + index;
3920
- }
3921
- });
3922
- return elementIdsRef.current;
3919
+ var elementIds = React__namespace.useMemo(function () {
3920
+ return {
3921
+ tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
3922
+ getTagId: getTagId != null ? getTagId : function (index) {
3923
+ return id + "-tag-" + index;
3924
+ }
3925
+ };
3926
+ }, [getTagId, id, tagGroupId]);
3927
+ return elementIds;
3923
3928
  }
3924
3929
  function useElementIdsLegacy(_ref2) {
3925
- var _ref2$id = _ref2.id,
3926
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
3930
+ var id = _ref2.id,
3927
3931
  getTagId = _ref2.getTagId,
3928
3932
  tagGroupId = _ref2.tagGroupId;
3929
- var elementIdsRef = React__namespace.useRef({
3930
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
3931
- getTagId: getTagId != null ? getTagId : function (index) {
3932
- return id + "-tag-" + index;
3933
- }
3934
- });
3935
- return elementIdsRef.current;
3933
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
3934
+ var baseId = baseIdRef.current;
3935
+ var elementIds = React__namespace.useMemo(function () {
3936
+ return {
3937
+ tagGroupId: tagGroupId != null ? tagGroupId : baseId + "-tag-group",
3938
+ getTagId: getTagId != null ? getTagId : function (index) {
3939
+ return baseId + "-tag-" + index;
3940
+ }
3941
+ };
3942
+ }, [getTagId, baseId, tagGroupId]);
3943
+ return elementIds;
3936
3944
  }
3937
3945
 
3938
3946
  function getInitialState(props) {