DatePicker

Date selection component with calendar popup

DatePicker

A date selection component with an integrated calendar popup.

Basic Usage

json
{
  "kind": "component",
  "name": "DatePicker",
  "props": {
    "value": { "expr": "state", "name": "selectedDate" },
    "onChange": { "event": "change", "action": "updateDate" }
  }
}

Props

PropTypeDefaultDescription
valueExpression-Selected date (ISO string or Date)
onChangeEventHandler-Called when date changes
formatExpression"yyyy-MM-dd"Display format
minDateExpression-Minimum selectable date
maxDateExpression-Maximum selectable date
localeExpression"en-US"Locale for formatting
placeholderExpression"Select date"Placeholder text
disabledExpressionfalseDisabled state
clearableExpressiontrueShow clear button

Date Formats

FormatExample
yyyy-MM-dd2024-01-15
MM/dd/yyyy01/15/2024
dd/MM/yyyy15/01/2024
MMMM d, yyyyJanuary 15, 2024
MMM dJan 15

Examples

With Min/Max Date

json
{
  "kind": "component",
  "name": "DatePicker",
  "props": {
    "value": { "expr": "state", "name": "appointmentDate" },
    "onChange": { "event": "change", "action": "setAppointmentDate" },
    "minDate": { "expr": "lit", "value": "2024-01-01" },
    "maxDate": { "expr": "lit", "value": "2024-12-31" },
    "format": { "expr": "lit", "value": "MMMM d, yyyy" }
  }
}

Japanese Locale

json
{
  "kind": "component",
  "name": "DatePicker",
  "props": {
    "value": { "expr": "state", "name": "date" },
    "onChange": { "event": "change", "action": "updateDate" },
    "locale": { "expr": "lit", "value": "ja-JP" },
    "format": { "expr": "lit", "value": "yyyy年MM月dd日" }
  }
}

In a Form

json
{
  "version": "1.0",
  "state": {
    "startDate": { "type": "string", "initial": "" },
    "endDate": { "type": "string", "initial": "" }
  },
  "actions": [
    {
      "name": "setStartDate",
      "steps": [{ "do": "set", "target": "startDate", "value": { "expr": "var", "name": "payload" } }]
    },
    {
      "name": "setEndDate",
      "steps": [{ "do": "set", "target": "endDate", "value": { "expr": "var", "name": "payload" } }]
    }
  ],
  "view": {
    "kind": "element",
    "tag": "div",
    "props": { "className": { "expr": "lit", "value": "flex gap-4" } },
    "children": [
      {
        "kind": "element",
        "tag": "div",
        "children": [
          { "kind": "element", "tag": "label", "children": [{ "kind": "text", "value": { "expr": "lit", "value": "Start Date" } }] },
          {
            "kind": "component",
            "name": "DatePicker",
            "props": {
              "value": { "expr": "state", "name": "startDate" },
              "onChange": { "event": "change", "action": "setStartDate" }
            }
          }
        ]
      },
      {
        "kind": "element",
        "tag": "div",
        "children": [
          { "kind": "element", "tag": "label", "children": [{ "kind": "text", "value": { "expr": "lit", "value": "End Date" } }] },
          {
            "kind": "component",
            "name": "DatePicker",
            "props": {
              "value": { "expr": "state", "name": "endDate" },
              "onChange": { "event": "change", "action": "setEndDate" },
              "minDate": { "expr": "state", "name": "startDate" }
            }
          }
        ]
      }
    ]
  }
}

Styling

The DatePicker uses the following CSS classes:

  • .datepicker - Main container
  • .datepicker-input - Input field
  • .datepicker-popup - Calendar popup
  • .datepicker-header - Month/year navigation
  • .datepicker-grid - Day grid
  • .datepicker-day - Individual day
  • .datepicker-day--selected - Selected day
  • .datepicker-day--today - Today
  • .datepicker-day--disabled - Disabled day

Accessibility

  • Full keyboard navigation (Arrow keys, Enter, Escape)
  • ARIA labels for all interactive elements
  • Focus management when popup opens/closes
  • Screen reader announcements for date selection