@xenosystem/elements-react 0.0.4 → 0.0.5
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/LICENSE +18 -18
- package/README.md +41 -41
- package/dist/containers/Chip.js +1 -1
- package/dist/containers/Panel.js +1 -1
- package/package.json +58 -58
- package/src/chrome-separated.css +132 -132
- package/src/chrome-unified.css +72 -72
- package/src/containers/Badges.css +116 -116
- package/src/containers/avatar.css +70 -70
- package/src/containers/card.css +75 -75
- package/src/containers/chip.css +103 -103
- package/src/containers/list-row.css +132 -132
- package/src/containers/message-bubble.css +112 -112
- package/src/containers/panel.css +125 -120
- package/src/containers/table.css +102 -102
- package/src/containers/tile.css +17 -17
- package/src/content/callout.css +77 -77
- package/src/content/caret.css +30 -30
- package/src/content/code-block.css +159 -159
- package/src/content/collapsible.css +80 -80
- package/src/content/inline-code.css +14 -14
- package/src/content/model-picker.css +219 -219
- package/src/content/source-card.css +99 -99
- package/src/content/sources-disclosure.css +118 -118
- package/src/controls.css +453 -453
- package/src/fonts.css +34 -34
- package/src/forms/Checkbox.css +114 -114
- package/src/forms/RadioGroup.css +115 -115
- package/src/goo.css +97 -97
- package/src/icon-motion.css +1909 -1909
- package/src/layout/ResizablePanel.css +79 -79
- package/src/nav/sidebar.css +296 -296
- package/src/overlays/date-time-picker.css +238 -238
- package/src/overlays/menu.css +195 -195
- package/src/overlays/modal.css +167 -167
- package/src/overlays/picker-field.css +81 -81
- package/src/overlays/pill-filter.css +129 -129
- package/src/overlays/reveal.css +56 -56
- package/src/overlays/segmented-control.css +185 -185
- package/src/overlays/tabs.css +143 -143
- package/src/overlays/tooltip.css +126 -126
- package/src/scrollbar.css +184 -184
- package/src/size.css +179 -179
- package/src/status/progress-bar.css +88 -88
- package/src/status/spinner.css +33 -33
- package/src/status/statusindicator.css +65 -65
- package/src/status/steptimeline.css +137 -137
- package/src/status/thinkingcube.css +75 -75
- package/src/xeno-element.css +60 -60
- package/src/xeno-elements.css +71 -71
- package/src/xeno-theme.css +112 -112
|
@@ -1,238 +1,238 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* DateTimePicker — a faithful port of the chat's "Scheduled" date/time popover. Monochrome, tokens
|
|
3
|
-
* only, `rounded-md` (6px) everywhere. The SELECTION is a soft `--xeno-control` fill (never bright
|
|
4
|
-
* inverted ink); adjacent-month days are greyed; the time columns are quiet bordered lists with a thin
|
|
5
|
-
* scrollbar, and AM/PM is two flat buttons. State is CSS-first via `data-selection` on the cells.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/* ── DatePicker ──────────────────────────────────────────────────────────────────── */
|
|
9
|
-
.xeno-datepicker {
|
|
10
|
-
--xeno-cell: 26px;
|
|
11
|
-
display: inline-flex;
|
|
12
|
-
flex-direction: column;
|
|
13
|
-
gap: 3px;
|
|
14
|
-
width: fit-content;
|
|
15
|
-
padding: 6px;
|
|
16
|
-
background: var(--xeno-surface);
|
|
17
|
-
border: 1px solid var(--xeno-border);
|
|
18
|
-
border-radius: var(--xeno-radius-md);
|
|
19
|
-
color: var(--xeno-text);
|
|
20
|
-
user-select: none;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.xeno-datepicker-header {
|
|
24
|
-
display: flex;
|
|
25
|
-
align-items: center;
|
|
26
|
-
justify-content: space-between;
|
|
27
|
-
gap: 8px;
|
|
28
|
-
padding: 2px 2px 0;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.xeno-datepicker-title {
|
|
32
|
-
flex: 1 1 auto;
|
|
33
|
-
min-width: 0;
|
|
34
|
-
text-align: center;
|
|
35
|
-
font-size: 12px;
|
|
36
|
-
font-weight: 600;
|
|
37
|
-
line-height: 1.2;
|
|
38
|
-
white-space: nowrap;
|
|
39
|
-
overflow: hidden;
|
|
40
|
-
text-overflow: ellipsis;
|
|
41
|
-
color: var(--xeno-text);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* The prev/next chevrons are one glyph (chevron-right); the prev button mirrors it to point left. */
|
|
45
|
-
.xeno-datepicker-prev .xeno-element {
|
|
46
|
-
transform: rotate(180deg);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.xeno-datepicker-weekdays {
|
|
50
|
-
display: grid;
|
|
51
|
-
grid-template-columns: repeat(7, var(--xeno-cell));
|
|
52
|
-
gap: 2px;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.xeno-datepicker-weekday {
|
|
56
|
-
display: flex;
|
|
57
|
-
align-items: center;
|
|
58
|
-
justify-content: center;
|
|
59
|
-
height: 16px;
|
|
60
|
-
font-size: 10px;
|
|
61
|
-
font-weight: 500;
|
|
62
|
-
color: var(--xeno-muted);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.xeno-datepicker-grid {
|
|
66
|
-
display: flex;
|
|
67
|
-
flex-direction: column;
|
|
68
|
-
gap: 2px;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.xeno-datepicker-week {
|
|
72
|
-
display: grid;
|
|
73
|
-
grid-template-columns: repeat(7, var(--xeno-cell));
|
|
74
|
-
gap: 2px;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.xeno-datepicker-cell {
|
|
78
|
-
width: var(--xeno-cell);
|
|
79
|
-
height: var(--xeno-cell);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.xeno-datepicker-day {
|
|
83
|
-
display: inline-flex;
|
|
84
|
-
align-items: center;
|
|
85
|
-
justify-content: center;
|
|
86
|
-
padding: 0;
|
|
87
|
-
font-family: inherit;
|
|
88
|
-
font-size: 12px;
|
|
89
|
-
font-weight: 500;
|
|
90
|
-
font-variant-numeric: tabular-nums;
|
|
91
|
-
color: var(--xeno-text);
|
|
92
|
-
background: transparent;
|
|
93
|
-
border: 1px solid transparent;
|
|
94
|
-
border-radius: var(--xeno-radius-md);
|
|
95
|
-
cursor: pointer;
|
|
96
|
-
transition:
|
|
97
|
-
background var(--xeno-dur) ease,
|
|
98
|
-
color var(--xeno-dur) ease;
|
|
99
|
-
}
|
|
100
|
-
.xeno-datepicker-day:hover {
|
|
101
|
-
background: var(--xeno-hover);
|
|
102
|
-
}
|
|
103
|
-
.xeno-datepicker-day:focus-visible {
|
|
104
|
-
outline: none;
|
|
105
|
-
box-shadow:
|
|
106
|
-
0 0 0 2px var(--xeno-surface),
|
|
107
|
-
0 0 0 4px var(--xeno-border);
|
|
108
|
-
}
|
|
109
|
-
/* Adjacent-month days: present (real, clickable) but greyed back. */
|
|
110
|
-
.xeno-datepicker-day[data-outside] {
|
|
111
|
-
color: var(--xeno-muted);
|
|
112
|
-
opacity: 0.45;
|
|
113
|
-
}
|
|
114
|
-
/* Selection — the soft control fill the product uses, not bright inverted ink. */
|
|
115
|
-
.xeno-datepicker-day[data-selection='on'] {
|
|
116
|
-
color: var(--xeno-text);
|
|
117
|
-
opacity: 1;
|
|
118
|
-
background: var(--xeno-control);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.xeno-datepicker-footer {
|
|
122
|
-
display: flex;
|
|
123
|
-
align-items: center;
|
|
124
|
-
justify-content: space-between;
|
|
125
|
-
gap: 8px;
|
|
126
|
-
margin-top: 2px;
|
|
127
|
-
padding-top: 6px;
|
|
128
|
-
border-top: 1px solid var(--xeno-border);
|
|
129
|
-
}
|
|
130
|
-
/* If Clear is hidden, Today still sits at the right edge. */
|
|
131
|
-
.xeno-datepicker-footer > .xeno-datepicker-today:only-child {
|
|
132
|
-
margin-left: auto;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/* ── TimePicker ──────────────────────────────────────────────────────────────────── */
|
|
136
|
-
.xeno-timepicker {
|
|
137
|
-
display: flex;
|
|
138
|
-
gap: 4px;
|
|
139
|
-
width: fit-content;
|
|
140
|
-
/* Match the calendar's natural height (26px cells → ~258px) so the two fields' panels are consistent
|
|
141
|
-
in size; the Hour/Min lists fill and scroll within it. */
|
|
142
|
-
min-height: 258px;
|
|
143
|
-
padding: 6px;
|
|
144
|
-
background: var(--xeno-surface);
|
|
145
|
-
border: 1px solid var(--xeno-border);
|
|
146
|
-
border-radius: var(--xeno-radius-md);
|
|
147
|
-
color: var(--xeno-text);
|
|
148
|
-
user-select: none;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/* Equal-width columns that stretch to the panel height, so all three boxes match — and the panel can
|
|
152
|
-
grow to match a taller sibling (e.g. the calendar) with the lists filling it, not leaving a gap. */
|
|
153
|
-
.xeno-timepicker-col {
|
|
154
|
-
display: flex;
|
|
155
|
-
flex: 1 1 0;
|
|
156
|
-
flex-direction: column;
|
|
157
|
-
gap: 4px;
|
|
158
|
-
min-width: 58px;
|
|
159
|
-
min-height: 0;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.xeno-timepicker-col-head {
|
|
163
|
-
flex: 0 0 auto;
|
|
164
|
-
padding: 0 2px;
|
|
165
|
-
font-size: 10px;
|
|
166
|
-
font-weight: 500;
|
|
167
|
-
letter-spacing: 0.06em;
|
|
168
|
-
text-transform: uppercase;
|
|
169
|
-
color: var(--xeno-muted);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.xeno-timepicker-list {
|
|
173
|
-
display: flex;
|
|
174
|
-
/* basis 0: the list FILLS the column height without its content inflating the panel — so the
|
|
175
|
-
calendar drives the shared height and the time panel matches it exactly (scrolling within). */
|
|
176
|
-
flex: 1 1 0;
|
|
177
|
-
flex-direction: column;
|
|
178
|
-
gap: 2px;
|
|
179
|
-
min-height: 0;
|
|
180
|
-
padding: 2px;
|
|
181
|
-
border: 1px solid var(--xeno-border);
|
|
182
|
-
border-radius: var(--xeno-radius-md);
|
|
183
|
-
}
|
|
184
|
-
/* Hour + Min scroll within the shared height; AM/PM (no data-scroll) sits flush at the top.
|
|
185
|
-
The scrollbar itself comes from `scrollbar.css`; a column this narrow only wants a slimmer one, so
|
|
186
|
-
it re-declares the SIZE TOKEN and nothing else. It used to re-implement the whole thing — and set
|
|
187
|
-
`scrollbar-width` alongside its own `::-webkit-scrollbar` rules, which since Chrome 121 means Blink
|
|
188
|
-
ignored every one of them and drew the default bar. */
|
|
189
|
-
.xeno-timepicker-list[data-scroll] {
|
|
190
|
-
--xeno-scroll-size: 9px;
|
|
191
|
-
--xeno-scroll-pad: 2px;
|
|
192
|
-
--xeno-scroll-pad-hover: 1px;
|
|
193
|
-
--xeno-scroll-rail-pad: 4px; /* 9 − 2×4 = a 1px rail; the default 5 would leave none at all */
|
|
194
|
-
overflow-y: auto;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.xeno-timepicker-option {
|
|
198
|
-
display: flex;
|
|
199
|
-
flex: 0 0 auto;
|
|
200
|
-
align-items: center;
|
|
201
|
-
justify-content: center;
|
|
202
|
-
height: 26px;
|
|
203
|
-
width: 100%;
|
|
204
|
-
padding: 0;
|
|
205
|
-
font-family: inherit;
|
|
206
|
-
font-size: 12px;
|
|
207
|
-
font-weight: 500;
|
|
208
|
-
font-variant-numeric: tabular-nums;
|
|
209
|
-
color: var(--xeno-muted);
|
|
210
|
-
background: transparent;
|
|
211
|
-
border: none;
|
|
212
|
-
border-radius: var(--xeno-radius-sm);
|
|
213
|
-
cursor: pointer;
|
|
214
|
-
transition:
|
|
215
|
-
background var(--xeno-dur) ease,
|
|
216
|
-
color var(--xeno-dur) ease;
|
|
217
|
-
}
|
|
218
|
-
.xeno-timepicker-option:hover {
|
|
219
|
-
color: var(--xeno-text);
|
|
220
|
-
background: var(--xeno-hover);
|
|
221
|
-
}
|
|
222
|
-
.xeno-timepicker-option:focus-visible {
|
|
223
|
-
outline: none;
|
|
224
|
-
box-shadow:
|
|
225
|
-
0 0 0 2px var(--xeno-surface),
|
|
226
|
-
0 0 0 4px var(--xeno-border);
|
|
227
|
-
}
|
|
228
|
-
.xeno-timepicker-option[data-selection='on'] {
|
|
229
|
-
color: var(--xeno-text);
|
|
230
|
-
background: var(--xeno-control);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
@media (prefers-reduced-motion: reduce) {
|
|
234
|
-
.xeno-datepicker-day,
|
|
235
|
-
.xeno-timepicker-option {
|
|
236
|
-
transition: none;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* DateTimePicker — a faithful port of the chat's "Scheduled" date/time popover. Monochrome, tokens
|
|
3
|
+
* only, `rounded-md` (6px) everywhere. The SELECTION is a soft `--xeno-control` fill (never bright
|
|
4
|
+
* inverted ink); adjacent-month days are greyed; the time columns are quiet bordered lists with a thin
|
|
5
|
+
* scrollbar, and AM/PM is two flat buttons. State is CSS-first via `data-selection` on the cells.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* ── DatePicker ──────────────────────────────────────────────────────────────────── */
|
|
9
|
+
.xeno-datepicker {
|
|
10
|
+
--xeno-cell: 26px;
|
|
11
|
+
display: inline-flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: 3px;
|
|
14
|
+
width: fit-content;
|
|
15
|
+
padding: 6px;
|
|
16
|
+
background: var(--xeno-surface);
|
|
17
|
+
border: 1px solid var(--xeno-border);
|
|
18
|
+
border-radius: var(--xeno-radius-md);
|
|
19
|
+
color: var(--xeno-text);
|
|
20
|
+
user-select: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.xeno-datepicker-header {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: space-between;
|
|
27
|
+
gap: 8px;
|
|
28
|
+
padding: 2px 2px 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.xeno-datepicker-title {
|
|
32
|
+
flex: 1 1 auto;
|
|
33
|
+
min-width: 0;
|
|
34
|
+
text-align: center;
|
|
35
|
+
font-size: 12px;
|
|
36
|
+
font-weight: 600;
|
|
37
|
+
line-height: 1.2;
|
|
38
|
+
white-space: nowrap;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
text-overflow: ellipsis;
|
|
41
|
+
color: var(--xeno-text);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* The prev/next chevrons are one glyph (chevron-right); the prev button mirrors it to point left. */
|
|
45
|
+
.xeno-datepicker-prev .xeno-element {
|
|
46
|
+
transform: rotate(180deg);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.xeno-datepicker-weekdays {
|
|
50
|
+
display: grid;
|
|
51
|
+
grid-template-columns: repeat(7, var(--xeno-cell));
|
|
52
|
+
gap: 2px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.xeno-datepicker-weekday {
|
|
56
|
+
display: flex;
|
|
57
|
+
align-items: center;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
height: 16px;
|
|
60
|
+
font-size: 10px;
|
|
61
|
+
font-weight: 500;
|
|
62
|
+
color: var(--xeno-muted);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.xeno-datepicker-grid {
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
gap: 2px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.xeno-datepicker-week {
|
|
72
|
+
display: grid;
|
|
73
|
+
grid-template-columns: repeat(7, var(--xeno-cell));
|
|
74
|
+
gap: 2px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.xeno-datepicker-cell {
|
|
78
|
+
width: var(--xeno-cell);
|
|
79
|
+
height: var(--xeno-cell);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.xeno-datepicker-day {
|
|
83
|
+
display: inline-flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
padding: 0;
|
|
87
|
+
font-family: inherit;
|
|
88
|
+
font-size: 12px;
|
|
89
|
+
font-weight: 500;
|
|
90
|
+
font-variant-numeric: tabular-nums;
|
|
91
|
+
color: var(--xeno-text);
|
|
92
|
+
background: transparent;
|
|
93
|
+
border: 1px solid transparent;
|
|
94
|
+
border-radius: var(--xeno-radius-md);
|
|
95
|
+
cursor: pointer;
|
|
96
|
+
transition:
|
|
97
|
+
background var(--xeno-dur) ease,
|
|
98
|
+
color var(--xeno-dur) ease;
|
|
99
|
+
}
|
|
100
|
+
.xeno-datepicker-day:hover {
|
|
101
|
+
background: var(--xeno-hover);
|
|
102
|
+
}
|
|
103
|
+
.xeno-datepicker-day:focus-visible {
|
|
104
|
+
outline: none;
|
|
105
|
+
box-shadow:
|
|
106
|
+
0 0 0 2px var(--xeno-surface),
|
|
107
|
+
0 0 0 4px var(--xeno-border);
|
|
108
|
+
}
|
|
109
|
+
/* Adjacent-month days: present (real, clickable) but greyed back. */
|
|
110
|
+
.xeno-datepicker-day[data-outside] {
|
|
111
|
+
color: var(--xeno-muted);
|
|
112
|
+
opacity: 0.45;
|
|
113
|
+
}
|
|
114
|
+
/* Selection — the soft control fill the product uses, not bright inverted ink. */
|
|
115
|
+
.xeno-datepicker-day[data-selection='on'] {
|
|
116
|
+
color: var(--xeno-text);
|
|
117
|
+
opacity: 1;
|
|
118
|
+
background: var(--xeno-control);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.xeno-datepicker-footer {
|
|
122
|
+
display: flex;
|
|
123
|
+
align-items: center;
|
|
124
|
+
justify-content: space-between;
|
|
125
|
+
gap: 8px;
|
|
126
|
+
margin-top: 2px;
|
|
127
|
+
padding-top: 6px;
|
|
128
|
+
border-top: 1px solid var(--xeno-border);
|
|
129
|
+
}
|
|
130
|
+
/* If Clear is hidden, Today still sits at the right edge. */
|
|
131
|
+
.xeno-datepicker-footer > .xeno-datepicker-today:only-child {
|
|
132
|
+
margin-left: auto;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* ── TimePicker ──────────────────────────────────────────────────────────────────── */
|
|
136
|
+
.xeno-timepicker {
|
|
137
|
+
display: flex;
|
|
138
|
+
gap: 4px;
|
|
139
|
+
width: fit-content;
|
|
140
|
+
/* Match the calendar's natural height (26px cells → ~258px) so the two fields' panels are consistent
|
|
141
|
+
in size; the Hour/Min lists fill and scroll within it. */
|
|
142
|
+
min-height: 258px;
|
|
143
|
+
padding: 6px;
|
|
144
|
+
background: var(--xeno-surface);
|
|
145
|
+
border: 1px solid var(--xeno-border);
|
|
146
|
+
border-radius: var(--xeno-radius-md);
|
|
147
|
+
color: var(--xeno-text);
|
|
148
|
+
user-select: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Equal-width columns that stretch to the panel height, so all three boxes match — and the panel can
|
|
152
|
+
grow to match a taller sibling (e.g. the calendar) with the lists filling it, not leaving a gap. */
|
|
153
|
+
.xeno-timepicker-col {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex: 1 1 0;
|
|
156
|
+
flex-direction: column;
|
|
157
|
+
gap: 4px;
|
|
158
|
+
min-width: 58px;
|
|
159
|
+
min-height: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.xeno-timepicker-col-head {
|
|
163
|
+
flex: 0 0 auto;
|
|
164
|
+
padding: 0 2px;
|
|
165
|
+
font-size: 10px;
|
|
166
|
+
font-weight: 500;
|
|
167
|
+
letter-spacing: 0.06em;
|
|
168
|
+
text-transform: uppercase;
|
|
169
|
+
color: var(--xeno-muted);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.xeno-timepicker-list {
|
|
173
|
+
display: flex;
|
|
174
|
+
/* basis 0: the list FILLS the column height without its content inflating the panel — so the
|
|
175
|
+
calendar drives the shared height and the time panel matches it exactly (scrolling within). */
|
|
176
|
+
flex: 1 1 0;
|
|
177
|
+
flex-direction: column;
|
|
178
|
+
gap: 2px;
|
|
179
|
+
min-height: 0;
|
|
180
|
+
padding: 2px;
|
|
181
|
+
border: 1px solid var(--xeno-border);
|
|
182
|
+
border-radius: var(--xeno-radius-md);
|
|
183
|
+
}
|
|
184
|
+
/* Hour + Min scroll within the shared height; AM/PM (no data-scroll) sits flush at the top.
|
|
185
|
+
The scrollbar itself comes from `scrollbar.css`; a column this narrow only wants a slimmer one, so
|
|
186
|
+
it re-declares the SIZE TOKEN and nothing else. It used to re-implement the whole thing — and set
|
|
187
|
+
`scrollbar-width` alongside its own `::-webkit-scrollbar` rules, which since Chrome 121 means Blink
|
|
188
|
+
ignored every one of them and drew the default bar. */
|
|
189
|
+
.xeno-timepicker-list[data-scroll] {
|
|
190
|
+
--xeno-scroll-size: 9px;
|
|
191
|
+
--xeno-scroll-pad: 2px;
|
|
192
|
+
--xeno-scroll-pad-hover: 1px;
|
|
193
|
+
--xeno-scroll-rail-pad: 4px; /* 9 − 2×4 = a 1px rail; the default 5 would leave none at all */
|
|
194
|
+
overflow-y: auto;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.xeno-timepicker-option {
|
|
198
|
+
display: flex;
|
|
199
|
+
flex: 0 0 auto;
|
|
200
|
+
align-items: center;
|
|
201
|
+
justify-content: center;
|
|
202
|
+
height: 26px;
|
|
203
|
+
width: 100%;
|
|
204
|
+
padding: 0;
|
|
205
|
+
font-family: inherit;
|
|
206
|
+
font-size: 12px;
|
|
207
|
+
font-weight: 500;
|
|
208
|
+
font-variant-numeric: tabular-nums;
|
|
209
|
+
color: var(--xeno-muted);
|
|
210
|
+
background: transparent;
|
|
211
|
+
border: none;
|
|
212
|
+
border-radius: var(--xeno-radius-sm);
|
|
213
|
+
cursor: pointer;
|
|
214
|
+
transition:
|
|
215
|
+
background var(--xeno-dur) ease,
|
|
216
|
+
color var(--xeno-dur) ease;
|
|
217
|
+
}
|
|
218
|
+
.xeno-timepicker-option:hover {
|
|
219
|
+
color: var(--xeno-text);
|
|
220
|
+
background: var(--xeno-hover);
|
|
221
|
+
}
|
|
222
|
+
.xeno-timepicker-option:focus-visible {
|
|
223
|
+
outline: none;
|
|
224
|
+
box-shadow:
|
|
225
|
+
0 0 0 2px var(--xeno-surface),
|
|
226
|
+
0 0 0 4px var(--xeno-border);
|
|
227
|
+
}
|
|
228
|
+
.xeno-timepicker-option[data-selection='on'] {
|
|
229
|
+
color: var(--xeno-text);
|
|
230
|
+
background: var(--xeno-control);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@media (prefers-reduced-motion: reduce) {
|
|
234
|
+
.xeno-datepicker-day,
|
|
235
|
+
.xeno-timepicker-option {
|
|
236
|
+
transition: none;
|
|
237
|
+
}
|
|
238
|
+
}
|