@reliability-design/web 1.4.6 → 1.4.8
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 +246 -49
- package/dist/components/rel-accordion/README.md +133 -132
- package/dist/components/rel-alert/README.md +145 -141
- package/dist/components/rel-autocomplete/README.md +172 -61
- package/dist/components/rel-avatar/README.md +118 -130
- package/dist/components/rel-badge/README.md +97 -93
- package/dist/components/rel-breadcrumb/README.md +96 -102
- package/dist/components/rel-button/README.md +190 -130
- package/dist/components/rel-calendar/README.md +109 -109
- package/dist/components/rel-card/README.md +75 -94
- package/dist/components/rel-cardmedia/README.md +100 -127
- package/dist/components/rel-carousel/README.md +186 -166
- package/dist/components/rel-checkbox/README.md +96 -75
- package/dist/components/rel-chip/README.md +138 -121
- package/dist/components/rel-container/README.md +107 -99
- package/dist/components/rel-date-picker/README.md +200 -289
- package/dist/components/rel-divider/README.md +88 -100
- package/dist/components/rel-drawer/README.md +187 -200
- package/dist/components/rel-kbd/README.md +141 -151
- package/dist/components/rel-layout/README.md +34 -0
- package/dist/components/rel-menu/README.md +180 -151
- package/dist/components/rel-menubar/README.md +218 -329
- package/dist/components/rel-otp/README.md +171 -440
- package/dist/components/rel-pagination/README.md +100 -424
- package/dist/components/rel-popover/README.md +203 -568
- package/dist/components/rel-progress/README.md +88 -110
- package/dist/components/rel-radio/README.md +131 -138
- package/dist/components/rel-range-picker/README.md +165 -0
- package/dist/components/rel-resizable/README.md +199 -140
- package/dist/components/rel-segmented-button/README.md +156 -141
- package/dist/components/rel-select/README.md +156 -93
- package/dist/components/rel-sheet/README.md +168 -224
- package/dist/components/rel-skeleton/README.md +104 -0
- package/dist/components/rel-slider/README.md +131 -135
- package/dist/components/rel-snackbar/README.md +168 -134
- package/dist/components/rel-stepper/README.md +162 -160
- package/dist/components/rel-switch/README.md +117 -102
- package/dist/components/rel-tab/README.md +173 -163
- package/dist/components/rel-textfield/README.md +176 -69
- package/dist/components/rel-time-picker/README.md +122 -157
- package/dist/components/rel-toast/README.md +165 -148
- package/dist/components/rel-tooltip/README.md +119 -111
- package/dist/components/rel-upload/README.md +220 -0
- package/dist/index.d.mts +1726 -447
- package/dist/index.d.ts +1726 -447
- package/dist/index.js +13715 -10870
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14018 -11163
- package/dist/index.mjs.map +1 -1
- package/dist/styles/focus-ring.ts +84 -0
- package/dist/styles/vars.css +892 -866
- package/dist/{vars-XNMTSRVN.css → vars-DXX6QOAG.css} +892 -866
- package/package.json +3 -2
- package/dist/components/rel-accordion/rel-accordion.ts +0 -336
- package/dist/components/rel-alert/rel-alert.ts +0 -305
- package/dist/components/rel-autocomplete/rel-autocomplete.ts +0 -720
- package/dist/components/rel-avatar/rel-avatar.ts +0 -142
- package/dist/components/rel-badge/rel-badge.ts +0 -175
- package/dist/components/rel-breadcrumb/rel-breadcrumb.ts +0 -106
- package/dist/components/rel-button/rel-button.ts +0 -560
- package/dist/components/rel-calendar/index.ts +0 -1
- package/dist/components/rel-calendar/rel-calendar.ts +0 -565
- package/dist/components/rel-card/rel-card.ts +0 -88
- package/dist/components/rel-cardmedia/rel-cardmedia.ts +0 -88
- package/dist/components/rel-carousel/index.ts +0 -1
- package/dist/components/rel-carousel/rel-carousel.ts +0 -723
- package/dist/components/rel-chart/README.md +0 -286
- package/dist/components/rel-chart/index.ts +0 -1
- package/dist/components/rel-chart/rel-chart.ts +0 -754
- package/dist/components/rel-checkbox/rel-checkbox.ts +0 -382
- package/dist/components/rel-chip/rel-chip.ts +0 -483
- package/dist/components/rel-container/rel-container.ts +0 -95
- package/dist/components/rel-date-picker/date-format.test.ts +0 -43
- package/dist/components/rel-date-picker/date-format.ts +0 -47
- package/dist/components/rel-date-picker/date-parse.test.ts +0 -116
- package/dist/components/rel-date-picker/date-parse.ts +0 -178
- package/dist/components/rel-date-picker/index.ts +0 -1
- package/dist/components/rel-date-picker/rel-date-picker.ts +0 -1676
- package/dist/components/rel-divider/rel-divider.ts +0 -54
- package/dist/components/rel-drawer/index.ts +0 -1
- package/dist/components/rel-drawer/rel-drawer-footer.ts +0 -27
- package/dist/components/rel-drawer/rel-drawer.ts +0 -607
- package/dist/components/rel-kbd/rel-kbd.ts +0 -188
- package/dist/components/rel-layout/rel-layout.ts +0 -49
- package/dist/components/rel-menu/rel-menu.ts +0 -541
- package/dist/components/rel-menubar/index.ts +0 -2
- package/dist/components/rel-menubar/rel-menubar-menu.css +0 -3
- package/dist/components/rel-menubar/rel-menubar-menu.ts +0 -17
- package/dist/components/rel-menubar/rel-menubar.ts +0 -777
- package/dist/components/rel-nav-menu/README.md +0 -289
- package/dist/components/rel-nav-menu/index.ts +0 -3
- package/dist/components/rel-nav-menu/rel-nav-menu-item.ts +0 -243
- package/dist/components/rel-nav-menu/rel-nav-menu-panel.ts +0 -72
- package/dist/components/rel-nav-menu/rel-nav-menu.ts +0 -270
- package/dist/components/rel-navbar/README.md +0 -126
- package/dist/components/rel-navbar/rel-navbar.ts +0 -105
- package/dist/components/rel-otp/index.ts +0 -1
- package/dist/components/rel-otp/rel-otp.ts +0 -527
- package/dist/components/rel-pagination/index.ts +0 -1
- package/dist/components/rel-pagination/rel-pagination.ts +0 -522
- package/dist/components/rel-popover/index.ts +0 -2
- package/dist/components/rel-popover/rel-popover-content.ts +0 -81
- package/dist/components/rel-popover/rel-popover.ts +0 -475
- package/dist/components/rel-progress/rel-progress.ts +0 -234
- package/dist/components/rel-radio/rel-radio.ts +0 -481
- package/dist/components/rel-range-picker/rel-range-picker.ts +0 -1688
- package/dist/components/rel-resizable/index.ts +0 -3
- package/dist/components/rel-resizable/rel-resizable-group.ts +0 -405
- package/dist/components/rel-resizable/rel-resizable-handle.ts +0 -150
- package/dist/components/rel-resizable/rel-resizable-panel.ts +0 -58
- package/dist/components/rel-segmented-button/rel-segmented-button.ts +0 -217
- package/dist/components/rel-select/rel-select.ts +0 -1416
- package/dist/components/rel-sheet/rel-sheet.ts +0 -610
- package/dist/components/rel-sidebar/README.md +0 -209
- package/dist/components/rel-sidebar/rel-sidebar.ts +0 -1191
- package/dist/components/rel-skeleton/rel-skeleton.ts +0 -143
- package/dist/components/rel-slider/rel-slider.ts +0 -673
- package/dist/components/rel-snackbar/rel-snackbar.ts +0 -329
- package/dist/components/rel-stepper/rel-stepper.ts +0 -567
- package/dist/components/rel-switch/rel-switch.ts +0 -199
- package/dist/components/rel-tab/rel-tab.ts +0 -264
- package/dist/components/rel-table/README.md +0 -178
- package/dist/components/rel-table/rel-table-body.ts +0 -22
- package/dist/components/rel-table/rel-table-caption.ts +0 -30
- package/dist/components/rel-table/rel-table-cell.ts +0 -43
- package/dist/components/rel-table/rel-table-footer.ts +0 -24
- package/dist/components/rel-table/rel-table-head.ts +0 -47
- package/dist/components/rel-table/rel-table-header.ts +0 -22
- package/dist/components/rel-table/rel-table-row.ts +0 -37
- package/dist/components/rel-table/rel-table.ts +0 -62
- package/dist/components/rel-textfield/rel-textfield.ts +0 -1054
- package/dist/components/rel-time-picker/rel-time-picker.ts +0 -1482
- package/dist/components/rel-time-picker/time-parse.test.ts +0 -67
- package/dist/components/rel-time-picker/time-parse.ts +0 -85
- package/dist/components/rel-toast/rel-toast.ts +0 -206
- package/dist/components/rel-tooltip/rel-tooltip.ts +0 -193
- package/dist/components/rel-topbar/rel-topbar-actions.ts +0 -27
- package/dist/components/rel-topbar/rel-topbar-brand.ts +0 -54
- package/dist/components/rel-topbar/rel-topbar-dropdown-item.ts +0 -69
- package/dist/components/rel-topbar/rel-topbar-dropdown.ts +0 -31
- package/dist/components/rel-topbar/rel-topbar-item.ts +0 -324
- package/dist/components/rel-topbar/rel-topbar-mobile-panel.ts +0 -27
- package/dist/components/rel-topbar/rel-topbar-profile.ts +0 -243
- package/dist/components/rel-topbar/rel-topbar-utilities.ts +0 -27
- package/dist/components/rel-topbar/rel-topbar.ts +0 -446
- package/dist/components/rel-upload/UPLOAD-DESIGN-CHANGES.md +0 -134
- package/dist/components/rel-upload/rel-upload-actions.ts +0 -163
- package/dist/components/rel-upload/rel-upload.ts +0 -968
|
@@ -1,199 +1,164 @@
|
|
|
1
1
|
# rel-time-picker
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- Trigger button with time-column popover (Hour / Min / AM-PM)
|
|
8
|
-
- 12-hour and 24-hour display formats
|
|
9
|
-
- Configurable minute intervals (1, 5, 10, 15, 30, …)
|
|
10
|
-
- Draft state with Now / Cancel / Apply footer
|
|
11
|
-
- Min/max time constraints
|
|
12
|
-
- Optional clear button
|
|
13
|
-
- Label, placeholder, helper text and error states
|
|
14
|
-
- Standardized input API (mirrors rel-textfield / rel-date-picker)
|
|
15
|
-
- Keyboard navigation and full ARIA support
|
|
16
|
-
- Token-driven styling with `::part` hooks
|
|
17
|
-
|
|
18
|
-
## Value format
|
|
19
|
-
|
|
20
|
-
The committed `value` is **always 24-hour `"HH:mm"`** (e.g. `"09:30"`, `"17:05"`) regardless of the display `format`, so consumers get a consistent machine-readable string.
|
|
3
|
+
Time selection field implementing the Figma "Time Picker" component (Reliability DS V1.0, node 8301:3771): an editable text field with a clock icon that opens a panel of Hour / Minute (/ Second / AM-PM) columns and a Now / Cancel / OK footer. Column picks are held as a draft until OK; the field also accepts free-form typed times ("930", "9:30 pm", "n" for now). The committed `value` is always 24-hour `"HH:mm"` (or `"HH:mm:ss"` with `seconds`) regardless of the display `format`. Use it for a single time of day; use `rel-date-picker` for dates and `rel-range-picker` for date ranges.
|
|
21
4
|
|
|
22
5
|
## Usage
|
|
23
6
|
|
|
24
|
-
### Basic
|
|
25
|
-
|
|
26
7
|
```html
|
|
8
|
+
<!-- Basic (12-hour display, 5-minute steps) -->
|
|
27
9
|
<rel-time-picker></rel-time-picker>
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### With Value
|
|
31
10
|
|
|
32
|
-
|
|
33
|
-
<rel-time-picker value="09:30"></rel-time-picker>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
### With Label
|
|
37
|
-
|
|
38
|
-
```html
|
|
39
|
-
<rel-time-picker label="Start time" placeholder="Select time"></rel-time-picker>
|
|
40
|
-
```
|
|
11
|
+
<!-- Value is always 24-hour HH:mm; the field shows it per `format` -->
|
|
12
|
+
<rel-time-picker value="09:30" label="Start time"></rel-time-picker>
|
|
13
|
+
<rel-time-picker value="17:05" format="24h"></rel-time-picker>
|
|
41
14
|
|
|
42
|
-
|
|
15
|
+
<!-- Seconds column; value becomes HH:mm:ss -->
|
|
16
|
+
<rel-time-picker seconds value="17:05:30" format="24h"></rel-time-picker>
|
|
43
17
|
|
|
44
|
-
|
|
45
|
-
<rel-time-picker format="24h" value="17:05"></rel-time-picker>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Minute intervals
|
|
49
|
-
|
|
50
|
-
```html
|
|
18
|
+
<!-- Minute granularity of the column (typed entry still accepts any minute) -->
|
|
51
19
|
<rel-time-picker minute-step="15"></rel-time-picker>
|
|
52
|
-
<rel-time-picker minute-step="
|
|
53
|
-
```
|
|
20
|
+
<rel-time-picker minute-step="1"></rel-time-picker>
|
|
54
21
|
|
|
55
|
-
|
|
22
|
+
<!-- Constrain to business hours (inclusive, HH:mm) -->
|
|
23
|
+
<rel-time-picker min-time="09:00" max-time="17:30" placeholder="Business hours only"></rel-time-picker>
|
|
56
24
|
|
|
57
|
-
|
|
58
|
-
<rel-time-picker
|
|
59
|
-
min-time="09:00"
|
|
60
|
-
max-time="17:30"
|
|
61
|
-
placeholder="Business hours only"
|
|
62
|
-
></rel-time-picker>
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### Clearable
|
|
66
|
-
|
|
67
|
-
```html
|
|
25
|
+
<!-- Clear button, helper / error text, required -->
|
|
68
26
|
<rel-time-picker value="09:30" clearable></rel-time-picker>
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
27
|
+
<rel-time-picker label="Start time" helper-text="Local timezone"></rel-time-picker>
|
|
28
|
+
<rel-time-picker label="Start time" error error-message="Select a valid time"></rel-time-picker>
|
|
29
|
+
<rel-time-picker label="Start time" required></rel-time-picker>
|
|
72
30
|
|
|
73
|
-
|
|
31
|
+
<!-- States -->
|
|
74
32
|
<rel-time-picker value="09:30" disabled></rel-time-picker>
|
|
75
33
|
<rel-time-picker value="09:30" readonly></rel-time-picker>
|
|
76
|
-
<rel-time-picker error error-message="Select a valid time"></rel-time-picker>
|
|
77
|
-
<rel-time-picker helper-text="Local timezone"></rel-time-picker>
|
|
78
|
-
<rel-time-picker label="Start time" required></rel-time-picker>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### Sizes / layout
|
|
82
34
|
|
|
83
|
-
|
|
35
|
+
<!-- Sizes (field 32 / 40 / 48px, panel 220 / 250 / 280px) and layout -->
|
|
84
36
|
<rel-time-picker size="small"></rel-time-picker>
|
|
37
|
+
<rel-time-picker size="medium"></rel-time-picker>
|
|
85
38
|
<rel-time-picker size="large"></rel-time-picker>
|
|
86
|
-
<rel-time-picker
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Form usage
|
|
39
|
+
<rel-time-picker fullwidth label="Full width"></rel-time-picker>
|
|
90
40
|
|
|
91
|
-
|
|
41
|
+
<!-- Form integration: `name` renders a hidden input carrying the value -->
|
|
92
42
|
<form>
|
|
93
43
|
<rel-time-picker name="startTime" label="Start time" required></rel-time-picker>
|
|
94
44
|
</form>
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
The value is mirrored onto a hidden `<input name="...">` so native form submission works.
|
|
98
|
-
|
|
99
|
-
### Programmatic Control (JavaScript)
|
|
100
45
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
picker.value = '14:30';
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
picker.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
picker.addEventListener('rel-change', (e) => {
|
|
112
|
-
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
picker.addEventListener('rel-open-change', (e) => {
|
|
116
|
-
console.log('Open:', e.detail.open);
|
|
117
|
-
});
|
|
46
|
+
<!-- Programmatic control -->
|
|
47
|
+
<rel-time-picker id="tp" clearable></rel-time-picker>
|
|
48
|
+
<script>
|
|
49
|
+
const picker = document.getElementById('tp');
|
|
50
|
+
picker.value = '14:30'; // always 24h
|
|
51
|
+
picker.open = true; // opens the panel and focuses the selected hour
|
|
52
|
+
|
|
53
|
+
picker.addEventListener('rel-change', (e) => {
|
|
54
|
+
console.log('time:', e.detail.value); // "14:30" | "14:30:00" | null (cleared)
|
|
55
|
+
});
|
|
56
|
+
picker.addEventListener('rel-open-change', (e) => {
|
|
57
|
+
console.log('open:', e.detail.open);
|
|
58
|
+
});
|
|
59
|
+
</script>
|
|
118
60
|
```
|
|
119
61
|
|
|
120
|
-
|
|
62
|
+
### Typed entry
|
|
121
63
|
|
|
122
|
-
-
|
|
123
|
-
- **Apply** commits the draft, emits `rel-change` and closes.
|
|
124
|
-
- **Cancel**, `Escape` or an outside click discards the draft (same as rel-range-picker).
|
|
125
|
-
- **Now** sets the draft to the current time, snapped to `minute-step` and clamped into `min-time`/`max-time`.
|
|
126
|
-
- Picking an hour with no minute selected defaults the minute to `00`.
|
|
64
|
+
Typing into the field and pressing `Enter` (or leaving the field) commits the text. Accepted forms are case- and whitespace-insensitive: `9` → 09:00, `930` / `0930` / `9:30` / `9.30` / `9 30` → 09:30, `093015` / `9:30:15` → 09:30:15, `9 pm` / `9:30p` → 21:00 / 21:30, `12am` → 00:00, `12 pm` → 12:00, and `n` / `now` → the current time. Unparseable text shows "Invalid time", a time outside `min-time` / `max-time` shows "Time out of range"; in both cases the text stays in the field for correction and the committed `value` is untouched.
|
|
127
65
|
|
|
128
|
-
|
|
66
|
+
<!-- readme-gen:start -->
|
|
129
67
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
| `ArrowUp` / `ArrowDown` | Column | Move and select the previous/next entry |
|
|
134
|
-
| `ArrowLeft` / `ArrowRight` | Column | Jump between Hour / Min / AM-PM columns |
|
|
135
|
-
| `Home` / `End` | Column | First / last entry |
|
|
136
|
-
| `Enter` | Column | Select the entry and Apply |
|
|
137
|
-
| `Escape` | Anywhere | Discard draft and close |
|
|
68
|
+
<!-- Generated from rel-time-picker.ts — do not edit; run readme-generate.mjs -->
|
|
69
|
+
|
|
70
|
+
## API
|
|
138
71
|
|
|
139
|
-
|
|
72
|
+
### Attributes / Properties
|
|
140
73
|
|
|
141
74
|
| Property | Attribute | Type | Default | Description |
|
|
142
75
|
| --- | --- | --- | --- | --- |
|
|
143
|
-
| `value` | `value` | `string \| null` | `null` | Committed time,
|
|
144
|
-
| `placeholder` | `placeholder` | `string` | `"Select time"` |
|
|
145
|
-
| `label` | `label` | `string \| null` | `null` | Field label |
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `
|
|
154
|
-
| `open` | `open` | `boolean` | `false` |
|
|
155
|
-
| `
|
|
156
|
-
| `
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
161
|
-
| `
|
|
162
|
-
| `variant` | `variant` | `"outlined"` | `"outlined"` | Visual style |
|
|
76
|
+
| `value` | `value` | `string \| null` | `null` | Committed time, 24-hour "HH:mm" or "HH:mm:ss" (e.g. "09:30", "17:05:30"). Reflected. |
|
|
77
|
+
| `placeholder` | `placeholder` | `string` | `"Select time"` | Placeholder shown in the field while no value is committed and nothing is typed. |
|
|
78
|
+
| `label` | `label` | `string \| null` | `null` | Field label rendered above the trigger; also the input's accessible name (unset → "Select time"). |
|
|
79
|
+
| `disabled` | `disabled` | `boolean` | `false` | Disables the field (0.6 opacity, no pointer events); the panel cannot open. Reflected. |
|
|
80
|
+
| `required` | `required` | `boolean` | `false` | Renders the `*` mark after the label and sets `aria-required`; not enforced by the component. |
|
|
81
|
+
| `readonly` | `readonly` | `boolean` | `false` | Shows the value but blocks typing and opening the panel. Reflected. |
|
|
82
|
+
| `format` | `format` | `"12h" \| "24h"` | `"12h"` | Display format of the trigger text and hour column. Value stays 24-hour. |
|
|
83
|
+
| `seconds` | `seconds` | `boolean` | `false` | Shows the seconds column; committed value becomes "HH:mm:ss". Reflected. |
|
|
84
|
+
| `minuteStep` | `minute-step` | `number` | `5` | Minute granularity of the minutes column (1, 5, 10, 15, 30, …). |
|
|
85
|
+
| `minTime` | `min-time` | `string \| null` | `null` | Earliest selectable time, "HH:mm" (inclusive). |
|
|
86
|
+
| `maxTime` | `max-time` | `string \| null` | `null` | Latest selectable time, "HH:mm" (inclusive). |
|
|
87
|
+
| `open` | `open` | `boolean` | `false` | Whether the panel is open. Settable from outside; opening resets the draft from `value` (programmatic changes do not fire `rel-open-change`). Reflected. |
|
|
88
|
+
| `clearable` | `clearable` | `boolean` | `false` | Shows a clear (×) button inside the field while a value is set; clearing commits `null`. |
|
|
89
|
+
| `error` | `error` | `boolean` | `false` | Error styling (danger border, `aria-invalid`) and shows `errorMessage` below the field. |
|
|
90
|
+
| `invalid` | `invalid` | `boolean` | `false` | Alias for `error` (requested-API compat); either flag applies error styling. |
|
|
91
|
+
| `errorMessage` | `error-message` | `string` | `undefined` | Text shown below the field while `error` / `invalid` is set (falls back to the typed-entry parse error, then `helperText`). |
|
|
92
|
+
| `helperText` | `helper-text` | `string` | `undefined` | Assistive text shown below the field when not in error. |
|
|
93
|
+
| `name` | `name` | `string` | `undefined` | When set, renders a hidden `<input name="…">` carrying `value` for native form submission. |
|
|
94
|
+
| `size` | `size` | `"small" \| "medium" \| "large"` | `"medium"` | Trigger height on the shared field scale — small 32 / medium 40 / large 48px border-box; also sets the panel width (220 / 250 / 280px) and option row height (32 / 36 / 40px). Small lowers the trigger min-width from 160 to 128px. |
|
|
95
|
+
| `variant` | `variant` | `"outlined"` | `"outlined"` | Visual style; only `"outlined"` exists today. Reflected. |
|
|
96
|
+
| `fullWidth` | `fullwidth` | `boolean` | `false` | Fills the parent width (the host is inline-block with intrinsic width otherwise). The attribute is lowercase `fullwidth`. Reflected. |
|
|
163
97
|
|
|
164
98
|
## Events
|
|
165
99
|
|
|
166
|
-
| Event | Detail | Description |
|
|
167
|
-
| --- | --- | --- |
|
|
168
|
-
| `rel-
|
|
169
|
-
| `rel-
|
|
170
|
-
| `rel-focus` | — |
|
|
171
|
-
| `rel-
|
|
100
|
+
| Event | Detail | Bubbles / composed | Description |
|
|
101
|
+
| --- | --- | --- | --- |
|
|
102
|
+
| `rel-blur` | — | bubbles / composed | Fired when the text input loses focus (before any typed text is committed). No detail. |
|
|
103
|
+
| `rel-change` | `{ value: newValue } / { value: null }` | bubbles / composed | Fired when a time is committed (OK, Enter / blur on typed text, the Now shortcut) or cleared. Detail: `{ value: string \| null }` — 24-hour "HH:mm" / "HH:mm:ss", or `null` after a clear. |
|
|
104
|
+
| `rel-focus` | — | bubbles / composed | Fired when the text input receives focus. No detail. |
|
|
105
|
+
| `rel-open-change` | `{ open: this.open } / { open: false }` | bubbles / composed | Fired whenever the panel opens or closes through user interaction. Detail: `{ open: boolean }`. |
|
|
172
106
|
|
|
173
|
-
##
|
|
107
|
+
## Slots
|
|
174
108
|
|
|
175
|
-
|
|
|
109
|
+
| Slot | Description |
|
|
176
110
|
| --- | --- |
|
|
177
|
-
|
|
|
178
|
-
| `label` | Field label |
|
|
179
|
-
| `trigger` | Trigger button |
|
|
180
|
-
| `value` | Trigger value/placeholder text |
|
|
181
|
-
| `icon` | Trailing clock icon |
|
|
182
|
-
| `panel` | Popover panel |
|
|
183
|
-
| `option` | Hour/minute/period entries |
|
|
184
|
-
| `footer` | Now / Cancel / Apply row |
|
|
185
|
-
| `helper` | Helper / error text |
|
|
186
|
-
|
|
187
|
-
```css
|
|
188
|
-
/* Example: widen the popover and restyle options */
|
|
189
|
-
rel-time-picker::part(panel) {
|
|
190
|
-
box-shadow: var(--rel-shadows-shadow-400);
|
|
191
|
-
}
|
|
192
|
-
rel-time-picker::part(option) {
|
|
193
|
-
border-radius: var(--rel-border-radius-xs);
|
|
194
|
-
}
|
|
195
|
-
```
|
|
111
|
+
| — | This element has no slots. |
|
|
196
112
|
|
|
197
|
-
##
|
|
113
|
+
## CSS Parts
|
|
198
114
|
|
|
199
|
-
|
|
115
|
+
| Part | Description |
|
|
116
|
+
| --- | --- |
|
|
117
|
+
| `base` | Outer wrapper; carries the size / error / readonly classes |
|
|
118
|
+
| `label` | The field label above the trigger |
|
|
119
|
+
| `trigger` | The field box that anchors the panel (wraps the text input and the icons) |
|
|
120
|
+
| `value` | The editable text input showing the formatted time |
|
|
121
|
+
| `icon` | The trailing clock icon |
|
|
122
|
+
| `panel` | The popover panel (`role="dialog"`) |
|
|
123
|
+
| `shortcuts` | The typed-shortcut chip row at the top of the panel (N → Now) |
|
|
124
|
+
| `option` | Each hour / minute / second / AM-PM entry button |
|
|
125
|
+
| `footer` | The Now / Cancel / OK row |
|
|
126
|
+
| `helper` | The helper / error text live region under the field |
|
|
127
|
+
|
|
128
|
+
<!-- readme-gen:end -->
|
|
129
|
+
|
|
130
|
+
## Accessibility
|
|
131
|
+
|
|
132
|
+
- The editable field is an `<input type="text" role="combobox">` with `aria-haspopup="dialog"`, `aria-expanded`, `aria-controls` pointing at the panel, `aria-required` (from `required`), `aria-invalid` (from `error` / `invalid` / a typed-entry error) and `aria-describedby` pointing at the helper / error text. Its accessible name is the `label` (via `aria-labelledby`), falling back to `aria-label="Select time"`.
|
|
133
|
+
- The clock icon is a button labelled "Open time panel" with its own `aria-expanded`; the optional clear button is labelled "Clear time". The required mark `*` is `aria-hidden`.
|
|
134
|
+
- The panel is `role="dialog"` `aria-label="Choose time"`, promoted to the browser top layer (`popover="manual"`) so a modal / drawer ancestor cannot clip it. Each column is a `role="listbox"` named "Hours", "Minutes", "Seconds" or "AM or PM"; entries are `role="option"` buttons with `aria-selected`, and out-of-range entries are native `disabled`. Each column uses a roving `tabindex` (the selected entry, else the first).
|
|
135
|
+
- The helper / error text (part `helper`) is a persistent `aria-live="polite"` region, so error messages and typed-entry errors are announced as they appear.
|
|
136
|
+
- Focus: opening with the clock icon, `ArrowDown`, `Enter` or by setting `open` moves focus to the selected (or first enabled) hour without scrolling the page; opening by clicking into the field keeps focus in the input so typing continues to work. Cancel, `Escape` and OK return focus to the field; an outside click closes without refocusing.
|
|
137
|
+
- Screen-reader announcement (shared `announce()` utility): "{formatted time} selected" when OK commits the draft.
|
|
138
|
+
|
|
139
|
+
| Key | Where | Action |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| Typing | Field | Edits the free-form text (see Typed entry); clears any previous parse error |
|
|
142
|
+
| `Enter` | Field | Commit the typed text; if nothing was typed, open the panel (closed) or apply the draft (open) |
|
|
143
|
+
| `ArrowDown` | Field | Open the panel, or move focus into the columns when already open |
|
|
144
|
+
| `Escape` | Field | Revert uncommitted typed text; also closes the panel discarding the draft |
|
|
145
|
+
| Blur | Field | Commit the typed text when focus leaves the component (moving into the panel does not commit) |
|
|
146
|
+
| `ArrowUp` / `ArrowDown` | Column | Move to and select the previous / next enabled entry |
|
|
147
|
+
| `ArrowLeft` / `ArrowRight` | Column | Jump to the previous / next column (Hour → Minute → Second → AM/PM) |
|
|
148
|
+
| `Home` / `End` | Column | Select the first / last enabled entry |
|
|
149
|
+
| `Enter` | Column | Select the entry and apply (OK) |
|
|
150
|
+
| `N` | Panel | Commit the current time immediately (same as the "N → Now" chip) and close |
|
|
151
|
+
| `Escape` | Anywhere | Discard the draft and close |
|
|
152
|
+
|
|
153
|
+
## Notes / Edge Cases
|
|
154
|
+
|
|
155
|
+
- `value` is always 24-hour `"HH:mm"`, or `"HH:mm:ss"` when `seconds` is set; the `format` prop only changes the field text and the hour column (`12h` shows 01–12 plus an AM/PM column, `24h` shows 00–23). An unparseable `value` renders as empty.
|
|
156
|
+
- `min-time` / `max-time` are `"HH:mm"` (inclusive) and are compared at minute precision even with `seconds`. Hours with no in-range step minute and AM/PM periods with no enabled hour are disabled; picking an hour snaps the draft minute to the nearest in-range step.
|
|
157
|
+
- Draft model: column clicks only update the draft; **OK** commits and fires `rel-change`; **Cancel**, `Escape` or an outside click discard it (and fire `rel-open-change` with `open: false`). The OK button is disabled until an hour is chosen; picking an hour with no minute defaults the minute to `00`; picking a minute or second first defaults the hour to the first enabled one.
|
|
158
|
+
- Two "now" behaviours: the footer **Now** link sets the draft to the current time snapped to `minute-step` (and to the nearest enabled hour) — you still press OK; the `N` shortcut / typed `n` / the "N → Now" chip commit the current time immediately, clamped into `min-time` / `max-time`.
|
|
159
|
+
- Typed entry is not limited to `minute-step`: `9:07` commits `09:07` even with `minute-step="15"`. Typing an empty string and committing behaves like the clear button (`rel-change` with `value: null`).
|
|
160
|
+
- `minute-step` outside 1–60 falls back to 1; the seconds column is always step 1.
|
|
161
|
+
- `invalid` is a non-deprecated alias of `error`; either flag applies error styling. The text below the field is `error-message`, else the typed-entry error, else `helper-text`.
|
|
162
|
+
- Panel widths are fixed per `size` (220 / 250 / 280px, border-box) and capped to the viewport; it flips above the field when there is no room below and shrinks (columns scroll) rather than covering the field. Footer buttons are always small per the Figma spec; OK is narrowed to 60px min-width.
|
|
163
|
+
- Setting `open` programmatically opens the panel and resets the draft from `value`; it does not fire `rel-open-change` (only user interaction does).
|
|
164
|
+
- `fullWidth` reflects as the lowercase `fullwidth` attribute; the host is `inline-block` with intrinsic width otherwise.
|