@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,144 +1,137 @@
1
- import * as dark from '../assets/styles/dark.css.js';
2
- import * as light from '../assets/styles/light.css.js';
3
- import { BrowserStorage } from './BrowserStorage.js';
4
-
5
- const styleSheetBundle = Object.entries(/* #__PURE__ */ Object.assign({"../assets/styles/dark.css": dark,"../assets/styles/light.css": light
6
-
7
-
1
+ import { BrowserStorage } from "./BrowserStorage.js";
2
+ import dark_css_default from "../_virtual/_glob-assets_raw/dark.css.e8ac080d.js";
3
+ import light_css_default from "../_virtual/_glob-assets_raw/light.css.637cb2f8.js";
4
+ //#region src/utilities/Theme.ts
5
+ /**
6
+ * 스타일 시트 번들 로드, 내부 자산에서 CSS를 인라인으로 가져옵니다.
7
+ * 빌드 시점에 정적 파일을 포함시키기 위해 vite의 `import.meta.glob`을 사용합니다.
8
+ */
9
+ var internalStyleBundle = Object.entries(/* @__PURE__ */ Object.assign({
10
+ "../assets/styles/dark.css": dark_css_default,
11
+ "../assets/styles/light.css": light_css_default
8
12
  })).map(([path, module]) => {
9
- const name = path.split("/").pop()?.replace(".css", "") || "";
10
- return [name, module.default];
13
+ return [path.split("/").pop()?.replace(".css", "") || "", module];
11
14
  }).filter(([name]) => name !== "");
12
- class Theme {
13
- static {
14
- this.STORAGE_THEME_KEY = "theme";
15
- }
16
- static {
17
- this.storage = null;
18
- }
19
- static {
20
- this._isInitialized = false;
21
- }
22
- static {
23
- this._isDebugMode = false;
24
- }
25
- /** 개별 인스턴스 생성을 방지합니다. */
26
- constructor() {
27
- }
28
- static get isInitialized() {
29
- return this._isInitialized;
30
- }
31
- static get isDebugMode() {
32
- return this._isDebugMode;
33
- }
34
- /**
35
- * 테마 유틸리티를 초기화합니다.
36
- */
37
- static async init(options) {
38
- this._isDebugMode = options?.debug || false;
39
- this.log("init called", { options });
40
- if (options?.store) {
41
- this.storage = new BrowserStorage(options.store);
42
- this.log("store option provided, initializing BrowserStorage");
43
- } else {
44
- this.storage = null;
45
- this.log("no store option provided, skipping BrowserStorage initialization");
46
- }
47
- const useBuiltIn = options?.useBuiltIn ?? true;
48
- if (useBuiltIn) {
49
- this.log("Import enabled: loading styles via internal assets");
50
- for (let [name, module] of styleSheetBundle) {
51
- const style = document.createElement("style");
52
- style.setAttribute("data-name", name);
53
- style.textContent = module;
54
- if (document.head.querySelector(`style[data-name="${name}"]`)) {
55
- this.log("style already present, skipping", name);
56
- continue;
57
- }
58
- document.head.appendChild(style);
59
- this.log("appended style to head", name);
60
- }
61
- } else {
62
- const styleHead = document.head.querySelectorAll("style[data-name]");
63
- styleHead.forEach((el) => el.remove());
64
- this.log("Import disabled: removed internal styles from head");
65
- }
66
- let theme = options?.default ?? "system";
67
- if (this.storage !== null) {
68
- const savedTheme = await this.storage.get(this.STORAGE_THEME_KEY);
69
- if (savedTheme) {
70
- theme = savedTheme;
71
- this.log("loaded theme from storage", theme);
72
- } else {
73
- this.log("no saved theme in storage, using default", theme);
74
- }
75
- }
76
- this.set(theme);
77
- this._isInitialized = true;
78
- this.log("theme initialized");
79
- }
80
- /**
81
- * 현재 문서에 적용된 테마를 가져옵니다.
82
- */
83
- static get() {
84
- const attr = document.documentElement.getAttribute("data-theme");
85
- switch (attr) {
86
- case "system":
87
- return "system";
88
- case "light":
89
- return "light";
90
- case "dark":
91
- return "dark";
92
- default:
93
- return void 0;
94
- }
95
- }
96
- /**
97
- * 현재 문서에 적용할 테마를 설정합니다.
98
- */
99
- static set(theme) {
100
- try {
101
- const media = window.matchMedia("(prefers-color-scheme: dark)");
102
- if (theme === "system") {
103
- document.documentElement.setAttribute("data-theme", "system");
104
- media.addEventListener("change", this.handleSystemThemeChanged);
105
- this.handleSystemThemeChanged();
106
- this.log("system theme applied (data-theme=system)");
107
- } else if (theme === "dark") {
108
- media.removeEventListener("change", this.handleSystemThemeChanged);
109
- document.documentElement.setAttribute("data-theme", "dark");
110
- document.documentElement.setAttribute("theme", "dark");
111
- this.log("dark theme applied (data-theme=dark, theme=dark)");
112
- } else if (theme === "light") {
113
- media.removeEventListener("change", this.handleSystemThemeChanged);
114
- document.documentElement.setAttribute("data-theme", "light");
115
- document.documentElement.setAttribute("theme", "light");
116
- this.log("light theme applied (data-theme=light, theme=light)");
117
- } else {
118
- throw new Error(`Invalid theme: ${theme}. Use 'light', 'dark', or 'system'.`);
119
- }
120
- } catch (e) {
121
- this.log("Error applying theme:", e);
122
- }
123
- if (this.storage !== null) {
124
- this.storage.set(this.STORAGE_THEME_KEY, theme);
125
- this.log("saved theme to storage", theme);
126
- }
127
- }
128
- static {
129
- /** 시스템 테마 변경을 처리하는 메서드 */
130
- this.handleSystemThemeChanged = (_) => {
131
- if (document.documentElement.getAttribute("data-theme") === "system") {
132
- const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
133
- document.documentElement.setAttribute("theme", isDark ? "dark" : "light");
134
- this.log("system theme changed, applied", isDark ? "dark" : "light");
135
- }
136
- };
137
- }
138
- /** 디버그 모드시 로그 출력 함수 (인스턴스 스코프) */
139
- static log(...args) {
140
- if (this._isDebugMode) console.log("[theme]", ...args);
141
- }
142
- }
143
-
15
+ /**
16
+ * 현재 문서에 테마를 적용하고 관리하는 유틸리티 전역 인스턴스입니다.
17
+ */
18
+ var Theme = class {
19
+ static {
20
+ this.STORAGE_THEME_KEY = "theme";
21
+ }
22
+ static {
23
+ this.storage = null;
24
+ }
25
+ static {
26
+ this._isInitialized = false;
27
+ }
28
+ static {
29
+ this._isDebugMode = false;
30
+ }
31
+ /** 개별 인스턴스 생성을 방지합니다. */
32
+ constructor() {}
33
+ static get isInitialized() {
34
+ return this._isInitialized;
35
+ }
36
+ static get isDebugMode() {
37
+ return this._isDebugMode;
38
+ }
39
+ /**
40
+ * 테마 유틸리티를 초기화합니다.
41
+ */
42
+ static async init(options) {
43
+ this._isDebugMode = options?.debug || false;
44
+ this.log("init called", { options });
45
+ if (options?.store) {
46
+ this.storage = new BrowserStorage(options.store);
47
+ this.log("store option provided, initializing BrowserStorage");
48
+ } else {
49
+ this.storage = null;
50
+ this.log("no store option provided, skipping BrowserStorage initialization");
51
+ }
52
+ if (options?.useBuiltIn ?? true) {
53
+ this.log("Import enabled: loading styles via internal assets");
54
+ for (let [name, module] of internalStyleBundle) {
55
+ const style = document.createElement("style");
56
+ style.setAttribute("data-name", name);
57
+ style.textContent = module;
58
+ if (document.head.querySelector(`style[data-name="${name}"]`)) {
59
+ this.log("style already present, skipping", name);
60
+ continue;
61
+ }
62
+ document.head.appendChild(style);
63
+ this.log("appended style to head", name);
64
+ }
65
+ } else {
66
+ document.head.querySelectorAll("style[data-name]").forEach((el) => el.remove());
67
+ this.log("Import disabled: removed internal styles from head");
68
+ }
69
+ let theme = options?.default ?? "system";
70
+ if (this.storage !== null) {
71
+ const savedTheme = await this.storage.get(this.STORAGE_THEME_KEY);
72
+ if (savedTheme) {
73
+ theme = savedTheme;
74
+ this.log("loaded theme from storage", theme);
75
+ } else this.log("no saved theme in storage, using default", theme);
76
+ }
77
+ this.set(theme);
78
+ this._isInitialized = true;
79
+ this.log("theme initialized");
80
+ }
81
+ /**
82
+ * 현재 문서에 적용된 테마를 가져옵니다.
83
+ */
84
+ static get() {
85
+ switch (document.documentElement.getAttribute("data-theme")) {
86
+ case "system": return "system";
87
+ case "light": return "light";
88
+ case "dark": return "dark";
89
+ default: return;
90
+ }
91
+ }
92
+ /**
93
+ * 현재 문서에 적용할 테마를 설정합니다.
94
+ */
95
+ static set(theme) {
96
+ try {
97
+ const media = window.matchMedia("(prefers-color-scheme: dark)");
98
+ if (theme === "system") {
99
+ document.documentElement.setAttribute("data-theme", "system");
100
+ media.addEventListener("change", this.handleSystemThemeChanged);
101
+ this.handleSystemThemeChanged();
102
+ this.log("system theme applied (data-theme=system)");
103
+ } else if (theme === "dark") {
104
+ media.removeEventListener("change", this.handleSystemThemeChanged);
105
+ document.documentElement.setAttribute("data-theme", "dark");
106
+ document.documentElement.setAttribute("theme", "dark");
107
+ this.log("dark theme applied (data-theme=dark, theme=dark)");
108
+ } else if (theme === "light") {
109
+ media.removeEventListener("change", this.handleSystemThemeChanged);
110
+ document.documentElement.setAttribute("data-theme", "light");
111
+ document.documentElement.setAttribute("theme", "light");
112
+ this.log("light theme applied (data-theme=light, theme=light)");
113
+ } else throw new Error(`Invalid theme: ${theme}. Use 'light', 'dark', or 'system'.`);
114
+ } catch (e) {
115
+ this.log("Error applying theme:", e);
116
+ }
117
+ if (this.storage !== null) {
118
+ this.storage.set(this.STORAGE_THEME_KEY, theme);
119
+ this.log("saved theme to storage", theme);
120
+ }
121
+ }
122
+ static {
123
+ this.handleSystemThemeChanged = (_) => {
124
+ if (document.documentElement.getAttribute("data-theme") === "system") {
125
+ const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
126
+ document.documentElement.setAttribute("theme", isDark ? "dark" : "light");
127
+ this.log("system theme changed, applied", isDark ? "dark" : "light");
128
+ }
129
+ };
130
+ }
131
+ /** 디버그 모드시 로그 출력 함수 (인스턴스 스코프) */
132
+ static log(...args) {
133
+ if (this._isDebugMode) console.log("[theme]", ...args);
134
+ }
135
+ };
136
+ //#endregion
144
137
  export { Theme };
@@ -0,0 +1,45 @@
1
+ import { AlertVariant, AlertStatus } from '../components/alert/UAlert.js';
2
+ /** 토스트 알림의 화면 위치 타입 */
3
+ export type ToastPosition = "top-left" | "top-center" | "top-right" | "middle-left" | "middle-center" | "middle-right" | "bottom-left" | "bottom-center" | "bottom-right";
4
+ /** 토스트 알림 옵션 */
5
+ export interface ToastOptions {
6
+ /** 토스트를 표시할 대상 엘리먼트 (기본: document.body) */
7
+ target?: HTMLElement;
8
+ /** 형태 스타일 */
9
+ variant?: AlertVariant;
10
+ /** 알림 제목 */
11
+ title?: string;
12
+ /** 표시 화면 위치 */
13
+ position?: ToastPosition;
14
+ /** 알림 표시 시간 (밀리초 단위) */
15
+ duration?: number;
16
+ /** 닫기 버튼 표시 여부 */
17
+ closable?: boolean;
18
+ }
19
+ /**
20
+ * 토스트 알림 유틸리티 클래스입니다.
21
+ */
22
+ export declare class Toast {
23
+ private static containers;
24
+ private static elements;
25
+ /** 개별 인스턴스 생성을 방지합니다. */
26
+ private constructor();
27
+ /** 기본 메시지 알림 */
28
+ static message(content: string, options?: ToastOptions): Promise<void>;
29
+ /** 일반 알림 */
30
+ static notice(content: string, options?: ToastOptions): Promise<void>;
31
+ /** 정보 알림 */
32
+ static info(content: string, options?: ToastOptions): Promise<void>;
33
+ /** 성공 알림 */
34
+ static success(content: string, options?: ToastOptions): Promise<void>;
35
+ /** 경고 알림 */
36
+ static warning(content: string, options?: ToastOptions): Promise<void>;
37
+ /** 에러 알림 */
38
+ static error(content: string, options?: ToastOptions): Promise<void>;
39
+ /** 토스트 알림을 생성합니다. */
40
+ static show(status?: AlertStatus, content?: string, options?: ToastOptions): Promise<void>;
41
+ /** 컨테이너 키를 생성합니다. */
42
+ private static getContainerKey;
43
+ /** 위치에 맞는 컨테이너 엘리먼트를 가져오거나, 생성합니다. */
44
+ private static getOrCreateContainer;
45
+ }
@@ -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 };
@@ -15,3 +15,26 @@ export declare function querySelectorWithin(element: Element, selectors: string)
15
15
  * - 탐색은 element가 존재하는 shadow DOM 또는 document 루트 범위에서 이루어집니다.
16
16
  */
17
17
  export declare function querySelectorAllWithin(element: Element, selectors: string): HTMLElement[];
18
+ /**
19
+ * 지정한 태그, 속성, 내용으로 커스텀 엘리먼트 HTML 문자열을 생성합니다.
20
+ *
21
+ * 속성 값 처리 규칙:
22
+ * - `null` / `undefined` → 해당 속성 생략
23
+ * - `false` (boolean) → 해당 속성 생략
24
+ * - `true` (boolean) → 값 없이 키만 출력 (예: `disabled`)
25
+ * - `object` → `JSON.stringify` 후 `escapeHtmlAttr`
26
+ * - `href` / `src` 키 → `escapeHtmlHref` 적용
27
+ * - 그 외 string → `escapeHtmlAttr` 적용
28
+ *
29
+ * `content`는 이미 안전한 HTML 문자열이라고 가정합니다 (내부 escape 없음).
30
+ *
31
+ * @param tag - 커스텀 엘리먼트 태그 이름 (예: `"u-ref-tag"`)
32
+ * @param attrs - 속성 객체
33
+ * @param content - 내부 HTML 문자열 (기본값: `""`)
34
+ * @returns 생성된 HTML 문자열
35
+ *
36
+ * @example
37
+ * buildElementHTML('u-ref-tag', { href: 'https://example.com', disabled: true }, 'Click');
38
+ * // → '<u-ref-tag href="https://example.com" disabled>Click</u-ref-tag>'
39
+ */
40
+ export declare function buildElementHTML(tag: string, attrs?: Record<string, string | boolean | object | null | undefined>, content?: string): string;