Date Time Input
DateInput + TimeInput fused into one segmented field sharing a single Date value, for the common "when exactly" case (appointments, deadlines, scheduled posts) without stitching two widgets together yourself.
Real use · schedule a post (type or paste 'e.g. 7/8/2026 2:30 PM')
Wed Jul 08 2026 14:30:00 GMT+0000 (Coordinated Universal Time)
24h + seconds, min bound to now
Sizes / disabled
Using Date Time Input
Silica ships one design system through three paths. They share a class vocabulary but are not interchangeable — pick the one that matches what you are building.
React
Typed components over those same classes, with behavior and accessibility from Base UI.
npm i @wizeworks/silicaui-reactimport { DateTimeInput } from "@wizeworks/silicaui-react";Props
| Prop | Type | Required | Description |
|---|---|---|---|
| value | Date | null | no | Controlled value — a full Date (date + time together). null clears the field. |
| defaultValue | Date | null | no | — |
| onValueChange | (value: Date | null) => void | no | Fires once every segment (date + time, + AM/PM in 12h mode) is filled; null while incomplete/cleared. |
| min | Date | no | — |
| max | Date | no | — |
| hourCycle | 12 | 24 | no | 12 or 24. Default: derived from locale. |
| showSeconds | boolean | no | — |
| locale | string | no | — |
| disabled | boolean | no | — |
| color | DateTimeInputColor | no | — |
| size | DateTimeInputSize | no | — |
| className | string | no | — |
| id | string | no | — |
| "aria-label" | string | no | — |
Source of the demo above
The exact file that renders the examples above, so it can never drift from them. It imports a few of this site’s own layout helpers (../lib/…), so read it for the component calls rather than copying it whole.
Show source
import { useState } from "react";
import { DateTimeInput } from "@wizeworks/silicaui-react";
import { Section, Row } from "../lib/Section";
export function DateTimeInputDemo() {
const [when, setWhen] = useState<Date | null>(new Date(2026, 6, 8, 14, 30));
return (
<>
<Section title="Real use · schedule a post (type or paste 'e.g. 7/8/2026 2:30 PM')">
<DateTimeInput value={when} onValueChange={setWhen} color="primary" />
<p className="mt-2 text-sm opacity-70">
{when ? when.toString() : "No date/time"}
</p>
</Section>
<Section title="24h + seconds, min bound to now">
<DateTimeInput hourCycle={24} showSeconds min={new Date()} />
</Section>
<Section title="Sizes / disabled">
<Row>
<DateTimeInput size="sm" defaultValue={new Date(2026, 6, 8, 9, 0)} />
<DateTimeInput size="lg" defaultValue={new Date(2026, 6, 8, 9, 0)} />
<DateTimeInput disabled defaultValue={new Date(2026, 6, 8, 9, 0)} />
</Row>
</Section>
</>
);
}Vanilla — node tree to HTML
The framework-neutral form of Date Time Input. Build a node tree, project it with toHtml(), and let the zero-dependency runtime hydrate it. This is the path for generated or user-authored documents — a site builder, CMS output, a static export.
npm i @wizeworks/silicaui-html @wizeworks/silicaui-behaviorsimport { atom, toHtml } from "@wizeworks/silicaui-html";
const node = atom("DateTimeInput", undefined, { /* props */ });
const markup = toHtml(node);Styling on this path is the class string in the second argument — the same classes as the Plain HTML section above. There is no color prop here; write "… …-primary" rather than passing a colour as a prop.
- Takes children
- no
- Hydrated by
date-segment
Load @wizeworks/silicaui-behaviors on the page or this markup renders correctly and does nothing.
The full API for Date Time Input, on every path, is available through the Silica MCP server.