@seed-design/css 2.2.2 → 2.3.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 (48) hide show
  1. package/all.css +1274 -198
  2. package/all.layered.css +1274 -198
  3. package/all.layered.min.css +1 -1
  4. package/all.min.css +1 -1
  5. package/package.json +1 -1
  6. package/recipes/content-dialog.css +258 -0
  7. package/recipes/content-dialog.d.ts +24 -0
  8. package/recipes/content-dialog.layered.css +290 -0
  9. package/recipes/content-dialog.layered.mjs +71 -0
  10. package/recipes/content-dialog.mjs +71 -0
  11. package/recipes/quantity-picker.css +230 -0
  12. package/recipes/quantity-picker.d.ts +24 -0
  13. package/recipes/quantity-picker.layered.css +273 -0
  14. package/recipes/quantity-picker.layered.mjs +72 -0
  15. package/recipes/quantity-picker.mjs +72 -0
  16. package/recipes/select-item.css +161 -0
  17. package/recipes/select-item.d.ts +28 -0
  18. package/recipes/select-item.layered.css +191 -0
  19. package/recipes/select-item.layered.mjs +60 -0
  20. package/recipes/select-item.mjs +60 -0
  21. package/recipes/select-trigger.css +208 -0
  22. package/recipes/select-trigger.d.ts +28 -0
  23. package/recipes/select-trigger.layered.css +227 -0
  24. package/recipes/select-trigger.layered.mjs +56 -0
  25. package/recipes/select-trigger.mjs +56 -0
  26. package/recipes/select.css +93 -0
  27. package/recipes/select.d.ts +28 -0
  28. package/recipes/select.layered.css +108 -0
  29. package/recipes/select.layered.mjs +56 -0
  30. package/recipes/select.mjs +56 -0
  31. package/vars/component/alert-dialog.d.ts +52 -0
  32. package/vars/component/alert-dialog.mjs +52 -0
  33. package/vars/component/dialog-close-button.d.ts +24 -0
  34. package/vars/component/dialog-close-button.mjs +24 -0
  35. package/vars/component/dialog.d.ts +50 -11
  36. package/vars/component/dialog.mjs +42 -11
  37. package/vars/component/index.d.ts +7 -0
  38. package/vars/component/index.mjs +7 -0
  39. package/vars/component/quantity-picker-button.d.ts +78 -0
  40. package/vars/component/quantity-picker-button.mjs +78 -0
  41. package/vars/component/quantity-picker.d.ts +80 -0
  42. package/vars/component/quantity-picker.mjs +80 -0
  43. package/vars/component/select-item.d.ts +101 -0
  44. package/vars/component/select-item.mjs +95 -0
  45. package/vars/component/select-trigger.d.ts +127 -0
  46. package/vars/component/select-trigger.mjs +120 -0
  47. package/vars/component/select.d.ts +62 -0
  48. package/vars/component/select.mjs +54 -0
@@ -0,0 +1,72 @@
1
+ import './quantity-picker.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const quantityPickerSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-quantity-picker__root"
8
+ ],
9
+ [
10
+ "decrementButton",
11
+ "seed-quantity-picker__decrementButton"
12
+ ],
13
+ [
14
+ "decrementIcon",
15
+ "seed-quantity-picker__decrementIcon"
16
+ ],
17
+ [
18
+ "valueDisplay",
19
+ "seed-quantity-picker__valueDisplay"
20
+ ],
21
+ [
22
+ "valueDisplayPlaceholder",
23
+ "seed-quantity-picker__valueDisplayPlaceholder"
24
+ ],
25
+ [
26
+ "valueDisplayText",
27
+ "seed-quantity-picker__valueDisplayText"
28
+ ],
29
+ [
30
+ "divider",
31
+ "seed-quantity-picker__divider"
32
+ ],
33
+ [
34
+ "incrementButton",
35
+ "seed-quantity-picker__incrementButton"
36
+ ],
37
+ [
38
+ "incrementIcon",
39
+ "seed-quantity-picker__incrementIcon"
40
+ ]
41
+ ];
42
+
43
+ const defaultVariant = {
44
+ "size": "medium"
45
+ };
46
+
47
+ const compoundVariants = [];
48
+
49
+ export const quantityPickerVariantMap = {
50
+ "size": [
51
+ "small",
52
+ "medium",
53
+ "large"
54
+ ]
55
+ };
56
+
57
+ export const quantityPickerVariantKeys = Object.keys(quantityPickerVariantMap);
58
+
59
+ export function quantityPicker(props) {
60
+ return Object.fromEntries(
61
+ quantityPickerSlotNames.map(([slot, className]) => {
62
+ return [
63
+ slot,
64
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
65
+ ];
66
+ }),
67
+ );
68
+ }
69
+
70
+ Object.assign(quantityPicker, { splitVariantProps: (props) => splitVariantProps(props, quantityPickerVariantMap) });
71
+
72
+ // @recipe(seed): quantity-picker
@@ -0,0 +1,161 @@
1
+ .seed-select-item__root {
2
+ position: relative;
3
+ scroll-margin-block: var(--seed-dimension-x2);
4
+ display: flex;
5
+ align-items: center;
6
+ padding-inline: var(--seed-dimension-x4);
7
+ outline: none;
8
+ cursor: default;
9
+ user-select: none;
10
+ background: none;
11
+ border: none;
12
+ font-family: inherit;
13
+ color: inherit;
14
+ text-decoration: none;
15
+ margin: 0;
16
+ text-align: start;
17
+ isolation: isolate;
18
+ }
19
+ .seed-select-item__root::before {
20
+ content: "";
21
+ position: absolute;
22
+ inset: 0;
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
+ }
27
+ .seed-select-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active])::before {
28
+ background-color: var(--seed-color-bg-transparent-pressed);
29
+ inset-inline: var(--seed-dimension-x2);
30
+ }
31
+ .seed-select-item__root:not(:is(:disabled, [disabled], [data-disabled]))[data-highlighted]::before {
32
+ background-color: var(--seed-color-bg-transparent-pressed);
33
+ inset-inline: var(--seed-dimension-x2);
34
+ }
35
+ .seed-select-item__root:is(:disabled, [disabled], [data-disabled]) {
36
+ cursor: not-allowed;
37
+ }
38
+ .seed-select-item__prefixIcon {
39
+ flex-shrink: 0;
40
+ color: var(--seed-color-fg-neutral);
41
+ }
42
+ .seed-select-item__prefixIcon:is(:disabled, [disabled], [data-disabled]) {
43
+ color: var(--seed-color-fg-disabled);
44
+ }
45
+ .seed-select-item__body {
46
+ display: flex;
47
+ flex-direction: column;
48
+ flex-grow: 1;
49
+ gap: var(--seed-dimension-x0_5);
50
+ }
51
+ .seed-select-item__label {
52
+ font-weight: var(--seed-font-weight-regular);
53
+ color: var(--seed-color-fg-neutral);
54
+ }
55
+ .seed-select-item__label:is(:disabled, [disabled], [data-disabled]) {
56
+ color: var(--seed-color-fg-disabled);
57
+ }
58
+ .seed-select-item__description {
59
+ font-weight: var(--seed-font-weight-regular);
60
+ color: var(--seed-color-fg-neutral-subtle);
61
+ }
62
+ .seed-select-item__description:is(:disabled, [disabled], [data-disabled]) {
63
+ color: var(--seed-color-fg-disabled);
64
+ }
65
+ .seed-select-item__indicator {
66
+ flex-shrink: 0;
67
+ color: var(--seed-color-fg-neutral);
68
+ }
69
+ .seed-select-item__indicator:is(:disabled, [disabled], [data-disabled]) {
70
+ color: var(--seed-color-fg-disabled);
71
+ }
72
+ .seed-select-item__root--size_large {
73
+ padding-block: var(--seed-dimension-x3);
74
+ gap: var(--seed-dimension-x3);
75
+ }
76
+ .seed-select-item__prefixIcon--size_large {
77
+ width: 22px;
78
+ height: 22px;
79
+ }
80
+ .seed-select-item__label--size_large {
81
+ font-size: var(--seed-font-size-t5);
82
+ line-height: var(--seed-line-height-t5);
83
+ }
84
+ .seed-select-item__description--size_large {
85
+ font-size: var(--seed-font-size-t3);
86
+ line-height: var(--seed-line-height-t3);
87
+ }
88
+ .seed-select-item__indicator--size_large {
89
+ width: var(--seed-dimension-x3_5);
90
+ height: var(--seed-dimension-x3_5);
91
+ }
92
+ .seed-select-item__root--size_medium {
93
+ padding-block: var(--seed-dimension-x2_5);
94
+ gap: var(--seed-dimension-x2);
95
+ }
96
+ .seed-select-item__prefixIcon--size_medium {
97
+ width: var(--seed-dimension-x4_5);
98
+ height: var(--seed-dimension-x4_5);
99
+ }
100
+ .seed-select-item__label--size_medium {
101
+ font-size: var(--seed-font-size-t4);
102
+ line-height: var(--seed-line-height-t4);
103
+ }
104
+ .seed-select-item__description--size_medium {
105
+ font-size: var(--seed-font-size-t2);
106
+ line-height: var(--seed-line-height-t2);
107
+ }
108
+ .seed-select-item__indicator--size_medium {
109
+ width: var(--seed-dimension-x3);
110
+ height: var(--seed-dimension-x3);
111
+ }
112
+ .seed-select-item__root--size_responsive {
113
+ padding-block: var(--seed-dimension-x3);
114
+ gap: var(--seed-dimension-x3);
115
+ }
116
+ @media (min-width: 1280px) {
117
+ .seed-select-item__root--size_responsive {
118
+ padding-block: var(--seed-dimension-x2_5);
119
+ gap: var(--seed-dimension-x2);
120
+ }
121
+ }
122
+ .seed-select-item__prefixIcon--size_responsive {
123
+ width: 22px;
124
+ height: 22px;
125
+ }
126
+ @media (min-width: 1280px) {
127
+ .seed-select-item__prefixIcon--size_responsive {
128
+ width: var(--seed-dimension-x4_5);
129
+ height: var(--seed-dimension-x4_5);
130
+ }
131
+ }
132
+ .seed-select-item__label--size_responsive {
133
+ font-size: var(--seed-font-size-t5);
134
+ line-height: var(--seed-line-height-t5);
135
+ }
136
+ @media (min-width: 1280px) {
137
+ .seed-select-item__label--size_responsive {
138
+ font-size: var(--seed-font-size-t4);
139
+ line-height: var(--seed-line-height-t4);
140
+ }
141
+ }
142
+ .seed-select-item__description--size_responsive {
143
+ font-size: var(--seed-font-size-t3);
144
+ line-height: var(--seed-line-height-t3);
145
+ }
146
+ @media (min-width: 1280px) {
147
+ .seed-select-item__description--size_responsive {
148
+ font-size: var(--seed-font-size-t2);
149
+ line-height: var(--seed-line-height-t2);
150
+ }
151
+ }
152
+ .seed-select-item__indicator--size_responsive {
153
+ width: var(--seed-dimension-x3_5);
154
+ height: var(--seed-dimension-x3_5);
155
+ }
156
+ @media (min-width: 1280px) {
157
+ .seed-select-item__indicator--size_responsive {
158
+ width: var(--seed-dimension-x3);
159
+ height: var(--seed-dimension-x3);
160
+ }
161
+ }
@@ -0,0 +1,28 @@
1
+ declare interface SelectItemVariant {
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 SelectItemVariantMap = {
13
+ [key in keyof SelectItemVariant]: Array<SelectItemVariant[key]>;
14
+ };
15
+
16
+ export declare type SelectItemVariantProps = Partial<SelectItemVariant>;
17
+
18
+ export declare type SelectItemSlotName = "root" | "prefixIcon" | "body" | "label" | "description" | "indicator";
19
+
20
+ export declare const selectItemVariantMap: SelectItemVariantMap;
21
+
22
+ export declare const selectItem: ((
23
+ props?: SelectItemVariantProps,
24
+ ) => Record<SelectItemSlotName, string>) & {
25
+ splitVariantProps: <T extends SelectItemVariantProps>(
26
+ props: T,
27
+ ) => [SelectItemVariantProps, Omit<T, keyof SelectItemVariantProps>];
28
+ }
@@ -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