@iyulab/components 1.9.0 → 1.12.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 (120) hide show
  1. package/CHANGELOG.md +107 -9
  2. package/README.md +11 -1
  3. package/dist/_virtual/{_@oxc-project_runtime@0.139.0 → _@oxc-project_runtime@0.142.0}/helpers/esm/decorate.js +1 -1
  4. package/dist/_virtual/{_@oxc-project_runtime@0.139.0 → _@oxc-project_runtime@0.142.0}/helpers/esm/decorateMetadata.js +1 -1
  5. package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
  6. package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +1 -1
  7. package/dist/components/UElement.d.ts +1 -4
  8. package/dist/components/UElement.js +3 -4
  9. package/dist/components/UElement.styles.js +2 -2
  10. package/dist/components/UFloatingElement.js +2 -2
  11. package/dist/components/UFormControlElement.js +2 -2
  12. package/dist/components/UOverlayElement.d.ts +3 -0
  13. package/dist/components/UOverlayElement.js +5 -2
  14. package/dist/components/alert/UAlert.d.ts +3 -0
  15. package/dist/components/alert/UAlert.js +2 -2
  16. package/dist/components/alert/UAlert.styles.js +29 -19
  17. package/dist/components/avatar/UAvatar.js +2 -2
  18. package/dist/components/avatar/UAvatar.styles.js +2 -2
  19. package/dist/components/badge/UBadge.d.ts +2 -0
  20. package/dist/components/badge/UBadge.js +7 -5
  21. package/dist/components/badge/UBadge.styles.js +16 -5
  22. package/dist/components/breadcrumb/UBreadcrumb.js +1 -1
  23. package/dist/components/breadcrumb-item/UBreadcrumbItem.js +2 -2
  24. package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
  25. package/dist/components/button/UButton.d.ts +19 -2
  26. package/dist/components/button/UButton.js +2 -2
  27. package/dist/components/button/UButton.styles.js +34 -23
  28. package/dist/components/button-group/UButtonGroup.js +2 -2
  29. package/dist/components/card/UCard.d.ts +2 -0
  30. package/dist/components/card/UCard.js +4 -2
  31. package/dist/components/card/UCard.styles.js +17 -3
  32. package/dist/components/carousel/UCarousel.js +2 -2
  33. package/dist/components/carousel/UCarousel.styles.js +1 -1
  34. package/dist/components/checkbox/UCheckbox.d.ts +2 -0
  35. package/dist/components/checkbox/UCheckbox.js +2 -2
  36. package/dist/components/checkbox/UCheckbox.styles.js +39 -99
  37. package/dist/components/chip/UChip.js +2 -2
  38. package/dist/components/copy-button/UCopyButton.js +2 -2
  39. package/dist/components/copy-button/UCopyButton.styles.js +2 -2
  40. package/dist/components/dialog/UDialog.js +2 -2
  41. package/dist/components/dialog/UDialog.styles.js +2 -2
  42. package/dist/components/divider/UDivider.js +2 -2
  43. package/dist/components/drawer/UDrawer.d.ts +1 -1
  44. package/dist/components/drawer/UDrawer.js +2 -2
  45. package/dist/components/drawer/UDrawer.styles.js +1 -1
  46. package/dist/components/field/UField.js +2 -2
  47. package/dist/components/field/UField.styles.js +2 -2
  48. package/dist/components/form/UForm.js +2 -2
  49. package/dist/components/icon/UIcon.js +2 -2
  50. package/dist/components/icon-button/UIconButton.js +2 -2
  51. package/dist/components/icon-button/UIconButton.styles.js +1 -1
  52. package/dist/components/input/UInput.d.ts +4 -0
  53. package/dist/components/input/UInput.js +2 -4
  54. package/dist/components/input/UInput.styles.js +6 -3
  55. package/dist/components/menu/UMenu.d.ts +3 -0
  56. package/dist/components/menu/UMenu.js +5 -4
  57. package/dist/components/menu/UMenu.styles.js +19 -6
  58. package/dist/components/menu-item/UMenuItem.d.ts +2 -0
  59. package/dist/components/menu-item/UMenuItem.js +3 -2
  60. package/dist/components/menu-item/UMenuItem.styles.js +2 -2
  61. package/dist/components/option/UOption.d.ts +4 -0
  62. package/dist/components/option/UOption.js +9 -7
  63. package/dist/components/option/UOption.styles.js +17 -6
  64. package/dist/components/panel/UPanel.js +2 -2
  65. package/dist/components/popover/UPopover.js +2 -3
  66. package/dist/components/progress-bar/UProgressBar.js +4 -3
  67. package/dist/components/progress-bar/UProgressBar.styles.js +10 -10
  68. package/dist/components/progress-ring/UProgressRing.js +2 -2
  69. package/dist/components/progress-ring/UProgressRing.styles.js +9 -9
  70. package/dist/components/radio/URadio.d.ts +3 -0
  71. package/dist/components/radio/URadio.js +2 -3
  72. package/dist/components/radio/URadio.styles.js +2 -2
  73. package/dist/components/rating/URating.js +2 -2
  74. package/dist/components/rating/URating.styles.js +2 -2
  75. package/dist/components/select/USelect.js +2 -4
  76. package/dist/components/select/USelect.styles.js +3 -3
  77. package/dist/components/skeleton/USkeleton.js +2 -2
  78. package/dist/components/skeleton/USkeleton.styles.js +3 -3
  79. package/dist/components/slider/USlider.js +2 -2
  80. package/dist/components/slider/USlider.styles.js +4 -4
  81. package/dist/components/spinner/USpinner.js +2 -2
  82. package/dist/components/spinner/USpinner.styles.js +1 -1
  83. package/dist/components/split-panel/USplitPanel.js +2 -2
  84. package/dist/components/split-panel/USplitPanel.styles.js +2 -2
  85. package/dist/components/switch/USwitch.js +2 -2
  86. package/dist/components/switch/USwitch.styles.js +4 -4
  87. package/dist/components/tab/UTab.d.ts +2 -0
  88. package/dist/components/tab/UTab.js +9 -7
  89. package/dist/components/tab/UTab.styles.js +15 -3
  90. package/dist/components/tab-panel/UTabPanel.d.ts +2 -0
  91. package/dist/components/tab-panel/UTabPanel.js +2 -2
  92. package/dist/components/tab-panel/UTabPanel.styles.js +3 -3
  93. package/dist/components/tag/UTag.d.ts +4 -0
  94. package/dist/components/tag/UTag.js +9 -7
  95. package/dist/components/tag/UTag.styles.js +101 -170
  96. package/dist/components/textarea/UTextarea.js +2 -2
  97. package/dist/components/textarea/UTextarea.styles.js +2 -2
  98. package/dist/components/tooltip/UTooltip.d.ts +2 -0
  99. package/dist/components/tooltip/UTooltip.js +5 -3
  100. package/dist/components/tooltip/UTooltip.styles.js +12 -3
  101. package/dist/components/tree/UTree.d.ts +6 -0
  102. package/dist/components/tree/UTree.js +2 -2
  103. package/dist/components/tree-item/UTreeItem.d.ts +2 -0
  104. package/dist/components/tree-item/UTreeItem.js +2 -2
  105. package/dist/components/tree-item/UTreeItem.styles.js +3 -3
  106. package/dist/react/UDialog.d.ts +5 -1
  107. package/dist/react/UDialog.js +4 -1
  108. package/dist/react/UDrawer.d.ts +5 -1
  109. package/dist/react/UDrawer.js +4 -1
  110. package/dist/react/UPopover.d.ts +4 -2
  111. package/dist/react/UTooltip.d.ts +4 -2
  112. package/dist/styles/dark.css +64 -7
  113. package/dist/styles/light.css +64 -7
  114. package/dist/styles/tokens.css +17 -0
  115. package/dist/utilities/Theme.js +4 -0
  116. package/package.json +7 -4
  117. package/plugins/vite-plugin-glob-resolve.d.ts +0 -12
  118. package/plugins/vite-plugin-glob-resolve.js +0 -66
  119. package/plugins/vite-plugin-react-wrapper.d.ts +0 -14
  120. package/plugins/vite-plugin-react-wrapper.js +0 -235
@@ -2,202 +2,121 @@ import { css } from "lit";
2
2
  //#region src/components/tag/UTag.styles.ts
3
3
  var styles = css`
4
4
  :host {
5
- --tag-fill-color: var(--u-primary-color, var(--u-blue-600));
5
+ --tag-fill-color: var(--u-primary-color);
6
6
  --tag-color: var(--u-neutral-800);
7
7
  --tag-bg-color: var(--u-neutral-100);
8
8
  --tag-border-color: transparent;
9
9
  }
10
10
 
11
- /* Variant: solid (강한 채움, 기본 색상은 --u-primary-color) */
11
+ /* ==========================================================================
12
+ 장식 축 — 색 슬롯 매핑
13
+ color="purple" 에는 역할 의미가 없다(장식이다). 그래서 역할 토큰이 아니라
14
+ 팔레트를 직접 읽으며, 브랜드 오버라이드에 의도적으로 면역이다.
15
+ 아래 9개 규칙이 hue 슬롯을 채우고, variant 규칙이 그것을 소비한다.
16
+ 슬롯이 비면(color="neutral") variant 규칙의 폴백 = 브랜드 경로를 탄다.
17
+ ========================================================================== */
18
+ :host([color="blue"]) {
19
+ --tag-hue-solid: var(--u-blue-500);
20
+ --tag-hue-line: var(--u-blue-300);
21
+ --tag-hue-surface: var(--u-blue-100);
22
+ --tag-hue-text: var(--u-blue-800);
23
+ --tag-hue-text-outlined: var(--u-blue-600);
24
+ }
25
+ :host([color="green"]) {
26
+ --tag-hue-solid: var(--u-green-500);
27
+ --tag-hue-line: var(--u-green-300);
28
+ --tag-hue-surface: var(--u-green-100);
29
+ --tag-hue-text: var(--u-green-800);
30
+ --tag-hue-text-outlined: var(--u-green-600);
31
+ }
32
+ /* yellow 는 명도가 높아 solid·outlined 텍스트를 한 단 진하게 쓴다 */
33
+ :host([color="yellow"]) {
34
+ --tag-hue-solid: var(--u-yellow-600);
35
+ --tag-hue-line: var(--u-yellow-300);
36
+ --tag-hue-surface: var(--u-yellow-100);
37
+ --tag-hue-text: var(--u-yellow-800);
38
+ --tag-hue-text-outlined: var(--u-yellow-700);
39
+ }
40
+ :host([color="red"]) {
41
+ --tag-hue-solid: var(--u-red-500);
42
+ --tag-hue-line: var(--u-red-300);
43
+ --tag-hue-surface: var(--u-red-100);
44
+ --tag-hue-text: var(--u-red-800);
45
+ --tag-hue-text-outlined: var(--u-red-600);
46
+ }
47
+ :host([color="orange"]) {
48
+ --tag-hue-solid: var(--u-orange-500);
49
+ --tag-hue-line: var(--u-orange-300);
50
+ --tag-hue-surface: var(--u-orange-100);
51
+ --tag-hue-text: var(--u-orange-800);
52
+ --tag-hue-text-outlined: var(--u-orange-600);
53
+ }
54
+ :host([color="teal"]) {
55
+ --tag-hue-solid: var(--u-teal-500);
56
+ --tag-hue-line: var(--u-teal-300);
57
+ --tag-hue-surface: var(--u-teal-100);
58
+ --tag-hue-text: var(--u-teal-800);
59
+ --tag-hue-text-outlined: var(--u-teal-600);
60
+ }
61
+ :host([color="cyan"]) {
62
+ --tag-hue-solid: var(--u-cyan-500);
63
+ --tag-hue-line: var(--u-cyan-300);
64
+ --tag-hue-surface: var(--u-cyan-100);
65
+ --tag-hue-text: var(--u-cyan-800);
66
+ --tag-hue-text-outlined: var(--u-cyan-600);
67
+ }
68
+ :host([color="purple"]) {
69
+ --tag-hue-solid: var(--u-purple-500);
70
+ --tag-hue-line: var(--u-purple-300);
71
+ --tag-hue-surface: var(--u-purple-100);
72
+ --tag-hue-text: var(--u-purple-800);
73
+ --tag-hue-text-outlined: var(--u-purple-600);
74
+ }
75
+ :host([color="pink"]) {
76
+ --tag-hue-solid: var(--u-pink-500);
77
+ --tag-hue-line: var(--u-pink-300);
78
+ --tag-hue-surface: var(--u-pink-100);
79
+ --tag-hue-text: var(--u-pink-800);
80
+ --tag-hue-text-outlined: var(--u-pink-600);
81
+ }
82
+
83
+ /* Variant: solid (강한 채움, 색 미지정 시 --tag-fill-color = 브랜드) */
12
84
  :host([variant="solid"]) {
13
85
  --tag-color: var(--u-neutral-0);
14
- --tag-bg-color: var(--tag-fill-color);
15
- --tag-border-color: var(--tag-fill-color);
16
- }
17
- :host([variant="solid"][color="blue"]) {
18
- --tag-bg-color: var(--u-blue-500);
19
- --tag-border-color: var(--u-blue-500);
20
- }
21
- :host([variant="solid"][color="green"]) {
22
- --tag-bg-color: var(--u-green-500);
23
- --tag-border-color: var(--u-green-500);
24
- }
25
- :host([variant="solid"][color="yellow"]) {
26
- --tag-bg-color: var(--u-yellow-600);
27
- --tag-border-color: var(--u-yellow-600);
28
- }
29
- :host([variant="solid"][color="red"]) {
30
- --tag-bg-color: var(--u-red-500);
31
- --tag-border-color: var(--u-red-500);
32
- }
33
- :host([variant="solid"][color="orange"]) {
34
- --tag-bg-color: var(--u-orange-500);
35
- --tag-border-color: var(--u-orange-500);
36
- }
37
- :host([variant="solid"][color="teal"]) {
38
- --tag-bg-color: var(--u-teal-500);
39
- --tag-border-color: var(--u-teal-500);
40
- }
41
- :host([variant="solid"][color="cyan"]) {
42
- --tag-bg-color: var(--u-cyan-500);
43
- --tag-border-color: var(--u-cyan-500);
44
- }
45
- :host([variant="solid"][color="purple"]) {
46
- --tag-bg-color: var(--u-purple-500);
47
- --tag-border-color: var(--u-purple-500);
48
- }
49
- :host([variant="solid"][color="pink"]) {
50
- --tag-bg-color: var(--u-pink-500);
51
- --tag-border-color: var(--u-pink-500);
86
+ --tag-bg-color: var(--tag-hue-solid, var(--tag-fill-color));
87
+ --tag-border-color: var(--tag-hue-solid, var(--tag-fill-color));
52
88
  }
53
89
 
54
90
  /* Variant: surface (채우기 + 테두리, 기본 색상은 --u-primary-color) */
55
91
  :host([variant="surface"]) {
56
- --tag-color: color-mix(in srgb, var(--tag-fill-color) 70%, black);
57
- --tag-bg-color: color-mix(in srgb, var(--tag-fill-color) 15%, var(--u-bg-color));
58
- --tag-border-color: color-mix(in srgb, var(--tag-fill-color) 40%, var(--u-bg-color));
59
- }
60
- :host([variant="surface"][color="blue"]) {
61
- --tag-color: var(--u-blue-800);
62
- --tag-bg-color: var(--u-blue-100);
63
- --tag-border-color: var(--u-blue-300);
64
- }
65
- :host([variant="surface"][color="green"]) {
66
- --tag-color: var(--u-green-800);
67
- --tag-bg-color: var(--u-green-100);
68
- --tag-border-color: var(--u-green-300);
69
- }
70
- :host([variant="surface"][color="yellow"]) {
71
- --tag-color: var(--u-yellow-800);
72
- --tag-bg-color: var(--u-yellow-100);
73
- --tag-border-color: var(--u-yellow-300);
74
- }
75
- :host([variant="surface"][color="red"]) {
76
- --tag-color: var(--u-red-800);
77
- --tag-bg-color: var(--u-red-100);
78
- --tag-border-color: var(--u-red-300);
79
- }
80
- :host([variant="surface"][color="orange"]) {
81
- --tag-color: var(--u-orange-800);
82
- --tag-bg-color: var(--u-orange-100);
83
- --tag-border-color: var(--u-orange-300);
84
- }
85
- :host([variant="surface"][color="teal"]) {
86
- --tag-color: var(--u-teal-800);
87
- --tag-bg-color: var(--u-teal-100);
88
- --tag-border-color: var(--u-teal-300);
89
- }
90
- :host([variant="surface"][color="cyan"]) {
91
- --tag-color: var(--u-cyan-800);
92
- --tag-bg-color: var(--u-cyan-100);
93
- --tag-border-color: var(--u-cyan-300);
94
- }
95
- :host([variant="surface"][color="purple"]) {
96
- --tag-color: var(--u-purple-800);
97
- --tag-bg-color: var(--u-purple-100);
98
- --tag-border-color: var(--u-purple-300);
99
- }
100
- :host([variant="surface"][color="pink"]) {
101
- --tag-color: var(--u-pink-800);
102
- --tag-bg-color: var(--u-pink-100);
103
- --tag-border-color: var(--u-pink-300);
92
+ --tag-color: var(--tag-hue-text, color-mix(in srgb, var(--tag-fill-color) 70%, black));
93
+ --tag-bg-color: var(--tag-hue-surface, color-mix(in srgb, var(--tag-fill-color) 15%, var(--u-bg-color)));
94
+ --tag-border-color: var(--tag-hue-line, color-mix(in srgb, var(--tag-fill-color) 40%, var(--u-bg-color)));
104
95
  }
105
96
 
106
97
  /* Variant: filled (채우기만, 테두리 없음, 기본 색상은 --u-primary-color) */
107
98
  :host([variant="filled"]) {
108
- --tag-color: color-mix(in srgb, var(--tag-fill-color) 70%, black);
109
- --tag-bg-color: color-mix(in srgb, var(--tag-fill-color) 15%, var(--u-bg-color));
99
+ --tag-color: var(--tag-hue-text, color-mix(in srgb, var(--tag-fill-color) 70%, black));
100
+ --tag-bg-color: var(--tag-hue-surface, color-mix(in srgb, var(--tag-fill-color) 15%, var(--u-bg-color)));
110
101
  --tag-border-color: transparent;
111
102
  }
112
- :host([variant="filled"][color="blue"]) {
113
- --tag-color: var(--u-blue-800);
114
- --tag-bg-color: var(--u-blue-100);
115
- }
116
- :host([variant="filled"][color="green"]) {
117
- --tag-color: var(--u-green-800);
118
- --tag-bg-color: var(--u-green-100);
119
- }
120
- :host([variant="filled"][color="yellow"]) {
121
- --tag-color: var(--u-yellow-800);
122
- --tag-bg-color: var(--u-yellow-100);
123
- }
124
- :host([variant="filled"][color="red"]) {
125
- --tag-color: var(--u-red-800);
126
- --tag-bg-color: var(--u-red-100);
127
- }
128
- :host([variant="filled"][color="orange"]) {
129
- --tag-color: var(--u-orange-800);
130
- --tag-bg-color: var(--u-orange-100);
131
- }
132
- :host([variant="filled"][color="teal"]) {
133
- --tag-color: var(--u-teal-800);
134
- --tag-bg-color: var(--u-teal-100);
135
- }
136
- :host([variant="filled"][color="cyan"]) {
137
- --tag-color: var(--u-cyan-800);
138
- --tag-bg-color: var(--u-cyan-100);
139
- }
140
- :host([variant="filled"][color="purple"]) {
141
- --tag-color: var(--u-purple-800);
142
- --tag-bg-color: var(--u-purple-100);
143
- }
144
- :host([variant="filled"][color="pink"]) {
145
- --tag-color: var(--u-pink-800);
146
- --tag-bg-color: var(--u-pink-100);
147
- }
148
103
 
149
104
  /* Variant: outlined (테두리만, 기본 색상은 --u-primary-color) */
150
105
  :host([variant="outlined"]) {
151
- --tag-color: color-mix(in srgb, var(--tag-fill-color) 85%, black);
106
+ --tag-color: var(--tag-hue-text-outlined, color-mix(in srgb, var(--tag-fill-color) 85%, black));
152
107
  --tag-bg-color: transparent;
153
- --tag-border-color: color-mix(in srgb, var(--tag-fill-color) 40%, var(--u-bg-color));
154
- }
155
- :host([variant="outlined"][color="blue"]) {
156
- --tag-color: var(--u-blue-600);
157
- --tag-border-color: var(--u-blue-300);
158
- }
159
- :host([variant="outlined"][color="green"]) {
160
- --tag-color: var(--u-green-600);
161
- --tag-border-color: var(--u-green-300);
162
- }
163
- :host([variant="outlined"][color="yellow"]) {
164
- --tag-color: var(--u-yellow-700);
165
- --tag-border-color: var(--u-yellow-300);
166
- }
167
- :host([variant="outlined"][color="red"]) {
168
- --tag-color: var(--u-red-600);
169
- --tag-border-color: var(--u-red-300);
170
- }
171
- :host([variant="outlined"][color="orange"]) {
172
- --tag-color: var(--u-orange-600);
173
- --tag-border-color: var(--u-orange-300);
174
- }
175
- :host([variant="outlined"][color="teal"]) {
176
- --tag-color: var(--u-teal-600);
177
- --tag-border-color: var(--u-teal-300);
178
- }
179
- :host([variant="outlined"][color="cyan"]) {
180
- --tag-color: var(--u-cyan-600);
181
- --tag-border-color: var(--u-cyan-300);
182
- }
183
- :host([variant="outlined"][color="purple"]) {
184
- --tag-color: var(--u-purple-600);
185
- --tag-border-color: var(--u-purple-300);
186
- }
187
- :host([variant="outlined"][color="pink"]) {
188
- --tag-color: var(--u-pink-600);
189
- --tag-border-color: var(--u-pink-300);
108
+ --tag-border-color: var(--tag-hue-line, color-mix(in srgb, var(--tag-fill-color) 40%, var(--u-bg-color)));
190
109
  }
191
110
 
192
111
  :host {
193
112
  display: inline-flex;
194
- align-items: center;
195
- gap: 4px;
196
113
  font-size: 12px;
197
114
  font-weight: 500;
198
- padding: 0.25em 0.5em;
199
- border: 1px solid var(--tag-border-color);
200
- border-radius: 4px;
115
+ border-radius: var(--u-radius-md);
116
+
117
+ --tag-padding-block: 0.25em;
118
+ --tag-padding-inline: 0.5em;
119
+ --tag-gap: 4px;
201
120
  color: var(--tag-color);
202
121
  background-color: var(--tag-bg-color);
203
122
  line-height: 1.5em;
@@ -205,8 +124,20 @@ var styles = css`
205
124
  user-select: none;
206
125
  box-sizing: border-box;
207
126
  }
127
+
128
+ /* 여백/테두리는 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
129
+ .base {
130
+ box-sizing: border-box;
131
+ width: 100%;
132
+ display: inline-flex;
133
+ align-items: center;
134
+ gap: var(--tag-gap);
135
+ padding: var(--tag-padding-block) var(--tag-padding-inline);
136
+ border: 1px solid var(--tag-border-color);
137
+ border-radius: inherit;
138
+ }
208
139
  :host([rounded]) {
209
- border-radius: 999px;
140
+ border-radius: var(--u-radius-pill);
210
141
  }
211
142
 
212
143
  /* === Slots === */
@@ -1,5 +1,5 @@
1
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorateMetadata.js";
2
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
1
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
2
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
3
3
  import { UFormControlElement } from "../UFormControlElement.js";
4
4
  import { Locale } from "../../utilities/Locale.js";
5
5
  import "../field/UField.js";
@@ -61,7 +61,7 @@ var styles = css`
61
61
  /* ===== Variant: underlined ===== */
62
62
  :host([variant="underlined"]) .container {
63
63
  border: none;
64
- border-radius: 0;
64
+ border-radius: var(--u-radius-none);
65
65
  background-color: transparent;
66
66
  padding-left: 0;
67
67
  padding-right: 0;
@@ -89,7 +89,7 @@ var styles = css`
89
89
  /* ===== Variant: borderless ===== */
90
90
  :host([variant="borderless"]) .container {
91
91
  border: none;
92
- border-radius: 0;
92
+ border-radius: var(--u-radius-none);
93
93
  background-color: transparent;
94
94
  padding: 0;
95
95
  box-shadow: none;
@@ -8,6 +8,8 @@ import { UFloatingElement } from '../UFloatingElement.js';
8
8
  *
9
9
  * @event show - 툴팁을 표시하기 직전 발생 (취소 가능)
10
10
  * @event hide - 툴팁을 숨기기 직전 발생 (취소 가능)
11
+ * @cssprop --tooltip-padding-block - 세로 여백
12
+ * @cssprop --tooltip-padding-inline - 가로 여백
11
13
  */
12
14
  export declare class UTooltip extends UFloatingElement {
13
15
  static styles: import('lit').CSSResultGroup[];
@@ -1,5 +1,5 @@
1
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorateMetadata.js";
2
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
1
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
2
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
3
3
  import { UFloatingElement } from "../UFloatingElement.js";
4
4
  import { styles } from "./UTooltip.styles.js";
5
5
  import { html } from "lit";
@@ -67,7 +67,9 @@ var UTooltip = class UTooltip extends UFloatingElement {
67
67
  }
68
68
  render() {
69
69
  return html`
70
- <slot @slotchange=${this.handleSlotChange}></slot>
70
+ <div class="base" part="base">
71
+ <slot @slotchange=${this.handleSlotChange}></slot>
72
+ </div>
71
73
  `;
72
74
  }
73
75
  bind(anchors) {
@@ -6,17 +6,26 @@ var styles = css`
6
6
  }
7
7
 
8
8
  :host {
9
- padding: 6px 8px;
10
9
  color: var(--u-tooltip-txt-color);
11
10
  font-family: var(--u-font-display, inherit);
12
11
  font-size: 12px;
13
12
  line-height: 1.25;
14
- border: none;
15
- border-radius: 4px;
13
+ border-radius: var(--u-radius-md);
16
14
  background-color: var(--u-tooltip-bg-color);
17
15
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.2);
18
16
  transform: scale(0.9);
19
17
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s 0.2s;
18
+
19
+ --tooltip-padding-block: 6px;
20
+ --tooltip-padding-inline: 8px;
21
+ }
22
+
23
+ /* 여백은 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
24
+ .base {
25
+ box-sizing: border-box;
26
+ width: 100%;
27
+ padding: var(--tooltip-padding-block) var(--tooltip-padding-inline);
28
+ border-radius: inherit;
20
29
  }
21
30
  :host([open]) {
22
31
  transform: scale(1);
@@ -13,6 +13,12 @@ import { UTreeItem, TreeItemTrigger } from '../tree-item/UTreeItem.js';
13
13
  * @cssprop tree-indent-guide-color - 들여쓰기 가이드 선의 색상 (기본값: var(--u-border-color-weak))
14
14
  *
15
15
  * @event change - 선택된 아이템이 변경될 때 발생
16
+ *
17
+ * @cssprop --tree-indent-size - 깊이 한 단계당 들여쓰기 폭 (기본: 14px). 하위 u-tree-item 이 상속받는다.
18
+ * @cssprop --tree-indent-guide-offset - 들여쓰기 가이드 선의 좌측 오프셋 (기본: 8px)
19
+ * @cssprop --tree-indent-guide-width - 가이드 선 두께 (기본: 1px)
20
+ * @cssprop --tree-indent-guide-style - 가이드 선 스타일 (기본: solid)
21
+ * @cssprop --tree-indent-guide-color - 가이드 선 색상 (기본: --u-border-color-weak)
16
22
  */
17
23
  export declare class UTree extends UElement {
18
24
  static styles: import('lit').CSSResultGroup[];
@@ -1,6 +1,6 @@
1
1
  import { UElement } from "../UElement.js";
2
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorateMetadata.js";
3
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
2
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
3
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
4
4
  import { UTreeItem } from "../tree-item/UTreeItem.js";
5
5
  import { styles } from "./UTree.styles.js";
6
6
  import { html } from "lit";
@@ -16,6 +16,8 @@ export type TreeItemTrigger = 'item' | 'icon';
16
16
  * @event collapse - 노드 접힐 시 발생
17
17
  * @event pick - 선택 시 발생
18
18
  * @event check - 체크 시 발생
19
+ *
20
+ * @cssprop --tree-item-color - 선택/활성 상태의 기준색 (기본: --u-primary-color)
19
21
  */
20
22
  export declare class UTreeItem extends UElement {
21
23
  static styles: import('lit').CSSResultGroup[];
@@ -1,6 +1,6 @@
1
1
  import { UElement } from "../UElement.js";
2
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorateMetadata.js";
3
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
2
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
3
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
4
4
  import "../spinner/USpinner.js";
5
5
  import "../icon/UIcon.js";
6
6
  import { styles } from "./UTreeItem.styles.js";
@@ -3,7 +3,7 @@ import { css } from "lit";
3
3
  var styles = css`
4
4
  :host {
5
5
  --tree-item-depth: 0;
6
- --tree-item-color: var(--u-primary-color, var(--u-blue-600));
6
+ --tree-item-color: var(--u-primary-color);
7
7
  }
8
8
 
9
9
  :host {
@@ -67,7 +67,7 @@ var styles = css`
67
67
  justify-content: center;
68
68
  width: 18px;
69
69
  height: 18px;
70
- border-radius: 3px;
70
+ border-radius: var(--u-radius-sm);
71
71
  }
72
72
  .prefix-toggler u-icon {
73
73
  font-size: 12px;
@@ -86,7 +86,7 @@ var styles = css`
86
86
  justify-content: center;
87
87
  width: 16px;
88
88
  height: 16px;
89
- border-radius: 3px;
89
+ border-radius: var(--u-radius-sm);
90
90
  border: 1.5px solid var(--u-input-border-color);
91
91
  background-color: transparent;
92
92
  transition: background-color 0.15s ease, border-color 0.15s ease;
@@ -1,11 +1,15 @@
1
1
  import React from 'react';
2
2
  import { UDialog as UDialogElement } from '../components/dialog/UDialog';
3
+ import { type ShowEventDetail } from '../events/ShowEvent';
4
+ import { type HideEventDetail } from '../events/HideEvent';
3
5
 
4
6
  export declare const UDialog: React.ForwardRefExoticComponent<
5
7
  Omit<Partial<UDialogElement>, keyof React.HTMLAttributes<UDialogElement>>
6
- & Omit<React.HTMLAttributes<UDialogElement>, never>
8
+ & Omit<React.HTMLAttributes<UDialogElement>, 'onShow' | 'onHide'>
7
9
  & React.RefAttributes<UDialogElement>
8
10
  & {
11
+ onShow?: (event: CustomEvent<ShowEventDetail>) => void;
12
+ onHide?: (event: CustomEvent<HideEventDetail>) => void;
9
13
  }
10
14
  >;
11
15
 
@@ -6,5 +6,8 @@ export const UDialog = createComponent({
6
6
  react: React,
7
7
  tagName: 'u-dialog',
8
8
  elementClass: UDialogElement,
9
- events: {},
9
+ events: {
10
+ onShow: 'show',
11
+ onHide: 'hide',
12
+ },
10
13
  });
@@ -1,11 +1,15 @@
1
1
  import React from 'react';
2
2
  import { UDrawer as UDrawerElement } from '../components/drawer/UDrawer';
3
+ import { type ShowEventDetail } from '../events/ShowEvent';
4
+ import { type HideEventDetail } from '../events/HideEvent';
3
5
 
4
6
  export declare const UDrawer: React.ForwardRefExoticComponent<
5
7
  Omit<Partial<UDrawerElement>, keyof React.HTMLAttributes<UDrawerElement>>
6
- & Omit<React.HTMLAttributes<UDrawerElement>, never>
8
+ & Omit<React.HTMLAttributes<UDrawerElement>, 'onShow' | 'onHide'>
7
9
  & React.RefAttributes<UDrawerElement>
8
10
  & {
11
+ onShow?: (event: CustomEvent<ShowEventDetail>) => void;
12
+ onHide?: (event: CustomEvent<HideEventDetail>) => void;
9
13
  }
10
14
  >;
11
15
 
@@ -6,5 +6,8 @@ export const UDrawer = createComponent({
6
6
  react: React,
7
7
  tagName: 'u-drawer',
8
8
  elementClass: UDrawerElement,
9
- events: {},
9
+ events: {
10
+ onShow: 'show',
11
+ onHide: 'hide',
12
+ },
10
13
  });
@@ -1,13 +1,15 @@
1
1
  import React from 'react';
2
2
  import { UPopover as UPopoverElement } from '../components/popover/UPopover';
3
+ import { type ShowEventDetail } from '../events/ShowEvent';
4
+ import { type HideEventDetail } from '../events/HideEvent';
3
5
 
4
6
  export declare const UPopover: React.ForwardRefExoticComponent<
5
7
  Omit<Partial<UPopoverElement>, keyof React.HTMLAttributes<UPopoverElement>>
6
8
  & Omit<React.HTMLAttributes<UPopoverElement>, 'onShow' | 'onHide'>
7
9
  & React.RefAttributes<UPopoverElement>
8
10
  & {
9
- onShow?: (event: CustomEvent) => void;
10
- onHide?: (event: CustomEvent) => void;
11
+ onShow?: (event: CustomEvent<ShowEventDetail>) => void;
12
+ onHide?: (event: CustomEvent<HideEventDetail>) => void;
11
13
  }
12
14
  >;
13
15
 
@@ -1,13 +1,15 @@
1
1
  import React from 'react';
2
2
  import { UTooltip as UTooltipElement } from '../components/tooltip/UTooltip';
3
+ import { type ShowEventDetail } from '../events/ShowEvent';
4
+ import { type HideEventDetail } from '../events/HideEvent';
3
5
 
4
6
  export declare const UTooltip: React.ForwardRefExoticComponent<
5
7
  Omit<Partial<UTooltipElement>, keyof React.HTMLAttributes<UTooltipElement>>
6
8
  & Omit<React.HTMLAttributes<UTooltipElement>, 'onShow' | 'onHide'>
7
9
  & React.RefAttributes<UTooltipElement>
8
10
  & {
9
- onShow?: (event: CustomEvent) => void;
10
- onHide?: (event: CustomEvent) => void;
11
+ onShow?: (event: CustomEvent<ShowEventDetail>) => void;
12
+ onHide?: (event: CustomEvent<HideEventDetail>) => void;
11
13
  }
12
14
  >;
13
15
 
@@ -132,34 +132,91 @@
132
132
  --u-pink-900: #E095C7;
133
133
  --u-pink-1000: #EBB5D9;
134
134
 
135
+ /* ==========================================================================
136
+ Role Colors — 의미 역할 층
137
+ 컴포넌트는 팔레트 프리미티브가 아니라 이 층을 참조한다.
138
+ 브랜드 색 교체는 아래 25개만 재정의하면 시맨틱 층까지 따라온다.
139
+
140
+ 단은 '강도' 축이다 (weakest -> strong). 용도(배경/테두리/텍스트)는
141
+ 소비처가 정한다 -- 단을 속성에 묶으면 primary 버튼의 배경이 어느
142
+ 단인지 같은 모순이 생긴다.
143
+ ========================================================================== */
144
+
145
+ /* primary — 브랜드 · 강조 · 포커스 · 링크 */
146
+ --u-primary-color-weakest: var(--u-blue-200);
147
+ --u-primary-color-weaker: var(--u-blue-300);
148
+ --u-primary-color-weak: var(--u-blue-500);
149
+ --u-primary-color: var(--u-blue-600);
150
+ --u-primary-color-strong: var(--u-blue-700);
151
+
152
+ /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */
153
+ --u-info-color-weakest: var(--u-blue-200);
154
+ --u-info-color-weaker: var(--u-blue-300);
155
+ --u-info-color-weak: var(--u-blue-500);
156
+ --u-info-color: var(--u-blue-600);
157
+ --u-info-color-strong: var(--u-blue-700);
158
+
159
+ /* success — 성공 · 완료 */
160
+ --u-success-color-weakest: var(--u-green-200);
161
+ --u-success-color-weaker: var(--u-green-300);
162
+ --u-success-color-weak: var(--u-green-500);
163
+ --u-success-color: var(--u-green-600);
164
+ --u-success-color-strong: var(--u-green-700);
165
+
166
+ /* warning — 주의 */
167
+ --u-warning-color-weakest: var(--u-yellow-200);
168
+ --u-warning-color-weaker: var(--u-yellow-300);
169
+ --u-warning-color-weak: var(--u-yellow-500);
170
+ --u-warning-color: var(--u-yellow-600);
171
+ --u-warning-color-strong: var(--u-yellow-700);
172
+
173
+ /* danger — 오류 · 위험 · 유효성 실패 */
174
+ --u-danger-color-weakest: var(--u-red-200);
175
+ --u-danger-color-weaker: var(--u-red-300);
176
+ --u-danger-color-weak: var(--u-red-500);
177
+ --u-danger-color: var(--u-red-600);
178
+ --u-danger-color-strong: var(--u-red-700);
179
+ /* ==========================================================================
180
+ Radius Scale — 모서리 반경
181
+ 리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).
182
+ ========================================================================== */
183
+ --u-radius-none: 0;
184
+ --u-radius-sm: 3px;
185
+ --u-radius-md: 4px;
186
+ --u-radius-lg: 6px;
187
+ --u-radius-xl: 8px;
188
+ --u-radius-pill: 9999px;
189
+ --u-radius-circle: 50%;
190
+
135
191
  /* Text Colors */
136
192
  --u-txt-color: var(--u-neutral-900);
137
193
  --u-txt-color-inverse: var(--u-neutral-100);
138
- --u-txt-color-hover: var(--u-blue-600);
139
- --u-txt-color-active: var(--u-blue-600);
194
+ --u-txt-color-hover: var(--u-primary-color);
195
+ --u-txt-color-active: var(--u-primary-color);
140
196
  --u-txt-color-disabled: var(--u-neutral-500);
141
197
  --u-txt-color-weak: var(--u-neutral-700);
142
198
  --u-txt-color-strong: var(--u-neutral-1000);
143
199
 
144
- --u-link-txt-color: var(--u-blue-700);
200
+ --u-link-txt-color: var(--u-primary-color-strong);
145
201
  --u-tooltip-txt-color: var(--u-neutral-100);
146
202
 
147
203
  /* Icon Colors */
148
204
  --u-icon-color: var(--u-neutral-800);
149
205
  --u-icon-color-inverse: var(--u-neutral-100);
150
- --u-icon-color-hover: var(--u-blue-600);
151
- --u-icon-color-active: var(--u-blue-600);
206
+ --u-icon-color-hover: var(--u-primary-color);
207
+ --u-icon-color-active: var(--u-primary-color);
152
208
  --u-icon-color-disabled: var(--u-neutral-500);
153
209
 
154
210
  /* Border Colors */
155
211
  --u-border-color: var(--u-neutral-400);
156
212
  --u-border-color-weak: var(--u-neutral-300);
157
213
  --u-border-color-strong: var(--u-neutral-500);
214
+ --u-border-color-hover: var(--u-neutral-500);
158
215
 
159
216
  --u-input-border-color: var(--u-neutral-400);
160
217
  --u-input-border-color-hover: var(--u-neutral-500);
161
- --u-input-border-color-focus: var(--u-blue-600);
162
- --u-input-border-color-invalid: var(--u-red-600);
218
+ --u-input-border-color-focus: var(--u-primary-color);
219
+ --u-input-border-color-invalid: var(--u-danger-color);
163
220
 
164
221
  /* Background Colors */
165
222
  --u-bg-color: var(--u-neutral-100);