"use client";
import { type ReactElement } from "react";
import { Listbox } from "../form/Listbox.js";
import { TextField } from "../form/TextField.js";
import { ListSubheader } from "../list/ListSubheader.js";
import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
import { useEnsuredId } from "../useEnsuredId.js";
import { useEnsuredRef } from "../useEnsuredRef.js";
import { AutocompleteChip } from "./AutocompleteChip.js";
import { AutocompleteCircularProgress } from "./AutocompleteCircularProgress.js";
import { AutocompleteClearButton } from "./AutocompleteClearButton.js";
import { AutocompleteDropdownButton } from "./AutocompleteDropdownButton.js";
import { AutocompleteListboxChildren } from "./AutocompleteListboxChildren.js";
import { autocomplete, autocompleteRightAddon } from "./autocompleteStyles.js";
import {
defaultAutocompleteFilter,
noopAutocompleteFilter,
} from "./defaults.js";
import {
type AutocompleteMultiSelectProps,
type AutocompleteOption,
type AutocompleteProps,
type AutocompleteSingleSelectProps,
} from "./types.js";
import { useAutocomplete } from "./useAutocomplete.js";
const noop = (): undefined => undefined;
/**
* An `Autocomplete` is a component that allows for real-time suggestions from
* a pre-determined list as the user types by filtering data based on the
* current value. It can also be used to interact with an API that handles the
* sorting, filtering, matching, etc as well.
*
* An `Autocomplete` always requires the following props:
*
* - `options` - a list of available options that can be a list of strings,
* a list of objects with a `{ label: string }`, or any list of objects
* - if the list of objects do not have a `label`, the
* {@link AutocompleteProps.getOptionLabel} **must** be provided to allow
* filtering
* - `label` or `aria-label` to describe the textbox for accessibility
* - `listboxLabel` or `listboxLabelledBy` for an accessible label describing the options
*
* @example Simple Example
* ```tsx
* "use client";
*
* import { Autocomplete } from "@react-md/core/autocomplete/Autocomplete";
* import { type ReactElement } from "react";
*
* export default function SimpleExample(): ReactElement {
* return (
*
* );
* }
* ```
*
* @see {@link https://react-md.dev/components/autocomplete | Autocomplete Demos}
* @since 6.0.0
*/
export function Autocomplete