@adia-ai/web-components 0.6.32 → 0.6.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/components/accordion/accordion.css +2 -2
- package/components/action-list/action-list.css +2 -2
- package/components/agent-artifact/agent-artifact.css +31 -31
- package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
- package/components/agent-questions/agent-questions.css +57 -57
- package/components/agent-reasoning/agent-reasoning.css +62 -62
- package/components/agent-suggestions/agent-suggestions.css +4 -4
- package/components/agent-trace/agent-trace.css +53 -53
- package/components/alert/alert.css +41 -41
- package/components/avatar/avatar.css +27 -27
- package/components/badge/badge.css +27 -27
- package/components/block/block.css +16 -16
- package/components/breadcrumb/breadcrumb.css +23 -23
- package/components/button/button.css +101 -91
- package/components/calendar-grid/calendar-grid.a2ui.json +136 -0
- package/components/calendar-grid/calendar-grid.css +226 -0
- package/components/calendar-grid/calendar-grid.d.ts +37 -0
- package/components/calendar-grid/calendar-grid.js +17 -0
- package/components/calendar-grid/calendar-grid.yaml +116 -0
- package/components/calendar-grid/class.js +300 -0
- package/components/calendar-picker/calendar-picker.css +139 -139
- package/components/canvas/canvas.css +12 -12
- package/components/card/card.css +83 -83
- package/components/chart/chart.css +224 -224
- package/components/chart-legend/chart-legend.css +26 -26
- package/components/check/check.css +40 -40
- package/components/code/code.css +125 -125
- package/components/col/col.css +15 -15
- package/components/color-picker/color-picker.css +55 -55
- package/components/combobox/class.js +861 -0
- package/components/combobox/combobox.a2ui.json +363 -0
- package/components/combobox/combobox.css +244 -0
- package/components/combobox/combobox.d.ts +113 -0
- package/components/combobox/combobox.examples.md +59 -0
- package/components/combobox/combobox.js +17 -0
- package/components/combobox/combobox.test.js +181 -0
- package/components/combobox/combobox.yaml +369 -0
- package/components/command/command.css +90 -90
- package/components/date-range-picker/class.js +775 -0
- package/components/date-range-picker/date-range-picker.a2ui.json +300 -0
- package/components/date-range-picker/date-range-picker.css +178 -0
- package/components/date-range-picker/date-range-picker.d.ts +82 -0
- package/components/date-range-picker/date-range-picker.examples.md +37 -0
- package/components/date-range-picker/date-range-picker.js +17 -0
- package/components/date-range-picker/date-range-picker.test.js +387 -0
- package/components/date-range-picker/date-range-picker.yaml +285 -0
- package/components/datetime-picker/class.js +706 -0
- package/components/datetime-picker/datetime-picker.a2ui.json +334 -0
- package/components/datetime-picker/datetime-picker.css +150 -0
- package/components/datetime-picker/datetime-picker.d.ts +86 -0
- package/components/datetime-picker/datetime-picker.examples.md +46 -0
- package/components/datetime-picker/datetime-picker.js +17 -0
- package/components/datetime-picker/datetime-picker.test.js +454 -0
- package/components/datetime-picker/datetime-picker.yaml +332 -0
- package/components/demo-toggle/demo-toggle.css +27 -27
- package/components/description-list/description-list.css +18 -18
- package/components/divider/divider.css +24 -24
- package/components/embed/embed.css +6 -6
- package/components/empty-state/empty-state.css +27 -27
- package/components/feed/feed.css +12 -12
- package/components/field/field.css +37 -28
- package/components/field/field.test.js +32 -0
- package/components/fields/fields.css +5 -5
- package/components/grid/grid.css +5 -5
- package/components/heatmap/heatmap.css +63 -63
- package/components/icon/icon.css +12 -12
- package/components/image/image.css +14 -14
- package/components/index.js +8 -0
- package/components/input/input.css +66 -66
- package/components/inspector/inspector.css +6 -6
- package/components/integration-card/class.js +410 -0
- package/components/integration-card/integration-card.a2ui.json +268 -0
- package/components/integration-card/integration-card.css +169 -0
- package/components/integration-card/integration-card.d.ts +63 -0
- package/components/integration-card/integration-card.examples.md +41 -0
- package/components/integration-card/integration-card.js +17 -0
- package/components/integration-card/integration-card.test.js +306 -0
- package/components/integration-card/integration-card.yaml +280 -0
- package/components/kbd/kbd.css +32 -32
- package/components/link/link.css +12 -12
- package/components/list/list.css +8 -8
- package/components/list-window/class.js +688 -0
- package/components/list-window/list-window.a2ui.json +277 -0
- package/components/list-window/list-window.css +124 -0
- package/components/list-window/list-window.d.ts +84 -0
- package/components/list-window/list-window.examples.md +73 -0
- package/components/list-window/list-window.js +17 -0
- package/components/list-window/list-window.test.js +303 -0
- package/components/list-window/list-window.yaml +270 -0
- package/components/menu/menu.css +8 -8
- package/components/modal/modal.css +43 -43
- package/components/nav/nav.css +40 -40
- package/components/nav-group/nav-group.css +52 -52
- package/components/nav-item/nav-item.css +44 -44
- package/components/noodles/noodles.css +31 -31
- package/components/option-card/option-card.css +69 -69
- package/components/otp-input/otp-input.css +30 -30
- package/components/page/page.css +18 -18
- package/components/pagination/pagination.css +61 -61
- package/components/pane/pane.css +57 -57
- package/components/pipeline-status/pipeline-status.css +65 -65
- package/components/popover/popover.css +17 -17
- package/components/progress/progress.css +23 -23
- package/components/progress-row/progress-row.css +17 -17
- package/components/radio/radio.css +39 -39
- package/components/range/range.css +55 -55
- package/components/rating/rating.css +28 -28
- package/components/richtext/richtext.css +133 -133
- package/components/row/row.css +19 -19
- package/components/search/search.css +5 -5
- package/components/segment/segment.css +24 -24
- package/components/segmented/segmented.css +25 -25
- package/components/select/select.css +84 -84
- package/components/skeleton/skeleton.css +14 -14
- package/components/slider/slider.css +46 -46
- package/components/spinner/class.js +69 -0
- package/components/spinner/spinner.a2ui.json +197 -0
- package/components/spinner/spinner.css +165 -0
- package/components/spinner/spinner.d.ts +26 -0
- package/components/spinner/spinner.examples.md +26 -0
- package/components/spinner/spinner.js +17 -0
- package/components/spinner/spinner.test.js +234 -0
- package/components/spinner/spinner.yaml +230 -0
- package/components/stack/stack.css +11 -11
- package/components/stat/stat.css +25 -25
- package/components/step-progress/step-progress.css +20 -20
- package/components/stepper/stepper.css +29 -29
- package/components/stream/stream.css +12 -12
- package/components/swatch/swatch.css +68 -68
- package/components/swiper/swiper.css +57 -57
- package/components/switch/switch.css +52 -52
- package/components/table/class.js +9 -0
- package/components/table/table.a2ui.json +1 -1
- package/components/table/table.css +162 -162
- package/components/table/table.d.ts +1 -1
- package/components/table/table.test.js +53 -0
- package/components/table/table.yaml +13 -1
- package/components/table-toolbar/table-toolbar.css +32 -32
- package/components/tabs/tabs.css +51 -51
- package/components/tag/tag.css +48 -48
- package/components/text/text.css +44 -44
- package/components/textarea/textarea.css +46 -46
- package/components/time-picker/class.js +693 -0
- package/components/time-picker/time-picker.a2ui.json +267 -0
- package/components/time-picker/time-picker.css +122 -0
- package/components/time-picker/time-picker.d.ts +75 -0
- package/components/time-picker/time-picker.examples.md +35 -0
- package/components/time-picker/time-picker.js +17 -0
- package/components/time-picker/time-picker.test.js +287 -0
- package/components/time-picker/time-picker.yaml +256 -0
- package/components/timeline/timeline.css +50 -50
- package/components/toast/toast.css +58 -58
- package/components/toggle-group/toggle-group.css +6 -6
- package/components/toggle-scheme/toggle-scheme.css +2 -2
- package/components/toolbar/toolbar.css +17 -17
- package/components/tooltip/tooltip.css +2 -2
- package/components/tree/tree.css +37 -37
- package/components/upload/upload.css +49 -49
- package/dist/icons-manifest.js +3 -3
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +121 -83
- package/package.json +1 -1
- package/styles/components.css +8 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
$schema: ../../../../scripts/schemas/component.yaml.schema.json
|
|
2
|
+
name: UIDatetimePicker
|
|
3
|
+
tag: datetime-picker-ui
|
|
4
|
+
status: experimental
|
|
5
|
+
component: DatetimePicker
|
|
6
|
+
category: input
|
|
7
|
+
version: 1
|
|
8
|
+
description: >-
|
|
9
|
+
Single-control date + time selection. Trigger button opens a popover
|
|
10
|
+
with a `<calendar-picker-ui>` on the left + a `<time-picker-ui>` on
|
|
11
|
+
the right; commit emits a full ISO 8601 datetime string
|
|
12
|
+
("YYYY-MM-DDTHH:mm" or with seconds). Composes the two underlying
|
|
13
|
+
primitives — never wraps a native `<input type="datetime-local">`
|
|
14
|
+
(per ADR-0025). Form-associated under one `name`. SPEC-038.
|
|
15
|
+
# Per ADR-0027 — primitives that programmatically create other primitives
|
|
16
|
+
# do NOT auto-import them. Consumer (or demo shell) must explicitly import
|
|
17
|
+
# the calendar-picker, time-picker, button, popover, divider modules.
|
|
18
|
+
composes:
|
|
19
|
+
- calendar-grid-ui # the date pane — substrate primitive
|
|
20
|
+
- time-picker-ui # the time pane (SPEC-043)
|
|
21
|
+
- button-ui # default trigger + optional footer actions
|
|
22
|
+
- popover-ui # the floating panel
|
|
23
|
+
- divider-ui # separator between panes
|
|
24
|
+
props:
|
|
25
|
+
name:
|
|
26
|
+
description: Form field name. The ISO 8601 datetime is submitted under this key when the picker is inside a `<form>`.
|
|
27
|
+
type: string
|
|
28
|
+
default: ''
|
|
29
|
+
reflect: true
|
|
30
|
+
value:
|
|
31
|
+
description: 'Current value as ISO 8601 datetime ("YYYY-MM-DDTHH:mm" or "YYYY-MM-DDTHH:mm:ss"). Empty when no value selected.'
|
|
32
|
+
type: string
|
|
33
|
+
default: ''
|
|
34
|
+
dynamic: true
|
|
35
|
+
min:
|
|
36
|
+
description: Earliest selectable ISO 8601 datetime (inclusive). Days before are disabled in the calendar pane; times before are rejected by the time pane on the same day.
|
|
37
|
+
type: string
|
|
38
|
+
default: ''
|
|
39
|
+
reflect: true
|
|
40
|
+
max:
|
|
41
|
+
description: Latest selectable ISO 8601 datetime (inclusive). Days after are disabled in the calendar pane; times after are rejected by the time pane on the same day.
|
|
42
|
+
type: string
|
|
43
|
+
default: ''
|
|
44
|
+
reflect: true
|
|
45
|
+
step:
|
|
46
|
+
description: Per-Arrow-keypress increment in seconds for the time pane. 60 = minute precision (default), 900 = 15-minute, 1 = second precision.
|
|
47
|
+
type: number
|
|
48
|
+
default: 60
|
|
49
|
+
reflect: true
|
|
50
|
+
precision:
|
|
51
|
+
description: Time-pane precision. `minute` (default) emits `HH:mm`; `second` exposes the seconds segment and emits `HH:mm:ss`.
|
|
52
|
+
type: string
|
|
53
|
+
default: minute
|
|
54
|
+
enum:
|
|
55
|
+
- minute
|
|
56
|
+
- second
|
|
57
|
+
reflect: true
|
|
58
|
+
hourcycle:
|
|
59
|
+
description: |
|
|
60
|
+
Hour cycle for the time pane. Empty (default) derives from the
|
|
61
|
+
document locale. `h12` forces a 12-hour cycle with an AM/PM
|
|
62
|
+
(meridiem) segment; `h23` forces 24-hour cycle.
|
|
63
|
+
type: string
|
|
64
|
+
default: ''
|
|
65
|
+
enum:
|
|
66
|
+
- ''
|
|
67
|
+
- h12
|
|
68
|
+
- h23
|
|
69
|
+
reflect: true
|
|
70
|
+
attribute: hour-cycle
|
|
71
|
+
disabled:
|
|
72
|
+
description: Block all interaction. Trigger remains rendered but does not open the popover.
|
|
73
|
+
type: boolean
|
|
74
|
+
default: false
|
|
75
|
+
reflect: true
|
|
76
|
+
readonly:
|
|
77
|
+
description: Block edits; allow keyboard navigation for screen-reader inspection.
|
|
78
|
+
type: boolean
|
|
79
|
+
default: false
|
|
80
|
+
reflect: true
|
|
81
|
+
required:
|
|
82
|
+
description: Required for validation when inside a `<form>`.
|
|
83
|
+
type: boolean
|
|
84
|
+
default: false
|
|
85
|
+
reflect: true
|
|
86
|
+
open:
|
|
87
|
+
description: Whether the popover is currently open.
|
|
88
|
+
type: boolean
|
|
89
|
+
default: false
|
|
90
|
+
reflect: true
|
|
91
|
+
placeholder:
|
|
92
|
+
description: Text shown in the trigger when the value is empty.
|
|
93
|
+
type: string
|
|
94
|
+
default: Select date and time
|
|
95
|
+
format:
|
|
96
|
+
description: 'Trigger button date format. `short`: `Jan 1, 2026 14:30`; `long`: `January 1, 2026 14:30`; `iso`: full ISO string.'
|
|
97
|
+
type: string
|
|
98
|
+
default: short
|
|
99
|
+
enum:
|
|
100
|
+
- short
|
|
101
|
+
- long
|
|
102
|
+
- iso
|
|
103
|
+
locale:
|
|
104
|
+
description: BCP-47 locale tag used to derive hour-cycle when `hour-cycle` is empty. Falls back to `<html lang>` then to browser default.
|
|
105
|
+
type: string
|
|
106
|
+
default: ''
|
|
107
|
+
events:
|
|
108
|
+
change:
|
|
109
|
+
description: Fired when the value commits (date picked + time edited, OR Apply clicked in explicit-commit mode).
|
|
110
|
+
detail:
|
|
111
|
+
value: string
|
|
112
|
+
source: string
|
|
113
|
+
input:
|
|
114
|
+
description: Fired during partial selection (date picked but time still pending, or vice versa).
|
|
115
|
+
detail:
|
|
116
|
+
value: string
|
|
117
|
+
open:
|
|
118
|
+
description: Popover opened (user clicked the trigger or pressed Enter / Space).
|
|
119
|
+
detail:
|
|
120
|
+
trigger: string
|
|
121
|
+
close:
|
|
122
|
+
description: Popover closed (without commit, or after commit).
|
|
123
|
+
detail:
|
|
124
|
+
reason: string
|
|
125
|
+
invalid:
|
|
126
|
+
description: A constraint failed (out of range, parse error).
|
|
127
|
+
detail:
|
|
128
|
+
value: string
|
|
129
|
+
reason: string
|
|
130
|
+
slots:
|
|
131
|
+
trigger:
|
|
132
|
+
description: Custom trigger replacement. When omitted, a default `<button-ui>` is stamped.
|
|
133
|
+
footer:
|
|
134
|
+
description: Optional Apply / Cancel buttons for explicit-commit flows. Spans both panes below the calendar + time area.
|
|
135
|
+
states:
|
|
136
|
+
- name: idle
|
|
137
|
+
description: Closed, no pending selection.
|
|
138
|
+
- name: open-pending-date
|
|
139
|
+
description: Popover open, no calendar pick yet.
|
|
140
|
+
attribute: open
|
|
141
|
+
- name: open-pending-time
|
|
142
|
+
description: Date picked; time pane is the next focus target.
|
|
143
|
+
attribute: open
|
|
144
|
+
- name: open-committed
|
|
145
|
+
description: Both panes set; awaiting Apply (explicit-commit mode only).
|
|
146
|
+
attribute: open
|
|
147
|
+
- name: disabled
|
|
148
|
+
description: Non-interactive; dimmed.
|
|
149
|
+
attribute: disabled
|
|
150
|
+
- name: readonly
|
|
151
|
+
description: Read-only; trigger keyboard-focusable but popover does not open.
|
|
152
|
+
attribute: readonly
|
|
153
|
+
traits: []
|
|
154
|
+
tokens:
|
|
155
|
+
--datetime-picker-bg:
|
|
156
|
+
description: Host background.
|
|
157
|
+
default: var(--a-bg)
|
|
158
|
+
--datetime-picker-fg:
|
|
159
|
+
description: Host text color.
|
|
160
|
+
default: var(--a-fg)
|
|
161
|
+
--datetime-picker-popover-bg:
|
|
162
|
+
description: Popover background.
|
|
163
|
+
default: var(--a-bg-subtle)
|
|
164
|
+
--datetime-picker-popover-border:
|
|
165
|
+
description: Popover border color.
|
|
166
|
+
default: var(--a-border-subtle)
|
|
167
|
+
--datetime-picker-popover-radius:
|
|
168
|
+
description: Popover border radius.
|
|
169
|
+
default: var(--a-radius-lg)
|
|
170
|
+
--datetime-picker-popover-shadow:
|
|
171
|
+
description: Popover box shadow.
|
|
172
|
+
default: var(--a-shadow-lg)
|
|
173
|
+
--datetime-picker-popover-padding:
|
|
174
|
+
description: Popover internal padding.
|
|
175
|
+
default: var(--a-space-3)
|
|
176
|
+
--datetime-picker-popover-gap:
|
|
177
|
+
description: Gap between calendar pane and time pane.
|
|
178
|
+
default: var(--a-space-3)
|
|
179
|
+
--datetime-picker-divider:
|
|
180
|
+
description: Pane divider color.
|
|
181
|
+
default: var(--a-border-subtle)
|
|
182
|
+
--datetime-picker-trigger-min-width:
|
|
183
|
+
description: Default trigger min-width — sized so the formatted date+time fits without truncation.
|
|
184
|
+
default: 16em
|
|
185
|
+
--datetime-picker-px:
|
|
186
|
+
description: Horizontal popover padding.
|
|
187
|
+
default: var(--a-space-3)
|
|
188
|
+
--datetime-picker-py:
|
|
189
|
+
description: Vertical popover padding.
|
|
190
|
+
default: var(--a-space-2)
|
|
191
|
+
--datetime-picker-duration:
|
|
192
|
+
description: Open/close transition duration.
|
|
193
|
+
default: var(--a-duration-fast)
|
|
194
|
+
--datetime-picker-easing:
|
|
195
|
+
description: Open/close transition easing.
|
|
196
|
+
default: var(--a-easing)
|
|
197
|
+
requiredIcons:
|
|
198
|
+
- calendar
|
|
199
|
+
- clock
|
|
200
|
+
- caret-down
|
|
201
|
+
a2ui:
|
|
202
|
+
rules:
|
|
203
|
+
- rule: '`DatetimePicker.value` MUST be ISO 8601 datetime (`YYYY-MM-DDTHH:mm` or `YYYY-MM-DDTHH:mm:ss`) OR empty string. Date-only or time-only strings fire `invalid`.'
|
|
204
|
+
reason: 'Datetime contract — both halves must be present (or both empty).'
|
|
205
|
+
- rule: '`precision: "second"` requires the value to include seconds when set; missing seconds are coerced to `:00` on commit.'
|
|
206
|
+
reason: 'Precision contract.'
|
|
207
|
+
- rule: '`min` and `max` MUST be parseable ISO 8601 datetimes if non-empty. If `value` falls outside, `invalid` fires and the value does not commit.'
|
|
208
|
+
reason: 'Constraint contract.'
|
|
209
|
+
- rule: '`hour-cycle` overrides the locale-derived cycle in the time pane. Set explicitly when the surface needs a specific cycle (cron editors, log queries, system surfaces).'
|
|
210
|
+
reason: 'Hour-cycle override contract.'
|
|
211
|
+
- rule: 'Use DatetimePicker for combined date+time. Do NOT compose `<calendar-picker-ui>` + a free-form `<input-ui>` manually as an alternative — that is the pattern this primitive replaces.'
|
|
212
|
+
reason: 'Adoption signal: prefer the canonical primitive over hand-rolled composition.'
|
|
213
|
+
- rule: 'Per ADR-0025 NEVER wrap a native `<input type="datetime-local">` — the calendar pane + time pane composition + ElementInternals together provide form participation.'
|
|
214
|
+
reason: 'No native form controls.'
|
|
215
|
+
anti_patterns:
|
|
216
|
+
- wrong: |
|
|
217
|
+
{"component": "DatetimePicker", "value": "2026-05-24"}
|
|
218
|
+
why: |
|
|
219
|
+
`value` is a date-only string — no time component. The contract requires
|
|
220
|
+
a full ISO 8601 datetime including the `T` and time segment.
|
|
221
|
+
fix: |
|
|
222
|
+
{"component": "DatetimePicker", "value": "2026-05-24T00:00"}
|
|
223
|
+
- wrong: |
|
|
224
|
+
{"component": "DatetimePicker", "value": "14:30"}
|
|
225
|
+
why: |
|
|
226
|
+
`value` is a time-only string — no date component. Use `<TimePicker>` for
|
|
227
|
+
time-only selection or supply the date portion.
|
|
228
|
+
fix: |
|
|
229
|
+
{"component": "DatetimePicker", "value": "2026-05-24T14:30"}
|
|
230
|
+
- wrong: |
|
|
231
|
+
{"component": "DatetimePicker", "children": [
|
|
232
|
+
{"component": "Input", "type": "datetime-local"}
|
|
233
|
+
]}
|
|
234
|
+
why: |
|
|
235
|
+
Nesting a native datetime-local input violates ADR-0025 and bypasses
|
|
236
|
+
ElementInternals form participation.
|
|
237
|
+
fix: |
|
|
238
|
+
{"component": "DatetimePicker", "name": "field-name"}
|
|
239
|
+
- wrong: |
|
|
240
|
+
<calendar-picker-ui></calendar-picker-ui>
|
|
241
|
+
<input-ui type="text" placeholder="HH:mm"></input-ui>
|
|
242
|
+
why: |
|
|
243
|
+
Hand-rolled date + free-form time composition is the pattern this primitive
|
|
244
|
+
replaces. It misses the coordinated popover, the per-segment Spinbutton
|
|
245
|
+
a11y model, and unified form participation.
|
|
246
|
+
fix: |
|
|
247
|
+
<datetime-picker-ui name="appointment"></datetime-picker-ui>
|
|
248
|
+
examples:
|
|
249
|
+
- name: canonical
|
|
250
|
+
description: Form-field-wrapped picker with min/max bounds.
|
|
251
|
+
a2ui: |
|
|
252
|
+
[
|
|
253
|
+
{
|
|
254
|
+
"id": "field",
|
|
255
|
+
"component": "Field",
|
|
256
|
+
"label": "Appointment",
|
|
257
|
+
"children": ["dt"]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"id": "dt",
|
|
261
|
+
"component": "DatetimePicker",
|
|
262
|
+
"name": "appointment",
|
|
263
|
+
"min": "2026-01-01T00:00",
|
|
264
|
+
"max": "2026-12-31T23:59"
|
|
265
|
+
}
|
|
266
|
+
]
|
|
267
|
+
- name: second-precision
|
|
268
|
+
description: Log-cursor picker with second precision.
|
|
269
|
+
a2ui: |
|
|
270
|
+
[
|
|
271
|
+
{
|
|
272
|
+
"id": "dt",
|
|
273
|
+
"component": "DatetimePicker",
|
|
274
|
+
"name": "log-cursor",
|
|
275
|
+
"precision": "second",
|
|
276
|
+
"step": 1,
|
|
277
|
+
"value": "2026-05-24T14:30:45"
|
|
278
|
+
}
|
|
279
|
+
]
|
|
280
|
+
- name: forced-24h
|
|
281
|
+
description: Cron editor with forced 24-hour cycle.
|
|
282
|
+
a2ui: |
|
|
283
|
+
[
|
|
284
|
+
{
|
|
285
|
+
"id": "dt",
|
|
286
|
+
"component": "DatetimePicker",
|
|
287
|
+
"name": "cron",
|
|
288
|
+
"hourCycle": "h23"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
- name: readonly
|
|
292
|
+
description: Read-only datetime for inspection only.
|
|
293
|
+
a2ui: |
|
|
294
|
+
[
|
|
295
|
+
{
|
|
296
|
+
"id": "dt",
|
|
297
|
+
"component": "DatetimePicker",
|
|
298
|
+
"readonly": true,
|
|
299
|
+
"value": "2026-05-24T14:30"
|
|
300
|
+
}
|
|
301
|
+
]
|
|
302
|
+
keywords:
|
|
303
|
+
- datetimepicker
|
|
304
|
+
- datetime-picker
|
|
305
|
+
- datetime
|
|
306
|
+
- date-time
|
|
307
|
+
- dateandtime
|
|
308
|
+
- appointment
|
|
309
|
+
- schedule
|
|
310
|
+
- timestamp
|
|
311
|
+
synonyms:
|
|
312
|
+
tags:
|
|
313
|
+
- DateTimePicker
|
|
314
|
+
- DateTimeInput
|
|
315
|
+
- DatetimeInput
|
|
316
|
+
- Timestamp
|
|
317
|
+
datetime:
|
|
318
|
+
- date-time
|
|
319
|
+
- timestamp
|
|
320
|
+
- appointment
|
|
321
|
+
- schedule
|
|
322
|
+
appointment:
|
|
323
|
+
- datetime
|
|
324
|
+
- meeting
|
|
325
|
+
- schedule
|
|
326
|
+
related:
|
|
327
|
+
- calendar-picker
|
|
328
|
+
- time-picker
|
|
329
|
+
- date-range-picker
|
|
330
|
+
- popover
|
|
331
|
+
- field
|
|
332
|
+
- button
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
@scope (demo-toggle-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
3
|
/* ── Layout ── */
|
|
4
|
-
--demo-toggle-radius: var(--a-radius-lg);
|
|
5
|
-
--demo-toggle-gap: var(--a-space-3);
|
|
6
|
-
--demo-toggle-stage-padding: var(--a-space-4);
|
|
7
|
-
--demo-toggle-bar-px: var(--a-space-3);
|
|
8
|
-
--demo-toggle-bar-py: var(--a-space-2);
|
|
4
|
+
--demo-toggle-radius-default: var(--a-radius-lg);
|
|
5
|
+
--demo-toggle-gap-default: var(--a-space-3);
|
|
6
|
+
--demo-toggle-stage-padding-default: var(--a-space-4);
|
|
7
|
+
--demo-toggle-bar-px-default: var(--a-space-3);
|
|
8
|
+
--demo-toggle-bar-py-default: var(--a-space-2);
|
|
9
9
|
|
|
10
10
|
/* ── Colors ── */
|
|
11
|
-
--demo-toggle-bg: var(--a-canvas-1);
|
|
12
|
-
--demo-toggle-border: var(--a-border);
|
|
13
|
-
--demo-toggle-bar-bg: var(--a-bg-muted);
|
|
14
|
-
--demo-toggle-bar-fg: var(--a-fg);
|
|
11
|
+
--demo-toggle-bg-default: var(--a-canvas-1);
|
|
12
|
+
--demo-toggle-border-default: var(--a-border);
|
|
13
|
+
--demo-toggle-bar-bg-default: var(--a-bg-muted);
|
|
14
|
+
--demo-toggle-bar-fg-default: var(--a-fg);
|
|
15
15
|
|
|
16
16
|
/* ── Typography ── */
|
|
17
|
-
--demo-toggle-label-size: var(--a-ui-size);
|
|
18
|
-
--demo-toggle-label-weight: var(--a-weight-medium, 500);
|
|
17
|
+
--demo-toggle-label-size-default: var(--a-ui-size);
|
|
18
|
+
--demo-toggle-label-weight-default: var(--a-weight-medium, 500);
|
|
19
19
|
|
|
20
20
|
/* ── Transition ── */
|
|
21
|
-
--demo-toggle-duration: var(--a-duration-fast);
|
|
22
|
-
--demo-toggle-easing: var(--a-easing);
|
|
21
|
+
--demo-toggle-duration-default: var(--a-duration-fast);
|
|
22
|
+
--demo-toggle-easing-default: var(--a-easing);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
:scope {
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
gap: 0;
|
|
31
31
|
width: 100%;
|
|
32
32
|
|
|
33
|
-
background: var(--demo-toggle-bg);
|
|
34
|
-
border: 1px solid var(--demo-toggle-border);
|
|
35
|
-
border-radius: var(--demo-toggle-radius);
|
|
33
|
+
background: var(--demo-toggle-bg, var(--demo-toggle-bg-default));
|
|
34
|
+
border: 1px solid var(--demo-toggle-border, var(--demo-toggle-border-default));
|
|
35
|
+
border-radius: var(--demo-toggle-radius, var(--demo-toggle-radius-default));
|
|
36
36
|
overflow: hidden;
|
|
37
37
|
isolation: isolate;
|
|
38
38
|
}
|
|
@@ -40,18 +40,18 @@
|
|
|
40
40
|
/* -- Header bar -- */
|
|
41
41
|
[slot="bar"] {
|
|
42
42
|
width: 100%;
|
|
43
|
-
padding: var(--demo-toggle-bar-py) var(--demo-toggle-bar-px);
|
|
44
|
-
background: var(--demo-toggle-bar-bg);
|
|
45
|
-
color: var(--demo-toggle-bar-fg);
|
|
46
|
-
border-bottom: 1px solid var(--demo-toggle-border);
|
|
43
|
+
padding: var(--demo-toggle-bar-py, var(--demo-toggle-bar-py-default)) var(--demo-toggle-bar-px, var(--demo-toggle-bar-px-default));
|
|
44
|
+
background: var(--demo-toggle-bar-bg, var(--demo-toggle-bar-bg-default));
|
|
45
|
+
color: var(--demo-toggle-bar-fg, var(--demo-toggle-bar-fg-default));
|
|
46
|
+
border-bottom: 1px solid var(--demo-toggle-border, var(--demo-toggle-border-default));
|
|
47
47
|
justify-content: space-between;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
[data-demo-toggle-label] {
|
|
51
|
-
font-size: var(--demo-toggle-label-size);
|
|
52
|
-
font-weight: var(--demo-toggle-label-weight);
|
|
53
|
-
color: var(--demo-toggle-bar-fg);
|
|
54
|
-
transition: color var(--demo-toggle-duration) var(--demo-toggle-easing);
|
|
51
|
+
font-size: var(--demo-toggle-label-size, var(--demo-toggle-label-size-default));
|
|
52
|
+
font-weight: var(--demo-toggle-label-weight, var(--demo-toggle-label-weight-default));
|
|
53
|
+
color: var(--demo-toggle-bar-fg, var(--demo-toggle-bar-fg-default));
|
|
54
|
+
transition: color var(--demo-toggle-duration, var(--demo-toggle-duration-default)) var(--demo-toggle-easing, var(--demo-toggle-easing-default));
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/* -- Stage area (where the slotted content lives) -- */
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
:scope > [slot="off"] {
|
|
62
62
|
box-sizing: border-box;
|
|
63
63
|
width: 100%;
|
|
64
|
-
padding: var(--demo-toggle-stage-padding);
|
|
64
|
+
padding: var(--demo-toggle-stage-padding, var(--demo-toggle-stage-padding-default));
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
:scope[data-state="on"] > [slot="off"] { display: none; }
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
|
|
115
115
|
/* State-themed bar — when on, lean accent; when off, leave neutral. */
|
|
116
116
|
:scope[data-state="on"] {
|
|
117
|
-
--demo-toggle-bar-bg: var(--a-accent-muted);
|
|
118
|
-
--demo-toggle-bar-fg: var(--a-accent-strong);
|
|
117
|
+
--demo-toggle-bar-bg-default: var(--a-accent-muted);
|
|
118
|
+
--demo-toggle-bar-fg-default: var(--a-accent-strong);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
@scope (description-list-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
3
|
/* ── Layout ── */
|
|
4
|
-
--description-list-gap-row: var(--a-space-2);
|
|
5
|
-
--description-list-gap-column: var(--a-space-3);
|
|
6
|
-
--description-list-term-min-width: 8rem;
|
|
4
|
+
--description-list-gap-row-default: var(--a-space-2);
|
|
5
|
+
--description-list-gap-column-default: var(--a-space-3);
|
|
6
|
+
--description-list-term-min-width-default: 8rem;
|
|
7
7
|
|
|
8
8
|
/* ── Typography ── */
|
|
9
|
-
--description-list-term-font-size: var(--a-ui-sm);
|
|
10
|
-
--description-list-term-weight: var(--a-weight-medium);
|
|
11
|
-
--description-list-desc-font-size: var(--a-ui-sm);
|
|
12
|
-
--description-list-desc-weight: var(--a-weight-normal);
|
|
9
|
+
--description-list-term-font-size-default: var(--a-ui-sm);
|
|
10
|
+
--description-list-term-weight-default: var(--a-weight-medium);
|
|
11
|
+
--description-list-desc-font-size-default: var(--a-ui-sm);
|
|
12
|
+
--description-list-desc-weight-default: var(--a-weight-normal);
|
|
13
13
|
|
|
14
14
|
/* ── Colors ── */
|
|
15
|
-
--description-list-term-fg: var(--a-fg-muted);
|
|
16
|
-
--description-list-desc-fg: var(--a-fg);
|
|
15
|
+
--description-list-term-fg-default: var(--a-fg-muted);
|
|
16
|
+
--description-list-desc-fg-default: var(--a-fg);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
:scope {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
box-sizing: border-box;
|
|
22
22
|
display: grid;
|
|
23
23
|
grid-template-columns: 1fr;
|
|
24
|
-
gap: var(--description-list-gap-row) var(--description-list-gap-column);
|
|
24
|
+
gap: var(--description-list-gap-row, var(--description-list-gap-row-default)) var(--description-list-gap-column, var(--description-list-gap-column-default));
|
|
25
25
|
margin: 0;
|
|
26
26
|
padding: 0;
|
|
27
27
|
}
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
[data-dl-term],
|
|
30
30
|
dt {
|
|
31
31
|
margin: 0;
|
|
32
|
-
font-size: var(--description-list-term-font-size);
|
|
33
|
-
font-weight: var(--description-list-term-weight);
|
|
34
|
-
color: var(--description-list-term-fg);
|
|
32
|
+
font-size: var(--description-list-term-font-size, var(--description-list-term-font-size-default));
|
|
33
|
+
font-weight: var(--description-list-term-weight, var(--description-list-term-weight-default));
|
|
34
|
+
color: var(--description-list-term-fg, var(--description-list-term-fg-default));
|
|
35
35
|
line-height: 1.3;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
[data-dl-desc],
|
|
39
39
|
dd {
|
|
40
40
|
margin: 0;
|
|
41
|
-
font-size: var(--description-list-desc-font-size);
|
|
42
|
-
font-weight: var(--description-list-desc-weight);
|
|
43
|
-
color: var(--description-list-desc-fg);
|
|
41
|
+
font-size: var(--description-list-desc-font-size, var(--description-list-desc-font-size-default));
|
|
42
|
+
font-weight: var(--description-list-desc-weight, var(--description-list-desc-weight-default));
|
|
43
|
+
color: var(--description-list-desc-fg, var(--description-list-desc-fg-default));
|
|
44
44
|
line-height: 1.4;
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
and the explicit `[layout="stacked"]` both get the same rhythm. */
|
|
52
52
|
:scope:not([layout="inline"]) [data-dl-desc]:not(:last-child),
|
|
53
53
|
:scope:not([layout="inline"]) dd:not(:last-child) {
|
|
54
|
-
margin-bottom: var(--description-list-gap-row);
|
|
54
|
+
margin-bottom: var(--description-list-gap-row, var(--description-list-gap-row-default));
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
/* Inline: term and desc on one row */
|
|
58
58
|
:scope[layout="inline"] {
|
|
59
|
-
grid-template-columns: minmax(var(--description-list-term-min-width), max-content) 1fr;
|
|
59
|
+
grid-template-columns: minmax(var(--description-list-term-min-width, var(--description-list-term-min-width-default)), max-content) 1fr;
|
|
60
60
|
align-items: baseline;
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
@scope (divider-ui) {
|
|
6
6
|
:where(:scope) {
|
|
7
7
|
/* ── Tokens ── */
|
|
8
|
-
--divider-color: var(--a-border-subtle);
|
|
9
|
-
--divider-size: 1px;
|
|
10
|
-
--divider-spacing: var(--a-space-3);
|
|
11
|
-
--divider-label-font: var(--a-ui-sm);
|
|
12
|
-
--divider-label-fg: var(--a-fg-muted);
|
|
13
|
-
--divider-label-px: var(--a-space-2);
|
|
8
|
+
--divider-color-default: var(--a-border-subtle);
|
|
9
|
+
--divider-size-default: 1px;
|
|
10
|
+
--divider-spacing-default: var(--a-space-3);
|
|
11
|
+
--divider-label-font-default: var(--a-ui-sm);
|
|
12
|
+
--divider-label-fg-default: var(--a-fg-muted);
|
|
13
|
+
--divider-label-px-default: var(--a-space-2);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/* ── Horizontal (default) ── */
|
|
@@ -19,38 +19,38 @@
|
|
|
19
19
|
display: flex;
|
|
20
20
|
align-items: center;
|
|
21
21
|
width: 100%;
|
|
22
|
-
margin-block: var(--divider-spacing);
|
|
22
|
+
margin-block: var(--divider-spacing, var(--divider-spacing-default));
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/* Horizontal line without label */
|
|
26
26
|
:scope:not(:has([slot="label"]))::before {
|
|
27
27
|
content: '';
|
|
28
28
|
flex: 1;
|
|
29
|
-
height: var(--divider-size);
|
|
30
|
-
background: var(--divider-color);
|
|
29
|
+
height: var(--divider-size, var(--divider-size-default));
|
|
30
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/* Horizontal line with label — left line */
|
|
34
34
|
:scope:has([slot="label"])::before {
|
|
35
35
|
content: '';
|
|
36
36
|
flex: 1;
|
|
37
|
-
height: var(--divider-size);
|
|
38
|
-
background: var(--divider-color);
|
|
37
|
+
height: var(--divider-size, var(--divider-size-default));
|
|
38
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/* Horizontal line with label — right line */
|
|
42
42
|
:scope:has([slot="label"])::after {
|
|
43
43
|
content: '';
|
|
44
44
|
flex: 1;
|
|
45
|
-
height: var(--divider-size);
|
|
46
|
-
background: var(--divider-color);
|
|
45
|
+
height: var(--divider-size, var(--divider-size-default));
|
|
46
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/* ── Label ── */
|
|
50
50
|
[slot="label"] {
|
|
51
|
-
padding-inline: var(--divider-label-px);
|
|
52
|
-
font-size: var(--divider-label-font);
|
|
53
|
-
color: var(--divider-label-fg);
|
|
51
|
+
padding-inline: var(--divider-label-px, var(--divider-label-px-default));
|
|
52
|
+
font-size: var(--divider-label-font, var(--divider-label-font-default));
|
|
53
|
+
color: var(--divider-label-fg, var(--divider-label-fg-default));
|
|
54
54
|
white-space: nowrap;
|
|
55
55
|
line-height: 1;
|
|
56
56
|
}
|
|
@@ -63,40 +63,40 @@
|
|
|
63
63
|
height: auto;
|
|
64
64
|
align-self: stretch;
|
|
65
65
|
margin-block: 0;
|
|
66
|
-
margin-inline: var(--divider-spacing);
|
|
66
|
+
margin-inline: var(--divider-spacing, var(--divider-spacing-default));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
/* Vertical line without label */
|
|
70
70
|
:scope[vertical]:not(:has([slot="label"]))::before {
|
|
71
71
|
content: '';
|
|
72
72
|
flex: 1;
|
|
73
|
-
width: var(--divider-size);
|
|
73
|
+
width: var(--divider-size, var(--divider-size-default));
|
|
74
74
|
height: auto;
|
|
75
|
-
background: var(--divider-color);
|
|
75
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/* Vertical line with label — top line */
|
|
79
79
|
:scope[vertical]:has([slot="label"])::before {
|
|
80
80
|
content: '';
|
|
81
81
|
flex: 1;
|
|
82
|
-
width: var(--divider-size);
|
|
82
|
+
width: var(--divider-size, var(--divider-size-default));
|
|
83
83
|
height: auto;
|
|
84
|
-
background: var(--divider-color);
|
|
84
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
/* Vertical line with label — bottom line */
|
|
88
88
|
:scope[vertical]:has([slot="label"])::after {
|
|
89
89
|
content: '';
|
|
90
90
|
flex: 1;
|
|
91
|
-
width: var(--divider-size);
|
|
91
|
+
width: var(--divider-size, var(--divider-size-default));
|
|
92
92
|
height: auto;
|
|
93
|
-
background: var(--divider-color);
|
|
93
|
+
background: var(--divider-color, var(--divider-color-default));
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
/* Vertical label */
|
|
97
97
|
:scope[vertical] [slot="label"] {
|
|
98
98
|
padding-inline: 0;
|
|
99
|
-
padding-block: var(--divider-label-px);
|
|
99
|
+
padding-block: var(--divider-label-px, var(--divider-label-px-default));
|
|
100
100
|
writing-mode: vertical-lr;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
@scope (embed-ui) {
|
|
2
2
|
:where(:scope) {
|
|
3
3
|
/* ── Tokens ── */
|
|
4
|
-
--embed-bg: var(--a-bg-muted);
|
|
5
|
-
--embed-radius: var(--a-radius-md);
|
|
6
|
-
--embed-border: var(--a-border-subtle);
|
|
4
|
+
--embed-bg-default: var(--a-bg-muted);
|
|
5
|
+
--embed-radius-default: var(--a-radius-md);
|
|
6
|
+
--embed-border-default: var(--a-border-subtle);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
:scope {
|
|
10
10
|
box-sizing: border-box;
|
|
11
11
|
display: block;
|
|
12
12
|
overflow: hidden;
|
|
13
|
-
border-radius: var(--embed-radius);
|
|
14
|
-
border: 1px solid var(--embed-border);
|
|
15
|
-
background: var(--embed-bg);
|
|
13
|
+
border-radius: var(--embed-radius, var(--embed-radius-default));
|
|
14
|
+
border: 1px solid var(--embed-border, var(--embed-border-default));
|
|
15
|
+
background: var(--embed-bg, var(--embed-bg-default));
|
|
16
16
|
position: relative;
|
|
17
17
|
}
|
|
18
18
|
|