{"version":3,"file":"use-auto-complete.cjs","sources":["../../node_modules/@mui/utils/esm/usePreviousProps.js","../../node_modules/@mui/base/useAutocomplete/useAutocomplete.js"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nconst usePreviousProps = value => {\n  const ref = React.useRef({});\n  React.useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n};\nexport default usePreviousProps;","'use client';\n\n/* eslint-disable no-constant-condition */\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport { unstable_setRef as setRef, unstable_useEventCallback as useEventCallback, unstable_useControlled as useControlled, unstable_useId as useId, usePreviousProps } from '@mui/utils';\n\n// https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript\n// Give up on IE11 support for this feature\nfunction stripDiacritics(string) {\n  return typeof string.normalize !== 'undefined' ? string.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : string;\n}\nexport function createFilterOptions(config = {}) {\n  const {\n    ignoreAccents = true,\n    ignoreCase = true,\n    limit,\n    matchFrom = 'any',\n    stringify,\n    trim = false\n  } = config;\n  return (options, {\n    inputValue,\n    getOptionLabel\n  }) => {\n    let input = trim ? inputValue.trim() : inputValue;\n    if (ignoreCase) {\n      input = input.toLowerCase();\n    }\n    if (ignoreAccents) {\n      input = stripDiacritics(input);\n    }\n    const filteredOptions = !input ? options : options.filter(option => {\n      let candidate = (stringify || getOptionLabel)(option);\n      if (ignoreCase) {\n        candidate = candidate.toLowerCase();\n      }\n      if (ignoreAccents) {\n        candidate = stripDiacritics(candidate);\n      }\n      return matchFrom === 'start' ? candidate.indexOf(input) === 0 : candidate.indexOf(input) > -1;\n    });\n    return typeof limit === 'number' ? filteredOptions.slice(0, limit) : filteredOptions;\n  };\n}\n\n// To replace with .findIndex() once we stop IE11 support.\nfunction findIndex(array, comp) {\n  for (let i = 0; i < array.length; i += 1) {\n    if (comp(array[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\nconst defaultFilterOptions = createFilterOptions();\n\n// Number of options to jump in list box when `Page Up` and `Page Down` keys are used.\nconst pageSize = 5;\nconst defaultIsActiveElementInListbox = listboxRef => {\n  var _listboxRef$current$p;\n  return listboxRef.current !== null && ((_listboxRef$current$p = listboxRef.current.parentElement) == null ? void 0 : _listboxRef$current$p.contains(document.activeElement));\n};\nexport function useAutocomplete(props) {\n  const {\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    unstable_isActiveElementInListbox = defaultIsActiveElementInListbox,\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    unstable_classNamePrefix = 'Mui',\n    autoComplete = false,\n    autoHighlight = false,\n    autoSelect = false,\n    blurOnSelect = false,\n    clearOnBlur = !props.freeSolo,\n    clearOnEscape = false,\n    componentName = 'useAutocomplete',\n    defaultValue = props.multiple ? [] : null,\n    disableClearable = false,\n    disableCloseOnSelect = false,\n    disabled: disabledProp,\n    disabledItemsFocusable = false,\n    disableListWrap = false,\n    filterOptions = defaultFilterOptions,\n    filterSelectedOptions = false,\n    freeSolo = false,\n    getOptionDisabled,\n    getOptionKey,\n    getOptionLabel: getOptionLabelProp = option => {\n      var _option$label;\n      return (_option$label = option.label) != null ? _option$label : option;\n    },\n    groupBy,\n    handleHomeEndKeys = !props.freeSolo,\n    id: idProp,\n    includeInputInList = false,\n    inputValue: inputValueProp,\n    isOptionEqualToValue = (option, value) => option === value,\n    multiple = false,\n    onChange,\n    onClose,\n    onHighlightChange,\n    onInputChange,\n    onOpen,\n    open: openProp,\n    openOnFocus = false,\n    options,\n    readOnly = false,\n    selectOnFocus = !props.freeSolo,\n    value: valueProp\n  } = props;\n  const id = useId(idProp);\n  let getOptionLabel = getOptionLabelProp;\n  getOptionLabel = option => {\n    const optionLabel = getOptionLabelProp(option);\n    if (typeof optionLabel !== 'string') {\n      if (process.env.NODE_ENV !== 'production') {\n        const erroneousReturn = optionLabel === undefined ? 'undefined' : `${typeof optionLabel} (${optionLabel})`;\n        console.error(`MUI: The \\`getOptionLabel\\` method of ${componentName} returned ${erroneousReturn} instead of a string for ${JSON.stringify(option)}.`);\n      }\n      return String(optionLabel);\n    }\n    return optionLabel;\n  };\n  const ignoreFocus = React.useRef(false);\n  const firstFocus = React.useRef(true);\n  const inputRef = React.useRef(null);\n  const listboxRef = React.useRef(null);\n  const [anchorEl, setAnchorEl] = React.useState(null);\n  const [focusedTag, setFocusedTag] = React.useState(-1);\n  const defaultHighlighted = autoHighlight ? 0 : -1;\n  const highlightedIndexRef = React.useRef(defaultHighlighted);\n  const [value, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: componentName\n  });\n  const [inputValue, setInputValueState] = useControlled({\n    controlled: inputValueProp,\n    default: '',\n    name: componentName,\n    state: 'inputValue'\n  });\n  const [focused, setFocused] = React.useState(false);\n  const resetInputValue = React.useCallback((event, newValue) => {\n    // retain current `inputValue` if new option isn't selected and `clearOnBlur` is false\n    // When `multiple` is enabled, `newValue` is an array of all selected items including the newly selected item\n    const isOptionSelected = multiple ? value.length < newValue.length : newValue !== null;\n    if (!isOptionSelected && !clearOnBlur) {\n      return;\n    }\n    let newInputValue;\n    if (multiple) {\n      newInputValue = '';\n    } else if (newValue == null) {\n      newInputValue = '';\n    } else {\n      const optionLabel = getOptionLabel(newValue);\n      newInputValue = typeof optionLabel === 'string' ? optionLabel : '';\n    }\n    if (inputValue === newInputValue) {\n      return;\n    }\n    setInputValueState(newInputValue);\n    if (onInputChange) {\n      onInputChange(event, newInputValue, 'reset');\n    }\n  }, [getOptionLabel, inputValue, multiple, onInputChange, setInputValueState, clearOnBlur, value]);\n  const [open, setOpenState] = useControlled({\n    controlled: openProp,\n    default: false,\n    name: componentName,\n    state: 'open'\n  });\n  const [inputPristine, setInputPristine] = React.useState(true);\n  const inputValueIsSelectedValue = !multiple && value != null && inputValue === getOptionLabel(value);\n  const popupOpen = open && !readOnly;\n  const filteredOptions = popupOpen ? filterOptions(options.filter(option => {\n    if (filterSelectedOptions && (multiple ? value : [value]).some(value2 => value2 !== null && isOptionEqualToValue(option, value2))) {\n      return false;\n    }\n    return true;\n  }),\n  // we use the empty string to manipulate `filterOptions` to not filter any options\n  // i.e. the filter predicate always returns true\n  {\n    inputValue: inputValueIsSelectedValue && inputPristine ? '' : inputValue,\n    getOptionLabel\n  }) : [];\n  const previousProps = usePreviousProps({\n    filteredOptions,\n    value,\n    inputValue\n  });\n  React.useEffect(() => {\n    const valueChange = value !== previousProps.value;\n    if (focused && !valueChange) {\n      return;\n    }\n\n    // Only reset the input's value when freeSolo if the component's value changes.\n    if (freeSolo && !valueChange) {\n      return;\n    }\n    resetInputValue(null, value);\n  }, [value, resetInputValue, focused, previousProps.value, freeSolo]);\n  const listboxAvailable = open && filteredOptions.length > 0 && !readOnly;\n  if (process.env.NODE_ENV !== 'production') {\n    if (value !== null && !freeSolo && options.length > 0) {\n      const missingValue = (multiple ? value : [value]).filter(value2 => !options.some(option => isOptionEqualToValue(option, value2)));\n      if (missingValue.length > 0) {\n        console.warn([`MUI: The value provided to ${componentName} is invalid.`, `None of the options match with \\`${missingValue.length > 1 ? JSON.stringify(missingValue) : JSON.stringify(missingValue[0])}\\`.`, 'You can use the `isOptionEqualToValue` prop to customize the equality test.'].join('\\n'));\n      }\n    }\n  }\n  const focusTag = useEventCallback(tagToFocus => {\n    if (tagToFocus === -1) {\n      inputRef.current.focus();\n    } else {\n      anchorEl.querySelector(`[data-tag-index=\"${tagToFocus}\"]`).focus();\n    }\n  });\n\n  // Ensure the focusedTag is never inconsistent\n  React.useEffect(() => {\n    if (multiple && focusedTag > value.length - 1) {\n      setFocusedTag(-1);\n      focusTag(-1);\n    }\n  }, [value, multiple, focusedTag, focusTag]);\n  function validOptionIndex(index, direction) {\n    if (!listboxRef.current || index < 0 || index >= filteredOptions.length) {\n      return -1;\n    }\n    let nextFocus = index;\n    while (true) {\n      const option = listboxRef.current.querySelector(`[data-option-index=\"${nextFocus}\"]`);\n\n      // Same logic as MenuList.js\n      const nextFocusDisabled = disabledItemsFocusable ? false : !option || option.disabled || option.getAttribute('aria-disabled') === 'true';\n      if (option && option.hasAttribute('tabindex') && !nextFocusDisabled) {\n        // The next option is available\n        return nextFocus;\n      }\n\n      // The next option is disabled, move to the next element.\n      // with looped index\n      if (direction === 'next') {\n        nextFocus = (nextFocus + 1) % filteredOptions.length;\n      } else {\n        nextFocus = (nextFocus - 1 + filteredOptions.length) % filteredOptions.length;\n      }\n\n      // We end up with initial index, that means we don't have available options.\n      // All of them are disabled\n      if (nextFocus === index) {\n        return -1;\n      }\n    }\n  }\n  const setHighlightedIndex = useEventCallback(({\n    event,\n    index,\n    reason = 'auto'\n  }) => {\n    highlightedIndexRef.current = index;\n\n    // does the index exist?\n    if (index === -1) {\n      inputRef.current.removeAttribute('aria-activedescendant');\n    } else {\n      inputRef.current.setAttribute('aria-activedescendant', `${id}-option-${index}`);\n    }\n    if (onHighlightChange) {\n      onHighlightChange(event, index === -1 ? null : filteredOptions[index], reason);\n    }\n    if (!listboxRef.current) {\n      return;\n    }\n    const prev = listboxRef.current.querySelector(`[role=\"option\"].${unstable_classNamePrefix}-focused`);\n    if (prev) {\n      prev.classList.remove(`${unstable_classNamePrefix}-focused`);\n      prev.classList.remove(`${unstable_classNamePrefix}-focusVisible`);\n    }\n    let listboxNode = listboxRef.current;\n    if (listboxRef.current.getAttribute('role') !== 'listbox') {\n      listboxNode = listboxRef.current.parentElement.querySelector('[role=\"listbox\"]');\n    }\n\n    // \"No results\"\n    if (!listboxNode) {\n      return;\n    }\n    if (index === -1) {\n      listboxNode.scrollTop = 0;\n      return;\n    }\n    const option = listboxRef.current.querySelector(`[data-option-index=\"${index}\"]`);\n    if (!option) {\n      return;\n    }\n    option.classList.add(`${unstable_classNamePrefix}-focused`);\n    if (reason === 'keyboard') {\n      option.classList.add(`${unstable_classNamePrefix}-focusVisible`);\n    }\n\n    // Scroll active descendant into view.\n    // Logic copied from https://www.w3.org/WAI/content-assets/wai-aria-practices/patterns/combobox/examples/js/select-only.js\n    // In case of mouse clicks and touch (in mobile devices) we avoid scrolling the element and keep both behaviors same.\n    // Consider this API instead once it has a better browser support:\n    // .scrollIntoView({ scrollMode: 'if-needed', block: 'nearest' });\n    if (listboxNode.scrollHeight > listboxNode.clientHeight && reason !== 'mouse' && reason !== 'touch') {\n      const element = option;\n      const scrollBottom = listboxNode.clientHeight + listboxNode.scrollTop;\n      const elementBottom = element.offsetTop + element.offsetHeight;\n      if (elementBottom > scrollBottom) {\n        listboxNode.scrollTop = elementBottom - listboxNode.clientHeight;\n      } else if (element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0) < listboxNode.scrollTop) {\n        listboxNode.scrollTop = element.offsetTop - element.offsetHeight * (groupBy ? 1.3 : 0);\n      }\n    }\n  });\n  const changeHighlightedIndex = useEventCallback(({\n    event,\n    diff,\n    direction = 'next',\n    reason = 'auto'\n  }) => {\n    if (!popupOpen) {\n      return;\n    }\n    const getNextIndex = () => {\n      const maxIndex = filteredOptions.length - 1;\n      if (diff === 'reset') {\n        return defaultHighlighted;\n      }\n      if (diff === 'start') {\n        return 0;\n      }\n      if (diff === 'end') {\n        return maxIndex;\n      }\n      const newIndex = highlightedIndexRef.current + diff;\n      if (newIndex < 0) {\n        if (newIndex === -1 && includeInputInList) {\n          return -1;\n        }\n        if (disableListWrap && highlightedIndexRef.current !== -1 || Math.abs(diff) > 1) {\n          return 0;\n        }\n        return maxIndex;\n      }\n      if (newIndex > maxIndex) {\n        if (newIndex === maxIndex + 1 && includeInputInList) {\n          return -1;\n        }\n        if (disableListWrap || Math.abs(diff) > 1) {\n          return maxIndex;\n        }\n        return 0;\n      }\n      return newIndex;\n    };\n    const nextIndex = validOptionIndex(getNextIndex(), direction);\n    setHighlightedIndex({\n      index: nextIndex,\n      reason,\n      event\n    });\n\n    // Sync the content of the input with the highlighted option.\n    if (autoComplete && diff !== 'reset') {\n      if (nextIndex === -1) {\n        inputRef.current.value = inputValue;\n      } else {\n        const option = getOptionLabel(filteredOptions[nextIndex]);\n        inputRef.current.value = option;\n\n        // The portion of the selected suggestion that has not been typed by the user,\n        // a completion string, appears inline after the input cursor in the textbox.\n        const index = option.toLowerCase().indexOf(inputValue.toLowerCase());\n        if (index === 0 && inputValue.length > 0) {\n          inputRef.current.setSelectionRange(inputValue.length, option.length);\n        }\n      }\n    }\n  });\n  const checkHighlightedOptionExists = () => {\n    const isSameValue = (value1, value2) => {\n      const label1 = value1 ? getOptionLabel(value1) : '';\n      const label2 = value2 ? getOptionLabel(value2) : '';\n      return label1 === label2;\n    };\n    if (highlightedIndexRef.current !== -1 && previousProps.filteredOptions && previousProps.filteredOptions.length !== filteredOptions.length && previousProps.inputValue === inputValue && (multiple ? value.length === previousProps.value.length && previousProps.value.every((val, i) => getOptionLabel(value[i]) === getOptionLabel(val)) : isSameValue(previousProps.value, value))) {\n      const previousHighlightedOption = previousProps.filteredOptions[highlightedIndexRef.current];\n      if (previousHighlightedOption) {\n        const previousHighlightedOptionExists = filteredOptions.some(option => {\n          return getOptionLabel(option) === getOptionLabel(previousHighlightedOption);\n        });\n        if (previousHighlightedOptionExists) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n  const syncHighlightedIndex = React.useCallback(() => {\n    if (!popupOpen) {\n      return;\n    }\n\n    // Check if the previously highlighted option still exists in the updated filtered options list and if the value and inputValue haven't changed\n    // If it exists and the value and the inputValue haven't changed, return, otherwise continue execution\n    if (checkHighlightedOptionExists()) {\n      return;\n    }\n    const valueItem = multiple ? value[0] : value;\n\n    // The popup is empty, reset\n    if (filteredOptions.length === 0 || valueItem == null) {\n      changeHighlightedIndex({\n        diff: 'reset'\n      });\n      return;\n    }\n    if (!listboxRef.current) {\n      return;\n    }\n\n    // Synchronize the value with the highlighted index\n    if (valueItem != null) {\n      const currentOption = filteredOptions[highlightedIndexRef.current];\n\n      // Keep the current highlighted index if possible\n      if (multiple && currentOption && findIndex(value, val => isOptionEqualToValue(currentOption, val)) !== -1) {\n        return;\n      }\n      const itemIndex = findIndex(filteredOptions, optionItem => isOptionEqualToValue(optionItem, valueItem));\n      if (itemIndex === -1) {\n        changeHighlightedIndex({\n          diff: 'reset'\n        });\n      } else {\n        setHighlightedIndex({\n          index: itemIndex\n        });\n      }\n      return;\n    }\n\n    // Prevent the highlighted index to leak outside the boundaries.\n    if (highlightedIndexRef.current >= filteredOptions.length - 1) {\n      setHighlightedIndex({\n        index: filteredOptions.length - 1\n      });\n      return;\n    }\n\n    // Restore the focus to the previous index.\n    setHighlightedIndex({\n      index: highlightedIndexRef.current\n    });\n    // Ignore filteredOptions (and options, isOptionEqualToValue, getOptionLabel) not to break the scroll position\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n  // Only sync the highlighted index when the option switch between empty and not\n  filteredOptions.length,\n  // Don't sync the highlighted index with the value when multiple\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  multiple ? false : value, filterSelectedOptions, changeHighlightedIndex, setHighlightedIndex, popupOpen, inputValue, multiple]);\n  const handleListboxRef = useEventCallback(node => {\n    setRef(listboxRef, node);\n    if (!node) {\n      return;\n    }\n    syncHighlightedIndex();\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (!inputRef.current || inputRef.current.nodeName !== 'INPUT') {\n        if (inputRef.current && inputRef.current.nodeName === 'TEXTAREA') {\n          console.warn([`A textarea element was provided to ${componentName} where input was expected.`, `This is not a supported scenario but it may work under certain conditions.`, `A textarea keyboard navigation may conflict with Autocomplete controls (e.g. enter and arrow keys).`, `Make sure to test keyboard navigation and add custom event handlers if necessary.`].join('\\n'));\n        } else {\n          console.error([`MUI: Unable to find the input element. It was resolved to ${inputRef.current} while an HTMLInputElement was expected.`, `Instead, ${componentName} expects an input element.`, '', componentName === 'useAutocomplete' ? 'Make sure you have bound getInputProps correctly and that the normal ref/effect resolutions order is guaranteed.' : 'Make sure you have customized the input component correctly.'].join('\\n'));\n        }\n      }\n    }, [componentName]);\n  }\n  React.useEffect(() => {\n    syncHighlightedIndex();\n  }, [syncHighlightedIndex]);\n  const handleOpen = event => {\n    if (open) {\n      return;\n    }\n    setOpenState(true);\n    setInputPristine(true);\n    if (onOpen) {\n      onOpen(event);\n    }\n  };\n  const handleClose = (event, reason) => {\n    if (!open) {\n      return;\n    }\n    setOpenState(false);\n    if (onClose) {\n      onClose(event, reason);\n    }\n  };\n  const handleValue = (event, newValue, reason, details) => {\n    if (multiple) {\n      if (value.length === newValue.length && value.every((val, i) => val === newValue[i])) {\n        return;\n      }\n    } else if (value === newValue) {\n      return;\n    }\n    if (onChange) {\n      onChange(event, newValue, reason, details);\n    }\n    setValueState(newValue);\n  };\n  const isTouch = React.useRef(false);\n  const selectNewValue = (event, option, reasonProp = 'selectOption', origin = 'options') => {\n    let reason = reasonProp;\n    let newValue = option;\n    if (multiple) {\n      newValue = Array.isArray(value) ? value.slice() : [];\n      if (process.env.NODE_ENV !== 'production') {\n        const matches = newValue.filter(val => isOptionEqualToValue(option, val));\n        if (matches.length > 1) {\n          console.error([`MUI: The \\`isOptionEqualToValue\\` method of ${componentName} does not handle the arguments correctly.`, `The component expects a single value to match a given option but found ${matches.length} matches.`].join('\\n'));\n        }\n      }\n      const itemIndex = findIndex(newValue, valueItem => isOptionEqualToValue(option, valueItem));\n      if (itemIndex === -1) {\n        newValue.push(option);\n      } else if (origin !== 'freeSolo') {\n        newValue.splice(itemIndex, 1);\n        reason = 'removeOption';\n      }\n    }\n    resetInputValue(event, newValue);\n    handleValue(event, newValue, reason, {\n      option\n    });\n    if (!disableCloseOnSelect && (!event || !event.ctrlKey && !event.metaKey)) {\n      handleClose(event, reason);\n    }\n    if (blurOnSelect === true || blurOnSelect === 'touch' && isTouch.current || blurOnSelect === 'mouse' && !isTouch.current) {\n      inputRef.current.blur();\n    }\n  };\n  function validTagIndex(index, direction) {\n    if (index === -1) {\n      return -1;\n    }\n    let nextFocus = index;\n    while (true) {\n      // Out of range\n      if (direction === 'next' && nextFocus === value.length || direction === 'previous' && nextFocus === -1) {\n        return -1;\n      }\n      const option = anchorEl.querySelector(`[data-tag-index=\"${nextFocus}\"]`);\n\n      // Same logic as MenuList.js\n      if (!option || !option.hasAttribute('tabindex') || option.disabled || option.getAttribute('aria-disabled') === 'true') {\n        nextFocus += direction === 'next' ? 1 : -1;\n      } else {\n        return nextFocus;\n      }\n    }\n  }\n  const handleFocusTag = (event, direction) => {\n    if (!multiple) {\n      return;\n    }\n    if (inputValue === '') {\n      handleClose(event, 'toggleInput');\n    }\n    let nextTag = focusedTag;\n    if (focusedTag === -1) {\n      if (inputValue === '' && direction === 'previous') {\n        nextTag = value.length - 1;\n      }\n    } else {\n      nextTag += direction === 'next' ? 1 : -1;\n      if (nextTag < 0) {\n        nextTag = 0;\n      }\n      if (nextTag === value.length) {\n        nextTag = -1;\n      }\n    }\n    nextTag = validTagIndex(nextTag, direction);\n    setFocusedTag(nextTag);\n    focusTag(nextTag);\n  };\n  const handleClear = event => {\n    ignoreFocus.current = true;\n    setInputValueState('');\n    if (onInputChange) {\n      onInputChange(event, '', 'clear');\n    }\n    handleValue(event, multiple ? [] : null, 'clear');\n  };\n  const handleKeyDown = other => event => {\n    if (other.onKeyDown) {\n      other.onKeyDown(event);\n    }\n    if (event.defaultMuiPrevented) {\n      return;\n    }\n    if (focusedTag !== -1 && ['ArrowLeft', 'ArrowRight'].indexOf(event.key) === -1) {\n      setFocusedTag(-1);\n      focusTag(-1);\n    }\n\n    // Wait until IME is settled.\n    if (event.which !== 229) {\n      switch (event.key) {\n        case 'Home':\n          if (popupOpen && handleHomeEndKeys) {\n            // Prevent scroll of the page\n            event.preventDefault();\n            changeHighlightedIndex({\n              diff: 'start',\n              direction: 'next',\n              reason: 'keyboard',\n              event\n            });\n          }\n          break;\n        case 'End':\n          if (popupOpen && handleHomeEndKeys) {\n            // Prevent scroll of the page\n            event.preventDefault();\n            changeHighlightedIndex({\n              diff: 'end',\n              direction: 'previous',\n              reason: 'keyboard',\n              event\n            });\n          }\n          break;\n        case 'PageUp':\n          // Prevent scroll of the page\n          event.preventDefault();\n          changeHighlightedIndex({\n            diff: -pageSize,\n            direction: 'previous',\n            reason: 'keyboard',\n            event\n          });\n          handleOpen(event);\n          break;\n        case 'PageDown':\n          // Prevent scroll of the page\n          event.preventDefault();\n          changeHighlightedIndex({\n            diff: pageSize,\n            direction: 'next',\n            reason: 'keyboard',\n            event\n          });\n          handleOpen(event);\n          break;\n        case 'ArrowDown':\n          // Prevent cursor move\n          event.preventDefault();\n          changeHighlightedIndex({\n            diff: 1,\n            direction: 'next',\n            reason: 'keyboard',\n            event\n          });\n          handleOpen(event);\n          break;\n        case 'ArrowUp':\n          // Prevent cursor move\n          event.preventDefault();\n          changeHighlightedIndex({\n            diff: -1,\n            direction: 'previous',\n            reason: 'keyboard',\n            event\n          });\n          handleOpen(event);\n          break;\n        case 'ArrowLeft':\n          handleFocusTag(event, 'previous');\n          break;\n        case 'ArrowRight':\n          handleFocusTag(event, 'next');\n          break;\n        case 'Enter':\n          if (highlightedIndexRef.current !== -1 && popupOpen) {\n            const option = filteredOptions[highlightedIndexRef.current];\n            const disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n\n            // Avoid early form validation, let the end-users continue filling the form.\n            event.preventDefault();\n            if (disabled) {\n              return;\n            }\n            selectNewValue(event, option, 'selectOption');\n\n            // Move the selection to the end.\n            if (autoComplete) {\n              inputRef.current.setSelectionRange(inputRef.current.value.length, inputRef.current.value.length);\n            }\n          } else if (freeSolo && inputValue !== '' && inputValueIsSelectedValue === false) {\n            if (multiple) {\n              // Allow people to add new values before they submit the form.\n              event.preventDefault();\n            }\n            selectNewValue(event, inputValue, 'createOption', 'freeSolo');\n          }\n          break;\n        case 'Escape':\n          if (popupOpen) {\n            // Avoid Opera to exit fullscreen mode.\n            event.preventDefault();\n            // Avoid the Modal to handle the event.\n            event.stopPropagation();\n            handleClose(event, 'escape');\n          } else if (clearOnEscape && (inputValue !== '' || multiple && value.length > 0)) {\n            // Avoid Opera to exit fullscreen mode.\n            event.preventDefault();\n            // Avoid the Modal to handle the event.\n            event.stopPropagation();\n            handleClear(event);\n          }\n          break;\n        case 'Backspace':\n          if (multiple && !readOnly && inputValue === '' && value.length > 0) {\n            const index = focusedTag === -1 ? value.length - 1 : focusedTag;\n            const newValue = value.slice();\n            newValue.splice(index, 1);\n            handleValue(event, newValue, 'removeOption', {\n              option: value[index]\n            });\n          }\n          break;\n        case 'Delete':\n          if (multiple && !readOnly && inputValue === '' && value.length > 0 && focusedTag !== -1) {\n            const index = focusedTag;\n            const newValue = value.slice();\n            newValue.splice(index, 1);\n            handleValue(event, newValue, 'removeOption', {\n              option: value[index]\n            });\n          }\n          break;\n        default:\n      }\n    }\n  };\n  const handleFocus = event => {\n    setFocused(true);\n    if (openOnFocus && !ignoreFocus.current) {\n      handleOpen(event);\n    }\n  };\n  const handleBlur = event => {\n    // Ignore the event when using the scrollbar with IE11\n    if (unstable_isActiveElementInListbox(listboxRef)) {\n      inputRef.current.focus();\n      return;\n    }\n    setFocused(false);\n    firstFocus.current = true;\n    ignoreFocus.current = false;\n    if (autoSelect && highlightedIndexRef.current !== -1 && popupOpen) {\n      selectNewValue(event, filteredOptions[highlightedIndexRef.current], 'blur');\n    } else if (autoSelect && freeSolo && inputValue !== '') {\n      selectNewValue(event, inputValue, 'blur', 'freeSolo');\n    } else if (clearOnBlur) {\n      resetInputValue(event, value);\n    }\n    handleClose(event, 'blur');\n  };\n  const handleInputChange = event => {\n    const newValue = event.target.value;\n    if (inputValue !== newValue) {\n      setInputValueState(newValue);\n      setInputPristine(false);\n      if (onInputChange) {\n        onInputChange(event, newValue, 'input');\n      }\n    }\n    if (newValue === '') {\n      if (!disableClearable && !multiple) {\n        handleValue(event, null, 'clear');\n      }\n    } else {\n      handleOpen(event);\n    }\n  };\n  const handleOptionMouseMove = event => {\n    const index = Number(event.currentTarget.getAttribute('data-option-index'));\n    if (highlightedIndexRef.current !== index) {\n      setHighlightedIndex({\n        event,\n        index,\n        reason: 'mouse'\n      });\n    }\n  };\n  const handleOptionTouchStart = event => {\n    setHighlightedIndex({\n      event,\n      index: Number(event.currentTarget.getAttribute('data-option-index')),\n      reason: 'touch'\n    });\n    isTouch.current = true;\n  };\n  const handleOptionClick = event => {\n    const index = Number(event.currentTarget.getAttribute('data-option-index'));\n    selectNewValue(event, filteredOptions[index], 'selectOption');\n    isTouch.current = false;\n  };\n  const handleTagDelete = index => event => {\n    const newValue = value.slice();\n    newValue.splice(index, 1);\n    handleValue(event, newValue, 'removeOption', {\n      option: value[index]\n    });\n  };\n  const handlePopupIndicator = event => {\n    if (open) {\n      handleClose(event, 'toggleInput');\n    } else {\n      handleOpen(event);\n    }\n  };\n\n  // Prevent input blur when interacting with the combobox\n  const handleMouseDown = event => {\n    // Prevent focusing the input if click is anywhere outside the Autocomplete\n    if (!event.currentTarget.contains(event.target)) {\n      return;\n    }\n    if (event.target.getAttribute('id') !== id) {\n      event.preventDefault();\n    }\n  };\n\n  // Focus the input when interacting with the combobox\n  const handleClick = event => {\n    // Prevent focusing the input if click is anywhere outside the Autocomplete\n    if (!event.currentTarget.contains(event.target)) {\n      return;\n    }\n    inputRef.current.focus();\n    if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {\n      inputRef.current.select();\n    }\n    firstFocus.current = false;\n  };\n  const handleInputMouseDown = event => {\n    if (!disabledProp && (inputValue === '' || !open)) {\n      handlePopupIndicator(event);\n    }\n  };\n  let dirty = freeSolo && inputValue.length > 0;\n  dirty = dirty || (multiple ? value.length > 0 : value !== null);\n  let groupedOptions = filteredOptions;\n  if (groupBy) {\n    // used to keep track of key and indexes in the result array\n    const indexBy = new Map();\n    let warn = false;\n    groupedOptions = filteredOptions.reduce((acc, option, index) => {\n      const group = groupBy(option);\n      if (acc.length > 0 && acc[acc.length - 1].group === group) {\n        acc[acc.length - 1].options.push(option);\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          if (indexBy.get(group) && !warn) {\n            console.warn(`MUI: The options provided combined with the \\`groupBy\\` method of ${componentName} returns duplicated headers.`, 'You can solve the issue by sorting the options with the output of `groupBy`.');\n            warn = true;\n          }\n          indexBy.set(group, true);\n        }\n        acc.push({\n          key: index,\n          index,\n          group,\n          options: [option]\n        });\n      }\n      return acc;\n    }, []);\n  }\n  if (disabledProp && focused) {\n    handleBlur();\n  }\n  return {\n    getRootProps: (other = {}) => _extends({\n      'aria-owns': listboxAvailable ? `${id}-listbox` : null\n    }, other, {\n      onKeyDown: handleKeyDown(other),\n      onMouseDown: handleMouseDown,\n      onClick: handleClick\n    }),\n    getInputLabelProps: () => ({\n      id: `${id}-label`,\n      htmlFor: id\n    }),\n    getInputProps: () => ({\n      id,\n      value: inputValue,\n      onBlur: handleBlur,\n      onFocus: handleFocus,\n      onChange: handleInputChange,\n      onMouseDown: handleInputMouseDown,\n      // if open then this is handled imperatively so don't let react override\n      // only have an opinion about this when closed\n      'aria-activedescendant': popupOpen ? '' : null,\n      'aria-autocomplete': autoComplete ? 'both' : 'list',\n      'aria-controls': listboxAvailable ? `${id}-listbox` : undefined,\n      'aria-expanded': listboxAvailable,\n      // Disable browser's suggestion that might overlap with the popup.\n      // Handle autocomplete but not autofill.\n      autoComplete: 'off',\n      ref: inputRef,\n      autoCapitalize: 'none',\n      spellCheck: 'false',\n      role: 'combobox',\n      disabled: disabledProp\n    }),\n    getClearProps: () => ({\n      tabIndex: -1,\n      type: 'button',\n      onClick: handleClear\n    }),\n    getPopupIndicatorProps: () => ({\n      tabIndex: -1,\n      type: 'button',\n      onClick: handlePopupIndicator\n    }),\n    getTagProps: ({\n      index\n    }) => _extends({\n      key: index,\n      'data-tag-index': index,\n      tabIndex: -1\n    }, !readOnly && {\n      onDelete: handleTagDelete(index)\n    }),\n    getListboxProps: () => ({\n      role: 'listbox',\n      id: `${id}-listbox`,\n      'aria-labelledby': `${id}-label`,\n      ref: handleListboxRef,\n      onMouseDown: event => {\n        // Prevent blur\n        event.preventDefault();\n      }\n    }),\n    getOptionProps: ({\n      index,\n      option\n    }) => {\n      var _getOptionKey;\n      const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));\n      const disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n      return {\n        key: (_getOptionKey = getOptionKey == null ? void 0 : getOptionKey(option)) != null ? _getOptionKey : getOptionLabel(option),\n        tabIndex: -1,\n        role: 'option',\n        id: `${id}-option-${index}`,\n        onMouseMove: handleOptionMouseMove,\n        onClick: handleOptionClick,\n        onTouchStart: handleOptionTouchStart,\n        'data-option-index': index,\n        'aria-disabled': disabled,\n        'aria-selected': selected\n      };\n    },\n    id,\n    inputValue,\n    value,\n    dirty,\n    expanded: popupOpen && anchorEl,\n    popupOpen,\n    focused: focused || focusedTag !== -1,\n    anchorEl,\n    setAnchorEl,\n    focusedTag,\n    groupedOptions\n  };\n}"],"names":["usePreviousProps","value","ref","React","usePreviousProps$1","stripDiacritics","string","createFilterOptions","config","ignoreAccents","ignoreCase","limit","matchFrom","stringify","trim","options","inputValue","getOptionLabel","input","filteredOptions","option","candidate","findIndex","array","comp","i","defaultFilterOptions","pageSize","defaultIsActiveElementInListbox","listboxRef","_listboxRef$current$p","useAutocomplete","props","unstable_isActiveElementInListbox","unstable_classNamePrefix","autoComplete","autoHighlight","autoSelect","blurOnSelect","clearOnBlur","clearOnEscape","componentName","defaultValue","disableClearable","disableCloseOnSelect","disabledProp","disabledItemsFocusable","disableListWrap","filterOptions","filterSelectedOptions","freeSolo","getOptionDisabled","getOptionKey","getOptionLabelProp","_option$label","groupBy","handleHomeEndKeys","idProp","includeInputInList","inputValueProp","isOptionEqualToValue","multiple","onChange","onClose","onHighlightChange","onInputChange","onOpen","openProp","openOnFocus","readOnly","selectOnFocus","valueProp","id","useId","optionLabel","erroneousReturn","ignoreFocus","firstFocus","inputRef","anchorEl","setAnchorEl","focusedTag","setFocusedTag","defaultHighlighted","highlightedIndexRef","setValueState","useControlled","setInputValueState","focused","setFocused","resetInputValue","event","newValue","newInputValue","open","setOpenState","inputPristine","setInputPristine","inputValueIsSelectedValue","popupOpen","value2","previousProps","valueChange","listboxAvailable","missingValue","focusTag","useEventCallback","tagToFocus","validOptionIndex","index","direction","nextFocus","nextFocusDisabled","setHighlightedIndex","reason","prev","listboxNode","element","scrollBottom","elementBottom","changeHighlightedIndex","diff","nextIndex","maxIndex","newIndex","checkHighlightedOptionExists","isSameValue","value1","label1","label2","val","previousHighlightedOption","syncHighlightedIndex","valueItem","currentOption","itemIndex","optionItem","handleListboxRef","node","setRef","handleOpen","handleClose","handleValue","details","isTouch","selectNewValue","reasonProp","origin","matches","validTagIndex","handleFocusTag","nextTag","handleClear","handleKeyDown","other","disabled","handleFocus","handleBlur","handleInputChange","handleOptionMouseMove","handleOptionTouchStart","handleOptionClick","handleTagDelete","handlePopupIndicator","handleMouseDown","handleClick","handleInputMouseDown","dirty","groupedOptions","indexBy","warn","acc","group","_extends","_getOptionKey","selected"],"mappings":"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","x_google_ignoreList":[0,1]}