---
name: autocomplete
kind: component
lang: ts
domain: ui
version: "1.0.0"
purity: impure
signature: "Autocomplete(props: AutocompleteProps): JSX.Element"
description: "Input con sugerencias de autocompletado. Permite valores libres a diferencia de Select. Wrapper sobre Mantine Autocomplete."
tags: [autocomplete, input, form, suggestions, component, ui, interactive, mantine]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["@mantine/core"]
output: "Componente Autocomplete que renderiza input con dropdown de sugerencias filtradas"
props:
- name: data
type: "string[] | { value: string; label?: string; group?: string }[]"
required: true
description: "Lista de opciones a mostrar en el dropdown"
- name: value
type: "string"
required: false
description: "Valor controlado del input"
- name: onChange
type: "(value: string) => void"
required: false
description: "Callback al cambiar el valor del input"
- name: label
type: "string"
required: false
description: "Etiqueta visible encima del input"
- name: placeholder
type: "string"
required: false
description: "Texto placeholder cuando el input está vacío"
- name: clearable
type: "boolean"
required: false
description: "Muestra botón para limpiar el valor"
- name: loading
type: "boolean"
required: false
description: "Muestra spinner de carga en el input"
- name: disabled
type: "boolean"
required: false
description: "Deshabilita el input"
- name: limit
type: "number"
required: false
description: "Número máximo de sugerencias a mostrar en el dropdown"
- name: size
type: "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
required: false
description: "Tamaño visual del input"
emits: [onChange]
has_state: true
framework: react
tested: false
tests: []
test_file_path: ""
file_path: "frontend/functions/ui/autocomplete.tsx"
---
## Ejemplo
```tsx
import { Autocomplete } from '@fn_library/autocomplete'
// Básico — lista de strings
function BasicAutocomplete() {
return (
)
}
// Con grupos
function GroupedAutocomplete() {
return (
)
}
// Con loading y clearable (búsqueda asíncrona)
function AsyncAutocomplete() {
const [value, setValue] = useState('')
const [data, setData] = useState([])
const [loading, setLoading] = useState(false)
const handleChange = async (val: string) => {
setValue(val)
if (val.length < 2) return
setLoading(true)
const results = await fetchSuggestions(val)
setData(results)
setLoading(false)
}
return (
)
}
```
## Notas
A diferencia de `Select`, `Autocomplete` permite que el usuario ingrese cualquier valor libre, no solo los de la lista. Ideal para búsquedas con sugerencias donde el valor final puede no estar en el dataset.
Cuando `data` contiene objetos con `group`, el dropdown agrupa visualmente las opciones bajo el encabezado del grupo.
El prop `limit` controla cuántas sugerencias se muestran simultáneamente (por defecto Mantine muestra todas). Útil para datasets grandes o búsquedas asíncronas donde se quiere limitar el ruido visual.