@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seed-design/css",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/daangn/seed-design.git",
@@ -8,6 +8,7 @@
8
8
  border-radius: var(--seed-radius-full);
9
9
  width: var(--avatar-size);
10
10
  height: var(--avatar-size);
11
+ isolation: isolate;
11
12
  }
12
13
  .seed-avatar__root:after {
13
14
  content: "";
@@ -46,10 +47,19 @@
46
47
  mask-composite: subtract;
47
48
  transform: translateZ(0);
48
49
  }
49
- .seed-avatar__image:not([data-loading-state='loaded']) {
50
+ .seed-avatar__image[data-loading-state='error'] {
51
+ display: none;
52
+ }
53
+ .seed-avatar__image:is([hidden], [data-hidden]) {
50
54
  display: none;
51
55
  }
56
+ .seed-avatar__image:not([data-loading-state='loaded']) {
57
+ pointer-events: none;
58
+ }
52
59
  .seed-avatar__fallback {
60
+ position: absolute;
61
+ inset: 0;
62
+ z-index: -1;
53
63
  display: flex;
54
64
  justify-content: center;
55
65
  align-items: center;
@@ -5,6 +5,7 @@
5
5
  border-radius: var(--seed-radius-full);
6
6
  width: var(--avatar-size);
7
7
  height: var(--avatar-size);
8
+ isolation: isolate;
8
9
  justify-content: center;
9
10
  align-items: center;
10
11
  display: inline-flex;
@@ -50,11 +51,16 @@
50
51
  mask-composite: subtract;
51
52
  }
52
53
 
53
- .seed-avatar__image:not([data-loading-state="loaded"]) {
54
+ .seed-avatar__image[data-loading-state="error"], .seed-avatar__image:is([hidden], [data-hidden]) {
54
55
  display: none;
55
56
  }
56
57
 
58
+ .seed-avatar__image:not([data-loading-state="loaded"]) {
59
+ pointer-events: none;
60
+ }
61
+
57
62
  .seed-avatar__fallback {
63
+ z-index: -1;
58
64
  object-fit: cover;
59
65
  border-radius: var(--seed-radius-full);
60
66
  width: 100%;
@@ -70,6 +76,8 @@
70
76
  justify-content: center;
71
77
  align-items: center;
72
78
  display: flex;
79
+ position: absolute;
80
+ inset: 0;
73
81
  overflow: hidden;
74
82
  transform: translateZ(0);
75
83
  mask-repeat: no-repeat;
@@ -35,9 +35,11 @@
35
35
  border-top-left-radius: var(--seed-radius-r6);
36
36
  border-top-right-radius: var(--seed-radius-r6);
37
37
  padding-bottom: var(--seed-safe-area-bottom);
38
+ bottom: 0;
38
39
  touch-action: none;
39
40
  will-change: transform;
40
- transition: transform var(--seed-duration-d6) var(--seed-timing-function-enter-expressive);
41
+ --drawer-keyboard-transition: bottom var(--seed-duration-d5) cubic-bezier(0.32, 0.72, 0, 1);
42
+ transition: transform var(--seed-duration-d6) var(--seed-timing-function-enter-expressive), var(--drawer-keyboard-transition);
41
43
  }
42
44
  .seed-bottom-sheet__content[data-snap-points='true'] {
43
45
  transform: translate3d(0, var(--initial-transform, 100%), 0);
@@ -35,11 +35,13 @@
35
35
  padding-bottom: var(--seed-safe-area-bottom);
36
36
  touch-action: none;
37
37
  will-change: transform;
38
- transition: transform var(--seed-duration-d6) var(--seed-timing-function-enter-expressive);
38
+ --drawer-keyboard-transition: bottom var(--seed-duration-d5) cubic-bezier(.32, .72, 0, 1);
39
+ transition: transform var(--seed-duration-d6) var(--seed-timing-function-enter-expressive), var(--drawer-keyboard-transition);
39
40
  flex-direction: column;
40
41
  flex: 1;
41
42
  display: flex;
42
43
  position: relative;
44
+ bottom: 0;
43
45
  }
44
46
 
45
47
  .seed-bottom-sheet__content[data-snap-points="true"] {
@@ -0,0 +1,400 @@
1
+ .seed-date-picker__root {
2
+ position: relative;
3
+ width: 100%;
4
+ min-width: 0;
5
+ box-sizing: border-box;
6
+ color: var(--seed-color-fg-neutral-muted);
7
+ background-color: var(--seed-color-bg-layer-floating);
8
+ }
9
+ .seed-date-picker__header {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ height: var(--seed-dimension-x12);
14
+ }
15
+ .seed-date-picker__headerLabel {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ gap: var(--seed-dimension-x1);
19
+ height: 100%;
20
+ min-width: 0;
21
+ border: 0;
22
+ border-radius: var(--seed-radius-r2);
23
+ padding-inline: var(--seed-dimension-x1);
24
+ padding-block: 0;
25
+ color: var(--seed-color-fg-neutral);
26
+ background: transparent;
27
+ font-family: inherit;
28
+ font-size: var(--seed-font-size-t5);
29
+ line-height: var(--seed-line-height-t5);
30
+ font-weight: var(--seed-font-weight-bold);
31
+ white-space: nowrap;
32
+ cursor: pointer;
33
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
34
+ outline: var(--seed-dimension-x0_5) solid transparent;
35
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
36
+ }
37
+ .seed-date-picker__headerLabel:is(:focus-visible, [data-focus-visible]) {
38
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
39
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
40
+ }
41
+ .seed-date-picker__headerLabel:is(:disabled, [disabled], [data-disabled]) {
42
+ cursor: default;
43
+ }
44
+ .seed-date-picker__headerLabel > [data-date-picker-header-label] {
45
+ min-width: 0;
46
+ overflow: hidden;
47
+ text-overflow: ellipsis;
48
+ }
49
+ .seed-date-picker__headerChevron {
50
+ display: inline-flex;
51
+ width: var(--seed-dimension-x5);
52
+ height: var(--seed-dimension-x5);
53
+ flex-shrink: 0;
54
+ align-items: center;
55
+ justify-content: center;
56
+ --seed-icon-size: var(--seed-dimension-x5);
57
+ }
58
+ .seed-date-picker__navigation {
59
+ display: flex;
60
+ align-items: center;
61
+ flex-shrink: 0;
62
+ }
63
+ .seed-date-picker__navigationButton {
64
+ flex-shrink: 0;
65
+ }
66
+ .seed-date-picker__twoMonthHeader {
67
+ position: relative;
68
+ display: flex;
69
+ height: var(--seed-dimension-x12);
70
+ align-items: center;
71
+ justify-content: center;
72
+ }
73
+ .seed-date-picker__twoMonthLabel {
74
+ display: flex;
75
+ width: 100%;
76
+ height: 100%;
77
+ align-items: center;
78
+ justify-content: center;
79
+ color: var(--seed-color-fg-neutral);
80
+ font-size: var(--seed-font-size-t5);
81
+ line-height: var(--seed-line-height-t5);
82
+ font-weight: var(--seed-font-weight-bold);
83
+ white-space: nowrap;
84
+ }
85
+ .seed-date-picker__twoMonthNavigationButton {
86
+ position: absolute;
87
+ top: 4px;
88
+ flex-shrink: 0;
89
+ }
90
+ .seed-date-picker__twoMonthNavigationButton[data-placement='start'] {
91
+ inset-inline-start: 0;
92
+ }
93
+ .seed-date-picker__twoMonthNavigationButton[data-placement='end'] {
94
+ inset-inline-end: 0;
95
+ }
96
+ .seed-date-picker__weekdayRow {
97
+ display: grid;
98
+ grid-template-columns: repeat(7, minmax(0, 1fr));
99
+ position: relative;
100
+ z-index: 2;
101
+ background-color: var(--seed-color-bg-layer-floating);
102
+ }
103
+ .seed-date-picker__weekday {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ height: var(--seed-dimension-x12);
108
+ color: var(--seed-color-fg-neutral-subtle);
109
+ font-size: var(--seed-font-size-t4);
110
+ line-height: var(--seed-line-height-t4);
111
+ font-weight: var(--seed-font-weight-medium);
112
+ }
113
+ .seed-date-picker__months {
114
+ display: grid;
115
+ grid-template-columns: minmax(0, 1fr);
116
+ align-items: start;
117
+ min-width: 0;
118
+ }
119
+ .seed-date-picker__months[data-wheel-open] {
120
+ visibility: hidden;
121
+ }
122
+ .seed-date-picker__month {
123
+ min-width: 0;
124
+ }
125
+ .seed-date-picker__monthLabel {
126
+ display: flex;
127
+ align-items: center;
128
+ height: var(--seed-dimension-x12);
129
+ color: var(--seed-color-fg-neutral);
130
+ font-size: var(--seed-font-size-t5);
131
+ line-height: var(--seed-line-height-t5);
132
+ font-weight: var(--seed-font-weight-bold);
133
+ }
134
+ .seed-date-picker__grid {
135
+ display: grid;
136
+ min-width: 0;
137
+ }
138
+ .seed-date-picker__weekRow {
139
+ display: grid;
140
+ grid-template-columns: repeat(7, minmax(0, 1fr));
141
+ }
142
+ .seed-date-picker__dateCell {
143
+ position: relative;
144
+ min-width: 0;
145
+ min-height: var(--seed-dimension-x12);
146
+ isolation: isolate;
147
+ }
148
+ .seed-date-picker__dateCell[data-range-complete][data-in-range]::before {
149
+ content: "";
150
+ position: absolute;
151
+ z-index: -1;
152
+ inset-inline: 0;
153
+ top: 3px;
154
+ height: 42px;
155
+ background-color: var(--seed-color-bg-neutral-weak);
156
+ }
157
+ .seed-date-picker__dateCell[data-range-complete][data-range-start]:not([data-range-end])::before {
158
+ content: "";
159
+ position: absolute;
160
+ z-index: -1;
161
+ inset-inline-start: 50%;
162
+ inset-inline-end: 0;
163
+ top: 3px;
164
+ height: 42px;
165
+ background-color: var(--seed-color-bg-neutral-weak);
166
+ }
167
+ .seed-date-picker__dateCell[data-range-complete][data-range-end]:not([data-range-start])::before {
168
+ content: "";
169
+ position: absolute;
170
+ z-index: -1;
171
+ inset-inline-start: 0;
172
+ inset-inline-end: 50%;
173
+ top: 3px;
174
+ height: 42px;
175
+ background-color: var(--seed-color-bg-neutral-weak);
176
+ }
177
+ .seed-date-picker__dateButton {
178
+ position: relative;
179
+ display: flex;
180
+ width: 100%;
181
+ height: 100%;
182
+ min-height: var(--seed-dimension-x12);
183
+ min-width: 0;
184
+ align-items: flex-start;
185
+ justify-content: center;
186
+ border: 0;
187
+ padding: 0;
188
+ color: var(--seed-color-fg-neutral-muted);
189
+ background: transparent;
190
+ cursor: pointer;
191
+ font: inherit;
192
+ isolation: isolate;
193
+ }
194
+ .seed-date-picker__dateButton::before {
195
+ content: "";
196
+ position: absolute;
197
+ z-index: -1;
198
+ top: 3px;
199
+ left: 50%;
200
+ width: 42px;
201
+ height: 42px;
202
+ border-radius: var(--seed-radius-full);
203
+ background-color: var(--seed-color-bg-transparent);
204
+ transform: translateX(-50%);
205
+ }
206
+ .seed-date-picker__dateButton::after {
207
+ content: "";
208
+ position: absolute;
209
+ z-index: 2;
210
+ top: 3px;
211
+ left: 50%;
212
+ width: 42px;
213
+ height: 42px;
214
+ border-radius: var(--seed-radius-full);
215
+ pointer-events: none;
216
+ transform: translateX(-50%);
217
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
218
+ outline: var(--seed-dimension-x0_5) solid transparent;
219
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
220
+ }
221
+ .seed-date-picker__dateButton[data-today]::before {
222
+ background-color: var(--seed-color-bg-neutral-weak);
223
+ }
224
+ .seed-date-picker__dateButton:is([aria-selected=true], [data-selected])::before {
225
+ background-color: var(--seed-color-bg-neutral-inverted);
226
+ }
227
+ .seed-date-picker__dateButton:is([aria-selected=true], [data-selected]) {
228
+ color: var(--seed-color-fg-neutral-inverted);
229
+ }
230
+ @media (hover: hover) and (pointer: fine) {
231
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is(:hover, [data-hover])::before {
232
+ background-color: var(--seed-color-bg-transparent-pressed);
233
+ }
234
+ }
235
+ @media not all and (hover: hover) and (pointer: fine) {
236
+ .seed-date-picker__dateButton:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active])::before {
237
+ background-color: var(--seed-color-bg-transparent-pressed);
238
+ }
239
+ }
240
+ @media (hover: hover) and (pointer: fine) {
241
+ .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 {
242
+ background-color: var(--seed-color-bg-neutral-inverted);
243
+ }
244
+ }
245
+ @media not all and (hover: hover) and (pointer: fine) {
246
+ .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 {
247
+ background-color: var(--seed-color-bg-neutral-inverted);
248
+ }
249
+ }
250
+ .seed-date-picker__dateButton[data-in-range] {
251
+ color: var(--seed-color-fg-neutral-muted);
252
+ }
253
+ .seed-date-picker__dateButton[data-in-range]::before {
254
+ background-color: transparent;
255
+ }
256
+ .seed-date-picker__dateButton[data-unavailable] {
257
+ color: var(--seed-color-fg-disabled);
258
+ cursor: not-allowed;
259
+ }
260
+ .seed-date-picker__dateButton[data-unavailable] [data-date-picker-day] {
261
+ text-decoration: line-through;
262
+ }
263
+ .seed-date-picker__dateButton[data-unavailable][data-range-start]:not([data-range-complete]) [data-date-picker-day] {
264
+ text-decoration: none;
265
+ }
266
+ .seed-date-picker__dateButton:is(:disabled, [disabled], [data-disabled]) {
267
+ color: var(--seed-color-fg-disabled);
268
+ cursor: default;
269
+ }
270
+ .seed-date-picker__dateButton {
271
+ outline: none;
272
+ }
273
+ .seed-date-picker__dateButton:is(:focus-visible, [data-focus-visible])::after {
274
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
275
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
276
+ }
277
+ .seed-date-picker__dateContent {
278
+ position: relative;
279
+ z-index: 1;
280
+ display: flex;
281
+ width: 100%;
282
+ min-height: var(--seed-dimension-x12);
283
+ min-width: 0;
284
+ box-sizing: border-box;
285
+ flex-direction: column;
286
+ align-items: center;
287
+ gap: 3px;
288
+ padding-top: 3px;
289
+ color: inherit;
290
+ font-size: var(--seed-font-size-t5);
291
+ line-height: var(--seed-line-height-t5);
292
+ font-weight: var(--seed-font-weight-medium);
293
+ font-variant-numeric: tabular-nums;
294
+ }
295
+ .seed-date-picker__dateContent > [data-date-picker-day] {
296
+ display: flex;
297
+ min-height: 42px;
298
+ flex-shrink: 0;
299
+ align-items: center;
300
+ justify-content: center;
301
+ }
302
+ .seed-date-picker__emptyCell {
303
+ min-height: var(--seed-dimension-x12);
304
+ }
305
+ .seed-date-picker__continuousScroll {
306
+ position: relative;
307
+ height: 100%;
308
+ min-height: 0;
309
+ overflow-y: auto;
310
+ overscroll-behavior: contain;
311
+ scrollbar-width: none;
312
+ }
313
+ .seed-date-picker__continuousScroll::-webkit-scrollbar {
314
+ display: none;
315
+ }
316
+ .seed-date-picker__continuousScroll::after {
317
+ content: "";
318
+ position: sticky;
319
+ z-index: 3;
320
+ bottom: 0;
321
+ display: block;
322
+ width: 100%;
323
+ height: 96px;
324
+ margin-top: calc(96px * -1);
325
+ background: linear-gradient(to bottom, transparent, var(--seed-color-bg-layer-floating));
326
+ pointer-events: none;
327
+ }
328
+ .seed-date-picker__continuousContent {
329
+ position: relative;
330
+ min-width: 0;
331
+ }
332
+ .seed-date-picker__continuousSpacer {
333
+ height: var(--seed-date-picker-continuous-spacer-height);
334
+ }
335
+ .seed-date-picker__wheelContainer {
336
+ position: absolute;
337
+ z-index: 1;
338
+ inset-inline: 0;
339
+ top: var(--seed-dimension-x12);
340
+ bottom: 0;
341
+ display: flex;
342
+ align-items: center;
343
+ overflow: hidden;
344
+ background-color: var(--seed-color-bg-layer-floating);
345
+ }
346
+ .seed-date-picker__wheelView {
347
+ width: 100%;
348
+ --seed-wheel-picker-selection-indicator-corner-radius: var(--seed-radius-r2);
349
+ }
350
+ .seed-date-picker__wheelColumns {}
351
+ .seed-date-picker__wheelSelectionIndicator {
352
+ border-radius: var(--seed-radius-r2);
353
+ background-color: var(--seed-color-bg-neutral-weak);
354
+ }
355
+ .seed-date-picker__wheelScrollFog {}
356
+ .seed-date-picker__yearColumn {
357
+ flex: 0 0 120px;
358
+ --seed-wheel-picker-item-justify-content: flex-end;
359
+ }
360
+ .seed-date-picker__monthColumn {
361
+ flex: 0 0 96px;
362
+ --seed-wheel-picker-item-justify-content: flex-start;
363
+ }
364
+ .seed-date-picker__wheelItem {
365
+ --seed-wheel-picker-item-color: var(--seed-color-fg-disabled);
366
+ --seed-wheel-picker-selected-item-color: var(--seed-color-fg-neutral);
367
+ padding-inline: var(--seed-dimension-x4);
368
+ font-size: var(--seed-font-size-t10-static);
369
+ line-height: var(--seed-line-height-t10-static);
370
+ font-weight: var(--seed-font-weight-medium);
371
+ }
372
+ .seed-date-picker__liveRegion {
373
+ position: absolute;
374
+ width: 1px;
375
+ height: 1px;
376
+ padding: 0;
377
+ margin: -1px;
378
+ overflow: hidden;
379
+ clip: rect(0, 0, 0, 0);
380
+ white-space: nowrap;
381
+ border: 0;
382
+ }
383
+ .seed-date-picker__months--visibleRange_twoMonths {
384
+ grid-template-columns: repeat(2, minmax(0, 1fr));
385
+ column-gap: var(--seed-dimension-x6);
386
+ }
387
+ .seed-date-picker__root--visibleRange_continuous {
388
+ height: 100%;
389
+ min-height: 0;
390
+ }
391
+ .seed-date-picker__weekdayRow--visibleRange_continuous {
392
+ position: sticky;
393
+ top: 0;
394
+ }
395
+ .seed-date-picker__month--visibleRange_continuous {
396
+ padding-bottom: 16px;
397
+ }
398
+ .seed-date-picker__weekday--visibleRange_week {
399
+ height: 24px;
400
+ }
@@ -0,0 +1,24 @@
1
+ declare interface DatePickerVariant {
2
+ /**
3
+ * @default "month"
4
+ */
5
+ visibleRange: "month" | "twoMonths" | "continuous" | "week";
6
+ }
7
+
8
+ declare type DatePickerVariantMap = {
9
+ [key in keyof DatePickerVariant]: Array<DatePickerVariant[key]>;
10
+ };
11
+
12
+ export declare type DatePickerVariantProps = Partial<DatePickerVariant>;
13
+
14
+ export declare type DatePickerSlotName = "root" | "header" | "headerLabel" | "headerChevron" | "navigation" | "navigationButton" | "twoMonthHeader" | "twoMonthLabel" | "twoMonthNavigationButton" | "weekdayRow" | "weekday" | "months" | "month" | "monthLabel" | "grid" | "weekRow" | "dateCell" | "dateButton" | "dateContent" | "emptyCell" | "continuousScroll" | "continuousContent" | "continuousSpacer" | "wheelContainer" | "wheelView" | "wheelColumns" | "wheelSelectionIndicator" | "wheelScrollFog" | "yearColumn" | "monthColumn" | "wheelItem" | "liveRegion";
15
+
16
+ export declare const datePickerVariantMap: DatePickerVariantMap;
17
+
18
+ export declare const datePicker: ((
19
+ props?: DatePickerVariantProps,
20
+ ) => Record<DatePickerSlotName, string>) & {
21
+ splitVariantProps: <T extends DatePickerVariantProps>(
22
+ props: T,
23
+ ) => [DatePickerVariantProps, Omit<T, keyof DatePickerVariantProps>];
24
+ }