Prototype Library

Date picker

Form-associated date input wrapping the native calendar UI. A Lit Web Component migrated from the Angular esa-date-picker.

Inheritedwcimport '@esa/ecology/esa-date-picker';

Preview

<esa-date-picker label="Event date" help-text="Pick any day"></esa-date-picker>

Sizes

<esa-date-picker label="Extra small" size="xs"></esa-date-picker>
<esa-date-picker label="Small" size="sm"></esa-date-picker>
<esa-date-picker label="Medium" size="md"></esa-date-picker>
<esa-date-picker label="Large" size="lg"></esa-date-picker>

States

Constrain selectable days with min/max. Preset, required, error, and disabled states are attribute-driven.

<esa-date-picker label="Within 2026" min="2026-01-01" max="2026-12-31"></esa-date-picker>
<esa-date-picker label="Preset value" value="2026-06-03"></esa-date-picker>
<esa-date-picker label="Required" required></esa-date-picker>
<esa-date-picker label="Error" error-text="Date is required"></esa-date-picker>
<esa-date-picker label="Disabled" disabled value="2026-06-03"></esa-date-picker>

API

PropTypeDefaultDescription
labelstring''Field label above the input.
size'xs' | 'sm' | 'md' | 'lg''md'Control size (reflected attribute).
valuestring''ISO date value (YYYY-MM-DD).
minstring''Earliest selectable date (YYYY-MM-DD).
maxstring''Latest selectable date (YYYY-MM-DD).
placeholderstring'Select date...'Placeholder text.
help-textstring''Helper text below the input.
error-textstring''Error message; sets the error state when present.
requiredbooleanfalseMarks the field required (renders a * after the label).
disabledbooleanfalseDisables interaction (reflected attribute).

Events

EventTypeDefaultDescription
changeCustomEvent<{ value: string }>—Fired on input. Value is an ISO YYYY-MM-DD string. Composed and bubbles.

Accessibility

  • Renders a native <input type="date"> — the browser supplies the calendar and full keyboard handling.
  • The input is labelled via aria-label (falls back to "Date" when no label is set).
  • min/max map to native input bounds, blocking out-of-range selection.
  • Form-associated via ElementInternals — value submits with the enclosing form.

Tokens

  • --color-background-field · --form-text-color · --form-border-color / --form-border-color-focus / --form-error-border-color
  • Sizing reads --spacing-* directly (the --form-height/padding/radius/font-size-* hooks were removed upstream, 2026-08)
  • --color-background-brand (focus) · --color-background-utility-danger · --focus-ring-color