"use client";
import { useCallback, useMemo, useRef } from "react";
import { useEditableCombobox } from "../form/useEditableCombobox.js";
import {
type EditableHTMLElement,
triggerManualChangeEvent,
} from "../form/utils.js";
import { getIcon } from "../icon/config.js";
import { useUserInteractionMode } from "../interaction/UserInteractionModeProvider.js";
import { getTransitionCallbacks } from "../transition/getTransitionCallbacks.js";
import { useEnsuredState } from "../useEnsuredState.js";
import {
defaultAutocompleteExtractor,
defaultAutocompleteFilter,
defaultAutocompleteGetOptionProps,
noopAutocompleteFilter,
} from "./defaults.js";
import {
type AutocompleteImplementation,
type AutocompleteMultiSelectImplementation,
type AutocompleteMultiSelectOptions,
type AutocompleteOption,
type AutocompleteOptions,
type AutocompleteSingleSelectImplementation,
type AutocompleteSingleSelectOptions,
} from "./types.js";
import {
enforceSelectedValue,
getDefaultQuery,
getDefaultValue,
isMultipleValues,
} from "./utils.js";
const noop = (): void => {
// do nothing
};
/**
* This is the single select autocomplete implementation.
*
* @see {@link https://react-md.dev/components/autocomplete | Autocomplete Demos}
* @since 6.0.0
*/
export function useAutocomplete<
Option extends AutocompleteOption,
ComboboxEl extends EditableHTMLElement = HTMLInputElement,
PopupEl extends HTMLElement = HTMLElement,
>(
options: AutocompleteSingleSelectOptions