downshift 9.0.11 → 9.0.13

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.
@@ -1616,16 +1616,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1616
1616
  if (!id) {
1617
1617
  id = reactId;
1618
1618
  }
1619
- var elementIdsRef = React.useRef({
1620
- labelId: labelId || id + "-label",
1621
- menuId: menuId || id + "-menu",
1622
- getItemId: getItemId || function (index) {
1623
- return id + "-item-" + index;
1624
- },
1625
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1626
- inputId: inputId || id + "-input"
1627
- });
1628
- return elementIdsRef.current;
1619
+ var elementIds = React.useMemo(function () {
1620
+ return {
1621
+ labelId: labelId || id + "-label",
1622
+ menuId: menuId || id + "-menu",
1623
+ getItemId: getItemId || function (index) {
1624
+ return id + "-item-" + index;
1625
+ },
1626
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1627
+ inputId: inputId || id + "-input"
1628
+ };
1629
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1630
+ return elementIds;
1629
1631
  } : function useElementIds(_ref2) {
1630
1632
  var _ref2$id = _ref2.id,
1631
1633
  id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
@@ -1634,16 +1636,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1634
1636
  getItemId = _ref2.getItemId,
1635
1637
  toggleButtonId = _ref2.toggleButtonId,
1636
1638
  inputId = _ref2.inputId;
1637
- var elementIdsRef = React.useRef({
1638
- labelId: labelId || id + "-label",
1639
- menuId: menuId || id + "-menu",
1640
- getItemId: getItemId || function (index) {
1641
- return id + "-item-" + index;
1642
- },
1643
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1644
- inputId: inputId || id + "-input"
1645
- });
1646
- return elementIdsRef.current;
1639
+ var elementIds = React.useMemo(function () {
1640
+ return {
1641
+ labelId: labelId || id + "-label",
1642
+ menuId: menuId || id + "-menu",
1643
+ getItemId: getItemId || function (index) {
1644
+ return id + "-item-" + index;
1645
+ },
1646
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1647
+ inputId: inputId || id + "-input"
1648
+ };
1649
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1650
+ return elementIds;
1647
1651
  };
1648
1652
  function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1649
1653
  var item, index;
@@ -1826,19 +1830,17 @@ function getHighlightedIndexOnOpen(props, state, offset) {
1826
1830
  * @param {Array<{current: HTMLElement}>} downshiftElementsRefs The refs for the elements that should not trigger a blur action from mouseDown or touchEnd.
1827
1831
  * @returns {{isMouseDown: boolean, isTouchMove: boolean, isTouchEnd: boolean}} The mouse and touch events information, if any of are happening.
1828
1832
  */
1829
- function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs) {
1833
+ function useMouseAndTouchTracker(environment, handleBlur, downshiftRefs) {
1830
1834
  var mouseAndTouchTrackersRef = React.useRef({
1831
1835
  isMouseDown: false,
1832
1836
  isTouchMove: false,
1833
1837
  isTouchEnd: false
1834
1838
  });
1835
-
1836
- // the elements should be retrieved the moment they are required because these are refs - they can be mutated
1837
- function getDownshiftElements() {
1838
- return downshiftElementsRefs.map(function (ref) {
1839
+ var getDownshiftElements = React.useCallback(function () {
1840
+ return downshiftRefs.map(function (ref) {
1839
1841
  return ref.current;
1840
1842
  });
1841
- }
1843
+ }, [downshiftRefs]);
1842
1844
  React.useEffect(function () {
1843
1845
  if (!environment) {
1844
1846
  return noop;
@@ -1878,7 +1880,7 @@ function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs)
1878
1880
  environment.removeEventListener('touchmove', onTouchMove);
1879
1881
  environment.removeEventListener('touchend', onTouchEnd);
1880
1882
  };
1881
- }, [downshiftElementsRefs, environment, handleBlur]);
1883
+ }, [environment, getDownshiftElements, handleBlur]);
1882
1884
  return mouseAndTouchTrackersRef.current;
1883
1885
  }
1884
1886
 
@@ -2466,17 +2468,17 @@ function useSelect(userProps) {
2466
2468
  }
2467
2469
  // eslint-disable-next-line react-hooks/exhaustive-deps
2468
2470
  }, []);
2469
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
2471
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
2470
2472
  if (latest.current.state.isOpen) {
2471
2473
  dispatch({
2472
2474
  type: ToggleButtonBlur
2473
2475
  });
2474
2476
  }
2475
- }, [dispatch, latest]), React.useMemo(function () {
2477
+ }, [dispatch, latest]);
2478
+ var downshiftRefs = React.useMemo(function () {
2476
2479
  return [menuRef, toggleButtonRef];
2477
- },
2478
- // dependencies can be left empty because refs are getting mutated
2479
- []));
2480
+ }, []);
2481
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
2480
2482
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
2481
2483
  // Reset itemRefs on close.
2482
2484
  React.useEffect(function () {
@@ -3089,18 +3091,17 @@ function useCombobox(userProps) {
3089
3091
  previousResultCountRef.current = items.length;
3090
3092
  }
3091
3093
  });
3092
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
3094
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
3093
3095
  if (latest.current.state.isOpen) {
3094
3096
  dispatch({
3095
- type: InputBlur,
3096
- selectItem: false
3097
+ type: InputBlur
3097
3098
  });
3098
3099
  }
3099
- }, [dispatch, latest]), React.useMemo(function () {
3100
+ }, [dispatch, latest]);
3101
+ var downshiftRefs = React.useMemo(function () {
3100
3102
  return [menuRef, toggleButtonRef, inputRef];
3101
- },
3102
- // dependencies can be left empty because refs are getting mutated
3103
- []));
3103
+ }, []);
3104
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
3104
3105
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
3105
3106
  // Reset itemRefs on close.
3106
3107
  React.useEffect(function () {
@@ -2,7 +2,7 @@ import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWith
2
2
  import _extends from '@babel/runtime/helpers/esm/extends';
3
3
  import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';
4
4
  import PropTypes from 'prop-types';
5
- import React, { cloneElement, Component, useRef, useEffect, useLayoutEffect, useCallback, useReducer, useMemo } from 'react';
5
+ import React, { cloneElement, Component, useMemo, useRef, useEffect, useLayoutEffect, useCallback, useReducer } from 'react';
6
6
  import { isForwardRef } from 'react-is';
7
7
  import { compute } from 'compute-scroll-into-view';
8
8
  import { __assign } from 'tslib';
@@ -1612,16 +1612,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1612
1612
  if (!id) {
1613
1613
  id = reactId;
1614
1614
  }
1615
- var elementIdsRef = useRef({
1616
- labelId: labelId || id + "-label",
1617
- menuId: menuId || id + "-menu",
1618
- getItemId: getItemId || function (index) {
1619
- return id + "-item-" + index;
1620
- },
1621
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1622
- inputId: inputId || id + "-input"
1623
- });
1624
- return elementIdsRef.current;
1615
+ var elementIds = useMemo(function () {
1616
+ return {
1617
+ labelId: labelId || id + "-label",
1618
+ menuId: menuId || id + "-menu",
1619
+ getItemId: getItemId || function (index) {
1620
+ return id + "-item-" + index;
1621
+ },
1622
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1623
+ inputId: inputId || id + "-input"
1624
+ };
1625
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1626
+ return elementIds;
1625
1627
  } : function useElementIds(_ref2) {
1626
1628
  var _ref2$id = _ref2.id,
1627
1629
  id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
@@ -1630,16 +1632,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1630
1632
  getItemId = _ref2.getItemId,
1631
1633
  toggleButtonId = _ref2.toggleButtonId,
1632
1634
  inputId = _ref2.inputId;
1633
- var elementIdsRef = useRef({
1634
- labelId: labelId || id + "-label",
1635
- menuId: menuId || id + "-menu",
1636
- getItemId: getItemId || function (index) {
1637
- return id + "-item-" + index;
1638
- },
1639
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1640
- inputId: inputId || id + "-input"
1641
- });
1642
- return elementIdsRef.current;
1635
+ var elementIds = useMemo(function () {
1636
+ return {
1637
+ labelId: labelId || id + "-label",
1638
+ menuId: menuId || id + "-menu",
1639
+ getItemId: getItemId || function (index) {
1640
+ return id + "-item-" + index;
1641
+ },
1642
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1643
+ inputId: inputId || id + "-input"
1644
+ };
1645
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1646
+ return elementIds;
1643
1647
  };
1644
1648
  function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1645
1649
  var item, index;
@@ -1822,19 +1826,17 @@ function getHighlightedIndexOnOpen(props, state, offset) {
1822
1826
  * @param {Array<{current: HTMLElement}>} downshiftElementsRefs The refs for the elements that should not trigger a blur action from mouseDown or touchEnd.
1823
1827
  * @returns {{isMouseDown: boolean, isTouchMove: boolean, isTouchEnd: boolean}} The mouse and touch events information, if any of are happening.
1824
1828
  */
1825
- function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs) {
1829
+ function useMouseAndTouchTracker(environment, handleBlur, downshiftRefs) {
1826
1830
  var mouseAndTouchTrackersRef = useRef({
1827
1831
  isMouseDown: false,
1828
1832
  isTouchMove: false,
1829
1833
  isTouchEnd: false
1830
1834
  });
1831
-
1832
- // the elements should be retrieved the moment they are required because these are refs - they can be mutated
1833
- function getDownshiftElements() {
1834
- return downshiftElementsRefs.map(function (ref) {
1835
+ var getDownshiftElements = useCallback(function () {
1836
+ return downshiftRefs.map(function (ref) {
1835
1837
  return ref.current;
1836
1838
  });
1837
- }
1839
+ }, [downshiftRefs]);
1838
1840
  useEffect(function () {
1839
1841
  if (!environment) {
1840
1842
  return noop;
@@ -1874,7 +1876,7 @@ function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs)
1874
1876
  environment.removeEventListener('touchmove', onTouchMove);
1875
1877
  environment.removeEventListener('touchend', onTouchEnd);
1876
1878
  };
1877
- }, [downshiftElementsRefs, environment, handleBlur]);
1879
+ }, [environment, getDownshiftElements, handleBlur]);
1878
1880
  return mouseAndTouchTrackersRef.current;
1879
1881
  }
1880
1882
 
@@ -2462,17 +2464,17 @@ function useSelect(userProps) {
2462
2464
  }
2463
2465
  // eslint-disable-next-line react-hooks/exhaustive-deps
2464
2466
  }, []);
2465
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, useCallback(function handleBlur() {
2467
+ var handleBlurInTracker = useCallback(function handleBlur() {
2466
2468
  if (latest.current.state.isOpen) {
2467
2469
  dispatch({
2468
2470
  type: ToggleButtonBlur
2469
2471
  });
2470
2472
  }
2471
- }, [dispatch, latest]), useMemo(function () {
2473
+ }, [dispatch, latest]);
2474
+ var downshiftRefs = useMemo(function () {
2472
2475
  return [menuRef, toggleButtonRef];
2473
- },
2474
- // dependencies can be left empty because refs are getting mutated
2475
- []));
2476
+ }, []);
2477
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
2476
2478
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
2477
2479
  // Reset itemRefs on close.
2478
2480
  useEffect(function () {
@@ -3085,18 +3087,17 @@ function useCombobox(userProps) {
3085
3087
  previousResultCountRef.current = items.length;
3086
3088
  }
3087
3089
  });
3088
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, useCallback(function handleBlur() {
3090
+ var handleBlurInTracker = useCallback(function handleBlur() {
3089
3091
  if (latest.current.state.isOpen) {
3090
3092
  dispatch({
3091
- type: InputBlur,
3092
- selectItem: false
3093
+ type: InputBlur
3093
3094
  });
3094
3095
  }
3095
- }, [dispatch, latest]), useMemo(function () {
3096
+ }, [dispatch, latest]);
3097
+ var downshiftRefs = useMemo(function () {
3096
3098
  return [menuRef, toggleButtonRef, inputRef];
3097
- },
3098
- // dependencies can be left empty because refs are getting mutated
3099
- []));
3099
+ }, []);
3100
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
3100
3101
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
3101
3102
  // Reset itemRefs on close.
3102
3103
  useEffect(function () {
@@ -1506,16 +1506,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1506
1506
  if (!id) {
1507
1507
  id = reactId;
1508
1508
  }
1509
- var elementIdsRef = React.useRef({
1510
- labelId: labelId || id + "-label",
1511
- menuId: menuId || id + "-menu",
1512
- getItemId: getItemId || function (index) {
1513
- return id + "-item-" + index;
1514
- },
1515
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1516
- inputId: inputId || id + "-input"
1517
- });
1518
- return elementIdsRef.current;
1509
+ var elementIds = React.useMemo(function () {
1510
+ return {
1511
+ labelId: labelId || id + "-label",
1512
+ menuId: menuId || id + "-menu",
1513
+ getItemId: getItemId || function (index) {
1514
+ return id + "-item-" + index;
1515
+ },
1516
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1517
+ inputId: inputId || id + "-input"
1518
+ };
1519
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1520
+ return elementIds;
1519
1521
  } : function useElementIds(_ref2) {
1520
1522
  var _ref2$id = _ref2.id,
1521
1523
  id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
@@ -1524,16 +1526,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1524
1526
  getItemId = _ref2.getItemId,
1525
1527
  toggleButtonId = _ref2.toggleButtonId,
1526
1528
  inputId = _ref2.inputId;
1527
- var elementIdsRef = React.useRef({
1528
- labelId: labelId || id + "-label",
1529
- menuId: menuId || id + "-menu",
1530
- getItemId: getItemId || function (index) {
1531
- return id + "-item-" + index;
1532
- },
1533
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1534
- inputId: inputId || id + "-input"
1535
- });
1536
- return elementIdsRef.current;
1529
+ var elementIds = React.useMemo(function () {
1530
+ return {
1531
+ labelId: labelId || id + "-label",
1532
+ menuId: menuId || id + "-menu",
1533
+ getItemId: getItemId || function (index) {
1534
+ return id + "-item-" + index;
1535
+ },
1536
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1537
+ inputId: inputId || id + "-input"
1538
+ };
1539
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1540
+ return elementIds;
1537
1541
  };
1538
1542
  function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1539
1543
  var item, index;
@@ -1713,17 +1717,22 @@ function getHighlightedIndexOnOpen(props, state, offset) {
1713
1717
  * @param {Array<{current: HTMLElement}>} downshiftElementsRefs The refs for the elements that should not trigger a blur action from mouseDown or touchEnd.
1714
1718
  * @returns {{isMouseDown: boolean, isTouchMove: boolean, isTouchEnd: boolean}} The mouse and touch events information, if any of are happening.
1715
1719
  */
1716
- function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs) {
1720
+ function useMouseAndTouchTracker(environment, handleBlur, downshiftRefs) {
1717
1721
  var mouseAndTouchTrackersRef = React.useRef({
1718
1722
  isMouseDown: false,
1719
1723
  isTouchMove: false,
1720
1724
  isTouchEnd: false
1721
1725
  });
1726
+ var getDownshiftElements = React.useCallback(function () {
1727
+ return downshiftRefs.map(function (ref) {
1728
+ return ref.current;
1729
+ });
1730
+ }, [downshiftRefs]);
1722
1731
  React.useEffect(function () {
1723
1732
  {
1724
1733
  return noop;
1725
1734
  }
1726
- }, [downshiftElementsRefs, environment, handleBlur]);
1735
+ }, [environment, getDownshiftElements, handleBlur]);
1727
1736
  return mouseAndTouchTrackersRef.current;
1728
1737
  }
1729
1738
 
@@ -2309,17 +2318,17 @@ function useSelect(userProps) {
2309
2318
  }
2310
2319
  // eslint-disable-next-line react-hooks/exhaustive-deps
2311
2320
  }, []);
2312
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
2321
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
2313
2322
  if (latest.current.state.isOpen) {
2314
2323
  dispatch({
2315
2324
  type: ToggleButtonBlur
2316
2325
  });
2317
2326
  }
2318
- }, [dispatch, latest]), React.useMemo(function () {
2327
+ }, [dispatch, latest]);
2328
+ var downshiftRefs = React.useMemo(function () {
2319
2329
  return [menuRef, toggleButtonRef];
2320
- },
2321
- // dependencies can be left empty because refs are getting mutated
2322
- []));
2330
+ }, []);
2331
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
2323
2332
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
2324
2333
  // Reset itemRefs on close.
2325
2334
  React.useEffect(function () {
@@ -2920,18 +2929,17 @@ function useCombobox(userProps) {
2920
2929
  previousResultCountRef.current = items.length;
2921
2930
  }
2922
2931
  });
2923
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
2932
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
2924
2933
  if (latest.current.state.isOpen) {
2925
2934
  dispatch({
2926
- type: InputBlur,
2927
- selectItem: false
2935
+ type: InputBlur
2928
2936
  });
2929
2937
  }
2930
- }, [dispatch, latest]), React.useMemo(function () {
2938
+ }, [dispatch, latest]);
2939
+ var downshiftRefs = React.useMemo(function () {
2931
2940
  return [menuRef, toggleButtonRef, inputRef];
2932
- },
2933
- // dependencies can be left empty because refs are getting mutated
2934
- []));
2941
+ }, []);
2942
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
2935
2943
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
2936
2944
  // Reset itemRefs on close.
2937
2945
  React.useEffect(function () {
@@ -1614,16 +1614,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1614
1614
  if (!id) {
1615
1615
  id = reactId;
1616
1616
  }
1617
- var elementIdsRef = React.useRef({
1618
- labelId: labelId || id + "-label",
1619
- menuId: menuId || id + "-menu",
1620
- getItemId: getItemId || function (index) {
1621
- return id + "-item-" + index;
1622
- },
1623
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1624
- inputId: inputId || id + "-input"
1625
- });
1626
- return elementIdsRef.current;
1617
+ var elementIds = React.useMemo(function () {
1618
+ return {
1619
+ labelId: labelId || id + "-label",
1620
+ menuId: menuId || id + "-menu",
1621
+ getItemId: getItemId || function (index) {
1622
+ return id + "-item-" + index;
1623
+ },
1624
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1625
+ inputId: inputId || id + "-input"
1626
+ };
1627
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1628
+ return elementIds;
1627
1629
  } : function useElementIds(_ref2) {
1628
1630
  var _ref2$id = _ref2.id,
1629
1631
  id = _ref2$id === void 0 ? "downshift-" + generateId() : _ref2$id,
@@ -1632,16 +1634,18 @@ var useElementIds = 'useId' in React // Avoid conditional useId call
1632
1634
  getItemId = _ref2.getItemId,
1633
1635
  toggleButtonId = _ref2.toggleButtonId,
1634
1636
  inputId = _ref2.inputId;
1635
- var elementIdsRef = React.useRef({
1636
- labelId: labelId || id + "-label",
1637
- menuId: menuId || id + "-menu",
1638
- getItemId: getItemId || function (index) {
1639
- return id + "-item-" + index;
1640
- },
1641
- toggleButtonId: toggleButtonId || id + "-toggle-button",
1642
- inputId: inputId || id + "-input"
1643
- });
1644
- return elementIdsRef.current;
1637
+ var elementIds = React.useMemo(function () {
1638
+ return {
1639
+ labelId: labelId || id + "-label",
1640
+ menuId: menuId || id + "-menu",
1641
+ getItemId: getItemId || function (index) {
1642
+ return id + "-item-" + index;
1643
+ },
1644
+ toggleButtonId: toggleButtonId || id + "-toggle-button",
1645
+ inputId: inputId || id + "-input"
1646
+ };
1647
+ }, [getItemId, id, inputId, labelId, menuId, toggleButtonId]);
1648
+ return elementIds;
1645
1649
  };
1646
1650
  function getItemAndIndex(itemProp, indexProp, items, errorMessage) {
1647
1651
  var item, index;
@@ -1821,19 +1825,17 @@ function getHighlightedIndexOnOpen(props, state, offset) {
1821
1825
  * @param {Array<{current: HTMLElement}>} downshiftElementsRefs The refs for the elements that should not trigger a blur action from mouseDown or touchEnd.
1822
1826
  * @returns {{isMouseDown: boolean, isTouchMove: boolean, isTouchEnd: boolean}} The mouse and touch events information, if any of are happening.
1823
1827
  */
1824
- function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs) {
1828
+ function useMouseAndTouchTracker(environment, handleBlur, downshiftRefs) {
1825
1829
  var mouseAndTouchTrackersRef = React.useRef({
1826
1830
  isMouseDown: false,
1827
1831
  isTouchMove: false,
1828
1832
  isTouchEnd: false
1829
1833
  });
1830
-
1831
- // the elements should be retrieved the moment they are required because these are refs - they can be mutated
1832
- function getDownshiftElements() {
1833
- return downshiftElementsRefs.map(function (ref) {
1834
+ var getDownshiftElements = React.useCallback(function () {
1835
+ return downshiftRefs.map(function (ref) {
1834
1836
  return ref.current;
1835
1837
  });
1836
- }
1838
+ }, [downshiftRefs]);
1837
1839
  React.useEffect(function () {
1838
1840
  if (!environment) {
1839
1841
  return noop;
@@ -1873,7 +1875,7 @@ function useMouseAndTouchTracker(environment, handleBlur, downshiftElementsRefs)
1873
1875
  environment.removeEventListener('touchmove', onTouchMove);
1874
1876
  environment.removeEventListener('touchend', onTouchEnd);
1875
1877
  };
1876
- }, [downshiftElementsRefs, environment, handleBlur]);
1878
+ }, [environment, getDownshiftElements, handleBlur]);
1877
1879
  return mouseAndTouchTrackersRef.current;
1878
1880
  }
1879
1881
 
@@ -2461,17 +2463,17 @@ function useSelect(userProps) {
2461
2463
  }
2462
2464
  // eslint-disable-next-line react-hooks/exhaustive-deps
2463
2465
  }, []);
2464
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
2466
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
2465
2467
  if (latest.current.state.isOpen) {
2466
2468
  dispatch({
2467
2469
  type: ToggleButtonBlur
2468
2470
  });
2469
2471
  }
2470
- }, [dispatch, latest]), React.useMemo(function () {
2472
+ }, [dispatch, latest]);
2473
+ var downshiftRefs = React.useMemo(function () {
2471
2474
  return [menuRef, toggleButtonRef];
2472
- },
2473
- // dependencies can be left empty because refs are getting mutated
2474
- []));
2475
+ }, []);
2476
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
2475
2477
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getMenuProps', 'getToggleButtonProps');
2476
2478
  // Reset itemRefs on close.
2477
2479
  React.useEffect(function () {
@@ -3072,18 +3074,17 @@ function useCombobox(userProps) {
3072
3074
  previousResultCountRef.current = items.length;
3073
3075
  }
3074
3076
  });
3075
- var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, React.useCallback(function handleBlur() {
3077
+ var handleBlurInTracker = React.useCallback(function handleBlur() {
3076
3078
  if (latest.current.state.isOpen) {
3077
3079
  dispatch({
3078
- type: InputBlur,
3079
- selectItem: false
3080
+ type: InputBlur
3080
3081
  });
3081
3082
  }
3082
- }, [dispatch, latest]), React.useMemo(function () {
3083
+ }, [dispatch, latest]);
3084
+ var downshiftRefs = React.useMemo(function () {
3083
3085
  return [menuRef, toggleButtonRef, inputRef];
3084
- },
3085
- // dependencies can be left empty because refs are getting mutated
3086
- []));
3086
+ }, []);
3087
+ var mouseAndTouchTrackers = useMouseAndTouchTracker(environment, handleBlurInTracker, downshiftRefs);
3087
3088
  var setGetterPropCallInfo = useGetterPropsCalledChecker('getInputProps', 'getMenuProps');
3088
3089
  // Reset itemRefs on close.
3089
3090
  React.useEffect(function () {