Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

DateInput

Elige fechas y horas locales sin convertir un valor del calendario en un instante UTC.

Categoría
Formularios y selección
Import
@neural-ui/core/date-input
Selector
neu-date-input
import { NeuDateInputControl } from '@neural-ui/core/date-input';

Elegir una fecha

Usa DateInput para una fecha de entrega, la hora de una cita o un intervalo. Importa el componente y guarda el valor en un signal; no necesitas un adaptador de fechas ni un paquete de iconos. Pulsa en cualquier parte del campo para abrir el selector, o utiliza el botón de la flecha.

CivilDate representa un día del calendario, no un instante. civilDate('2026-10-15') valida ese valor sin añadir una zona horaria. Conserva el valor civil al enviarlo a tu aplicación; conviértelo en un instante solo cuando tus reglas de negocio indiquen una hora y una zona horaria.

Elegir una fecha
Valor civil: 2026-10-15

Configurador

Explora los siete modos de valor, la presentación desplegable o integrada, el tamaño y las opciones del calendario. Al cambiar de modo, el valor de la demo se restablece al tipo público correspondiente; el template generado refleja tus ajustes.

Configurador

Vista previa

Template generado. La pestaña Código incluye los imports y el estado.

template.html
<neu-date-input
  [(value)]="value"
  (viewChange)="lastViewChange.set($event)"
  label="Fecha de entrega"
  mode="date"
  presentation="overlay"
  size="md"
  [floatingLabel]="true"
  [firstDayOfWeek]="1"
  [showWeekNumbers]="false"
  [showMonthYearPicker]="true"
  [locale]="'es'"
/>

Modos y tipos de valor

Elige el modo según el valor que necesitas guardar. date usa CivilDate (2026-10-15); time usa LocalTime (09:30); datetime usa LocalDateTime (2026-10-15T09:30). Ninguno representa un instante UTC.

Usa multiple para días independientes (readonly CivilDate[]). Usa range para un intervalo (CivilDateRange con start y end); un intervalo a medio seleccionar puede tener un extremo null. month usa CivilMonth y year usa CivilYear cuando no necesitas precisión de día. Cada ejemplo mantiene su propio valor con el tipo correspondiente.

Modos y tipos de valor
"2026-10-15"
"09:30"
"2026-10-15T09:30"
[ "2026-10-15", "2026-10-20" ]
{ "start": "2026-10-15", "end": "2026-10-20" }
{ "year": 2026, "month": 10 }
{ "year": 2026 }

Límites y presentación

Esta ventana de entrega admite del 10 al 20 de octubre de 2026, excepto el día 17. min y max limitan la fecha civil; disabledDates excluye un día concreto. Prueba a escribir una fecha fuera del intervalo y abre el calendario para comparar ambas formas de entrada.

Los interruptores permiten explorar deshabilitado, solo lectura y presentación integrada sin exponer APIs de objetos ajenas al ejemplo. Conserva el tipo de valor propio de cada modo; cambiar el modo de un formulario puede requerir cambiar o limpiar su modelo.

Límites y presentación

Valor civil: 2026-10-15

Validación con Signal Forms

Conecta FormField a un campo tipado. El esquema aporta la validación obligatoria y los estados deshabilitado y solo lectura; no necesitas enlazar el valor por segunda vez. Sal del campo vacío para mostrar el error. Restablecer limpia el valor y el estado de interacción del formulario.

Usa min, max y disabledDates para restringir las fechas seleccionables. Mantén la validación de negocio en el esquema del formulario y aporta un mensaje que explique cómo corregir un valor no válido.

Validación con Signal Forms
Fecha: — · Válido: false

Valor y eventos

value es un modelo bidireccional: [(value)] sincroniza el valor civil seleccionado con tu signal. En un formulario con Signal Forms, FormField realiza esa conexión. No combines ambos enlaces en el mismo control.

opened y closed informan del ciclo del panel. cleared comunica la acción de limpiar y touch la interacción con el campo. viewChange informa de la vista del calendario; no de una nueva fecha seleccionada. Usa valueChange cuando tu aplicación necesite el nuevo valor.

Accesibilidad y teclado

Core gestiona la cuadrícula del calendario, la navegación por teclado y el foco del panel. Tu aplicación debe aportar una etiqueta y un mensaje de validación útiles, y asociar ayuda adicional mediante ariaDescribedBy. El placeholder no sustituye a una etiqueta.

Los campos deshabilitados no se pueden editar; los de solo lectura conservan su valor sin admitir cambios. Comprueba el formulario completo con tu contenido y tecnología de asistencia, especialmente los avisos de error y la recuperación del foco al cerrar el panel.

Tecla
Acción
ArrowDown Abre el calendario de fecha desde el campo.
ArrowLeft / ArrowRight / ArrowUp / ArrowDown Avanza un día horizontalmente o una semana verticalmente en la cuadrícula de días.
Home / End Ve al inicio o final de la semana del calendario.
PageUp / PageDown Ve al mes anterior o siguiente en la cuadrícula de días.
Enter / Space Selecciona el valor del calendario que tiene el foco.
Escape Cierra el panel flotante.

API

La exportación pública NeuDateInputComponent es un alias de NeuDateInputControl. Configura el control mediante inputs, conecta el modelo value y escucha outputs cuando necesites avisos de interacción. Este control no expone directivas de plantilla ni métodos imperativos de consumo.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
ariaDescribedBystring''[ariaDescribedBy]Identificadores de elementos descriptivos adicionales, separados por espacios.
ariaLabelstring''[ariaLabel]Nombre accesible cuando no se dispone de una etiqueta visible adecuada.
dateFormat"short" | "medium" | "long" | "full" | "numeric"'short'[dateFormat]Formato de presentación de la fecha, independiente del valor tipado guardado.
dirtybooleanfalse[dirty]Indica si se ha editado el valor del formulario.
disabledbooleanfalse[disabled]Impide la interacción; FormField lo aporta al conectar Signal Forms.
disabledDatesreadonly CivilDate[] | ((date: CivilDate) => boolean)[][disabledDates]Lista de días civiles o predicado que identifica las fechas que no se pueden seleccionar.
errorMessagestring''[errorMessage]Mensaje comprensible que indica cómo corregir el estado no válido.
errorsreadonly ValidationError.WithOptionalFieldTree[][][errors]Errores estructurados de validación de Signal Forms.
firstDayOfWeeknumber1[firstDayOfWeek]Primer día semanal del calendario: 0 es domingo y 1 es lunes.
floatingLabelbooleanfalse[floatingLabel]Sitúa la etiqueta flotante dentro del borde del campo.
hiddenbooleanfalse[hidden]Oculta el control mediante el contrato de estado del formulario.
hintstring''[hint]Texto de ayuda bajo el campo.
inputIdstring''[inputId]Identificador explícito del campo para asociar etiqueta y ayuda externa.
invalidbooleanfalse[invalid]Muestra el estado no válido aportado por el formulario o la aplicación.
labelstring''[label]Etiqueta visible asociada al campo.
localestring | nullnull[locale]Idioma usado para dar formato al texto; no convierte el modelo civil en un instante.
maxNonNullable<V> | undefinedundefined[max]Límite superior permitido. Aporta un valor civil compatible con el modo elegido.
minNonNullable<V> | undefinedundefined[min]Límite inferior permitido. Aporta un valor civil compatible con el modo elegido.
modeNeuDateMode'date'[mode]Modo del valor y selector: date, time, datetime, multiple, range, month o year.
namestring''[name]Nombre del control nativo del formulario.
pendingbooleanfalse[pending]Indica que la validación del formulario está pendiente.
placeholderstring''[placeholder]Pista breve de formato cuando está vacío; no sustituye a label.
presentationNeuDatePresentation'overlay'[presentation]Muestra el calendario en un panel flotante o integrado en la página.
presetsreadonly NeuDatePreset[][][presets]Intervalos predefinidos con nombre ofrecidos por el calendario de rango; consulta NeuDatePreset.
readonlybooleanfalse[readonly]Mantiene el valor legible sin permitir cambios.
requiredbooleanfalse[required]Marca el campo como obligatorio; define la validación en el esquema del formulario.
showMonthYearPickerbooleanfalse[showMonthYearPicker]Permite cambiar mes y año mediante el selector de la cabecera.
showWeekNumbersbooleanfalse[showWeekNumbers]Muestra los números de semana junto a las filas del calendario.
size"sm" | "md" | "lg"'md'[size]Tamaño del campo: sm, md o lg.
stepnumber1[step]Incremento de minutos al editar la hora.
touchedbooleanfalse[touched]Estado de interacción aportado por Signal Forms o tu aplicación.
yearRangenumber12[yearRange]Número de años mostrados por el selector de años.

Models

Un modelo admite [(propiedad)]="signal" o la pareja [propiedad] y (propiedadChange). Elige una de las dos formas, no ambas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
valueVnull as VValor derivado[(value)]Valor civil editable. Ajusta su tipo al modo; usa FormField o [(value)], no ambos.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
clearedvoid(cleared)="onCleared($event)"Informa de la acción de limpiar; el modelo value transporta el valor resultante.
closedvoid(closed)="onClosed($event)"Se emite al cerrar el panel flotante.
openedvoid(opened)="onOpened($event)"Se emite al abrir el panel flotante.
touchvoid(touch)="onTouch($event)"Notifica al formulario que se ha interactuado con el control; no transporta un valor.
viewChangeNeuDateViewChangeEvent(viewChange)="onViewChange($event)"Informa de un cambio de vista del calendario, no de un nuevo valor confirmado.

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Este componente no expone proyección de contenido ni templates públicos de personalización.

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Tematización

DateInput usa los roles compartidos de campo, superficie, texto y foco, no una paleta exclusiva de fechas. Este contenedor local cambia borde, superficie y texto de un campo; el campo contiguo conserva el tema heredado.

Un token compartido también afecta a otros controles Neural dentro del mismo contenedor. Limita el ámbito de los cambios, conserva el contraste del texto y del foco y revisa tanto el calendario abierto como el campo cerrado.

Tematización
Tema heredado
Cambio local

Tokens específicos

Este componente utiliza tokens compartidos del tema en lugar de tokens específicos.

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-border Bordes normales de controles y celdas Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.08)
--neu-border-hover Bordes de controles al pasar el puntero Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.16)
--neu-error Color del campo no válido o de la acción de peligro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #dc2626
--neu-error-text Texto de error y de Button danger outline/ghost en ambos temas Compartido con otros consumidores de Core; limita el cambio a un ámbito. #991b1b
--neu-focus-ring Anillo normal del foco de teclado Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 0 0 var(--neu-focus-ring-width) rgba(0, 122, 255, 0.15)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-primary-dark Tono oscuro de marca; texto de Button outline y ghost en el tema claro Compartido con otros consumidores de Core; limita el cambio a un ámbito. #005fcc
--neu-primary-fg Contenido dibujado sobre el fondo primario Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff