Autocomplete
WARNING
Experimental
Introduction
The Autocomplete component is a flexible and customizable dropdown select component built using Vue 3 and the Headless UI library. It supports both single and multiple selections, provides slot customization, and offers various props for enhanced functionality.
Storybook
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| modelValue | T | T[] | undefined | - | The value bound to the component. |
| items | T[] | - | An array of items to be displayed in the dropdown. |
| multiple | boolean | false | Allows multiple selections if set to true. |
| itemText | string | 'text' | The key for the text to be displayed from the item. |
| itemValue | string | 'value' | The key for the value of the item. |
| placeholder | string | 'Search...' | Placeholder text for the input. |
| label | string | - | Label for the autocomplete. |
| transition | string | 'dropdown' | Transition animation name. |
| error | boolean | false | If set to true, indicates there's an error. |
| disabled | boolean | false | If set to true, the component will be disabled. |
| clearable | boolean | false | If set to true, adds the option to clear the selected value. |
| emptyText | string | 'No results.' | Text displayed when there are no results to show. |
| searchBy | string | - | Key by which the list will be filtered. If not provided, will fall back to itemText or itemValue. |
| displayValue | (item: any) => string | - | A function to custom format the displayed value. |
| selectionItemProps | InstanceType<typeof VBadge>['$props'] | - | Props for the selected item badge. |
| readonly | boolean | false | If set to true, the component will be in readonly mode. |
| shadow | boolean | false | If set to true, a shadow will be applied to the component. |
| hint | string | - | A hint message to be displayed below the component. |
| errorMessage | string | - | Error message to be displayed when error is true. |
| hideError | boolean | false | If set to true, error message will be hidden even if error is true. |
Slots
| Slot Name | Props Provided | Description |
|---|---|---|
| default | {} | Default slot for additional content. |
| hint | {} | Slot for custom hint message rendering. |
| selection | { selected, multiple, itemValue, itemText, selectionItemProps } | Slot for custom selected items rendering. |
| selection-item | { item, idx, itemValue, itemText, remove } | Slot for custom rendering of each selected item. |
| item | { item, active, selected, itemValue, itemText } | Slot for custom rendering of each dropdown item. |
Events
| Event Name | Payload | Description |
|---|---|---|
update:modelValue | ModelValue | Emits the current selected value(s). |
clear | - | Emits when the selected value(s) is cleared. |
Usage Example
vue
<script setup lang="ts">
import {ref} from 'vue';
import {Autocomplete} from '@morpheme/autocomplete';
const selectedValue = ref();
const items = [
{text: 'Option 1', value: 1},
{text: 'Option 2', value: 2},
];
</script>
<template>
<Autocomplete
:items="items"
v-model="selectedValue"
label="Choose an option"
/>
</template><script setup lang="ts">
import {ref} from 'vue';
import {Autocomplete} from '@morpheme/autocomplete';
const selectedValue = ref();
const items = [
{text: 'Option 1', value: 1},
{text: 'Option 2', value: 2},
];
</script>
<template>
<Autocomplete
:items="items"
v-model="selectedValue"
label="Choose an option"
/>
</template>
Morpheme