{"version":3,"sources":["../src/use-autocomplete.tsx"],"sourcesContent":["import type { HTMLUIProps, PropGetter } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { ComboBoxProps, PopoverProps } from \"@yamada-ui/popover\"\nimport type { Union } from \"@yamada-ui/utils\"\nimport type {\n  ChangeEvent,\n  DOMAttributes,\n  FocusEvent,\n  KeyboardEvent,\n  MouseEvent,\n  ReactElement,\n} from \"react\"\nimport type { AutocompleteOptionProps } from \"./autocomplete-option\"\nimport type { AutocompleteOptionGroupProps } from \"./autocomplete-option-group\"\nimport { layoutStyleProperties } from \"@yamada-ui/core\"\nimport {\n  formControlProperties,\n  useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { useDisclosure } from \"@yamada-ui/use-disclosure\"\nimport { useOutsideClick } from \"@yamada-ui/use-outside-click\"\nimport {\n  dataAttr,\n  funcAll,\n  getEventRelatedTarget,\n  getValidChildren,\n  handlerAll,\n  isArray,\n  isContains,\n  isUndefined,\n  mergeRefs,\n  pickObject,\n  splitObject,\n  useSafeLayoutEffect,\n  useUnmountEffect,\n  useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\nimport {\n  useAutocompleteContext,\n  useAutocompleteDescendants,\n} from \"./autocomplete-context\"\nimport { AutocompleteOption } from \"./autocomplete-option\"\nimport { AutocompleteOptionGroup } from \"./autocomplete-option-group\"\n\ninterface AutocompleteItemWithValue extends AutocompleteOptionProps {\n  label?: string\n  value?: string\n}\n\ninterface AutocompleteItemWithItems\n  extends AutocompleteOptionGroupProps,\n    Pick<\n      AutocompleteOptionProps,\n      \"disabled\" | \"focusable\" | \"isDisabled\" | \"isFocusable\"\n    > {\n  items?: AutocompleteItemWithValue[]\n}\n\nexport type AutocompleteItem =\n  | AutocompleteItemWithItems\n  | AutocompleteItemWithValue\n\ntype MaybeValue = string | string[]\n\nconst kanaMap: { [key: string]: string } = {\n  \"｡\": \"。\",\n  \"｢\": \"「\",\n  \"｣\": \"」\",\n  \"､\": \"、\",\n  \"･\": \"・\",\n  ｦ: \"ヲ\",\n  ｦﾞ: \"ヺ\",\n  ｧ: \"ァ\",\n  ｨ: \"ィ\",\n  ｩ: \"ゥ\",\n  ｪ: \"ェ\",\n  ｫ: \"ォ\",\n  ｬ: \"ャ\",\n  ｭ: \"ュ\",\n  ｮ: \"ョ\",\n  ｯ: \"ッ\",\n  ｰ: \"ー\",\n  ｱ: \"ア\",\n  ｲ: \"イ\",\n  ｳ: \"ウ\",\n  ｳﾞ: \"ヴ\",\n  ｴ: \"エ\",\n  ｵ: \"オ\",\n  ｶ: \"カ\",\n  ｶﾞ: \"ガ\",\n  ｷ: \"キ\",\n  ｷﾞ: \"ギ\",\n  ｸ: \"ク\",\n  ｸﾞ: \"グ\",\n  ｹ: \"ケ\",\n  ｹﾞ: \"ゲ\",\n  ｺ: \"コ\",\n  ｺﾞ: \"ゴ\",\n  ｻ: \"サ\",\n  ｻﾞ: \"ザ\",\n  ｼ: \"シ\",\n  ｼﾞ: \"ジ\",\n  ｽ: \"ス\",\n  ｽﾞ: \"ズ\",\n  ｾ: \"セ\",\n  ｾﾞ: \"ゼ\",\n  ｿ: \"ソ\",\n  ｿﾞ: \"ゾ\",\n  ﾀ: \"タ\",\n  ﾀﾞ: \"ダ\",\n  ﾁ: \"チ\",\n  ﾁﾞ: \"ヂ\",\n  ﾂ: \"ツ\",\n  ﾂﾞ: \"ヅ\",\n  ﾃ: \"テ\",\n  ﾃﾞ: \"デ\",\n  ﾄ: \"ト\",\n  ﾄﾞ: \"ド\",\n  ﾅ: \"ナ\",\n  ﾆ: \"ニ\",\n  ﾇ: \"ヌ\",\n  ﾈ: \"ネ\",\n  ﾉ: \"ノ\",\n  ﾊ: \"ハ\",\n  ﾊﾞ: \"バ\",\n  ﾊﾟ: \"パ\",\n  ﾋ: \"ヒ\",\n  ﾋﾞ: \"ビ\",\n  ﾋﾟ: \"ピ\",\n  ﾌ: \"フ\",\n  ﾌﾞ: \"ブ\",\n  ﾌﾟ: \"プ\",\n  ﾍ: \"ヘ\",\n  ﾍﾞ: \"ベ\",\n  ﾍﾟ: \"ペ\",\n  ﾎ: \"ホ\",\n  ﾎﾞ: \"ボ\",\n  ﾎﾟ: \"ポ\",\n  ﾏ: \"マ\",\n  ﾐ: \"ミ\",\n  ﾑ: \"ム\",\n  ﾒ: \"メ\",\n  ﾓ: \"モ\",\n  ﾔ: \"ヤ\",\n  ﾕ: \"ユ\",\n  ﾖ: \"ヨ\",\n  ﾗ: \"ラ\",\n  ﾘ: \"リ\",\n  ﾙ: \"ル\",\n  ﾚ: \"レ\",\n  ﾛ: \"ロ\",\n  ﾜ: \"ワ\",\n  ﾜﾞ: \"ヷ\",\n  ﾝ: \"ン\",\n}\n\nconst defaultFormat = (value: string) => {\n  value = value.replace(/[！-～]/g, (v) =>\n    String.fromCharCode(v.charCodeAt(0) - 0xfee0),\n  )\n\n  const reg = new RegExp(\"(\" + Object.keys(kanaMap).join(\"|\") + \")\", \"g\")\n\n  value = value\n    .replace(reg, (v) => kanaMap[v]!)\n    .replace(/ﾞ/g, \"゛\")\n    .replace(/ﾟ/g, \"゜\")\n\n  value = value.toUpperCase()\n\n  return value\n}\n\nconst flattenItems = (\n  items: AutocompleteItem[],\n): AutocompleteItemWithValue[] => {\n  const filterItems = (\n    items: AutocompleteItem[] | AutocompleteItemWithValue[],\n  ): (AutocompleteItemWithValue | AutocompleteItemWithValue[])[] =>\n    items\n      .map((item) => {\n        const { disabled, focusable } = item\n        const trulyDisabled = !!disabled && !focusable\n\n        if (trulyDisabled) return\n\n        if (\"items\" in item) {\n          return filterItems(item.items ?? [])\n        } else {\n          return item as AutocompleteItemWithValue\n        }\n      })\n      .filter(Boolean) as (\n      | AutocompleteItemWithValue\n      | AutocompleteItemWithValue[]\n    )[]\n\n  return filterItems(items).flat(Infinity) as AutocompleteItemWithValue[]\n}\n\ninterface UseAutocompleteBaseProps<T extends MaybeValue = string>\n  extends ComboBoxProps,\n    FormControlOptions {\n  /**\n   * If `true`, enables the creation of autocomplete option.\n   *\n   * @default false\n   */\n  allowCreate?: boolean\n  /**\n   * If `true`, enables the free input.\n   */\n  allowFree?: boolean\n  /**\n   * If `true`, the list element will be closed when value is selected.\n   *\n   * @default true\n   */\n  closeOnSelect?: boolean\n  /**\n   * The initial value of the autocomplete.\n   */\n  defaultValue?: T\n  /**\n   * The message displayed when the search yields no hits.\n   *\n   * @default 'No results found'\n   */\n  emptyMessage?: string\n  /**\n   * Function to format text when search input.\n   */\n  format?: (value: string) => string\n  /**\n   * The position to be inserted when the autocomplete option is created.\n   *\n   * @default 'first'\n   */\n  insertPositionItem?: [string, \"first\" | \"last\"] | Union<\"first\" | \"last\">\n  /**\n   * If provided, generate options based on items.\n   */\n  items?: AutocompleteItem[]\n  /**\n   * The maximum selectable value.\n   */\n  maxSelectValues?: number\n  /**\n   * If `true`, the selected item(s) will be excluded from the list.\n   *\n   * @default false\n   */\n  omitSelectedValues?: boolean\n  /**\n   * The value of the autocomplete.\n   */\n  value?: T\n  /**\n   * Props for select option element.\n   */\n  optionProps?: Omit<AutocompleteOptionProps, \"children\" | \"value\">\n  /**\n   * The callback invoked when value state changes.\n   */\n  onChange?: (value: T) => void\n  /**\n   * The callback invoked when autocomplete option created.\n   */\n  onCreate?: (newItem: AutocompleteItem, newItems: AutocompleteItem[]) => void\n  /**\n   * The callback invoked when search input.\n   */\n  onSearch?: (ev: ChangeEvent<HTMLInputElement>) => void\n}\n\nexport interface UseAutocompleteProps<T extends MaybeValue = string>\n  extends Omit<\n      HTMLUIProps<\"input\">,\n      | \"disabled\"\n      | \"list\"\n      | \"readOnly\"\n      | \"required\"\n      | \"size\"\n      | keyof UseAutocompleteBaseProps\n    >,\n    UseAutocompleteBaseProps<T> {}\n\nexport const useAutocomplete = <T extends MaybeValue = string>(\n  props: UseAutocompleteProps<T>,\n) => {\n  const {\n    allowCreate = false,\n    allowFree = false,\n    animation,\n    boundary,\n    children,\n    closeDelay,\n    closeOnBlur = true,\n    closeOnEsc = true,\n    closeOnSelect = true,\n    defaultIsOpen,\n    defaultOpen,\n    defaultValue,\n    duration = 0.2,\n    emptyMessage = \"No results found\",\n    eventListeners,\n    flip,\n    format = defaultFormat,\n    gutter,\n    insertPositionItem = \"first\",\n    isLazy,\n    isOpen,\n    items,\n    lazy = isLazy,\n    lazyBehavior,\n    matchWidth = true,\n    maxSelectValues,\n    modifiers,\n    offset,\n    omitSelectedValues = false,\n    open: openProp,\n    openDelay,\n    placeholder,\n    placement = \"bottom-start\",\n    preventOverflow,\n    strategy,\n    value: valueProp,\n    optionProps,\n    onChange: onChangeProp,\n    onClose: onCloseProp,\n    onCreate: onCreateProp,\n    onKeyDown: onKeyDownProp,\n    onOpen: onOpenProp,\n    onSearch: onSearchProp,\n    ...rest\n  } = useFormControlProps(props)\n  const descendants = useAutocompleteDescendants()\n  const containerRef = useRef<HTMLDivElement>(null)\n  const inputRef = useRef<HTMLInputElement>(null)\n  const timeoutIds = useRef<Set<any>>(new Set([]))\n  const compositionRef = useRef<boolean>(false)\n  const prevValue = useRef<T | undefined>(undefined)\n  const [resolvedItems, setResolvedItems] = useState<\n    AutocompleteItem[] | undefined\n  >(items ? JSON.parse(JSON.stringify(items)) : undefined)\n  const [value, setValue] = useControllableState({\n    defaultValue,\n    value: valueProp,\n    onChange: onChangeProp,\n  })\n  const [label, setLabel] = useState<T | undefined>(undefined)\n  const [inputValue, setInputValue] = useState<string>(\"\")\n  const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n  const [allSelected, setAllSelected] = useState<boolean>(false)\n  const [hit, setHit] = useState<boolean>(true)\n  const {\n    open,\n    onClose,\n    onOpen: onInternalOpen,\n  } = useDisclosure({\n    defaultIsOpen,\n    defaultOpen,\n    isOpen,\n    open: openProp,\n    onClose: onCloseProp,\n    onOpen: onOpenProp,\n  })\n  const {\n    \"aria-readonly\": _ariaReadonly,\n    onFocus: onFocusProp,\n    ...formControlProps\n  } = pickObject(rest, formControlProperties)\n  const [containerProps, inputProps] = splitObject(rest, layoutStyleProperties)\n\n  const focused = focusedIndex > -1\n  const create = focusedIndex === -2 && allowCreate\n  const multi = isArray(value)\n  const emptyValue = !multi ? !value : !value.length\n\n  const [firstInsertPositionItem, secondInsertPositionItem] = useMemo(() => {\n    if (isArray(insertPositionItem)) {\n      return insertPositionItem\n    } else {\n      return [insertPositionItem, \"first\"]\n    }\n  }, [insertPositionItem])\n\n  if (allowCreate && !isUndefined(children)) {\n    console.warn(\n      `${!multi ? \"Autocomplete\" : \"MultiAutocomplete\"}: ${\n        !multi ? \"Autocomplete\" : \"MultiAutocomplete\"\n      } internally prefers 'children'. If 'allowCreate' is true, it will not be reflected correctly. If want to reflect, please set 'items' in props.`,\n    )\n  }\n\n  const selectedValues = descendants.enabledValues(\n    ({ node }) => multi && value.includes(node.dataset.value ?? \"\"),\n  )\n  const selectedIndexes = selectedValues.map(({ index }) => index)\n  const enabledValues = descendants.enabledValues(\n    ({ index, node }) =>\n      \"target\" in node.dataset && !selectedIndexes.includes(index),\n  )\n  const activedescendantId = descendants.value(focusedIndex)?.node.id\n  const validChildren = getValidChildren(children)\n\n  const computedChildren = useMemo(\n    () =>\n      resolvedItems\n        ?.map((item, index) => {\n          if (\"value\" in item) {\n            const { label, value, ...props } = item\n\n            return (\n              <AutocompleteOption key={index} value={value} {...props}>\n                {label}\n              </AutocompleteOption>\n            )\n          } else if (\"items\" in item) {\n            const { items = [], label, ...props } = item\n\n            return (\n              <AutocompleteOptionGroup\n                key={index}\n                label={label as string}\n                {...props}\n              >\n                {items.map(({ label, value, ...props }, index) => (\n                  <AutocompleteOption key={index} value={value} {...props}>\n                    {label}\n                  </AutocompleteOption>\n                ))}\n              </AutocompleteOptionGroup>\n            )\n          }\n        })\n        .filter(Boolean) as ReactElement[] | undefined,\n    [resolvedItems],\n  )\n\n  const empty = !validChildren.length && !computedChildren?.length\n\n  const onOpen = useCallback(() => {\n    if (formControlProps.disabled || formControlProps.readOnly) return\n\n    if (!allowCreate && (empty || allSelected)) return\n\n    onInternalOpen()\n\n    if (inputRef.current) inputRef.current.focus()\n  }, [allowCreate, formControlProps, allSelected, empty, onInternalOpen])\n\n  const onFocusFirst = useCallback(() => {\n    const id = setTimeout(() => {\n      if (empty || allSelected) return\n\n      const first = descendants.enabledFirstValue(\n        ({ node }) => \"target\" in node.dataset,\n      )\n\n      if (!first) return\n\n      if (!multi || !omitSelectedValues) {\n        setFocusedIndex(first.index)\n      } else {\n        if (selectedIndexes.includes(first.index)) {\n          const enabledFirst = enabledValues[0]\n\n          setFocusedIndex(enabledFirst?.index ?? -1)\n        } else {\n          setFocusedIndex(first.index)\n        }\n      }\n    })\n\n    timeoutIds.current.add(id)\n  }, [\n    descendants,\n    enabledValues,\n    allSelected,\n    empty,\n    multi,\n    omitSelectedValues,\n    selectedIndexes,\n  ])\n\n  const onFocusLast = useCallback(() => {\n    const id = setTimeout(() => {\n      if (empty || allSelected) return\n\n      const last = descendants.enabledLastValue(\n        ({ node }) => \"target\" in node.dataset,\n      )\n\n      if (!last) return\n\n      if (!multi || !omitSelectedValues) {\n        setFocusedIndex(last.index)\n      } else {\n        if (selectedIndexes.includes(last.index)) {\n          const enabledLast = enabledValues.reverse()[0]\n\n          setFocusedIndex(enabledLast?.index ?? -1)\n        } else {\n          setFocusedIndex(last.index)\n        }\n      }\n    })\n\n    timeoutIds.current.add(id)\n  }, [\n    descendants,\n    enabledValues,\n    allSelected,\n    empty,\n    multi,\n    omitSelectedValues,\n    selectedIndexes,\n  ])\n\n  const onFocusSelected = useCallback(() => {\n    const id = setTimeout(() => {\n      const values = descendants.enabledValues()\n\n      const selected = values.find(({ node }) =>\n        !multi\n          ? node.dataset.value === value\n          : value.includes(node.dataset.value ?? \"\"),\n      )\n\n      if (selected) setFocusedIndex(selected.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, multi, value])\n\n  const onFocusNext = useCallback(\n    (index: number = focusedIndex) => {\n      const id = setTimeout(() => {\n        const next = descendants.enabledNextValue(\n          index,\n          ({ node }) => \"target\" in node.dataset,\n        )\n\n        if (!next) return\n\n        if (!multi || !omitSelectedValues) {\n          setFocusedIndex(next.index)\n        } else {\n          if (selectedIndexes.includes(next.index)) {\n            const enabledNext =\n              enabledValues.find(({ index }) => next.index < index) ??\n              enabledValues[0]\n\n            setFocusedIndex(enabledNext?.index ?? -1)\n          } else {\n            setFocusedIndex(next.index)\n          }\n        }\n      })\n\n      timeoutIds.current.add(id)\n    },\n    [\n      descendants,\n      enabledValues,\n      focusedIndex,\n      multi,\n      omitSelectedValues,\n      selectedIndexes,\n    ],\n  )\n\n  const onFocusPrev = useCallback(\n    (index: number = focusedIndex) => {\n      const id = setTimeout(() => {\n        const prev = descendants.enabledPrevValue(\n          index,\n          ({ node }) => \"target\" in node.dataset,\n        )\n\n        if (!prev) return\n\n        if (!multi || !omitSelectedValues) {\n          setFocusedIndex(prev.index)\n        } else {\n          if (selectedIndexes.includes(prev.index)) {\n            const enabledPrev =\n              enabledValues.reverse().find(({ index }) => index < prev.index) ??\n              enabledValues[0]\n\n            setFocusedIndex(enabledPrev?.index ?? -1)\n          } else {\n            setFocusedIndex(prev.index)\n          }\n        }\n      })\n\n      timeoutIds.current.add(id)\n    },\n    [\n      descendants,\n      enabledValues,\n      focusedIndex,\n      multi,\n      omitSelectedValues,\n      selectedIndexes,\n    ],\n  )\n\n  const onFocusFirstOrSelected =\n    emptyValue || omitSelectedValues ? onFocusFirst : onFocusSelected\n  const onFocusLastOrSelected =\n    emptyValue || omitSelectedValues ? onFocusLast : onFocusSelected\n\n  const pickOptions = useCallback(\n    (value: string) => {\n      const values = descendants.values()\n\n      let hit = false\n      let focused = false\n\n      values.forEach(({ index, node }) => {\n        if (format(node.textContent ?? \"\").includes(value)) {\n          hit = true\n\n          const disabled = \"disabled\" in node.dataset\n\n          node.dataset.target = \"\"\n\n          if (!focused && !disabled) {\n            focused = true\n\n            setFocusedIndex(index)\n          }\n        } else {\n          delete node.dataset.target\n        }\n      })\n\n      setHit(hit)\n    },\n    [descendants, format],\n  )\n\n  const rebirthOptions = useCallback(\n    (runFocus = true) => {\n      const values = descendants.values()\n\n      values.forEach(({ node }) => {\n        node.dataset.target = \"\"\n      })\n\n      if (runFocus) onFocusFirst()\n\n      setHit(true)\n    },\n    [descendants, onFocusFirst],\n  )\n\n  const onChangeLabel = useCallback(\n    (newValue: MaybeValue) => {\n      const values = descendants.values()\n\n      if (!values.length) return\n\n      const resolvedValues = isArray(newValue) ? newValue : [newValue]\n\n      const selectedLabel = resolvedValues\n        .map((value) => {\n          const { node } =\n            values.find(({ node }) => node.dataset.value === value) ?? {}\n\n          if (node) {\n            const { textContent } =\n              Array.from(node.children).find(\n                (child) => child.getAttribute(\"data-label\") !== null,\n              ) ?? {}\n\n            return textContent\n          } else {\n            return allowFree ? value : undefined\n          }\n        })\n        .filter((label) => !isUndefined(label))\n\n      setLabel((!multi ? selectedLabel[0] : selectedLabel) as T)\n    },\n    [allowFree, descendants, multi],\n  )\n\n  const onChange = useCallback(\n    (newValue: string, runRebirth = true) => {\n      setValue((prev) => {\n        let next: T\n\n        if (!isArray(prev)) {\n          next = newValue as T\n        } else {\n          const selected = prev.includes(newValue)\n\n          if (!selected) {\n            next = [...prev, newValue] as T\n          } else {\n            next = prev.filter((value) => value !== newValue) as T\n          }\n        }\n\n        prevValue.current = next\n\n        return next\n      })\n\n      setInputValue(\"\")\n\n      if (multi && runRebirth) rebirthOptions(false)\n    },\n    [multi, rebirthOptions, setValue],\n  )\n\n  const onSelect = useCallback(() => {\n    let enabledValue = descendants.value(focusedIndex)\n\n    if (\"disabled\" in (enabledValue?.node.dataset ?? {}))\n      enabledValue = undefined\n\n    if (!enabledValue) return\n\n    const value = enabledValue.node.dataset.value ?? \"\"\n\n    onChange(value)\n\n    if (closeOnSelect) onClose()\n\n    if (omitSelectedValues) onFocusNext()\n  }, [\n    closeOnSelect,\n    descendants,\n    focusedIndex,\n    omitSelectedValues,\n    onChange,\n    onClose,\n    onFocusNext,\n  ])\n\n  const onSearch = useCallback(\n    (ev: ChangeEvent<HTMLInputElement>) => {\n      if (!open) onOpen()\n\n      onSearchProp?.(ev)\n\n      const value = ev.target.value\n      const computedValue = format(value)\n\n      if (computedValue) {\n        pickOptions(computedValue)\n      } else {\n        rebirthOptions()\n      }\n\n      setInputValue(value)\n    },\n    [open, onOpen, format, onSearchProp, pickOptions, rebirthOptions],\n  )\n\n  const onCompositionStart = useCallback(() => {\n    compositionRef.current = true\n  }, [])\n\n  const onCompositionEnd = useCallback(() => {\n    compositionRef.current = false\n  }, [])\n\n  const onCreate = useCallback(() => {\n    const newItem: AutocompleteItem = { label: inputValue, value: inputValue }\n\n    let newItems: AutocompleteItem[] = []\n\n    if (resolvedItems) newItems = [...resolvedItems]\n\n    if (firstInsertPositionItem === \"first\") {\n      newItems = [newItem, ...newItems]\n    } else if (firstInsertPositionItem === \"last\") {\n      newItems = [...newItems, newItem]\n    } else {\n      const i = newItems.findIndex(\n        ({ label }) => label === firstInsertPositionItem,\n      )\n\n      const targetItem = newItems[i]\n\n      if (i !== -1 && targetItem && \"items\" in targetItem) {\n        if (secondInsertPositionItem === \"first\") {\n          targetItem.items = [newItem, ...(targetItem.items ?? [])]\n        } else {\n          targetItem.items = [...(targetItem.items ?? []), newItem]\n        }\n\n        newItems[i] = targetItem\n      } else {\n        console.warn(\n          `${\n            !multi ? \"Autocomplete\" : \"MultiAutocomplete\"\n          }: '${firstInsertPositionItem}' specified in insertPositionItem does not exist in the option group.`,\n        )\n      }\n    }\n\n    setResolvedItems(newItems)\n    onChange(inputValue)\n    rebirthOptions(false)\n\n    const index = flattenItems(newItems).findIndex(\n      ({ value }) => value === inputValue,\n    )\n\n    setFocusedIndex(index)\n\n    onCreateProp?.(newItem, newItems)\n  }, [\n    inputValue,\n    resolvedItems,\n    firstInsertPositionItem,\n    onChange,\n    rebirthOptions,\n    onCreateProp,\n    secondInsertPositionItem,\n    multi,\n  ])\n\n  const onClick = useCallback(() => {\n    if (open) {\n      if (inputRef.current) inputRef.current.focus()\n    } else {\n      onOpen()\n\n      onFocusFirstOrSelected()\n    }\n  }, [open, onFocusFirstOrSelected, onOpen])\n\n  const onFocus = useCallback(() => {\n    if (open) return\n\n    onOpen()\n\n    onFocusFirstOrSelected()\n  }, [open, onFocusFirstOrSelected, onOpen])\n\n  const onBlur = useCallback(\n    (ev: FocusEvent<HTMLDivElement>) => {\n      const relatedTarget = getEventRelatedTarget(ev)\n\n      if (isContains(containerRef.current, relatedTarget)) return\n\n      if (!closeOnBlur && hit) return\n\n      if (allowFree && !!inputValue) onChange(inputValue, false)\n\n      setInputValue(\"\")\n\n      if (open) onClose()\n    },\n    [closeOnBlur, hit, open, inputValue, allowFree, onClose, onChange],\n  )\n\n  const onDelete = useCallback(() => {\n    if (!multi) {\n      onChange(\"\")\n    } else {\n      onChange(value[value.length - 1]!)\n    }\n\n    if (!open) onFocus()\n  }, [multi, open, onChange, onFocus, value])\n\n  const onClear = useCallback(\n    (ev: MouseEvent<HTMLDivElement>) => {\n      ev.stopPropagation()\n\n      prevValue.current = [] as unknown as T\n      setValue([] as unknown as T)\n      setLabel(undefined)\n      setInputValue(\"\")\n      rebirthOptions()\n\n      if (open && inputRef.current) inputRef.current.focus()\n    },\n    [open, setLabel, setInputValue, setValue, rebirthOptions],\n  )\n\n  const onKeyDown = useCallback(\n    (ev: KeyboardEvent<HTMLDivElement>) => {\n      if (ev.key === \" \") ev.key = ev.code\n\n      if (formControlProps.disabled || formControlProps.readOnly) return\n      if (compositionRef.current) return\n\n      const enabledDelete = label === inputValue || !inputValue.length\n\n      const actions: { [key: string]: Function | undefined } = {\n        ArrowDown: focused\n          ? () => onFocusNext()\n          : !open\n            ? funcAll(onOpen, onFocusFirstOrSelected)\n            : undefined,\n        ArrowUp: focused\n          ? () => onFocusPrev()\n          : !open\n            ? funcAll(onOpen, onFocusLastOrSelected)\n            : undefined,\n        Backspace: !emptyValue && enabledDelete ? onDelete : undefined,\n        End: open ? onFocusLast : undefined,\n        Enter: create\n          ? onCreate\n          : focused\n            ? onSelect\n            : !open\n              ? funcAll(onOpen, onFocusFirstOrSelected)\n              : allowFree && multi\n                ? () => {\n                    if (inputValue) onChange(inputValue)\n\n                    setFocusedIndex(0)\n                  }\n                : undefined,\n        Escape: closeOnEsc ? onClose : undefined,\n        Home: open ? onFocusFirst : undefined,\n        Space: create\n          ? onCreate\n          : focused\n            ? onSelect\n            : !open\n              ? funcAll(onOpen, onFocusFirstOrSelected)\n              : undefined,\n      }\n\n      const action = actions[ev.key]\n\n      if (!action) return\n\n      ev.preventDefault()\n      ev.stopPropagation()\n\n      action(ev)\n    },\n    [\n      allowFree,\n      formControlProps,\n      label,\n      inputValue,\n      onOpen,\n      focused,\n      multi,\n      onFocusFirstOrSelected,\n      onFocusNext,\n      onFocusLastOrSelected,\n      onFocusPrev,\n      create,\n      onCreate,\n      onSelect,\n      open,\n      onFocusFirst,\n      onFocusLast,\n      closeOnEsc,\n      onClose,\n      emptyValue,\n      onDelete,\n      onChange,\n    ],\n  )\n\n  useEffect(() => {\n    if (!multi) return\n\n    if (!omitSelectedValues && isUndefined(maxSelectValues)) return\n\n    const all = value.length > 0 && value.length === descendants.count()\n    const max = value.length === maxSelectValues\n\n    if (all || max) {\n      onClose()\n      setAllSelected(true)\n    } else {\n      setAllSelected(false)\n    }\n  }, [omitSelectedValues, value, descendants, multi, onClose, maxSelectValues])\n\n  useSafeLayoutEffect(() => {\n    onChangeLabel(value)\n  }, [value])\n\n  useUpdateEffect(() => {\n    if (open || allowFree) return\n\n    setFocusedIndex(-1)\n    setInputValue(\"\")\n  }, [open])\n\n  useUpdateEffect(() => {\n    if (!hit) setFocusedIndex(-2)\n  }, [hit])\n\n  useUpdateEffect(() => {\n    setResolvedItems(items ? JSON.parse(JSON.stringify(items)) : undefined)\n  }, [items])\n\n  useUnmountEffect(() => {\n    timeoutIds.current.forEach((id) => clearTimeout(id))\n    timeoutIds.current.clear()\n  })\n\n  useOutsideClick({\n    ref: containerRef,\n    enabled: open && (closeOnBlur || !hit),\n    handler: onClose,\n  })\n\n  const getPopoverProps = useCallback(\n    (props?: PopoverProps): PopoverProps => ({\n      animation,\n      boundary,\n      closeDelay,\n      closeOnBlur,\n      duration,\n      eventListeners,\n      flip,\n      gutter,\n      lazy,\n      lazyBehavior,\n      matchWidth,\n      modifiers,\n      offset,\n      openDelay,\n      placement,\n      preventOverflow,\n      strategy,\n      ...props,\n      closeOnButton: false,\n      open,\n      trigger: \"never\",\n      onClose,\n      onOpen,\n    }),\n    [\n      closeOnBlur,\n      openDelay,\n      closeDelay,\n      lazy,\n      lazyBehavior,\n      animation,\n      duration,\n      offset,\n      gutter,\n      preventOverflow,\n      flip,\n      matchWidth,\n      boundary,\n      eventListeners,\n      strategy,\n      placement,\n      modifiers,\n      open,\n      onOpen,\n      onClose,\n    ],\n  )\n\n  const getContainerProps: PropGetter = useCallback(\n    (props = {}, ref = null) => ({\n      ref: mergeRefs(containerRef, ref),\n      ...containerProps,\n      ...props,\n      ...formControlProps,\n      onBlur: handlerAll(props.onBlur, rest.onBlur, onBlur),\n      onClick: handlerAll(props.onClick, rest.onClick, onClick),\n    }),\n\n    [containerProps, formControlProps, onBlur, onClick, rest],\n  )\n\n  const getFieldProps: PropGetter = useCallback(\n    (props = {}, ref = null) => ({\n      ref,\n      \"aria-activedescendant\": activedescendantId,\n      \"aria-autocomplete\": \"list\",\n      \"aria-haspopup\": \"listbox\",\n      role: \"combobox\",\n      tabIndex: -1,\n      ...props,\n      ...formControlProps,\n      \"data-active\": dataAttr(open),\n      placeholder,\n      onFocus: handlerAll(props.onFocus, onFocusProp, onFocus),\n      onKeyDown: handlerAll(props.onKeyDown, onKeyDownProp, onKeyDown),\n    }),\n    [\n      activedescendantId,\n      formControlProps,\n      placeholder,\n      open,\n      onFocusProp,\n      onFocus,\n      onKeyDownProp,\n      onKeyDown,\n    ],\n  )\n\n  return {\n    allowCreate,\n    allowFree,\n    allSelected,\n    children: children ?? computedChildren,\n    closeOnSelect,\n    descendants,\n    empty,\n    emptyMessage,\n    focusedIndex,\n    hit,\n    inputRef,\n    inputValue,\n    label,\n    omitSelectedValues,\n    open,\n    pickOptions,\n    rebirthOptions,\n    setFocusedIndex,\n    value,\n    formControlProps,\n    getContainerProps,\n    getFieldProps,\n    getPopoverProps,\n    inputProps: inputProps as DOMAttributes<HTMLInputElement>,\n    optionProps,\n    onChange,\n    onClear,\n    onClose,\n    onCompositionEnd,\n    onCompositionStart,\n    onCreate,\n    onFocusFirst,\n    onFocusLast,\n    onFocusNext,\n    onFocusPrev,\n    onFocusSelected,\n    onOpen,\n    onSearch,\n  }\n}\n\nexport type UseAutocompleteReturn = ReturnType<typeof useAutocomplete>\n\nexport const useAutocompleteInput = () => {\n  const {\n    allSelected,\n    inputRef,\n    formControlProps,\n    inputProps,\n    onCompositionEnd,\n    onCompositionStart,\n    onSearch,\n  } = useAutocompleteContext()\n\n  useUpdateEffect(() => {\n    if (allSelected && inputRef.current) inputRef.current.blur()\n  }, [allSelected])\n\n  const getInputProps: PropGetter<\"input\"> = useCallback(\n    (props = {}, ref = null) => {\n      return {\n        ref: mergeRefs(inputRef, ref),\n        ...formControlProps,\n        autoCapitalize: \"none\",\n        autoComplete: \"off\",\n        spellCheck: \"false\",\n        tabIndex: allSelected ? -1 : 0,\n        ...inputProps,\n        ...props,\n        cursor: formControlProps.readOnly ? \"default\" : \"text\",\n        pointerEvents:\n          formControlProps.disabled || allSelected ? \"none\" : \"auto\",\n        onChange: handlerAll(props.onChange, onSearch),\n        onCompositionEnd: handlerAll(\n          props.onCompositionEnd,\n          inputProps.onCompositionEnd,\n          onCompositionEnd,\n        ),\n        onCompositionStart: handlerAll(\n          props.onCompositionStart,\n          inputProps.onCompositionStart,\n          onCompositionStart,\n        ),\n      }\n    },\n    [\n      inputProps,\n      inputRef,\n      formControlProps,\n      allSelected,\n      onSearch,\n      onCompositionStart,\n      onCompositionEnd,\n    ],\n  )\n\n  return {\n    getInputProps,\n  }\n}\n\nexport type UseAutocompleteInputReturn = ReturnType<typeof useAutocompleteInput>\n"],"mappings":"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","names":["items","_a","label","value","props","index","hit","focused","node"]}