@seed-design/css 2.3.0 → 2.4.0

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.
Files changed (40) hide show
  1. package/README.md +5 -0
  2. package/all.css +636 -3
  3. package/all.layered.css +636 -3
  4. package/all.layered.min.css +1 -1
  5. package/all.min.css +1 -1
  6. package/package.json +1 -1
  7. package/recipes/avatar.css +11 -1
  8. package/recipes/avatar.layered.css +9 -1
  9. package/recipes/bottom-sheet.css +3 -1
  10. package/recipes/bottom-sheet.layered.css +3 -1
  11. package/recipes/date-picker.css +400 -0
  12. package/recipes/date-picker.d.ts +24 -0
  13. package/recipes/date-picker.layered.css +461 -0
  14. package/recipes/date-picker.layered.mjs +165 -0
  15. package/recipes/date-picker.mjs +165 -0
  16. package/recipes/image-frame.css +11 -1
  17. package/recipes/image-frame.layered.css +9 -1
  18. package/recipes/quantity-picker.css +4 -0
  19. package/recipes/quantity-picker.d.ts +4 -0
  20. package/recipes/quantity-picker.layered.css +5 -0
  21. package/recipes/quantity-picker.layered.mjs +5 -0
  22. package/recipes/quantity-picker.mjs +5 -0
  23. package/recipes/time-picker.css +44 -0
  24. package/recipes/time-picker.d.ts +21 -0
  25. package/recipes/time-picker.layered.css +53 -0
  26. package/recipes/time-picker.layered.mjs +60 -0
  27. package/recipes/time-picker.mjs +60 -0
  28. package/recipes/wheel-picker.css +85 -0
  29. package/recipes/wheel-picker.d.ts +21 -0
  30. package/recipes/wheel-picker.layered.css +99 -0
  31. package/recipes/wheel-picker.layered.mjs +52 -0
  32. package/recipes/wheel-picker.mjs +52 -0
  33. package/vars/component/date-picker.d.ts +98 -0
  34. package/vars/component/date-picker.mjs +98 -0
  35. package/vars/component/index.d.ts +2 -0
  36. package/vars/component/index.mjs +2 -0
  37. package/vars/component/menu-sheet-item.d.ts +2 -6
  38. package/vars/component/menu-sheet-item.mjs +2 -6
  39. package/vars/component/time-picker.d.ts +27 -0
  40. package/vars/component/time-picker.mjs +27 -0
@@ -0,0 +1,461 @@
1
+ @layer seed-components {
2
+ .seed-date-picker__root {
3
+ box-sizing: border-box;
4
+ width: 100%;
5
+ min-width: 0;
6
+ color: var(--seed-color-fg-neutral-muted);
7
+ background-color: var(--seed-color-bg-layer-floating);
8
+ position: relative;
9
+ }
10
+
11
+ .seed-date-picker__header {
12
+ height: var(--seed-dimension-x12);
13
+ justify-content: space-between;
14
+ align-items: center;
15
+ display: flex;
16
+ }
17
+
18
+ .seed-date-picker__headerLabel {
19
+ align-items: center;
20
+ gap: var(--seed-dimension-x1);
21
+ border-radius: var(--seed-radius-r2);
22
+ min-width: 0;
23
+ height: 100%;
24
+ padding-inline: var(--seed-dimension-x1);
25
+ color: var(--seed-color-fg-neutral);
26
+ font-family: inherit;
27
+ font-size: var(--seed-font-size-t5);
28
+ line-height: var(--seed-line-height-t5);
29
+ font-weight: var(--seed-font-weight-bold);
30
+ white-space: nowrap;
31
+ cursor: pointer;
32
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
33
+ outline: var(--seed-dimension-x0_5) solid transparent;
34
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
35
+ background: none;
36
+ border: 0;
37
+ padding-block: 0;
38
+ display: inline-flex;
39
+ }
40
+
41
+ .seed-date-picker__headerLabel:is(:focus-visible, [data-focus-visible]) {
42
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
43
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
44
+ }
45
+
46
+ .seed-date-picker__headerLabel:is(:disabled, [disabled], [data-disabled]) {
47
+ cursor: default;
48
+ }
49
+
50
+ .seed-date-picker__headerLabel > [data-date-picker-header-label] {
51
+ text-overflow: ellipsis;
52
+ min-width: 0;
53
+ overflow: hidden;
54
+ }
55
+
56
+ .seed-date-picker__headerChevron {
57
+ width: var(--seed-dimension-x5);
58
+ height: var(--seed-dimension-x5);
59
+ --seed-icon-size: var(--seed-dimension-x5);
60
+ flex-shrink: 0;
61
+ justify-content: center;
62
+ align-items: center;
63
+ display: inline-flex;
64
+ }
65
+
66
+ .seed-date-picker__navigation {
67
+ flex-shrink: 0;
68
+ align-items: center;
69
+ display: flex;
70
+ }
71
+
72
+ .seed-date-picker__navigationButton {
73
+ flex-shrink: 0;
74
+ }
75
+
76
+ .seed-date-picker__twoMonthHeader {
77
+ height: var(--seed-dimension-x12);
78
+ justify-content: center;
79
+ align-items: center;
80
+ display: flex;
81
+ position: relative;
82
+ }
83
+
84
+ .seed-date-picker__twoMonthLabel {
85
+ width: 100%;
86
+ height: 100%;
87
+ color: var(--seed-color-fg-neutral);
88
+ font-size: var(--seed-font-size-t5);
89
+ line-height: var(--seed-line-height-t5);
90
+ font-weight: var(--seed-font-weight-bold);
91
+ white-space: nowrap;
92
+ justify-content: center;
93
+ align-items: center;
94
+ display: flex;
95
+ }
96
+
97
+ .seed-date-picker__twoMonthNavigationButton {
98
+ flex-shrink: 0;
99
+ position: absolute;
100
+ top: 4px;
101
+ }
102
+
103
+ .seed-date-picker__twoMonthNavigationButton[data-placement="start"] {
104
+ inset-inline-start: 0;
105
+ }
106
+
107
+ .seed-date-picker__twoMonthNavigationButton[data-placement="end"] {
108
+ inset-inline-end: 0;
109
+ }
110
+
111
+ .seed-date-picker__weekdayRow {
112
+ z-index: 2;
113
+ background-color: var(--seed-color-bg-layer-floating);
114
+ grid-template-columns: repeat(7, minmax(0, 1fr));
115
+ display: grid;
116
+ position: relative;
117
+ }
118
+
119
+ .seed-date-picker__weekday {
120
+ height: var(--seed-dimension-x12);
121
+ color: var(--seed-color-fg-neutral-subtle);
122
+ font-size: var(--seed-font-size-t4);
123
+ line-height: var(--seed-line-height-t4);
124
+ font-weight: var(--seed-font-weight-medium);
125
+ justify-content: center;
126
+ align-items: center;
127
+ display: flex;
128
+ }
129
+
130
+ .seed-date-picker__months {
131
+ grid-template-columns: minmax(0, 1fr);
132
+ align-items: start;
133
+ min-width: 0;
134
+ display: grid;
135
+ }
136
+
137
+ .seed-date-picker__months[data-wheel-open] {
138
+ visibility: hidden;
139
+ }
140
+
141
+ .seed-date-picker__month {
142
+ min-width: 0;
143
+ }
144
+
145
+ .seed-date-picker__monthLabel {
146
+ height: var(--seed-dimension-x12);
147
+ color: var(--seed-color-fg-neutral);
148
+ font-size: var(--seed-font-size-t5);
149
+ line-height: var(--seed-line-height-t5);
150
+ font-weight: var(--seed-font-weight-bold);
151
+ align-items: center;
152
+ display: flex;
153
+ }
154
+
155
+ .seed-date-picker__grid {
156
+ min-width: 0;
157
+ display: grid;
158
+ }
159
+
160
+ .seed-date-picker__weekRow {
161
+ grid-template-columns: repeat(7, minmax(0, 1fr));
162
+ display: grid;
163
+ }
164
+
165
+ .seed-date-picker__dateCell {
166
+ min-width: 0;
167
+ min-height: var(--seed-dimension-x12);
168
+ isolation: isolate;
169
+ position: relative;
170
+ }
171
+
172
+ .seed-date-picker__dateCell[data-range-complete][data-in-range]:before {
173
+ content: "";
174
+ z-index: -1;
175
+ inset-inline: 0;
176
+ background-color: var(--seed-color-bg-neutral-weak);
177
+ height: 42px;
178
+ position: absolute;
179
+ top: 3px;
180
+ }
181
+
182
+ .seed-date-picker__dateCell[data-range-complete][data-range-start]:not([data-range-end]):before {
183
+ content: "";
184
+ z-index: -1;
185
+ inset-inline: 50% 0;
186
+ background-color: var(--seed-color-bg-neutral-weak);
187
+ height: 42px;
188
+ position: absolute;
189
+ top: 3px;
190
+ }
191
+
192
+ .seed-date-picker__dateCell[data-range-complete][data-range-end]:not([data-range-start]):before {
193
+ content: "";
194
+ z-index: -1;
195
+ inset-inline: 0 50%;
196
+ background-color: var(--seed-color-bg-neutral-weak);
197
+ height: 42px;
198
+ position: absolute;
199
+ top: 3px;
200
+ }
201
+
202
+ .seed-date-picker__dateButton {
203
+ width: 100%;
204
+ height: 100%;
205
+ min-height: var(--seed-dimension-x12);
206
+ min-width: 0;
207
+ color: var(--seed-color-fg-neutral-muted);
208
+ cursor: pointer;
209
+ font: inherit;
210
+ isolation: isolate;
211
+ background: none;
212
+ border: 0;
213
+ justify-content: center;
214
+ align-items: flex-start;
215
+ padding: 0;
216
+ display: flex;
217
+ position: relative;
218
+ }
219
+
220
+ .seed-date-picker__dateButton:before {
221
+ content: "";
222
+ z-index: -1;
223
+ border-radius: var(--seed-radius-full);
224
+ background-color: var(--seed-color-bg-transparent);
225
+ width: 42px;
226
+ height: 42px;
227
+ position: absolute;
228
+ top: 3px;
229
+ left: 50%;
230
+ transform: translateX(-50%);
231
+ }
232
+
233
+ .seed-date-picker__dateButton:after {
234
+ content: "";
235
+ z-index: 2;
236
+ border-radius: var(--seed-radius-full);
237
+ pointer-events: none;
238
+ width: 42px;
239
+ height: 42px;
240
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
241
+ outline: var(--seed-dimension-x0_5) solid transparent;
242
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
243
+ position: absolute;
244
+ top: 3px;
245
+ left: 50%;
246
+ transform: translateX(-50%);
247
+ }
248
+
249
+ .seed-date-picker__dateButton[data-today]:before {
250
+ background-color: var(--seed-color-bg-neutral-weak);
251
+ }
252
+
253
+ .seed-date-picker__dateButton:is([aria-selected="true"], [data-selected]):before {
254
+ background-color: var(--seed-color-bg-neutral-inverted);
255
+ }
256
+
257
+ .seed-date-picker__dateButton:is([aria-selected="true"], [data-selected]) {
258
+ color: var(--seed-color-fg-neutral-inverted);
259
+ }
260
+
261
+ @media (hover: hover) and (pointer: fine) {
262
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is(:hover, [data-hover]):before {
263
+ background-color: var(--seed-color-bg-transparent-pressed);
264
+ }
265
+ }
266
+
267
+ @media not all and (hover: hover) and (pointer: fine) {
268
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active]):before {
269
+ background-color: var(--seed-color-bg-transparent-pressed);
270
+ }
271
+ }
272
+
273
+ @media (hover: hover) and (pointer: fine) {
274
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is([aria-selected="true"], [data-selected]):is(:hover, [data-hover]):not([data-in-range]):before {
275
+ background-color: var(--seed-color-bg-neutral-inverted);
276
+ }
277
+ }
278
+
279
+ @media not all and (hover: hover) and (pointer: fine) {
280
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is([aria-selected="true"], [data-selected]):is(:active, [data-active]):not([data-in-range]):before {
281
+ background-color: var(--seed-color-bg-neutral-inverted);
282
+ }
283
+ }
284
+
285
+ .seed-date-picker__dateButton[data-in-range] {
286
+ color: var(--seed-color-fg-neutral-muted);
287
+ }
288
+
289
+ .seed-date-picker__dateButton[data-in-range]:before {
290
+ background-color: #0000;
291
+ }
292
+
293
+ .seed-date-picker__dateButton[data-unavailable] {
294
+ color: var(--seed-color-fg-disabled);
295
+ cursor: not-allowed;
296
+ }
297
+
298
+ .seed-date-picker__dateButton[data-unavailable] [data-date-picker-day] {
299
+ text-decoration: line-through;
300
+ }
301
+
302
+ .seed-date-picker__dateButton[data-unavailable][data-range-start]:not([data-range-complete]) [data-date-picker-day] {
303
+ text-decoration: none;
304
+ }
305
+
306
+ .seed-date-picker__dateButton:is(:disabled, [disabled], [data-disabled]) {
307
+ color: var(--seed-color-fg-disabled);
308
+ cursor: default;
309
+ }
310
+
311
+ .seed-date-picker__dateButton {
312
+ outline: none;
313
+ }
314
+
315
+ .seed-date-picker__dateButton:is(:focus-visible, [data-focus-visible]):after {
316
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
317
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
318
+ }
319
+
320
+ .seed-date-picker__dateContent {
321
+ z-index: 1;
322
+ width: 100%;
323
+ min-height: var(--seed-dimension-x12);
324
+ box-sizing: border-box;
325
+ min-width: 0;
326
+ color: inherit;
327
+ font-size: var(--seed-font-size-t5);
328
+ line-height: var(--seed-line-height-t5);
329
+ font-weight: var(--seed-font-weight-medium);
330
+ font-variant-numeric: tabular-nums;
331
+ flex-direction: column;
332
+ align-items: center;
333
+ gap: 3px;
334
+ padding-top: 3px;
335
+ display: flex;
336
+ position: relative;
337
+ }
338
+
339
+ .seed-date-picker__dateContent > [data-date-picker-day] {
340
+ flex-shrink: 0;
341
+ justify-content: center;
342
+ align-items: center;
343
+ min-height: 42px;
344
+ display: flex;
345
+ }
346
+
347
+ .seed-date-picker__emptyCell {
348
+ min-height: var(--seed-dimension-x12);
349
+ }
350
+
351
+ .seed-date-picker__continuousScroll {
352
+ overscroll-behavior: contain;
353
+ scrollbar-width: none;
354
+ height: 100%;
355
+ min-height: 0;
356
+ position: relative;
357
+ overflow-y: auto;
358
+ }
359
+
360
+ .seed-date-picker__continuousScroll::-webkit-scrollbar {
361
+ display: none;
362
+ }
363
+
364
+ .seed-date-picker__continuousScroll:after {
365
+ content: "";
366
+ z-index: 3;
367
+ background: linear-gradient(to bottom, transparent, var(--seed-color-bg-layer-floating));
368
+ pointer-events: none;
369
+ width: 100%;
370
+ height: 96px;
371
+ margin-top: -96px;
372
+ display: block;
373
+ position: sticky;
374
+ bottom: 0;
375
+ }
376
+
377
+ .seed-date-picker__continuousContent {
378
+ min-width: 0;
379
+ position: relative;
380
+ }
381
+
382
+ .seed-date-picker__continuousSpacer {
383
+ height: var(--seed-date-picker-continuous-spacer-height);
384
+ }
385
+
386
+ .seed-date-picker__wheelContainer {
387
+ z-index: 1;
388
+ inset-inline: 0;
389
+ top: var(--seed-dimension-x12);
390
+ background-color: var(--seed-color-bg-layer-floating);
391
+ align-items: center;
392
+ display: flex;
393
+ position: absolute;
394
+ bottom: 0;
395
+ overflow: hidden;
396
+ }
397
+
398
+ .seed-date-picker__wheelView {
399
+ --seed-wheel-picker-selection-indicator-corner-radius: var(--seed-radius-r2);
400
+ width: 100%;
401
+ }
402
+
403
+ .seed-date-picker__wheelSelectionIndicator {
404
+ border-radius: var(--seed-radius-r2);
405
+ background-color: var(--seed-color-bg-neutral-weak);
406
+ }
407
+
408
+ .seed-date-picker__yearColumn {
409
+ --seed-wheel-picker-item-justify-content: flex-end;
410
+ flex: 0 0 120px;
411
+ }
412
+
413
+ .seed-date-picker__monthColumn {
414
+ --seed-wheel-picker-item-justify-content: flex-start;
415
+ flex: 0 0 96px;
416
+ }
417
+
418
+ .seed-date-picker__wheelItem {
419
+ --seed-wheel-picker-item-color: var(--seed-color-fg-disabled);
420
+ --seed-wheel-picker-selected-item-color: var(--seed-color-fg-neutral);
421
+ padding-inline: var(--seed-dimension-x4);
422
+ font-size: var(--seed-font-size-t10-static);
423
+ line-height: var(--seed-line-height-t10-static);
424
+ font-weight: var(--seed-font-weight-medium);
425
+ }
426
+
427
+ .seed-date-picker__liveRegion {
428
+ clip: rect(0, 0, 0, 0);
429
+ white-space: nowrap;
430
+ border: 0;
431
+ width: 1px;
432
+ height: 1px;
433
+ margin: -1px;
434
+ padding: 0;
435
+ position: absolute;
436
+ overflow: hidden;
437
+ }
438
+
439
+ .seed-date-picker__months--visibleRange_twoMonths {
440
+ column-gap: var(--seed-dimension-x6);
441
+ grid-template-columns: repeat(2, minmax(0, 1fr));
442
+ }
443
+
444
+ .seed-date-picker__root--visibleRange_continuous {
445
+ height: 100%;
446
+ min-height: 0;
447
+ }
448
+
449
+ .seed-date-picker__weekdayRow--visibleRange_continuous {
450
+ position: sticky;
451
+ top: 0;
452
+ }
453
+
454
+ .seed-date-picker__month--visibleRange_continuous {
455
+ padding-bottom: 16px;
456
+ }
457
+
458
+ .seed-date-picker__weekday--visibleRange_week {
459
+ height: 24px;
460
+ }
461
+ }
@@ -0,0 +1,165 @@
1
+ import './date-picker.layered.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const datePickerSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-date-picker__root"
8
+ ],
9
+ [
10
+ "header",
11
+ "seed-date-picker__header"
12
+ ],
13
+ [
14
+ "headerLabel",
15
+ "seed-date-picker__headerLabel"
16
+ ],
17
+ [
18
+ "headerChevron",
19
+ "seed-date-picker__headerChevron"
20
+ ],
21
+ [
22
+ "navigation",
23
+ "seed-date-picker__navigation"
24
+ ],
25
+ [
26
+ "navigationButton",
27
+ "seed-date-picker__navigationButton"
28
+ ],
29
+ [
30
+ "twoMonthHeader",
31
+ "seed-date-picker__twoMonthHeader"
32
+ ],
33
+ [
34
+ "twoMonthLabel",
35
+ "seed-date-picker__twoMonthLabel"
36
+ ],
37
+ [
38
+ "twoMonthNavigationButton",
39
+ "seed-date-picker__twoMonthNavigationButton"
40
+ ],
41
+ [
42
+ "weekdayRow",
43
+ "seed-date-picker__weekdayRow"
44
+ ],
45
+ [
46
+ "weekday",
47
+ "seed-date-picker__weekday"
48
+ ],
49
+ [
50
+ "months",
51
+ "seed-date-picker__months"
52
+ ],
53
+ [
54
+ "month",
55
+ "seed-date-picker__month"
56
+ ],
57
+ [
58
+ "monthLabel",
59
+ "seed-date-picker__monthLabel"
60
+ ],
61
+ [
62
+ "grid",
63
+ "seed-date-picker__grid"
64
+ ],
65
+ [
66
+ "weekRow",
67
+ "seed-date-picker__weekRow"
68
+ ],
69
+ [
70
+ "dateCell",
71
+ "seed-date-picker__dateCell"
72
+ ],
73
+ [
74
+ "dateButton",
75
+ "seed-date-picker__dateButton"
76
+ ],
77
+ [
78
+ "dateContent",
79
+ "seed-date-picker__dateContent"
80
+ ],
81
+ [
82
+ "emptyCell",
83
+ "seed-date-picker__emptyCell"
84
+ ],
85
+ [
86
+ "continuousScroll",
87
+ "seed-date-picker__continuousScroll"
88
+ ],
89
+ [
90
+ "continuousContent",
91
+ "seed-date-picker__continuousContent"
92
+ ],
93
+ [
94
+ "continuousSpacer",
95
+ "seed-date-picker__continuousSpacer"
96
+ ],
97
+ [
98
+ "wheelContainer",
99
+ "seed-date-picker__wheelContainer"
100
+ ],
101
+ [
102
+ "wheelView",
103
+ "seed-date-picker__wheelView"
104
+ ],
105
+ [
106
+ "wheelColumns",
107
+ "seed-date-picker__wheelColumns"
108
+ ],
109
+ [
110
+ "wheelSelectionIndicator",
111
+ "seed-date-picker__wheelSelectionIndicator"
112
+ ],
113
+ [
114
+ "wheelScrollFog",
115
+ "seed-date-picker__wheelScrollFog"
116
+ ],
117
+ [
118
+ "yearColumn",
119
+ "seed-date-picker__yearColumn"
120
+ ],
121
+ [
122
+ "monthColumn",
123
+ "seed-date-picker__monthColumn"
124
+ ],
125
+ [
126
+ "wheelItem",
127
+ "seed-date-picker__wheelItem"
128
+ ],
129
+ [
130
+ "liveRegion",
131
+ "seed-date-picker__liveRegion"
132
+ ]
133
+ ];
134
+
135
+ const defaultVariant = {
136
+ "visibleRange": "month"
137
+ };
138
+
139
+ const compoundVariants = [];
140
+
141
+ export const datePickerVariantMap = {
142
+ "visibleRange": [
143
+ "month",
144
+ "twoMonths",
145
+ "continuous",
146
+ "week"
147
+ ]
148
+ };
149
+
150
+ export const datePickerVariantKeys = Object.keys(datePickerVariantMap);
151
+
152
+ export function datePicker(props) {
153
+ return Object.fromEntries(
154
+ datePickerSlotNames.map(([slot, className]) => {
155
+ return [
156
+ slot,
157
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
158
+ ];
159
+ }),
160
+ );
161
+ }
162
+
163
+ Object.assign(datePicker, { splitVariantProps: (props) => splitVariantProps(props, datePickerVariantMap) });
164
+
165
+ // @recipe(seed): date-picker