"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