Targ Apps Docs

DatePicker

Calendario custom de Targ-Apps-Finance — reemplaza inputs nativos type="date" con UI minimalista y locale español.

Política

Targ-Apps-Finance no usa <input type="date">. Todas las fechas de formularios y filtros pasan por el componente DatePicker (src/components/DatePicker.js).

Los valores siguen el contrato de logic/utils/dates.js: cadenas ISO locales YYYY-MM-DD (misma semántica que localDateKey()).

API

PropTipoDescripción
valuestring | () => stringFecha seleccionada (YYYY-MM-DD) o vacío
onChange(ev) => voidev.target.value y ev.target.name (mismo patrón que Select)
namestringNombre de campo; emite <input type="hidden"> para formularios
idstringid del trigger
min / maxstringLímites inclusivos (YYYY-MM-DD)
disabledboolean | () => booleanDeshabilita el trigger
invalidboolean | () => booleanBorde/outline destructivo
requiredboolean | () => booleanrequired en el hidden input
placeholderstringTexto cuando no hay valor (default: «Seleccionar fecha…»)
classstringClases extra en el wrapper
aria-labelledbystringAsociación con <label> externo

Con FormField

e(FormField, {
  label: "Fecha",
  name: "date",
  variant: "date",
  value: date,
  onChange: (ev) => onDateChange(ev.target.value),
  min: "2024-01-01",
  required: true,
  error: () => fieldError("date"),
})

FormField delega en DatePicker cuando variant === "date".

Uso directo (filtros)

import { DatePicker } from "../src/components/DatePicker.js";

e(DatePicker, {
  id: "filterDateFrom",
  name: "filterDateFrom",
  value: filterDateFrom,
  onChange: (ev) => onDateFromChange(ev.target.value),
})

Comportamiento

AspectoDetalle
LocaleEspañol (Intl.DateTimeFormat("es")) para mes, día y cabecera
SemanaLunes como primer día (weekStartsOn: 1)
TecladoTrigger: Enter/Espacio/↓ abre; panel: flechas, Home/End, PageUp/Down (±mes / ±año con Shift), Tab con focus trap, Escape cierra
AnimaciónanimateSelectOpen / animateSelectClose (misma familia que Select)
Motionprefers-reduced-motion: reduce — panel sin fade animado
MóvilTargets ≥ 44px en trigger y celdas
Modal.taf-date-picker-panel--fixed en todo contexto (mismo patrón que Select; evita recorte en modal y .taf-main-card)
z-indexPanel y ancestros :has(.taf-date-picker--open) usan --taf-z-select-open (1300)

Estilos

Namespace en src/styles/finance.css:

ClaseUso
.taf-date-pickerWrapper relativo
.taf-date-picker-triggerBotón trigger (extiende .taf-input)
.taf-date-picker-panelPanel calendario (hairline border, sin sombra pesada)
.taf-date-picker-day--selectedDía activo — fondo cobre --cs-primary
.taf-date-picker-day--todayBorde cobre sutil si no está seleccionado
.taf-date-picker-day--focusedAnillo de foco teclado

Utilidades

src/components/datePickerUtils.js — normalización ISO, grilla de 42 días, etiquetas de mes/semana, isDateDisabled. Tests en test/components/DatePicker.test.js.

Dónde se usa

UbicaciónCampo
TransactionForm.jsFecha de transacción
TransferForm.jsFecha de transferencia
TransactionFilters.jsFiltros «Desde» / «Hasta»
pages/RecurringTransactions.jsFecha de inicio de regla recurrente

On this page