vaiperui

componentes / date-time-picker

DateTimePicker

Campo que abre un Calendar y columnas de hora para elegir día y hora.

Cómo usar

Combina el `Calendar` y las columnas del `TimePicker` en un solo panel. El valor es un `Date` con el día y la hora (los segundos se ignoran). Elegir un día mantiene la hora; elegir una hora antes de un día usa hoy. El panel queda abierto hasta `OK`, `Esc` o un clic fuera. Con `name`, el formulario recibe `yyyy-mm-ddTHH:mm`.

preview
DateTimePicker.tsx
import { DateTimePicker } from "vaiperui";
const [when, setWhen] = useState<Date>();
<DateTimePicker label="Cita" value={when} onValueChange={setWhen} />
<DateTimePicker label="Cita" hour12 minuteStep={15} minDate={new Date()} />

24h y 12h

preview
24h
12h
formato-hora.tsx
<DateTimePicker />
<DateTimePicker hour12 />

Límites

preview
min / maxDate, step 15
limites.tsx
<DateTimePicker minDate={new Date()} minuteStep={15} />

Tamaños

preview
sm
md
lg
tamanos.tsx
<DateTimePicker size="sm" />
<DateTimePicker size="md" />
<DateTimePicker size="lg" />

Estados

preview
Detalle extra
ayuda
Esto es obligatorio
error
deshabilitado
solo lectura
estados.tsx
<DateTimePicker label="..." helperText="..." />
<DateTimePicker label="..." errorMessage="..." />
<DateTimePicker label="..." disabled />
<DateTimePicker label="..." readOnly />

Props

PropValoresPredeterminadoDescripción
value / defaultValueDateningunoDía y hora, controlados o iniciales
onValueChange(date: Date) => voidningunoSe llama cuando cambia el día, la hora, el minuto o el período
confirmLabelstring"OK"Texto del botón que cierra el panel
hour12booleanfalse12h con una columna AM/PM
minuteStepnumber1Granularidad de la columna de minutos
labels{ hours, minutes, period, am, pm }ningunoTextos de las columnas de hora
label / helperTextstringningunoEtiqueta sobre el campo y texto de ayuda debajo
errorMessagestringningunoTexto de error; su sola presencia fuerza el estado de error
placeholderstringdel idiomaTexto cuando no se eligió nada (p. ej. dd/mm/aaaa)
namestringningunoNombre del campo del formulario
disabled / readOnlybooleanfalseNo abre el panel; readOnly aún muestra el valor
variantring | outlineringEstilo de foco, igual que Input
size / radiussm | md | lg / none | sm | md | lg | fullmd / mdAltura del campo y redondeo de las esquinas
aria-labelstringningunoNombre accesible cuando no hay etiqueta
panelLabelstringningunoNombre accesible del panel abierto
minDate / maxDateDateningunoPrimer y último día permitidos; el resto y las flechas de mes que llevan fuera quedan deshabilitados
localestring"en-US"Idioma de los nombres de mes/día y formato de la fecha (BCP 47)
weekStartsOn0 – 60Primer día de la semana (0 = domingo)
previousMonthLabel / nextMonthLabelstring"Previous month" / "Next month"Nombres accesibles de los botones de mes
variantColor / customColor / animationprimary | success | warning | danger / CSS color / none | smooth | fast | bounceprimary / smoothColor de la selección y del foco, y velocidad de la transición

Accesibilidad

  • El disparador es un `<button>` con `aria-haspopup="dialog"` y `aria-expanded` que refleja el estado del panel.
  • El `label` se enlaza con `htmlFor`; sin `label`, el disparador usa `aria-label`.
  • `errorMessage` define `aria-invalid` y `aria-describedby` apuntando al mensaje; sin error, `helperText` se enlaza con `aria-describedby`.
  • El panel es un `role="dialog"` nombrado por `panelLabel`, renderizado en un portal en `document.body`.
  • `disabled` deshabilita el botón; `readOnly` mantiene el foco posible, pero el panel nunca se abre.
  • El panel contiene un `Calendar` (con foco al abrir, patrón de cuadrícula) y las columnas de hora, cada una un `role="group"` nombrado por `labels`.
  • Las opciones de hora son `<button>`s con `aria-pressed` en la seleccionada; un botón final de confirmación (`confirmLabel`) cierra el panel.

Teclado

TeclaAcción
Enter / SpaceAbre o cierra el panel desde el disparador.
Arrow keys, Home, End, Page Up/DownEn el calendario, navegan por los días (ver Calendar); elegir un día mantiene la hora elegida y no cierra el panel.
Arrow Up / DownEn una columna de hora, mueve el foco a la opción anterior / siguiente.
TabPasa del calendario a las opciones de hora y al botón de confirmación.
EscCierra el panel y devuelve el foco al disparador.

Ten en cuenta

  • El panel no atrapa el foco: Tab sale de él y, como se renderiza al final de `<body>`, Tab desde el disparador no entra en él por sí solo.
  • Hacer clic fuera cierra el panel sin devolver el foco; solo Esc restaura el foco en el disparador.
  • La fecha y la hora no se pueden escribir. Pasa `labels`, `confirmLabel`, `panelLabel` y las etiquetas de los botones de mes traducidos; los valores por defecto están en inglés.