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 |