@iyulab/components 0.3.0 → 1.0.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 (475) hide show
  1. package/CHANGELOG.md +67 -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/UDataElement.d.ts +44 -0
  28. package/dist/components/UDataElement.js +101 -0
  29. package/dist/components/UDataElement.styles.js +95 -0
  30. package/dist/components/UElement.d.ts +54 -0
  31. package/dist/components/UElement.js +83 -0
  32. package/dist/components/UElement.styles.js +67 -0
  33. package/dist/components/UFloatingElement.d.ts +125 -0
  34. package/dist/components/UFloatingElement.js +238 -0
  35. package/dist/components/UFloatingElement.styles.d.ts +9 -0
  36. package/dist/components/UFloatingElement.styles.js +46 -0
  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 +32 -33
  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 +55 -4
  102. package/dist/components/icon/UIcon.styles.js +5 -5
  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 +151 -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 +315 -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 +145 -0
  176. package/dist/components/textarea/UTextarea.styles.d.ts +1 -0
  177. package/dist/components/textarea/UTextarea.styles.js +157 -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 +41 -8
  197. package/dist/index.js +56 -46
  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.d.ts +23 -0
  296. package/dist/utilities/elements.js +67 -16
  297. package/dist/utilities/icons.d.ts +67 -0
  298. package/dist/utilities/icons.js +200 -0
  299. package/dist/utilities/sanitizers.d.ts +35 -0
  300. package/dist/utilities/sanitizers.js +75 -0
  301. package/package.json +24 -21
  302. package/plugins/vite-plugin-glob-resolve.d.ts +12 -0
  303. package/plugins/vite-plugin-glob-resolve.js +66 -0
  304. package/plugins/vite-plugin-react-wrapper.d.ts +12 -0
  305. package/plugins/vite-plugin-react-wrapper.js +206 -0
  306. package/skills/iyulab-components/SKILL.md +138 -0
  307. package/skills/iyulab-components/references/components/alert.md +74 -0
  308. package/skills/iyulab-components/references/components/avatar.md +41 -0
  309. package/skills/iyulab-components/references/components/badge.md +38 -0
  310. package/skills/iyulab-components/references/components/breadcrumb.md +75 -0
  311. package/skills/iyulab-components/references/components/button-group.md +38 -0
  312. package/skills/iyulab-components/references/components/button.md +56 -0
  313. package/skills/iyulab-components/references/components/card.md +53 -0
  314. package/skills/iyulab-components/references/components/carousel.md +63 -0
  315. package/skills/iyulab-components/references/components/checkbox.md +70 -0
  316. package/skills/iyulab-components/references/components/chip.md +64 -0
  317. package/skills/iyulab-components/references/components/dialog.md +71 -0
  318. package/skills/iyulab-components/references/components/divider.md +56 -0
  319. package/skills/iyulab-components/references/components/drawer.md +63 -0
  320. package/skills/iyulab-components/references/components/field.md +42 -0
  321. package/skills/iyulab-components/references/components/form.md +68 -0
  322. package/skills/iyulab-components/references/components/icon-button.md +56 -0
  323. package/skills/iyulab-components/references/components/icon.md +49 -0
  324. package/skills/iyulab-components/references/components/input.md +95 -0
  325. package/skills/iyulab-components/references/components/menu.md +106 -0
  326. package/skills/iyulab-components/references/components/option.md +70 -0
  327. package/skills/iyulab-components/references/components/panel.md +38 -0
  328. package/skills/iyulab-components/references/components/popover.md +62 -0
  329. package/skills/iyulab-components/references/components/progress-bar.md +61 -0
  330. package/skills/iyulab-components/references/components/progress-ring.md +58 -0
  331. package/skills/iyulab-components/references/components/radio.md +67 -0
  332. package/skills/iyulab-components/references/components/rating.md +74 -0
  333. package/skills/iyulab-components/references/components/select.md +86 -0
  334. package/skills/iyulab-components/references/components/skeleton.md +46 -0
  335. package/skills/iyulab-components/references/components/slider.md +89 -0
  336. package/skills/iyulab-components/references/components/spinner.md +47 -0
  337. package/skills/iyulab-components/references/components/split-panel.md +65 -0
  338. package/skills/iyulab-components/references/components/switch.md +81 -0
  339. package/skills/iyulab-components/references/components/tab-panel.md +93 -0
  340. package/skills/iyulab-components/references/components/tag.md +55 -0
  341. package/skills/iyulab-components/references/components/textarea.md +67 -0
  342. package/skills/iyulab-components/references/components/tooltip.md +58 -0
  343. package/skills/iyulab-components/references/components/tree.md +128 -0
  344. package/skills/iyulab-components/references/extensions/data.md +60 -0
  345. package/skills/iyulab-components/references/extensions/element.md +57 -0
  346. package/skills/iyulab-components/references/extensions/floating.md +60 -0
  347. package/skills/iyulab-components/references/extensions/form-control.md +79 -0
  348. package/skills/iyulab-components/references/extensions/overlay.md +76 -0
  349. package/skills/iyulab-components/references/usage.md +216 -0
  350. package/skills/iyulab-components/references/utilities/browser-storage.md +54 -0
  351. package/skills/iyulab-components/references/utilities/converters.md +42 -0
  352. package/skills/iyulab-components/references/utilities/dialog.md +75 -0
  353. package/skills/iyulab-components/references/utilities/elements.md +55 -0
  354. package/skills/iyulab-components/references/utilities/icons.md +53 -0
  355. package/skills/iyulab-components/references/utilities/overlay-manager.md +34 -0
  356. package/skills/iyulab-components/references/utilities/sanitizers.md +32 -0
  357. package/skills/iyulab-components/references/utilities/theme.md +45 -0
  358. package/skills/iyulab-components/references/utilities/toast.md +58 -0
  359. package/dist/assets/icons/arrow-down.svg.js +0 -3
  360. package/dist/assets/icons/arrow-repeat.svg.js +0 -3
  361. package/dist/assets/icons/arrow-up.svg.js +0 -3
  362. package/dist/assets/icons/ban.svg.js +0 -3
  363. package/dist/assets/icons/bell-fill.svg.js +0 -3
  364. package/dist/assets/icons/box-arrow-up-right.svg.js +0 -3
  365. package/dist/assets/icons/check-circle-fill.svg.js +0 -3
  366. package/dist/assets/icons/check-lg.svg.js +0 -3
  367. package/dist/assets/icons/chevron-down.svg.js +0 -3
  368. package/dist/assets/icons/chevron-left.svg.js +0 -3
  369. package/dist/assets/icons/chevron-right.svg.js +0 -3
  370. package/dist/assets/icons/chevron-up.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/exclamation-circle-fill.svg.js +0 -3
  374. package/dist/assets/icons/exclamation-triangle-fill.svg.js +0 -3
  375. package/dist/assets/icons/eye-slash.svg.js +0 -3
  376. package/dist/assets/icons/eye.svg.js +0 -3
  377. package/dist/assets/icons/file-earmark.svg.js +0 -3
  378. package/dist/assets/icons/flag.svg.js +0 -3
  379. package/dist/assets/icons/globe.svg.js +0 -3
  380. package/dist/assets/icons/hand-thumbs-down-fill.svg.js +0 -3
  381. package/dist/assets/icons/hand-thumbs-down.svg.js +0 -3
  382. package/dist/assets/icons/hand-thumbs-up-fill.svg.js +0 -3
  383. package/dist/assets/icons/hand-thumbs-up.svg.js +0 -3
  384. package/dist/assets/icons/info-circle-fill.svg.js +0 -3
  385. package/dist/assets/icons/lightbulb-fill.svg.js +0 -3
  386. package/dist/assets/icons/lightbulb-off.svg.js +0 -3
  387. package/dist/assets/icons/lightbulb.svg.js +0 -3
  388. package/dist/assets/icons/mic-fill.svg.js +0 -3
  389. package/dist/assets/icons/mic-mute-fill.svg.js +0 -3
  390. package/dist/assets/icons/paperclip.svg.js +0 -3
  391. package/dist/assets/icons/pencil-square.svg.js +0 -3
  392. package/dist/assets/icons/plus-lg.svg.js +0 -3
  393. package/dist/assets/icons/search.svg.js +0 -3
  394. package/dist/assets/icons/share.svg.js +0 -3
  395. package/dist/assets/icons/stop-circle.svg.js +0 -3
  396. package/dist/assets/icons/tools.svg.js +0 -3
  397. package/dist/assets/icons/x-lg.svg.js +0 -3
  398. package/dist/assets/styles/dark.css.js +0 -3
  399. package/dist/assets/styles/light.css.js +0 -3
  400. package/dist/components/BaseElement.d.ts +0 -33
  401. package/dist/components/BaseElement.js +0 -59
  402. package/dist/components/BaseElement.styles.js +0 -28
  403. package/dist/components/FloatingElement.d.ts +0 -104
  404. package/dist/components/FloatingElement.js +0 -195
  405. package/dist/components/FloatingElement.styles.js +0 -23
  406. package/dist/components/ModalElement.d.ts +0 -70
  407. package/dist/components/ModalElement.js +0 -144
  408. package/dist/components/ModalElement.styles.js +0 -29
  409. package/dist/components/alert/UAlert.component.d.ts +0 -40
  410. package/dist/components/alert/UAlert.component.js +0 -146
  411. package/dist/components/button/UButton.component.d.ts +0 -23
  412. package/dist/components/button/UButton.component.js +0 -72
  413. package/dist/components/card/UCard.component.d.ts +0 -21
  414. package/dist/components/card/UCard.component.js +0 -66
  415. package/dist/components/carousel/UCarousel.component.d.ts +0 -67
  416. package/dist/components/carousel/UCarousel.component.js +0 -243
  417. package/dist/components/dialog/UDialog.component.d.ts +0 -17
  418. package/dist/components/dialog/UDialog.component.js +0 -70
  419. package/dist/components/divider/UDivider.component.d.ts +0 -10
  420. package/dist/components/divider/UDivider.component.js +0 -30
  421. package/dist/components/drawer/UDrawer.component.d.ts +0 -18
  422. package/dist/components/drawer/UDrawer.component.js +0 -64
  423. package/dist/components/form/UForm.component.d.ts +0 -24
  424. package/dist/components/form/UForm.component.js +0 -76
  425. package/dist/components/icon/UIcon.component.d.ts +0 -29
  426. package/dist/components/icon/UIcon.component.js +0 -57
  427. package/dist/components/input/UInput.component.d.ts +0 -92
  428. package/dist/components/input/UInput.component.js +0 -267
  429. package/dist/components/menu/UMenu.component.d.ts +0 -67
  430. package/dist/components/menu/UMenu.component.js +0 -338
  431. package/dist/components/menu-item/UMenuItem.component.d.ts +0 -25
  432. package/dist/components/menu-item/UMenuItem.component.js +0 -111
  433. package/dist/components/progress-bar/UProgressBar.component.d.ts +0 -27
  434. package/dist/components/progress-bar/UProgressBar.component.js +0 -99
  435. package/dist/components/progress-ring/UProgressRing.component.d.ts +0 -33
  436. package/dist/components/progress-ring/UProgressRing.component.js +0 -114
  437. package/dist/components/skeleton/USkeleton.component.d.ts +0 -22
  438. package/dist/components/skeleton/USkeleton.component.js +0 -58
  439. package/dist/components/spinner/USpinner.component.d.ts +0 -9
  440. package/dist/components/spinner/USpinner.component.js +0 -22
  441. package/dist/components/split-panel/USplitPanel.component.d.ts +0 -44
  442. package/dist/components/split-panel/USplitPanel.component.js +0 -185
  443. package/dist/components/tag/UTag.component.d.ts +0 -23
  444. package/dist/components/tag/UTag.component.js +0 -72
  445. package/dist/components/tooltip/UTooltip.component.d.ts +0 -27
  446. package/dist/components/tooltip/UTooltip.component.js +0 -88
  447. package/dist/components/tree/UTree.component.d.ts +0 -37
  448. package/dist/components/tree/UTree.component.js +0 -120
  449. package/dist/components/tree-item/UTreeItem.component.d.ts +0 -41
  450. package/dist/components/tree-item/UTreeItem.component.js +0 -161
  451. package/dist/events/UChangeEvent.d.ts +0 -6
  452. package/dist/events/UHideEvent.d.ts +0 -6
  453. package/dist/events/UInputEvent.d.ts +0 -6
  454. package/dist/events/UResizeEvent.d.ts +0 -6
  455. package/dist/events/USelectEvent.d.ts +0 -6
  456. package/dist/events/UShowEvent.d.ts +0 -6
  457. package/dist/react-components/UAlert.d.ts +0 -8
  458. package/dist/react-components/UForm.d.ts +0 -8
  459. package/dist/react-components/UInput.d.ts +0 -8
  460. package/dist/react-components/UMenu.d.ts +0 -8
  461. package/dist/react-components/UMenuItem.d.ts +0 -8
  462. package/dist/react-components/UProgressBar.d.ts +0 -8
  463. package/dist/react-components/UProgressRing.d.ts +0 -8
  464. package/dist/react-components/USplitPanel.d.ts +0 -8
  465. package/dist/react-components/UTooltip.d.ts +0 -8
  466. package/dist/react-components/UTree.d.ts +0 -8
  467. package/dist/react-components/UTreeItem.d.ts +0 -8
  468. package/dist/utilities/IconRegistry.d.ts +0 -40
  469. package/dist/utilities/IconRegistry.js +0 -119
  470. package/dist/utilities/Notifier.d.ts +0 -31
  471. package/dist/utilities/Notifier.js +0 -79
  472. package/dist/utilities/decorators.d.ts +0 -28
  473. /package/dist/components/{BaseElement.styles.d.ts → UDataElement.styles.d.ts} +0 -0
  474. /package/dist/components/{FloatingElement.styles.d.ts → UElement.styles.d.ts} +0 -0
  475. /package/dist/components/{ModalElement.styles.d.ts → UFormControlElement.styles.d.ts} +0 -0
@@ -1,20 +1,71 @@
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
+ */
1
9
  function getParentElement(element) {
2
- if (element.parentElement) {
3
- return element.parentElement;
4
- } else {
5
- const root = element.getRootNode({ composed: false });
6
- return root instanceof Document ? root.documentElement : root instanceof ShadowRoot ? root.host : root instanceof HTMLElement ? root : void 0;
7
- }
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
+ }
8
15
  }
16
+ /**
17
+ * element의 root를 기준으로 selector와 매치되는 첫번째 HTMLElement를 반환합니다.
18
+ * - 탐색은 element가 존재하는 shadow DOM 또는 document 루트 범위에서 이루어집니다.
19
+ */
20
+ function querySelectorWithin(element, selectors) {
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;
25
+ }
26
+ /**
27
+ * element의 root를 기준으로 selector와 매치되는 모든 HTMLElement를 반환합니다.
28
+ * - 탐색은 element가 존재하는 shadow DOM 또는 document 루트 범위에서 이루어집니다.
29
+ */
9
30
  function querySelectorAllWithin(element, selectors) {
10
- if (!selectors) return [];
11
- const rootNode = element.getRootNode({ composed: false });
12
- if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {
13
- const nodeList = rootNode.querySelectorAll(selectors);
14
- return Array.from(nodeList);
15
- } else {
16
- return [];
17
- }
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 [];
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
+ */
60
+ function buildElementHTML(tag, attrs = {}, content = "") {
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}>`;
18
69
  }
19
-
20
- export { getParentElement, querySelectorAllWithin };
70
+ //#endregion
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 };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * HTML 출력 시 XSS 방지를 위한 escape 유틸
3
+ *
4
+ * 컨텍스트에 맞는 함수를 사용해야 합니다.
5
+ *
6
+ * - escapeHtmlText : HTML 텍스트 노드에 삽입할 때
7
+ * - escapeHtmlAttr : HTML attribute 값에 삽입할 때
8
+ * - escapeHtmlHref : href/src 같은 URL attribute에 삽입할 때
9
+ */
10
+ /**
11
+ * Zero Width Space / LTR / RTL mark / BOM 등
12
+ * 화면에 표시되지 않는 유니코드 문자를 제거합니다.
13
+ */
14
+ export declare function stripZeroWidth(value: string): string;
15
+ /**
16
+ * HTML 텍스트 노드(context)에 삽입할 문자열을 escape합니다.
17
+ *
18
+ * 예:
19
+ * <script> → &lt;script&gt;
20
+ */
21
+ export declare function escapeHtmlText(value: string): string;
22
+ /**
23
+ * HTML attribute 값(context)에 삽입할 문자열을 escape합니다.
24
+ *
25
+ * 예:
26
+ * <div title="{value}">
27
+ */
28
+ export declare function escapeHtmlAttr(value: string): string;
29
+ /**
30
+ * href / src attribute용 문자열 처리
31
+ *
32
+ * 예:
33
+ * <a href="{value}">
34
+ */
35
+ export declare function escapeHtmlHref(value: string): string;
@@ -0,0 +1,75 @@
1
+ //#region src/utilities/sanitizers.ts
2
+ /**
3
+ * HTML 출력 시 XSS 방지를 위한 escape 유틸
4
+ *
5
+ * 컨텍스트에 맞는 함수를 사용해야 합니다.
6
+ *
7
+ * - escapeHtmlText : HTML 텍스트 노드에 삽입할 때
8
+ * - escapeHtmlAttr : HTML attribute 값에 삽입할 때
9
+ * - escapeHtmlHref : href/src 같은 URL attribute에 삽입할 때
10
+ */
11
+ /**
12
+ * Zero Width Space / LTR / RTL mark / BOM 등
13
+ * 화면에 표시되지 않는 유니코드 문자를 제거합니다.
14
+ */
15
+ function stripZeroWidth(value) {
16
+ const ZERO_WIDTH_REGEX = /[\u200B\u200C\u200D\u200E\u200F\uFEFF]/g;
17
+ return ZERO_WIDTH_REGEX.test(value) ? value.replace(ZERO_WIDTH_REGEX, "") : value;
18
+ }
19
+ /** HTML text context escape 대상 문자 */
20
+ var HTML_TEXT_ESCAPE_REGEX = /[&<>"']/g;
21
+ /** HTML text context escape용 문자 매핑 */
22
+ var HTML_TEXT_ESCAPE_MAP = {
23
+ "&": "&amp;",
24
+ "<": "&lt;",
25
+ ">": "&gt;",
26
+ "\"": "&quot;",
27
+ "'": "&#39;"
28
+ };
29
+ /**
30
+ * HTML 텍스트 노드(context)에 삽입할 문자열을 escape합니다.
31
+ *
32
+ * 예:
33
+ * <script> → &lt;script&gt;
34
+ */
35
+ function escapeHtmlText(value) {
36
+ return HTML_TEXT_ESCAPE_REGEX.test(value) ? value.replace(HTML_TEXT_ESCAPE_REGEX, (ch) => HTML_TEXT_ESCAPE_MAP[ch]) : value;
37
+ }
38
+ /** HTML attribute escape 대상 문자 */
39
+ var HTML_ATTR_ESCAPE_REGEX = /[&<>"]/g;
40
+ /** HTML attribute escape용 문자 매핑 */
41
+ var HTML_ATTR_ESCAPE_MAP = {
42
+ "&": "&amp;",
43
+ "<": "&lt;",
44
+ ">": "&gt;",
45
+ "\"": "&quot;"
46
+ };
47
+ /**
48
+ * HTML attribute 값(context)에 삽입할 문자열을 escape합니다.
49
+ *
50
+ * 예:
51
+ * <div title="{value}">
52
+ */
53
+ function escapeHtmlAttr(value) {
54
+ return HTML_ATTR_ESCAPE_REGEX.test(value) ? value.replace(HTML_ATTR_ESCAPE_REGEX, (ch) => HTML_ATTR_ESCAPE_MAP[ch]) : value;
55
+ }
56
+ /** protocol 우회 공격 방지를 위한 공백/제어문자 제거 */
57
+ var HREF_STRIP_CHARS_REGEX = /[\u0000-\u001F\u007F\s]+/g;
58
+ /** href/src에서 차단해야 하는 위험 protocol */
59
+ var HREF_UNSAFE_PROTOCOL_REGEX = /^(?:javascript|data|vbscript):/i;
60
+ /**
61
+ * href / src attribute용 문자열 처리
62
+ *
63
+ * 예:
64
+ * <a href="{value}">
65
+ */
66
+ function escapeHtmlHref(value) {
67
+ let normalized = stripZeroWidth(value).trim();
68
+ if (HREF_STRIP_CHARS_REGEX.test(normalized)) normalized = normalized.replace(HREF_STRIP_CHARS_REGEX, "");
69
+ normalized = normalized.replace(/\\/g, "/");
70
+ if (normalized.startsWith("//")) return "#";
71
+ if (HREF_UNSAFE_PROTOCOL_REGEX.test(normalized)) return "#";
72
+ return escapeHtmlAttr(normalized);
73
+ }
74
+ //#endregion
75
+ export { escapeHtmlAttr, escapeHtmlHref, escapeHtmlText, stripZeroWidth };
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": "0.3.0",
4
+ "version": "1.0.0",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "components",
@@ -17,6 +17,9 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
+ "plugins/**/*.js",
21
+ "plugins/**/*.d.ts",
22
+ "skills",
20
23
  "LICENSE",
21
24
  "README.md",
22
25
  "CHANGELOG.md",
@@ -29,43 +32,43 @@
29
32
  "types": "./dist/index.d.ts",
30
33
  "import": "./dist/index.js"
31
34
  },
32
- "./dist/*": {
33
- "types": "./dist/*.d.ts",
34
- "import": "./dist/*"
35
- }
35
+ "./dist/*": "./dist/*",
36
+ "./react": "./dist/react/index.js",
37
+ "./react/*": "./dist/react/*",
38
+ "./styles/*": "./dist/styles/*",
39
+ "./plugins/*": "./plugins/*"
36
40
  },
37
41
  "scripts": {
38
42
  "test": "vite --force",
39
- "build": "eslint && vite build"
43
+ "build:plugins": "tsc -p plugins/tsconfig.json",
44
+ "build": "eslint && vite build && npm run build:plugins"
40
45
  },
41
46
  "dependencies": {
42
- "@floating-ui/dom": "^1.7.5",
43
- "lit": "^3.3.2",
44
- "quill": "2.0.3",
45
- "reflect-metadata": "^0.2.2"
47
+ "@floating-ui/dom": "^1.7.6",
48
+ "@lit/react": "^1.0.8",
49
+ "focus-trap": "^8.0.1",
50
+ "lit": "^3.3.2"
46
51
  },
47
52
  "peerDependencies": {
48
- "@lit/react": ">=1.0.0",
49
53
  "react": ">=18.0.0"
50
54
  },
51
55
  "peerDependenciesMeta": {
52
56
  "react": {
53
57
  "optional": true
54
- },
55
- "@lit/react": {
56
- "optional": true
57
58
  }
58
59
  },
59
60
  "devDependencies": {
60
- "@eslint/js": "^10.0.1",
61
- "@types/node": "^25.3.0",
62
- "eslint": "^10.0.2",
61
+ "@eslint/js": "^9.39.4",
62
+ "@types/node": "^25.5.0",
63
+ "eslint": "^9.39.4",
63
64
  "eslint-plugin-lit": "^2.2.1",
64
- "globals": "^17.3.0",
65
+ "glob": "^13.0.6",
66
+ "globals": "^17.4.0",
67
+ "react": "^19.2.4",
65
68
  "typescript": "^5.9.3",
66
- "typescript-eslint": "^8.56.1",
67
- "vite": "^7.3.1",
69
+ "typescript-eslint": "^8.57.2",
70
+ "vite": "^8.0.3",
68
71
  "vite-plugin-dts": "^4.5.4",
69
- "vite-plugin-static-copy": "^3.2.0"
72
+ "vite-plugin-static-copy": "^4.0.0"
70
73
  }
71
74
  }
@@ -0,0 +1,12 @@
1
+ import type { Plugin } from 'vite';
2
+ /**
3
+ * Rolldown의 preserveModules 모드에서 import.meta.glob의 query 옵션 사용 시
4
+ * 빈 export가 생성되는 문제를 해결하는 플러그인.
5
+ *
6
+ * - `?raw`: 파일 내용을 문자열로 반환
7
+ * - `?inline`: 파일 내용을 문자열로 반환
8
+ * - `?url`: 파일을 asset으로 emit하고 URL을 반환
9
+ *
10
+ * 가상 모듈(\0 prefix)로 변환하여 파일명에 `?`가 포함되는 것을 방지합니다.
11
+ */
12
+ export default function globResolve(): Plugin;
@@ -0,0 +1,66 @@
1
+ import { readFileSync } from 'fs';
2
+ import { resolve, dirname, basename } from 'path';
3
+ import { createHash } from 'crypto';
4
+ const VIRTUAL_PREFIX = '\0glob-assets';
5
+ const SUPPORTED_QUERIES = ['?raw', '?inline', '?url'];
6
+ function shortHash(input) {
7
+ return createHash('md5').update(input).digest('hex').slice(0, 8);
8
+ }
9
+ /**
10
+ * Rolldown의 preserveModules 모드에서 import.meta.glob의 query 옵션 사용 시
11
+ * 빈 export가 생성되는 문제를 해결하는 플러그인.
12
+ *
13
+ * - `?raw`: 파일 내용을 문자열로 반환
14
+ * - `?inline`: 파일 내용을 문자열로 반환
15
+ * - `?url`: 파일을 asset으로 emit하고 URL을 반환
16
+ *
17
+ * 가상 모듈(\0 prefix)로 변환하여 파일명에 `?`가 포함되는 것을 방지합니다.
18
+ */
19
+ export default function globResolve() {
20
+ const idToAbsPath = new Map();
21
+ return {
22
+ name: 'vite:glob-resolve',
23
+ enforce: 'pre',
24
+ resolveId(source, importer) {
25
+ for (const query of SUPPORTED_QUERIES) {
26
+ if (source.endsWith(query)) {
27
+ const rawPath = source.slice(0, -query.length);
28
+ const absPath = importer
29
+ ? resolve(dirname(importer), rawPath)
30
+ : rawPath;
31
+ const name = basename(absPath);
32
+ const hash = shortHash(absPath);
33
+ const queryName = query.slice(1);
34
+ const virtualId = `${VIRTUAL_PREFIX}_${queryName}/${name}.${hash}`;
35
+ idToAbsPath.set(virtualId, absPath);
36
+ return virtualId;
37
+ }
38
+ }
39
+ return null;
40
+ },
41
+ load(id) {
42
+ if (!id.startsWith(VIRTUAL_PREFIX))
43
+ return null;
44
+ const absPath = idToAbsPath.get(id);
45
+ if (!absPath)
46
+ return null;
47
+ // virtualId에서 queryName 추출: "\0glob-assets_{queryName}/..."
48
+ const queryName = id.slice(VIRTUAL_PREFIX.length + 1).split('/')[0];
49
+ if (queryName === 'raw' || queryName === 'inline') {
50
+ const content = readFileSync(absPath, 'utf-8');
51
+ return `export default ${JSON.stringify(content)};`;
52
+ }
53
+ if (queryName === 'url') {
54
+ const source = readFileSync(absPath);
55
+ const fileName = basename(absPath);
56
+ const ref = this.emitFile({
57
+ type: 'asset',
58
+ name: fileName,
59
+ source,
60
+ });
61
+ return `export default import.meta.ROLLUP_FILE_URL_${ref};`;
62
+ }
63
+ return null;
64
+ }
65
+ };
66
+ }
@@ -0,0 +1,12 @@
1
+ import type { Plugin } from 'vite';
2
+ interface PluginOptions {
3
+ /** 컴포넌트 소스 디렉토리 경로 (기본값: 'src/components') */
4
+ input?: string;
5
+ /** React 래퍼 출력 폴더 - 빌드 outDir 기준 상대 경로 (기본값: 'react') */
6
+ output?: string;
7
+ }
8
+ /**
9
+ * Lit Element 컴포넌트를 React 래퍼로 자동 생성하는 Vite 플러그인
10
+ */
11
+ export default function reactWrapperPlugin(options: PluginOptions): Plugin;
12
+ export {};