Hecho sobre el UI SDK 0.1.0-beta.1 de Vercel. Su API puede cambiar.
Date picker
Un selector de fechas sobre el UI SDK de Vercel donde se escribe la fecha en el propio idioma o se elige, con rangos, preajustes y valores ISO.
- Componentes de formulario
- 18 partes
- 9 ejemplos
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-date-picker.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react cnCopia y pega el siguiente código en tu proyecto.
components/ui/ui-sdk-date-picker.tsx components/ui/button.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
UI SDK añade un poco de CSS propio en una capa de cascada llamada ui-sdk. Declara esa capa al principio de tu hoja de estilos global, encima del import de Tailwind, para que tus clases ganen.
Los valores son cadenas de fecha ISO como 2026-11-20, sin hora ni zona horaria, así que no necesitas una librería de fechas. Cada persona escribe en su propio orden, como 11/20/2026 o 20.11.2026, y el campo da formato a la fecha al pulsar Enter o salir. DatePickerContent sin hijos muestra un calendario con estilo.
Con mode="range", añade un segundo input con end. El calendario sigue abierto tras la primera fecha y se cierra tras la segunda. months={2} muestra dos meses lado a lado, apilados en pantallas pequeñas.
Un DatePickerPreset elige su value y cierra el popup. Se muestra pulsado mientras su valor está seleccionado.
min, max y unavailable se aplican al escribir y al elegir. Aquí no se pueden elegir los fines de semana ni dos festivos, y uno escrito se marca como no válido.
locale define el formato escrito, la pista y los nombres del calendario. Sin él, el selector lee el lang de la página. Los botones tienen nombres en inglés, así que pasa aria-label para traducirlos.
Con un name, la fecha se envía como cadena ISO. required bloquea un envío vacío, un texto que no es fecha también lo bloquea, y reset vuelve a defaultValue.
Un controlador de createDatePickerController() fija la fecha o abre el calendario desde cualquier lugar, y onValueChange informa de cada cambio. Deja value sin definir aquí para que el calendario pueda ir al mes que elige el controlador.
disabled impide escribir y abrir. readOnly sigue abriendo el calendario para mirar, pero nada puede cambiar.
Con una configuración regional árabe dentro de dir=rtl, el campo, las flechas y el calendario van de derecha a izquierda.
| Key | Acción |
|---|---|
| Enter | En el input, lee la fecha escrita. En un día, lo elige. |
| ←→↑↓ | Se mueve entre días, o una semana arriba y abajo. |
| Page UpPage Down | Retrocede o avanza un mes. |
| HomeEnd | Pasa al inicio o al final de la semana. |
| Esc | Cancela un rango sin terminar o, si no, cierra el calendario. |
El calendario se abre como un diálogo con una cuadrícula de días, cada uno nombrado por completo, como «Friday, November 20, 2026». La pista describe el input, así que los lectores de pantalla oyen el formato a escribir. Un texto que no es una fecha activa aria-invalid y conserva el valor anterior, y los días no disponibles siguen enfocables para que quien usa el teclado los oiga.
El disparador, el popup y las flechas tienen nombres en inglés. Pasa aria-label a cada uno para traducirlos. Los inputs usan una fuente de 16px en pantallas táctiles para que iOS no haga zoom, y el popup solo se escala al entrar cuando se permite el movimiento.
Cada parte envuelve la parte de UI SDK con el mismo nombre y acepta todas sus props, incluidas render y una className que puede ser una función del estado de la parte. DatePickerControl, DatePickerSeparator y DatePickerCalendar son partes de diseño de HextaUI.
| Prop | Tipo | Predeterminado |
|---|---|---|
mode | "single" | "range" | "single" |
value | string | [string, string] | null | – |
defaultValue | string | [string, string] | null | – |
onValueChange | (value, details) => void | – |
min | string | – |
max | string | – |
unavailableFechas ISO, { from, to }, { weekday }, { before }, { after } o una función. | DateMatchers | – |
months | number | 1 |
pageBy | "month" | "page" | "month" |
locale | string | – |
weekStartsOn | number | – |
minDays | number | – |
maxDays | number | – |
closeOnSelect | boolean | true |
disabled | boolean | false |
readOnly | boolean | false |
name | string | – |
startName | string | – |
endName | string | – |
required | boolean | false |
open | boolean | – |
onOpenChange | (open, details) => void | – |
controllerDe createDatePickerController(). | DatePickerController | – |
| Atributo | Descripción |
|---|---|
data-slot="date-picker" | Selecciona el selector de fechas en CSS. |
data-open | Presente mientras está abierto. |
data-invalid | Presente mientras un input tiene texto que no es una fecha. |
data-disabled | Presente cuando está deshabilitado. |
data-readonly | Presente cuando es de solo lectura. |
| Prop | Tipo | Predeterminado |
|---|---|---|
endLa convierte en el final de un rango. | boolean | false |
| Prop | Tipo | Predeterminado |
|---|---|---|
childrenPor defecto, un icono de calendario. | ReactNode | – |
aria-label | string | "Choose date" |
| Prop | Tipo | Predeterminado |
|---|---|---|
childrenPor defecto, un icono X llamado Clear. Se oculta mientras no hay nada que borrar. | ReactNode | – |
| Prop | Tipo | Predeterminado |
|---|---|---|
childrenPor defecto, un DatePickerCalendar. | ReactNode | – |
align | Align | "start" |
sideOffset | number | 6 |
collisionPadding | number | 8 |
| Atributo | Descripción |
|---|---|
data-slot="date-picker-content" | Para apuntar al popup en CSS. |
--cell-size | El tamaño de cada día, mayor en pantallas táctiles. |
| Prop | Tipo | Predeterminado |
|---|---|---|
monthsCuántas cuadrículas mostrar, una junto a otra. | number | 1 |
| Prop | Tipo | Predeterminado |
|---|---|---|
value | string | [string, string] | – |
render | ReactElement | (props, state) => ReactElement | – |
| Atributo | Descripción |
|---|---|
data-slot="calendar-day" | Selecciona un día en CSS. |
data-today | Presente en el día de hoy. |
data-range-start | Presente donde empieza un rango. |
data-range-end | Presente donde termina un rango. |
data-unavailable | Presente en un día que no se puede elegir. |
data-outside | Presente en un día del mes siguiente o anterior. |
- ButtonBotones en todas las variantes y tamaños, con un flujo integrado de carga, éxito y error que omite el spinner en las peticiones rápidas.
- CalendarUna cuadrícula de fechas para selección única, de rango y múltiple, con meses deslizantes, vistas previas de rango y días de tamaño táctil.
- CheckboxUna casilla de verificación cuya marca se dibuja, con padres indeterminados, grupos y etiquetas que comparten su hover.
- ComboboxUn select filtrable con chips, grupos y resultados asíncronos, en un popup que cambia de tamaño mientras escribes.
- Date pickerUn botón que abre un calendario en un popover, o en una hoja inferior en móviles, para fechas únicas y rangos.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.