Skip to content
ShineUI
Install

DatePicker

Dates without doubt.

<sui-date-picker>Advanced inputsStable

About

Calendar picker for a single date, a start and end range, or a flat inline calendar, with an optional time of day. Type a date or pick one from the grid; the field shows it in the locale's spelling and the value stays ISO. Reach for it for invoice dates, due dates, send times and report periods.

Usage

<sui-date-picker label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22" help="Today wears an orange dot."></sui-date-picker> <script type="module"> import { defineCustomElements } from "@shineui/core/loader"; import "@shineui/core/shineui.css"; defineCustomElements(); const el = document.querySelector("sui-date-picker"); el.disabledDates = []; /* SuiDateInput[] | undefined */ el.disabledDays = []; /* number[] | undefined */ el.addEventListener("suiChange", (e) => console.log(e.detail)); </script>
import { SuiDatePicker } from "@shineui/react"; import "@shineui/core/shineui.css"; export function Example() { const disabledDates = []; /* SuiDateInput[] | undefined */ const disabledDays = []; /* number[] | undefined */ return <SuiDatePicker label="Invoice date" name="issued" value="2026-08-08" todayDate="2026-08-22" help="Today wears an orange dot." disabledDates={disabledDates} disabledDays={disabledDays} onSuiChange={(e) => console.log(e.detail)} />; }
<script setup> import { SuiDatePicker } from "@shineui/vue"; import "@shineui/core/shineui.css"; const disabledDates = []; // SuiDateInput[] | undefined const disabledDays = []; // number[] | undefined const onChange = (e) => console.log(e.detail); </script> <template> <SuiDatePicker label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22" help="Today wears an orange dot." :disabled-dates="disabledDates" :disabled-days="disabledDays" @sui-change="onChange" /> </template>
import { Component } from "@angular/core"; import { SuiDatePicker } from "@shineui/angular"; @Component({ standalone: true, imports: [SuiDatePicker], template: `<sui-date-picker label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22" help="Today wears an orange dot." [(open)]="open" [disabledDates]="disabledDates" [disabledDays]="disabledDays" (suiChange)="onChange($event)"></sui-date-picker>`, }) export class Example { open = false; disabledDates = []; // SuiDateInput[] | undefined disabledDays = []; // number[] | undefined onChange(e: CustomEvent) { console.log(e.detail); } }

Basic

The field is a text box with aria-haspopup="dialog", the chevron beside it is a labeled button, and the calendar is a role="grid" with Today and Clear links in its footer. Today carries aria-current="date" under the orange dot.

<div style="max-width:240px"> <sui-date-picker label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22" help="Today wears an orange dot."></sui-date-picker> </div>

Range and report presets

Two clicks set a start and an end, and the preset column renders only in range mode, with aria-pressed on the active preset. Presets and the range value are properties, so setup writes them. The flat copy is the same picker with inline, so the column stays on the page.

<div style="display:grid;gap:16px;justify-items:start"> <div style="width:280px"> <sui-date-picker id="dp-range" label="Reporting period" name="period" range today-date="2026-08-22"></sui-date-picker> </div> <sui-date-picker id="dp-range-flat" label="Reporting period, flat" range inline today-date="2026-08-22"></sui-date-picker> </div>
// setup(root): properties and events setup(root) { for (const el of root.querySelectorAll('#dp-range, #dp-range-flat')) { el.presets = reportPresets(); el.value = ['2026-07-01', '2026-07-31']; } }

Date and time

show-time adds a column of times beside the calendar, on the locale's clock unless hour-format names one. Picking a day keeps the time; picking a time closes the calendar. time-step spaces the rows and min-time and max-time bound the day. The value posts as a local YYYY-MM-DDTHH:mm with no time zone.

Submit to see what posts.
<div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap"> <form id="dp-time-form" style="width:250px;display:grid;gap:14px"> <sui-date-picker id="dp-time" label="Send at" name="sendAt" show-time time-step="15" value="2026-08-24T09:30" min-date="2026-08-22T10:05" today-date="2026-08-22T10:05" help="Your local time."></sui-date-picker> <sui-date-picker label="Versand um" name="versand" locale="de-DE" show-time min-time="08:00" max-time="18:00" value="2026-08-24T14:30" today-date="2026-08-22T10:05" help="Zwischen 08:00 und 18:00."></sui-date-picker> <sui-button type="submit" variant="outline" label="Schedule"></sui-button> </form> <span id="dp-time-log" style="font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)">Submit to see what posts.</span> </div>
// setup(root): properties and events setup(root) { const form = root.querySelector('#dp-time-form'); const log = root.querySelector('#dp-time-log'); root.querySelector('#dp-time').addEventListener('suiChange', (e) => { log.textContent = e.detail ? `suiChange ${e.detail}.` : 'suiChange cleared.'; }); form.addEventListener('submit', (e) => { e.preventDefault(); log.textContent = [...new FormData(form)].map(([k, v]) => `${k}=${v || '(empty)'}`).join(' '); }); }

Format and locale

date-format is one of the four Intl dateStyle names, and locale supplies the order, the separators, the words, the first day of the week and the clock; the value stays ISO whatever the field shows. Unset, locale follows the page. first-day-of-week overrides the first day.

<div style="display:grid;gap:14px;max-width:260px"> <sui-date-picker label="Short" date-format="short" value="2026-08-08" today-date="2026-08-22" help="8/8/26 in en-US."></sui-date-picker> <sui-date-picker label="Lieferdatum" locale="de-DE" date-format="long" value="2026-08-08" today-date="2026-08-22" placeholder="Datum wählen"></sui-date-picker> <sui-date-picker label="Date d'échéance" locale="fr-FR" date-format="full" value="2026-08-08" today-date="2026-08-22"></sui-date-picker> </div>

Typed entry

Type a date and press Enter or leave the field: the entry is read in the field format, as a month name, or as ISO, and rewritten in the field format once it commits. An entry that does not parse keeps its text, posts an empty value and holds the form on badInput with a message that shows the expected form.

Idle.
<div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap"> <form id="dp-typed-form" style="width:240px;display:grid;gap:14px"> <sui-date-picker id="dp-typed" label="Invoice date" name="issued" today-date="2026-08-22" help="Try 9/14/2026, Sep 14 2026 or 2026-09-14."></sui-date-picker> <sui-button type="submit" variant="outline" label="Check"></sui-button> </form> <span id="dp-typed-log" style="font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)">Idle.</span> </div>
// setup(root): properties and events setup(root) { const el = root.querySelector('#dp-typed'); const form = root.querySelector('#dp-typed-form'); const log = root.querySelector('#dp-typed-log'); el.addEventListener('suiChange', (e) => { log.textContent = e.detail ? `suiChange ${e.detail}.` : 'suiChange cleared: the entry did not parse or the field is empty.'; }); form.addEventListener('submit', (e) => { e.preventDefault(); log.textContent = `Form is valid. issued=${new FormData(form).get('issued') || '(empty)'}`; }); el.addEventListener('invalid', () => { log.textContent = 'Form refused: the field holds it on badInput until the entry parses.'; }); }

Inline calendar

inline renders the calendar flat with no trigger and no shadow. It never opens, so it follows an external value write to the new month instead of leaving the date off screen.

Selected 2026-08-08.
<div style="display:flex;gap:20px;flex-wrap:wrap;align-items:flex-start"> <sui-date-picker id="dp-inline" label="Statement date" inline value="2026-08-08" today-date="2026-08-22"></sui-date-picker> <span id="dp-inline-out" style="font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)">Selected 2026-08-08.</span> </div>
// setup(root): properties and events setup(root) { const out = root.querySelector('#dp-inline-out'); root.querySelector('#dp-inline').addEventListener('suiChange', (e) => { out.textContent = e.detail ? `Selected ${e.detail}.` : 'Cleared.'; }); }

As a property

variant="quiet" draws the date as text in the surrounding font, the calendar glyph before it, with no shell at rest: the fill comes on hover, and the shell while the field has focus or the calendar is open, since a focused text field is being typed into. The label is not drawn but still names the field.

Due Reviewed
<div style="display:grid;grid-template-columns:76px minmax(0,1fr);gap:12px 10px;align-items:center;max-width:320px;font:550 13.5px/1.5 var(--font-sans);color:var(--ink)"> <span style="font:460 12.5px/1.3 var(--font-sans);color:var(--ink-muted)">Due</span><sui-date-picker variant="quiet" label="Due" size="sm" value="2026-09-09" today-date="2026-08-22" placeholder="No date"></sui-date-picker> <span style="font:460 12.5px/1.3 var(--font-sans);color:var(--ink-muted)">Reviewed</span><sui-date-picker variant="quiet" label="Reviewed" size="sm" today-date="2026-08-22" placeholder="No date"></sui-date-picker> </div>

Bounds and barred days

min-date and max-date stop the month arrows at the bounds, disabledDays bars weekdays by number and disabledDates bars single days; the last two are properties. A barred day stays in the grid with aria-disabled and stays reachable by the roving cursor, it just refuses the pick.

September 2026 only. Weekends are barred, and so is Labor Day on the 7th.
<div style="display:flex;gap:20px;flex-wrap:wrap;align-items:flex-start"> <sui-date-picker id="dp-bounds" label="Filing date" inline value="2026-09-15" min-date="2026-09-01" max-date="2026-09-30" today-date="2026-08-22"></sui-date-picker> <div style="max-width:220px;font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)">September 2026 only. Weekends are barred, and so is Labor Day on the 7th.</div> </div>
// setup(root): properties and events setup(root) { const el = root.querySelector('#dp-bounds'); el.disabledDays = [0, 6]; el.disabledDates = holidays(); }

Sizes

size is the same sm, md, lg vocabulary and the same 28, 34, 42 heights as the rest of the control family, so a date field lines up in a row with a Select or an InputText. The calendar keeps its own metrics, and an inline picker has no field to size.

<div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;align-items:end"> <sui-date-picker label="Small" size="sm" value="2026-09-01" today-date="2026-08-22"></sui-date-picker> <sui-date-picker label="Medium" value="2026-09-01" today-date="2026-08-22"></sui-date-picker> <sui-date-picker label="Large" size="lg" value="2026-09-01" today-date="2026-08-22"></sui-date-picker> </div>

States

A trigger the user cannot open cannot be filled in, so a disabled picker never holds the form on valueMissing. An author-set error still applies and paints the trigger in the danger tone.

<div style="display:grid;gap:14px;max-width:240px"> <sui-date-picker id="dp-req" label="Due date" required today-date="2026-08-22" help="Required before the invoice can be sent."></sui-date-picker> <sui-date-picker id="dp-err" label="Service date" value="2026-09-14" today-date="2026-08-22" error="Service date cannot be after the invoice date."></sui-date-picker> <sui-date-picker id="dp-invalid" label="Period end" value="2026-06-30" today-date="2026-08-22" invalid></sui-date-picker> <sui-date-picker id="dp-off" label="Posted on" value="2026-08-01" today-date="2026-08-22" disabled></sui-date-picker> </div>

Read-only

readonly keeps the date readable but not typed over, opens no calendar, and the value still posts. A flat inline calendar shows its days and picks none.

<div style="display:grid;gap:14px;max-width:320px"> <sui-date-picker id="ro-sui-date-picker" label="Due date" name="sui-date-picker" value="2026-08-24" readonly required today-date="2026-08-22"></sui-date-picker> </div>

In a form

A single date posts the ISO string whatever the field format, and a range posts "start,end". A cleared picker posts an empty string, and a disabled one is barred from submission and posts nothing at all.

Submit to see what posts.
<form id="dp-form" style="display:grid;gap:14px;max-width:240px"> <sui-date-picker label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22"></sui-date-picker> <sui-date-picker id="dp-form-period" label="Reporting period" name="period" range today-date="2026-08-22"></sui-date-picker> <sui-button type="submit" variant="brand" label="Submit"></sui-button> <output id="dp-form-out" style="font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)">Submit to see what posts.</output> </form>
// setup(root): properties and events setup(root) { const form = root.querySelector('#dp-form'); const out = root.querySelector('#dp-form-out'); root.querySelector('#dp-form-period').value = ['2026-07-01', '2026-07-31']; form.addEventListener('submit', (e) => { e.preventDefault(); out.textContent = [...new FormData(form)].map(([k, v]) => `${k}=${v || '(empty)'}`).join(' '); }); }

Events

suiOpen fires after the element opens itself, suiMonthChange reports the month on show, and the cancelable suiClose fires before it closes and says why: escape, outside, trigger or pick. Here the listener refuses the first stray outside click with preventDefault and lets the next one through.

Idle. Showing August 2026.
<div style="display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap"> <div style="width:240px"><sui-date-picker id="dp-events" label="Invoice date" name="issued" value="2026-08-08" today-date="2026-08-22"></sui-date-picker></div> <div style="display:grid;gap:6px;font:460 13px/1.6 var(--font-sans);color:var(--ink-muted)"> <span id="dp-log">Idle.</span> <span id="dp-log-month">Showing August 2026.</span> </div> </div>
// setup(root): properties and events setup(root) { const el = root.querySelector('#dp-events'); const log = root.querySelector('#dp-log'); const monthLog = root.querySelector('#dp-log-month'); const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; let vetoed = false; el.addEventListener('suiOpen', () => { vetoed = false; log.textContent = 'suiOpen. Calendar open.'; }); el.addEventListener('suiClose', (e) => { if (e.detail === 'outside' && !vetoed) { vetoed = true; e.preventDefault(); log.textContent = 'suiClose (outside) vetoed with preventDefault. Click outside again to let it close.'; return; } log.textContent = `suiClose (${e.detail}).`; }); el.addEventListener('suiChange', (e) => { log.textContent = e.detail ? `suiChange ${e.detail}.` : 'suiChange cleared.'; }); el.addEventListener('suiMonthChange', (e) => { monthLog.textContent = `suiMonthChange showing ${months[e.detail.month]} ${e.detail.year}.`; }); }

Keyboard

KeyAction
ArrowDown ArrowUpIn the field, opens the calendar and focuses the selected day, or today. In the grid, moves a week. In the time column, moves a row.
ArrowLeft ArrowRightIn the grid, moves a day. Under dir="rtl" the pair swaps, so the arrow that points along the reading direction is always the forward one.
Home EndIn the grid, moves to the first or the last day of the month. In the time column, moves to the first or the last time.
PageUp PageDownMoves a month.
Shift+PageUp Shift+PageDownMoves a year.
EnterIn the field, commits the typed date and closes an open calendar; with it closed, the form submits as after any text field. In a range field or on the chevron, opens or closes the calendar. In the grid, picks the focused day; a single pick closes the calendar, unless show-time keeps it open for the time. In the time column, picks the focused time and closes the calendar.
SpaceIn the grid, picks the focused day, and in the time column the focused time. On the chevron, opens or closes the calendar.
EscapeCloses the calendar and returns focus to the field.
TabFrom the field, moves to the chevron; Tab from the chevron, or Shift+Tab from the field, closes the calendar. Inside the open calendar, moves through the month arrows, the day grid, the time column with show-time, then Today (Now with show-time) and Clear. Tab past the last of them closes the calendar and moves on to the control after the picker; Shift+Tab from the first closes it and lands on the chevron.

API

<sui-date-picker>

Properties

PropertyAttributeTypeDefaultDescription
dateFormatdate-formatSuiDateFormat"full" | "long" | "medium" | "short"'medium'How the field spells the date, as one of the Intl dateStyle names: short (8/8/26), medium (Aug 8, 2026), long (August 8, 2026) or full (Saturday, August 8, 2026), each in the locale's own order and words. Typed entry is read against the same style, and ISO 2026-08-08 always parses. With showTime the locale adds the time in its own way (Aug 8, 2026, 2:30 PM), on the hourFormat clock.
disableddisabledbooleanfalseDisables the trigger. A disabled control posts nothing and never holds the form.
disabledDatesproperty onlySuiDateInput[]SuiDateInput[] | undefinedIndividual days that cannot be picked (holidays, days already booked). Property, not attribute.
disabledDaysproperty onlynumber[]number[] | undefinedWeekdays that cannot be picked, 0 Sunday to 6 Saturday ([0, 6] bars weekends). Property, not attribute.
errorerrorstringstring | undefinedError message; paints the field in the danger tone.
firstDayOfWeekfirst-day-of-weeknumbernumber | undefinedFirst column of the calendar, 0 Sunday to 6 Saturday; 1 starts the week on Monday. Unset, it comes from the locale: Sunday in en-US, Monday in de-DE.
helphelpstringstring | undefinedHelp text under the field. Replaced by error when set.
hourFormathour-formatSuiTimeFormat"12" | "24" | undefinedClock for the time with showTime: "12" (2:30 PM) or "24" (14:30), the same prop sui-time-picker takes. Unset, the locale's own clock: 12-hour in en-US, 24-hour in de-DE. The value stays HH:mm on either clock.
inlineinlinebooleanfalseRenders the calendar flat with no field (always visible, no shadow).
invalidinvalidbooleanfalseDanger border without a message.
labellabelstringstring | undefinedLabel above the field; also names the calendar dialog.
localelocalestringstring | undefinedBCP 47 tag ("en-US", "de-DE", "ja-JP") for the field text, the month heading, the weekday heads, the words a typed date may use, and the default clock and first day. Unset, the page's locale (setLocale() or <html lang>), else en-US; never the browser's, so a screen reads the same on every machine. A tag the runtime does not know falls back to en-US.
maxDatemax-dateSuiDateInputDate | string | undefinedLatest selectable day; later days are barred and the forward arrow stops there. With showTime, a bound with a time of day also bars the later times of that day.
maxTimemax-timestringstring | undefinedLatest time of day with showTime, e.g. "6:00 PM" or "18:00". Unset, the day runs to 11:59 PM.
minDatemin-dateSuiDateInputDate | string | undefinedEarliest selectable day; earlier days are barred and the back arrow stops there. With showTime, a bound with a time of day ("2026-08-08T09:00", or a Date) also bars the earlier times of that day; a bare date bounds the whole day.
minTimemin-timestringstring | undefinedEarliest time of day with showTime, e.g. "8:00 AM" or "08:00"; earlier times are not listed and a typed one is refused. Unset, the day starts at midnight.
namenamestringstring | undefinedForm control name. Posts the ISO date, YYYY-MM-DDTHH:mm with showTime, or start,end in range mode; an empty picker posts an empty string and a disabled one posts nothing. Reflected: entry construction reads the content attribute, and the three framework bindings set props, so an unreflected name would post nothing.
openopenbooleanfalseOpens the panel. Mutable; the element closes itself on pick, outside pointer, Escape and Tab out of the calendar.
placeholderplaceholderstringstring | undefinedField text while nothing is picked.
presetsproperty onlySuiDatePreset[]SuiDatePreset[] | undefinedReport ranges shown in a column left of the calendar (range mode). Property, not attribute.
rangerangebooleanfalseTwo clicks pick a start and an end date. The field is read-only in range mode; typing is for single dates. A range is whole days: showTime does nothing here.
readOnlyreadonlybooleanfalseDisplay only: the date can be read and copied but not typed over, the calendar opens nothing (a flat inline calendar shows its days and picks none), and the value still posts. Neither a read-only nor a disabled picker holds the form on valueMissing.
requiredrequiredbooleanfalseA date must be picked for the surrounding form to be valid. A disabled picker never holds the form, since the user could not open it.
showTimeshow-timebooleanfalseAdds a time of day: a column of times beside the calendar, the time in the field, and a value of YYYY-MM-DDTHH:mm. Picking a day keeps the time and leaves the calendar open; picking a time keeps the day and closes it. A day picked before any time starts at the window's first minute. The footer's Today becomes Now. Single dates only; a range stays whole days.
sizesize"lg" | "md" | "sm"'md'Field height: sm 28, md 34 (default), lg 42, from the --control-* tokens, the same three the rest of the control family takes. The calendar keeps its own metrics, and an inline picker has no field to size. In the quiet variant it is the height of the box that paints on hover and while the field is in use; the text keeps the surrounding font.
timeSteptime-stepnumber30Minutes between the rows of the time column with showTime, counted from minTime. A time off the step is typed into the field.
todayDatetoday-dateSuiDateInputDate | string | undefinedPins "today" (the orange dot, the Today link and the two-digit year pivot) for demos and tests, e.g. "2026-08-22". With showTime, a time on it ("2026-08-22T10:05") pins the Now link too; without one, Now takes the clock's time on the pinned day.
tonetone"inverse" | undefinedInk for the quiet variant on the brand chrome. inverse takes the inverse inks, the inverse hover wash and the inverse focus colour, as sui-button's tone of the same name does, so the value reads on a tone="brand" toolbar. Opening the field shows its shell in the card's own inks. The default variant ignores it.
valuevalueSuiDateValueDate | SuiDateInput[] | string | undefinedSelected date, or [start, end] when range. Accepts ISO strings ("2026-08-08"), Dates, or an array of either. Mutable; the element writes ISO strings back before suiChange fires. The field shows the date in the dateFormat and locale spelling, and a range joins its two dates with an en dash. With showTime the value is a local date and time, "2026-08-08T14:30" as <input type="datetime-local"> has it: wall-clock time with no zone, so the host converts to and from UTC. A bare date reads as midnight, and a Z or offset on the string is not applied.
variantvariant"default" | "quiet"'default'default draws the field shell. quiet draws the date as text in the surrounding font, with the calendar glyph before it and no border or fill at rest, for a record's properties column: the fill comes on hover, and the shell while the field has focus or the calendar is open, since a focused text field is one being typed into. The label is not drawn but still names the field, so the host prints the property name. Typing, the keyboard, events, validation and the form post are the same in both. The inline attribute is the flat calendar, which has no field, so variant does nothing there. Anything else falls back to default.

Events

EventDetailReactVueDescription
suiChangestring | string[]onSuiChange@sui-changeFires when a date commits, by pick or by typed entry on Enter or blur; detail is the ISO string (YYYY-MM-DDTHH:mm with showTime; "" after clear or an entry that does not parse), or [start, end] ISO strings in range mode ([] after clear).
suiCloseSuiCloseReason"cancel" | "close-button" | "escape" | "outside" | "pick" | "scrim" | "trigger"onSuiClose@sui-closeFires before the element closes the panel itself; detail is 'escape' | 'outside' | 'trigger' | 'pick'. Tab out of the calendar reports 'outside', because focus left the control. Cancelable: preventDefault() keeps it open. Does not bubble: a preventDefault() in a dialog's own suiClose listener cannot veto this one.
suiMonthChangeSuiDateViewDetailonSuiMonthChange@sui-month-changeFires when the calendar shows a different month, so a host can fetch that month's availability. Does not bubble: it reports the calendar's view, not the value.
suiOpenvoidonSuiOpen@sui-openFires after the element opens the panel itself. Does not bubble, so a dialog around the picker never takes it for its own.

Methods

MethodSignatureDescription
setFocus()setFocus() => Promise<void>Moves keyboard focus to the field (or the focused day when inline).

Types

SuiCloseReason typeWhy a dismissible surface is closing. Detail of the cancelable suiClose. A consumer expresses "a stray backdrop click must not close this" by calling preventDefault() on the reason it does not accept, which is why none of these needs a prop of its own.
No members.
SuiDateFormat typeThe four Intl dateStyle names the field text can take.
No members.
SuiDateInput typeA date as an ISO YYYY-MM-DD string (any string new Date accepts also works) or a Date. With showTime, a local YYYY-MM-DDTHH:mm.
No members.
SuiDatePreset interfaceReport preset: a labeled [start, end] range (This month, Last quarter, Year to date).
labelstring
range[SuiDateInput, SuiDateInput]
SuiDateStyle typeThe four Intl dateStyle names: short 8/8/26, medium Aug 8, 2026, long August 8, 2026, full Saturday, August 8, 2026 (en-US).
No members.
SuiDateValue typeSingle date, or [start, end] in range mode. The element writes ISO strings back.
No members.
SuiDateViewDetail interfaceDetail of suiMonthChange: the month on show. month is 0-based, as Date.getMonth() is.
yearnumber
monthnumber
SuiTimeFormat typeClock display: 2:30 PM or 14:30.
No members.

Theming

Every design token this element can render with, read from its own stylesheets and the ones it imports. Set a token on :root or on any ancestor and every use below follows it. The values shown are the ones in the theme you are viewing. The list is read per stylesheet, so an element that imports a shared drawing module lists that module's tokens too, whether or not it paints with all of them.

Color27

--accentthe one chart highlight: the flagged series, down candles, the peak cell--bordercard + table outer borders--brand--brand-contrasttext and glyphs sitting on solid brand fills--brand-softnavy 10% on white, quiet chips, selected rows--brand-soft-ink--control-borderthe resting edge of every field and control: 3:1 on its grounds--danger--disabled-bg--disabled-ink--focus-halo--focus-ring--hairlinerow separators--ink--ink-faintmetadata beside body ink: 4.8:1 on the page grounds (5.4:1 in dark)--ink-inverse--ink-inverse-faint--ink-inverse-muted--ink-mutedsecondary text: 7:1 on the page grounds and 1.5 times faint--ink-muted-on-washthe muted ink a selected, current or pressed row paints: 4.5:1 on that wash--ink-placeholdera field's placeholder, not a text tier: 4.5:1 on the page grounds--link--surfacecards, tables, inputs--surface-hovera hovered row or quiet control on any ground: the ink, translucent--surface-raisedmenus, popovers, toasts: the card in light, a step above it in dark--surface-selecteda selected row or option: the primary's hue, always heavier than a hover--surface-sunkentable headers, wells

Typography1

Ag--font-sans

Spacing and size5

42--control-lgform-page inputs34--control-mdDEFAULT toolbar/filter controls12--control-pad-x28--control-sm700--z-dropdown

Radius4

--radius-lgcards, tables, panels, dialogs--radius-mdALL controls: inputs, buttons, selects--radius-smlegend keys, small chips--radius-xscheckboxes, mini swatches

Elevation2

--focus-shadow--shadow-popdropdowns, popovers, toasts

Motion3

--duration-fasthovers, presses, every exit--duration-overlayevery entrance: palette, popover, dialog, drawer, toast, menu, select list--ease-out

Every name above is listed with its value and its role in Foundations.

See also