@seed-design/css 2.2.2 → 2.3.1

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 (57) hide show
  1. package/README.md +5 -0
  2. package/all.css +1283 -189
  3. package/all.layered.css +1283 -189
  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/content-dialog.css +258 -0
  12. package/recipes/content-dialog.d.ts +24 -0
  13. package/recipes/content-dialog.layered.css +290 -0
  14. package/recipes/content-dialog.layered.mjs +71 -0
  15. package/recipes/content-dialog.mjs +71 -0
  16. package/recipes/image-frame.css +11 -1
  17. package/recipes/image-frame.layered.css +9 -1
  18. package/recipes/quantity-picker.css +230 -0
  19. package/recipes/quantity-picker.d.ts +24 -0
  20. package/recipes/quantity-picker.layered.css +273 -0
  21. package/recipes/quantity-picker.layered.mjs +72 -0
  22. package/recipes/quantity-picker.mjs +72 -0
  23. package/recipes/select-item.css +161 -0
  24. package/recipes/select-item.d.ts +28 -0
  25. package/recipes/select-item.layered.css +191 -0
  26. package/recipes/select-item.layered.mjs +60 -0
  27. package/recipes/select-item.mjs +60 -0
  28. package/recipes/select-trigger.css +208 -0
  29. package/recipes/select-trigger.d.ts +28 -0
  30. package/recipes/select-trigger.layered.css +227 -0
  31. package/recipes/select-trigger.layered.mjs +56 -0
  32. package/recipes/select-trigger.mjs +56 -0
  33. package/recipes/select.css +93 -0
  34. package/recipes/select.d.ts +28 -0
  35. package/recipes/select.layered.css +108 -0
  36. package/recipes/select.layered.mjs +56 -0
  37. package/recipes/select.mjs +56 -0
  38. package/vars/component/alert-dialog.d.ts +52 -0
  39. package/vars/component/alert-dialog.mjs +52 -0
  40. package/vars/component/dialog-close-button.d.ts +24 -0
  41. package/vars/component/dialog-close-button.mjs +24 -0
  42. package/vars/component/dialog.d.ts +50 -11
  43. package/vars/component/dialog.mjs +42 -11
  44. package/vars/component/index.d.ts +7 -0
  45. package/vars/component/index.mjs +7 -0
  46. package/vars/component/menu-sheet-item.d.ts +2 -6
  47. package/vars/component/menu-sheet-item.mjs +2 -6
  48. package/vars/component/quantity-picker-button.d.ts +78 -0
  49. package/vars/component/quantity-picker-button.mjs +78 -0
  50. package/vars/component/quantity-picker.d.ts +80 -0
  51. package/vars/component/quantity-picker.mjs +80 -0
  52. package/vars/component/select-item.d.ts +101 -0
  53. package/vars/component/select-item.mjs +95 -0
  54. package/vars/component/select-trigger.d.ts +127 -0
  55. package/vars/component/select-trigger.mjs +120 -0
  56. package/vars/component/select.d.ts +62 -0
  57. package/vars/component/select.mjs +54 -0
@@ -0,0 +1,191 @@
1
+ @layer seed-components {
2
+ .seed-select-item__root {
3
+ scroll-margin-block: var(--seed-dimension-x2);
4
+ padding-inline: var(--seed-dimension-x4);
5
+ cursor: default;
6
+ user-select: none;
7
+ color: inherit;
8
+ text-align: start;
9
+ isolation: isolate;
10
+ background: none;
11
+ border: none;
12
+ outline: none;
13
+ align-items: center;
14
+ margin: 0;
15
+ font-family: inherit;
16
+ text-decoration: none;
17
+ display: flex;
18
+ position: relative;
19
+ }
20
+
21
+ .seed-select-item__root:before {
22
+ content: "";
23
+ z-index: -1;
24
+ border-radius: var(--seed-radius-r3);
25
+ transition: background-color var(--seed-duration-color-transition) var(--seed-timing-function-easing), inset-inline var(--seed-duration-d3) var(--seed-timing-function-easing);
26
+ position: absolute;
27
+ inset: 0;
28
+ }
29
+
30
+ .seed-select-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active]):before, .seed-select-item__root:not(:is(:disabled, [disabled], [data-disabled]))[data-highlighted]:before {
31
+ background-color: var(--seed-color-bg-transparent-pressed);
32
+ inset-inline: var(--seed-dimension-x2);
33
+ }
34
+
35
+ .seed-select-item__root:is(:disabled, [disabled], [data-disabled]) {
36
+ cursor: not-allowed;
37
+ }
38
+
39
+ .seed-select-item__prefixIcon {
40
+ color: var(--seed-color-fg-neutral);
41
+ flex-shrink: 0;
42
+ }
43
+
44
+ .seed-select-item__prefixIcon:is(:disabled, [disabled], [data-disabled]) {
45
+ color: var(--seed-color-fg-disabled);
46
+ }
47
+
48
+ .seed-select-item__body {
49
+ gap: var(--seed-dimension-x0_5);
50
+ flex-direction: column;
51
+ flex-grow: 1;
52
+ display: flex;
53
+ }
54
+
55
+ .seed-select-item__label {
56
+ font-weight: var(--seed-font-weight-regular);
57
+ color: var(--seed-color-fg-neutral);
58
+ }
59
+
60
+ .seed-select-item__label:is(:disabled, [disabled], [data-disabled]) {
61
+ color: var(--seed-color-fg-disabled);
62
+ }
63
+
64
+ .seed-select-item__description {
65
+ font-weight: var(--seed-font-weight-regular);
66
+ color: var(--seed-color-fg-neutral-subtle);
67
+ }
68
+
69
+ .seed-select-item__description:is(:disabled, [disabled], [data-disabled]) {
70
+ color: var(--seed-color-fg-disabled);
71
+ }
72
+
73
+ .seed-select-item__indicator {
74
+ color: var(--seed-color-fg-neutral);
75
+ flex-shrink: 0;
76
+ }
77
+
78
+ .seed-select-item__indicator:is(:disabled, [disabled], [data-disabled]) {
79
+ color: var(--seed-color-fg-disabled);
80
+ }
81
+
82
+ .seed-select-item__root--size_large {
83
+ padding-block: var(--seed-dimension-x3);
84
+ gap: var(--seed-dimension-x3);
85
+ }
86
+
87
+ .seed-select-item__prefixIcon--size_large {
88
+ width: 22px;
89
+ height: 22px;
90
+ }
91
+
92
+ .seed-select-item__label--size_large {
93
+ font-size: var(--seed-font-size-t5);
94
+ line-height: var(--seed-line-height-t5);
95
+ }
96
+
97
+ .seed-select-item__description--size_large {
98
+ font-size: var(--seed-font-size-t3);
99
+ line-height: var(--seed-line-height-t3);
100
+ }
101
+
102
+ .seed-select-item__indicator--size_large {
103
+ width: var(--seed-dimension-x3_5);
104
+ height: var(--seed-dimension-x3_5);
105
+ }
106
+
107
+ .seed-select-item__root--size_medium {
108
+ padding-block: var(--seed-dimension-x2_5);
109
+ gap: var(--seed-dimension-x2);
110
+ }
111
+
112
+ .seed-select-item__prefixIcon--size_medium {
113
+ width: var(--seed-dimension-x4_5);
114
+ height: var(--seed-dimension-x4_5);
115
+ }
116
+
117
+ .seed-select-item__label--size_medium {
118
+ font-size: var(--seed-font-size-t4);
119
+ line-height: var(--seed-line-height-t4);
120
+ }
121
+
122
+ .seed-select-item__description--size_medium {
123
+ font-size: var(--seed-font-size-t2);
124
+ line-height: var(--seed-line-height-t2);
125
+ }
126
+
127
+ .seed-select-item__indicator--size_medium {
128
+ width: var(--seed-dimension-x3);
129
+ height: var(--seed-dimension-x3);
130
+ }
131
+
132
+ .seed-select-item__root--size_responsive {
133
+ padding-block: var(--seed-dimension-x3);
134
+ gap: var(--seed-dimension-x3);
135
+ }
136
+
137
+ @media (width >= 1280px) {
138
+ .seed-select-item__root--size_responsive {
139
+ padding-block: var(--seed-dimension-x2_5);
140
+ gap: var(--seed-dimension-x2);
141
+ }
142
+ }
143
+
144
+ .seed-select-item__prefixIcon--size_responsive {
145
+ width: 22px;
146
+ height: 22px;
147
+ }
148
+
149
+ @media (width >= 1280px) {
150
+ .seed-select-item__prefixIcon--size_responsive {
151
+ width: var(--seed-dimension-x4_5);
152
+ height: var(--seed-dimension-x4_5);
153
+ }
154
+ }
155
+
156
+ .seed-select-item__label--size_responsive {
157
+ font-size: var(--seed-font-size-t5);
158
+ line-height: var(--seed-line-height-t5);
159
+ }
160
+
161
+ @media (width >= 1280px) {
162
+ .seed-select-item__label--size_responsive {
163
+ font-size: var(--seed-font-size-t4);
164
+ line-height: var(--seed-line-height-t4);
165
+ }
166
+ }
167
+
168
+ .seed-select-item__description--size_responsive {
169
+ font-size: var(--seed-font-size-t3);
170
+ line-height: var(--seed-line-height-t3);
171
+ }
172
+
173
+ @media (width >= 1280px) {
174
+ .seed-select-item__description--size_responsive {
175
+ font-size: var(--seed-font-size-t2);
176
+ line-height: var(--seed-line-height-t2);
177
+ }
178
+ }
179
+
180
+ .seed-select-item__indicator--size_responsive {
181
+ width: var(--seed-dimension-x3_5);
182
+ height: var(--seed-dimension-x3_5);
183
+ }
184
+
185
+ @media (width >= 1280px) {
186
+ .seed-select-item__indicator--size_responsive {
187
+ width: var(--seed-dimension-x3);
188
+ height: var(--seed-dimension-x3);
189
+ }
190
+ }
191
+ }
@@ -0,0 +1,60 @@
1
+ import './select-item.layered.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const selectItemSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-select-item__root"
8
+ ],
9
+ [
10
+ "prefixIcon",
11
+ "seed-select-item__prefixIcon"
12
+ ],
13
+ [
14
+ "body",
15
+ "seed-select-item__body"
16
+ ],
17
+ [
18
+ "label",
19
+ "seed-select-item__label"
20
+ ],
21
+ [
22
+ "description",
23
+ "seed-select-item__description"
24
+ ],
25
+ [
26
+ "indicator",
27
+ "seed-select-item__indicator"
28
+ ]
29
+ ];
30
+
31
+ const defaultVariant = {
32
+ "size": "large"
33
+ };
34
+
35
+ const compoundVariants = [];
36
+
37
+ export const selectItemVariantMap = {
38
+ "size": [
39
+ "large",
40
+ "medium",
41
+ "responsive"
42
+ ]
43
+ };
44
+
45
+ export const selectItemVariantKeys = Object.keys(selectItemVariantMap);
46
+
47
+ export function selectItem(props) {
48
+ return Object.fromEntries(
49
+ selectItemSlotNames.map(([slot, className]) => {
50
+ return [
51
+ slot,
52
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
53
+ ];
54
+ }),
55
+ );
56
+ }
57
+
58
+ Object.assign(selectItem, { splitVariantProps: (props) => splitVariantProps(props, selectItemVariantMap) });
59
+
60
+ // @recipe(seed): select-item
@@ -0,0 +1,60 @@
1
+ import './select-item.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const selectItemSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-select-item__root"
8
+ ],
9
+ [
10
+ "prefixIcon",
11
+ "seed-select-item__prefixIcon"
12
+ ],
13
+ [
14
+ "body",
15
+ "seed-select-item__body"
16
+ ],
17
+ [
18
+ "label",
19
+ "seed-select-item__label"
20
+ ],
21
+ [
22
+ "description",
23
+ "seed-select-item__description"
24
+ ],
25
+ [
26
+ "indicator",
27
+ "seed-select-item__indicator"
28
+ ]
29
+ ];
30
+
31
+ const defaultVariant = {
32
+ "size": "large"
33
+ };
34
+
35
+ const compoundVariants = [];
36
+
37
+ export const selectItemVariantMap = {
38
+ "size": [
39
+ "large",
40
+ "medium",
41
+ "responsive"
42
+ ]
43
+ };
44
+
45
+ export const selectItemVariantKeys = Object.keys(selectItemVariantMap);
46
+
47
+ export function selectItem(props) {
48
+ return Object.fromEntries(
49
+ selectItemSlotNames.map(([slot, className]) => {
50
+ return [
51
+ slot,
52
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
53
+ ];
54
+ }),
55
+ );
56
+ }
57
+
58
+ Object.assign(selectItem, { splitVariantProps: (props) => splitVariantProps(props, selectItemVariantMap) });
59
+
60
+ // @recipe(seed): select-item
@@ -0,0 +1,208 @@
1
+ .seed-select-trigger__root {
2
+ display: flex;
3
+ width: 100%;
4
+ align-items: center;
5
+ box-sizing: border-box;
6
+ position: relative;
7
+ isolation: isolate;
8
+ cursor: pointer;
9
+ margin: 0;
10
+ border: none;
11
+ font-family: inherit;
12
+ background-color: var(--seed-color-bg-transparent);
13
+ box-shadow: inset 0 0 0 1px var(--seed-color-stroke-neutral-weak);
14
+ transition: background-color var(--seed-duration-color-transition) var(--seed-timing-function-easing), outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
15
+ }
16
+ .seed-select-trigger__root::after {
17
+ content: "";
18
+ position: absolute;
19
+ inset: 0;
20
+ border-radius: inherit;
21
+ border-style: solid;
22
+ border-color: transparent;
23
+ border-width: 2px;
24
+ transition: border-color 0.1s var(--seed-timing-function-easing);
25
+ pointer-events: none;
26
+ }
27
+ .seed-select-trigger__root[data-disabled] {
28
+ cursor: not-allowed;
29
+ background-color: var(--seed-color-bg-disabled);
30
+ }
31
+ @media (hover: hover) and (pointer: fine) {
32
+ .seed-select-trigger__root:not([data-disabled]):not(:is([data-readonly])):is(:hover, [data-hover]) {
33
+ background-color: var(--seed-color-bg-transparent-pressed);
34
+ }
35
+ }
36
+ @media not all and (hover: hover) and (pointer: fine) {
37
+ .seed-select-trigger__root:not([data-disabled]):not(:is([data-readonly])):is(:active, [data-active]) {
38
+ background-color: var(--seed-color-bg-transparent-pressed);
39
+ }
40
+ }
41
+ .seed-select-trigger__root:is([data-readonly]):not([data-disabled]) {
42
+ cursor: default;
43
+ background-color: var(--seed-color-bg-disabled);
44
+ }
45
+ .seed-select-trigger__root {
46
+ outline: var(--seed-dimension-x0_5) solid transparent;
47
+ outline-offset: var(--seed-dimension-x0_5);
48
+ }
49
+ .seed-select-trigger__root:is(:focus-visible, [data-focus-visible]) {
50
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
51
+ outline-offset: var(--seed-dimension-x0_5);
52
+ }
53
+ .seed-select-trigger__root:is(:invalid, [data-invalid])::after {
54
+ border-width: 2px;
55
+ border-color: var(--seed-color-stroke-critical-solid);
56
+ }
57
+ .seed-select-trigger__value {
58
+ font-weight: var(--seed-font-weight-regular);
59
+ color: var(--seed-color-fg-neutral);
60
+ overflow: hidden;
61
+ text-overflow: ellipsis;
62
+ white-space: nowrap;
63
+ text-align: start;
64
+ flex-grow: 1;
65
+ pointer-events: none;
66
+ }
67
+ .seed-select-trigger__value[data-disabled] {
68
+ color: var(--seed-color-fg-disabled);
69
+ }
70
+ .seed-select-trigger__value:is([data-readonly]):not([data-disabled]) {
71
+ color: var(--seed-color-fg-neutral);
72
+ }
73
+ .seed-select-trigger__placeholder {
74
+ font-weight: var(--seed-font-weight-regular);
75
+ color: var(--seed-color-fg-placeholder);
76
+ overflow: hidden;
77
+ text-overflow: ellipsis;
78
+ white-space: nowrap;
79
+ text-align: start;
80
+ flex-grow: 1;
81
+ pointer-events: none;
82
+ }
83
+ .seed-select-trigger__placeholder[data-disabled] {
84
+ color: var(--seed-color-fg-disabled);
85
+ }
86
+ .seed-select-trigger__placeholder:is([data-readonly]):not([data-disabled]) {
87
+ color: var(--seed-color-fg-placeholder);
88
+ }
89
+ .seed-select-trigger__prefixIcon {
90
+ flex-shrink: 0;
91
+ color: var(--seed-color-fg-neutral-muted);
92
+ pointer-events: none;
93
+ }
94
+ .seed-select-trigger__prefixIcon[data-disabled] {
95
+ color: var(--seed-color-fg-disabled);
96
+ }
97
+ .seed-select-trigger__suffixIcon {
98
+ flex-shrink: 0;
99
+ color: var(--seed-color-fg-neutral-muted);
100
+ pointer-events: none;
101
+ transform: rotate(0deg);
102
+ transition: transform var(--seed-duration-d2) var(--seed-timing-function-easing);
103
+ }
104
+ .seed-select-trigger__suffixIcon:is([data-state="open"], [data-open]) {
105
+ transform: rotate(180deg);
106
+ transition: transform var(--seed-duration-d3) var(--seed-timing-function-easing);
107
+ }
108
+ .seed-select-trigger__suffixIcon[data-disabled] {
109
+ color: var(--seed-color-fg-disabled);
110
+ }
111
+ .seed-select-trigger__root--size_large {
112
+ height: var(--seed-dimension-x13);
113
+ gap: var(--seed-dimension-x2_5);
114
+ padding-inline: var(--seed-dimension-x4);
115
+ border-radius: var(--seed-radius-r3);
116
+ }
117
+ .seed-select-trigger__value--size_large {
118
+ font-size: var(--seed-font-size-t5);
119
+ line-height: var(--seed-line-height-t5);
120
+ }
121
+ .seed-select-trigger__placeholder--size_large {
122
+ font-size: var(--seed-font-size-t5);
123
+ line-height: var(--seed-line-height-t5);
124
+ }
125
+ .seed-select-trigger__prefixIcon--size_large {
126
+ width: var(--seed-dimension-x5);
127
+ height: var(--seed-dimension-x5);
128
+ }
129
+ .seed-select-trigger__suffixIcon--size_large {
130
+ width: var(--seed-dimension-x5);
131
+ height: var(--seed-dimension-x5);
132
+ }
133
+ .seed-select-trigger__root--size_medium {
134
+ height: var(--seed-dimension-x10);
135
+ gap: var(--seed-dimension-x2);
136
+ padding-inline: var(--seed-dimension-x3_5);
137
+ border-radius: var(--seed-radius-r2);
138
+ }
139
+ .seed-select-trigger__value--size_medium {
140
+ font-size: var(--seed-font-size-t4);
141
+ line-height: var(--seed-line-height-t4);
142
+ }
143
+ .seed-select-trigger__placeholder--size_medium {
144
+ font-size: var(--seed-font-size-t4);
145
+ line-height: var(--seed-line-height-t4);
146
+ }
147
+ .seed-select-trigger__prefixIcon--size_medium {
148
+ width: var(--seed-dimension-x4);
149
+ height: var(--seed-dimension-x4);
150
+ }
151
+ .seed-select-trigger__suffixIcon--size_medium {
152
+ width: var(--seed-dimension-x4);
153
+ height: var(--seed-dimension-x4);
154
+ }
155
+ .seed-select-trigger__root--size_responsive {
156
+ height: var(--seed-dimension-x13);
157
+ gap: var(--seed-dimension-x2_5);
158
+ padding-inline: var(--seed-dimension-x4);
159
+ border-radius: var(--seed-radius-r3);
160
+ }
161
+ @media (min-width: 1280px) {
162
+ .seed-select-trigger__root--size_responsive {
163
+ height: var(--seed-dimension-x10);
164
+ gap: var(--seed-dimension-x2);
165
+ padding-inline: var(--seed-dimension-x3_5);
166
+ border-radius: var(--seed-radius-r2);
167
+ }
168
+ }
169
+ .seed-select-trigger__value--size_responsive {
170
+ font-size: var(--seed-font-size-t5);
171
+ line-height: var(--seed-line-height-t5);
172
+ }
173
+ @media (min-width: 1280px) {
174
+ .seed-select-trigger__value--size_responsive {
175
+ font-size: var(--seed-font-size-t4);
176
+ line-height: var(--seed-line-height-t4);
177
+ }
178
+ }
179
+ .seed-select-trigger__placeholder--size_responsive {
180
+ font-size: var(--seed-font-size-t5);
181
+ line-height: var(--seed-line-height-t5);
182
+ }
183
+ @media (min-width: 1280px) {
184
+ .seed-select-trigger__placeholder--size_responsive {
185
+ font-size: var(--seed-font-size-t4);
186
+ line-height: var(--seed-line-height-t4);
187
+ }
188
+ }
189
+ .seed-select-trigger__prefixIcon--size_responsive {
190
+ width: var(--seed-dimension-x5);
191
+ height: var(--seed-dimension-x5);
192
+ }
193
+ @media (min-width: 1280px) {
194
+ .seed-select-trigger__prefixIcon--size_responsive {
195
+ width: var(--seed-dimension-x4);
196
+ height: var(--seed-dimension-x4);
197
+ }
198
+ }
199
+ .seed-select-trigger__suffixIcon--size_responsive {
200
+ width: var(--seed-dimension-x5);
201
+ height: var(--seed-dimension-x5);
202
+ }
203
+ @media (min-width: 1280px) {
204
+ .seed-select-trigger__suffixIcon--size_responsive {
205
+ width: var(--seed-dimension-x4);
206
+ height: var(--seed-dimension-x4);
207
+ }
208
+ }
@@ -0,0 +1,28 @@
1
+ declare interface SelectTriggerVariant {
2
+ /**
3
+ * - `large`: 뷰포트 너비와 관계없이 사용할 수 있습니다.
4
+ * - `medium`: Breakpoint `lg` 이상(데스크톱)에서만 사용하고, 모바일에서는 사용하지 않습니다. 정밀한 선택이 가능한 마우스 입력 환경에서 사이즈를 더 작게 만들고자 할 때 사용합니다.
5
+ * - `responsive`: 뷰포트 너비에 따라 적용되는 사이즈가 달라집니다. Breakpoint `lg` 미만에서는 `large`, `lg` 이상에서는 `medium`으로 적용됩니다.
6
+ *
7
+ * @default "large"
8
+ */
9
+ size: "large" | "medium" | "responsive";
10
+ }
11
+
12
+ declare type SelectTriggerVariantMap = {
13
+ [key in keyof SelectTriggerVariant]: Array<SelectTriggerVariant[key]>;
14
+ };
15
+
16
+ export declare type SelectTriggerVariantProps = Partial<SelectTriggerVariant>;
17
+
18
+ export declare type SelectTriggerSlotName = "root" | "value" | "placeholder" | "prefixIcon" | "suffixIcon";
19
+
20
+ export declare const selectTriggerVariantMap: SelectTriggerVariantMap;
21
+
22
+ export declare const selectTrigger: ((
23
+ props?: SelectTriggerVariantProps,
24
+ ) => Record<SelectTriggerSlotName, string>) & {
25
+ splitVariantProps: <T extends SelectTriggerVariantProps>(
26
+ props: T,
27
+ ) => [SelectTriggerVariantProps, Omit<T, keyof SelectTriggerVariantProps>];
28
+ }