---
title: AutoComplete
sidebar_label: AutoComplete
---

<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->

import { StoryWithControls } from '../../../src/components/StorybookWrapper';

# AutoComplete

AutoComplete component for search functionality.

## Live Example

<StoryWithControls
  component="AutoComplete"
  props={{
  placeholder: "Type to search...",
  options: [
    {
      value: "Dashboard",
      label: "Dashboard"
    },
    {
      value: "Chart",
      label: "Chart"
    },
    {
      value: "Dataset",
      label: "Dataset"
    },
    {
      value: "Database",
      label: "Database"
    },
    {
      value: "Query",
      label: "Query"
    }
  ],
  style: {
    width: 300
  },
  filterOption: true
}}
  controls={[
  {
    name: "placeholder",
    label: "Placeholder",
    type: "text",
    description: "Placeholder text for AutoComplete"
  },
  {
    name: "style",
    label: "Style",
    type: "object",
    description: "Custom styles for AutoComplete"
  },
  {
    name: "value",
    label: "Value",
    type: "text",
    description: "Selected option"
  },
  {
    name: "disabled",
    label: "Disabled",
    type: "boolean",
    description: "Disable the AutoComplete"
  },
  {
    name: "popupMatchSelectWidth",
    label: "Popup Match Select Width",
    type: "number",
    description: "Width of the dropdown"
  },
  {
    name: "allowClear",
    label: "Allow Clear",
    type: "boolean",
    description: "Show clear button"
  },
  {
    name: "autoFocus",
    label: "Auto Focus",
    type: "boolean",
    description: "If get focus when component mounted"
  },
  {
    name: "backfill",
    label: "Backfill",
    type: "boolean",
    description: "If backfill selected item the input when using keyboard"
  },
  {
    name: "popupClassName",
    label: "Popup Class Name",
    type: "text",
    description: "The className of dropdown menu"
  },
  {
    name: "filterOption",
    label: "Filter Option",
    type: "boolean",
    description: "Enable filtering of options based on input"
  },
  {
    name: "notFoundContent",
    label: "Not Found Content",
    type: "text",
    description: "Specify content to show when no result matches."
  },
  {
    name: "open",
    label: "Open",
    type: "boolean",
    description: "Controlled open state of dropdown"
  },
  {
    name: "status",
    label: "Status",
    type: "select",
    options: [
      "error",
      "warning"
    ],
    description: "Set validation status"
  },
  {
    name: "size",
    label: "Size",
    type: "select",
    options: [
      "large",
      "middle",
      "small"
    ],
    description: "The size of the input box"
  },
  {
    name: "variant",
    label: "Variant",
    type: "select",
    options: [
      "outlined",
      "borderless",
      "filled"
    ],
    description: "Variants of input"
  },
  {
    name: "virtual",
    label: "Virtual",
    type: "boolean",
    description: "Disable virtual scroll when set to false"
  }
]}
/>

## Try It

Edit the code below to experiment with the component:

```tsx live
function Demo() {
  return (
    <AutoComplete
      placeholder="Type to search..."
      options={[{"value":"Dashboard","label":"Dashboard"},{"value":"Chart","label":"Chart"},{"value":"Dataset","label":"Dataset"},{"value":"Database","label":"Database"},{"value":"Query","label":"Query"}]}
      style={{"width":300}}
      filterOption
    />
  );
}
```

## Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `placeholder` | `string` | `"Type to search..."` | Placeholder text for AutoComplete |
| `options` | `any` | `[{"value":"Dashboard","label":"Dashboard"},{"value":"Chart","label":"Chart"},{"value":"Dataset","label":"Dataset"},{"value":"Database","label":"Database"},{"value":"Query","label":"Query"}]` | The dropdown options |
| `style` | `any` | `{"width":300}` | Custom styles for AutoComplete |
| `filterOption` | `boolean` | `true` | Enable filtering of options based on input |

## Import

```tsx
import { AutoComplete } from '@superset/components';
```

---

:::tip[Improve this page]
This documentation is auto-generated from the component's Storybook story.
Help improve it by [editing the story file](https://github.com/apache/superset/edit/master/superset-frontend/packages/superset-ui-core/src/components/AutoComplete/AutoComplete.stories.tsx).
:::
