@seed-design/css 1.2.16 → 2.0.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 (183) hide show
  1. package/all.css +4956 -1925
  2. package/all.layered.css +5922 -2883
  3. package/all.layered.min.css +1 -1
  4. package/all.min.css +1 -1
  5. package/base.css +348 -35
  6. package/base.layered.css +348 -35
  7. package/base.layered.min.css +1 -1
  8. package/base.min.css +1 -1
  9. package/breakpoints/index.d.ts +7 -0
  10. package/breakpoints/index.mjs +17 -0
  11. package/package.json +6 -1
  12. package/recipes/accordion.css +268 -0
  13. package/recipes/accordion.d.ts +33 -0
  14. package/recipes/accordion.layered.css +308 -0
  15. package/recipes/accordion.layered.mjs +94 -0
  16. package/recipes/accordion.mjs +94 -0
  17. package/recipes/action-button.css +56 -4
  18. package/recipes/action-button.d.ts +16 -0
  19. package/recipes/action-button.layered.css +60 -4
  20. package/recipes/app-bar.css +0 -3
  21. package/recipes/app-bar.d.ts +0 -4
  22. package/recipes/app-bar.layered.css +0 -4
  23. package/recipes/app-bar.layered.mjs +1 -5
  24. package/recipes/app-bar.mjs +1 -5
  25. package/recipes/app-screen.css +3 -0
  26. package/recipes/app-screen.layered.css +4 -0
  27. package/recipes/attachment-input-item.css +275 -0
  28. package/recipes/attachment-input-item.d.ts +24 -0
  29. package/recipes/attachment-input-item.layered.css +288 -0
  30. package/recipes/attachment-input-item.layered.mjs +79 -0
  31. package/recipes/attachment-input-item.mjs +79 -0
  32. package/recipes/attachment-input-trigger.css +71 -0
  33. package/recipes/attachment-input-trigger.d.ts +21 -0
  34. package/recipes/attachment-input-trigger.layered.css +85 -0
  35. package/recipes/attachment-input-trigger.layered.mjs +48 -0
  36. package/recipes/attachment-input-trigger.mjs +48 -0
  37. package/recipes/attachment-input.css +55 -0
  38. package/recipes/attachment-input.d.ts +21 -0
  39. package/recipes/attachment-input.layered.css +64 -0
  40. package/recipes/attachment-input.layered.mjs +48 -0
  41. package/recipes/attachment-input.mjs +48 -0
  42. package/recipes/avatar.d.ts +9 -0
  43. package/recipes/badge.d.ts +10 -0
  44. package/recipes/bottom-sheet.css +62 -5
  45. package/recipes/bottom-sheet.layered.css +67 -5
  46. package/recipes/callout.d.ts +7 -0
  47. package/recipes/checkmark.d.ts +3 -0
  48. package/recipes/chip-tabs.css +8 -52
  49. package/recipes/chip-tabs.d.ts +1 -1
  50. package/recipes/chip-tabs.layered.css +8 -62
  51. package/recipes/chip-tabs.layered.mjs +1 -2
  52. package/recipes/chip-tabs.mjs +1 -2
  53. package/recipes/chip.d.ts +4 -0
  54. package/recipes/contextual-floating-button.d.ts +6 -0
  55. package/recipes/dialog.css +14 -11
  56. package/recipes/dialog.layered.css +4 -0
  57. package/recipes/footer.css +44 -0
  58. package/recipes/footer.d.ts +24 -0
  59. package/recipes/footer.layered.css +52 -0
  60. package/recipes/footer.layered.mjs +39 -0
  61. package/recipes/footer.mjs +39 -0
  62. package/recipes/help-bubble.css +29 -1
  63. package/recipes/help-bubble.layered.css +34 -1
  64. package/recipes/image-frame.css +0 -3
  65. package/recipes/image-frame.d.ts +0 -4
  66. package/recipes/image-frame.layered.css +0 -4
  67. package/recipes/image-frame.layered.mjs +1 -6
  68. package/recipes/image-frame.mjs +1 -6
  69. package/recipes/input-button.css +176 -20
  70. package/recipes/input-button.d.ts +8 -1
  71. package/recipes/input-button.layered.css +197 -21
  72. package/recipes/input-button.layered.mjs +10 -2
  73. package/recipes/input-button.mjs +10 -2
  74. package/recipes/layout.css +25 -0
  75. package/recipes/layout.d.ts +24 -0
  76. package/recipes/layout.layered.css +25 -0
  77. package/recipes/layout.layered.mjs +44 -0
  78. package/recipes/layout.mjs +44 -0
  79. package/recipes/list-item.css +72 -4
  80. package/recipes/list-item.layered.css +84 -4
  81. package/recipes/menu-item.css +174 -0
  82. package/recipes/menu-item.d.ts +35 -0
  83. package/recipes/menu-item.layered.css +200 -0
  84. package/recipes/menu-item.layered.mjs +57 -0
  85. package/recipes/menu-item.mjs +57 -0
  86. package/recipes/menu-sheet-item.d.ts +6 -0
  87. package/recipes/menu-sheet.css +19 -1
  88. package/recipes/menu-sheet.layered.css +22 -1
  89. package/recipes/menu.css +119 -0
  90. package/recipes/menu.d.ts +28 -0
  91. package/recipes/menu.layered.css +139 -0
  92. package/recipes/menu.layered.mjs +56 -0
  93. package/recipes/menu.mjs +56 -0
  94. package/recipes/notification-badge.d.ts +3 -0
  95. package/recipes/page-banner.d.ts +5 -0
  96. package/recipes/progress-circle.d.ts +7 -0
  97. package/recipes/{selectBoxCheckmark.css → select-box-checkmark.css} +6 -6
  98. package/recipes/{selectBoxCheckmark.layered.css → select-box-checkmark.layered.css} +6 -6
  99. package/recipes/{selectBoxCheckmark.layered.mjs → select-box-checkmark.layered.mjs} +4 -4
  100. package/recipes/{selectBoxCheckmark.mjs → select-box-checkmark.mjs} +4 -4
  101. package/recipes/side-navigation-inset.css +4 -0
  102. package/recipes/side-navigation-inset.d.ts +19 -0
  103. package/recipes/side-navigation-inset.layered.css +6 -0
  104. package/recipes/side-navigation-inset.layered.mjs +22 -0
  105. package/recipes/side-navigation-inset.mjs +22 -0
  106. package/recipes/side-navigation-menu-item.css +135 -0
  107. package/recipes/side-navigation-menu-item.d.ts +21 -0
  108. package/recipes/side-navigation-menu-item.layered.css +156 -0
  109. package/recipes/side-navigation-menu-item.layered.mjs +48 -0
  110. package/recipes/side-navigation-menu-item.mjs +48 -0
  111. package/recipes/side-navigation.css +115 -0
  112. package/recipes/side-navigation.d.ts +24 -0
  113. package/recipes/side-navigation.layered.css +132 -0
  114. package/recipes/side-navigation.layered.mjs +63 -0
  115. package/recipes/side-navigation.mjs +63 -0
  116. package/recipes/side-panel.css +327 -0
  117. package/recipes/side-panel.d.ts +24 -0
  118. package/recipes/side-panel.layered.css +361 -0
  119. package/recipes/side-panel.layered.mjs +72 -0
  120. package/recipes/side-panel.mjs +72 -0
  121. package/recipes/skeleton.css +36 -2
  122. package/recipes/skeleton.d.ts +8 -0
  123. package/recipes/skeleton.layered.css +40 -2
  124. package/recipes/text-input.css +323 -52
  125. package/recipes/text-input.d.ts +8 -1
  126. package/recipes/text-input.layered.css +385 -51
  127. package/recipes/text-input.layered.mjs +18 -1
  128. package/recipes/text-input.mjs +18 -1
  129. package/recipes/text.css +180 -0
  130. package/recipes/text.d.ts +59 -1
  131. package/recipes/text.layered.css +216 -0
  132. package/recipes/text.layered.mjs +37 -1
  133. package/recipes/text.mjs +37 -1
  134. package/recipes/toggle-button.d.ts +3 -0
  135. package/vars/color/bg.d.ts +2 -2
  136. package/vars/color/bg.mjs +2 -1
  137. package/vars/color/stroke.d.ts +2 -2
  138. package/vars/color/stroke.mjs +2 -2
  139. package/vars/component/accordion-item.d.ts +132 -0
  140. package/vars/component/accordion-item.mjs +126 -0
  141. package/vars/component/accordion.d.ts +22 -0
  142. package/vars/component/accordion.mjs +16 -0
  143. package/vars/component/attachment-input-dropzone.d.ts +32 -0
  144. package/vars/component/attachment-input-dropzone.mjs +30 -0
  145. package/vars/component/attachment-input-item-action-button.d.ts +37 -0
  146. package/vars/component/attachment-input-item-action-button.mjs +37 -0
  147. package/vars/component/attachment-input-item-remove-button.d.ts +28 -0
  148. package/vars/component/attachment-input-item-remove-button.mjs +28 -0
  149. package/vars/component/attachment-input-item.d.ts +103 -0
  150. package/vars/component/attachment-input-item.mjs +102 -0
  151. package/vars/component/attachment-input-trigger.d.ts +46 -0
  152. package/vars/component/attachment-input-trigger.mjs +46 -0
  153. package/vars/component/attachment-input.d.ts +14 -0
  154. package/vars/component/attachment-input.mjs +12 -0
  155. package/vars/component/chip-tablist.d.ts +0 -7
  156. package/vars/component/chip-tablist.mjs +0 -7
  157. package/vars/component/image-frame.d.ts +1 -22
  158. package/vars/component/image-frame.mjs +1 -9
  159. package/vars/component/index.d.ts +12 -1
  160. package/vars/component/index.mjs +12 -1
  161. package/vars/component/input-button.d.ts +90 -17
  162. package/vars/component/input-button.mjs +84 -17
  163. package/vars/component/menu-item.d.ts +129 -0
  164. package/vars/component/menu-item.mjs +117 -0
  165. package/vars/component/menu.d.ts +68 -0
  166. package/vars/component/menu.mjs +60 -0
  167. package/vars/component/side-panel-close-button.d.ts +23 -0
  168. package/vars/component/side-panel-close-button.mjs +23 -0
  169. package/vars/component/side-panel.d.ts +94 -0
  170. package/vars/component/side-panel.mjs +83 -0
  171. package/vars/component/text-input.d.ts +92 -24
  172. package/vars/component/text-input.mjs +76 -24
  173. package/vars/component/typography.d.ts +414 -0
  174. package/vars/component/typography.mjs +324 -0
  175. package/vars/font-size.d.ts +17 -1
  176. package/vars/font-size.mjs +9 -1
  177. package/vars/gradient.d.ts +0 -8
  178. package/vars/gradient.mjs +0 -2
  179. package/vars/line-height.d.ts +17 -1
  180. package/vars/line-height.mjs +9 -1
  181. package/vars/component/chip-tab.d.ts +0 -162
  182. package/vars/component/chip-tab.mjs +0 -162
  183. /package/recipes/{selectBoxCheckmark.d.ts → select-box-checkmark.d.ts} +0 -0
@@ -0,0 +1,44 @@
1
+ import './layout.css';
2
+ import { createClassName, mergeVariants, splitVariantProps } from "./shared.mjs";
3
+
4
+ const layoutSlotNames = [
5
+ [
6
+ "root",
7
+ "seed-layout__root"
8
+ ],
9
+ [
10
+ "content",
11
+ "seed-layout__content"
12
+ ]
13
+ ];
14
+
15
+ const defaultVariant = {
16
+ "density": "medium"
17
+ };
18
+
19
+ const compoundVariants = [];
20
+
21
+ export const layoutVariantMap = {
22
+ "density": [
23
+ "low",
24
+ "medium",
25
+ "high"
26
+ ]
27
+ };
28
+
29
+ export const layoutVariantKeys = Object.keys(layoutVariantMap);
30
+
31
+ export function layout(props) {
32
+ return Object.fromEntries(
33
+ layoutSlotNames.map(([slot, className]) => {
34
+ return [
35
+ slot,
36
+ createClassName(className, mergeVariants(defaultVariant, props), compoundVariants),
37
+ ];
38
+ }),
39
+ );
40
+ }
41
+
42
+ Object.assign(layout, { splitVariantProps: (props) => splitVariantProps(props, layoutVariantMap) });
43
+
44
+ // @recipe(seed): layout
@@ -19,7 +19,12 @@
19
19
  display: inline-flex;
20
20
  align-items: center;
21
21
  flex-shrink: 0;
22
- --seed-box-padding-right: var(--seed-dimension-x3);
22
+ --seed-box-padding-right-base: var(--seed-dimension-x3);
23
+ --seed-box-padding-right-sm: var(--seed-box-padding-right-base);
24
+ --seed-box-padding-right-md: var(--seed-box-padding-right-sm);
25
+ --seed-box-padding-right-lg: var(--seed-box-padding-right-md);
26
+ --seed-box-padding-right-xl: var(--seed-box-padding-right-lg);
27
+ --seed-box-padding-right: var(--seed-box-padding-right-base);
23
28
  padding-right: var(--seed-box-padding-right);
24
29
  --seed-focus-ring: none;
25
30
  --seed-icon-size: 22px;
@@ -34,7 +39,12 @@
34
39
  flex-shrink: 0;
35
40
  --seed-box-position: initial;
36
41
  position: var(--seed-box-position);
37
- --seed-box-gap: var(--seed-dimension-x1);
42
+ --seed-box-gap-base: var(--seed-dimension-x1);
43
+ --seed-box-gap-sm: var(--seed-box-gap-base);
44
+ --seed-box-gap-md: var(--seed-box-gap-sm);
45
+ --seed-box-gap-lg: var(--seed-box-gap-md);
46
+ --seed-box-gap-xl: var(--seed-box-gap-lg);
47
+ --seed-box-gap: var(--seed-box-gap-base);
38
48
  gap: var(--seed-box-gap);
39
49
  --seed-focus-ring: none;
40
50
  font-size: var(--seed-font-size-t5);
@@ -57,9 +67,19 @@
57
67
  background-color: transparent;
58
68
  border: none;
59
69
  font-family: inherit;
60
- --seed-box-gap: var(--seed-dimension-x0_5);
70
+ --seed-box-gap-base: var(--seed-dimension-x0_5);
71
+ --seed-box-gap-sm: var(--seed-box-gap-base);
72
+ --seed-box-gap-md: var(--seed-box-gap-sm);
73
+ --seed-box-gap-lg: var(--seed-box-gap-md);
74
+ --seed-box-gap-xl: var(--seed-box-gap-lg);
75
+ --seed-box-gap: var(--seed-box-gap-base);
61
76
  gap: var(--seed-box-gap);
62
- --seed-box-padding-right: var(--seed-dimension-x2_5);
77
+ --seed-box-padding-right-base: var(--seed-dimension-x2_5);
78
+ --seed-box-padding-right-sm: var(--seed-box-padding-right-base);
79
+ --seed-box-padding-right-md: var(--seed-box-padding-right-sm);
80
+ --seed-box-padding-right-lg: var(--seed-box-padding-right-md);
81
+ --seed-box-padding-right-xl: var(--seed-box-padding-right-lg);
82
+ --seed-box-padding-right: var(--seed-box-padding-right-base);
63
83
  padding: 0 var(--seed-box-padding-right) 0 0;
64
84
  text-decoration: none;
65
85
  }
@@ -166,4 +186,52 @@
166
186
  .seed-list-item__content--highlighted_true:not(:is(:disabled, [disabled], [data-disabled]))[data-active]::before {
167
187
  background-color: var(--seed-color-bg-brand-weak-pressed);
168
188
  }
189
+ }
190
+ @media (min-width: 480px) {
191
+ .seed-list-item__prefix {
192
+ --seed-box-padding-right: var(--seed-box-padding-right-sm);
193
+ }
194
+ .seed-list-item__suffix {
195
+ --seed-box-gap: var(--seed-box-gap-sm);
196
+ }
197
+ .seed-list-item__content {
198
+ --seed-box-gap: var(--seed-box-gap-sm);
199
+ --seed-box-padding-right: var(--seed-box-padding-right-sm);
200
+ }
201
+ }
202
+ @media (min-width: 768px) {
203
+ .seed-list-item__prefix {
204
+ --seed-box-padding-right: var(--seed-box-padding-right-md);
205
+ }
206
+ .seed-list-item__suffix {
207
+ --seed-box-gap: var(--seed-box-gap-md);
208
+ }
209
+ .seed-list-item__content {
210
+ --seed-box-gap: var(--seed-box-gap-md);
211
+ --seed-box-padding-right: var(--seed-box-padding-right-md);
212
+ }
213
+ }
214
+ @media (min-width: 1280px) {
215
+ .seed-list-item__prefix {
216
+ --seed-box-padding-right: var(--seed-box-padding-right-lg);
217
+ }
218
+ .seed-list-item__suffix {
219
+ --seed-box-gap: var(--seed-box-gap-lg);
220
+ }
221
+ .seed-list-item__content {
222
+ --seed-box-gap: var(--seed-box-gap-lg);
223
+ --seed-box-padding-right: var(--seed-box-padding-right-lg);
224
+ }
225
+ }
226
+ @media (min-width: 1440px) {
227
+ .seed-list-item__prefix {
228
+ --seed-box-padding-right: var(--seed-box-padding-right-xl);
229
+ }
230
+ .seed-list-item__suffix {
231
+ --seed-box-gap: var(--seed-box-gap-xl);
232
+ }
233
+ .seed-list-item__content {
234
+ --seed-box-gap: var(--seed-box-gap-xl);
235
+ --seed-box-padding-right: var(--seed-box-padding-right-xl);
236
+ }
169
237
  }
@@ -18,7 +18,12 @@
18
18
  }
19
19
 
20
20
  .seed-list-item__prefix {
21
- --seed-box-padding-right: var(--seed-dimension-x3);
21
+ --seed-box-padding-right-base: var(--seed-dimension-x3);
22
+ --seed-box-padding-right-sm: var(--seed-box-padding-right-base);
23
+ --seed-box-padding-right-md: var(--seed-box-padding-right-sm);
24
+ --seed-box-padding-right-lg: var(--seed-box-padding-right-md);
25
+ --seed-box-padding-right-xl: var(--seed-box-padding-right-lg);
26
+ --seed-box-padding-right: var(--seed-box-padding-right-base);
22
27
  padding-right: var(--seed-box-padding-right);
23
28
  --seed-focus-ring: none;
24
29
  --seed-icon-size: 22px;
@@ -35,7 +40,12 @@
35
40
  .seed-list-item__suffix {
36
41
  --seed-box-position: initial;
37
42
  position: var(--seed-box-position);
38
- --seed-box-gap: var(--seed-dimension-x1);
43
+ --seed-box-gap-base: var(--seed-dimension-x1);
44
+ --seed-box-gap-sm: var(--seed-box-gap-base);
45
+ --seed-box-gap-md: var(--seed-box-gap-sm);
46
+ --seed-box-gap-lg: var(--seed-box-gap-md);
47
+ --seed-box-gap-xl: var(--seed-box-gap-lg);
48
+ --seed-box-gap: var(--seed-box-gap-base);
39
49
  align-items: center;
40
50
  gap: var(--seed-box-gap);
41
51
  --seed-focus-ring: none;
@@ -56,10 +66,20 @@
56
66
  .seed-list-item__content {
57
67
  box-sizing: border-box;
58
68
  text-align: start;
59
- --seed-box-gap: var(--seed-dimension-x0_5);
69
+ --seed-box-gap-base: var(--seed-dimension-x0_5);
70
+ --seed-box-gap-sm: var(--seed-box-gap-base);
71
+ --seed-box-gap-md: var(--seed-box-gap-sm);
72
+ --seed-box-gap-lg: var(--seed-box-gap-md);
73
+ --seed-box-gap-xl: var(--seed-box-gap-lg);
74
+ --seed-box-gap: var(--seed-box-gap-base);
60
75
  align-items: flex-start;
61
76
  gap: var(--seed-box-gap);
62
- --seed-box-padding-right: var(--seed-dimension-x2_5);
77
+ --seed-box-padding-right-base: var(--seed-dimension-x2_5);
78
+ --seed-box-padding-right-sm: var(--seed-box-padding-right-base);
79
+ --seed-box-padding-right-md: var(--seed-box-padding-right-sm);
80
+ --seed-box-padding-right-lg: var(--seed-box-padding-right-md);
81
+ --seed-box-padding-right-xl: var(--seed-box-padding-right-lg);
82
+ --seed-box-padding-right: var(--seed-box-padding-right-base);
63
83
  padding: 0 var(--seed-box-padding-right) 0 0;
64
84
  background-color: #0000;
65
85
  border: none;
@@ -184,4 +204,64 @@
184
204
  background-color: var(--seed-color-bg-brand-weak-pressed);
185
205
  }
186
206
  }
207
+
208
+ @media (width >= 480px) {
209
+ .seed-list-item__prefix {
210
+ --seed-box-padding-right: var(--seed-box-padding-right-sm);
211
+ }
212
+
213
+ .seed-list-item__suffix {
214
+ --seed-box-gap: var(--seed-box-gap-sm);
215
+ }
216
+
217
+ .seed-list-item__content {
218
+ --seed-box-gap: var(--seed-box-gap-sm);
219
+ --seed-box-padding-right: var(--seed-box-padding-right-sm);
220
+ }
221
+ }
222
+
223
+ @media (width >= 768px) {
224
+ .seed-list-item__prefix {
225
+ --seed-box-padding-right: var(--seed-box-padding-right-md);
226
+ }
227
+
228
+ .seed-list-item__suffix {
229
+ --seed-box-gap: var(--seed-box-gap-md);
230
+ }
231
+
232
+ .seed-list-item__content {
233
+ --seed-box-gap: var(--seed-box-gap-md);
234
+ --seed-box-padding-right: var(--seed-box-padding-right-md);
235
+ }
236
+ }
237
+
238
+ @media (width >= 1280px) {
239
+ .seed-list-item__prefix {
240
+ --seed-box-padding-right: var(--seed-box-padding-right-lg);
241
+ }
242
+
243
+ .seed-list-item__suffix {
244
+ --seed-box-gap: var(--seed-box-gap-lg);
245
+ }
246
+
247
+ .seed-list-item__content {
248
+ --seed-box-gap: var(--seed-box-gap-lg);
249
+ --seed-box-padding-right: var(--seed-box-padding-right-lg);
250
+ }
251
+ }
252
+
253
+ @media (width >= 1440px) {
254
+ .seed-list-item__prefix {
255
+ --seed-box-padding-right: var(--seed-box-padding-right-xl);
256
+ }
257
+
258
+ .seed-list-item__suffix {
259
+ --seed-box-gap: var(--seed-box-gap-xl);
260
+ }
261
+
262
+ .seed-list-item__content {
263
+ --seed-box-gap: var(--seed-box-gap-xl);
264
+ --seed-box-padding-right: var(--seed-box-padding-right-xl);
265
+ }
266
+ }
187
267
  }
@@ -0,0 +1,174 @@
1
+ .seed-menu-item__root {
2
+ position: relative;
3
+ scroll-margin-top: var(--seed-dimension-x2);
4
+ scroll-margin-bottom: var(--seed-dimension-x2);
5
+ display: flex;
6
+ align-items: center;
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-menu-item__root::before {
20
+ content: "";
21
+ position: absolute;
22
+ top: 0;
23
+ bottom: 0;
24
+ left: 0;
25
+ right: 0;
26
+ z-index: -1;
27
+ transition-property: background-color, left, right, border-radius;
28
+ transition-duration: var(--seed-duration-color-transition);
29
+ transition-timing-function: var(--seed-timing-function-easing);
30
+ }
31
+ .seed-menu-item__root::after {
32
+ content: "";
33
+ position: absolute;
34
+ top: 0;
35
+ right: var(--seed-dimension-x2);
36
+ bottom: 0;
37
+ left: var(--seed-dimension-x2);
38
+ border-radius: var(--seed-radius-r3);
39
+ outline: var(--seed-dimension-x0_5) solid transparent;
40
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
41
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
42
+ }
43
+ @media (hover: hover) and (pointer: fine) {
44
+ .seed-menu-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:hover, [data-hover])::before {
45
+ background-color: var(--seed-color-bg-transparent-pressed);
46
+ left: var(--seed-dimension-x2);
47
+ right: var(--seed-dimension-x2);
48
+ border-radius: var(--seed-radius-r3);
49
+ }
50
+ }
51
+ @media not all and (hover: hover) and (pointer: fine) {
52
+ .seed-menu-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active])::before {
53
+ background-color: var(--seed-color-bg-transparent-pressed);
54
+ left: var(--seed-dimension-x2);
55
+ right: var(--seed-dimension-x2);
56
+ border-radius: var(--seed-radius-r3);
57
+ }
58
+ }
59
+ .seed-menu-item__root:is(:focus-visible, [data-focus-visible])::after {
60
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
61
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
62
+ }
63
+ .seed-menu-item__root:is(:disabled, [disabled], [data-disabled]) {
64
+ cursor: not-allowed;
65
+ --seed-prefix-icon-color: var(--seed-color-fg-disabled);
66
+ --seed-suffix-icon-color: var(--seed-color-fg-disabled);
67
+ }
68
+ .seed-menu-item__body {
69
+ display: flex;
70
+ flex-direction: column;
71
+ flex-grow: 1;
72
+ gap: var(--seed-dimension-x0_5);
73
+ }
74
+ .seed-menu-item__label {
75
+ font-weight: var(--seed-font-weight-regular);
76
+ }
77
+ .seed-menu-item__label:is(:disabled, [disabled], [data-disabled]) {
78
+ color: var(--seed-color-fg-disabled);
79
+ }
80
+ .seed-menu-item__description {
81
+ font-weight: var(--seed-font-weight-regular);
82
+ color: var(--seed-color-fg-neutral-subtle);
83
+ }
84
+ .seed-menu-item__description:is(:disabled, [disabled], [data-disabled]) {
85
+ color: var(--seed-color-fg-disabled);
86
+ }
87
+ .seed-menu-item__root--size_medium {
88
+ padding-top: var(--seed-dimension-x3);
89
+ padding-bottom: var(--seed-dimension-x3);
90
+ padding-left: var(--seed-dimension-x4);
91
+ padding-right: var(--seed-dimension-x4);
92
+ gap: var(--seed-dimension-x3);
93
+ --seed-prefix-icon-size: 22px;
94
+ --seed-suffix-icon-size: 18px;
95
+ }
96
+ .seed-menu-item__label--size_medium {
97
+ font-size: var(--seed-font-size-t5);
98
+ line-height: var(--seed-line-height-t5);
99
+ }
100
+ .seed-menu-item__description--size_medium {
101
+ font-size: var(--seed-font-size-t3);
102
+ line-height: var(--seed-line-height-t3);
103
+ }
104
+ .seed-menu-item__root--size_small {
105
+ padding-top: var(--seed-dimension-x2_5);
106
+ padding-bottom: var(--seed-dimension-x2_5);
107
+ padding-left: var(--seed-dimension-x4);
108
+ padding-right: var(--seed-dimension-x4);
109
+ gap: var(--seed-dimension-x2);
110
+ --seed-prefix-icon-size: 18px;
111
+ --seed-suffix-icon-size: 16px;
112
+ }
113
+ .seed-menu-item__label--size_small {
114
+ font-size: var(--seed-font-size-t4);
115
+ line-height: var(--seed-line-height-t4);
116
+ }
117
+ .seed-menu-item__description--size_small {
118
+ font-size: var(--seed-font-size-t2);
119
+ line-height: var(--seed-line-height-t2);
120
+ }
121
+ .seed-menu-item__root--size_responsive {
122
+ padding-top: var(--seed-dimension-x3);
123
+ padding-bottom: var(--seed-dimension-x3);
124
+ padding-left: var(--seed-dimension-x4);
125
+ padding-right: var(--seed-dimension-x4);
126
+ gap: var(--seed-dimension-x3);
127
+ --seed-prefix-icon-size: 22px;
128
+ --seed-suffix-icon-size: 18px;
129
+ }
130
+ @media (min-width: 1280px) {
131
+ .seed-menu-item__root--size_responsive {
132
+ padding-top: var(--seed-dimension-x2_5);
133
+ padding-bottom: var(--seed-dimension-x2_5);
134
+ padding-left: var(--seed-dimension-x4);
135
+ padding-right: var(--seed-dimension-x4);
136
+ gap: var(--seed-dimension-x2);
137
+ --seed-prefix-icon-size: 18px;
138
+ --seed-suffix-icon-size: 16px;
139
+ }
140
+ }
141
+ .seed-menu-item__label--size_responsive {
142
+ font-size: var(--seed-font-size-t5);
143
+ line-height: var(--seed-line-height-t5);
144
+ }
145
+ @media (min-width: 1280px) {
146
+ .seed-menu-item__label--size_responsive {
147
+ font-size: var(--seed-font-size-t4);
148
+ line-height: var(--seed-line-height-t4);
149
+ }
150
+ }
151
+ .seed-menu-item__description--size_responsive {
152
+ font-size: var(--seed-font-size-t3);
153
+ line-height: var(--seed-line-height-t3);
154
+ }
155
+ @media (min-width: 1280px) {
156
+ .seed-menu-item__description--size_responsive {
157
+ font-size: var(--seed-font-size-t2);
158
+ line-height: var(--seed-line-height-t2);
159
+ }
160
+ }
161
+ .seed-menu-item__root--tone_neutral {
162
+ --seed-prefix-icon-color: var(--seed-color-fg-neutral);
163
+ --seed-suffix-icon-color: var(--seed-color-fg-neutral);
164
+ }
165
+ .seed-menu-item__label--tone_neutral {
166
+ color: var(--seed-color-fg-neutral);
167
+ }
168
+ .seed-menu-item__root--tone_critical {
169
+ --seed-prefix-icon-color: var(--seed-color-fg-critical);
170
+ --seed-suffix-icon-color: var(--seed-color-fg-critical);
171
+ }
172
+ .seed-menu-item__label--tone_critical {
173
+ color: var(--seed-color-fg-critical);
174
+ }
@@ -0,0 +1,35 @@
1
+ declare interface MenuItemVariant {
2
+ /**
3
+ * - `medium`: 뷰포트 너비와 관계없이 사용할 수 있습니다.
4
+ * - `small`: Breakpoint `lg` 이상(데스크톱)에서만 사용하고, 모바일에서는 사용하지 않습니다. 정밀한 선택이 가능한 마우스 입력 환경에서 사이즈를 더 작게 만들고자 할 때 사용합니다.
5
+ * - `responsive`: 뷰포트 너비에 따라 적용되는 사이즈가 달라집니다. Breakpoint `lg` 미만에서는 `medium`, `lg` 이상에서는 `small`로 적용됩니다.
6
+ *
7
+ * @default "medium"
8
+ */
9
+ size: "medium" | "small" | "responsive";
10
+ /**
11
+ * - `neutral`: 일반적인 작업을 수행하는 기본 아이템입니다.
12
+ * - `critical`: 데이터 삭제와 같이 되돌릴 수 없는 작업을 수행하는 아이템입니다.
13
+ *
14
+ * @default "neutral"
15
+ */
16
+ tone: "neutral" | "critical";
17
+ }
18
+
19
+ declare type MenuItemVariantMap = {
20
+ [key in keyof MenuItemVariant]: Array<MenuItemVariant[key]>;
21
+ };
22
+
23
+ export declare type MenuItemVariantProps = Partial<MenuItemVariant>;
24
+
25
+ export declare type MenuItemSlotName = "root" | "body" | "label" | "description";
26
+
27
+ export declare const menuItemVariantMap: MenuItemVariantMap;
28
+
29
+ export declare const menuItem: ((
30
+ props?: MenuItemVariantProps,
31
+ ) => Record<MenuItemSlotName, string>) & {
32
+ splitVariantProps: <T extends MenuItemVariantProps>(
33
+ props: T,
34
+ ) => [MenuItemVariantProps, Omit<T, keyof MenuItemVariantProps>];
35
+ }
@@ -0,0 +1,200 @@
1
+ @layer seed-components {
2
+ .seed-menu-item__root {
3
+ scroll-margin-top: var(--seed-dimension-x2);
4
+ scroll-margin-bottom: var(--seed-dimension-x2);
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-menu-item__root:before {
22
+ content: "";
23
+ z-index: -1;
24
+ transition-property: background-color, left, right, border-radius;
25
+ transition-duration: var(--seed-duration-color-transition);
26
+ transition-timing-function: var(--seed-timing-function-easing);
27
+ position: absolute;
28
+ inset: 0;
29
+ }
30
+
31
+ .seed-menu-item__root:after {
32
+ content: "";
33
+ top: 0;
34
+ right: var(--seed-dimension-x2);
35
+ bottom: 0;
36
+ left: var(--seed-dimension-x2);
37
+ border-radius: var(--seed-radius-r3);
38
+ outline: var(--seed-dimension-x0_5) solid transparent;
39
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
40
+ transition: outline-color var(--seed-duration-d3) var(--seed-timing-function-easing);
41
+ position: absolute;
42
+ }
43
+
44
+ @media (hover: hover) and (pointer: fine) {
45
+ .seed-menu-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:hover, [data-hover]):before {
46
+ background-color: var(--seed-color-bg-transparent-pressed);
47
+ left: var(--seed-dimension-x2);
48
+ right: var(--seed-dimension-x2);
49
+ border-radius: var(--seed-radius-r3);
50
+ }
51
+ }
52
+
53
+ @media not all and (hover: hover) and (pointer: fine) {
54
+ .seed-menu-item__root:not(:is(:disabled, [disabled], [data-disabled])):is(:active, [data-active]):before {
55
+ background-color: var(--seed-color-bg-transparent-pressed);
56
+ left: var(--seed-dimension-x2);
57
+ right: var(--seed-dimension-x2);
58
+ border-radius: var(--seed-radius-r3);
59
+ }
60
+ }
61
+
62
+ .seed-menu-item__root:is(:focus-visible, [data-focus-visible]):after {
63
+ outline: var(--seed-dimension-x0_5) solid var(--seed-color-stroke-focus-ring);
64
+ outline-offset: calc(var(--seed-dimension-x0_5) * -1);
65
+ }
66
+
67
+ .seed-menu-item__root:is(:disabled, [disabled], [data-disabled]) {
68
+ cursor: not-allowed;
69
+ --seed-prefix-icon-color: var(--seed-color-fg-disabled);
70
+ --seed-suffix-icon-color: var(--seed-color-fg-disabled);
71
+ }
72
+
73
+ .seed-menu-item__body {
74
+ gap: var(--seed-dimension-x0_5);
75
+ flex-direction: column;
76
+ flex-grow: 1;
77
+ display: flex;
78
+ }
79
+
80
+ .seed-menu-item__label {
81
+ font-weight: var(--seed-font-weight-regular);
82
+ }
83
+
84
+ .seed-menu-item__label:is(:disabled, [disabled], [data-disabled]) {
85
+ color: var(--seed-color-fg-disabled);
86
+ }
87
+
88
+ .seed-menu-item__description {
89
+ font-weight: var(--seed-font-weight-regular);
90
+ color: var(--seed-color-fg-neutral-subtle);
91
+ }
92
+
93
+ .seed-menu-item__description:is(:disabled, [disabled], [data-disabled]) {
94
+ color: var(--seed-color-fg-disabled);
95
+ }
96
+
97
+ .seed-menu-item__root--size_medium {
98
+ padding-top: var(--seed-dimension-x3);
99
+ padding-bottom: var(--seed-dimension-x3);
100
+ padding-left: var(--seed-dimension-x4);
101
+ padding-right: var(--seed-dimension-x4);
102
+ gap: var(--seed-dimension-x3);
103
+ --seed-prefix-icon-size: 22px;
104
+ --seed-suffix-icon-size: 18px;
105
+ }
106
+
107
+ .seed-menu-item__label--size_medium {
108
+ font-size: var(--seed-font-size-t5);
109
+ line-height: var(--seed-line-height-t5);
110
+ }
111
+
112
+ .seed-menu-item__description--size_medium {
113
+ font-size: var(--seed-font-size-t3);
114
+ line-height: var(--seed-line-height-t3);
115
+ }
116
+
117
+ .seed-menu-item__root--size_small {
118
+ padding-top: var(--seed-dimension-x2_5);
119
+ padding-bottom: var(--seed-dimension-x2_5);
120
+ padding-left: var(--seed-dimension-x4);
121
+ padding-right: var(--seed-dimension-x4);
122
+ gap: var(--seed-dimension-x2);
123
+ --seed-prefix-icon-size: 18px;
124
+ --seed-suffix-icon-size: 16px;
125
+ }
126
+
127
+ .seed-menu-item__label--size_small {
128
+ font-size: var(--seed-font-size-t4);
129
+ line-height: var(--seed-line-height-t4);
130
+ }
131
+
132
+ .seed-menu-item__description--size_small {
133
+ font-size: var(--seed-font-size-t2);
134
+ line-height: var(--seed-line-height-t2);
135
+ }
136
+
137
+ .seed-menu-item__root--size_responsive {
138
+ padding-top: var(--seed-dimension-x3);
139
+ padding-bottom: var(--seed-dimension-x3);
140
+ padding-left: var(--seed-dimension-x4);
141
+ padding-right: var(--seed-dimension-x4);
142
+ gap: var(--seed-dimension-x3);
143
+ --seed-prefix-icon-size: 22px;
144
+ --seed-suffix-icon-size: 18px;
145
+ }
146
+
147
+ @media (width >= 1280px) {
148
+ .seed-menu-item__root--size_responsive {
149
+ padding-top: var(--seed-dimension-x2_5);
150
+ padding-bottom: var(--seed-dimension-x2_5);
151
+ padding-left: var(--seed-dimension-x4);
152
+ padding-right: var(--seed-dimension-x4);
153
+ gap: var(--seed-dimension-x2);
154
+ --seed-prefix-icon-size: 18px;
155
+ --seed-suffix-icon-size: 16px;
156
+ }
157
+ }
158
+
159
+ .seed-menu-item__label--size_responsive {
160
+ font-size: var(--seed-font-size-t5);
161
+ line-height: var(--seed-line-height-t5);
162
+ }
163
+
164
+ @media (width >= 1280px) {
165
+ .seed-menu-item__label--size_responsive {
166
+ font-size: var(--seed-font-size-t4);
167
+ line-height: var(--seed-line-height-t4);
168
+ }
169
+ }
170
+
171
+ .seed-menu-item__description--size_responsive {
172
+ font-size: var(--seed-font-size-t3);
173
+ line-height: var(--seed-line-height-t3);
174
+ }
175
+
176
+ @media (width >= 1280px) {
177
+ .seed-menu-item__description--size_responsive {
178
+ font-size: var(--seed-font-size-t2);
179
+ line-height: var(--seed-line-height-t2);
180
+ }
181
+ }
182
+
183
+ .seed-menu-item__root--tone_neutral {
184
+ --seed-prefix-icon-color: var(--seed-color-fg-neutral);
185
+ --seed-suffix-icon-color: var(--seed-color-fg-neutral);
186
+ }
187
+
188
+ .seed-menu-item__label--tone_neutral {
189
+ color: var(--seed-color-fg-neutral);
190
+ }
191
+
192
+ .seed-menu-item__root--tone_critical {
193
+ --seed-prefix-icon-color: var(--seed-color-fg-critical);
194
+ --seed-suffix-icon-color: var(--seed-color-fg-critical);
195
+ }
196
+
197
+ .seed-menu-item__label--tone_critical {
198
+ color: var(--seed-color-fg-critical);
199
+ }
200
+ }