@iyulab/components 0.4.0 → 1.0.1

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 (472) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +42 -236
  3. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +6 -0
  5. package/dist/_virtual/_glob-assets_raw/bell-fill.svg.d37c41d9.js +4 -0
  6. package/dist/_virtual/_glob-assets_raw/check-circle-fill.svg.51c33a2a.js +4 -0
  7. package/dist/_virtual/_glob-assets_raw/check-lg.svg.371c5e78.js +4 -0
  8. package/dist/_virtual/_glob-assets_raw/chevron-down.svg.0ccd06ea.js +4 -0
  9. package/dist/_virtual/_glob-assets_raw/chevron-left.svg.b4601050.js +4 -0
  10. package/dist/_virtual/_glob-assets_raw/chevron-right.svg.0711bb67.js +4 -0
  11. package/dist/_virtual/_glob-assets_raw/chevron-up.svg.ed917211.js +4 -0
  12. package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +4 -0
  13. package/dist/_virtual/_glob-assets_raw/dash-lg.svg.b40b8b3a.js +4 -0
  14. package/dist/_virtual/_glob-assets_raw/exclamation-circle-fill.svg.dc8c523e.js +4 -0
  15. package/dist/_virtual/_glob-assets_raw/exclamation-triangle-fill.svg.7949d2c7.js +4 -0
  16. package/dist/_virtual/_glob-assets_raw/eye-slash.svg.240afafa.js +4 -0
  17. package/dist/_virtual/_glob-assets_raw/eye.svg.2e5e9c4c.js +4 -0
  18. package/dist/_virtual/_glob-assets_raw/info-circle-fill.svg.6580071d.js +4 -0
  19. package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +4 -0
  20. package/dist/_virtual/_glob-assets_raw/plus-lg.svg.294e9073.js +4 -0
  21. package/dist/_virtual/_glob-assets_raw/search.svg.0ba2012d.js +4 -0
  22. package/dist/_virtual/_glob-assets_raw/star-fill.svg.f24b5a2d.js +4 -0
  23. package/dist/_virtual/_glob-assets_raw/star.svg.4af61468.js +4 -0
  24. package/dist/_virtual/_glob-assets_raw/three-dots-vertical.svg.9fee78c5.js +4 -0
  25. package/dist/_virtual/_glob-assets_raw/three-dots.svg.6a7a5b23.js +4 -0
  26. package/dist/_virtual/_glob-assets_raw/x-lg.svg.f34b882c.js +4 -0
  27. package/dist/components/{UJsonElement.d.ts → UDataElement.d.ts} +3 -5
  28. package/dist/components/UDataElement.js +101 -0
  29. package/dist/components/{UJsonElement.styles.js → UDataElement.styles.js} +4 -4
  30. package/dist/components/UElement.d.ts +18 -23
  31. package/dist/components/UElement.js +82 -95
  32. package/dist/components/UElement.styles.js +43 -4
  33. package/dist/components/UFloatingElement.d.ts +69 -48
  34. package/dist/components/UFloatingElement.js +236 -193
  35. package/dist/components/UFloatingElement.styles.d.ts +8 -0
  36. package/dist/components/UFloatingElement.styles.js +28 -5
  37. package/dist/components/UFormControlElement.d.ts +57 -0
  38. package/dist/components/UFormControlElement.js +68 -0
  39. package/dist/components/UFormControlElement.styles.js +14 -0
  40. package/dist/components/UOverlayElement.d.ts +66 -0
  41. package/dist/components/UOverlayElement.js +123 -0
  42. package/dist/components/UOverlayElement.styles.d.ts +1 -0
  43. package/dist/components/UOverlayElement.styles.js +35 -0
  44. package/dist/components/alert/UAlert.d.ts +58 -3
  45. package/dist/components/alert/UAlert.js +115 -4
  46. package/dist/components/alert/UAlert.styles.js +73 -48
  47. package/dist/components/avatar/UAvatar.d.ts +27 -0
  48. package/dist/components/avatar/UAvatar.js +42 -0
  49. package/dist/components/avatar/UAvatar.styles.d.ts +1 -0
  50. package/dist/components/avatar/UAvatar.styles.js +45 -0
  51. package/dist/components/badge/UBadge.d.ts +28 -0
  52. package/dist/components/badge/UBadge.js +40 -0
  53. package/dist/components/badge/UBadge.styles.d.ts +1 -0
  54. package/dist/components/badge/UBadge.styles.js +113 -0
  55. package/dist/components/breadcrumb/UBreadcrumb.d.ts +24 -0
  56. package/dist/components/breadcrumb/UBreadcrumb.js +65 -0
  57. package/dist/components/breadcrumb/UBreadcrumb.styles.d.ts +1 -0
  58. package/dist/components/breadcrumb/UBreadcrumb.styles.js +37 -0
  59. package/dist/components/breadcrumb-item/UBreadcrumbItem.d.ts +30 -0
  60. package/dist/components/breadcrumb-item/UBreadcrumbItem.js +52 -0
  61. package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.d.ts +1 -0
  62. package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +41 -0
  63. package/dist/components/button/UButton.d.ts +46 -3
  64. package/dist/components/button/UButton.js +104 -4
  65. package/dist/components/button/UButton.styles.js +121 -48
  66. package/dist/components/button-group/UButtonGroup.d.ts +28 -0
  67. package/dist/components/button-group/UButtonGroup.js +93 -0
  68. package/dist/components/button-group/UButtonGroup.styles.d.ts +1 -0
  69. package/dist/components/button-group/UButtonGroup.styles.js +34 -0
  70. package/dist/components/card/UCard.d.ts +30 -3
  71. package/dist/components/card/UCard.js +61 -4
  72. package/dist/components/card/UCard.styles.js +13 -12
  73. package/dist/components/carousel/UCarousel.d.ts +65 -3
  74. package/dist/components/carousel/UCarousel.js +219 -2
  75. package/dist/components/carousel/UCarousel.styles.js +17 -17
  76. package/dist/components/checkbox/UCheckbox.d.ts +39 -0
  77. package/dist/components/checkbox/UCheckbox.js +88 -0
  78. package/dist/components/checkbox/UCheckbox.styles.d.ts +1 -0
  79. package/dist/components/checkbox/UCheckbox.styles.js +211 -0
  80. package/dist/components/chip/UChip.d.ts +43 -0
  81. package/dist/components/chip/UChip.js +103 -0
  82. package/dist/components/chip/UChip.styles.d.ts +1 -0
  83. package/dist/components/chip/UChip.styles.js +31 -0
  84. package/dist/components/dialog/UDialog.d.ts +29 -2
  85. package/dist/components/dialog/UDialog.js +66 -4
  86. package/dist/components/dialog/UDialog.styles.js +90 -39
  87. package/dist/components/divider/UDivider.d.ts +27 -2
  88. package/dist/components/divider/UDivider.js +45 -4
  89. package/dist/components/divider/UDivider.styles.js +80 -10
  90. package/dist/components/drawer/UDrawer.d.ts +25 -3
  91. package/dist/components/drawer/UDrawer.js +54 -4
  92. package/dist/components/drawer/UDrawer.styles.js +67 -60
  93. package/dist/components/field/UField.d.ts +31 -0
  94. package/dist/components/field/UField.js +64 -0
  95. package/dist/components/field/UField.styles.d.ts +1 -0
  96. package/dist/components/field/UField.styles.js +47 -0
  97. package/dist/components/form/UForm.d.ts +38 -2
  98. package/dist/components/form/UForm.js +105 -4
  99. package/dist/components/form/UForm.styles.js +5 -5
  100. package/dist/components/icon/UIcon.d.ts +23 -4
  101. package/dist/components/icon/UIcon.js +56 -4
  102. package/dist/components/icon/UIcon.styles.js +5 -6
  103. package/dist/components/icon-button/UIconButton.d.ts +48 -0
  104. package/dist/components/icon-button/UIconButton.js +88 -0
  105. package/dist/components/icon-button/UIconButton.styles.d.ts +1 -0
  106. package/dist/components/icon-button/UIconButton.styles.js +24 -0
  107. package/dist/components/input/UInput.d.ts +95 -3
  108. package/dist/components/input/UInput.js +258 -2
  109. package/dist/components/input/UInput.styles.js +120 -86
  110. package/dist/components/menu/UMenu.d.ts +41 -3
  111. package/dist/components/menu/UMenu.js +178 -4
  112. package/dist/components/menu/UMenu.styles.js +16 -30
  113. package/dist/components/menu-item/UMenuItem.d.ts +48 -2
  114. package/dist/components/menu-item/UMenuItem.js +159 -2
  115. package/dist/components/menu-item/UMenuItem.styles.js +120 -34
  116. package/dist/components/option/UOption.d.ts +42 -0
  117. package/dist/components/option/UOption.js +64 -0
  118. package/dist/components/option/UOption.styles.d.ts +1 -0
  119. package/dist/components/option/UOption.styles.js +132 -0
  120. package/dist/components/panel/UPanel.d.ts +22 -0
  121. package/dist/components/panel/UPanel.js +36 -0
  122. package/dist/components/panel/UPanel.styles.d.ts +1 -0
  123. package/dist/components/panel/UPanel.styles.js +14 -0
  124. package/dist/components/popover/UPopover.d.ts +69 -0
  125. package/dist/components/popover/UPopover.js +235 -0
  126. package/dist/components/popover/UPopover.styles.d.ts +1 -0
  127. package/dist/components/popover/UPopover.styles.js +9 -0
  128. package/dist/components/progress-bar/UProgressBar.d.ts +46 -2
  129. package/dist/components/progress-bar/UProgressBar.js +94 -2
  130. package/dist/components/progress-bar/UProgressBar.styles.js +110 -36
  131. package/dist/components/progress-ring/UProgressRing.d.ts +46 -3
  132. package/dist/components/progress-ring/UProgressRing.js +152 -2
  133. package/dist/components/progress-ring/UProgressRing.styles.js +88 -25
  134. package/dist/components/radio/URadio.d.ts +41 -0
  135. package/dist/components/radio/URadio.js +152 -0
  136. package/dist/components/radio/URadio.styles.d.ts +1 -0
  137. package/dist/components/radio/URadio.styles.js +111 -0
  138. package/dist/components/rating/URating.d.ts +48 -0
  139. package/dist/components/rating/URating.js +196 -0
  140. package/dist/components/rating/URating.styles.d.ts +1 -0
  141. package/dist/components/rating/URating.styles.js +55 -0
  142. package/dist/components/select/USelect.d.ts +70 -0
  143. package/dist/components/select/USelect.js +316 -0
  144. package/dist/components/select/USelect.styles.d.ts +1 -0
  145. package/dist/components/select/USelect.styles.js +200 -0
  146. package/dist/components/skeleton/USkeleton.d.ts +27 -3
  147. package/dist/components/skeleton/USkeleton.js +37 -4
  148. package/dist/components/skeleton/USkeleton.styles.js +15 -18
  149. package/dist/components/slider/USlider.d.ts +88 -0
  150. package/dist/components/slider/USlider.js +286 -0
  151. package/dist/components/slider/USlider.styles.d.ts +1 -0
  152. package/dist/components/slider/USlider.styles.js +125 -0
  153. package/dist/components/spinner/USpinner.d.ts +23 -2
  154. package/dist/components/spinner/USpinner.js +37 -3
  155. package/dist/components/spinner/USpinner.styles.js +34 -13
  156. package/dist/components/split-panel/USplitPanel.d.ts +49 -2
  157. package/dist/components/split-panel/USplitPanel.js +239 -3
  158. package/dist/components/split-panel/USplitPanel.styles.js +47 -15
  159. package/dist/components/switch/USwitch.d.ts +43 -0
  160. package/dist/components/switch/USwitch.js +80 -0
  161. package/dist/components/switch/USwitch.styles.d.ts +1 -0
  162. package/dist/components/switch/USwitch.styles.js +191 -0
  163. package/dist/components/tab/UTab.d.ts +31 -0
  164. package/dist/components/tab/UTab.js +68 -0
  165. package/dist/components/tab/UTab.styles.d.ts +1 -0
  166. package/dist/components/tab/UTab.styles.js +46 -0
  167. package/dist/components/tab-panel/UTabPanel.d.ts +45 -0
  168. package/dist/components/tab-panel/UTabPanel.js +150 -0
  169. package/dist/components/tab-panel/UTabPanel.styles.d.ts +1 -0
  170. package/dist/components/tab-panel/UTabPanel.styles.js +201 -0
  171. package/dist/components/tag/UTag.d.ts +26 -3
  172. package/dist/components/tag/UTag.js +41 -4
  173. package/dist/components/tag/UTag.styles.js +206 -60
  174. package/dist/components/textarea/UTextarea.d.ts +65 -0
  175. package/dist/components/textarea/UTextarea.js +148 -0
  176. package/dist/components/textarea/UTextarea.styles.d.ts +1 -0
  177. package/dist/components/textarea/UTextarea.styles.js +164 -0
  178. package/dist/components/tooltip/UTooltip.d.ts +28 -2
  179. package/dist/components/tooltip/UTooltip.js +104 -4
  180. package/dist/components/tooltip/UTooltip.styles.js +10 -12
  181. package/dist/components/tree/UTree.d.ts +62 -2
  182. package/dist/components/tree/UTree.js +308 -3
  183. package/dist/components/tree/UTree.styles.js +13 -19
  184. package/dist/components/tree-item/UTreeItem.d.ts +61 -2
  185. package/dist/components/tree-item/UTreeItem.js +191 -2
  186. package/dist/components/tree-item/UTreeItem.styles.js +96 -37
  187. package/dist/events/CheckEvent.d.ts +7 -0
  188. package/dist/events/CollapseEvent.d.ts +7 -0
  189. package/dist/events/ExpandEvent.d.ts +7 -0
  190. package/dist/events/HideEvent.d.ts +7 -0
  191. package/dist/events/NavigateEvent.d.ts +7 -0
  192. package/dist/events/PickEvent.d.ts +18 -0
  193. package/dist/events/RemoveEvent.d.ts +7 -0
  194. package/dist/events/ShiftEvent.d.ts +16 -0
  195. package/dist/events/ShowEvent.d.ts +7 -0
  196. package/dist/index.d.ts +37 -10
  197. package/dist/index.js +56 -52
  198. package/dist/react/UAlert.d.ts +13 -0
  199. package/dist/{react-components → react}/UAlert.js +5 -2
  200. package/dist/react/UAvatar.d.ts +9 -0
  201. package/dist/react/UAvatar.js +10 -0
  202. package/dist/react/UBadge.d.ts +9 -0
  203. package/dist/react/UBadge.js +10 -0
  204. package/dist/react/UBreadcrumb.d.ts +9 -0
  205. package/dist/react/UBreadcrumb.js +10 -0
  206. package/dist/react/UBreadcrumbItem.d.ts +11 -0
  207. package/dist/react/UBreadcrumbItem.js +12 -0
  208. package/dist/{react-components → react}/UButton.d.ts +3 -2
  209. package/dist/{react-components → react}/UButton.js +2 -2
  210. package/dist/react/UButtonGroup.d.ts +9 -0
  211. package/dist/react/UButtonGroup.js +10 -0
  212. package/dist/{react-components → react}/UCard.d.ts +3 -2
  213. package/dist/{react-components → react}/UCard.js +2 -2
  214. package/dist/{react-components → react}/UCarousel.d.ts +3 -2
  215. package/dist/{react-components → react}/UCarousel.js +2 -2
  216. package/dist/react/UCheckbox.d.ts +9 -0
  217. package/dist/react/UCheckbox.js +10 -0
  218. package/dist/react/UChip.d.ts +13 -0
  219. package/dist/react/UChip.js +13 -0
  220. package/dist/{react-components → react}/UDialog.d.ts +3 -2
  221. package/dist/{react-components → react}/UDialog.js +2 -2
  222. package/dist/{react-components → react}/UDivider.d.ts +3 -2
  223. package/dist/{react-components → react}/UDivider.js +2 -2
  224. package/dist/{react-components → react}/UDrawer.d.ts +3 -2
  225. package/dist/{react-components → react}/UDrawer.js +2 -2
  226. package/dist/react/UField.d.ts +9 -0
  227. package/dist/react/UField.js +10 -0
  228. package/dist/react/UForm.d.ts +10 -0
  229. package/dist/{react-components → react}/UForm.js +4 -2
  230. package/dist/{react-components → react}/UIcon.d.ts +3 -2
  231. package/dist/{react-components → react}/UIcon.js +2 -2
  232. package/dist/react/UIconButton.d.ts +9 -0
  233. package/dist/react/UIconButton.js +10 -0
  234. package/dist/react/UInput.d.ts +11 -0
  235. package/dist/{react-components → react}/UInput.js +5 -2
  236. package/dist/react/UMenu.d.ts +10 -0
  237. package/dist/{react-components → react}/UMenu.js +4 -2
  238. package/dist/react/UMenuItem.d.ts +11 -0
  239. package/dist/{react-components → react}/UMenuItem.js +4 -2
  240. package/dist/react/UOption.d.ts +9 -0
  241. package/dist/react/UOption.js +10 -0
  242. package/dist/react/UPanel.d.ts +9 -0
  243. package/dist/react/UPanel.js +10 -0
  244. package/dist/react/UPopover.d.ts +11 -0
  245. package/dist/react/UPopover.js +13 -0
  246. package/dist/react/UProgressBar.d.ts +9 -0
  247. package/dist/{react-components → react}/UProgressBar.js +2 -2
  248. package/dist/react/UProgressRing.d.ts +9 -0
  249. package/dist/{react-components → react}/UProgressRing.js +2 -2
  250. package/dist/react/URadio.d.ts +10 -0
  251. package/dist/react/URadio.js +12 -0
  252. package/dist/react/URating.d.ts +10 -0
  253. package/dist/react/URating.js +12 -0
  254. package/dist/react/USelect.d.ts +10 -0
  255. package/dist/react/USelect.js +12 -0
  256. package/dist/{react-components → react}/USkeleton.d.ts +3 -2
  257. package/dist/{react-components → react}/USkeleton.js +2 -2
  258. package/dist/react/USlider.d.ts +10 -0
  259. package/dist/react/USlider.js +12 -0
  260. package/dist/{react-components → react}/USpinner.d.ts +3 -2
  261. package/dist/{react-components → react}/USpinner.js +2 -2
  262. package/dist/react/USplitPanel.d.ts +13 -0
  263. package/dist/{react-components → react}/USplitPanel.js +6 -2
  264. package/dist/react/USwitch.d.ts +10 -0
  265. package/dist/react/USwitch.js +12 -0
  266. package/dist/react/UTab.d.ts +11 -0
  267. package/dist/react/UTab.js +12 -0
  268. package/dist/react/UTabPanel.d.ts +9 -0
  269. package/dist/react/UTabPanel.js +10 -0
  270. package/dist/{react-components → react}/UTag.d.ts +3 -2
  271. package/dist/{react-components → react}/UTag.js +2 -2
  272. package/dist/react/UTextarea.d.ts +11 -0
  273. package/dist/react/UTextarea.js +13 -0
  274. package/dist/react/UTooltip.d.ts +11 -0
  275. package/dist/{react-components → react}/UTooltip.js +5 -2
  276. package/dist/react/UTree.d.ts +10 -0
  277. package/dist/{react-components → react}/UTree.js +4 -2
  278. package/dist/react/UTreeItem.d.ts +17 -0
  279. package/dist/{react-components → react}/UTreeItem.js +7 -2
  280. package/dist/{react-components → react}/index.d.ts +40 -27
  281. package/dist/{react-components → react}/index.js +40 -20
  282. package/dist/{assets/styles → styles}/dark.css +68 -3
  283. package/dist/{assets/styles → styles}/light.css +68 -3
  284. package/dist/utilities/BrowserStorage.d.ts +2 -1
  285. package/dist/utilities/BrowserStorage.js +69 -86
  286. package/dist/utilities/Dialog.d.ts +83 -0
  287. package/dist/utilities/Dialog.js +141 -0
  288. package/dist/utilities/OverlayManager.d.ts +37 -0
  289. package/dist/utilities/OverlayManager.js +68 -0
  290. package/dist/utilities/Theme.js +134 -141
  291. package/dist/utilities/Toast.d.ts +45 -0
  292. package/dist/utilities/Toast.js +114 -0
  293. package/dist/utilities/converters.d.ts +44 -1
  294. package/dist/utilities/converters.js +112 -14
  295. package/dist/utilities/elements.js +62 -33
  296. package/dist/utilities/icons.d.ts +67 -0
  297. package/dist/utilities/icons.js +200 -0
  298. package/dist/utilities/sanitizers.js +64 -32
  299. package/package.json +26 -19
  300. package/plugins/vite-plugin-glob-resolve.d.ts +12 -0
  301. package/plugins/vite-plugin-glob-resolve.js +66 -0
  302. package/plugins/vite-plugin-react-wrapper.d.ts +12 -0
  303. package/plugins/vite-plugin-react-wrapper.js +206 -0
  304. package/skills/iyulab-components/SKILL.md +138 -0
  305. package/skills/iyulab-components/references/components/alert.md +74 -0
  306. package/skills/iyulab-components/references/components/avatar.md +41 -0
  307. package/skills/iyulab-components/references/components/badge.md +38 -0
  308. package/skills/iyulab-components/references/components/breadcrumb.md +75 -0
  309. package/skills/iyulab-components/references/components/button-group.md +38 -0
  310. package/skills/iyulab-components/references/components/button.md +56 -0
  311. package/skills/iyulab-components/references/components/card.md +53 -0
  312. package/skills/iyulab-components/references/components/carousel.md +63 -0
  313. package/skills/iyulab-components/references/components/checkbox.md +70 -0
  314. package/skills/iyulab-components/references/components/chip.md +64 -0
  315. package/skills/iyulab-components/references/components/dialog.md +71 -0
  316. package/skills/iyulab-components/references/components/divider.md +56 -0
  317. package/skills/iyulab-components/references/components/drawer.md +63 -0
  318. package/skills/iyulab-components/references/components/field.md +42 -0
  319. package/skills/iyulab-components/references/components/form.md +68 -0
  320. package/skills/iyulab-components/references/components/icon-button.md +56 -0
  321. package/skills/iyulab-components/references/components/icon.md +49 -0
  322. package/skills/iyulab-components/references/components/input.md +95 -0
  323. package/skills/iyulab-components/references/components/menu.md +106 -0
  324. package/skills/iyulab-components/references/components/option.md +70 -0
  325. package/skills/iyulab-components/references/components/panel.md +38 -0
  326. package/skills/iyulab-components/references/components/popover.md +62 -0
  327. package/skills/iyulab-components/references/components/progress-bar.md +61 -0
  328. package/skills/iyulab-components/references/components/progress-ring.md +58 -0
  329. package/skills/iyulab-components/references/components/radio.md +67 -0
  330. package/skills/iyulab-components/references/components/rating.md +74 -0
  331. package/skills/iyulab-components/references/components/select.md +86 -0
  332. package/skills/iyulab-components/references/components/skeleton.md +46 -0
  333. package/skills/iyulab-components/references/components/slider.md +89 -0
  334. package/skills/iyulab-components/references/components/spinner.md +47 -0
  335. package/skills/iyulab-components/references/components/split-panel.md +65 -0
  336. package/skills/iyulab-components/references/components/switch.md +81 -0
  337. package/skills/iyulab-components/references/components/tab-panel.md +93 -0
  338. package/skills/iyulab-components/references/components/tag.md +55 -0
  339. package/skills/iyulab-components/references/components/textarea.md +67 -0
  340. package/skills/iyulab-components/references/components/tooltip.md +58 -0
  341. package/skills/iyulab-components/references/components/tree.md +128 -0
  342. package/skills/iyulab-components/references/extensions/data.md +60 -0
  343. package/skills/iyulab-components/references/extensions/element.md +57 -0
  344. package/skills/iyulab-components/references/extensions/floating.md +60 -0
  345. package/skills/iyulab-components/references/extensions/form-control.md +79 -0
  346. package/skills/iyulab-components/references/extensions/overlay.md +76 -0
  347. package/skills/iyulab-components/references/usage.md +216 -0
  348. package/skills/iyulab-components/references/utilities/browser-storage.md +54 -0
  349. package/skills/iyulab-components/references/utilities/converters.md +42 -0
  350. package/skills/iyulab-components/references/utilities/dialog.md +75 -0
  351. package/skills/iyulab-components/references/utilities/elements.md +55 -0
  352. package/skills/iyulab-components/references/utilities/icons.md +53 -0
  353. package/skills/iyulab-components/references/utilities/overlay-manager.md +34 -0
  354. package/skills/iyulab-components/references/utilities/sanitizers.md +32 -0
  355. package/skills/iyulab-components/references/utilities/theme.md +45 -0
  356. package/skills/iyulab-components/references/utilities/toast.md +58 -0
  357. package/dist/assets/icons/arrow-down-up.svg.js +0 -3
  358. package/dist/assets/icons/arrow-down.svg.js +0 -3
  359. package/dist/assets/icons/arrow-repeat.svg.js +0 -3
  360. package/dist/assets/icons/arrow-up.svg.js +0 -3
  361. package/dist/assets/icons/ban.svg.js +0 -3
  362. package/dist/assets/icons/bell-fill.svg.js +0 -3
  363. package/dist/assets/icons/box-arrow-up-right.svg.js +0 -3
  364. package/dist/assets/icons/check-circle-fill.svg.js +0 -3
  365. package/dist/assets/icons/check-lg.svg.js +0 -3
  366. package/dist/assets/icons/chevron-down.svg.js +0 -3
  367. package/dist/assets/icons/chevron-left.svg.js +0 -3
  368. package/dist/assets/icons/chevron-right.svg.js +0 -3
  369. package/dist/assets/icons/chevron-up.svg.js +0 -3
  370. package/dist/assets/icons/code-slash.svg.js +0 -3
  371. package/dist/assets/icons/copy.svg.js +0 -3
  372. package/dist/assets/icons/dash-lg.svg.js +0 -3
  373. package/dist/assets/icons/download.svg.js +0 -3
  374. package/dist/assets/icons/exclamation-circle-fill.svg.js +0 -3
  375. package/dist/assets/icons/exclamation-triangle-fill.svg.js +0 -3
  376. package/dist/assets/icons/eye-slash.svg.js +0 -3
  377. package/dist/assets/icons/eye.svg.js +0 -3
  378. package/dist/assets/icons/file-earmark.svg.js +0 -3
  379. package/dist/assets/icons/flag.svg.js +0 -3
  380. package/dist/assets/icons/globe.svg.js +0 -3
  381. package/dist/assets/icons/hand-thumbs-down-fill.svg.js +0 -3
  382. package/dist/assets/icons/hand-thumbs-down.svg.js +0 -3
  383. package/dist/assets/icons/hand-thumbs-up-fill.svg.js +0 -3
  384. package/dist/assets/icons/hand-thumbs-up.svg.js +0 -3
  385. package/dist/assets/icons/info-circle-fill.svg.js +0 -3
  386. package/dist/assets/icons/lightbulb-fill.svg.js +0 -3
  387. package/dist/assets/icons/lightbulb-off.svg.js +0 -3
  388. package/dist/assets/icons/lightbulb.svg.js +0 -3
  389. package/dist/assets/icons/mic-fill.svg.js +0 -3
  390. package/dist/assets/icons/mic-mute-fill.svg.js +0 -3
  391. package/dist/assets/icons/paperclip.svg.js +0 -3
  392. package/dist/assets/icons/pencil-square.svg.js +0 -3
  393. package/dist/assets/icons/plus-lg.svg.js +0 -3
  394. package/dist/assets/icons/search.svg.js +0 -3
  395. package/dist/assets/icons/share.svg.js +0 -3
  396. package/dist/assets/icons/sort-alpha-down.svg.js +0 -3
  397. package/dist/assets/icons/sort-alpha-up.svg.js +0 -3
  398. package/dist/assets/icons/stop-circle.svg.js +0 -3
  399. package/dist/assets/icons/tools.svg.js +0 -3
  400. package/dist/assets/icons/x-lg.svg.js +0 -3
  401. package/dist/assets/styles/dark.css.js +0 -3
  402. package/dist/assets/styles/light.css.js +0 -3
  403. package/dist/components/UJsonElement.js +0 -93
  404. package/dist/components/UModalElement.d.ts +0 -70
  405. package/dist/components/UModalElement.js +0 -144
  406. package/dist/components/UModalElement.styles.js +0 -29
  407. package/dist/components/alert/UAlert.component.d.ts +0 -40
  408. package/dist/components/alert/UAlert.component.js +0 -146
  409. package/dist/components/button/UButton.component.d.ts +0 -23
  410. package/dist/components/button/UButton.component.js +0 -72
  411. package/dist/components/card/UCard.component.d.ts +0 -21
  412. package/dist/components/card/UCard.component.js +0 -66
  413. package/dist/components/carousel/UCarousel.component.d.ts +0 -78
  414. package/dist/components/carousel/UCarousel.component.js +0 -264
  415. package/dist/components/dialog/UDialog.component.d.ts +0 -17
  416. package/dist/components/dialog/UDialog.component.js +0 -70
  417. package/dist/components/divider/UDivider.component.d.ts +0 -10
  418. package/dist/components/divider/UDivider.component.js +0 -30
  419. package/dist/components/drawer/UDrawer.component.d.ts +0 -18
  420. package/dist/components/drawer/UDrawer.component.js +0 -64
  421. package/dist/components/form/UForm.component.d.ts +0 -24
  422. package/dist/components/form/UForm.component.js +0 -76
  423. package/dist/components/icon/UIcon.component.d.ts +0 -29
  424. package/dist/components/icon/UIcon.component.js +0 -57
  425. package/dist/components/input/UInput.component.d.ts +0 -92
  426. package/dist/components/input/UInput.component.js +0 -267
  427. package/dist/components/menu/UMenu.component.d.ts +0 -67
  428. package/dist/components/menu/UMenu.component.js +0 -338
  429. package/dist/components/menu-item/UMenuItem.component.d.ts +0 -25
  430. package/dist/components/menu-item/UMenuItem.component.js +0 -111
  431. package/dist/components/progress-bar/UProgressBar.component.d.ts +0 -27
  432. package/dist/components/progress-bar/UProgressBar.component.js +0 -99
  433. package/dist/components/progress-ring/UProgressRing.component.d.ts +0 -33
  434. package/dist/components/progress-ring/UProgressRing.component.js +0 -114
  435. package/dist/components/skeleton/USkeleton.component.d.ts +0 -22
  436. package/dist/components/skeleton/USkeleton.component.js +0 -58
  437. package/dist/components/spinner/USpinner.component.d.ts +0 -9
  438. package/dist/components/spinner/USpinner.component.js +0 -22
  439. package/dist/components/split-panel/USplitPanel.component.d.ts +0 -44
  440. package/dist/components/split-panel/USplitPanel.component.js +0 -185
  441. package/dist/components/tag/UTag.component.d.ts +0 -23
  442. package/dist/components/tag/UTag.component.js +0 -72
  443. package/dist/components/tooltip/UTooltip.component.d.ts +0 -27
  444. package/dist/components/tooltip/UTooltip.component.js +0 -88
  445. package/dist/components/tree/UTree.component.d.ts +0 -37
  446. package/dist/components/tree/UTree.component.js +0 -120
  447. package/dist/components/tree-item/UTreeItem.component.d.ts +0 -41
  448. package/dist/components/tree-item/UTreeItem.component.js +0 -161
  449. package/dist/events/UChangeEvent.d.ts +0 -6
  450. package/dist/events/UHideEvent.d.ts +0 -6
  451. package/dist/events/UInputEvent.d.ts +0 -6
  452. package/dist/events/UResizeEvent.d.ts +0 -6
  453. package/dist/events/USelectEvent.d.ts +0 -6
  454. package/dist/events/UShowEvent.d.ts +0 -6
  455. package/dist/react-components/UAlert.d.ts +0 -8
  456. package/dist/react-components/UForm.d.ts +0 -8
  457. package/dist/react-components/UInput.d.ts +0 -8
  458. package/dist/react-components/UMenu.d.ts +0 -8
  459. package/dist/react-components/UMenuItem.d.ts +0 -8
  460. package/dist/react-components/UProgressBar.d.ts +0 -8
  461. package/dist/react-components/UProgressRing.d.ts +0 -8
  462. package/dist/react-components/USplitPanel.d.ts +0 -8
  463. package/dist/react-components/UTooltip.d.ts +0 -8
  464. package/dist/react-components/UTree.d.ts +0 -8
  465. package/dist/react-components/UTreeItem.d.ts +0 -8
  466. package/dist/utilities/IconRegistry.d.ts +0 -40
  467. package/dist/utilities/IconRegistry.js +0 -134
  468. package/dist/utilities/Notifier.d.ts +0 -31
  469. package/dist/utilities/Notifier.js +0 -79
  470. package/dist/utilities/decorators.d.ts +0 -28
  471. /package/dist/components/{UJsonElement.styles.d.ts → UDataElement.styles.d.ts} +0 -0
  472. /package/dist/components/{UModalElement.styles.d.ts → UFormControlElement.styles.d.ts} +0 -0
@@ -0,0 +1,114 @@
1
+ import { UAlert } from "../components/alert/UAlert.js";
2
+ //#region src/utilities/Toast.ts
3
+ /**
4
+ * 토스트 알림 유틸리티 클래스입니다.
5
+ */
6
+ var Toast = class {
7
+ static {
8
+ this.containers = /* @__PURE__ */ new Map();
9
+ }
10
+ static {
11
+ this.elements = /* @__PURE__ */ new Set();
12
+ }
13
+ /** 개별 인스턴스 생성을 방지합니다. */
14
+ constructor() {}
15
+ /** 기본 메시지 알림 */
16
+ static async message(content, options) {
17
+ return this.show(void 0, content, options);
18
+ }
19
+ /** 일반 알림 */
20
+ static async notice(content, options) {
21
+ return this.show("notice", content, options);
22
+ }
23
+ /** 정보 알림 */
24
+ static async info(content, options) {
25
+ return this.show("info", content, options);
26
+ }
27
+ /** 성공 알림 */
28
+ static async success(content, options) {
29
+ return this.show("success", content, options);
30
+ }
31
+ /** 경고 알림 */
32
+ static async warning(content, options) {
33
+ return this.show("warning", content, options);
34
+ }
35
+ /** 에러 알림 */
36
+ static async error(content, options) {
37
+ return this.show("error", content, options);
38
+ }
39
+ /** 토스트 알림을 생성합니다. */
40
+ static async show(status, content, options) {
41
+ const el = new UAlert();
42
+ el.status = status;
43
+ el.innerHTML = content || "";
44
+ el.variant = options?.variant || "solid";
45
+ el.title = options?.title || "";
46
+ el.closable = options?.closable ?? true;
47
+ el.duration = options?.duration && options.duration > 0 ? options.duration : 3e3;
48
+ this.elements.add(el);
49
+ const position = options?.position || "top-right";
50
+ const target = options?.target || document.body;
51
+ const container = this.getOrCreateContainer(position, target);
52
+ container.appendChild(el);
53
+ await el.updateComplete;
54
+ el.show();
55
+ el.addEventListener("u-hide", async () => {
56
+ await new Promise((resolve) => setTimeout(resolve, 200));
57
+ el.remove();
58
+ this.elements.delete(el);
59
+ if (!container.hasChildNodes()) {
60
+ const containerKey = this.getContainerKey(position, target);
61
+ container.remove();
62
+ this.containers.delete(containerKey);
63
+ }
64
+ });
65
+ }
66
+ /** 컨테이너 키를 생성합니다. */
67
+ static getContainerKey(position, target) {
68
+ return `${position}@${target === document.body ? "body" : target.id || `el-${Date.now()}`}`;
69
+ }
70
+ /** 위치에 맞는 컨테이너 엘리먼트를 가져오거나, 생성합니다. */
71
+ static getOrCreateContainer(position, target) {
72
+ const key = this.getContainerKey(position, target);
73
+ let container = this.containers.get(key);
74
+ if (container) return container;
75
+ container = document.createElement("div");
76
+ container.style.zIndex = "9999";
77
+ container.style.display = "flex";
78
+ container.style.gap = "10px";
79
+ const isTargeted = target !== document.body;
80
+ if (isTargeted) {
81
+ container.style.position = "absolute";
82
+ if (getComputedStyle(target).position === "static") target.style.position = "relative";
83
+ } else container.style.position = "fixed";
84
+ const transformParts = [];
85
+ if (position.startsWith("top")) {
86
+ container.style.top = isTargeted ? "8px" : "20px";
87
+ container.style.flexDirection = "column";
88
+ } else if (position.startsWith("bottom")) {
89
+ container.style.bottom = isTargeted ? "8px" : "20px";
90
+ container.style.flexDirection = "column-reverse";
91
+ } else {
92
+ container.style.top = "50%";
93
+ container.style.flexDirection = "column";
94
+ transformParts.push("translateY(-50%)");
95
+ }
96
+ if (position.endsWith("left")) {
97
+ container.style.left = isTargeted ? "8px" : "20px";
98
+ container.style.alignItems = "flex-start";
99
+ } else if (position.endsWith("right")) {
100
+ container.style.right = isTargeted ? "8px" : "20px";
101
+ container.style.alignItems = "flex-end";
102
+ } else {
103
+ container.style.left = "50%";
104
+ container.style.alignItems = "center";
105
+ transformParts.unshift("translateX(-50%)");
106
+ }
107
+ container.style.transform = transformParts.length ? transformParts.join(" ") : "";
108
+ target.appendChild(container);
109
+ this.containers.set(key, container);
110
+ return container;
111
+ }
112
+ };
113
+ //#endregion
114
+ export { Toast };
@@ -6,7 +6,50 @@
6
6
  * @param separator - 구분자 문자열 (default: `,`)
7
7
  * @returns lit 속성 컨버터 객체
8
8
  */
9
- export declare function arrayAttrConverter<T>(parser: (value: string) => T, separator?: string): {
9
+ export declare function arrayAttrConverter<T>(parser?: (value: string) => T, separator?: string): {
10
10
  fromAttribute: (value: string | null) => T[] | undefined;
11
11
  toAttribute: (value: T[] | undefined) => string | null;
12
12
  };
13
+ /**
14
+ * 문자열을 JSON 객체로, JSON 객체를 문자열로 변환하는 컨버터를 생성합니다.
15
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
16
+ *
17
+ * @param parser - 문자열을 JSON 객체로 파싱하는 함수 (default: `JSON.parse`)
18
+ * @returns lit 속성 컨버터 객체
19
+ */
20
+ export declare function jsonAttrConverter<T>(parser?: (value: string) => T): {
21
+ fromAttribute: (value: string | null) => T | undefined;
22
+ toAttribute: (value: T | undefined) => string | null;
23
+ };
24
+ /**
25
+ * 문자열을 불리언으로, 불리언을 문자열로 변환하는 컨버터를 생성합니다.
26
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
27
+ *
28
+ * @returns lit 속성 컨버터 객체
29
+ */
30
+ export declare function booleanAttrConverter(): {
31
+ fromAttribute: (value: string | null) => boolean;
32
+ toAttribute: (value: boolean) => string | null;
33
+ };
34
+ /**
35
+ * 문자열을 날짜 객체로, 날짜 객체를 문자열로 변환하는 컨버터를 생성합니다.
36
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
37
+ *
38
+ * @param parser - 문자열을 날짜 객체로 파싱하는 함수 (default: `Date.parse`)
39
+ * @returns lit 속성 컨버터 객체
40
+ */
41
+ export declare function dateAttrConverter(parser?: (value: string) => number): {
42
+ fromAttribute: (value: string | null) => Date | undefined;
43
+ toAttribute: (value: Date | undefined) => string | null;
44
+ };
45
+ /**
46
+ * 문자열을 URL 객체로, URL 객체를 문자열로 변환하는 컨버터를 생성합니다.
47
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
48
+ *
49
+ * @param parser - 문자열을 URL 객체로 파싱하는 함수 (default: `new URL()`)
50
+ * @returns lit 속성 컨버터 객체
51
+ */
52
+ export declare function urlAttrConverter(parser?: (value: string) => URL): {
53
+ fromAttribute: (value: string | null) => URL | undefined;
54
+ toAttribute: (value: URL | undefined) => string | null;
55
+ };
@@ -1,14 +1,112 @@
1
- function arrayAttrConverter(parser, separator = ",") {
2
- return {
3
- fromAttribute: (value) => {
4
- if (!value) return void 0;
5
- return value.split(separator).map((v) => parser(v.trim()));
6
- },
7
- toAttribute: (value) => {
8
- if (!value) return null;
9
- return value.join(separator);
10
- }
11
- };
12
- }
13
-
14
- export { arrayAttrConverter };
1
+ //#region src/utilities/converters.ts
2
+ /**
3
+ * 배열을 속성 문자열로, 속성 문자열을 배열로 변환하는 컨버터를 생성합니다.
4
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
5
+ *
6
+ * @param parser - 문자열을 파싱하는 함수
7
+ * @param separator - 구분자 문자열 (default: `,`)
8
+ * @returns lit 속성 컨버터 객체
9
+ */
10
+ function arrayAttrConverter(parser = (value) => value, separator = ",") {
11
+ return {
12
+ fromAttribute: (value) => {
13
+ if (!value) return void 0;
14
+ return value.split(separator).map((v) => parser(v.trim()));
15
+ },
16
+ toAttribute: (value) => {
17
+ if (!value) return null;
18
+ return value.join(separator);
19
+ }
20
+ };
21
+ }
22
+ /**
23
+ * 문자열을 JSON 객체로, JSON 객체를 문자열로 변환하는 컨버터를 생성합니다.
24
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
25
+ *
26
+ * @param parser - 문자열을 JSON 객체로 파싱하는 함수 (default: `JSON.parse`)
27
+ * @returns lit 속성 컨버터 객체
28
+ */
29
+ function jsonAttrConverter(parser = JSON.parse) {
30
+ return {
31
+ fromAttribute: (value) => {
32
+ if (!value) return void 0;
33
+ try {
34
+ return parser(value);
35
+ } catch {
36
+ console.warn(`Failed to parse JSON attribute: ${value}`);
37
+ return;
38
+ }
39
+ },
40
+ toAttribute: (value) => {
41
+ if (value === void 0) return null;
42
+ try {
43
+ return JSON.stringify(value);
44
+ } catch {
45
+ console.warn(`Failed to stringify JSON attribute:`, value);
46
+ return null;
47
+ }
48
+ }
49
+ };
50
+ }
51
+ /**
52
+ * 문자열을 불리언으로, 불리언을 문자열로 변환하는 컨버터를 생성합니다.
53
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
54
+ *
55
+ * @returns lit 속성 컨버터 객체
56
+ */
57
+ function booleanAttrConverter() {
58
+ return {
59
+ fromAttribute: (value) => {
60
+ return !value || value === "false" ? false : true;
61
+ },
62
+ toAttribute: (value) => {
63
+ return value ? "" : null;
64
+ }
65
+ };
66
+ }
67
+ /**
68
+ * 문자열을 날짜 객체로, 날짜 객체를 문자열로 변환하는 컨버터를 생성합니다.
69
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
70
+ *
71
+ * @param parser - 문자열을 날짜 객체로 파싱하는 함수 (default: `Date.parse`)
72
+ * @returns lit 속성 컨버터 객체
73
+ */
74
+ function dateAttrConverter(parser = Date.parse) {
75
+ return {
76
+ fromAttribute: (value) => {
77
+ if (!value) return void 0;
78
+ const timestamp = parser(value);
79
+ return isNaN(timestamp) ? void 0 : new Date(timestamp);
80
+ },
81
+ toAttribute: (value) => {
82
+ if (!value) return null;
83
+ return value.toISOString();
84
+ }
85
+ };
86
+ }
87
+ /**
88
+ * 문자열을 URL 객체로, URL 객체를 문자열로 변환하는 컨버터를 생성합니다.
89
+ * `lit-element`의 `property` 데코레이터에서 사용할 수 있습니다.
90
+ *
91
+ * @param parser - 문자열을 URL 객체로 파싱하는 함수 (default: `new URL()`)
92
+ * @returns lit 속성 컨버터 객체
93
+ */
94
+ function urlAttrConverter(parser = (value) => new URL(value)) {
95
+ return {
96
+ fromAttribute: (value) => {
97
+ if (!value) return void 0;
98
+ try {
99
+ return parser(value);
100
+ } catch {
101
+ console.warn(`Failed to parse URL attribute: ${value}`);
102
+ return;
103
+ }
104
+ },
105
+ toAttribute: (value) => {
106
+ if (!value) return null;
107
+ return value.href;
108
+ }
109
+ };
110
+ }
111
+ //#endregion
112
+ export { arrayAttrConverter, booleanAttrConverter, dateAttrConverter, jsonAttrConverter, urlAttrConverter };
@@ -1,42 +1,71 @@
1
- import { escapeHtmlHref, escapeHtmlAttr } from './sanitizers.js';
2
-
1
+ import { escapeHtmlAttr, escapeHtmlHref } from "./sanitizers.js";
2
+ //#region src/utilities/elements.ts
3
+ /**
4
+ * 엘리먼트의 부모 엘리먼트를 반환합니다.
5
+ * - Shadow DOM을 지원하는 경우, Shadow DOM의 호스트 엘리먼트를 반환합니다.
6
+ * - 일반 DOM 엘리먼트인 경우, 해당 엘리먼트를 반환합니다.
7
+ * - 찾을 수 없는 경우 undefined을 반환합니다.
8
+ */
3
9
  function getParentElement(element) {
4
- if (element.parentElement) {
5
- return element.parentElement;
6
- } else {
7
- const root = element.getRootNode({ composed: false });
8
- return root instanceof Document ? root.documentElement : root instanceof ShadowRoot ? root.host : root instanceof HTMLElement ? root : void 0;
9
- }
10
+ if (element.parentElement) return element.parentElement;
11
+ else {
12
+ const root = element.getRootNode({ composed: false });
13
+ return root instanceof Document ? root.documentElement : root instanceof ShadowRoot ? root.host : root instanceof HTMLElement ? root : void 0;
14
+ }
10
15
  }
16
+ /**
17
+ * element의 root를 기준으로 selector와 매치되는 첫번째 HTMLElement를 반환합니다.
18
+ * - 탐색은 element가 존재하는 shadow DOM 또는 document 루트 범위에서 이루어집니다.
19
+ */
11
20
  function querySelectorWithin(element, selectors) {
12
- if (!selectors) return null;
13
- const rootNode = element.getRootNode({ composed: false });
14
- if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {
15
- return rootNode.querySelector(selectors);
16
- } else {
17
- return null;
18
- }
21
+ if (!selectors) return null;
22
+ const rootNode = element.getRootNode({ composed: false });
23
+ if (rootNode instanceof ShadowRoot || rootNode instanceof Document) return rootNode.querySelector(selectors);
24
+ else return null;
19
25
  }
26
+ /**
27
+ * element의 root를 기준으로 selector와 매치되는 모든 HTMLElement를 반환합니다.
28
+ * - 탐색은 element가 존재하는 shadow DOM 또는 document 루트 범위에서 이루어집니다.
29
+ */
20
30
  function querySelectorAllWithin(element, selectors) {
21
- if (!selectors) return [];
22
- const rootNode = element.getRootNode({ composed: false });
23
- if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {
24
- const nodeList = rootNode.querySelectorAll(selectors);
25
- return Array.from(nodeList);
26
- } else {
27
- return [];
28
- }
31
+ if (!selectors) return [];
32
+ const rootNode = element.getRootNode({ composed: false });
33
+ if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {
34
+ const nodeList = rootNode.querySelectorAll(selectors);
35
+ return Array.from(nodeList);
36
+ } else return [];
29
37
  }
38
+ /**
39
+ * 지정한 태그, 속성, 내용으로 커스텀 엘리먼트 HTML 문자열을 생성합니다.
40
+ *
41
+ * 속성 값 처리 규칙:
42
+ * - `null` / `undefined` → 해당 속성 생략
43
+ * - `false` (boolean) → 해당 속성 생략
44
+ * - `true` (boolean) → 값 없이 키만 출력 (예: `disabled`)
45
+ * - `object` → `JSON.stringify` 후 `escapeHtmlAttr`
46
+ * - `href` / `src` 키 → `escapeHtmlHref` 적용
47
+ * - 그 외 string → `escapeHtmlAttr` 적용
48
+ *
49
+ * `content`는 이미 안전한 HTML 문자열이라고 가정합니다 (내부 escape 없음).
50
+ *
51
+ * @param tag - 커스텀 엘리먼트 태그 이름 (예: `"u-ref-tag"`)
52
+ * @param attrs - 속성 객체
53
+ * @param content - 내부 HTML 문자열 (기본값: `""`)
54
+ * @returns 생성된 HTML 문자열
55
+ *
56
+ * @example
57
+ * buildElementHTML('u-ref-tag', { href: 'https://example.com', disabled: true }, 'Click');
58
+ * // → '<u-ref-tag href="https://example.com" disabled>Click</u-ref-tag>'
59
+ */
30
60
  function buildElementHTML(tag, attrs = {}, content = "") {
31
- const URL_ATTR = /* @__PURE__ */ new Set(["href", "src"]);
32
- const attrStr = Object.entries(attrs).flatMap(([k, v]) => {
33
- if (v === void 0 || v == null || v === false) return [];
34
- if (v === true) return [k];
35
- const raw = typeof v === "object" ? JSON.stringify(v) : String(v);
36
- const escaped = URL_ATTR.has(k) ? escapeHtmlHref(raw) : escapeHtmlAttr(raw);
37
- return [`${k}="${escaped}"`];
38
- }).join(" ");
39
- return attrStr ? `<${tag} ${attrStr}>${content}</${tag}>` : `<${tag}>${content}</${tag}>`;
61
+ const URL_ATTR = new Set(["href", "src"]);
62
+ const attrStr = Object.entries(attrs).flatMap(([k, v]) => {
63
+ if (v === void 0 || v == null || v === false) return [];
64
+ if (v === true) return [k];
65
+ const raw = typeof v === "object" ? JSON.stringify(v) : String(v);
66
+ return [`${k}="${URL_ATTR.has(k) ? escapeHtmlHref(raw) : escapeHtmlAttr(raw)}"`];
67
+ }).join(" ");
68
+ return attrStr ? `<${tag} ${attrStr}>${content}</${tag}>` : `<${tag}>${content}</${tag}>`;
40
69
  }
41
-
70
+ //#endregion
42
71
  export { buildElementHTML, getParentElement, querySelectorAllWithin, querySelectorWithin };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * 기본 라이브러리에서 아이콘을 로드할 때 사용할 기본 URL을 반환합니다.
3
+ */
4
+ declare function getDefaultBaseUrl(): string;
5
+ /**
6
+ * 기본 라이브러리에서 아이콘을 로드할 때 사용할 기본 URL을 설정합니다.
7
+ *
8
+ * @param url - 아이콘 리소스의 기본 URL (예: `/assets/icons/` 또는 `https://cdn.example.com/icons/`)
9
+ */
10
+ declare function setDefaultBaseUrl(url: string): void;
11
+ /**
12
+ * `name`으로 아이콘 리소스를 가져오는 함수입니다.
13
+ */
14
+ type IconResolver = (name: string) => string | undefined | Promise<string | undefined>;
15
+ /**
16
+ * 아이콘 리소스 캐시입니다.
17
+ * lib + name 조합으로 SVG 리소스를 저장/조회합니다.
18
+ */
19
+ declare class IconCache {
20
+ private static cache;
21
+ /** 클래스 생성 방지 */
22
+ private constructor();
23
+ private static makeKey;
24
+ /**
25
+ * 지정된 lib, name 조합의 리소스가 존재하는지 확인합니다.
26
+ */
27
+ static has(lib: string, name: string): boolean;
28
+ /**
29
+ * 지정된 lib, name 조합의 리소스를 가져옵니다.
30
+ */
31
+ static get(lib: string, name: string): string | undefined;
32
+ /**
33
+ * 지정된 lib, name 조합의 리소스를 저장합니다.
34
+ */
35
+ static set(lib: string, name: string, resource: string): void;
36
+ /**
37
+ * 전체 캐시를 비웁니다.
38
+ */
39
+ static clear(): void;
40
+ }
41
+ /**
42
+ * 아이콘 레지스트리입니다.
43
+ * 아이콘 라이브러리를 등록하고, 아이콘을 조회하는 기능을 제공합니다.
44
+ */
45
+ declare class IconRegistry {
46
+ private static libs;
47
+ /** 클래스 생성 방지 */
48
+ private constructor();
49
+ /**
50
+ * 지정된 아이콘 라이브러리가 등록되었는지 확인합니다.
51
+ */
52
+ static has(lib: string): boolean;
53
+ /**
54
+ * 지정된 아이콘 라이브러리를 등록합니다.
55
+ * 이미 등록된 라이브러리 이름인 경우, 경고 메시지를 출력합니다.
56
+ */
57
+ static register(lib: string, resolver: IconResolver): void;
58
+ /**
59
+ * 지정된 아이콘 라이브러리를 등록 해제합니다.
60
+ */
61
+ static unregister(lib: string): void;
62
+ /**
63
+ * 지정된 아이콘 라이브러리의 svg 아이콘 소스를 가져옵니다.
64
+ */
65
+ static resolve(lib: string, name: string): Promise<string | undefined>;
66
+ }
67
+ export { getDefaultBaseUrl, setDefaultBaseUrl, IconCache, IconRegistry, };
@@ -0,0 +1,200 @@
1
+ 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 chevron_down_svg_default from "../_virtual/_glob-assets_raw/chevron-down.svg.0ccd06ea.js";
5
+ import chevron_left_svg_default from "../_virtual/_glob-assets_raw/chevron-left.svg.b4601050.js";
6
+ import chevron_right_svg_default from "../_virtual/_glob-assets_raw/chevron-right.svg.0711bb67.js";
7
+ 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";
12
+ import eye_svg_default from "../_virtual/_glob-assets_raw/eye.svg.2e5e9c4c.js";
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";
15
+ import search_svg_default from "../_virtual/_glob-assets_raw/search.svg.0ba2012d.js";
16
+ import star_fill_svg_default from "../_virtual/_glob-assets_raw/star-fill.svg.f24b5a2d.js";
17
+ 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";
21
+ //#region src/utilities/icons.ts
22
+ var defaultIconBaseUrl = "/assets/icons/";
23
+ /**
24
+ * 기본 라이브러리에서 아이콘을 로드할 때 사용할 기본 URL을 반환합니다.
25
+ */
26
+ function getDefaultBaseUrl() {
27
+ return defaultIconBaseUrl;
28
+ }
29
+ /**
30
+ * 기본 라이브러리에서 아이콘을 로드할 때 사용할 기본 URL을 설정합니다.
31
+ *
32
+ * @param url - 아이콘 리소스의 기본 URL (예: `/assets/icons/` 또는 `https://cdn.example.com/icons/`)
33
+ */
34
+ function setDefaultBaseUrl(url) {
35
+ defaultIconBaseUrl = url;
36
+ }
37
+ /**
38
+ * vite의 `import.meta.glob`을 사용하여 내부 경로상의 모든 SVG 파일을 빌드 시점에 한 번에 로드합니다.
39
+ * 이 레지스트리는 런타임 동안 불변이며, 아이콘 조회 시 재사용됩니다.
40
+ */
41
+ var internalIconBundle = new Map(Object.entries(/* @__PURE__ */ Object.assign({
42
+ "../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,
45
+ "../assets/icons/chevron-down.svg": chevron_down_svg_default,
46
+ "../assets/icons/chevron-left.svg": chevron_left_svg_default,
47
+ "../assets/icons/chevron-right.svg": chevron_right_svg_default,
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,
53
+ "../assets/icons/eye.svg": eye_svg_default,
54
+ "../assets/icons/info-circle-fill.svg": info_circle_fill_svg_default,
55
+ "../assets/icons/plus-lg.svg": plus_lg_svg_default,
56
+ "../assets/icons/search.svg": search_svg_default,
57
+ "../assets/icons/star-fill.svg": star_fill_svg_default,
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
62
+ })).map(([path, module]) => {
63
+ return [path.split("/").pop()?.replace(".svg", "") || "", module];
64
+ }).filter(([name]) => name !== ""));
65
+ /**
66
+ * 아이콘 리소스 캐시입니다.
67
+ * lib + name 조합으로 SVG 리소스를 저장/조회합니다.
68
+ */
69
+ var IconCache = class {
70
+ static {
71
+ this.cache = /* @__PURE__ */ new Map();
72
+ }
73
+ /** 클래스 생성 방지 */
74
+ constructor() {}
75
+ static makeKey(lib, name) {
76
+ return `${lib}:${name}`;
77
+ }
78
+ /**
79
+ * 지정된 lib, name 조합의 리소스가 존재하는지 확인합니다.
80
+ */
81
+ static has(lib, name) {
82
+ return this.cache.has(this.makeKey(lib, name));
83
+ }
84
+ /**
85
+ * 지정된 lib, name 조합의 리소스를 가져옵니다.
86
+ */
87
+ static get(lib, name) {
88
+ return this.cache.get(this.makeKey(lib, name));
89
+ }
90
+ /**
91
+ * 지정된 lib, name 조합의 리소스를 저장합니다.
92
+ */
93
+ static set(lib, name, resource) {
94
+ this.cache.set(this.makeKey(lib, name), resource);
95
+ }
96
+ /**
97
+ * 전체 캐시를 비웁니다.
98
+ */
99
+ static clear() {
100
+ this.cache.clear();
101
+ }
102
+ };
103
+ /**
104
+ * 아이콘 레지스트리입니다.
105
+ * 아이콘 라이브러리를 등록하고, 아이콘을 조회하는 기능을 제공합니다.
106
+ */
107
+ var IconRegistry = class {
108
+ static {
109
+ this.libs = /* @__PURE__ */ new Map();
110
+ }
111
+ /** 클래스 생성 방지 */
112
+ constructor() {}
113
+ /**
114
+ * 지정된 아이콘 라이브러리가 등록되었는지 확인합니다.
115
+ */
116
+ static has(lib) {
117
+ return this.libs.has(lib);
118
+ }
119
+ /**
120
+ * 지정된 아이콘 라이브러리를 등록합니다.
121
+ * 이미 등록된 라이브러리 이름인 경우, 경고 메시지를 출력합니다.
122
+ */
123
+ 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);
126
+ }
127
+ /**
128
+ * 지정된 아이콘 라이브러리를 등록 해제합니다.
129
+ */
130
+ static unregister(lib) {
131
+ this.libs.delete(lib);
132
+ }
133
+ /**
134
+ * 지정된 아이콘 라이브러리의 svg 아이콘 소스를 가져옵니다.
135
+ */
136
+ static async resolve(lib, name) {
137
+ const resolver = this.libs.get(lib);
138
+ if (!resolver) return void 0;
139
+ return (await resolver(name))?.trim();
140
+ }
141
+ };
142
+ IconRegistry.register("internal", (name) => {
143
+ return internalIconBundle.get(name);
144
+ });
145
+ IconRegistry.register("tabler", async (name) => {
146
+ if (IconCache.has("tabler", name)) return IconCache.get("tabler", name);
147
+ try {
148
+ const [iconName, style = "outline"] = name.split(":");
149
+ const url = `https://cdn.jsdelivr.net/npm/@tabler/icons@3.40.0/icons/${style}/${iconName}.svg`;
150
+ const response = await fetch(url);
151
+ if (!response.ok) return void 0;
152
+ const svg = await response.text();
153
+ IconCache.set("tabler", name, svg);
154
+ return svg;
155
+ } catch {
156
+ return;
157
+ }
158
+ });
159
+ IconRegistry.register("heroicons", async (name) => {
160
+ if (IconCache.has("heroicons", name)) return IconCache.get("heroicons", name);
161
+ try {
162
+ const [iconName, style = "outline", size = "24"] = name.split(":");
163
+ const url = `https://cdn.jsdelivr.net/npm/heroicons@2.2.0/${size}/${style}/${iconName}.svg`;
164
+ const response = await fetch(url);
165
+ if (!response.ok) return void 0;
166
+ const svg = await response.text();
167
+ IconCache.set("heroicons", name, svg);
168
+ return svg;
169
+ } catch {
170
+ return;
171
+ }
172
+ });
173
+ IconRegistry.register("lucide", async (name) => {
174
+ if (IconCache.has("lucide", name)) return IconCache.get("lucide", name);
175
+ try {
176
+ const url = `https://cdn.jsdelivr.net/npm/lucide-static@0.577.0/icons/${name}.svg`;
177
+ const response = await fetch(url);
178
+ if (!response.ok) return void 0;
179
+ const svg = await response.text();
180
+ IconCache.set("lucide", name, svg);
181
+ return svg;
182
+ } catch {
183
+ return;
184
+ }
185
+ });
186
+ IconRegistry.register("bootstrap", async (name) => {
187
+ if (IconCache.has("bootstrap", name)) return IconCache.get("bootstrap", name);
188
+ try {
189
+ const url = `https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/${name}.svg`;
190
+ const response = await fetch(url);
191
+ if (!response.ok) return void 0;
192
+ const svg = await response.text();
193
+ IconCache.set("bootstrap", name, svg);
194
+ return svg;
195
+ } catch (error) {
196
+ return;
197
+ }
198
+ });
199
+ //#endregion
200
+ export { IconCache, IconRegistry, getDefaultBaseUrl, setDefaultBaseUrl };