{"version":3,"file":"useAutocomplete.mjs","sources":["../../../../../../../../node_modules/@mui/material/useAutocomplete/useAutocomplete.js"],"sourcesContent":["'use client';\n\n/* eslint-disable no-constant-condition */\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\nfunction stripDiacritics(string) {\n  return string.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\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.startsWith(input) : candidate.includes(input);\n    });\n    return typeof limit === 'number' ? filteredOptions.slice(0, limit) : filteredOptions;\n  };\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 => listboxRef.current !== null && listboxRef.current.parentElement?.contains(document.activeElement);\nconst MULTIPLE_DEFAULT_VALUE = [];\nfunction 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 ? MULTIPLE_DEFAULT_VALUE : 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 => option.label ?? option,\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, reason) => {\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, reason);\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, 'reset');\n  }, [value, resetInputValue, focused, previousProps.value, freeSolo]);\n  const listboxAvailable = open && filteredOptions.length > 0 && !readOnly;\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 getPreviousHighlightedOptionIndex = () => {\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        return filteredOptions.findIndex(option => {\n          return getOptionLabel(option) === getOptionLabel(previousHighlightedOption);\n        });\n      }\n    }\n    return -1;\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, just update its index, otherwise continue execution\n    const previousHighlightedOptionIndex = getPreviousHighlightedOptionIndex();\n    if (previousHighlightedOptionIndex !== -1) {\n      highlightedIndexRef.current = previousHighlightedOptionIndex;\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 && value.findIndex(val => isOptionEqualToValue(currentOption, val)) !== -1) {\n        return;\n      }\n      const itemIndex = filteredOptions.findIndex(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 (for example 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 = newValue.findIndex(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, reason);\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'].includes(event.key)) {\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          // Remove the value on the left of the \"cursor\"\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          // Remove the value on the right of the \"cursor\"\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, 'blur');\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 = {}) => ({\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    }) => ({\n      key: index,\n      'data-tag-index': index,\n      tabIndex: -1,\n      ...(!readOnly && {\n        onDelete: handleTagDelete(index)\n      })\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      const selected = (multiple ? value : [value]).some(value2 => value2 != null && isOptionEqualToValue(option, value2));\n      const disabled = getOptionDisabled ? getOptionDisabled(option) : false;\n      return {\n        key: getOptionKey?.(option) ?? 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}\nexport default useAutocomplete;"],"names":["React.useRef","React.useState","React.useCallback","React.useEffect"],"mappings":"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","x_google_ignoreList":[0]}