@iyulab/components 1.4.0 → 1.5.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 (55) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/_virtual/_glob-assets_raw/alert-circle-fill.svg.1e438750.js +4 -0
  3. package/dist/_virtual/_glob-assets_raw/alert-triangle-fill.svg.1a8797c4.js +4 -0
  4. package/dist/_virtual/_glob-assets_raw/bell-fill.svg.d37c41d9.js +1 -1
  5. package/dist/_virtual/_glob-assets_raw/check.svg.4690b01e.js +4 -0
  6. package/dist/_virtual/_glob-assets_raw/chevron-down.svg.0ccd06ea.js +1 -1
  7. package/dist/_virtual/_glob-assets_raw/chevron-left.svg.b4601050.js +1 -1
  8. package/dist/_virtual/_glob-assets_raw/chevron-right.svg.0711bb67.js +1 -1
  9. package/dist/_virtual/_glob-assets_raw/chevron-up.svg.ed917211.js +1 -1
  10. package/dist/_virtual/_glob-assets_raw/circle-check-fill.svg.3f0fcb72.js +4 -0
  11. package/dist/_virtual/_glob-assets_raw/copy.svg.6192f853.js +4 -0
  12. package/dist/_virtual/_glob-assets_raw/eye-off.svg.7aa25df0.js +4 -0
  13. package/dist/_virtual/_glob-assets_raw/eye.svg.2e5e9c4c.js +1 -1
  14. package/dist/_virtual/_glob-assets_raw/info-circle-fill.svg.6580071d.js +1 -1
  15. package/dist/_virtual/_glob-assets_raw/minus.svg.4610de75.js +4 -0
  16. package/dist/_virtual/_glob-assets_raw/plus.svg.d83ead68.js +4 -0
  17. package/dist/_virtual/_glob-assets_raw/search.svg.0ba2012d.js +1 -1
  18. package/dist/_virtual/_glob-assets_raw/star-fill.svg.f24b5a2d.js +1 -1
  19. package/dist/_virtual/_glob-assets_raw/star.svg.4af61468.js +1 -1
  20. package/dist/_virtual/_glob-assets_raw/x.svg.5596f6bb.js +4 -0
  21. package/dist/components/alert/UAlert.js +4 -4
  22. package/dist/components/checkbox/UCheckbox.js +1 -1
  23. package/dist/components/chip/UChip.js +2 -2
  24. package/dist/components/copy-button/UCopyButton.d.ts +47 -0
  25. package/dist/components/copy-button/UCopyButton.js +94 -0
  26. package/dist/components/copy-button/UCopyButton.styles.d.ts +1 -0
  27. package/dist/components/copy-button/UCopyButton.styles.js +21 -0
  28. package/dist/components/dialog/UDialog.js +1 -1
  29. package/dist/components/drawer/UDrawer.js +1 -1
  30. package/dist/components/icon-button/UIconButton.styles.js +2 -2
  31. package/dist/components/input/UInput.js +2 -2
  32. package/dist/components/menu-item/UMenuItem.js +1 -1
  33. package/dist/components/option/UOption.js +1 -1
  34. package/dist/components/select/USelect.js +1 -1
  35. package/dist/components/tab/UTab.js +1 -1
  36. package/dist/components/tree-item/UTreeItem.js +1 -1
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +2 -1
  39. package/dist/react/UCopyButton.d.ts +10 -0
  40. package/dist/react/UCopyButton.js +12 -0
  41. package/dist/react/index.d.ts +1 -0
  42. package/dist/react/index.js +1 -0
  43. package/dist/utilities/icons.d.ts +1 -1
  44. package/dist/utilities/icons.js +22 -25
  45. package/package.json +1 -1
  46. package/dist/_virtual/_glob-assets_raw/check-circle-fill.svg.51c33a2a.js +0 -4
  47. package/dist/_virtual/_glob-assets_raw/check-lg.svg.371c5e78.js +0 -4
  48. package/dist/_virtual/_glob-assets_raw/dash-lg.svg.b40b8b3a.js +0 -4
  49. package/dist/_virtual/_glob-assets_raw/exclamation-circle-fill.svg.dc8c523e.js +0 -4
  50. package/dist/_virtual/_glob-assets_raw/exclamation-triangle-fill.svg.7949d2c7.js +0 -4
  51. package/dist/_virtual/_glob-assets_raw/eye-slash.svg.240afafa.js +0 -4
  52. package/dist/_virtual/_glob-assets_raw/plus-lg.svg.294e9073.js +0 -4
  53. package/dist/_virtual/_glob-assets_raw/three-dots-vertical.svg.9fee78c5.js +0 -4
  54. package/dist/_virtual/_glob-assets_raw/three-dots.svg.6a7a5b23.js +0 -4
  55. package/dist/_virtual/_glob-assets_raw/x-lg.svg.f34b882c.js +0 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.5.0] - 2026-07-07
4
+
5
+ ### Added
6
+ - `UCopyButton`(`u-copy-button`) 컴포넌트 추가. 클릭 시 클립보드에 텍스트를 복사하고 아이콘(`copy`/`check`)으로 복사 상태를 표시하며, 실제 쓰기 전에 취소 가능한 `copy` 커스텀 이벤트(`ClipboardEvent`)를 발행해 리스너가 복사를 취소하거나 `clipboardData.setData()`로 복사될 값을 바꿀 수 있음.
7
+
8
+ ### Changed
9
+ - **Breaking:** 내부 아이콘 세트(`lib="internal"`)의 이름 규칙을 정리: `x-lg`→`x`, `check-lg`→`check`, `dash-lg`→`minus`, `eye-slash`→`eye-off`, `exclamation-circle-fill`→`alert-circle-fill`, `exclamation-triangle-fill`→`alert-triangle-fill`, `check-circle-fill`→`circle-check-fill`, `plus-lg`→`plus`. `lib="internal"`로 위 이름을 직접 참조하던 코드는 갱신 필요. 미사용 아이콘(`three-dots`, `three-dots-vertical`) 제거, 신규 아이콘(`copy`) 추가.
10
+ - `IconRegistry.register()`가 이미 등록된 라이브러리 이름에 대해 경고를 출력하는 대신 조용히 무시하도록 변경.
11
+ - `UIconButton`이 `inline-flex`로 레이아웃되도록 개선.
12
+
3
13
  ## [1.4.0] - 2026-07-06
4
14
 
5
15
  ### Changed
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/alert-circle-fill.svg.1e438750
2
+ var alert_circle_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm.01 13l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -8a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" />\n</svg>";
3
+ //#endregion
4
+ export { alert_circle_fill_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/alert-triangle-fill.svg.1a8797c4
2
+ var alert_triangle_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\" />\n</svg>";
3
+ //#endregion
4
+ export { alert_triangle_fill_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/bell-fill.svg.d37c41d9
2
- var bell_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M8 16a2 2 0 0 0 2-2H6a2 2 0 0 0 2 2m.995-14.901a1 1 0 1 0-1.99 0A5 5 0 0 0 3 6c0 1.098-.5 6-2 7h14c-1.5-1-2-5.902-2-7 0-2.42-1.72-4.44-4.005-4.901\"/>\n</svg>";
2
+ var bell_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M14.235 19c.865 0 1.322 1.024 .745 1.668a3.992 3.992 0 0 1 -2.98 1.332a3.992 3.992 0 0 1 -2.98 -1.332c-.552 -.616 -.158 -1.579 .634 -1.661l.11 -.006h4.471z\" />\n <path d=\"M12 2c1.358 0 2.506 .903 2.875 2.141l.046 .171l.008 .043a8.013 8.013 0 0 1 4.024 6.069l.028 .287l.019 .289v2.931l.021 .136a3 3 0 0 0 1.143 1.847l.167 .117l.162 .099c.86 .487 .56 1.766 -.377 1.864l-.116 .006h-16c-1.028 0 -1.387 -1.364 -.493 -1.87a3 3 0 0 0 1.472 -2.063l.021 -.143l.001 -2.97a8 8 0 0 1 3.821 -6.454l.248 -.146l.01 -.043a3.003 3.003 0 0 1 2.562 -2.29l.182 -.017l.176 -.004z\" />\n</svg>";
3
3
  //#endregion
4
4
  export { bell_fill_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/check.svg.4690b01e
2
+ var check_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M5 12l5 5l10 -10\" />\n</svg>";
3
+ //#endregion
4
+ export { check_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/chevron-down.svg.0ccd06ea
2
- var chevron_down_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708\"></path>\n</svg>";
2
+ var chevron_down_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M6 9l6 6l6 -6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { chevron_down_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/chevron-left.svg.b4601050
2
- var chevron_left_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0\"/>\n</svg>";
2
+ var chevron_left_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M15 6l-6 6l6 6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { chevron_left_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/chevron-right.svg.0711bb67
2
- var chevron_right_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\"/>\n</svg>";
2
+ var chevron_right_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M9 6l6 6l-6 6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { chevron_right_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/chevron-up.svg.ed917211
2
- var chevron_up_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708z\"></path>\n</svg>";
2
+ var chevron_up_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M6 15l6 -6l6 6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { chevron_up_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/circle-check-fill.svg.3f0fcb72
2
+ var circle_check_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\" />\n</svg>";
3
+ //#endregion
4
+ export { circle_check_fill_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/copy.svg.6192f853
2
+ var copy_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666\" />\n <path d=\"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1\" />\n</svg>";
3
+ //#endregion
4
+ export { copy_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/eye-off.svg.7aa25df0
2
+ var eye_off_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M10.585 10.587a2 2 0 0 0 2.829 2.828\" />\n <path d=\"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87\" />\n <path d=\"M3 3l18 18\" />\n</svg>";
3
+ //#endregion
4
+ export { eye_off_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/eye.svg.2e5e9c4c
2
- var eye_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13 13 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5s3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5s-3.879-1.168-5.168-2.457A13 13 0 0 1 1.172 8z\"/>\n <path d=\"M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0\"/>\n</svg>";
2
+ var eye_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0\" />\n <path d=\"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { eye_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/info-circle-fill.svg.6580071d
2
- var info_circle_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2\"/>\n</svg>";
2
+ var info_circle_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 9h-1l-.117 .007a1 1 0 0 0 0 1.986l.117 .007v3l.007 .117a1 1 0 0 0 .876 .876l.117 .007h1l.117 -.007a1 1 0 0 0 .876 -.876l.007 -.117l-.007 -.117a1 1 0 0 0 -.764 -.857l-.112 -.02l-.117 -.006v-3l-.007 -.117a1 1 0 0 0 -.876 -.876l-.117 -.007zm.01 -3l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007z\" />\n</svg>";
3
3
  //#endregion
4
4
  export { info_circle_fill_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/minus.svg.4610de75
2
+ var minus_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M5 12l14 0\" />\n</svg>";
3
+ //#endregion
4
+ export { minus_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/plus.svg.d83ead68
2
+ var plus_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M12 5l0 14\" />\n <path d=\"M5 12l14 0\" />\n</svg>";
3
+ //#endregion
4
+ export { plus_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/search.svg.0ba2012d
2
- var search_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0\"/>\n</svg>";
2
+ var search_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0\" />\n <path d=\"M21 21l-6 -6\" />\n</svg>";
3
3
  //#endregion
4
4
  export { search_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/star-fill.svg.f24b5a2d
2
- var star_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"/>\n</svg>";
2
+ var star_fill_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z\" />\n</svg>";
3
3
  //#endregion
4
4
  export { star_fill_svg_default as default };
@@ -1,4 +1,4 @@
1
1
  //#region \0glob-assets_raw/star.svg.4af61468
2
- var star_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z\"/>\n</svg>";
2
+ var star_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873l-6.158 -3.245\" />\n</svg>";
3
3
  //#endregion
4
4
  export { star_svg_default as default };
@@ -0,0 +1,4 @@
1
+ //#region \0glob-assets_raw/x.svg.5596f6bb
2
+ var x_svg_default = "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n>\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path d=\"M18 6l-12 12\" />\n <path d=\"M6 6l12 12\" />\n</svg>";
3
+ //#endregion
4
+ export { x_svg_default as default };
@@ -39,7 +39,7 @@ var UAlert = class UAlert extends UElement {
39
39
  variant="ghost"
40
40
  ?hidden=${!this.closable}
41
41
  @click=${this.hide}>
42
- <u-icon lib="internal" name="x-lg"></u-icon>
42
+ <u-icon lib="internal" name="x"></u-icon>
43
43
  </u-button>
44
44
  </div>
45
45
  <div class="content" part="content" scrollable>
@@ -82,9 +82,9 @@ var UAlert = class UAlert extends UElement {
82
82
  /** Alert 상태에 따른 아이콘 이름을 반환합니다. */
83
83
  mapIcon(status) {
84
84
  switch (status) {
85
- case "error": return "exclamation-circle-fill";
86
- case "warning": return "exclamation-triangle-fill";
87
- case "success": return "check-circle-fill";
85
+ case "error": return "alert-circle-fill";
86
+ case "warning": return "alert-triangle-fill";
87
+ case "success": return "circle-check-fill";
88
88
  case "info": return "info-circle-fill";
89
89
  case "notice": return "bell-fill";
90
90
  default: return "bell-fill";
@@ -45,7 +45,7 @@ var UCheckbox = class UCheckbox extends UFormControlElement {
45
45
  <span class="checkbox" part="checkbox">
46
46
  <u-icon
47
47
  lib="internal"
48
- name=${this.indeterminate ? "dash-lg" : "check-lg"}
48
+ name=${this.indeterminate ? "minus" : "check"}
49
49
  ></u-icon>
50
50
  </span>
51
51
  <span class="label" part="label">
@@ -52,7 +52,7 @@ var UChip = class UChip extends UElement {
52
52
  <u-icon class="check-icon" part="check" slot="prefix"
53
53
  ?hidden=${!this.selectable || !this.selected}
54
54
  lib="internal"
55
- name="check-lg"
55
+ name="check"
56
56
  ></u-icon>
57
57
 
58
58
  <slot name="prefix" slot="prefix"></slot>
@@ -66,7 +66,7 @@ var UChip = class UChip extends UElement {
66
66
  tabindex="-1"
67
67
  aria-label="Remove"
68
68
  @click=${this.handleRemoveClick}>
69
- <u-icon lib="internal" name="x-lg"></u-icon>
69
+ <u-icon lib="internal" name="x"></u-icon>
70
70
  </u-button>
71
71
  </u-tag>
72
72
 
@@ -0,0 +1,47 @@
1
+ import { Placement, OffsetOptions } from '@floating-ui/dom';
2
+ import { UElement } from '../UElement.js';
3
+ import { ButtonVariant } from '../button/UButton.js';
4
+ /**
5
+ * 클릭 시 클립보드에 텍스트를 복사하는 버튼입니다. 복사 상태를 표시하기 위해 아이콘이 변경됩니다.
6
+ *
7
+ * @slot - 툴팁에 표시할 콘텐츠
8
+ *
9
+ * @event copy - 클립보드에 실제로 쓰기 전에 발생하는 네이티브 ClipboardEvent.
10
+ * `preventDefault()`로 복사를 취소하거나, `clipboardData.setData('text/plain', ...)`로 복사될 값을 바꿀 수 있음
11
+ *
12
+ * @csspart button - 내부 버튼 요소
13
+ * @csspart icon - 아이콘 요소
14
+ * @csspart tooltip - 툴팁 요소
15
+ */
16
+ export declare class UCopyButton extends UElement {
17
+ static styles: import('lit').CSSResultGroup[];
18
+ /** 버튼 스타일 변형 */
19
+ variant: ButtonVariant;
20
+ /** 원형 표시 여부 */
21
+ rounded: boolean;
22
+ /** 비활성화 여부 */
23
+ disabled: boolean;
24
+ /** 클립보드 복사 상태를 나타냅니다. */
25
+ copied: boolean;
26
+ /** 툴팁 위치 */
27
+ tooltipPlacement: Placement;
28
+ /** 툴팁 거리 */
29
+ tooltipOffset: OffsetOptions;
30
+ /** 클립보드 복사 후 재사용 대기 시간 (ms). 0 이하이면 복사 상태로 되돌아가지 않습니다. */
31
+ delay: number;
32
+ /** 복사할 텍스트를 설정합니다. */
33
+ value?: string;
34
+ render(): import('lit-html').TemplateResult<1>;
35
+ /**
36
+ * 클립보드에 텍스트를 복사하는 메서드입니다.
37
+ * 실제 쓰기 전에 취소 가능한 네이티브 `copy` 이벤트를 발행하여, 리스너가 복사를 취소하거나
38
+ * `clipboardData`를 통해 복사될 값을 바꿀 수 있게 합니다.
39
+ * 복사 후 재사용 대기 시간이 설정되어 있으면, 일정 시간 후에 복사 가능 상태로 되돌립니다.
40
+ */
41
+ private handleButtonClick;
42
+ }
43
+ declare global {
44
+ interface HTMLElementTagNameMap {
45
+ "u-copy-button": UCopyButton;
46
+ }
47
+ }
@@ -0,0 +1,94 @@
1
+ import { UElement } from "../UElement.js";
2
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorateMetadata.js";
3
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/decorate.js";
4
+ import "../icon-button/UIconButton.js";
5
+ import { styles } from "./UCopyButton.styles.js";
6
+ import { html } from "lit";
7
+ import { customElement, property } from "lit/decorators.js";
8
+ //#region src/components/copy-button/UCopyButton.ts
9
+ var UCopyButton = class UCopyButton extends UElement {
10
+ constructor(..._args) {
11
+ super(..._args);
12
+ this.variant = "ghost";
13
+ this.rounded = false;
14
+ this.disabled = false;
15
+ this.copied = false;
16
+ this.tooltipPlacement = "top";
17
+ this.tooltipOffset = 4;
18
+ this.delay = 1e3;
19
+ this.handleButtonClick = async () => {
20
+ if (!this.value) return;
21
+ if (this.copied) return;
22
+ const clipboard = new DataTransfer();
23
+ clipboard.setData("text/plain", this.value);
24
+ const event = new ClipboardEvent("copy", {
25
+ bubbles: false,
26
+ composed: false,
27
+ cancelable: true,
28
+ clipboardData: clipboard
29
+ });
30
+ if (!this.dispatchEvent(event)) return;
31
+ try {
32
+ const text = event.clipboardData?.getData("text/plain") || this.value;
33
+ await window.navigator.clipboard.writeText(text);
34
+ if (this.delay <= 0) return;
35
+ this.copied = true;
36
+ setTimeout(() => {
37
+ this.copied = false;
38
+ }, this.delay);
39
+ } catch (error) {
40
+ console.error("Failed to copy text to clipboard:", error);
41
+ this.copied = false;
42
+ }
43
+ };
44
+ }
45
+ static {
46
+ this.styles = [super.styles, styles];
47
+ }
48
+ render() {
49
+ return html`
50
+ <u-icon-button part="button"
51
+ exportparts="icon,tooltip"
52
+ ?disabled=${this.disabled}
53
+ .variant=${this.variant}
54
+ .rounded=${this.rounded}
55
+ .tooltipPlacement=${this.tooltipPlacement}
56
+ .tooltipOffset=${this.tooltipOffset}
57
+ lib="internal"
58
+ name=${this.copied ? "check" : "copy"}
59
+ @click=${this.handleButtonClick}
60
+ >
61
+ <slot></slot>
62
+ </u-icon-button>
63
+ `;
64
+ }
65
+ };
66
+ __decorate([property({
67
+ type: String,
68
+ reflect: true
69
+ }), __decorateMetadata("design:type", Object)], UCopyButton.prototype, "variant", void 0);
70
+ __decorate([property({
71
+ type: Boolean,
72
+ reflect: true
73
+ }), __decorateMetadata("design:type", Object)], UCopyButton.prototype, "rounded", void 0);
74
+ __decorate([property({
75
+ type: Boolean,
76
+ reflect: true
77
+ }), __decorateMetadata("design:type", Object)], UCopyButton.prototype, "disabled", void 0);
78
+ __decorate([property({
79
+ type: Boolean,
80
+ reflect: true
81
+ }), __decorateMetadata("design:type", Boolean)], UCopyButton.prototype, "copied", void 0);
82
+ __decorate([property({
83
+ type: String,
84
+ attribute: "tooltip-placement"
85
+ }), __decorateMetadata("design:type", Object)], UCopyButton.prototype, "tooltipPlacement", void 0);
86
+ __decorate([property({
87
+ type: Number,
88
+ attribute: "tooltip-offset"
89
+ }), __decorateMetadata("design:type", Object)], UCopyButton.prototype, "tooltipOffset", void 0);
90
+ __decorate([property({ type: Number }), __decorateMetadata("design:type", Number)], UCopyButton.prototype, "delay", void 0);
91
+ __decorate([property({ type: String }), __decorateMetadata("design:type", String)], UCopyButton.prototype, "value", void 0);
92
+ UCopyButton = __decorate([customElement("u-copy-button")], UCopyButton);
93
+ //#endregion
94
+ export { UCopyButton };
@@ -0,0 +1 @@
1
+ export declare const styles: import('lit').CSSResult;
@@ -0,0 +1,21 @@
1
+ import { css } from "lit";
2
+ //#region src/components/copy-button/UCopyButton.styles.ts
3
+ var styles = css`
4
+ :host {
5
+ display: inline-flex;
6
+ font-size: 18px;
7
+ }
8
+
9
+ u-icon-button {
10
+ font-size: inherit;
11
+ }
12
+ u-icon-button::part(button) {
13
+ padding: 0.2em;
14
+ }
15
+
16
+ :host([copied]) u-icon-button {
17
+ color: var(--u-green-500);
18
+ }
19
+ `;
20
+ //#endregion
21
+ export { styles };
@@ -34,7 +34,7 @@ var UDialog = class UDialog extends UOverlayElement {
34
34
  variant="ghost"
35
35
  ?hidden=${!this.closable}
36
36
  @click=${() => this.requestClose("button")}>
37
- <u-icon lib="internal" name="x-lg"></u-icon>
37
+ <u-icon lib="internal" name="x"></u-icon>
38
38
  </u-button>
39
39
  </div>
40
40
  <div class="body" part="body">
@@ -27,7 +27,7 @@ var UDrawer = class UDrawer extends UOverlayElement {
27
27
  variant="ghost"
28
28
  ?hidden=${!this.closable}
29
29
  @click=${() => this.requestClose("button")}>
30
- <u-icon lib="internal" name="x-lg"></u-icon>
30
+ <u-icon lib="internal" name="x"></u-icon>
31
31
  </u-button>
32
32
  </div>
33
33
  <div class="body" part="body">
@@ -2,7 +2,7 @@ import { css } from "lit";
2
2
  //#region src/components/icon-button/UIconButton.styles.ts
3
3
  var styles = css`
4
4
  :host {
5
- display: inline-block;
5
+ display: inline-flex;
6
6
  color: var(--u-icon-color);
7
7
  font-size: 20px;
8
8
  }
@@ -15,9 +15,9 @@ var styles = css`
15
15
  }
16
16
 
17
17
  u-button {
18
- padding: 0.4em;
19
18
  color: inherit;
20
19
  font-size: inherit;
20
+ padding: 0.4em;
21
21
  }
22
22
  `;
23
23
  //#endregion
@@ -182,13 +182,13 @@ var UInput = class UInput extends UFormControlElement {
182
182
  <u-icon class="suffix-item"
183
183
  ?hidden=${this.type !== "password" || this.disabled || this.readonly}
184
184
  lib="internal"
185
- name=${this.showPassword ? "eye-slash" : "eye"}
185
+ name=${this.showPassword ? "eye-off" : "eye"}
186
186
  @click=${this.handlePasswordTogglerClick}
187
187
  ></u-icon>
188
188
  <u-icon class="suffix-item"
189
189
  ?hidden=${!this.clearable || this.disabled || this.readonly || !this.value}
190
190
  lib="internal"
191
- name="x-lg"
191
+ name="x"
192
192
  @click=${this.handleClearButtonClick}
193
193
  ></u-icon>
194
194
  </div>
@@ -86,7 +86,7 @@ var UMenuItem = class UMenuItem extends UElement {
86
86
  <u-icon class="prefix-checker"
87
87
  ?hidden=${this.indicator !== "check" || !this.selected}
88
88
  lib="internal"
89
- name="check-lg"
89
+ name="check"
90
90
  ></u-icon>
91
91
 
92
92
  <slot name="prefix"></slot>
@@ -37,7 +37,7 @@ var UOption = class UOption extends UElement {
37
37
  <u-icon class="check-marker" part="check-marker"
38
38
  ?hidden=${!this.selected}
39
39
  lib="internal"
40
- name="check-lg"
40
+ name="check"
41
41
  ></u-icon>
42
42
  `;
43
43
  return nothing;
@@ -161,7 +161,7 @@ var USelect = class USelect extends UFormControlElement {
161
161
  <u-icon class="suffix-item"
162
162
  ?hidden=${!this.clearable || !this.hasValue || this.disabled || this.readonly}
163
163
  lib="internal"
164
- name="x-lg"
164
+ name="x"
165
165
  @click=${this.handleClearClick}
166
166
  ></u-icon>
167
167
  <u-icon class="suffix-item"
@@ -45,7 +45,7 @@ var UTab = class UTab extends UElement {
45
45
  aria-label="Close tab"
46
46
  @click=${this.handleRemoveClick}
47
47
  >
48
- <u-icon lib="internal" name="x-lg"></u-icon>
48
+ <u-icon lib="internal" name="x"></u-icon>
49
49
  </u-button>
50
50
  `;
51
51
  }
@@ -107,7 +107,7 @@ var UTreeItem = class UTreeItem extends UElement {
107
107
  @click=${this.handleCheckboxClick}
108
108
  >
109
109
  <u-icon lib="internal"
110
- name=${this.indeterminate ? "dash-lg" : "check-lg"}
110
+ name=${this.indeterminate ? "minus" : "check"}
111
111
  ></u-icon>
112
112
  </span>
113
113
 
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export * from './components/card/UCard.js';
13
13
  export * from './components/carousel/UCarousel.js';
14
14
  export * from './components/checkbox/UCheckbox.js';
15
15
  export * from './components/chip/UChip.js';
16
+ export * from './components/copy-button/UCopyButton.js';
16
17
  export * from './components/dialog/UDialog.js';
17
18
  export * from './components/divider/UDivider.js';
18
19
  export * from './components/drawer/UDrawer.js';
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ import { Locale } from "./utilities/Locale.js";
23
23
  import { UCheckbox } from "./components/checkbox/UCheckbox.js";
24
24
  import { UTag } from "./components/tag/UTag.js";
25
25
  import { UChip } from "./components/chip/UChip.js";
26
+ import { UCopyButton } from "./components/copy-button/UCopyButton.js";
26
27
  import { UDialog } from "./components/dialog/UDialog.js";
27
28
  import { UDivider } from "./components/divider/UDivider.js";
28
29
  import { UDrawer } from "./components/drawer/UDrawer.js";
@@ -52,4 +53,4 @@ import { BrowserStorage } from "./utilities/BrowserStorage.js";
52
53
  import { Dialog } from "./utilities/Dialog.js";
53
54
  import { Theme } from "./utilities/Theme.js";
54
55
  import { Toast } from "./utilities/Toast.js";
55
- export { BrowserStorage, Dialog, IconCache, IconRegistry, Locale, OverlayManager, Theme, Toast, UAlert, UAvatar, UBadge, UBreadcrumb, UBreadcrumbItem, UButton, UButtonGroup, UCard, UCarousel, UCheckbox, UChip, UDialog, UDivider, UDrawer, UElement, UField, UFloatingElement, UForm, UFormControlElement, UIcon, UIconButton, UInput, UMenu, UMenuItem, UOption, UOverlayElement, UPanel, UPopover, UProgressBar, UProgressRing, URadio, URating, USelect, USkeleton, USlider, USpinner, USplitPanel, USwitch, UTab, UTabPanel, UTag, UTextarea, UTooltip, UTree, UTreeItem, arrayAttrConverter, booleanAttrConverter, dateAttrConverter, getDefaultBaseUrl, getParentElement, jsonAttrConverter, querySelectorAllWithin, querySelectorWithin, setDefaultBaseUrl, urlAttrConverter };
56
+ export { BrowserStorage, Dialog, IconCache, IconRegistry, Locale, OverlayManager, Theme, Toast, UAlert, UAvatar, UBadge, UBreadcrumb, UBreadcrumbItem, UButton, UButtonGroup, UCard, UCarousel, UCheckbox, UChip, UCopyButton, UDialog, UDivider, UDrawer, UElement, UField, UFloatingElement, UForm, UFormControlElement, UIcon, UIconButton, UInput, UMenu, UMenuItem, UOption, UOverlayElement, UPanel, UPopover, UProgressBar, UProgressRing, URadio, URating, USelect, USkeleton, USlider, USpinner, USplitPanel, USwitch, UTab, UTabPanel, UTag, UTextarea, UTooltip, UTree, UTreeItem, arrayAttrConverter, booleanAttrConverter, dateAttrConverter, getDefaultBaseUrl, getParentElement, jsonAttrConverter, querySelectorAllWithin, querySelectorWithin, setDefaultBaseUrl, urlAttrConverter };
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { UCopyButton as UCopyButtonElement } from '../components/copy-button/UCopyButton';
3
+
4
+ export declare const UCopyButton: React.ForwardRefExoticComponent<
5
+ Partial<UCopyButtonElement> & React.HTMLAttributes<UCopyButtonElement> & {
6
+ onCopy?: (event: CustomEvent) => void;
7
+ }
8
+ >;
9
+
10
+ export type UCopyButtonProps = React.ComponentProps<typeof UCopyButton>;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { createComponent } from '@lit/react';
3
+ import { UCopyButton as UCopyButtonElement } from '../components/copy-button/UCopyButton.js';
4
+
5
+ export const UCopyButton = createComponent({
6
+ react: React,
7
+ tagName: 'u-copy-button',
8
+ elementClass: UCopyButtonElement,
9
+ events: {
10
+ onCopy: 'copy',
11
+ },
12
+ });
@@ -28,6 +28,7 @@ export { UField, UFieldProps } from './UField';
28
28
  export { UDrawer, UDrawerProps } from './UDrawer';
29
29
  export { UDivider, UDividerProps } from './UDivider';
30
30
  export { UDialog, UDialogProps } from './UDialog';
31
+ export { UCopyButton, UCopyButtonProps } from './UCopyButton';
31
32
  export { UChip, UChipProps } from './UChip';
32
33
  export { UCheckbox, UCheckboxProps } from './UCheckbox';
33
34
  export { UCarousel, UCarouselProps } from './UCarousel';
@@ -28,6 +28,7 @@ export { UField } from './UField.js';
28
28
  export { UDrawer } from './UDrawer.js';
29
29
  export { UDivider } from './UDivider.js';
30
30
  export { UDialog } from './UDialog.js';
31
+ export { UCopyButton } from './UCopyButton.js';
31
32
  export { UChip } from './UChip.js';
32
33
  export { UCheckbox } from './UCheckbox.js';
33
34
  export { UCarousel } from './UCarousel.js';
@@ -52,7 +52,7 @@ declare class IconRegistry {
52
52
  static has(lib: string): boolean;
53
53
  /**
54
54
  * 지정된 아이콘 라이브러리를 등록합니다.
55
- * 이미 등록된 라이브러리 이름인 경우, 경고 메시지를 출력합니다.
55
+ * 이미 등록된 라이브러리 이름인 경우, 기존 등록을 덮어쓰지 않고 무시합니다.
56
56
  */
57
57
  static register(lib: string, resolver: IconResolver): void;
58
58
  /**
@@ -1,23 +1,22 @@
1
+ import alert_circle_fill_svg_default from "../_virtual/_glob-assets_raw/alert-circle-fill.svg.1e438750.js";
2
+ import alert_triangle_fill_svg_default from "../_virtual/_glob-assets_raw/alert-triangle-fill.svg.1a8797c4.js";
1
3
  import bell_fill_svg_default from "../_virtual/_glob-assets_raw/bell-fill.svg.d37c41d9.js";
2
- import check_circle_fill_svg_default from "../_virtual/_glob-assets_raw/check-circle-fill.svg.51c33a2a.js";
3
- import check_lg_svg_default from "../_virtual/_glob-assets_raw/check-lg.svg.371c5e78.js";
4
+ import check_svg_default from "../_virtual/_glob-assets_raw/check.svg.4690b01e.js";
4
5
  import chevron_down_svg_default from "../_virtual/_glob-assets_raw/chevron-down.svg.0ccd06ea.js";
5
6
  import chevron_left_svg_default from "../_virtual/_glob-assets_raw/chevron-left.svg.b4601050.js";
6
7
  import chevron_right_svg_default from "../_virtual/_glob-assets_raw/chevron-right.svg.0711bb67.js";
7
8
  import chevron_up_svg_default from "../_virtual/_glob-assets_raw/chevron-up.svg.ed917211.js";
8
- import dash_lg_svg_default from "../_virtual/_glob-assets_raw/dash-lg.svg.b40b8b3a.js";
9
- import exclamation_circle_fill_svg_default from "../_virtual/_glob-assets_raw/exclamation-circle-fill.svg.dc8c523e.js";
10
- import exclamation_triangle_fill_svg_default from "../_virtual/_glob-assets_raw/exclamation-triangle-fill.svg.7949d2c7.js";
11
- import eye_slash_svg_default from "../_virtual/_glob-assets_raw/eye-slash.svg.240afafa.js";
9
+ import circle_check_fill_svg_default from "../_virtual/_glob-assets_raw/circle-check-fill.svg.3f0fcb72.js";
10
+ import copy_svg_default from "../_virtual/_glob-assets_raw/copy.svg.6192f853.js";
11
+ import eye_off_svg_default from "../_virtual/_glob-assets_raw/eye-off.svg.7aa25df0.js";
12
12
  import eye_svg_default from "../_virtual/_glob-assets_raw/eye.svg.2e5e9c4c.js";
13
13
  import info_circle_fill_svg_default from "../_virtual/_glob-assets_raw/info-circle-fill.svg.6580071d.js";
14
- import plus_lg_svg_default from "../_virtual/_glob-assets_raw/plus-lg.svg.294e9073.js";
14
+ import minus_svg_default from "../_virtual/_glob-assets_raw/minus.svg.4610de75.js";
15
+ import plus_svg_default from "../_virtual/_glob-assets_raw/plus.svg.d83ead68.js";
15
16
  import search_svg_default from "../_virtual/_glob-assets_raw/search.svg.0ba2012d.js";
16
17
  import star_fill_svg_default from "../_virtual/_glob-assets_raw/star-fill.svg.f24b5a2d.js";
17
18
  import star_svg_default from "../_virtual/_glob-assets_raw/star.svg.4af61468.js";
18
- import three_dots_vertical_svg_default from "../_virtual/_glob-assets_raw/three-dots-vertical.svg.9fee78c5.js";
19
- import three_dots_svg_default from "../_virtual/_glob-assets_raw/three-dots.svg.6a7a5b23.js";
20
- import x_lg_svg_default from "../_virtual/_glob-assets_raw/x-lg.svg.f34b882c.js";
19
+ import x_svg_default from "../_virtual/_glob-assets_raw/x.svg.5596f6bb.js";
21
20
  //#region src/utilities/icons.ts
22
21
  var defaultIconBaseUrl = "/assets/icons/";
23
22
  /**
@@ -38,27 +37,26 @@ function setDefaultBaseUrl(url) {
38
37
  * vite의 `import.meta.glob`을 사용하여 내부 경로상의 모든 SVG 파일을 빌드 시점에 한 번에 로드합니다.
39
38
  * 이 레지스트리는 런타임 동안 불변이며, 아이콘 조회 시 재사용됩니다.
40
39
  */
41
- var internalIconBundle = new Map(Object.entries(/* #__PURE__ */ Object.assign({
40
+ var InternalIconBundle = new Map(Object.entries(/* #__PURE__ */ Object.assign({
41
+ "../assets/icons/alert-circle-fill.svg": alert_circle_fill_svg_default,
42
+ "../assets/icons/alert-triangle-fill.svg": alert_triangle_fill_svg_default,
42
43
  "../assets/icons/bell-fill.svg": bell_fill_svg_default,
43
- "../assets/icons/check-circle-fill.svg": check_circle_fill_svg_default,
44
- "../assets/icons/check-lg.svg": check_lg_svg_default,
44
+ "../assets/icons/check.svg": check_svg_default,
45
45
  "../assets/icons/chevron-down.svg": chevron_down_svg_default,
46
46
  "../assets/icons/chevron-left.svg": chevron_left_svg_default,
47
47
  "../assets/icons/chevron-right.svg": chevron_right_svg_default,
48
48
  "../assets/icons/chevron-up.svg": chevron_up_svg_default,
49
- "../assets/icons/dash-lg.svg": dash_lg_svg_default,
50
- "../assets/icons/exclamation-circle-fill.svg": exclamation_circle_fill_svg_default,
51
- "../assets/icons/exclamation-triangle-fill.svg": exclamation_triangle_fill_svg_default,
52
- "../assets/icons/eye-slash.svg": eye_slash_svg_default,
49
+ "../assets/icons/circle-check-fill.svg": circle_check_fill_svg_default,
50
+ "../assets/icons/copy.svg": copy_svg_default,
51
+ "../assets/icons/eye-off.svg": eye_off_svg_default,
53
52
  "../assets/icons/eye.svg": eye_svg_default,
54
53
  "../assets/icons/info-circle-fill.svg": info_circle_fill_svg_default,
55
- "../assets/icons/plus-lg.svg": plus_lg_svg_default,
54
+ "../assets/icons/minus.svg": minus_svg_default,
55
+ "../assets/icons/plus.svg": plus_svg_default,
56
56
  "../assets/icons/search.svg": search_svg_default,
57
57
  "../assets/icons/star-fill.svg": star_fill_svg_default,
58
58
  "../assets/icons/star.svg": star_svg_default,
59
- "../assets/icons/three-dots-vertical.svg": three_dots_vertical_svg_default,
60
- "../assets/icons/three-dots.svg": three_dots_svg_default,
61
- "../assets/icons/x-lg.svg": x_lg_svg_default
59
+ "../assets/icons/x.svg": x_svg_default
62
60
  })).map(([path, module]) => {
63
61
  return [path.split("/").pop()?.replace(".svg", "") || "", module];
64
62
  }).filter(([name]) => name !== ""));
@@ -118,11 +116,10 @@ var IconRegistry = class {
118
116
  }
119
117
  /**
120
118
  * 지정된 아이콘 라이브러리를 등록합니다.
121
- * 이미 등록된 라이브러리 이름인 경우, 경고 메시지를 출력합니다.
119
+ * 이미 등록된 라이브러리 이름인 경우, 기존 등록을 덮어쓰지 않고 무시합니다.
122
120
  */
123
121
  static register(lib, resolver) {
124
- if (this.libs.has(lib)) console.warn(`Icon library "${lib}" is already registered`);
125
- else this.libs.set(lib, resolver);
122
+ if (!this.libs.has(lib)) this.libs.set(lib, resolver);
126
123
  }
127
124
  /**
128
125
  * 지정된 아이콘 라이브러리를 등록 해제합니다.
@@ -140,7 +137,7 @@ var IconRegistry = class {
140
137
  }
141
138
  };
142
139
  IconRegistry.register("internal", (name) => {
143
- return internalIconBundle.get(name);
140
+ return InternalIconBundle.get(name);
144
141
  });
145
142
  IconRegistry.register("tabler", async (name) => {
146
143
  if (IconCache.has("tabler", name)) return IconCache.get("tabler", name);
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.4.0",
4
+ "version": "1.5.0",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "components",
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/check-circle-fill.svg.51c33a2a
2
- var check_circle_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z\"/>\n</svg>";
3
- //#endregion
4
- export { check_circle_fill_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/check-lg.svg.371c5e78
2
- var check_lg_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M12.736 3.97a.733.733 0 0 1 1.047 0c.286.289.29.756.01 1.05L7.88 12.01a.733.733 0 0 1-1.065.02L3.217 8.384a.757.757 0 0 1 0-1.06.733.733 0 0 1 1.047 0l3.052 3.093 5.4-6.425z\"/>\n</svg>";
3
- //#endregion
4
- export { check_lg_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/dash-lg.svg.b40b8b3a
2
- var dash_lg_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M2 8a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11A.5.5 0 0 1 2 8\"/>\n</svg>";
3
- //#endregion
4
- export { dash_lg_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/exclamation-circle-fill.svg.dc8c523e
2
- var exclamation_circle_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8 4a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 4m.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2\"/>\n</svg>";
3
- //#endregion
4
- export { exclamation_circle_fill_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/exclamation-triangle-fill.svg.7949d2c7
2
- var exclamation_triangle_fill_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5m.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2\"/>\n</svg>";
3
- //#endregion
4
- export { exclamation_triangle_fill_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/eye-slash.svg.240afafa
2
- var eye_slash_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7 7 0 0 0-2.79.588l.77.771A6 6 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13 13 0 0 1 14.828 8q-.086.13-.195.288c-.335.48-.83 1.12-1.465 1.755q-.247.248-.517.486z\"/>\n <path d=\"M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829\"/>\n <path d=\"M3.35 5.47q-.27.24-.518.487A13 13 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7 7 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12z\"/>\n</svg>";
3
- //#endregion
4
- export { eye_slash_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/plus-lg.svg.294e9073
2
- var plus_lg_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M8 2a.5.5 0 0 1 .5.5v5h5a.5.5 0 0 1 0 1h-5v5a.5.5 0 0 1-1 0v-5h-5a.5.5 0 0 1 0-1h5v-5A.5.5 0 0 1 8 2\"/>\n</svg>";
3
- //#endregion
4
- export { plus_lg_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/three-dots-vertical.svg.9fee78c5
2
- var three_dots_vertical_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\"/>\n</svg>";
3
- //#endregion
4
- export { three_dots_vertical_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/three-dots.svg.6a7a5b23
2
- var three_dots_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3\"/>\n</svg>";
3
- //#endregion
4
- export { three_dots_svg_default as default };
@@ -1,4 +0,0 @@
1
- //#region \0glob-assets_raw/x-lg.svg.f34b882c
2
- var x_lg_svg_default = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z\"/>\n</svg>";
3
- //#endregion
4
- export { x_lg_svg_default as default };