@iyulab/components 1.15.0 → 1.20.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 (41) hide show
  1. package/CHANGELOG.md +367 -0
  2. package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
  3. package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +1 -1
  4. package/dist/components/UElement.styles.js +8 -3
  5. package/dist/components/alert/UAlert.styles.js +18 -9
  6. package/dist/components/badge/UBadge.d.ts +2 -1
  7. package/dist/components/badge/UBadge.styles.js +30 -2
  8. package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
  9. package/dist/components/button/UButton.d.ts +22 -3
  10. package/dist/components/button/UButton.styles.js +107 -16
  11. package/dist/components/card/UCard.styles.js +2 -2
  12. package/dist/components/carousel/UCarousel.styles.js +2 -2
  13. package/dist/components/checkbox/UCheckbox.d.ts +2 -1
  14. package/dist/components/checkbox/UCheckbox.styles.js +42 -9
  15. package/dist/components/copy-button/UCopyButton.styles.js +2 -2
  16. package/dist/components/dialog/UDialog.styles.js +1 -1
  17. package/dist/components/drawer/UDrawer.styles.js +1 -1
  18. package/dist/components/field/UField.styles.js +2 -2
  19. package/dist/components/icon-button/UIconButton.styles.js +1 -1
  20. package/dist/components/input/UInput.styles.js +9 -9
  21. package/dist/components/menu-item/UMenuItem.styles.js +2 -2
  22. package/dist/components/option/UOption.styles.js +1 -1
  23. package/dist/components/progress-bar/UProgressBar.styles.js +5 -5
  24. package/dist/components/progress-ring/UProgressRing.styles.js +5 -5
  25. package/dist/components/radio/URadio.styles.js +2 -2
  26. package/dist/components/rating/URating.styles.js +2 -2
  27. package/dist/components/select/USelect.styles.js +11 -9
  28. package/dist/components/slider/USlider.styles.js +11 -3
  29. package/dist/components/spinner/USpinner.d.ts +2 -1
  30. package/dist/components/spinner/USpinner.styles.js +9 -1
  31. package/dist/components/split-panel/USplitPanel.styles.js +1 -1
  32. package/dist/components/switch/USwitch.styles.js +7 -7
  33. package/dist/components/tab-panel/UTabPanel.styles.js +2 -2
  34. package/dist/components/tag/UTag.d.ts +6 -1
  35. package/dist/components/tag/UTag.styles.js +55 -2
  36. package/dist/components/textarea/UTextarea.styles.js +6 -6
  37. package/dist/components/tooltip/UTooltip.styles.js +1 -1
  38. package/dist/components/tree-item/UTreeItem.styles.js +1 -1
  39. package/dist/styles/dark.css +43 -13
  40. package/dist/styles/light.css +77 -19
  41. package/package.json +4 -3
@@ -142,40 +142,53 @@
142
142
  단인지 같은 모순이 생긴다.
143
143
  ========================================================================== */
144
144
 
145
+ /* ★단이 팔레트 shade 와 1:1 이 아니다 — **대비로 고른다.**
146
+ `-color` 는 `--u-*-txt-color` 를 받는 면이고 `-strong` 은 바탕 위의 글자다.
147
+ 라이트에서는 바탕도 on-color 도 흰색이라 두 요구가 `contrast(shade, #FFF) ≥ 4.5`
148
+ 하나로 합쳐지고, 그 단이 계열마다 다르다(blue 700 · red 700 · green 800).
149
+ Material 램프는 휘도가 아니라 색상 기준으로 만들어져 있어서 단 번호가 세기를
150
+ 보장하지 않는다 — 값은 `tests/build/token-contrast.test.ts` 가 지킨다. */
151
+
145
152
  /* primary — 브랜드 · 강조 · 포커스 · 링크 */
146
153
  --u-primary-color-weakest: var(--u-blue-200);
147
154
  --u-primary-color-weaker: var(--u-blue-300);
148
155
  --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);
156
+ --u-primary-color: var(--u-blue-700); /* 4.60 ✓ (600 은 3.68 ✗) */
157
+ --u-primary-color-strong: var(--u-blue-800); /* 5.75 ✓ */
151
158
 
152
159
  /* info — 정보 안내 (primary 와 기본값은 같으나 역할이 다르다 — 브랜딩은 primary 만 바꾼다) */
153
160
  --u-info-color-weakest: var(--u-blue-200);
154
161
  --u-info-color-weaker: var(--u-blue-300);
155
162
  --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);
163
+ --u-info-color: var(--u-blue-700);
164
+ --u-info-color-strong: var(--u-blue-800);
158
165
 
159
- /* success — 성공 · 완료 */
166
+ /* success — 성공 · 완료
167
+ ⚠green 은 700 도 4.12 로 미달이라 두 단을 건너뛴다. 계열마다 통과 단이 다른 것이
168
+ 이 층의 정상 상태다(단 번호를 맞추면 대비가 어긋난다). */
160
169
  --u-success-color-weakest: var(--u-green-200);
161
170
  --u-success-color-weaker: var(--u-green-300);
162
171
  --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);
172
+ --u-success-color: var(--u-green-800); /* 5.13 ✓ (600=3.30 · 700=4.12 ✗) */
173
+ --u-success-color-strong: var(--u-green-900); /* 7.87 ✓ */
165
174
 
166
175
  /* warning — 주의 */
167
176
  --u-warning-color-weakest: var(--u-yellow-200);
168
177
  --u-warning-color-weaker: var(--u-yellow-300);
169
178
  --u-warning-color-weak: var(--u-yellow-500);
170
179
  --u-warning-color: var(--u-yellow-600);
171
- --u-warning-color-strong: var(--u-yellow-700);
180
+ /* ★다른 계열은 -strong 이 shade-800~900 인데 warning 만 1000 이다 — 노랑 램프는
181
+ 900 까지도 흰 바탕 2.65 로 미달이고, 1000(#8A4A00)에서 처음 6.86 이 된다.
182
+ 그 값은 갈색에 가깝지만, 이 단의 용도는 **면이 아니라 글자·아이콘**이므로 색상보다
183
+ 가독성이 먼저다(경고 문구를 어두운 호박색으로 쓰는 것은 보편 관행이다). */
184
+ --u-warning-color-strong: var(--u-yellow-1000);
172
185
 
173
186
  /* danger — 오류 · 위험 · 유효성 실패 */
174
187
  --u-danger-color-weakest: var(--u-red-200);
175
188
  --u-danger-color-weaker: var(--u-red-300);
176
189
  --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);
190
+ --u-danger-color: var(--u-red-700); /* 4.98 ✓ (600 은 4.23 ✗ — 오류 문구가 이 단이었다) */
191
+ --u-danger-color-strong: var(--u-red-800); /* 5.62 ✓ */
179
192
  /* ==========================================================================
180
193
  Radius Scale — 모서리 반경
181
194
  리터럴을 흩뿌리면 값이 갈린다(실제로 pill 이 999px/9999px 두 표기로 나뉘어 있었다).
@@ -215,10 +228,14 @@
215
228
  --u-info-txt-color: #FFFFFF;
216
229
  --u-success-txt-color: #FFFFFF;
217
230
  --u-danger-txt-color: #FFFFFF;
218
- --u-warning-txt-color: #FFFFFF;
231
+ /* ★warning 만 어둡다 — 취향이 아니라 측정이다. 노랑은 **어떤 단도** 흰 글자로 AA 를
232
+ 받치지 못한다(라이트 최대 2.65 @900, 그마저 갈색). 다른 넷처럼 단을 옮기는 수단이
233
+ 없으므로 전경을 뒤집는다. `--u-neutral-1000` 은 라이트 #000000 / 다크 #FFFFFF 이라
234
+ 한 줄로 양 테마를 만족한다(라이트 15.05 · 다크 4.65). */
235
+ --u-warning-txt-color: var(--u-neutral-1000);
219
236
 
220
- --u-txt-color-hover: var(--u-primary-color);
221
- --u-txt-color-active: var(--u-primary-color);
237
+ --u-txt-color-hover: var(--u-primary-color-strong);
238
+ --u-txt-color-active: var(--u-primary-color-strong);
222
239
  --u-txt-color-disabled: var(--u-neutral-400);
223
240
  /* neutral-500(#9E9E9E)은 흰 배경 대비 2.68 로 WCAG AA(4.5) 미달이었다.
224
241
  neutral-600(#757575) = 4.61 로 통과한다. 다크 매핑(neutral-700 = 5.43)은
@@ -232,8 +249,8 @@
232
249
  /* Icon Colors */
233
250
  --u-icon-color: var(--u-neutral-700);
234
251
  --u-icon-color-inverse: var(--u-neutral-0);
235
- --u-icon-color-hover: var(--u-primary-color);
236
- --u-icon-color-active: var(--u-primary-color);
252
+ --u-icon-color-hover: var(--u-primary-color-strong);
253
+ --u-icon-color-active: var(--u-primary-color-strong);
237
254
  --u-icon-color-disabled: var(--u-neutral-400);
238
255
 
239
256
  /* Border Colors */
@@ -242,10 +259,14 @@
242
259
  --u-border-color-strong: var(--u-neutral-400);
243
260
  --u-border-color-hover: var(--u-neutral-400);
244
261
 
262
+ /* ★상태 테두리는 `-strong` 단이다 — 면이 아니라 **면 위에 그리는 선**이기 때문이다.
263
+ 1.16.0 이 가른 용도(`-color` = 면 / `-strong` = 면·바탕 위)에 이 자리가 맞춰지지
264
+ 않아 다크에서 미달이었다: focus 2.74 · invalid 2.44 (WCAG 1.4.11 기준 3.0).
265
+ `-strong` 으로 옮기면 다크 4.74 / 4.34, 라이트 5.75 / 5.62 — 두 테마 모두 단조 상승. */
245
266
  --u-input-border-color: var(--u-neutral-300);
246
267
  --u-input-border-color-hover: var(--u-neutral-400);
247
- --u-input-border-color-focus: var(--u-primary-color);
248
- --u-input-border-color-invalid: var(--u-danger-color);
268
+ --u-input-border-color-focus: var(--u-primary-color-strong);
269
+ --u-input-border-color-invalid: var(--u-danger-color-strong);
249
270
 
250
271
  /* Background Colors */
251
272
  --u-bg-color: var(--u-neutral-0);
@@ -253,18 +274,34 @@
253
274
  --u-bg-color-hover: var(--u-neutral-100);
254
275
  --u-bg-color-active: var(--u-neutral-200);
255
276
  --u-bg-color-disabled: var(--u-neutral-50);
277
+
278
+ /* ★면 높이 — 바탕에 인접해 있으면서 한 단 구분되는 크롬 면(툴바·표 헤더·푸터).
279
+ 상호작용 상태(-hover/-active/-disabled)와 **다른 축**이다. 상태 이름에 높이를
280
+ 얹으면 의미가 어긋난다(`DL-131-1`).
281
+ `--u-panel-bg-color` 와도 다르다 — 그쪽은 **떠 있는 패널**(카드·대화상자·메뉴)이라
282
+ 라이트에서 페이지와 같은 흰색이고 그림자가 높이를 나른다. 크롬 면은 그림자가 없어
283
+ 라이트에서도 틴트가 필요하다.
284
+ ⚠한 단만 정의한다. 두 단째의 실측 수요는 라이트 한쪽뿐이었다(다크에서는 소비 측
285
+ 오버라이드가 두 값을 같은 단으로 합치고 있었다). */
286
+ --u-bg-color-raised: var(--u-neutral-50);
256
287
 
257
288
  /* 유채색 표면 — 정보/성공/위험 상태의 '면'.
258
289
  역할 층의 유채색은 전경 5단뿐이라, 상태 배경이 필요한 컴포넌트는 팔레트를 직접
259
290
  읽고 다크를 손으로 보정해야 했다. 팔레트의 유채색 틴트는 다크에서 짓눌리므로
260
291
  (바탕 대비 델타의 다크/라이트 비 — 청색 0.38~0.54) 두 테마가 **같은 단이 아니라
261
292
  같은 세기**가 되도록 짝지었다. 실측 비: blue 1.09 · red 1.12 · green 0.91.
262
- ⚠yellow(경고)는 빠져 있다 — 라이트 황색 틴트가 Δ0.071 로 거의 보이지 않아
263
- 어떤 짝을 골라도 비가 2배 밑으로 내려가지 않는다. 리터럴 재설계가 선행돼야 한다. */
293
+
294
+ ★**warning 합류했다(1.16.0 1.17.0).** 종전에는 *"세기를 맞출 짝이 없다"*
295
+ 빠져 있었는데, 그 판정은 **shade-0 짝만** 재고 있었다. 노랑만 한 단 내려 잡으면
296
+ 라이트 쪽 세기가 맞는다 — 바탕 대비 휘도 델타 실측:
297
+ blue-0 0.131 · red-0 0.132 · green-0 0.117 · **yellow-200 0.110** (yellow-0 은 0.027)
298
+ ⚠단 이름이 계열마다 다른 것(yellow 만 200)은 이 층의 정상 상태다. 라이트 팔레트는
299
+ 휘도 순이 아니므로 같은 단 번호가 같은 세기를 뜻하지 않는다. */
264
300
  --u-primary-bg-color: var(--u-blue-0);
265
301
  --u-info-bg-color: var(--u-blue-0);
266
302
  --u-success-bg-color: var(--u-green-0);
267
303
  --u-danger-bg-color: var(--u-red-0);
304
+ --u-warning-bg-color: var(--u-yellow-200);
268
305
 
269
306
  --u-input-bg-color: var(--u-neutral-0);
270
307
  --u-panel-bg-color: var(--u-neutral-0);
@@ -278,6 +315,27 @@
278
315
  --u-shadow-color-strong: rgba(0, 0, 0, 0.16);
279
316
  --u-shadow-color-stronger: rgba(0, 0, 0, 0.24);
280
317
 
318
+ /* ==========================================================================
319
+ Elevation Scale — 높이(그림자)
320
+
321
+ ★색 축은 있었지만 **높이 축이 없었다.** 그 결과 컴포넌트가 그림자를 리터럴로
322
+ 썼고, 같은 리듬을 의도한 자리에 서로 다른 값 11가지가 생겼다(카드 .1 vs 캐러셀
323
+ .15 — 둘 다 "표면에 얹힌 카드"인데 알파가 다르다).
324
+
325
+ ⚠**그리고 그 리터럴들은 테마를 몰랐다** — `rgba(0,0,0,.1)` 은 다크 바탕에서
326
+ 거의 보이지 않는다. 이 축을 경유하면 다크의 진한 알파(.25~.60)를 자동으로 받는다.
327
+
328
+ ⚠**알파를 `--u-shadow-color-*` 로 중첩하지 않고 인라인한다.** use-site 폴백
329
+ 생성기는 합성 값을 리터럴로 다루므로, 중첩하면 `var(--u-shadow-md, 0 2px 8px
330
+ var(--u-shadow-color-normal))` 처럼 **폴백 안에 또 토큰이 들어간다** — 시트가
331
+ 없을 때 그 폴백도 함께 무효가 되어 그림자가 통째로 사라진다.
332
+ 두 축의 알파가 어긋나지 않는지는 `tests/build/elevation-scale.test.ts` 가 지킨다.
333
+ ========================================================================== */
334
+ --u-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); /* = shadow-color-weak — 표면에 얹힌 작은 컨트롤(탭·손잡이) */
335
+ --u-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.12); /* = shadow-color-normal — 카드·표면 */
336
+ --u-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.16); /* = shadow-color-strong — 떠 있는 레이어(드롭다운·알림) */
337
+ --u-shadow-xl: 0 6px 18px rgba(0, 0, 0, 0.24); /* = shadow-color-stronger — 모달·최상위(대화상자·툴팁) */
338
+
281
339
  /* Scrollbar Colors */
282
340
  --u-scrollbar-color: var(--u-neutral-400);
283
341
  --u-scrollbar-color-hover: var(--u-neutral-500);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iyulab/components",
3
3
  "description": "web-components library based on lit-element made by iyulab",
4
- "version": "1.15.0",
4
+ "version": "1.20.0",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "components",
@@ -53,7 +53,9 @@
53
53
  "dependencies": {
54
54
  "@floating-ui/dom": "^1.8.0",
55
55
  "focus-trap": "^8.2.2",
56
- "lit": "^3.3.3"
56
+ "glob": "^13.0.6",
57
+ "lit": "^3.3.3",
58
+ "tabbable": "^6.5.0"
57
59
  },
58
60
  "peerDependencies": {
59
61
  "@lit/react": ">=1.0.8",
@@ -74,7 +76,6 @@
74
76
  "@vitest/browser-playwright": "^4.1.10",
75
77
  "eslint": "^9.39.4",
76
78
  "eslint-plugin-lit": "^2.3.1",
77
- "glob": "^13.0.6",
78
79
  "globals": "^17.7.0",
79
80
  "react": "^19.2.7",
80
81
  "typescript": "^5.9.3",