UWC Components
  • Default
  • Material
  • Fluent

On this page

Datepicker

A datepicker component for selecting dates with a calendar popup.

uwc-datepicker provides a calendar popup for selecting dates. It integrates with forms and fires uwc-date-select events when the value changes.

Import

All components

import '@uwc/components';

Selected component (Lit / Angular / Vue)

import { UwcDatepicker } from '@uwc/components/datepicker';
customElements.define('uwc-datepicker', UwcDatepicker);

React

import { UwcDatepicker } from '@uwc/components/react';

Usage

Lit

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('app-demo')
export class AppDemo extends LitElement {
  render() {
    return html`<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`;
  }
}

React

import React from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  return <UwcDatepicker placeholder="Select a date" />;
}

Angular

import { Component } from '@angular/core';
import '@uwc/datepicker';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`,
})
export class AppComponent {}

Vue

import '@uwc/datepicker';

export default {
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`,
};

Basic Usage

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('app-demo')
export class AppDemo extends LitElement {
  render() {
    return html`<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`;
  }
}
import React from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  return <UwcDatepicker placeholder="Select a date" />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`
})
export class AppComponent {}
export default {
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`
};

Basic

Pass placeholder and optional value to control the input. The trigger renders its own styled input.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('datepicker-basic-demo')
export class AppDemo extends LitElement {
  render() {
    return html`<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`;
  }
}
import React from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  return <UwcDatepicker placeholder="Select a date" />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`
})
export class AppComponent {}
export default {
  template: `<uwc-datepicker placeholder="Select a date"></uwc-datepicker>`
};

Controlled value

Listen to onUwcDateSelect to keep state in sync with the selected date.

import { LitElement, html, css } from 'lit';
import { customElement, state } from 'lit/decorators.js';

@customElement('datepicker-controlled-demo')
export class AppDemo extends LitElement {
  static styles = css`
    :host { display: block; }
    p { margin: .75rem 0 0; font-size: .875rem; color: #374151; }
    strong { color: #6366f1; }
  `;

  @state() value: Date | null = null;

  render() {
    return html`
      <uwc-datepicker
        placeholder="Pick a date"
        @uwc-date-select=${(e) => { this.value = e.detail.value; }}>
      </uwc-datepicker>
      <p>Selected: <strong>${this.value ? this.value.toLocaleDateString() : 'none'}</strong></p>
    `;
  }
}
import React, { useState } from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  const [value, setValue] = useState(null);
  return (
    <>
      <UwcDatepicker
        placeholder="Pick a date"
        onUwcDateSelect={(e) => setValue(e.detail.value)}
      />
      <p>Selected: <strong>{value ? value.toLocaleDateString() : 'none'}</strong></p>
    </>
  );
}
import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <uwc-datepicker
      placeholder="Pick a date"
      (uwc-date-select)="value.set($event.detail.value)">
    </uwc-datepicker>
    <p>Selected: <strong>{{ value() ? value().toLocaleDateString() : 'none' }}</strong></p>
  `
})
export class AppComponent {
  readonly value = signal<Date | null>(null);
}
export default {
  data() {
    return { value: null };
  },
  template: `
    <uwc-datepicker
      placeholder="Pick a date"
      @uwc-date-select="value = $event.detail.value">
    </uwc-datepicker>
    <p>Selected: <strong>{{ value ? value.toLocaleDateString() : 'none' }}</strong></p>
  `
};

Range selection

Set selection-mode="range" to let users pick a start and end date.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('datepicker-range-demo')
export class AppDemo extends LitElement {
  render() {
    return html`
      <uwc-datepicker selection-mode="range" placeholder="Select date range"></uwc-datepicker>
    `;
  }
}
import React from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  return <UwcDatepicker selectionMode="range" placeholder="Select date range" />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-datepicker selection-mode="range" placeholder="Select date range"></uwc-datepicker>`
})
export class AppComponent {}
export default {
  template: `<uwc-datepicker selection-mode="range" placeholder="Select date range"></uwc-datepicker>`
};

Inline calendar

Use inline to render the calendar directly on the page without a trigger input.

import { LitElement, html } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('datepicker-inline-demo')
export class AppDemo extends LitElement {
  render() {
    return html`<uwc-datepicker inline></uwc-datepicker>`;
  }
}
import React from 'react';
import { UwcDatepicker } from '@uwc/components/react';

export default function App() {
  return <UwcDatepicker inline />;
}
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  standalone: true,
  template: `<uwc-datepicker inline></uwc-datepicker>`
})
export class AppComponent {}
export default {
  template: `<uwc-datepicker inline></uwc-datepicker>`
};

Attributes

Name Type Default Description
selection-mode — single | range | multiple. Default: single
date-format — Format string: mm/dd/yyyy dd/mm/yyyy yyyy-mm-dd dd.mm.yyyy etc. Default: mm/dd/yyyy
view — date | month | year (starting view). Default: date
placement — Any Placement value. Default: bottom-start
offset — Gap px between trigger and panel. Default: 4
placeholder — Input placeholder text
inline — Renders calendar always-visible; no input trigger
show-clear — Show × button on the input
show-button-bar — Show Today / Clear action bar at panel bottom
show-time — Append a time spinner below the calendar
hour-format — 12 | 24. Default: 24
show-seconds — Show seconds column in time spinner
show-week — Show ISO-8601 week-number column
number-of-months — How many month panels to show side-by-side. Default: 1
first-day-of-week — 0=Sun … 6=Sat. Default: 0
min-date — Earliest selectable date (JS property only)
max-date — Latest selectable date (JS property only)
disabled-dates — Date[] of individually disabled dates (JS property only)
disabled-days — number[] of disabled weekday indices (JS property only)
readonly — Input is read-only; calendar cannot be opened
disabled — Full component disabled
trigger-id — ID of an external trigger element (deep shadow-DOM traversal)

Properties

Name Type Default Description
value DatePickerValue null
selectionMode DateSelectionMode 'single'
dateFormat string 'mm/dd/yyyy'
minDate Date | null null Earliest selectable date — set as a JS property.
maxDate Date | null null Latest selectable date — set as a JS property.
disabledDates Date[] [] Individually disabled dates — set as a JS property.
disabledDays number[] [] Weekday indices to disable: 0=Sun … 6=Sat — set as a JS property.
showTime boolean false
hourFormat HourFormat '24'
showSeconds boolean false
showWeek boolean false
numberOfMonths number 1
firstDayOfWeek number 0
inline boolean false
showButtonBar boolean false
showClear boolean false
placeholder string 'Select date'
readonly boolean false
disabled boolean false
view DatePickerView 'date'
placement Placement 'bottom-start'
offset number 4
triggerId string | undefined
isOpen boolean Whether the panel is currently open. Always true in inline mode.
styles array [styles]

Events

Name Type Description
uwc-date-select CustomEvent — { value, selectionMode, originalEvent? }
uwc-month-change CustomEvent — { month: 0–11, year }
uwc-clear CustomEvent — { previousValue }
uwc-show CustomEvent
uwc-hide CustomEvent
uwc-focus CustomEvent
uwc-blur CustomEvent

CSS Custom Properties

Name Default Description
--uwc-dp-primary Accent colour. Default: #c07a18
--uwc-dp-bg Panel background. Default: #fff
--uwc-dp-border Panel border. Default: 1px solid rgba(0,0,0,0.09)
--uwc-dp-radius Panel border-radius. Default: 12px
--uwc-dp-shadow Panel box-shadow
--uwc-dp-z Panel z-index. Default: 9999
--uwc-dp-duration Open/close transition. Default: 160ms
--uwc-dp-trigger-bg Input background. Default: #fff
--uwc-dp-trigger-border Input border. Default: 1px solid #d0cfc9
--uwc-dp-trigger-radius Input border-radius. Default: 8px
--uwc-dp-trigger-color Input text colour. Default: #111
--uwc-dp-hover-bg Day cell hover background
--uwc-dp-range-bg In-range cell background
--uwc-dp-header-color Month/year label colour. Default: #111
--uwc-dp-day-color Day cell text colour. Default: #222

CSS Parts

Name Description
trigger — The input wrapper div
input — The text input element
clear-btn — The × clear button inside the trigger
cal-icon — The calendar icon button inside the trigger
panel — The floating calendar panel
header — Month-panel header row
nav-btn — Previous / next navigation buttons
day-name — Day-of-week column headers
week-num — ISO week-number cells
day — Individual day cells
day-today — Today's cell
day-selected — Selected day cell(s)
day-in-range — Cells inside a range
day-disabled — Disabled cells
month-cell — Cells in the month grid view
year-cell — Cells in the year grid view
time-section — Time-picker wrapper
button-bar — Today / Clear bar