@iyulab/components 1.10.0 → 1.13.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 (65) hide show
  1. package/CHANGELOG.md +135 -9
  2. package/README.md +3 -1
  3. package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
  4. package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +1 -1
  5. package/dist/components/UElement.styles.js +2 -2
  6. package/dist/components/alert/UAlert.d.ts +3 -0
  7. package/dist/components/alert/UAlert.styles.js +32 -22
  8. package/dist/components/avatar/UAvatar.styles.js +2 -2
  9. package/dist/components/badge/UBadge.d.ts +2 -0
  10. package/dist/components/badge/UBadge.js +5 -3
  11. package/dist/components/badge/UBadge.styles.js +16 -5
  12. package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
  13. package/dist/components/button/UButton.d.ts +3 -2
  14. package/dist/components/button/UButton.styles.js +6 -6
  15. package/dist/components/button-group/UButtonGroup.styles.js +1 -1
  16. package/dist/components/card/UCard.d.ts +2 -0
  17. package/dist/components/card/UCard.js +2 -0
  18. package/dist/components/card/UCard.styles.js +20 -6
  19. package/dist/components/carousel/UCarousel.styles.js +3 -3
  20. package/dist/components/checkbox/UCheckbox.d.ts +1 -1
  21. package/dist/components/checkbox/UCheckbox.styles.js +39 -99
  22. package/dist/components/copy-button/UCopyButton.styles.js +2 -2
  23. package/dist/components/dialog/UDialog.styles.js +8 -8
  24. package/dist/components/divider/UDivider.js +7 -5
  25. package/dist/components/divider/UDivider.styles.js +25 -5
  26. package/dist/components/drawer/UDrawer.styles.js +7 -7
  27. package/dist/components/field/UField.styles.js +2 -2
  28. package/dist/components/icon-button/UIconButton.styles.js +1 -1
  29. package/dist/components/input/UInput.styles.js +3 -3
  30. package/dist/components/menu/UMenu.d.ts +3 -0
  31. package/dist/components/menu/UMenu.js +3 -1
  32. package/dist/components/menu/UMenu.styles.js +19 -6
  33. package/dist/components/menu-item/UMenuItem.d.ts +1 -1
  34. package/dist/components/menu-item/UMenuItem.styles.js +2 -2
  35. package/dist/components/option/UOption.d.ts +3 -1
  36. package/dist/components/option/UOption.js +7 -5
  37. package/dist/components/option/UOption.styles.js +17 -6
  38. package/dist/components/progress-bar/UProgressBar.styles.js +10 -10
  39. package/dist/components/progress-ring/UProgressRing.styles.js +9 -9
  40. package/dist/components/radio/URadio.d.ts +1 -1
  41. package/dist/components/radio/URadio.styles.js +2 -2
  42. package/dist/components/rating/URating.styles.js +2 -2
  43. package/dist/components/select/USelect.styles.js +3 -3
  44. package/dist/components/skeleton/USkeleton.styles.js +3 -3
  45. package/dist/components/slider/USlider.styles.js +5 -5
  46. package/dist/components/spinner/USpinner.styles.js +1 -1
  47. package/dist/components/split-panel/USplitPanel.styles.js +2 -2
  48. package/dist/components/switch/USwitch.styles.js +4 -4
  49. package/dist/components/tab/UTab.d.ts +2 -0
  50. package/dist/components/tab/UTab.js +7 -5
  51. package/dist/components/tab/UTab.styles.js +15 -3
  52. package/dist/components/tab-panel/UTabPanel.d.ts +1 -1
  53. package/dist/components/tab-panel/UTabPanel.styles.js +3 -3
  54. package/dist/components/tag/UTag.d.ts +4 -1
  55. package/dist/components/tag/UTag.js +7 -5
  56. package/dist/components/tag/UTag.styles.js +108 -177
  57. package/dist/components/textarea/UTextarea.styles.js +2 -2
  58. package/dist/components/tooltip/UTooltip.d.ts +2 -0
  59. package/dist/components/tooltip/UTooltip.js +3 -1
  60. package/dist/components/tooltip/UTooltip.styles.js +12 -3
  61. package/dist/components/tree-item/UTreeItem.d.ts +1 -1
  62. package/dist/components/tree-item/UTreeItem.styles.js +3 -3
  63. package/dist/styles/dark.css +77 -7
  64. package/dist/styles/light.css +78 -7
  65. package/package.json +3 -2
@@ -27,7 +27,7 @@ var styles = css`
27
27
 
28
28
  :host([variant="ghost"]),
29
29
  :host([variant="link"]) {
30
- gap: 2px;
30
+ gap: var(--u-space-3xs, 2px);
31
31
  }
32
32
  `;
33
33
  //#endregion
@@ -13,6 +13,8 @@ export type CardOrientation = 'vertical' | 'horizontal';
13
13
  * @csspart header - 헤더 영역 컨테이너
14
14
  * @csspart body - 본문 영역 컨테이너
15
15
  * @csspart footer - 푸터 영역 컨테이너
16
+ * @cssprop --card-border-width - 테두리 두께 (`borderless` 는 0)
17
+ * @cssprop --card-border-color - 테두리 색
16
18
  */
17
19
  export declare class UCard extends UElement {
18
20
  static styles: import('lit').CSSResultGroup[];
@@ -18,6 +18,7 @@ var UCard = class UCard extends UElement {
18
18
  }
19
19
  render() {
20
20
  return html`
21
+ <div class="base" part="base">
21
22
  <div class="media" part="media">
22
23
  <slot name="media" @slotchange=${this.handleSlotChange}></slot>
23
24
  </div>
@@ -32,6 +33,7 @@ var UCard = class UCard extends UElement {
32
33
  <slot name="footer" @slotchange=${this.handleSlotChange}></slot>
33
34
  </footer>
34
35
  </div>
36
+ </div>
35
37
  `;
36
38
  }
37
39
  handleSlotChange(e) {
@@ -3,12 +3,26 @@ import { css } from "lit";
3
3
  var styles = css`
4
4
  :host {
5
5
  display: flex;
6
- border: 1px solid var(--u-border-color);
7
- border-radius: 8px;
6
+ border-radius: var(--u-radius-xl);
8
7
  background-color: var(--u-panel-bg-color);
9
8
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
10
9
  overflow: hidden;
10
+
11
+ --card-border-width: 1px;
12
+ --card-border-color: var(--u-border-color);
13
+ }
14
+
15
+ /* 테두리는 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
16
+ .base {
17
+ box-sizing: border-box;
18
+ width: 100%;
19
+ display: flex;
20
+ flex-direction: inherit;
21
+ border: var(--card-border-width) solid var(--card-border-color);
22
+ border-radius: inherit;
23
+ overflow: hidden;
11
24
  }
25
+
12
26
  :host([orientation="vertical"]) {
13
27
  flex-direction: column;
14
28
  }
@@ -16,7 +30,7 @@ var styles = css`
16
30
  flex-direction: row;
17
31
  }
18
32
  :host([borderless]) {
19
- border: none;
33
+ --card-border-width: 0;
20
34
  }
21
35
  :host([shadowless]) {
22
36
  box-shadow: none;
@@ -48,7 +62,7 @@ var styles = css`
48
62
 
49
63
  .header {
50
64
  display: none;
51
- padding: 16px;
65
+ padding: var(--u-space-lg, 16px);
52
66
  border-bottom: 1px solid var(--u-border-color);
53
67
  }
54
68
  .header.has-content {
@@ -58,7 +72,7 @@ var styles = css`
58
72
  .body {
59
73
  display: none;
60
74
  flex: 1;
61
- padding: 16px;
75
+ padding: var(--u-space-lg, 16px);
62
76
  }
63
77
  .body.has-content {
64
78
  display: block;
@@ -66,7 +80,7 @@ var styles = css`
66
80
 
67
81
  .footer {
68
82
  display: none;
69
- padding: 16px;
83
+ padding: var(--u-space-lg, 16px);
70
84
  border-top: 1px solid var(--u-border-color);
71
85
  }
72
86
  .footer.has-content {
@@ -56,7 +56,7 @@ var styles = css`
56
56
  z-index: 10;
57
57
  top: 50%;
58
58
  transform: translateY(-50%);
59
- padding: 8px;
59
+ padding: var(--u-space-sm, 8px);
60
60
  font-size: 20px;
61
61
  color: var(--u-neutral-900);
62
62
  background-color: var(--u-neutral-100);
@@ -85,7 +85,7 @@ var styles = css`
85
85
  flex-direction: row;
86
86
  align-items: center;
87
87
  justify-content: center;
88
- gap: 8px;
88
+ gap: var(--u-space-sm, 8px);
89
89
  transform: translateX(-50%);
90
90
  }
91
91
 
@@ -94,7 +94,7 @@ var styles = css`
94
94
  height: 10px;
95
95
  padding: 0;
96
96
  border: none;
97
- border-radius: 50%;
97
+ border-radius: var(--u-radius-circle);
98
98
  background-color: var(--u-neutral-400);
99
99
  cursor: pointer;
100
100
  transition: all 0.2s ease;
@@ -20,7 +20,7 @@ export type CheckboxColor = "blue" | "green" | "red" | "orange" | "teal" | "cyan
20
20
  *
21
21
  * @event change - 체크 상태 변경 시 발생
22
22
  *
23
- * @cssprop --checkbox-fill-color - 체크된 상태의 채움색 (기본: --u-primary-color, 미지정 시 blue-600)
23
+ * @cssprop --checkbox-fill-color - 체크된 상태의 채움색 (기본: --u-primary-color)
24
24
  */
25
25
  export declare class UCheckbox extends UFormControlElement<string> {
26
26
  static styles: import('lit').CSSResultGroup[];
@@ -2,7 +2,7 @@ import { css } from "lit";
2
2
  //#region src/components/checkbox/UCheckbox.styles.ts
3
3
  var styles = css`
4
4
  :host {
5
- --checkbox-fill-color: var(--u-primary-color, var(--u-blue-600));
5
+ --checkbox-fill-color: var(--u-primary-color);
6
6
  --checkbox-color: inherit;
7
7
  --checkbox-border-color: var(--u-input-border-color);
8
8
  --checkbox-background-color: var(--u-input-bg-color);
@@ -27,10 +27,10 @@ var styles = css`
27
27
  cursor: default;
28
28
  }
29
29
  :host([invalid]) {
30
- --checkbox-border-color: var(--u-red-600);
30
+ --checkbox-border-color: var(--u-danger-color);
31
31
  }
32
32
  :host([invalid]) .footer {
33
- color: var(--u-red-600);
33
+ color: var(--u-danger-color);
34
34
  }
35
35
  :host([checked]) .checkbox u-icon,
36
36
  :host([indeterminate]) .checkbox u-icon {
@@ -44,110 +44,50 @@ var styles = css`
44
44
  :host([variant="filled"][checked]),
45
45
  :host([variant="filled"][indeterminate]) {
46
46
  --checkbox-color: var(--u-neutral-100);
47
- --checkbox-border-color: var(--checkbox-fill-color);
48
- --checkbox-background-color: var(--checkbox-fill-color);
47
+ --checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
48
+ --checkbox-background-color: var(--checkbox-hue, var(--checkbox-fill-color));
49
49
  }
50
50
 
51
51
  /* === Variant: outline - 테두리만 === */
52
52
  :host([variant="outline"][checked]),
53
53
  :host([variant="outline"][indeterminate]) {
54
- --checkbox-border-color: var(--checkbox-fill-color);
54
+ --checkbox-color: var(--checkbox-hue, var(--checkbox-fill-color));
55
+ --checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
55
56
  --checkbox-background-color: transparent;
56
57
  }
57
58
 
58
- /* === Color variants (filled) === */
59
- :host([variant="filled"][color="blue"][checked]),
60
- :host([variant="filled"][color="blue"][indeterminate]) {
61
- --checkbox-border-color: var(--checkbox-fill-color);
62
- --checkbox-background-color: var(--checkbox-fill-color);
63
- }
64
- :host([variant="filled"][color="green"][checked]),
65
- :host([variant="filled"][color="green"][indeterminate]) {
66
- --checkbox-border-color: var(--u-green-600);
67
- --checkbox-background-color: var(--u-green-600);
68
- }
69
- :host([variant="filled"][color="red"][checked]),
70
- :host([variant="filled"][color="red"][indeterminate]) {
71
- --checkbox-border-color: var(--u-red-600);
72
- --checkbox-background-color: var(--u-red-600);
73
- }
74
- :host([variant="filled"][color="orange"][checked]),
75
- :host([variant="filled"][color="orange"][indeterminate]) {
76
- --checkbox-border-color: var(--u-orange-600);
77
- --checkbox-background-color: var(--u-orange-600);
78
- }
79
- :host([variant="filled"][color="teal"][checked]),
80
- :host([variant="filled"][color="teal"][indeterminate]) {
81
- --checkbox-border-color: var(--u-teal-600);
82
- --checkbox-background-color: var(--u-teal-600);
83
- }
84
- :host([variant="filled"][color="cyan"][checked]),
85
- :host([variant="filled"][color="cyan"][indeterminate]) {
86
- --checkbox-border-color: var(--u-cyan-600);
87
- --checkbox-background-color: var(--u-cyan-600);
88
- }
89
- :host([variant="filled"][color="purple"][checked]),
90
- :host([variant="filled"][color="purple"][indeterminate]) {
91
- --checkbox-border-color: var(--u-purple-600);
92
- --checkbox-background-color: var(--u-purple-600);
93
- }
94
- :host([variant="filled"][color="pink"][checked]),
95
- :host([variant="filled"][color="pink"][indeterminate]) {
96
- --checkbox-border-color: var(--u-pink-600);
97
- --checkbox-background-color: var(--u-pink-600);
98
- }
99
- :host([variant="filled"][color="neutral"][checked]),
100
- :host([variant="filled"][color="neutral"][indeterminate]) {
101
- --checkbox-border-color: var(--u-neutral-600);
102
- --checkbox-background-color: var(--u-neutral-600);
59
+ /* ==========================================================================
60
+ 장식 축 — color= 는 hue 슬롯만 채운다. variant 규칙이 폴백과 함께 읽는다.
61
+ 기본값 blue 는 규칙이 없다 = 슬롯이 비어 브랜드 훅(--checkbox-fill-color) 탄다.
62
+ u-tag 와 같은 방식이다 — 슬롯이 채워지면 color= 가 최종 권한을 갖는다.
63
+ blue 는 장식 축의 한 값이 아니라 "색을 지정하지 않음" 의 표기다.
64
+ ========================================================================== */
65
+ :host([color="green"]) {
66
+ --checkbox-hue: var(--u-green-600);
103
67
  }
104
-
105
- /* === Color variants (outline) === */
106
- :host([variant="outline"][color="blue"][checked]),
107
- :host([variant="outline"][color="blue"][indeterminate]) {
108
- --checkbox-color: var(--checkbox-fill-color);
109
- --checkbox-border-color: var(--checkbox-fill-color);
110
- }
111
- :host([variant="outline"][color="green"][checked]),
112
- :host([variant="outline"][color="green"][indeterminate]) {
113
- --checkbox-color: var(--u-green-600);
114
- --checkbox-border-color: var(--u-green-600);
115
- }
116
- :host([variant="outline"][color="red"][checked]),
117
- :host([variant="outline"][color="red"][indeterminate]) {
118
- --checkbox-color: var(--u-red-600);
119
- --checkbox-border-color: var(--u-red-600);
120
- }
121
- :host([variant="outline"][color="orange"][checked]),
122
- :host([variant="outline"][color="orange"][indeterminate]) {
123
- --checkbox-color: var(--u-orange-600);
124
- --checkbox-border-color: var(--u-orange-600);
125
- }
126
- :host([variant="outline"][color="teal"][checked]),
127
- :host([variant="outline"][color="teal"][indeterminate]) {
128
- --checkbox-color: var(--u-teal-600);
129
- --checkbox-border-color: var(--u-teal-600);
130
- }
131
- :host([variant="outline"][color="cyan"][checked]),
132
- :host([variant="outline"][color="cyan"][indeterminate]) {
133
- --checkbox-color: var(--u-cyan-600);
134
- --checkbox-border-color: var(--u-cyan-600);
135
- }
136
- :host([variant="outline"][color="purple"][checked]),
137
- :host([variant="outline"][color="purple"][indeterminate]) {
138
- --checkbox-color: var(--u-purple-600);
139
- --checkbox-border-color: var(--u-purple-600);
140
- }
141
- :host([variant="outline"][color="pink"][checked]),
142
- :host([variant="outline"][color="pink"][indeterminate]) {
143
- --checkbox-color: var(--u-pink-600);
144
- --checkbox-border-color: var(--u-pink-600);
145
- }
146
- :host([variant="outline"][color="neutral"][checked]),
147
- :host([variant="outline"][color="neutral"][indeterminate]) {
148
- --checkbox-color: var(--u-neutral-600);
149
- --checkbox-border-color: var(--u-neutral-600);
68
+ :host([color="red"]) {
69
+ --checkbox-hue: var(--u-red-600);
70
+ }
71
+ :host([color="orange"]) {
72
+ --checkbox-hue: var(--u-orange-600);
73
+ }
74
+ :host([color="teal"]) {
75
+ --checkbox-hue: var(--u-teal-600);
76
+ }
77
+ :host([color="cyan"]) {
78
+ --checkbox-hue: var(--u-cyan-600);
79
+ }
80
+ :host([color="purple"]) {
81
+ --checkbox-hue: var(--u-purple-600);
150
82
  }
83
+ :host([color="pink"]) {
84
+ --checkbox-hue: var(--u-pink-600);
85
+ }
86
+ :host([color="neutral"]) {
87
+ --checkbox-hue: var(--u-neutral-600);
88
+ }
89
+
90
+
151
91
 
152
92
  .wrapper {
153
93
  display: inline-flex;
@@ -197,7 +137,7 @@ var styles = css`
197
137
  }
198
138
 
199
139
  .required {
200
- color: var(--u-red-600);
140
+ color: var(--u-danger-color);
201
141
  font-weight: 500;
202
142
  }
203
143
 
@@ -209,7 +149,7 @@ var styles = css`
209
149
  }
210
150
 
211
151
  :host([invalid]) .description {
212
- color: var(--u-red-600);
152
+ color: var(--u-danger-color);
213
153
  }
214
154
  `;
215
155
  //#endregion
@@ -14,12 +14,12 @@ var styles = css`
14
14
  }
15
15
 
16
16
  :host([copied]) u-icon-button {
17
- color: var(--u-green-500);
17
+ color: var(--u-success-color-weak);
18
18
  }
19
19
 
20
20
  /* 라벨 형태(아이콘+텍스트): 복사 완료 시 아이콘/텍스트를 성공색으로 강조 */
21
21
  :host([copied]) u-button {
22
- color: var(--u-green-500);
22
+ color: var(--u-success-color-weak);
23
23
  }
24
24
  `;
25
25
  //#endregion
@@ -68,7 +68,7 @@ var styles = css`
68
68
  * 테두리는 CanvasText 원색이 과해 옅게 혼합.
69
69
  */
70
70
  border: 1px solid var(--u-border-color, color-mix(in srgb, CanvasText 20%, Canvas));
71
- border-radius: 6px;
71
+ border-radius: var(--u-radius-lg);
72
72
  background: var(--u-panel-bg-color, Canvas);
73
73
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
74
74
  pointer-events: auto;
@@ -87,8 +87,8 @@ var styles = css`
87
87
  display: flex;
88
88
  align-items: center;
89
89
  justify-content: space-between;
90
- gap: 8px;
91
- padding: 12px 16px;
90
+ gap: var(--u-space-sm, 8px);
91
+ padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
92
92
  font-size: 18px;
93
93
  font-weight: 600;
94
94
  line-height: 1.3;
@@ -96,16 +96,16 @@ var styles = css`
96
96
  }
97
97
  .header .close-btn {
98
98
  flex-shrink: 0;
99
- padding: 4px;
99
+ padding: var(--u-space-2xs, 4px);
100
100
  font-size: inherit;
101
- border-radius: 4px;
101
+ border-radius: var(--u-radius-md);
102
102
  }
103
103
 
104
104
  .body {
105
105
  flex: 1 1 auto;
106
106
  min-height: 0;
107
107
  display: block;
108
- padding: 16px;
108
+ padding: var(--u-space-lg, 16px);
109
109
  overflow: auto;
110
110
  }
111
111
 
@@ -114,8 +114,8 @@ var styles = css`
114
114
  display: flex;
115
115
  align-items: center;
116
116
  justify-content: flex-end;
117
- gap: 8px;
118
- padding: 12px 16px;
117
+ gap: var(--u-space-sm, 8px);
118
+ padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
119
119
  border-top: 1px solid var(--u-border-color);
120
120
  }
121
121
  `;
@@ -17,11 +17,13 @@ var UDivider = class UDivider extends UElement {
17
17
  }
18
18
  render() {
19
19
  return html`
20
- <span class="line" part="line-start"></span>
21
- <span class="label" part="label">
22
- <slot @slotchange=${this.handleSlotChange}></slot>
23
- </span>
24
- <span class="line" part="line-end"></span>
20
+ <div class="base" part="base">
21
+ <span class="line" part="line-start"></span>
22
+ <span class="label" part="label">
23
+ <slot @slotchange=${this.handleSlotChange}></slot>
24
+ </span>
25
+ <span class="line" part="line-end"></span>
26
+ </div>
25
27
  `;
26
28
  }
27
29
  handleSlotChange(e) {
@@ -7,10 +7,24 @@ var styles = css`
7
7
  --divider-spacing: 8px;
8
8
  }
9
9
 
10
+ /*
11
+ * 간격은 **내부 요소의 padding** 이 진다 — :host 에 margin 으로 두면 소비 앱의
12
+ * CSS 리셋(전역 셀렉터로 margin 을 0 으로 두는 관행)에 에러 없이 지워진다.
13
+ *
14
+ * ★ 여기만 다른 8개 컴포넌트와 방식이 갈린다. 구분선의 간격은 *형제를 밀어내는* 것이라
15
+ * 내부 요소의 margin 으로 옮기면 호스트 박스 안에서 상쇄되어 아무것도 밀지 못한다.
16
+ * 그러나 **padding** 은 호스트 박스 자체를 키우므로 형제는 종전대로 밀려나고,
17
+ * padding 은 섀도 내부에 있어 문서 리셋이 닿지 못한다.
18
+ */
10
19
  :host {
20
+ display: block;
21
+ }
22
+
23
+ .base {
24
+ box-sizing: border-box;
11
25
  display: flex;
12
26
  align-items: center;
13
- margin: var(--divider-spacing) 0;
27
+ padding: var(--divider-spacing) 0;
14
28
  }
15
29
 
16
30
  /* variant */
@@ -43,7 +57,7 @@ var styles = css`
43
57
  /* 슬롯 콘텐츠 */
44
58
  .label {
45
59
  display: none;
46
- padding: 0 12px;
60
+ padding: 0 var(--u-space-md, 12px);
47
61
  color: var(--u-txt-color-weak);
48
62
  font-size: 0.85em;
49
63
  white-space: nowrap;
@@ -52,10 +66,16 @@ var styles = css`
52
66
 
53
67
  /* vertical */
54
68
  :host([vertical]) {
55
- flex-direction: column;
56
- margin: 0 var(--divider-spacing);
69
+ display: inline-block;
57
70
  height: auto;
58
71
  min-height: 1em;
72
+ align-self: stretch;
73
+ }
74
+
75
+ :host([vertical]) .base {
76
+ flex-direction: column;
77
+ padding: 0 var(--divider-spacing);
78
+ height: 100%;
59
79
  }
60
80
 
61
81
  :host([vertical]) .line {
@@ -86,7 +106,7 @@ var styles = css`
86
106
  }
87
107
 
88
108
  :host([vertical]) .label {
89
- padding: 12px 0;
109
+ padding: var(--u-space-md, 12px) 0;
90
110
  }
91
111
  `;
92
112
  //#endregion
@@ -75,8 +75,8 @@ var styles = css`
75
75
  display: flex;
76
76
  align-items: center;
77
77
  justify-content: space-between;
78
- gap: 8px;
79
- padding: 12px 16px;
78
+ gap: var(--u-space-sm, 8px);
79
+ padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
80
80
  font-size: 18px;
81
81
  font-weight: 600;
82
82
  line-height: 1.3;
@@ -84,16 +84,16 @@ var styles = css`
84
84
  }
85
85
  .header .close-btn {
86
86
  flex-shrink: 0;
87
- padding: 4px;
87
+ padding: var(--u-space-2xs, 4px);
88
88
  font-size: inherit;
89
- border-radius: 4px;
89
+ border-radius: var(--u-radius-md);
90
90
  }
91
91
 
92
92
  .body {
93
93
  flex: 1 1 auto;
94
94
  min-height: 0;
95
95
  display: block;
96
- padding: 16px;
96
+ padding: var(--u-space-lg, 16px);
97
97
  overflow: auto;
98
98
  }
99
99
 
@@ -102,8 +102,8 @@ var styles = css`
102
102
  display: flex;
103
103
  align-items: center;
104
104
  justify-content: flex-end;
105
- gap: 8px;
106
- padding: 12px 16px;
105
+ gap: var(--u-space-sm, 8px);
106
+ padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
107
107
  border-top: 1px solid var(--u-border-color);
108
108
  }
109
109
  `;
@@ -12,7 +12,7 @@ var styles = css`
12
12
  cursor: not-allowed;
13
13
  }
14
14
  :host([invalid]) .footer {
15
- color: var(--u-red-600);
15
+ color: var(--u-danger-color);
16
16
  }
17
17
 
18
18
  .header {
@@ -32,7 +32,7 @@ var styles = css`
32
32
  }
33
33
 
34
34
  .required {
35
- color: var(--u-red-600);
35
+ color: var(--u-danger-color);
36
36
  margin-right: 0.2em;
37
37
  }
38
38
 
@@ -11,7 +11,7 @@ var styles = css`
11
11
  color: #fff;
12
12
  }
13
13
  :host([variant="link"]) {
14
- color: var(--u-blue-500);
14
+ color: var(--u-primary-color-weak);
15
15
  }
16
16
 
17
17
  u-button {
@@ -75,7 +75,7 @@ var styles = css`
75
75
  padding-left: 0;
76
76
  padding-right: 0;
77
77
  border: none;
78
- border-radius: 0;
78
+ border-radius: var(--u-radius-none);
79
79
  border-bottom: 1px solid var(--u-input-border-color);
80
80
  background-color: transparent;
81
81
  }
@@ -101,7 +101,7 @@ var styles = css`
101
101
  /* ===== Variant: borderless ===== */
102
102
  :host([variant="borderless"]) .container {
103
103
  border: none;
104
- border-radius: 0;
104
+ border-radius: var(--u-radius-none);
105
105
  background-color: transparent;
106
106
  padding: 0;
107
107
  box-shadow: none;
@@ -173,7 +173,7 @@ var styles = css`
173
173
  max-height: var(--input-popover-max-height);
174
174
  padding: 4px;
175
175
  border: 1px solid var(--u-border-color);
176
- border-radius: 6px;
176
+ border-radius: var(--u-radius-lg);
177
177
  background-color: var(--u-panel-bg-color);
178
178
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
179
179
  overflow-x: auto;
@@ -8,6 +8,9 @@ export type MenuSelection = 'none' | 'single' | 'multiple';
8
8
  * @slot - 메뉴 아이템 (u-menu-item, u-divider)
9
9
  *
10
10
  * @cssprop --menu-indent-size - 하위 메뉴 아이템의 들여쓰기 크기 (기본값: 20px)
11
+ * @cssprop --menu-padding - 내부 여백 (`borderless` 는 0)
12
+ * @cssprop --menu-border-width - 테두리 두께 (`borderless` 는 0)
13
+ * @cssprop --menu-border-color - 테두리 색
11
14
  *
12
15
  * @event change - 선택된 아이템이 변경될 때 발생
13
16
  */
@@ -120,7 +120,9 @@ var UMenu = class UMenu extends UElement {
120
120
  ].some((k) => changedProperties.has(k))) this.propagate();
121
121
  }
122
122
  render() {
123
- return html`<slot @slotchange=${this.handleSlotChange}></slot>`;
123
+ return html`<div class="base" part="base">
124
+ <slot @slotchange=${this.handleSlotChange}></slot>
125
+ </div>`;
124
126
  }
125
127
  getItems(fn) {
126
128
  const result = [];
@@ -8,16 +8,29 @@ var styles = css`
8
8
  :host {
9
9
  display: flex;
10
10
  flex-direction: column;
11
- padding: 4px;
12
11
  min-width: 160px;
13
- border: 1px solid var(--u-border-color);
14
- border-radius: 6px;
12
+ border-radius: var(--u-radius-lg);
15
13
  background-color: var(--u-panel-bg-color);
14
+
15
+ --menu-padding: var(--u-space-2xs, 4px);
16
+ --menu-border-width: 1px;
17
+ --menu-border-color: var(--u-border-color);
18
+ }
19
+
20
+ /* 여백/테두리는 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
21
+ .base {
22
+ box-sizing: border-box;
23
+ width: 100%;
24
+ display: flex;
25
+ flex-direction: column;
26
+ padding: var(--menu-padding);
27
+ border: var(--menu-border-width) solid var(--menu-border-color);
28
+ border-radius: inherit;
16
29
  }
17
30
  :host([borderless]) {
18
- padding: 0;
19
- border: none;
20
- border-radius: 0;
31
+ --menu-padding: 0;
32
+ --menu-border-width: 0;
33
+ border-radius: var(--u-radius-none);
21
34
  background-color: transparent;
22
35
  }
23
36
  `;
@@ -17,7 +17,7 @@ export type MenuItemAlign = 'left' | 'center' | 'right';
17
17
  *
18
18
  * @event pick - 아이템 선택 시 발생 (하위 메뉴가 없는 경우)
19
19
  *
20
- * @cssprop --menu-item-color - 선택/활성 상태의 기준색 (기본: --u-primary-color, 미지정 시 blue-600)
20
+ * @cssprop --menu-item-color - 선택/활성 상태의 기준색 (기본: --u-primary-color)
21
21
  */
22
22
  export declare class UMenuItem extends UElement {
23
23
  static styles: import('lit').CSSResultGroup[];
@@ -3,7 +3,7 @@ import { css } from "lit";
3
3
  var styles = css`
4
4
  :host {
5
5
  --menu-item-depth: 0;
6
- --menu-item-color: var(--u-primary-color, var(--u-blue-600));
6
+ --menu-item-color: var(--u-primary-color);
7
7
  }
8
8
 
9
9
  :host {
@@ -137,7 +137,7 @@ var styles = css`
137
137
  flex-direction: column;
138
138
  padding: 4px;
139
139
  border: 1px solid var(--u-border-color);
140
- border-radius: 4px;
140
+ border-radius: var(--u-radius-md);
141
141
  background-color: var(--u-panel-bg-color);
142
142
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
143
143
  transform: scale(0.8);
@@ -21,7 +21,9 @@ export type OptionMarker = 'radio' | 'check';
21
21
  * @cssprop --option-border-color-active-interactive - 선택된 상태에서 호버/포커스 시 테두리 색상
22
22
  * @cssprop --option-background-color-active-interactive - 선택된 상태에서 호버/포커스 시 배경 색상
23
23
  * @cssprop --option-color - 선택 상태의 기준색. 위 active 계열이 이 값에서 파생된다
24
- * (기본: --u-primary-color, 미지정 시 blue-600)
24
+ * (기본: --u-primary-color)
25
+ * @cssprop --option-padding-block - 세로 여백
26
+ * @cssprop --option-padding-inline - 가로 여백
25
27
  */
26
28
  export declare class UOption extends UElement {
27
29
  static styles: import('lit').CSSResultGroup[];