<!-- Generado automáticamente por scripts/generate-docs.mjs. No editar a mano. -->
<!-- Fuente: src/app/componentes/searchbox/page.tsx -->

# Searchbox

Input especializado para búsquedas. Incluye icono de lupa, botón para limpiar y soporte para resultados en vivo o submit explícito.

```tsx
<div className="relative w-[320px]">
  <Search className="absolute left-[10px] top-1/2 -translate-y-1/2" size={14} />
  <input
    type="search"
    placeholder="Buscar expedientes..."
    className="w-full h-[36px] pl-[32px] pr-[32px] rounded-[6px] border ..."
  />
</div>
```

## Default

### Estructura

- Lupa a la izquierda como afordancia visual.
- Botón de limpiar a la derecha aparece solo cuando hay texto.
- Esc limpia el contenido sin salir del campo.
- type="search" para que el navegador y los lectores de pantalla lo identifiquen.

## Expandible

### Icono que se expande a barra

En toolbars y headers donde el espacio es escaso, la búsqueda arranca como un icono y se expande al activarse. Se contrae al perder foco si está vacía.

```tsx
const [open, setOpen] = useState(false);

<button
  onClick={() => setOpen(true)}
  aria-label="Buscar"
  className="w-[36px] h-[36px] rounded-[6px] border ..."
>
  <Search size={16} />
</button>

// se expande a un input controlado al abrir
{open && <input autoFocus onBlur={...} />}
```

## Accesibilidad

### Etiquetado y teclado

- Si no hay label visible, usa aria-label en el input.
- El botón colapsado lleva aria-label como Buscar para anunciar su función.
- Tab debe llevar al input al expandir; Esc o blur lo contrae si está vacío.
- Anuncia los resultados en una región aria-live polite cuando aparezcan.

## Contenido

### Placeholder

- Indica qué se puede buscar: Buscar expedientes, Buscar clientes.
- Evita placeholders genéricos como Buscar sin objeto.
- El placeholder nunca sustituye al label.

