downshift 9.3.0 → 9.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,7 +15,7 @@ declare function useCombobox(userProps?: {}): {
15
15
  onMouseDown: Function;
16
16
  'aria-disabled': boolean;
17
17
  'aria-selected': boolean;
18
- id: any;
18
+ id: string;
19
19
  role: string;
20
20
  };
21
21
  getLabelProps: (labelProps: any) => any;
@@ -26,7 +26,7 @@ declare function useCombobox(userProps?: {}): {
26
26
  }, { suppressRefError }?: {
27
27
  suppressRefError?: boolean | undefined;
28
28
  }) => {
29
- id: any;
29
+ id: string;
30
30
  role: string;
31
31
  'aria-labelledby': string | undefined;
32
32
  onMouseLeave: Function;
@@ -45,13 +45,13 @@ declare function useCombobox(userProps?: {}): {
45
45
  }) => {
46
46
  onChange: Function;
47
47
  onChangeText: Function;
48
- 'aria-activedescendant': any;
48
+ 'aria-activedescendant': string;
49
49
  'aria-autocomplete': string;
50
- 'aria-controls': any;
50
+ 'aria-controls': string;
51
51
  'aria-expanded': any;
52
- 'aria-labelledby': any;
52
+ 'aria-labelledby': string | undefined;
53
53
  autoComplete: string;
54
- id: any;
54
+ id: string;
55
55
  role: string;
56
56
  value: any;
57
57
  };
@@ -61,21 +61,21 @@ declare function useCombobox(userProps?: {}): {
61
61
  refKey?: string | undefined;
62
62
  ref: any;
63
63
  }) => {
64
- 'aria-controls': any;
64
+ 'aria-controls': string;
65
65
  'aria-expanded': any;
66
- id: any;
66
+ id: string;
67
67
  tabIndex: number;
68
68
  } | {
69
69
  onPress: Function;
70
- 'aria-controls': any;
70
+ 'aria-controls': string;
71
71
  'aria-expanded': any;
72
- id: any;
72
+ id: string;
73
73
  tabIndex: number;
74
74
  } | {
75
75
  onClick: Function;
76
- 'aria-controls': any;
76
+ 'aria-controls': string;
77
77
  'aria-expanded': any;
78
- id: any;
78
+ id: string;
79
79
  tabIndex: number;
80
80
  };
81
81
  toggleMenu: () => void;
@@ -10,12 +10,12 @@ declare function useSelect(userProps?: {}): {
10
10
  }, { suppressRefError }?: {
11
11
  suppressRefError?: boolean | undefined;
12
12
  }) => {
13
- 'aria-activedescendant': any;
14
- 'aria-controls': any;
13
+ 'aria-activedescendant': string;
14
+ 'aria-controls': string;
15
15
  'aria-expanded': any;
16
16
  'aria-haspopup': string;
17
17
  'aria-labelledby': string | undefined;
18
- id: any;
18
+ id: string;
19
19
  role: string;
20
20
  tabIndex: number;
21
21
  onBlur: Function;
@@ -23,8 +23,8 @@ declare function useSelect(userProps?: {}): {
23
23
  getLabelProps: ({ onClick, ...labelProps }?: {
24
24
  onClick: any;
25
25
  }) => {
26
- id: any;
27
- htmlFor: any;
26
+ id: string;
27
+ htmlFor: string;
28
28
  onClick: Function;
29
29
  };
30
30
  getMenuProps: ({ onMouseLeave, refKey, ref, ...rest }?: {
@@ -34,7 +34,7 @@ declare function useSelect(userProps?: {}): {
34
34
  }, { suppressRefError }?: {
35
35
  suppressRefError?: boolean | undefined;
36
36
  }) => {
37
- id: any;
37
+ id: string;
38
38
  role: string;
39
39
  'aria-labelledby': string | undefined;
40
40
  onMouseLeave: Function;
@@ -52,7 +52,7 @@ declare function useSelect(userProps?: {}): {
52
52
  }) => {
53
53
  'aria-disabled': boolean;
54
54
  'aria-selected': boolean;
55
- id: any;
55
+ id: string;
56
56
  role: string;
57
57
  };
58
58
  toggleMenu: () => void;
@@ -1,5 +1,5 @@
1
1
  import PropTypes from 'prop-types';
2
- export { type UseElementIdsProps, type UseElementIdsReturnValue, useElementIds, } from './useElementIds';
2
+ export { useElementIds } from './useElementIds';
3
3
  export { getInitialState } from './getInitialState';
4
4
  export { isStateEqual } from './isStateEqual';
5
5
  export { useAccessibleDescription, A11Y_DESCRIPTION_ELEMENT_ID, } from './useAccessibleDescription';
@@ -1,4 +1,11 @@
1
- import { UseTagGroupProps } from '../index.types';
2
- export type UseElementIdsProps = Pick<UseTagGroupProps<unknown>, 'id' | 'getTagId' | 'tagGroupId'>;
3
- export type UseElementIdsReturnValue = Required<Pick<UseTagGroupProps<unknown>, 'getTagId' | 'tagGroupId'>>;
1
+ type UseElementIdsProps = {
2
+ id?: string;
3
+ tagGroupId?: string;
4
+ getTagId?: (index: number) => string;
5
+ };
6
+ type UseElementIdsReturnValue = {
7
+ tagGroupId: string;
8
+ getTagId: (index: number) => string;
9
+ };
4
10
  export declare const useElementIds: (props: UseElementIdsProps) => UseElementIdsReturnValue;
11
+ export {};
@@ -23,33 +23,6 @@ export function useMouseAndTouchTracker(environment: Window, handleBlur: () => v
23
23
  };
24
24
  export function getHighlightedIndexOnOpen(props: any, state: any, offset: any): any;
25
25
  export function isAcceptedCharacterKey(key: any): boolean;
26
- export const useElementIds: (({ id, labelId, menuId, getItemId, toggleButtonId, inputId, }: {
27
- id: any;
28
- labelId: any;
29
- menuId: any;
30
- getItemId: any;
31
- toggleButtonId: any;
32
- inputId: any;
33
- }) => {
34
- labelId: any;
35
- menuId: any;
36
- getItemId: any;
37
- toggleButtonId: any;
38
- inputId: any;
39
- }) | (({ id, labelId, menuId, getItemId, toggleButtonId, inputId, }: {
40
- id?: string | undefined;
41
- labelId: any;
42
- menuId: any;
43
- getItemId: any;
44
- toggleButtonId: any;
45
- inputId: any;
46
- }) => {
47
- labelId: any;
48
- menuId: any;
49
- getItemId: any;
50
- toggleButtonId: any;
51
- inputId: any;
52
- });
53
26
  /**
54
27
  * Handles selection on Enter / Alt + ArrowUp. Closes the menu and resets the highlighted index, unless there is a highlighted.
55
28
  * In that case, selects the item and resets to defaults for open state and highlighted idex.
@@ -0,0 +1,18 @@
1
+ type UseElementIdsProps = {
2
+ id?: string;
3
+ labelId?: string;
4
+ menuId?: string;
5
+ getItemId?: (index: number) => string;
6
+ toggleButtonId?: string;
7
+ inputId?: string;
8
+ };
9
+ type UseElementIdsReturnValue = {
10
+ labelId: string;
11
+ menuId: string;
12
+ getItemId: (index: number) => string;
13
+ toggleButtonId: string;
14
+ inputId: string;
15
+ };
16
+ export declare const useElementIds: typeof useElementIdsR18;
17
+ declare function useElementIdsR18({ id, labelId, menuId, getItemId, toggleButtonId, inputId, }: UseElementIdsProps): UseElementIdsReturnValue;
18
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "downshift",
3
- "version": "9.3.0",
3
+ "version": "9.3.2",
4
4
  "description": "🏎 A set of primitives to build simple, flexible, WAI-ARIA compliant React autocomplete, combobox or select dropdown components.",
5
5
  "main": "dist/downshift.cjs.cjs",
6
6
  "react-native": "dist/downshift.native.cjs.cjs",
@@ -1878,54 +1878,6 @@ var defaultStateValues$1 = {
1878
1878
 
1879
1879
  // istanbul ignore next
1880
1880
  var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
1881
-
1882
- // istanbul ignore next
1883
- var useElementIds$1 = 'useId' in React__namespace // Avoid conditional useId call
1884
- ? function useElementIds(_ref) {
1885
- var id = _ref.id,
1886
- labelId = _ref.labelId,
1887
- menuId = _ref.menuId,
1888
- getItemId = _ref.getItemId,
1889
- toggleButtonId = _ref.toggleButtonId,
1890
- inputId = _ref.inputId;
1891
- // Avoid conditional useId call
1892
- var reactId = "downshift-" + React__namespace.useId();
1893
- if (!id) {
1894
- id = reactId;
1895
- }
1896
- var elementIds = React__namespace.useMemo(function () {
1897
- return {
1898
- labelId: labelId || id + "-label",
1899
- menuId: menuId || id + "-menu",
1900
- getItemId: getItemId || function (index) {
1901
- return id + "-item-" + index;
1902
- },
1903
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1904
- inputId: inputId || id + "-input"
1905
- };
1906
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1907
- return elementIds;
1908
- } : function useElementIds(_ref2) {
1909
- var _ref2$id = _ref2.id,
1910
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
1911
- labelId = _ref2.labelId,
1912
- menuId = _ref2.menuId,
1913
- getItemId = _ref2.getItemId,
1914
- toggleButtonId = _ref2.toggleButtonId,
1915
- inputId = _ref2.inputId;
1916
- var elementIds = React__namespace.useMemo(function () {
1917
- return {
1918
- labelId: labelId || id + "-label",
1919
- menuId: menuId || id + "-menu",
1920
- getItemId: getItemId || function (index) {
1921
- return id + "-item-" + index;
1922
- },
1923
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1924
- inputId: inputId || id + "-input"
1925
- };
1926
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1927
- return elementIds;
1928
- };
1929
1881
  function isAcceptedCharacterKey(key) {
1930
1882
  return /^\S{1}$/.test(key);
1931
1883
  }
@@ -2088,13 +2040,13 @@ if (process.env.NODE_ENV !== 'production') {
2088
2040
  return setGetterPropCallInfo;
2089
2041
  };
2090
2042
  }
2091
- function useScrollIntoView(_ref3) {
2092
- var highlightedIndex = _ref3.highlightedIndex,
2093
- isOpen = _ref3.isOpen,
2094
- itemRefs = _ref3.itemRefs,
2095
- getItemNodeFromIndex = _ref3.getItemNodeFromIndex,
2096
- menuElement = _ref3.menuElement,
2097
- scrollIntoViewProp = _ref3.scrollIntoView;
2043
+ function useScrollIntoView(_ref) {
2044
+ var highlightedIndex = _ref.highlightedIndex,
2045
+ isOpen = _ref.isOpen,
2046
+ itemRefs = _ref.itemRefs,
2047
+ getItemNodeFromIndex = _ref.getItemNodeFromIndex,
2048
+ menuElement = _ref.menuElement,
2049
+ scrollIntoViewProp = _ref.scrollIntoView;
2098
2050
  // used not to scroll on highlight by mouse.
2099
2051
  var shouldScrollRef = React__namespace.useRef(true);
2100
2052
  // Scroll on highlighted item if change comes from keyboard.
@@ -2116,9 +2068,9 @@ function useScrollIntoView(_ref3) {
2116
2068
  var useControlPropsValidator = noop;
2117
2069
  /* istanbul ignore next */
2118
2070
  if (process.env.NODE_ENV !== 'production') {
2119
- useControlPropsValidator = function useControlPropsValidator(_ref4) {
2120
- var props = _ref4.props,
2121
- state = _ref4.state;
2071
+ useControlPropsValidator = function useControlPropsValidator(_ref2) {
2072
+ var props = _ref2.props,
2073
+ state = _ref2.state;
2122
2074
  // used for checking when props are moving from controlled to uncontrolled.
2123
2075
  var prevPropsRef = React__namespace.useRef(props);
2124
2076
  var isInitialMount = useIsInitialMount();
@@ -2441,6 +2393,57 @@ function downshiftSelectReducer(state, props, action) {
2441
2393
  }
2442
2394
  /* eslint-enable complexity */
2443
2395
 
2396
+ // https://github.com/downshift-js/downshift/issues/1674#issuecomment-3924320872
2397
+ var SafeReact$1 = _extends({}, React__namespace);
2398
+ var reactUseId$1 = SafeReact$1.useId;
2399
+ var useElementIds$1 = typeof reactUseId$1 === 'function' ? useElementIdsR18$1 : useElementIdsLegacy$1;
2400
+ function useElementIdsR18$1(_ref) {
2401
+ var id = _ref.id,
2402
+ labelId = _ref.labelId,
2403
+ menuId = _ref.menuId,
2404
+ getItemId = _ref.getItemId,
2405
+ toggleButtonId = _ref.toggleButtonId,
2406
+ inputId = _ref.inputId;
2407
+ var reactId = "downshift-" + reactUseId$1();
2408
+ if (!id) {
2409
+ id = reactId;
2410
+ }
2411
+ var elementIds = React__namespace.useMemo(function () {
2412
+ return {
2413
+ labelId: labelId != null ? labelId : id + "-label",
2414
+ menuId: menuId != null ? menuId : id + "-menu",
2415
+ getItemId: getItemId != null ? getItemId : function (index) {
2416
+ return id + "-item-" + index;
2417
+ },
2418
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : id + "-toggle-button",
2419
+ inputId: inputId != null ? inputId : id + "-input"
2420
+ };
2421
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
2422
+ return elementIds;
2423
+ }
2424
+ function useElementIdsLegacy$1(_ref2) {
2425
+ var id = _ref2.id,
2426
+ labelId = _ref2.labelId,
2427
+ menuId = _ref2.menuId,
2428
+ getItemId = _ref2.getItemId,
2429
+ toggleButtonId = _ref2.toggleButtonId,
2430
+ inputId = _ref2.inputId;
2431
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
2432
+ var baseId = baseIdRef.current;
2433
+ var elementIds = React__namespace.useMemo(function () {
2434
+ return {
2435
+ labelId: labelId != null ? labelId : baseId + "-label",
2436
+ menuId: menuId != null ? menuId : baseId + "-menu",
2437
+ getItemId: getItemId != null ? getItemId : function (index) {
2438
+ return baseId + "-item-" + index;
2439
+ },
2440
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : baseId + "-toggle-button",
2441
+ inputId: inputId != null ? inputId : baseId + "-input"
2442
+ };
2443
+ }, [getItemId, inputId, labelId, menuId, toggleButtonId, baseId]);
2444
+ return elementIds;
2445
+ }
2446
+
2444
2447
  var _excluded$3 = ["onClick"],
2445
2448
  _excluded2$3 = ["onMouseLeave", "refKey", "ref"],
2446
2449
  _excluded3$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
@@ -4012,38 +4015,45 @@ function useTagGroupReducer(state, _props, action) {
4012
4015
  return _extends({}, state, changes);
4013
4016
  }
4014
4017
 
4018
+ // https://github.com/downshift-js/downshift/issues/1674#issuecomment-3924320872
4019
+ var SafeReact = _extends({}, React__namespace);
4020
+ var reactUseId = SafeReact.useId;
4021
+
4015
4022
  // istanbul ignore next
4016
- var useElementIds = 'useId' in React__namespace // Avoid conditional useId call
4017
- ? useElementIdsR18 : useElementIdsLegacy;
4023
+ var useElementIds = typeof reactUseId === 'function' ? useElementIdsR18 : useElementIdsLegacy;
4018
4024
  function useElementIdsR18(_ref) {
4019
4025
  var id = _ref.id,
4020
4026
  tagGroupId = _ref.tagGroupId,
4021
4027
  getTagId = _ref.getTagId;
4022
- // Avoid conditional useId call
4023
- var reactId = "downshift-" + React__namespace.useId();
4028
+ var reactId = "downshift-" + reactUseId();
4024
4029
  if (!id) {
4025
4030
  id = reactId;
4026
4031
  }
4027
- var elementIdsRef = React__namespace.useRef({
4028
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4029
- getTagId: getTagId != null ? getTagId : function (index) {
4030
- return id + "-tag-" + index;
4031
- }
4032
- });
4033
- return elementIdsRef.current;
4032
+ var elementIds = React__namespace.useMemo(function () {
4033
+ return {
4034
+ tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4035
+ getTagId: getTagId != null ? getTagId : function (index) {
4036
+ return id + "-tag-" + index;
4037
+ }
4038
+ };
4039
+ }, [getTagId, id, tagGroupId]);
4040
+ return elementIds;
4034
4041
  }
4035
4042
  function useElementIdsLegacy(_ref2) {
4036
- var _ref2$id = _ref2.id,
4037
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
4043
+ var id = _ref2.id,
4038
4044
  getTagId = _ref2.getTagId,
4039
4045
  tagGroupId = _ref2.tagGroupId;
4040
- var elementIdsRef = React__namespace.useRef({
4041
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4042
- getTagId: getTagId != null ? getTagId : function (index) {
4043
- return id + "-tag-" + index;
4044
- }
4045
- });
4046
- return elementIdsRef.current;
4046
+ var baseIdRef = React__namespace.useRef(id != null ? id : "downshift-" + generateId());
4047
+ var baseId = baseIdRef.current;
4048
+ var elementIds = React__namespace.useMemo(function () {
4049
+ return {
4050
+ tagGroupId: tagGroupId != null ? tagGroupId : baseId + "-tag-group",
4051
+ getTagId: getTagId != null ? getTagId : function (index) {
4052
+ return baseId + "-tag-" + index;
4053
+ }
4054
+ };
4055
+ }, [getTagId, baseId, tagGroupId]);
4056
+ return elementIds;
4047
4057
  }
4048
4058
 
4049
4059
  function getInitialState(props) {
@@ -1856,54 +1856,6 @@ var defaultStateValues$1 = {
1856
1856
 
1857
1857
  // istanbul ignore next
1858
1858
  var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect;
1859
-
1860
- // istanbul ignore next
1861
- var useElementIds$1 = 'useId' in React // Avoid conditional useId call
1862
- ? function useElementIds(_ref) {
1863
- var id = _ref.id,
1864
- labelId = _ref.labelId,
1865
- menuId = _ref.menuId,
1866
- getItemId = _ref.getItemId,
1867
- toggleButtonId = _ref.toggleButtonId,
1868
- inputId = _ref.inputId;
1869
- // Avoid conditional useId call
1870
- var reactId = "downshift-" + React.useId();
1871
- if (!id) {
1872
- id = reactId;
1873
- }
1874
- var elementIds = React.useMemo(function () {
1875
- return {
1876
- labelId: labelId || id + "-label",
1877
- menuId: menuId || id + "-menu",
1878
- getItemId: getItemId || function (index) {
1879
- return id + "-item-" + index;
1880
- },
1881
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1882
- inputId: inputId || id + "-input"
1883
- };
1884
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1885
- return elementIds;
1886
- } : function useElementIds(_ref2) {
1887
- var _ref2$id = _ref2.id,
1888
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
1889
- labelId = _ref2.labelId,
1890
- menuId = _ref2.menuId,
1891
- getItemId = _ref2.getItemId,
1892
- toggleButtonId = _ref2.toggleButtonId,
1893
- inputId = _ref2.inputId;
1894
- var elementIds = React.useMemo(function () {
1895
- return {
1896
- labelId: labelId || id + "-label",
1897
- menuId: menuId || id + "-menu",
1898
- getItemId: getItemId || function (index) {
1899
- return id + "-item-" + index;
1900
- },
1901
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1902
- inputId: inputId || id + "-input"
1903
- };
1904
- }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1905
- return elementIds;
1906
- };
1907
1859
  function isAcceptedCharacterKey(key) {
1908
1860
  return /^\S{1}$/.test(key);
1909
1861
  }
@@ -2066,13 +2018,13 @@ if (process.env.NODE_ENV !== 'production') {
2066
2018
  return setGetterPropCallInfo;
2067
2019
  };
2068
2020
  }
2069
- function useScrollIntoView(_ref3) {
2070
- var highlightedIndex = _ref3.highlightedIndex,
2071
- isOpen = _ref3.isOpen,
2072
- itemRefs = _ref3.itemRefs,
2073
- getItemNodeFromIndex = _ref3.getItemNodeFromIndex,
2074
- menuElement = _ref3.menuElement,
2075
- scrollIntoViewProp = _ref3.scrollIntoView;
2021
+ function useScrollIntoView(_ref) {
2022
+ var highlightedIndex = _ref.highlightedIndex,
2023
+ isOpen = _ref.isOpen,
2024
+ itemRefs = _ref.itemRefs,
2025
+ getItemNodeFromIndex = _ref.getItemNodeFromIndex,
2026
+ menuElement = _ref.menuElement,
2027
+ scrollIntoViewProp = _ref.scrollIntoView;
2076
2028
  // used not to scroll on highlight by mouse.
2077
2029
  var shouldScrollRef = React.useRef(true);
2078
2030
  // Scroll on highlighted item if change comes from keyboard.
@@ -2094,9 +2046,9 @@ function useScrollIntoView(_ref3) {
2094
2046
  var useControlPropsValidator = noop;
2095
2047
  /* istanbul ignore next */
2096
2048
  if (process.env.NODE_ENV !== 'production') {
2097
- useControlPropsValidator = function useControlPropsValidator(_ref4) {
2098
- var props = _ref4.props,
2099
- state = _ref4.state;
2049
+ useControlPropsValidator = function useControlPropsValidator(_ref2) {
2050
+ var props = _ref2.props,
2051
+ state = _ref2.state;
2100
2052
  // used for checking when props are moving from controlled to uncontrolled.
2101
2053
  var prevPropsRef = React.useRef(props);
2102
2054
  var isInitialMount = useIsInitialMount();
@@ -2419,6 +2371,57 @@ function downshiftSelectReducer(state, props, action) {
2419
2371
  }
2420
2372
  /* eslint-enable complexity */
2421
2373
 
2374
+ // https://github.com/downshift-js/downshift/issues/1674#issuecomment-3924320872
2375
+ var SafeReact$1 = _extends({}, React);
2376
+ var reactUseId$1 = SafeReact$1.useId;
2377
+ var useElementIds$1 = typeof reactUseId$1 === 'function' ? useElementIdsR18$1 : useElementIdsLegacy$1;
2378
+ function useElementIdsR18$1(_ref) {
2379
+ var id = _ref.id,
2380
+ labelId = _ref.labelId,
2381
+ menuId = _ref.menuId,
2382
+ getItemId = _ref.getItemId,
2383
+ toggleButtonId = _ref.toggleButtonId,
2384
+ inputId = _ref.inputId;
2385
+ var reactId = "downshift-" + reactUseId$1();
2386
+ if (!id) {
2387
+ id = reactId;
2388
+ }
2389
+ var elementIds = React.useMemo(function () {
2390
+ return {
2391
+ labelId: labelId != null ? labelId : id + "-label",
2392
+ menuId: menuId != null ? menuId : id + "-menu",
2393
+ getItemId: getItemId != null ? getItemId : function (index) {
2394
+ return id + "-item-" + index;
2395
+ },
2396
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : id + "-toggle-button",
2397
+ inputId: inputId != null ? inputId : id + "-input"
2398
+ };
2399
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
2400
+ return elementIds;
2401
+ }
2402
+ function useElementIdsLegacy$1(_ref2) {
2403
+ var id = _ref2.id,
2404
+ labelId = _ref2.labelId,
2405
+ menuId = _ref2.menuId,
2406
+ getItemId = _ref2.getItemId,
2407
+ toggleButtonId = _ref2.toggleButtonId,
2408
+ inputId = _ref2.inputId;
2409
+ var baseIdRef = React.useRef(id != null ? id : "downshift-" + generateId());
2410
+ var baseId = baseIdRef.current;
2411
+ var elementIds = React.useMemo(function () {
2412
+ return {
2413
+ labelId: labelId != null ? labelId : baseId + "-label",
2414
+ menuId: menuId != null ? menuId : baseId + "-menu",
2415
+ getItemId: getItemId != null ? getItemId : function (index) {
2416
+ return baseId + "-item-" + index;
2417
+ },
2418
+ toggleButtonId: toggleButtonId != null ? toggleButtonId : baseId + "-toggle-button",
2419
+ inputId: inputId != null ? inputId : baseId + "-input"
2420
+ };
2421
+ }, [getItemId, inputId, labelId, menuId, toggleButtonId, baseId]);
2422
+ return elementIds;
2423
+ }
2424
+
2422
2425
  var _excluded$3 = ["onClick"],
2423
2426
  _excluded2$3 = ["onMouseLeave", "refKey", "ref"],
2424
2427
  _excluded3$2 = ["onBlur", "onClick", "onPress", "onKeyDown", "refKey", "ref"],
@@ -3990,38 +3993,45 @@ function useTagGroupReducer(state, _props, action) {
3990
3993
  return _extends({}, state, changes);
3991
3994
  }
3992
3995
 
3996
+ // https://github.com/downshift-js/downshift/issues/1674#issuecomment-3924320872
3997
+ var SafeReact = _extends({}, React);
3998
+ var reactUseId = SafeReact.useId;
3999
+
3993
4000
  // istanbul ignore next
3994
- var useElementIds = 'useId' in React // Avoid conditional useId call
3995
- ? useElementIdsR18 : useElementIdsLegacy;
4001
+ var useElementIds = typeof reactUseId === 'function' ? useElementIdsR18 : useElementIdsLegacy;
3996
4002
  function useElementIdsR18(_ref) {
3997
4003
  var id = _ref.id,
3998
4004
  tagGroupId = _ref.tagGroupId,
3999
4005
  getTagId = _ref.getTagId;
4000
- // Avoid conditional useId call
4001
- var reactId = "downshift-" + React.useId();
4006
+ var reactId = "downshift-" + reactUseId();
4002
4007
  if (!id) {
4003
4008
  id = reactId;
4004
4009
  }
4005
- var elementIdsRef = React.useRef({
4006
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4007
- getTagId: getTagId != null ? getTagId : function (index) {
4008
- return id + "-tag-" + index;
4009
- }
4010
- });
4011
- return elementIdsRef.current;
4010
+ var elementIds = React.useMemo(function () {
4011
+ return {
4012
+ tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4013
+ getTagId: getTagId != null ? getTagId : function (index) {
4014
+ return id + "-tag-" + index;
4015
+ }
4016
+ };
4017
+ }, [getTagId, id, tagGroupId]);
4018
+ return elementIds;
4012
4019
  }
4013
4020
  function useElementIdsLegacy(_ref2) {
4014
- var _ref2$id = _ref2.id,
4015
- id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
4021
+ var id = _ref2.id,
4016
4022
  getTagId = _ref2.getTagId,
4017
4023
  tagGroupId = _ref2.tagGroupId;
4018
- var elementIdsRef = React.useRef({
4019
- tagGroupId: tagGroupId != null ? tagGroupId : id + "-tag-group",
4020
- getTagId: getTagId != null ? getTagId : function (index) {
4021
- return id + "-tag-" + index;
4022
- }
4023
- });
4024
- return elementIdsRef.current;
4024
+ var baseIdRef = React.useRef(id != null ? id : "downshift-" + generateId());
4025
+ var baseId = baseIdRef.current;
4026
+ var elementIds = React.useMemo(function () {
4027
+ return {
4028
+ tagGroupId: tagGroupId != null ? tagGroupId : baseId + "-tag-group",
4029
+ getTagId: getTagId != null ? getTagId : function (index) {
4030
+ return baseId + "-tag-" + index;
4031
+ }
4032
+ };
4033
+ }, [getTagId, baseId, tagGroupId]);
4034
+ return elementIds;
4025
4035
  }
4026
4036
 
4027
4037
  function getInitialState(props) {