@hua-labs/ui 1.1.0-alpha.6 → 2.0.0-alpha.10

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 (1624) hide show
  1. package/README.md +78 -67
  2. package/dist/ComponentLayout-btJq4TjA.d.mts +698 -0
  3. package/dist/Modal-LokAqhCz.d.mts +93 -0
  4. package/dist/Switch-BB6GZnqn.d.mts +175 -0
  5. package/dist/advanced/Logo.d.ts +60 -0
  6. package/dist/advanced/Logo.d.ts.map +1 -0
  7. package/dist/advanced/index.d.ts +3 -0
  8. package/dist/advanced/index.d.ts.map +1 -0
  9. package/dist/advanced-dashboard.d.mts +2279 -4
  10. package/dist/advanced-dashboard.js +42 -272
  11. package/dist/advanced-dashboard.js.map +1 -1
  12. package/dist/advanced-dashboard.mjs +2 -1
  13. package/dist/advanced.d.mts +282 -38
  14. package/dist/advanced.d.ts +7 -1
  15. package/dist/advanced.d.ts.map +1 -1
  16. package/dist/advanced.js +72 -272
  17. package/dist/advanced.js.map +1 -1
  18. package/dist/advanced.mjs +32 -1
  19. package/dist/advanced.mjs.map +1 -1
  20. package/dist/chunk-25X3JS5U.mjs +3 -0
  21. package/dist/chunk-25X3JS5U.mjs.map +1 -0
  22. package/dist/chunk-3E7HN3VL.mjs +3 -0
  23. package/dist/chunk-3E7HN3VL.mjs.map +1 -0
  24. package/dist/chunk-62HQZHPY.mjs +3 -0
  25. package/dist/chunk-62HQZHPY.mjs.map +1 -0
  26. package/dist/chunk-63CU4PEU.mjs +3 -0
  27. package/dist/chunk-63CU4PEU.mjs.map +1 -0
  28. package/dist/chunk-64T3XQP3.mjs +3 -0
  29. package/dist/chunk-64T3XQP3.mjs.map +1 -0
  30. package/dist/chunk-6IRMCQLW.mjs +3 -0
  31. package/dist/chunk-6IRMCQLW.mjs.map +1 -0
  32. package/dist/chunk-7G4VTLVB.mjs +3 -0
  33. package/dist/chunk-7G4VTLVB.mjs.map +1 -0
  34. package/dist/chunk-7VET46PU.mjs +11 -0
  35. package/dist/chunk-7VET46PU.mjs.map +1 -0
  36. package/dist/chunk-AAHZFMU6.mjs +3 -0
  37. package/dist/chunk-AAHZFMU6.mjs.map +1 -0
  38. package/dist/chunk-D3CBK5LG.mjs +3 -0
  39. package/dist/chunk-D3CBK5LG.mjs.map +1 -0
  40. package/dist/chunk-D5X7GVHB.mjs +3 -0
  41. package/dist/chunk-D5X7GVHB.mjs.map +1 -0
  42. package/dist/chunk-EQIWSOL7.mjs +3 -0
  43. package/dist/chunk-EQIWSOL7.mjs.map +1 -0
  44. package/dist/chunk-GOBSRBJ5.mjs +3 -0
  45. package/dist/chunk-GOBSRBJ5.mjs.map +1 -0
  46. package/dist/chunk-JBC2S6TU.mjs +3 -0
  47. package/dist/chunk-JBC2S6TU.mjs.map +1 -0
  48. package/dist/chunk-KXXIT5HL.mjs +3 -0
  49. package/dist/chunk-KXXIT5HL.mjs.map +1 -0
  50. package/dist/chunk-LIC2KPD5.mjs +3 -0
  51. package/dist/chunk-LIC2KPD5.mjs.map +1 -0
  52. package/dist/chunk-RIQUV3QZ.mjs +3 -0
  53. package/dist/chunk-RIQUV3QZ.mjs.map +1 -0
  54. package/dist/chunk-RJHCRHFD.mjs +3 -0
  55. package/dist/chunk-RJHCRHFD.mjs.map +1 -0
  56. package/dist/chunk-UUHAXGMO.mjs +1 -0
  57. package/dist/chunk-VWSBJUNI.mjs +3 -0
  58. package/dist/chunk-VWSBJUNI.mjs.map +1 -0
  59. package/dist/chunk-XSAVY7UB.mjs +4 -0
  60. package/dist/chunk-XSAVY7UB.mjs.map +1 -0
  61. package/dist/chunk-YXKMNLYP.mjs +35 -0
  62. package/dist/chunk-YXKMNLYP.mjs.map +1 -0
  63. package/dist/chunk-YYKPPDPT.mjs +13 -0
  64. package/dist/chunk-YYKPPDPT.mjs.map +1 -0
  65. package/dist/common-YLvZxA_K.d.mts +26 -0
  66. package/dist/components/Avatar.d.ts +2 -0
  67. package/dist/components/Avatar.d.ts.map +1 -1
  68. package/dist/components/Badge.d.ts.map +1 -1
  69. package/dist/components/BottomSheet.d.ts +20 -2
  70. package/dist/components/BottomSheet.d.ts.map +1 -1
  71. package/dist/components/Card.d.ts +7 -0
  72. package/dist/components/Card.d.ts.map +1 -1
  73. package/dist/components/Checkbox.d.ts.map +1 -1
  74. package/dist/components/CodeBlock.d.ts +10 -2
  75. package/dist/components/CodeBlock.d.ts.map +1 -1
  76. package/dist/components/Command.d.ts.map +1 -1
  77. package/dist/components/Container.d.ts.map +1 -1
  78. package/dist/components/DatePicker.d.ts +2 -0
  79. package/dist/components/DatePicker.d.ts.map +1 -1
  80. package/dist/components/Divider.d.ts.map +1 -1
  81. package/dist/components/Drawer.d.ts +18 -2
  82. package/dist/components/Drawer.d.ts.map +1 -1
  83. package/dist/components/Dropdown.d.ts.map +1 -1
  84. package/dist/components/EmptyState.d.ts +62 -0
  85. package/dist/components/EmptyState.d.ts.map +1 -0
  86. package/dist/components/FeatureCard.d.ts +9 -3
  87. package/dist/components/FeatureCard.d.ts.map +1 -1
  88. package/dist/components/FormControl.d.ts +115 -0
  89. package/dist/components/FormControl.d.ts.map +1 -0
  90. package/dist/components/HeroSection.d.ts.map +1 -1
  91. package/dist/components/Icon/Icon.d.ts +7 -99
  92. package/dist/components/Icon/Icon.d.ts.map +1 -1
  93. package/dist/components/Icon/IconProvider.d.ts +17 -71
  94. package/dist/components/Icon/IconProvider.d.ts.map +1 -1
  95. package/dist/components/Icon/icon-store.d.ts +3 -1
  96. package/dist/components/Icon/icon-store.d.ts.map +1 -1
  97. package/dist/components/IconsaxGallery/index.d.ts +45 -0
  98. package/dist/components/IconsaxGallery/index.d.ts.map +1 -0
  99. package/dist/components/Input.d.ts +6 -31
  100. package/dist/components/Input.d.ts.map +1 -1
  101. package/dist/components/LoadingSpinner.d.ts.map +1 -1
  102. package/dist/components/Modal.d.ts +14 -0
  103. package/dist/components/Modal.d.ts.map +1 -1
  104. package/dist/components/NumberInput.d.ts +53 -0
  105. package/dist/components/NumberInput.d.ts.map +1 -0
  106. package/dist/components/Panel.d.ts +1 -1
  107. package/dist/components/Panel.d.ts.map +1 -1
  108. package/dist/components/Popover.d.ts +2 -0
  109. package/dist/components/Popover.d.ts.map +1 -1
  110. package/dist/components/Radio.d.ts.map +1 -1
  111. package/dist/components/Select.d.ts.map +1 -1
  112. package/dist/components/Skeleton.d.ts.map +1 -1
  113. package/dist/components/Switch.d.ts.map +1 -1
  114. package/dist/components/Tabs.d.ts.map +1 -1
  115. package/dist/components/Timeline.d.ts +97 -0
  116. package/dist/components/Timeline.d.ts.map +1 -0
  117. package/dist/components/Toast.d.ts.map +1 -1
  118. package/dist/components/dashboard/DashboardSidebar.d.ts +14 -0
  119. package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
  120. package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -1
  121. package/dist/components/dashboard/ProgressCard.d.ts.map +1 -1
  122. package/dist/components/dashboard/QuickActionCard.d.ts +2 -0
  123. package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -1
  124. package/dist/components/dashboard/SummaryCard.d.ts.map +1 -1
  125. package/dist/components/dashboard/YearlyHeatmap.d.ts +30 -0
  126. package/dist/components/dashboard/YearlyHeatmap.d.ts.map +1 -0
  127. package/dist/components/dashboard/index.d.ts +4 -0
  128. package/dist/components/dashboard/index.d.ts.map +1 -1
  129. package/dist/components/dashboard/kanban/KanbanAddCard.d.ts +10 -0
  130. package/dist/components/dashboard/kanban/KanbanAddCard.d.ts.map +1 -0
  131. package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts +10 -0
  132. package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts.map +1 -0
  133. package/dist/components/dashboard/kanban/KanbanBoard.d.ts +10 -0
  134. package/dist/components/dashboard/kanban/KanbanBoard.d.ts.map +1 -0
  135. package/dist/components/dashboard/kanban/KanbanCard.d.ts +10 -0
  136. package/dist/components/dashboard/kanban/KanbanCard.d.ts.map +1 -0
  137. package/dist/components/dashboard/kanban/KanbanColumn.d.ts +10 -0
  138. package/dist/components/dashboard/kanban/KanbanColumn.d.ts.map +1 -0
  139. package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts +10 -0
  140. package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts.map +1 -0
  141. package/dist/components/dashboard/kanban/KanbanContext.d.ts +71 -0
  142. package/dist/components/dashboard/kanban/KanbanContext.d.ts.map +1 -0
  143. package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts +9 -0
  144. package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts.map +1 -0
  145. package/dist/components/dashboard/kanban/index.d.ts +25 -0
  146. package/dist/components/dashboard/kanban/index.d.ts.map +1 -0
  147. package/dist/components/dashboard/kanban/types.d.ts +240 -0
  148. package/dist/components/dashboard/kanban/types.d.ts.map +1 -0
  149. package/dist/components/icons/Forbidden2.d.ts +4 -0
  150. package/dist/components/icons/Forbidden2.d.ts.map +1 -0
  151. package/dist/components/icons/Shuffle.d.ts +4 -0
  152. package/dist/components/icons/Shuffle.d.ts.map +1 -0
  153. package/dist/components/icons/Truck.d.ts +4 -0
  154. package/dist/components/icons/Truck.d.ts.map +1 -0
  155. package/dist/components/icons/index.d.ts +340 -0
  156. package/dist/components/icons/index.d.ts.map +1 -0
  157. package/dist/components/icons-bold/3Dcube.d.ts +4 -0
  158. package/dist/components/icons-bold/3Dcube.d.ts.map +1 -0
  159. package/dist/components/icons-bold/Add.d.ts +4 -0
  160. package/dist/components/icons-bold/Add.d.ts.map +1 -0
  161. package/dist/components/icons-bold/AddCircle.d.ts +4 -0
  162. package/dist/components/icons-bold/AddCircle.d.ts.map +1 -0
  163. package/dist/components/icons-bold/AddSquare.d.ts +4 -0
  164. package/dist/components/icons-bold/AddSquare.d.ts.map +1 -0
  165. package/dist/components/icons-bold/Apple.d.ts +4 -0
  166. package/dist/components/icons-bold/Apple.d.ts.map +1 -0
  167. package/dist/components/icons-bold/Archive.d.ts +4 -0
  168. package/dist/components/icons-bold/Archive.d.ts.map +1 -0
  169. package/dist/components/icons-bold/ArrangeCircle.d.ts +4 -0
  170. package/dist/components/icons-bold/ArrangeCircle.d.ts.map +1 -0
  171. package/dist/components/icons-bold/ArrangeCircle2.d.ts +4 -0
  172. package/dist/components/icons-bold/ArrangeCircle2.d.ts.map +1 -0
  173. package/dist/components/icons-bold/ArrangeSquare.d.ts +4 -0
  174. package/dist/components/icons-bold/ArrangeSquare.d.ts.map +1 -0
  175. package/dist/components/icons-bold/ArrangeSquare2.d.ts +4 -0
  176. package/dist/components/icons-bold/ArrangeSquare2.d.ts.map +1 -0
  177. package/dist/components/icons-bold/Arrow2.d.ts +4 -0
  178. package/dist/components/icons-bold/Arrow2.d.ts.map +1 -0
  179. package/dist/components/icons-bold/Arrow3.d.ts +4 -0
  180. package/dist/components/icons-bold/Arrow3.d.ts.map +1 -0
  181. package/dist/components/icons-bold/ArrowBottom.d.ts +4 -0
  182. package/dist/components/icons-bold/ArrowBottom.d.ts.map +1 -0
  183. package/dist/components/icons-bold/ArrowCircleDown.d.ts +4 -0
  184. package/dist/components/icons-bold/ArrowCircleDown.d.ts.map +1 -0
  185. package/dist/components/icons-bold/ArrowCircleLeft.d.ts +4 -0
  186. package/dist/components/icons-bold/ArrowCircleLeft.d.ts.map +1 -0
  187. package/dist/components/icons-bold/ArrowCircleRight.d.ts +4 -0
  188. package/dist/components/icons-bold/ArrowCircleRight.d.ts.map +1 -0
  189. package/dist/components/icons-bold/ArrowDown.d.ts +4 -0
  190. package/dist/components/icons-bold/ArrowDown.d.ts.map +1 -0
  191. package/dist/components/icons-bold/ArrowDown1.d.ts +4 -0
  192. package/dist/components/icons-bold/ArrowDown1.d.ts.map +1 -0
  193. package/dist/components/icons-bold/ArrowDown2.d.ts +4 -0
  194. package/dist/components/icons-bold/ArrowDown2.d.ts.map +1 -0
  195. package/dist/components/icons-bold/ArrowLeft.d.ts +4 -0
  196. package/dist/components/icons-bold/ArrowLeft.d.ts.map +1 -0
  197. package/dist/components/icons-bold/ArrowLeft1.d.ts +4 -0
  198. package/dist/components/icons-bold/ArrowLeft1.d.ts.map +1 -0
  199. package/dist/components/icons-bold/ArrowLeft2.d.ts +4 -0
  200. package/dist/components/icons-bold/ArrowLeft2.d.ts.map +1 -0
  201. package/dist/components/icons-bold/ArrowLeft3.d.ts +4 -0
  202. package/dist/components/icons-bold/ArrowLeft3.d.ts.map +1 -0
  203. package/dist/components/icons-bold/ArrowRight.d.ts +4 -0
  204. package/dist/components/icons-bold/ArrowRight.d.ts.map +1 -0
  205. package/dist/components/icons-bold/ArrowRight1.d.ts +4 -0
  206. package/dist/components/icons-bold/ArrowRight1.d.ts.map +1 -0
  207. package/dist/components/icons-bold/ArrowRight2.d.ts +4 -0
  208. package/dist/components/icons-bold/ArrowRight2.d.ts.map +1 -0
  209. package/dist/components/icons-bold/ArrowRight3.d.ts +4 -0
  210. package/dist/components/icons-bold/ArrowRight3.d.ts.map +1 -0
  211. package/dist/components/icons-bold/ArrowSquareDown.d.ts +4 -0
  212. package/dist/components/icons-bold/ArrowSquareDown.d.ts.map +1 -0
  213. package/dist/components/icons-bold/ArrowSquareLeft.d.ts +4 -0
  214. package/dist/components/icons-bold/ArrowSquareLeft.d.ts.map +1 -0
  215. package/dist/components/icons-bold/ArrowSquareRight.d.ts +4 -0
  216. package/dist/components/icons-bold/ArrowSquareRight.d.ts.map +1 -0
  217. package/dist/components/icons-bold/ArrowSquareUp.d.ts +4 -0
  218. package/dist/components/icons-bold/ArrowSquareUp.d.ts.map +1 -0
  219. package/dist/components/icons-bold/ArrowSwapHorizontal.d.ts +4 -0
  220. package/dist/components/icons-bold/ArrowSwapHorizontal.d.ts.map +1 -0
  221. package/dist/components/icons-bold/ArrowUp.d.ts +4 -0
  222. package/dist/components/icons-bold/ArrowUp.d.ts.map +1 -0
  223. package/dist/components/icons-bold/ArrowUp1.d.ts +4 -0
  224. package/dist/components/icons-bold/ArrowUp1.d.ts.map +1 -0
  225. package/dist/components/icons-bold/ArrowUp2.d.ts +4 -0
  226. package/dist/components/icons-bold/ArrowUp2.d.ts.map +1 -0
  227. package/dist/components/icons-bold/ArrowUp3.d.ts +4 -0
  228. package/dist/components/icons-bold/ArrowUp3.d.ts.map +1 -0
  229. package/dist/components/icons-bold/AttachCircle.d.ts +4 -0
  230. package/dist/components/icons-bold/AttachCircle.d.ts.map +1 -0
  231. package/dist/components/icons-bold/AttachSquare.d.ts +4 -0
  232. package/dist/components/icons-bold/AttachSquare.d.ts.map +1 -0
  233. package/dist/components/icons-bold/Autobrightness.d.ts +4 -0
  234. package/dist/components/icons-bold/Autobrightness.d.ts.map +1 -0
  235. package/dist/components/icons-bold/BackSquare.d.ts +4 -0
  236. package/dist/components/icons-bold/BackSquare.d.ts.map +1 -0
  237. package/dist/components/icons-bold/Backward.d.ts +4 -0
  238. package/dist/components/icons-bold/Backward.d.ts.map +1 -0
  239. package/dist/components/icons-bold/Backward10Seconds.d.ts +4 -0
  240. package/dist/components/icons-bold/Backward10Seconds.d.ts.map +1 -0
  241. package/dist/components/icons-bold/Backward15Seconds.d.ts +4 -0
  242. package/dist/components/icons-bold/Backward15Seconds.d.ts.map +1 -0
  243. package/dist/components/icons-bold/Backward5Seconds.d.ts +4 -0
  244. package/dist/components/icons-bold/Backward5Seconds.d.ts.map +1 -0
  245. package/dist/components/icons-bold/BatteryDisable.d.ts +4 -0
  246. package/dist/components/icons-bold/BatteryDisable.d.ts.map +1 -0
  247. package/dist/components/icons-bold/BatteryFull.d.ts +4 -0
  248. package/dist/components/icons-bold/BatteryFull.d.ts.map +1 -0
  249. package/dist/components/icons-bold/Bluetooth.d.ts +4 -0
  250. package/dist/components/icons-bold/Bluetooth.d.ts.map +1 -0
  251. package/dist/components/icons-bold/BluetoothCircle.d.ts +4 -0
  252. package/dist/components/icons-bold/BluetoothCircle.d.ts.map +1 -0
  253. package/dist/components/icons-bold/Book.d.ts +4 -0
  254. package/dist/components/icons-bold/Book.d.ts.map +1 -0
  255. package/dist/components/icons-bold/Box.d.ts +4 -0
  256. package/dist/components/icons-bold/Box.d.ts.map +1 -0
  257. package/dist/components/icons-bold/Box2.d.ts +4 -0
  258. package/dist/components/icons-bold/Box2.d.ts.map +1 -0
  259. package/dist/components/icons-bold/Briefcase.d.ts +4 -0
  260. package/dist/components/icons-bold/Briefcase.d.ts.map +1 -0
  261. package/dist/components/icons-bold/Broom.d.ts +4 -0
  262. package/dist/components/icons-bold/Broom.d.ts.map +1 -0
  263. package/dist/components/icons-bold/Cake.d.ts +4 -0
  264. package/dist/components/icons-bold/Cake.d.ts.map +1 -0
  265. package/dist/components/icons-bold/Calculator.d.ts +4 -0
  266. package/dist/components/icons-bold/Calculator.d.ts.map +1 -0
  267. package/dist/components/icons-bold/Camera.d.ts +4 -0
  268. package/dist/components/icons-bold/Camera.d.ts.map +1 -0
  269. package/dist/components/icons-bold/CameraSlash.d.ts +4 -0
  270. package/dist/components/icons-bold/CameraSlash.d.ts.map +1 -0
  271. package/dist/components/icons-bold/CardAdd.d.ts +4 -0
  272. package/dist/components/icons-bold/CardAdd.d.ts.map +1 -0
  273. package/dist/components/icons-bold/CardRemove.d.ts +4 -0
  274. package/dist/components/icons-bold/CardRemove.d.ts.map +1 -0
  275. package/dist/components/icons-bold/CardSlash.d.ts +4 -0
  276. package/dist/components/icons-bold/CardSlash.d.ts.map +1 -0
  277. package/dist/components/icons-bold/CardTick.d.ts +4 -0
  278. package/dist/components/icons-bold/CardTick.d.ts.map +1 -0
  279. package/dist/components/icons-bold/Cards.d.ts +4 -0
  280. package/dist/components/icons-bold/Cards.d.ts.map +1 -0
  281. package/dist/components/icons-bold/Cd.d.ts +4 -0
  282. package/dist/components/icons-bold/Cd.d.ts.map +1 -0
  283. package/dist/components/icons-bold/Check.d.ts +4 -0
  284. package/dist/components/icons-bold/Check.d.ts.map +1 -0
  285. package/dist/components/icons-bold/Chrome.d.ts +4 -0
  286. package/dist/components/icons-bold/Chrome.d.ts.map +1 -0
  287. package/dist/components/icons-bold/CloseCircle.d.ts +4 -0
  288. package/dist/components/icons-bold/CloseCircle.d.ts.map +1 -0
  289. package/dist/components/icons-bold/CloseSquare.d.ts +4 -0
  290. package/dist/components/icons-bold/CloseSquare.d.ts.map +1 -0
  291. package/dist/components/icons-bold/Cloud.d.ts +4 -0
  292. package/dist/components/icons-bold/Cloud.d.ts.map +1 -0
  293. package/dist/components/icons-bold/CloudAdd.d.ts +4 -0
  294. package/dist/components/icons-bold/CloudAdd.d.ts.map +1 -0
  295. package/dist/components/icons-bold/CloudChange.d.ts +4 -0
  296. package/dist/components/icons-bold/CloudChange.d.ts.map +1 -0
  297. package/dist/components/icons-bold/CloudDrizzle.d.ts +4 -0
  298. package/dist/components/icons-bold/CloudDrizzle.d.ts.map +1 -0
  299. package/dist/components/icons-bold/CloudLightning.d.ts +4 -0
  300. package/dist/components/icons-bold/CloudLightning.d.ts.map +1 -0
  301. package/dist/components/icons-bold/CloudNotif.d.ts +4 -0
  302. package/dist/components/icons-bold/CloudNotif.d.ts.map +1 -0
  303. package/dist/components/icons-bold/CloudRemove.d.ts +4 -0
  304. package/dist/components/icons-bold/CloudRemove.d.ts.map +1 -0
  305. package/dist/components/icons-bold/CloudSnow.d.ts +4 -0
  306. package/dist/components/icons-bold/CloudSnow.d.ts.map +1 -0
  307. package/dist/components/icons-bold/CloudSunny.d.ts +4 -0
  308. package/dist/components/icons-bold/CloudSunny.d.ts.map +1 -0
  309. package/dist/components/icons-bold/Code.d.ts +4 -0
  310. package/dist/components/icons-bold/Code.d.ts.map +1 -0
  311. package/dist/components/icons-bold/Code1.d.ts +4 -0
  312. package/dist/components/icons-bold/Code1.d.ts.map +1 -0
  313. package/dist/components/icons-bold/Coin.d.ts +4 -0
  314. package/dist/components/icons-bold/Coin.d.ts.map +1 -0
  315. package/dist/components/icons-bold/Computing.d.ts +4 -0
  316. package/dist/components/icons-bold/Computing.d.ts.map +1 -0
  317. package/dist/components/icons-bold/Convert.d.ts +4 -0
  318. package/dist/components/icons-bold/Convert.d.ts.map +1 -0
  319. package/dist/components/icons-bold/Crown.d.ts +4 -0
  320. package/dist/components/icons-bold/Crown.d.ts.map +1 -0
  321. package/dist/components/icons-bold/Crown1.d.ts +4 -0
  322. package/dist/components/icons-bold/Crown1.d.ts.map +1 -0
  323. package/dist/components/icons-bold/Danger.d.ts +4 -0
  324. package/dist/components/icons-bold/Danger.d.ts.map +1 -0
  325. package/dist/components/icons-bold/DirectDown.d.ts +4 -0
  326. package/dist/components/icons-bold/DirectDown.d.ts.map +1 -0
  327. package/dist/components/icons-bold/DirectLeft.d.ts +4 -0
  328. package/dist/components/icons-bold/DirectLeft.d.ts.map +1 -0
  329. package/dist/components/icons-bold/DirectRight.d.ts +4 -0
  330. package/dist/components/icons-bold/DirectRight.d.ts.map +1 -0
  331. package/dist/components/icons-bold/DirectUp.d.ts +4 -0
  332. package/dist/components/icons-bold/DirectUp.d.ts.map +1 -0
  333. package/dist/components/icons-bold/Dislike.d.ts +4 -0
  334. package/dist/components/icons-bold/Dislike.d.ts.map +1 -0
  335. package/dist/components/icons-bold/DollarSquare.d.ts +4 -0
  336. package/dist/components/icons-bold/DollarSquare.d.ts.map +1 -0
  337. package/dist/components/icons-bold/Drop.d.ts +4 -0
  338. package/dist/components/icons-bold/Drop.d.ts.map +1 -0
  339. package/dist/components/icons-bold/EmojiHappy.d.ts +4 -0
  340. package/dist/components/icons-bold/EmojiHappy.d.ts.map +1 -0
  341. package/dist/components/icons-bold/EmojiNormal.d.ts +4 -0
  342. package/dist/components/icons-bold/EmojiNormal.d.ts.map +1 -0
  343. package/dist/components/icons-bold/EmojiSad.d.ts +4 -0
  344. package/dist/components/icons-bold/EmojiSad.d.ts.map +1 -0
  345. package/dist/components/icons-bold/EmptyWallet.d.ts +4 -0
  346. package/dist/components/icons-bold/EmptyWallet.d.ts.map +1 -0
  347. package/dist/components/icons-bold/Eraser.d.ts +4 -0
  348. package/dist/components/icons-bold/Eraser.d.ts.map +1 -0
  349. package/dist/components/icons-bold/Export.d.ts +4 -0
  350. package/dist/components/icons-bold/Export.d.ts.map +1 -0
  351. package/dist/components/icons-bold/Export1.d.ts +4 -0
  352. package/dist/components/icons-bold/Export1.d.ts.map +1 -0
  353. package/dist/components/icons-bold/Export2.d.ts +4 -0
  354. package/dist/components/icons-bold/Export2.d.ts.map +1 -0
  355. package/dist/components/icons-bold/Export3.d.ts +4 -0
  356. package/dist/components/icons-bold/Export3.d.ts.map +1 -0
  357. package/dist/components/icons-bold/Eye.d.ts +4 -0
  358. package/dist/components/icons-bold/Eye.d.ts.map +1 -0
  359. package/dist/components/icons-bold/EyeSlash.d.ts +4 -0
  360. package/dist/components/icons-bold/EyeSlash.d.ts.map +1 -0
  361. package/dist/components/icons-bold/Facebook.d.ts +4 -0
  362. package/dist/components/icons-bold/Facebook.d.ts.map +1 -0
  363. package/dist/components/icons-bold/Figma.d.ts +4 -0
  364. package/dist/components/icons-bold/Figma.d.ts.map +1 -0
  365. package/dist/components/icons-bold/Filter.d.ts +4 -0
  366. package/dist/components/icons-bold/Filter.d.ts.map +1 -0
  367. package/dist/components/icons-bold/FilterAdd.d.ts +4 -0
  368. package/dist/components/icons-bold/FilterAdd.d.ts.map +1 -0
  369. package/dist/components/icons-bold/FilterEdit.d.ts +4 -0
  370. package/dist/components/icons-bold/FilterEdit.d.ts.map +1 -0
  371. package/dist/components/icons-bold/FilterRemove.d.ts +4 -0
  372. package/dist/components/icons-bold/FilterRemove.d.ts.map +1 -0
  373. package/dist/components/icons-bold/FilterSearch.d.ts +4 -0
  374. package/dist/components/icons-bold/FilterSearch.d.ts.map +1 -0
  375. package/dist/components/icons-bold/FilterTick.d.ts +4 -0
  376. package/dist/components/icons-bold/FilterTick.d.ts.map +1 -0
  377. package/dist/components/icons-bold/FingerCricle.d.ts +4 -0
  378. package/dist/components/icons-bold/FingerCricle.d.ts.map +1 -0
  379. package/dist/components/icons-bold/Firstline.d.ts +4 -0
  380. package/dist/components/icons-bold/Firstline.d.ts.map +1 -0
  381. package/dist/components/icons-bold/Flag.d.ts +4 -0
  382. package/dist/components/icons-bold/Flag.d.ts.map +1 -0
  383. package/dist/components/icons-bold/Flag2.d.ts +4 -0
  384. package/dist/components/icons-bold/Flag2.d.ts.map +1 -0
  385. package/dist/components/icons-bold/Flash.d.ts +4 -0
  386. package/dist/components/icons-bold/Flash.d.ts.map +1 -0
  387. package/dist/components/icons-bold/FlashCircle.d.ts +4 -0
  388. package/dist/components/icons-bold/FlashCircle.d.ts.map +1 -0
  389. package/dist/components/icons-bold/FlashSlash.d.ts +4 -0
  390. package/dist/components/icons-bold/FlashSlash.d.ts.map +1 -0
  391. package/dist/components/icons-bold/Folder.d.ts +4 -0
  392. package/dist/components/icons-bold/Folder.d.ts.map +1 -0
  393. package/dist/components/icons-bold/Folder2.d.ts +4 -0
  394. package/dist/components/icons-bold/Folder2.d.ts.map +1 -0
  395. package/dist/components/icons-bold/FolderAdd.d.ts +4 -0
  396. package/dist/components/icons-bold/FolderAdd.d.ts.map +1 -0
  397. package/dist/components/icons-bold/FolderCloud.d.ts +4 -0
  398. package/dist/components/icons-bold/FolderCloud.d.ts.map +1 -0
  399. package/dist/components/icons-bold/FolderCross.d.ts +4 -0
  400. package/dist/components/icons-bold/FolderCross.d.ts.map +1 -0
  401. package/dist/components/icons-bold/FolderFavorite.d.ts +4 -0
  402. package/dist/components/icons-bold/FolderFavorite.d.ts.map +1 -0
  403. package/dist/components/icons-bold/FolderMinus.d.ts +4 -0
  404. package/dist/components/icons-bold/FolderMinus.d.ts.map +1 -0
  405. package/dist/components/icons-bold/FolderOpen.d.ts +4 -0
  406. package/dist/components/icons-bold/FolderOpen.d.ts.map +1 -0
  407. package/dist/components/icons-bold/Forbidden2.d.ts +4 -0
  408. package/dist/components/icons-bold/Forbidden2.d.ts.map +1 -0
  409. package/dist/components/icons-bold/Forward.d.ts +4 -0
  410. package/dist/components/icons-bold/Forward.d.ts.map +1 -0
  411. package/dist/components/icons-bold/Forward10Seconds.d.ts +4 -0
  412. package/dist/components/icons-bold/Forward10Seconds.d.ts.map +1 -0
  413. package/dist/components/icons-bold/Forward15Seconds.d.ts +4 -0
  414. package/dist/components/icons-bold/Forward15Seconds.d.ts.map +1 -0
  415. package/dist/components/icons-bold/Forward5Seconds.d.ts +4 -0
  416. package/dist/components/icons-bold/Forward5Seconds.d.ts.map +1 -0
  417. package/dist/components/icons-bold/ForwardSquare.d.ts +4 -0
  418. package/dist/components/icons-bold/ForwardSquare.d.ts.map +1 -0
  419. package/dist/components/icons-bold/Frame.d.ts +4 -0
  420. package/dist/components/icons-bold/Frame.d.ts.map +1 -0
  421. package/dist/components/icons-bold/Frame1.d.ts +4 -0
  422. package/dist/components/icons-bold/Frame1.d.ts.map +1 -0
  423. package/dist/components/icons-bold/Gallery.d.ts +4 -0
  424. package/dist/components/icons-bold/Gallery.d.ts.map +1 -0
  425. package/dist/components/icons-bold/GalleryAdd.d.ts +4 -0
  426. package/dist/components/icons-bold/GalleryAdd.d.ts.map +1 -0
  427. package/dist/components/icons-bold/GalleryRemove.d.ts +4 -0
  428. package/dist/components/icons-bold/GalleryRemove.d.ts.map +1 -0
  429. package/dist/components/icons-bold/GallerySlash.d.ts +4 -0
  430. package/dist/components/icons-bold/GallerySlash.d.ts.map +1 -0
  431. package/dist/components/icons-bold/Global.d.ts +4 -0
  432. package/dist/components/icons-bold/Global.d.ts.map +1 -0
  433. package/dist/components/icons-bold/Heart.d.ts +4 -0
  434. package/dist/components/icons-bold/Heart.d.ts.map +1 -0
  435. package/dist/components/icons-bold/Hierarchy.d.ts +4 -0
  436. package/dist/components/icons-bold/Hierarchy.d.ts.map +1 -0
  437. package/dist/components/icons-bold/Hierarchy2.d.ts +4 -0
  438. package/dist/components/icons-bold/Hierarchy2.d.ts.map +1 -0
  439. package/dist/components/icons-bold/Home2.d.ts +4 -0
  440. package/dist/components/icons-bold/Home2.d.ts.map +1 -0
  441. package/dist/components/icons-bold/HomeWifi.d.ts +4 -0
  442. package/dist/components/icons-bold/HomeWifi.d.ts.map +1 -0
  443. package/dist/components/icons-bold/Html3.d.ts +4 -0
  444. package/dist/components/icons-bold/Html3.d.ts.map +1 -0
  445. package/dist/components/icons-bold/Html5.d.ts +4 -0
  446. package/dist/components/icons-bold/Html5.d.ts.map +1 -0
  447. package/dist/components/icons-bold/Image.d.ts +4 -0
  448. package/dist/components/icons-bold/Image.d.ts.map +1 -0
  449. package/dist/components/icons-bold/Import.d.ts +4 -0
  450. package/dist/components/icons-bold/Import.d.ts.map +1 -0
  451. package/dist/components/icons-bold/Import1.d.ts +4 -0
  452. package/dist/components/icons-bold/Import1.d.ts.map +1 -0
  453. package/dist/components/icons-bold/Import2.d.ts +4 -0
  454. package/dist/components/icons-bold/Import2.d.ts.map +1 -0
  455. package/dist/components/icons-bold/InfoCircle.d.ts +4 -0
  456. package/dist/components/icons-bold/InfoCircle.d.ts.map +1 -0
  457. package/dist/components/icons-bold/Information.d.ts +4 -0
  458. package/dist/components/icons-bold/Information.d.ts.map +1 -0
  459. package/dist/components/icons-bold/Instagram.d.ts +4 -0
  460. package/dist/components/icons-bold/Instagram.d.ts.map +1 -0
  461. package/dist/components/icons-bold/JavaScript.d.ts +4 -0
  462. package/dist/components/icons-bold/JavaScript.d.ts.map +1 -0
  463. package/dist/components/icons-bold/LanguageCircle.d.ts +4 -0
  464. package/dist/components/icons-bold/LanguageCircle.d.ts.map +1 -0
  465. package/dist/components/icons-bold/LanguageSquare.d.ts +4 -0
  466. package/dist/components/icons-bold/LanguageSquare.d.ts.map +1 -0
  467. package/dist/components/icons-bold/Like.d.ts +4 -0
  468. package/dist/components/icons-bold/Like.d.ts.map +1 -0
  469. package/dist/components/icons-bold/LikeDislike.d.ts +4 -0
  470. package/dist/components/icons-bold/LikeDislike.d.ts.map +1 -0
  471. package/dist/components/icons-bold/LikeTag.d.ts +4 -0
  472. package/dist/components/icons-bold/LikeTag.d.ts.map +1 -0
  473. package/dist/components/icons-bold/Link.d.ts +4 -0
  474. package/dist/components/icons-bold/Link.d.ts.map +1 -0
  475. package/dist/components/icons-bold/Link1.d.ts +4 -0
  476. package/dist/components/icons-bold/Link1.d.ts.map +1 -0
  477. package/dist/components/icons-bold/Link2.d.ts +4 -0
  478. package/dist/components/icons-bold/Link2.d.ts.map +1 -0
  479. package/dist/components/icons-bold/Link21.d.ts +4 -0
  480. package/dist/components/icons-bold/Link21.d.ts.map +1 -0
  481. package/dist/components/icons-bold/LinkCircle.d.ts +4 -0
  482. package/dist/components/icons-bold/LinkCircle.d.ts.map +1 -0
  483. package/dist/components/icons-bold/LinkSquare.d.ts +4 -0
  484. package/dist/components/icons-bold/LinkSquare.d.ts.map +1 -0
  485. package/dist/components/icons-bold/LocationCross.d.ts +4 -0
  486. package/dist/components/icons-bold/LocationCross.d.ts.map +1 -0
  487. package/dist/components/icons-bold/LocationMinus.d.ts +4 -0
  488. package/dist/components/icons-bold/LocationMinus.d.ts.map +1 -0
  489. package/dist/components/icons-bold/LocationSlash.d.ts +4 -0
  490. package/dist/components/icons-bold/LocationSlash.d.ts.map +1 -0
  491. package/dist/components/icons-bold/LocationTick.d.ts +4 -0
  492. package/dist/components/icons-bold/LocationTick.d.ts.map +1 -0
  493. package/dist/components/icons-bold/Lock.d.ts +4 -0
  494. package/dist/components/icons-bold/Lock.d.ts.map +1 -0
  495. package/dist/components/icons-bold/LockSlash.d.ts +4 -0
  496. package/dist/components/icons-bold/LockSlash.d.ts.map +1 -0
  497. package/dist/components/icons-bold/Login.d.ts +4 -0
  498. package/dist/components/icons-bold/Login.d.ts.map +1 -0
  499. package/dist/components/icons-bold/Login1.d.ts +4 -0
  500. package/dist/components/icons-bold/Login1.d.ts.map +1 -0
  501. package/dist/components/icons-bold/Logout.d.ts +4 -0
  502. package/dist/components/icons-bold/Logout.d.ts.map +1 -0
  503. package/dist/components/icons-bold/Logout1.d.ts +4 -0
  504. package/dist/components/icons-bold/Logout1.d.ts.map +1 -0
  505. package/dist/components/icons-bold/Map.d.ts +4 -0
  506. package/dist/components/icons-bold/Map.d.ts.map +1 -0
  507. package/dist/components/icons-bold/Math.d.ts +4 -0
  508. package/dist/components/icons-bold/Math.d.ts.map +1 -0
  509. package/dist/components/icons-bold/Maximize.d.ts +4 -0
  510. package/dist/components/icons-bold/Maximize.d.ts.map +1 -0
  511. package/dist/components/icons-bold/Menu.d.ts +4 -0
  512. package/dist/components/icons-bold/Menu.d.ts.map +1 -0
  513. package/dist/components/icons-bold/MessageProgramming.d.ts +4 -0
  514. package/dist/components/icons-bold/MessageProgramming.d.ts.map +1 -0
  515. package/dist/components/icons-bold/Microphone.d.ts +4 -0
  516. package/dist/components/icons-bold/Microphone.d.ts.map +1 -0
  517. package/dist/components/icons-bold/Microphone2.d.ts +4 -0
  518. package/dist/components/icons-bold/Microphone2.d.ts.map +1 -0
  519. package/dist/components/icons-bold/MicrophoneSlash.d.ts +4 -0
  520. package/dist/components/icons-bold/MicrophoneSlash.d.ts.map +1 -0
  521. package/dist/components/icons-bold/MicrophoneSlash1.d.ts +4 -0
  522. package/dist/components/icons-bold/MicrophoneSlash1.d.ts.map +1 -0
  523. package/dist/components/icons-bold/Milk.d.ts +4 -0
  524. package/dist/components/icons-bold/Milk.d.ts.map +1 -0
  525. package/dist/components/icons-bold/Minus.d.ts +4 -0
  526. package/dist/components/icons-bold/Minus.d.ts.map +1 -0
  527. package/dist/components/icons-bold/MinusCirlce.d.ts +4 -0
  528. package/dist/components/icons-bold/MinusCirlce.d.ts.map +1 -0
  529. package/dist/components/icons-bold/MinusSquare.d.ts +4 -0
  530. package/dist/components/icons-bold/MinusSquare.d.ts.map +1 -0
  531. package/dist/components/icons-bold/Monitor.d.ts +4 -0
  532. package/dist/components/icons-bold/Monitor.d.ts.map +1 -0
  533. package/dist/components/icons-bold/Moon.d.ts +4 -0
  534. package/dist/components/icons-bold/Moon.d.ts.map +1 -0
  535. package/dist/components/icons-bold/MoreCircle.d.ts +4 -0
  536. package/dist/components/icons-bold/MoreCircle.d.ts.map +1 -0
  537. package/dist/components/icons-bold/MoreSquare.d.ts +4 -0
  538. package/dist/components/icons-bold/MoreSquare.d.ts.map +1 -0
  539. package/dist/components/icons-bold/Mouse.d.ts +4 -0
  540. package/dist/components/icons-bold/Mouse.d.ts.map +1 -0
  541. package/dist/components/icons-bold/MouseCircle.d.ts +4 -0
  542. package/dist/components/icons-bold/MouseCircle.d.ts.map +1 -0
  543. package/dist/components/icons-bold/MouseSquare.d.ts +4 -0
  544. package/dist/components/icons-bold/MouseSquare.d.ts.map +1 -0
  545. package/dist/components/icons-bold/Next.d.ts +4 -0
  546. package/dist/components/icons-bold/Next.d.ts.map +1 -0
  547. package/dist/components/icons-bold/Paperclip.d.ts +4 -0
  548. package/dist/components/icons-bold/Paperclip.d.ts.map +1 -0
  549. package/dist/components/icons-bold/Paperclip2.d.ts +4 -0
  550. package/dist/components/icons-bold/Paperclip2.d.ts.map +1 -0
  551. package/dist/components/icons-bold/PasswordCheck.d.ts +4 -0
  552. package/dist/components/icons-bold/PasswordCheck.d.ts.map +1 -0
  553. package/dist/components/icons-bold/Pause.d.ts +4 -0
  554. package/dist/components/icons-bold/Pause.d.ts.map +1 -0
  555. package/dist/components/icons-bold/PauseCircle.d.ts +4 -0
  556. package/dist/components/icons-bold/PauseCircle.d.ts.map +1 -0
  557. package/dist/components/icons-bold/People.d.ts +4 -0
  558. package/dist/components/icons-bold/People.d.ts.map +1 -0
  559. package/dist/components/icons-bold/Pet.d.ts +4 -0
  560. package/dist/components/icons-bold/Pet.d.ts.map +1 -0
  561. package/dist/components/icons-bold/Pharagraphspacing.d.ts +4 -0
  562. package/dist/components/icons-bold/Pharagraphspacing.d.ts.map +1 -0
  563. package/dist/components/icons-bold/Play.d.ts +4 -0
  564. package/dist/components/icons-bold/Play.d.ts.map +1 -0
  565. package/dist/components/icons-bold/PlayCircle.d.ts +4 -0
  566. package/dist/components/icons-bold/PlayCircle.d.ts.map +1 -0
  567. package/dist/components/icons-bold/Previous.d.ts +4 -0
  568. package/dist/components/icons-bold/Previous.d.ts.map +1 -0
  569. package/dist/components/icons-bold/Printer.d.ts +4 -0
  570. package/dist/components/icons-bold/Printer.d.ts.map +1 -0
  571. package/dist/components/icons-bold/PrinterSlash.d.ts +4 -0
  572. package/dist/components/icons-bold/PrinterSlash.d.ts.map +1 -0
  573. package/dist/components/icons-bold/Profile.d.ts +4 -0
  574. package/dist/components/icons-bold/Profile.d.ts.map +1 -0
  575. package/dist/components/icons-bold/Profile2User.d.ts +4 -0
  576. package/dist/components/icons-bold/Profile2User.d.ts.map +1 -0
  577. package/dist/components/icons-bold/ProfileAdd.d.ts +4 -0
  578. package/dist/components/icons-bold/ProfileAdd.d.ts.map +1 -0
  579. package/dist/components/icons-bold/ProfileCircle.d.ts +4 -0
  580. package/dist/components/icons-bold/ProfileCircle.d.ts.map +1 -0
  581. package/dist/components/icons-bold/ProfileDelete.d.ts +4 -0
  582. package/dist/components/icons-bold/ProfileDelete.d.ts.map +1 -0
  583. package/dist/components/icons-bold/ProfileRemove.d.ts +4 -0
  584. package/dist/components/icons-bold/ProfileRemove.d.ts.map +1 -0
  585. package/dist/components/icons-bold/ProfileTick.d.ts +4 -0
  586. package/dist/components/icons-bold/ProfileTick.d.ts.map +1 -0
  587. package/dist/components/icons-bold/ProgrammingArrow.d.ts +4 -0
  588. package/dist/components/icons-bold/ProgrammingArrow.d.ts.map +1 -0
  589. package/dist/components/icons-bold/QuoteDown.d.ts +4 -0
  590. package/dist/components/icons-bold/QuoteDown.d.ts.map +1 -0
  591. package/dist/components/icons-bold/QuoteDownCircle.d.ts +4 -0
  592. package/dist/components/icons-bold/QuoteDownCircle.d.ts.map +1 -0
  593. package/dist/components/icons-bold/QuoteDownSquare.d.ts +4 -0
  594. package/dist/components/icons-bold/QuoteDownSquare.d.ts.map +1 -0
  595. package/dist/components/icons-bold/QuoteUp.d.ts +4 -0
  596. package/dist/components/icons-bold/QuoteUp.d.ts.map +1 -0
  597. package/dist/components/icons-bold/QuoteUpCircle.d.ts +4 -0
  598. package/dist/components/icons-bold/QuoteUpCircle.d.ts.map +1 -0
  599. package/dist/components/icons-bold/QuoteUpSquare.d.ts +4 -0
  600. package/dist/components/icons-bold/QuoteUpSquare.d.ts.map +1 -0
  601. package/dist/components/icons-bold/Ranking.d.ts +4 -0
  602. package/dist/components/icons-bold/Ranking.d.ts.map +1 -0
  603. package/dist/components/icons-bold/ReceiptDiscount.d.ts +4 -0
  604. package/dist/components/icons-bold/ReceiptDiscount.d.ts.map +1 -0
  605. package/dist/components/icons-bold/ReceiptDisscount.d.ts +4 -0
  606. package/dist/components/icons-bold/ReceiptDisscount.d.ts.map +1 -0
  607. package/dist/components/icons-bold/ReceiptItem.d.ts +4 -0
  608. package/dist/components/icons-bold/ReceiptItem.d.ts.map +1 -0
  609. package/dist/components/icons-bold/ReceiptMinus.d.ts +4 -0
  610. package/dist/components/icons-bold/ReceiptMinus.d.ts.map +1 -0
  611. package/dist/components/icons-bold/ReceiveSquare.d.ts +4 -0
  612. package/dist/components/icons-bold/ReceiveSquare.d.ts.map +1 -0
  613. package/dist/components/icons-bold/ReceiveSquare2.d.ts +4 -0
  614. package/dist/components/icons-bold/ReceiveSquare2.d.ts.map +1 -0
  615. package/dist/components/icons-bold/Received.d.ts +4 -0
  616. package/dist/components/icons-bold/Received.d.ts.map +1 -0
  617. package/dist/components/icons-bold/Record.d.ts +4 -0
  618. package/dist/components/icons-bold/Record.d.ts.map +1 -0
  619. package/dist/components/icons-bold/RecordCircle.d.ts +4 -0
  620. package/dist/components/icons-bold/RecordCircle.d.ts.map +1 -0
  621. package/dist/components/icons-bold/Redo.d.ts +4 -0
  622. package/dist/components/icons-bold/Redo.d.ts.map +1 -0
  623. package/dist/components/icons-bold/Refresh.d.ts +4 -0
  624. package/dist/components/icons-bold/Refresh.d.ts.map +1 -0
  625. package/dist/components/icons-bold/Refresh2.d.ts +4 -0
  626. package/dist/components/icons-bold/Refresh2.d.ts.map +1 -0
  627. package/dist/components/icons-bold/RefreshCircle.d.ts +4 -0
  628. package/dist/components/icons-bold/RefreshCircle.d.ts.map +1 -0
  629. package/dist/components/icons-bold/RefreshLeftSquare.d.ts +4 -0
  630. package/dist/components/icons-bold/RefreshLeftSquare.d.ts.map +1 -0
  631. package/dist/components/icons-bold/RefreshRightSquare.d.ts +4 -0
  632. package/dist/components/icons-bold/RefreshRightSquare.d.ts.map +1 -0
  633. package/dist/components/icons-bold/RefreshSquare2.d.ts +4 -0
  634. package/dist/components/icons-bold/RefreshSquare2.d.ts.map +1 -0
  635. package/dist/components/icons-bold/Repeat.d.ts +4 -0
  636. package/dist/components/icons-bold/Repeat.d.ts.map +1 -0
  637. package/dist/components/icons-bold/RepeatCircle.d.ts +4 -0
  638. package/dist/components/icons-bold/RepeatCircle.d.ts.map +1 -0
  639. package/dist/components/icons-bold/RepeateMusic.d.ts +4 -0
  640. package/dist/components/icons-bold/RepeateMusic.d.ts.map +1 -0
  641. package/dist/components/icons-bold/RepeateOne.d.ts +4 -0
  642. package/dist/components/icons-bold/RepeateOne.d.ts.map +1 -0
  643. package/dist/components/icons-bold/RotateLeft.d.ts +4 -0
  644. package/dist/components/icons-bold/RotateLeft.d.ts.map +1 -0
  645. package/dist/components/icons-bold/RotateRight.d.ts +4 -0
  646. package/dist/components/icons-bold/RotateRight.d.ts.map +1 -0
  647. package/dist/components/icons-bold/SafeHome.d.ts +4 -0
  648. package/dist/components/icons-bold/SafeHome.d.ts.map +1 -0
  649. package/dist/components/icons-bold/Scan.d.ts +4 -0
  650. package/dist/components/icons-bold/Scan.d.ts.map +1 -0
  651. package/dist/components/icons-bold/SearchNormal.d.ts +4 -0
  652. package/dist/components/icons-bold/SearchNormal.d.ts.map +1 -0
  653. package/dist/components/icons-bold/SearchZoomIn.d.ts +4 -0
  654. package/dist/components/icons-bold/SearchZoomIn.d.ts.map +1 -0
  655. package/dist/components/icons-bold/SearchZoomOut.d.ts +4 -0
  656. package/dist/components/icons-bold/SearchZoomOut.d.ts.map +1 -0
  657. package/dist/components/icons-bold/Send.d.ts +4 -0
  658. package/dist/components/icons-bold/Send.d.ts.map +1 -0
  659. package/dist/components/icons-bold/Send2.d.ts +4 -0
  660. package/dist/components/icons-bold/Send2.d.ts.map +1 -0
  661. package/dist/components/icons-bold/SendSqaure2.d.ts +4 -0
  662. package/dist/components/icons-bold/SendSqaure2.d.ts.map +1 -0
  663. package/dist/components/icons-bold/SendSquare.d.ts +4 -0
  664. package/dist/components/icons-bold/SendSquare.d.ts.map +1 -0
  665. package/dist/components/icons-bold/Shield.d.ts +4 -0
  666. package/dist/components/icons-bold/Shield.d.ts.map +1 -0
  667. package/dist/components/icons-bold/ShieldCross.d.ts +4 -0
  668. package/dist/components/icons-bold/ShieldCross.d.ts.map +1 -0
  669. package/dist/components/icons-bold/ShieldSecurity.d.ts +4 -0
  670. package/dist/components/icons-bold/ShieldSecurity.d.ts.map +1 -0
  671. package/dist/components/icons-bold/ShieldSlash.d.ts +4 -0
  672. package/dist/components/icons-bold/ShieldSlash.d.ts.map +1 -0
  673. package/dist/components/icons-bold/ShieldTick.d.ts +4 -0
  674. package/dist/components/icons-bold/ShieldTick.d.ts.map +1 -0
  675. package/dist/components/icons-bold/Shuffle.d.ts +4 -0
  676. package/dist/components/icons-bold/Shuffle.d.ts.map +1 -0
  677. package/dist/components/icons-bold/Slack.d.ts +4 -0
  678. package/dist/components/icons-bold/Slack.d.ts.map +1 -0
  679. package/dist/components/icons-bold/Slash.d.ts +4 -0
  680. package/dist/components/icons-bold/Slash.d.ts.map +1 -0
  681. package/dist/components/icons-bold/Smallcaps.d.ts +4 -0
  682. package/dist/components/icons-bold/Smallcaps.d.ts.map +1 -0
  683. package/dist/components/icons-bold/SmartHome.d.ts +4 -0
  684. package/dist/components/icons-bold/SmartHome.d.ts.map +1 -0
  685. package/dist/components/icons-bold/Sort.d.ts +4 -0
  686. package/dist/components/icons-bold/Sort.d.ts.map +1 -0
  687. package/dist/components/icons-bold/Sound.d.ts +4 -0
  688. package/dist/components/icons-bold/Sound.d.ts.map +1 -0
  689. package/dist/components/icons-bold/Spotify.d.ts +4 -0
  690. package/dist/components/icons-bold/Spotify.d.ts.map +1 -0
  691. package/dist/components/icons-bold/Star.d.ts +4 -0
  692. package/dist/components/icons-bold/Star.d.ts.map +1 -0
  693. package/dist/components/icons-bold/Sticker.d.ts +4 -0
  694. package/dist/components/icons-bold/Sticker.d.ts.map +1 -0
  695. package/dist/components/icons-bold/Stop.d.ts +4 -0
  696. package/dist/components/icons-bold/Stop.d.ts.map +1 -0
  697. package/dist/components/icons-bold/StopCircle.d.ts +4 -0
  698. package/dist/components/icons-bold/StopCircle.d.ts.map +1 -0
  699. package/dist/components/icons-bold/Story.d.ts +4 -0
  700. package/dist/components/icons-bold/Story.d.ts.map +1 -0
  701. package/dist/components/icons-bold/Sun.d.ts +4 -0
  702. package/dist/components/icons-bold/Sun.d.ts.map +1 -0
  703. package/dist/components/icons-bold/TagCross.d.ts +4 -0
  704. package/dist/components/icons-bold/TagCross.d.ts.map +1 -0
  705. package/dist/components/icons-bold/TagUser.d.ts +4 -0
  706. package/dist/components/icons-bold/TagUser.d.ts.map +1 -0
  707. package/dist/components/icons-bold/Teacher.d.ts +4 -0
  708. package/dist/components/icons-bold/Teacher.d.ts.map +1 -0
  709. package/dist/components/icons-bold/Text.d.ts +4 -0
  710. package/dist/components/icons-bold/Text.d.ts.map +1 -0
  711. package/dist/components/icons-bold/TextBlock.d.ts +4 -0
  712. package/dist/components/icons-bold/TextBlock.d.ts.map +1 -0
  713. package/dist/components/icons-bold/TextBold.d.ts +4 -0
  714. package/dist/components/icons-bold/TextBold.d.ts.map +1 -0
  715. package/dist/components/icons-bold/TextItalic.d.ts +4 -0
  716. package/dist/components/icons-bold/TextItalic.d.ts.map +1 -0
  717. package/dist/components/icons-bold/TextUnderline.d.ts +4 -0
  718. package/dist/components/icons-bold/TextUnderline.d.ts.map +1 -0
  719. package/dist/components/icons-bold/TextalignCenter.d.ts +4 -0
  720. package/dist/components/icons-bold/TextalignCenter.d.ts.map +1 -0
  721. package/dist/components/icons-bold/TextalignJustifycenter.d.ts +4 -0
  722. package/dist/components/icons-bold/TextalignJustifycenter.d.ts.map +1 -0
  723. package/dist/components/icons-bold/TextalignJustifyleft.d.ts +4 -0
  724. package/dist/components/icons-bold/TextalignJustifyleft.d.ts.map +1 -0
  725. package/dist/components/icons-bold/TextalignJustifyright.d.ts +4 -0
  726. package/dist/components/icons-bold/TextalignJustifyright.d.ts.map +1 -0
  727. package/dist/components/icons-bold/TextalignLeft.d.ts +4 -0
  728. package/dist/components/icons-bold/TextalignLeft.d.ts.map +1 -0
  729. package/dist/components/icons-bold/TextalignRight.d.ts +4 -0
  730. package/dist/components/icons-bold/TextalignRight.d.ts.map +1 -0
  731. package/dist/components/icons-bold/TickCircle.d.ts +4 -0
  732. package/dist/components/icons-bold/TickCircle.d.ts.map +1 -0
  733. package/dist/components/icons-bold/TickSquare.d.ts +4 -0
  734. package/dist/components/icons-bold/TickSquare.d.ts.map +1 -0
  735. package/dist/components/icons-bold/Ticket.d.ts +4 -0
  736. package/dist/components/icons-bold/Ticket.d.ts.map +1 -0
  737. package/dist/components/icons-bold/TicketDiscount.d.ts +4 -0
  738. package/dist/components/icons-bold/TicketDiscount.d.ts.map +1 -0
  739. package/dist/components/icons-bold/Translate.d.ts +4 -0
  740. package/dist/components/icons-bold/Translate.d.ts.map +1 -0
  741. package/dist/components/icons-bold/Trash.d.ts +4 -0
  742. package/dist/components/icons-bold/Trash.d.ts.map +1 -0
  743. package/dist/components/icons-bold/Triangle.d.ts +4 -0
  744. package/dist/components/icons-bold/Triangle.d.ts.map +1 -0
  745. package/dist/components/icons-bold/Truck.d.ts +4 -0
  746. package/dist/components/icons-bold/Truck.d.ts.map +1 -0
  747. package/dist/components/icons-bold/TrushSquare.d.ts +4 -0
  748. package/dist/components/icons-bold/TrushSquare.d.ts.map +1 -0
  749. package/dist/components/icons-bold/Undo.d.ts +4 -0
  750. package/dist/components/icons-bold/Undo.d.ts.map +1 -0
  751. package/dist/components/icons-bold/Unlimited.d.ts +4 -0
  752. package/dist/components/icons-bold/Unlimited.d.ts.map +1 -0
  753. package/dist/components/icons-bold/Unlock.d.ts +4 -0
  754. package/dist/components/icons-bold/Unlock.d.ts.map +1 -0
  755. package/dist/components/icons-bold/User.d.ts +4 -0
  756. package/dist/components/icons-bold/User.d.ts.map +1 -0
  757. package/dist/components/icons-bold/UserAdd.d.ts +4 -0
  758. package/dist/components/icons-bold/UserAdd.d.ts.map +1 -0
  759. package/dist/components/icons-bold/UserCirlceAdd.d.ts +4 -0
  760. package/dist/components/icons-bold/UserCirlceAdd.d.ts.map +1 -0
  761. package/dist/components/icons-bold/UserEdit.d.ts +4 -0
  762. package/dist/components/icons-bold/UserEdit.d.ts.map +1 -0
  763. package/dist/components/icons-bold/UserMinus.d.ts +4 -0
  764. package/dist/components/icons-bold/UserMinus.d.ts.map +1 -0
  765. package/dist/components/icons-bold/UserOctagon.d.ts +4 -0
  766. package/dist/components/icons-bold/UserOctagon.d.ts.map +1 -0
  767. package/dist/components/icons-bold/UserRemove.d.ts +4 -0
  768. package/dist/components/icons-bold/UserRemove.d.ts.map +1 -0
  769. package/dist/components/icons-bold/UserSearch.d.ts +4 -0
  770. package/dist/components/icons-bold/UserSearch.d.ts.map +1 -0
  771. package/dist/components/icons-bold/UserSquare.d.ts +4 -0
  772. package/dist/components/icons-bold/UserSquare.d.ts.map +1 -0
  773. package/dist/components/icons-bold/UserTag.d.ts +4 -0
  774. package/dist/components/icons-bold/UserTag.d.ts.map +1 -0
  775. package/dist/components/icons-bold/UserTick.d.ts +4 -0
  776. package/dist/components/icons-bold/UserTick.d.ts.map +1 -0
  777. package/dist/components/icons-bold/Verify.d.ts +4 -0
  778. package/dist/components/icons-bold/Verify.d.ts.map +1 -0
  779. package/dist/components/icons-bold/Video.d.ts +4 -0
  780. package/dist/components/icons-bold/Video.d.ts.map +1 -0
  781. package/dist/components/icons-bold/VideoCircle.d.ts +4 -0
  782. package/dist/components/icons-bold/VideoCircle.d.ts.map +1 -0
  783. package/dist/components/icons-bold/VideoPlay.d.ts +4 -0
  784. package/dist/components/icons-bold/VideoPlay.d.ts.map +1 -0
  785. package/dist/components/icons-bold/VideoSlash.d.ts +4 -0
  786. package/dist/components/icons-bold/VideoSlash.d.ts.map +1 -0
  787. package/dist/components/icons-bold/VideoSquare.d.ts +4 -0
  788. package/dist/components/icons-bold/VideoSquare.d.ts.map +1 -0
  789. package/dist/components/icons-bold/VoiceSquare.d.ts +4 -0
  790. package/dist/components/icons-bold/VoiceSquare.d.ts.map +1 -0
  791. package/dist/components/icons-bold/VolumeCross.d.ts +4 -0
  792. package/dist/components/icons-bold/VolumeCross.d.ts.map +1 -0
  793. package/dist/components/icons-bold/VolumeHigh.d.ts +4 -0
  794. package/dist/components/icons-bold/VolumeHigh.d.ts.map +1 -0
  795. package/dist/components/icons-bold/VolumeLow.d.ts +4 -0
  796. package/dist/components/icons-bold/VolumeLow.d.ts.map +1 -0
  797. package/dist/components/icons-bold/VolumeLow1.d.ts +4 -0
  798. package/dist/components/icons-bold/VolumeLow1.d.ts.map +1 -0
  799. package/dist/components/icons-bold/VolumeMute.d.ts +4 -0
  800. package/dist/components/icons-bold/VolumeMute.d.ts.map +1 -0
  801. package/dist/components/icons-bold/VolumeSlash.d.ts +4 -0
  802. package/dist/components/icons-bold/VolumeSlash.d.ts.map +1 -0
  803. package/dist/components/icons-bold/VolumeUp.d.ts +4 -0
  804. package/dist/components/icons-bold/VolumeUp.d.ts.map +1 -0
  805. package/dist/components/icons-bold/Warning2.d.ts +4 -0
  806. package/dist/components/icons-bold/Warning2.d.ts.map +1 -0
  807. package/dist/components/icons-bold/Whatsapp.d.ts +4 -0
  808. package/dist/components/icons-bold/Whatsapp.d.ts.map +1 -0
  809. package/dist/components/icons-bold/Wifi.d.ts +4 -0
  810. package/dist/components/icons-bold/Wifi.d.ts.map +1 -0
  811. package/dist/components/icons-bold/WifiSquare.d.ts +4 -0
  812. package/dist/components/icons-bold/WifiSquare.d.ts.map +1 -0
  813. package/dist/components/icons-bold/Windows.d.ts +4 -0
  814. package/dist/components/icons-bold/Windows.d.ts.map +1 -0
  815. package/dist/components/icons-bold/Youtube.d.ts +4 -0
  816. package/dist/components/icons-bold/Youtube.d.ts.map +1 -0
  817. package/dist/components/icons-bold/index.d.ts +335 -0
  818. package/dist/components/icons-bold/index.d.ts.map +1 -0
  819. package/dist/data.d.mts +281 -0
  820. package/dist/data.d.ts +20 -0
  821. package/dist/data.d.ts.map +1 -0
  822. package/dist/data.js +4 -0
  823. package/dist/data.js.map +1 -0
  824. package/dist/data.mjs +4 -0
  825. package/dist/data.mjs.map +1 -0
  826. package/dist/feedback.d.mts +193 -3
  827. package/dist/feedback.d.ts +11 -9
  828. package/dist/feedback.d.ts.map +1 -1
  829. package/dist/feedback.js +12 -1
  830. package/dist/feedback.js.map +1 -1
  831. package/dist/feedback.mjs +2 -1
  832. package/dist/form.d.mts +248 -255
  833. package/dist/form.d.ts +9 -2
  834. package/dist/form.d.ts.map +1 -1
  835. package/dist/form.js +8 -272
  836. package/dist/form.js.map +1 -1
  837. package/dist/form.mjs +8 -1
  838. package/dist/form.mjs.map +1 -1
  839. package/dist/hooks/index.d.ts +10 -0
  840. package/dist/hooks/index.d.ts.map +1 -0
  841. package/dist/hooks/useInView.d.ts +47 -0
  842. package/dist/hooks/useInView.d.ts.map +1 -0
  843. package/dist/hooks/useMouse.d.ts +57 -0
  844. package/dist/hooks/useMouse.d.ts.map +1 -0
  845. package/dist/hooks/useReducedMotion.d.ts +35 -0
  846. package/dist/hooks/useReducedMotion.d.ts.map +1 -0
  847. package/dist/hooks/useScrollProgress.d.ts +50 -0
  848. package/dist/hooks/useScrollProgress.d.ts.map +1 -0
  849. package/dist/hooks/useWindowSize.d.ts +39 -0
  850. package/dist/hooks/useWindowSize.d.ts.map +1 -0
  851. package/dist/icons-Bj_nr8Ba.d.mts +158 -0
  852. package/dist/iconsax.d.mts +172 -0
  853. package/dist/iconsax.d.ts +19 -0
  854. package/dist/iconsax.d.ts.map +1 -0
  855. package/dist/iconsax.js +274 -0
  856. package/dist/iconsax.js.map +1 -0
  857. package/dist/iconsax.mjs +274 -0
  858. package/dist/iconsax.mjs.map +1 -0
  859. package/dist/index.d.mts +897 -2545
  860. package/dist/index.d.ts +16 -43
  861. package/dist/index.d.ts.map +1 -1
  862. package/dist/index.js +33 -286
  863. package/dist/index.js.map +1 -1
  864. package/dist/index.mjs +16 -16
  865. package/dist/index.mjs.map +1 -1
  866. package/dist/interactive.d.mts +602 -0
  867. package/dist/interactive.d.ts +20 -0
  868. package/dist/interactive.d.ts.map +1 -0
  869. package/dist/interactive.js +3 -0
  870. package/dist/interactive.js.map +1 -0
  871. package/dist/interactive.mjs +3 -0
  872. package/dist/interactive.mjs.map +1 -0
  873. package/dist/lib/case-utils.d.ts +36 -0
  874. package/dist/lib/case-utils.d.ts.map +1 -0
  875. package/dist/lib/icon-aliases.d.ts.map +1 -1
  876. package/dist/lib/icon-names.d.ts +5 -5
  877. package/dist/lib/icon-names.d.ts.map +1 -1
  878. package/dist/lib/icon-providers.d.ts +170 -118
  879. package/dist/lib/icon-providers.d.ts.map +1 -1
  880. package/dist/lib/icon-utils.d.ts +38 -0
  881. package/dist/lib/icon-utils.d.ts.map +1 -0
  882. package/dist/lib/icons.d.ts +103 -80
  883. package/dist/lib/icons.d.ts.map +1 -1
  884. package/dist/lib/iconsax-loader.d.ts +15 -9
  885. package/dist/lib/iconsax-loader.d.ts.map +1 -1
  886. package/dist/lib/normalize-icon-name.d.ts +43 -0
  887. package/dist/lib/normalize-icon-name.d.ts.map +1 -0
  888. package/dist/lib/styles/system/components.d.ts.map +1 -1
  889. package/dist/lib/styles/variants.d.ts.map +1 -1
  890. package/dist/lib/types/common.d.ts +41 -1
  891. package/dist/lib/types/common.d.ts.map +1 -1
  892. package/dist/lib/types/dashboard.d.ts +247 -0
  893. package/dist/lib/types/dashboard.d.ts.map +1 -0
  894. package/dist/lib/types/form.d.ts +130 -0
  895. package/dist/lib/types/form.d.ts.map +1 -0
  896. package/dist/lib/types/index.d.ts +4 -1
  897. package/dist/lib/types/index.d.ts.map +1 -1
  898. package/dist/lib/types/modal.d.ts +120 -0
  899. package/dist/lib/types/modal.d.ts.map +1 -0
  900. package/dist/navigation.d.mts +232 -6
  901. package/dist/navigation.d.ts +11 -10
  902. package/dist/navigation.d.ts.map +1 -1
  903. package/dist/navigation.js +12 -272
  904. package/dist/navigation.js.map +1 -1
  905. package/dist/navigation.mjs +2 -1
  906. package/dist/navigation.mjs.map +1 -1
  907. package/dist/overlay.d.mts +513 -0
  908. package/dist/overlay.d.ts +21 -0
  909. package/dist/overlay.d.ts.map +1 -0
  910. package/dist/overlay.js +4 -0
  911. package/dist/overlay.js.map +1 -0
  912. package/dist/overlay.mjs +4 -0
  913. package/dist/overlay.mjs.map +1 -0
  914. package/dist/sdui.js +12 -273
  915. package/dist/sdui.js.map +1 -1
  916. package/dist/sdui.mjs +2 -1
  917. package/dist/sdui.mjs.map +1 -1
  918. package/package.json +73 -30
  919. package/src/styles/base.css +3 -0
  920. package/src/styles/codeblock.css +25 -0
  921. package/src/styles/component-vars.css +77 -0
  922. package/src/styles/recommended-theme.css +90 -12
  923. package/dist/3Dcube-476CPLOF.mjs +0 -3
  924. package/dist/3Dcube-476CPLOF.mjs.map +0 -1
  925. package/dist/Add-Y2SCCNWG.mjs +0 -3
  926. package/dist/Add-Y2SCCNWG.mjs.map +0 -1
  927. package/dist/AddCircle-MQVXQBDA.mjs +0 -3
  928. package/dist/AddCircle-MQVXQBDA.mjs.map +0 -1
  929. package/dist/AddSquare-LYB5TDMI.mjs +0 -3
  930. package/dist/AddSquare-LYB5TDMI.mjs.map +0 -1
  931. package/dist/Apple-KJROXGXP.mjs +0 -3
  932. package/dist/Apple-KJROXGXP.mjs.map +0 -1
  933. package/dist/Archive-ATAEBXD5.mjs +0 -3
  934. package/dist/Archive-ATAEBXD5.mjs.map +0 -1
  935. package/dist/ArrangeCircle-EBTUQIEO.mjs +0 -3
  936. package/dist/ArrangeCircle-EBTUQIEO.mjs.map +0 -1
  937. package/dist/ArrangeCircle2-OHAJTRO4.mjs +0 -3
  938. package/dist/ArrangeCircle2-OHAJTRO4.mjs.map +0 -1
  939. package/dist/ArrangeSquare-SIDWRH75.mjs +0 -3
  940. package/dist/ArrangeSquare-SIDWRH75.mjs.map +0 -1
  941. package/dist/ArrangeSquare2-4TGS7OY6.mjs +0 -3
  942. package/dist/ArrangeSquare2-4TGS7OY6.mjs.map +0 -1
  943. package/dist/Arrow2-YBMZNNBX.mjs +0 -3
  944. package/dist/Arrow2-YBMZNNBX.mjs.map +0 -1
  945. package/dist/Arrow3-IUDRCCHR.mjs +0 -3
  946. package/dist/Arrow3-IUDRCCHR.mjs.map +0 -1
  947. package/dist/ArrowBottom-IHSRR65Z.mjs +0 -3
  948. package/dist/ArrowBottom-IHSRR65Z.mjs.map +0 -1
  949. package/dist/ArrowCircleDown-JCBYMFXA.mjs +0 -3
  950. package/dist/ArrowCircleDown-JCBYMFXA.mjs.map +0 -1
  951. package/dist/ArrowCircleLeft-L7CTVDW5.mjs +0 -3
  952. package/dist/ArrowCircleLeft-L7CTVDW5.mjs.map +0 -1
  953. package/dist/ArrowCircleRight-ZZHQDKKR.mjs +0 -3
  954. package/dist/ArrowCircleRight-ZZHQDKKR.mjs.map +0 -1
  955. package/dist/ArrowDown-K5RTFHBF.mjs +0 -3
  956. package/dist/ArrowDown-K5RTFHBF.mjs.map +0 -1
  957. package/dist/ArrowDown1-VFW3UBK5.mjs +0 -3
  958. package/dist/ArrowDown1-VFW3UBK5.mjs.map +0 -1
  959. package/dist/ArrowDown2-N5ASNO6F.mjs +0 -3
  960. package/dist/ArrowDown2-N5ASNO6F.mjs.map +0 -1
  961. package/dist/ArrowLeft-MLQDHQIB.mjs +0 -3
  962. package/dist/ArrowLeft-MLQDHQIB.mjs.map +0 -1
  963. package/dist/ArrowLeft1-6QK5LCWE.mjs +0 -3
  964. package/dist/ArrowLeft1-6QK5LCWE.mjs.map +0 -1
  965. package/dist/ArrowLeft2-JAGSKVPT.mjs +0 -3
  966. package/dist/ArrowLeft2-JAGSKVPT.mjs.map +0 -1
  967. package/dist/ArrowLeft3-4FIWGYQW.mjs +0 -3
  968. package/dist/ArrowLeft3-4FIWGYQW.mjs.map +0 -1
  969. package/dist/ArrowRight-DMIU25OL.mjs +0 -3
  970. package/dist/ArrowRight-DMIU25OL.mjs.map +0 -1
  971. package/dist/ArrowRight1-AXDOLPYT.mjs +0 -3
  972. package/dist/ArrowRight1-AXDOLPYT.mjs.map +0 -1
  973. package/dist/ArrowRight2-RHTZMXNV.mjs +0 -3
  974. package/dist/ArrowRight2-RHTZMXNV.mjs.map +0 -1
  975. package/dist/ArrowRight3-25UH6UQA.mjs +0 -3
  976. package/dist/ArrowRight3-25UH6UQA.mjs.map +0 -1
  977. package/dist/ArrowSquareDown-SUPZZDVH.mjs +0 -3
  978. package/dist/ArrowSquareDown-SUPZZDVH.mjs.map +0 -1
  979. package/dist/ArrowSquareLeft-HX4SA4FE.mjs +0 -3
  980. package/dist/ArrowSquareLeft-HX4SA4FE.mjs.map +0 -1
  981. package/dist/ArrowSquareRight-TC4XGHX2.mjs +0 -3
  982. package/dist/ArrowSquareRight-TC4XGHX2.mjs.map +0 -1
  983. package/dist/ArrowSquareUp-55VRYO5O.mjs +0 -3
  984. package/dist/ArrowSquareUp-55VRYO5O.mjs.map +0 -1
  985. package/dist/ArrowSwapHorizontal-PCXHZOBR.mjs +0 -3
  986. package/dist/ArrowSwapHorizontal-PCXHZOBR.mjs.map +0 -1
  987. package/dist/ArrowUp-JLY2CYVX.mjs +0 -3
  988. package/dist/ArrowUp-JLY2CYVX.mjs.map +0 -1
  989. package/dist/ArrowUp1-HQMIEZF2.mjs +0 -3
  990. package/dist/ArrowUp1-HQMIEZF2.mjs.map +0 -1
  991. package/dist/ArrowUp2-4M4YHZ6A.mjs +0 -3
  992. package/dist/ArrowUp2-4M4YHZ6A.mjs.map +0 -1
  993. package/dist/ArrowUp3-SYAAOPJP.mjs +0 -3
  994. package/dist/ArrowUp3-SYAAOPJP.mjs.map +0 -1
  995. package/dist/AttachCircle-2NTT7EJP.mjs +0 -3
  996. package/dist/AttachCircle-2NTT7EJP.mjs.map +0 -1
  997. package/dist/AttachSquare-PV3LLULM.mjs +0 -3
  998. package/dist/AttachSquare-PV3LLULM.mjs.map +0 -1
  999. package/dist/Autobrightness-4DHQ6NVB.mjs +0 -3
  1000. package/dist/Autobrightness-4DHQ6NVB.mjs.map +0 -1
  1001. package/dist/BackSquare-7QY4AXFT.mjs +0 -3
  1002. package/dist/BackSquare-7QY4AXFT.mjs.map +0 -1
  1003. package/dist/Backward-ORNWYQXM.mjs +0 -3
  1004. package/dist/Backward-ORNWYQXM.mjs.map +0 -1
  1005. package/dist/Backward10Seconds-CVBASDBJ.mjs +0 -3
  1006. package/dist/Backward10Seconds-CVBASDBJ.mjs.map +0 -1
  1007. package/dist/Backward15Seconds-WLDYQGVG.mjs +0 -3
  1008. package/dist/Backward15Seconds-WLDYQGVG.mjs.map +0 -1
  1009. package/dist/Backward5Seconds-VAFA7UW2.mjs +0 -3
  1010. package/dist/Backward5Seconds-VAFA7UW2.mjs.map +0 -1
  1011. package/dist/BatteryDisable-XVTPBZPE.mjs +0 -3
  1012. package/dist/BatteryDisable-XVTPBZPE.mjs.map +0 -1
  1013. package/dist/BatteryFull-NKQ4RNEB.mjs +0 -3
  1014. package/dist/BatteryFull-NKQ4RNEB.mjs.map +0 -1
  1015. package/dist/Bluetooth-2EHRKMF6.mjs +0 -3
  1016. package/dist/Bluetooth-2EHRKMF6.mjs.map +0 -1
  1017. package/dist/BluetoothCircle-OD5ANA4N.mjs +0 -3
  1018. package/dist/BluetoothCircle-OD5ANA4N.mjs.map +0 -1
  1019. package/dist/Book-ZTLKZ7SK.mjs +0 -3
  1020. package/dist/Book-ZTLKZ7SK.mjs.map +0 -1
  1021. package/dist/Box-XH43KKV4.mjs +0 -3
  1022. package/dist/Box-XH43KKV4.mjs.map +0 -1
  1023. package/dist/Box2-KB46H4IU.mjs +0 -3
  1024. package/dist/Box2-KB46H4IU.mjs.map +0 -1
  1025. package/dist/Briefcase-ZTMLFGEC.mjs +0 -3
  1026. package/dist/Briefcase-ZTMLFGEC.mjs.map +0 -1
  1027. package/dist/Broom-BC2MUXZT.mjs +0 -3
  1028. package/dist/Broom-BC2MUXZT.mjs.map +0 -1
  1029. package/dist/Cake-KJESEIPY.mjs +0 -3
  1030. package/dist/Cake-KJESEIPY.mjs.map +0 -1
  1031. package/dist/Calculator-IJKS42AG.mjs +0 -3
  1032. package/dist/Calculator-IJKS42AG.mjs.map +0 -1
  1033. package/dist/Camera-4AD6YJZ3.mjs +0 -3
  1034. package/dist/Camera-4AD6YJZ3.mjs.map +0 -1
  1035. package/dist/CameraSlash-ESCCGOUP.mjs +0 -3
  1036. package/dist/CameraSlash-ESCCGOUP.mjs.map +0 -1
  1037. package/dist/CardAdd-V4Y4NJAM.mjs +0 -3
  1038. package/dist/CardAdd-V4Y4NJAM.mjs.map +0 -1
  1039. package/dist/CardRemove-CAHOPPMN.mjs +0 -3
  1040. package/dist/CardRemove-CAHOPPMN.mjs.map +0 -1
  1041. package/dist/CardSlash-6FRL33KL.mjs +0 -3
  1042. package/dist/CardSlash-6FRL33KL.mjs.map +0 -1
  1043. package/dist/CardTick-Q3ZNTZDO.mjs +0 -3
  1044. package/dist/CardTick-Q3ZNTZDO.mjs.map +0 -1
  1045. package/dist/Cards-P6ECLTEQ.mjs +0 -3
  1046. package/dist/Cards-P6ECLTEQ.mjs.map +0 -1
  1047. package/dist/Cd-CTHQLTGK.mjs +0 -3
  1048. package/dist/Cd-CTHQLTGK.mjs.map +0 -1
  1049. package/dist/Check-SXMNFYQE.mjs +0 -3
  1050. package/dist/Check-SXMNFYQE.mjs.map +0 -1
  1051. package/dist/Chrome-HNWG6FNF.mjs +0 -3
  1052. package/dist/Chrome-HNWG6FNF.mjs.map +0 -1
  1053. package/dist/CloseCircle-DL4UURVO.mjs +0 -3
  1054. package/dist/CloseCircle-DL4UURVO.mjs.map +0 -1
  1055. package/dist/CloseSquare-A7QOSR32.mjs +0 -3
  1056. package/dist/CloseSquare-A7QOSR32.mjs.map +0 -1
  1057. package/dist/Cloud-FIB7VQBO.mjs +0 -3
  1058. package/dist/Cloud-FIB7VQBO.mjs.map +0 -1
  1059. package/dist/CloudAdd-FHSWGZAC.mjs +0 -3
  1060. package/dist/CloudAdd-FHSWGZAC.mjs.map +0 -1
  1061. package/dist/CloudChange-P27RPVL6.mjs +0 -3
  1062. package/dist/CloudChange-P27RPVL6.mjs.map +0 -1
  1063. package/dist/CloudDrizzle-6JQ4BWUT.mjs +0 -3
  1064. package/dist/CloudDrizzle-6JQ4BWUT.mjs.map +0 -1
  1065. package/dist/CloudLightning-5FV363JV.mjs +0 -3
  1066. package/dist/CloudLightning-5FV363JV.mjs.map +0 -1
  1067. package/dist/CloudNotif-ZAVZ24MM.mjs +0 -3
  1068. package/dist/CloudNotif-ZAVZ24MM.mjs.map +0 -1
  1069. package/dist/CloudRemove-2TPKVLGP.mjs +0 -3
  1070. package/dist/CloudRemove-2TPKVLGP.mjs.map +0 -1
  1071. package/dist/CloudSnow-OYMWSTH6.mjs +0 -3
  1072. package/dist/CloudSnow-OYMWSTH6.mjs.map +0 -1
  1073. package/dist/CloudSunny-GYNAXJ74.mjs +0 -3
  1074. package/dist/CloudSunny-GYNAXJ74.mjs.map +0 -1
  1075. package/dist/Code-BRFJ4UHF.mjs +0 -3
  1076. package/dist/Code-BRFJ4UHF.mjs.map +0 -1
  1077. package/dist/Code1-HKUVG5LL.mjs +0 -3
  1078. package/dist/Code1-HKUVG5LL.mjs.map +0 -1
  1079. package/dist/Coin-ESBHYVFV.mjs +0 -3
  1080. package/dist/Coin-ESBHYVFV.mjs.map +0 -1
  1081. package/dist/ComponentLayout-BFW39DKh.d.mts +0 -73
  1082. package/dist/Computing-EZ3SJZF5.mjs +0 -3
  1083. package/dist/Computing-EZ3SJZF5.mjs.map +0 -1
  1084. package/dist/Convert-PZX24YPN.mjs +0 -3
  1085. package/dist/Convert-PZX24YPN.mjs.map +0 -1
  1086. package/dist/Crown-V6VJP6GE.mjs +0 -3
  1087. package/dist/Crown-V6VJP6GE.mjs.map +0 -1
  1088. package/dist/Crown1-RZACWY2P.mjs +0 -3
  1089. package/dist/Crown1-RZACWY2P.mjs.map +0 -1
  1090. package/dist/Danger-WS5C3LAY.mjs +0 -3
  1091. package/dist/Danger-WS5C3LAY.mjs.map +0 -1
  1092. package/dist/DirectDown-ZP7IG7T3.mjs +0 -3
  1093. package/dist/DirectDown-ZP7IG7T3.mjs.map +0 -1
  1094. package/dist/DirectLeft-YGADPDDE.mjs +0 -3
  1095. package/dist/DirectLeft-YGADPDDE.mjs.map +0 -1
  1096. package/dist/DirectRight-IUJSIK73.mjs +0 -3
  1097. package/dist/DirectRight-IUJSIK73.mjs.map +0 -1
  1098. package/dist/DirectUp-KKK7DRSX.mjs +0 -3
  1099. package/dist/DirectUp-KKK7DRSX.mjs.map +0 -1
  1100. package/dist/Dislike-CJI64T7L.mjs +0 -3
  1101. package/dist/Dislike-CJI64T7L.mjs.map +0 -1
  1102. package/dist/DollarSquare-S5DYIDDA.mjs +0 -3
  1103. package/dist/DollarSquare-S5DYIDDA.mjs.map +0 -1
  1104. package/dist/Drop-CMOM53IR.mjs +0 -3
  1105. package/dist/Drop-CMOM53IR.mjs.map +0 -1
  1106. package/dist/EmojiHappy-DCDZWBCU.mjs +0 -3
  1107. package/dist/EmojiHappy-DCDZWBCU.mjs.map +0 -1
  1108. package/dist/EmojiNormal-HYYEYGNH.mjs +0 -3
  1109. package/dist/EmojiNormal-HYYEYGNH.mjs.map +0 -1
  1110. package/dist/EmojiSad-REFSZVHL.mjs +0 -3
  1111. package/dist/EmojiSad-REFSZVHL.mjs.map +0 -1
  1112. package/dist/EmptyWallet-43V6VLZW.mjs +0 -3
  1113. package/dist/EmptyWallet-43V6VLZW.mjs.map +0 -1
  1114. package/dist/Eraser-NOH2RIDJ.mjs +0 -3
  1115. package/dist/Eraser-NOH2RIDJ.mjs.map +0 -1
  1116. package/dist/Export-3XJEECNH.mjs +0 -3
  1117. package/dist/Export-3XJEECNH.mjs.map +0 -1
  1118. package/dist/Export1-TT566QU6.mjs +0 -3
  1119. package/dist/Export1-TT566QU6.mjs.map +0 -1
  1120. package/dist/Export2-ZWUHEVJM.mjs +0 -3
  1121. package/dist/Export2-ZWUHEVJM.mjs.map +0 -1
  1122. package/dist/Export3-TX6WVNZN.mjs +0 -3
  1123. package/dist/Export3-TX6WVNZN.mjs.map +0 -1
  1124. package/dist/Eye-NYRJQM6Y.mjs +0 -3
  1125. package/dist/Eye-NYRJQM6Y.mjs.map +0 -1
  1126. package/dist/EyeSlash-2W6XOQZW.mjs +0 -3
  1127. package/dist/EyeSlash-2W6XOQZW.mjs.map +0 -1
  1128. package/dist/Facebook-AO7T5MIB.mjs +0 -3
  1129. package/dist/Facebook-AO7T5MIB.mjs.map +0 -1
  1130. package/dist/Figma-WZO5X5BX.mjs +0 -3
  1131. package/dist/Figma-WZO5X5BX.mjs.map +0 -1
  1132. package/dist/Filter-G56K7VKJ.mjs +0 -3
  1133. package/dist/Filter-G56K7VKJ.mjs.map +0 -1
  1134. package/dist/FilterAdd-MVLYM3VP.mjs +0 -3
  1135. package/dist/FilterAdd-MVLYM3VP.mjs.map +0 -1
  1136. package/dist/FilterEdit-FRKKE2PH.mjs +0 -3
  1137. package/dist/FilterEdit-FRKKE2PH.mjs.map +0 -1
  1138. package/dist/FilterRemove-FHC4OHVC.mjs +0 -3
  1139. package/dist/FilterRemove-FHC4OHVC.mjs.map +0 -1
  1140. package/dist/FilterSearch-2W2FWEVP.mjs +0 -3
  1141. package/dist/FilterSearch-2W2FWEVP.mjs.map +0 -1
  1142. package/dist/FilterTick-N6WUC5AR.mjs +0 -3
  1143. package/dist/FilterTick-N6WUC5AR.mjs.map +0 -1
  1144. package/dist/FingerCricle-AAOVYXKF.mjs +0 -3
  1145. package/dist/FingerCricle-AAOVYXKF.mjs.map +0 -1
  1146. package/dist/Firstline-35U6KCCP.mjs +0 -3
  1147. package/dist/Firstline-35U6KCCP.mjs.map +0 -1
  1148. package/dist/Flag-YHSN7KPV.mjs +0 -3
  1149. package/dist/Flag-YHSN7KPV.mjs.map +0 -1
  1150. package/dist/Flag2-P4JOAXW7.mjs +0 -3
  1151. package/dist/Flag2-P4JOAXW7.mjs.map +0 -1
  1152. package/dist/Flash-DV4KZNI5.mjs +0 -3
  1153. package/dist/Flash-DV4KZNI5.mjs.map +0 -1
  1154. package/dist/FlashCircle-SRBLXDUD.mjs +0 -3
  1155. package/dist/FlashCircle-SRBLXDUD.mjs.map +0 -1
  1156. package/dist/FlashSlash-LO74NC3Q.mjs +0 -3
  1157. package/dist/FlashSlash-LO74NC3Q.mjs.map +0 -1
  1158. package/dist/Folder-QQPI7QVX.mjs +0 -3
  1159. package/dist/Folder-QQPI7QVX.mjs.map +0 -1
  1160. package/dist/Folder2-POTY3VTP.mjs +0 -3
  1161. package/dist/Folder2-POTY3VTP.mjs.map +0 -1
  1162. package/dist/FolderAdd-L6SIRB6B.mjs +0 -3
  1163. package/dist/FolderAdd-L6SIRB6B.mjs.map +0 -1
  1164. package/dist/FolderCloud-3WZPGBCM.mjs +0 -3
  1165. package/dist/FolderCloud-3WZPGBCM.mjs.map +0 -1
  1166. package/dist/FolderCross-6223FQAM.mjs +0 -3
  1167. package/dist/FolderCross-6223FQAM.mjs.map +0 -1
  1168. package/dist/FolderFavorite-ZA6KABVI.mjs +0 -3
  1169. package/dist/FolderFavorite-ZA6KABVI.mjs.map +0 -1
  1170. package/dist/FolderMinus-WRXPRPXE.mjs +0 -3
  1171. package/dist/FolderMinus-WRXPRPXE.mjs.map +0 -1
  1172. package/dist/FolderOpen-OWBG4GZT.mjs +0 -3
  1173. package/dist/FolderOpen-OWBG4GZT.mjs.map +0 -1
  1174. package/dist/Forward-7YU3A27U.mjs +0 -3
  1175. package/dist/Forward-7YU3A27U.mjs.map +0 -1
  1176. package/dist/Forward10Seconds-JYASHGG7.mjs +0 -3
  1177. package/dist/Forward10Seconds-JYASHGG7.mjs.map +0 -1
  1178. package/dist/Forward15Seconds-QRR5SXLN.mjs +0 -3
  1179. package/dist/Forward15Seconds-QRR5SXLN.mjs.map +0 -1
  1180. package/dist/Forward5Seconds-YVMHFCJM.mjs +0 -3
  1181. package/dist/Forward5Seconds-YVMHFCJM.mjs.map +0 -1
  1182. package/dist/ForwardSquare-AY2EKDGY.mjs +0 -3
  1183. package/dist/ForwardSquare-AY2EKDGY.mjs.map +0 -1
  1184. package/dist/Frame-WTAJLZ7P.mjs +0 -3
  1185. package/dist/Frame-WTAJLZ7P.mjs.map +0 -1
  1186. package/dist/Frame1-FOMSDDEB.mjs +0 -3
  1187. package/dist/Frame1-FOMSDDEB.mjs.map +0 -1
  1188. package/dist/Frame2-H255J25T.mjs +0 -3
  1189. package/dist/Frame2-H255J25T.mjs.map +0 -1
  1190. package/dist/Gallery-HXLC4DBY.mjs +0 -3
  1191. package/dist/Gallery-HXLC4DBY.mjs.map +0 -1
  1192. package/dist/GalleryAdd-Q3SDBRHN.mjs +0 -3
  1193. package/dist/GalleryAdd-Q3SDBRHN.mjs.map +0 -1
  1194. package/dist/GalleryRemove-T4433X4L.mjs +0 -3
  1195. package/dist/GalleryRemove-T4433X4L.mjs.map +0 -1
  1196. package/dist/GallerySlash-NZPQIB2Q.mjs +0 -3
  1197. package/dist/GallerySlash-NZPQIB2Q.mjs.map +0 -1
  1198. package/dist/Global-NEKUUTWR.mjs +0 -3
  1199. package/dist/Global-NEKUUTWR.mjs.map +0 -1
  1200. package/dist/Group-7ZQHVROQ.mjs +0 -3
  1201. package/dist/Group-7ZQHVROQ.mjs.map +0 -1
  1202. package/dist/Group1-HT5MSGN3.mjs +0 -3
  1203. package/dist/Group1-HT5MSGN3.mjs.map +0 -1
  1204. package/dist/GroupCopy-HNEX3Q2F.mjs +0 -3
  1205. package/dist/GroupCopy-HNEX3Q2F.mjs.map +0 -1
  1206. package/dist/Heart-22RQEZ6G.mjs +0 -3
  1207. package/dist/Heart-22RQEZ6G.mjs.map +0 -1
  1208. package/dist/Hierarchy-2P6D5ZMR.mjs +0 -3
  1209. package/dist/Hierarchy-2P6D5ZMR.mjs.map +0 -1
  1210. package/dist/Hierarchy2-X5SRKU6A.mjs +0 -3
  1211. package/dist/Hierarchy2-X5SRKU6A.mjs.map +0 -1
  1212. package/dist/Home2-Z2OWOJHS.mjs +0 -3
  1213. package/dist/Home2-Z2OWOJHS.mjs.map +0 -1
  1214. package/dist/HomeWifi-7S5MMTQK.mjs +0 -3
  1215. package/dist/HomeWifi-7S5MMTQK.mjs.map +0 -1
  1216. package/dist/Html3-GGKHR7P6.mjs +0 -3
  1217. package/dist/Html3-GGKHR7P6.mjs.map +0 -1
  1218. package/dist/Html5-4GUENRI3.mjs +0 -3
  1219. package/dist/Html5-4GUENRI3.mjs.map +0 -1
  1220. package/dist/Image-NQ3ER3JQ.mjs +0 -3
  1221. package/dist/Image-NQ3ER3JQ.mjs.map +0 -1
  1222. package/dist/Import-XTAYKW6E.mjs +0 -3
  1223. package/dist/Import-XTAYKW6E.mjs.map +0 -1
  1224. package/dist/Import1-MC5MM7OX.mjs +0 -3
  1225. package/dist/Import1-MC5MM7OX.mjs.map +0 -1
  1226. package/dist/Import2-7R45R2AS.mjs +0 -3
  1227. package/dist/Import2-7R45R2AS.mjs.map +0 -1
  1228. package/dist/InfoCircle-ZPO457IW.mjs +0 -3
  1229. package/dist/InfoCircle-ZPO457IW.mjs.map +0 -1
  1230. package/dist/Information-UDCWKXWE.mjs +0 -3
  1231. package/dist/Information-UDCWKXWE.mjs.map +0 -1
  1232. package/dist/Instagram-NTZKJFBE.mjs +0 -3
  1233. package/dist/Instagram-NTZKJFBE.mjs.map +0 -1
  1234. package/dist/JavaScript-KZ2NS3XH.mjs +0 -3
  1235. package/dist/JavaScript-KZ2NS3XH.mjs.map +0 -1
  1236. package/dist/LanguageCircle-QS6SBRCX.mjs +0 -3
  1237. package/dist/LanguageCircle-QS6SBRCX.mjs.map +0 -1
  1238. package/dist/LanguageSquare-7S22GSXQ.mjs +0 -3
  1239. package/dist/LanguageSquare-7S22GSXQ.mjs.map +0 -1
  1240. package/dist/Like-BP7KSSR2.mjs +0 -3
  1241. package/dist/Like-BP7KSSR2.mjs.map +0 -1
  1242. package/dist/LikeDislike-XLCPVRYQ.mjs +0 -3
  1243. package/dist/LikeDislike-XLCPVRYQ.mjs.map +0 -1
  1244. package/dist/LikeTag-PYTNFFF5.mjs +0 -3
  1245. package/dist/LikeTag-PYTNFFF5.mjs.map +0 -1
  1246. package/dist/Link-AOVUXGIY.mjs +0 -3
  1247. package/dist/Link-AOVUXGIY.mjs.map +0 -1
  1248. package/dist/Link1-AJUNET5I.mjs +0 -3
  1249. package/dist/Link1-AJUNET5I.mjs.map +0 -1
  1250. package/dist/Link2-PWCWLSCN.mjs +0 -3
  1251. package/dist/Link2-PWCWLSCN.mjs.map +0 -1
  1252. package/dist/Link21-W4UBW7JL.mjs +0 -3
  1253. package/dist/Link21-W4UBW7JL.mjs.map +0 -1
  1254. package/dist/LinkCircle-RF6ANTOW.mjs +0 -3
  1255. package/dist/LinkCircle-RF6ANTOW.mjs.map +0 -1
  1256. package/dist/LinkSquare-WNZU6CZ3.mjs +0 -3
  1257. package/dist/LinkSquare-WNZU6CZ3.mjs.map +0 -1
  1258. package/dist/LocationCross-YFIXU2NG.mjs +0 -3
  1259. package/dist/LocationCross-YFIXU2NG.mjs.map +0 -1
  1260. package/dist/LocationMinus-X3PFKQTO.mjs +0 -3
  1261. package/dist/LocationMinus-X3PFKQTO.mjs.map +0 -1
  1262. package/dist/LocationSlash-ISAXSM5W.mjs +0 -3
  1263. package/dist/LocationSlash-ISAXSM5W.mjs.map +0 -1
  1264. package/dist/LocationTick-6KJNHZ3E.mjs +0 -3
  1265. package/dist/LocationTick-6KJNHZ3E.mjs.map +0 -1
  1266. package/dist/Lock-QSKHUIH5.mjs +0 -3
  1267. package/dist/Lock-QSKHUIH5.mjs.map +0 -1
  1268. package/dist/LockSlash-E2OQ2M6Z.mjs +0 -3
  1269. package/dist/LockSlash-E2OQ2M6Z.mjs.map +0 -1
  1270. package/dist/Login-IC6ILE62.mjs +0 -3
  1271. package/dist/Login-IC6ILE62.mjs.map +0 -1
  1272. package/dist/Login1-S5GKYDYM.mjs +0 -3
  1273. package/dist/Login1-S5GKYDYM.mjs.map +0 -1
  1274. package/dist/Logout-FSBNVXDF.mjs +0 -3
  1275. package/dist/Logout-FSBNVXDF.mjs.map +0 -1
  1276. package/dist/Logout1-Q4OTZLEU.mjs +0 -3
  1277. package/dist/Logout1-Q4OTZLEU.mjs.map +0 -1
  1278. package/dist/Map-L7EAT544.mjs +0 -3
  1279. package/dist/Map-L7EAT544.mjs.map +0 -1
  1280. package/dist/Math-EEC7PMHW.mjs +0 -3
  1281. package/dist/Math-EEC7PMHW.mjs.map +0 -1
  1282. package/dist/Maximize-ZHU7YIEF.mjs +0 -3
  1283. package/dist/Maximize-ZHU7YIEF.mjs.map +0 -1
  1284. package/dist/Menu-OMFZ7P5V.mjs +0 -3
  1285. package/dist/Menu-OMFZ7P5V.mjs.map +0 -1
  1286. package/dist/MessageProgramming-AJDAIZ7B.mjs +0 -3
  1287. package/dist/MessageProgramming-AJDAIZ7B.mjs.map +0 -1
  1288. package/dist/Microphone-X7JCGHN3.mjs +0 -3
  1289. package/dist/Microphone-X7JCGHN3.mjs.map +0 -1
  1290. package/dist/Microphone2-RJ6GXHM2.mjs +0 -3
  1291. package/dist/Microphone2-RJ6GXHM2.mjs.map +0 -1
  1292. package/dist/MicrophoneSlash-WLZQN2Z6.mjs +0 -3
  1293. package/dist/MicrophoneSlash-WLZQN2Z6.mjs.map +0 -1
  1294. package/dist/MicrophoneSlash1-IYGIKAEL.mjs +0 -3
  1295. package/dist/MicrophoneSlash1-IYGIKAEL.mjs.map +0 -1
  1296. package/dist/Milk-KRNXTEF3.mjs +0 -3
  1297. package/dist/Milk-KRNXTEF3.mjs.map +0 -1
  1298. package/dist/Minus-QZERPPCK.mjs +0 -3
  1299. package/dist/Minus-QZERPPCK.mjs.map +0 -1
  1300. package/dist/MinusCirlce-A33IFK35.mjs +0 -3
  1301. package/dist/MinusCirlce-A33IFK35.mjs.map +0 -1
  1302. package/dist/MinusSquare-46UOCDXK.mjs +0 -3
  1303. package/dist/MinusSquare-46UOCDXK.mjs.map +0 -1
  1304. package/dist/Monitor-MJPET4JF.mjs +0 -3
  1305. package/dist/Monitor-MJPET4JF.mjs.map +0 -1
  1306. package/dist/Moon-BEA2XUGX.mjs +0 -3
  1307. package/dist/Moon-BEA2XUGX.mjs.map +0 -1
  1308. package/dist/MoreCircle-2NDIPFCF.mjs +0 -3
  1309. package/dist/MoreCircle-2NDIPFCF.mjs.map +0 -1
  1310. package/dist/MoreSquare-7NWRBPUM.mjs +0 -3
  1311. package/dist/MoreSquare-7NWRBPUM.mjs.map +0 -1
  1312. package/dist/Mouse-MRBU7VAB.mjs +0 -3
  1313. package/dist/Mouse-MRBU7VAB.mjs.map +0 -1
  1314. package/dist/MouseCircle-3PWPPTPV.mjs +0 -3
  1315. package/dist/MouseCircle-3PWPPTPV.mjs.map +0 -1
  1316. package/dist/MouseSquare-CCS4ZIYU.mjs +0 -3
  1317. package/dist/MouseSquare-CCS4ZIYU.mjs.map +0 -1
  1318. package/dist/Next-EGO2D2MH.mjs +0 -3
  1319. package/dist/Next-EGO2D2MH.mjs.map +0 -1
  1320. package/dist/Paperclip-DVVAJW2J.mjs +0 -3
  1321. package/dist/Paperclip-DVVAJW2J.mjs.map +0 -1
  1322. package/dist/Paperclip2-CPVT4PFG.mjs +0 -3
  1323. package/dist/Paperclip2-CPVT4PFG.mjs.map +0 -1
  1324. package/dist/PasswordCheck-RBAW3QLC.mjs +0 -3
  1325. package/dist/PasswordCheck-RBAW3QLC.mjs.map +0 -1
  1326. package/dist/Pause-4WGFF7DP.mjs +0 -3
  1327. package/dist/Pause-4WGFF7DP.mjs.map +0 -1
  1328. package/dist/PauseCircle-TWMPA5QW.mjs +0 -3
  1329. package/dist/PauseCircle-TWMPA5QW.mjs.map +0 -1
  1330. package/dist/People-5U2VM2FF.mjs +0 -3
  1331. package/dist/People-5U2VM2FF.mjs.map +0 -1
  1332. package/dist/Pet-H3CYUNUA.mjs +0 -3
  1333. package/dist/Pet-H3CYUNUA.mjs.map +0 -1
  1334. package/dist/Pharagraphspacing-DDLO7AJL.mjs +0 -3
  1335. package/dist/Pharagraphspacing-DDLO7AJL.mjs.map +0 -1
  1336. package/dist/Play-2YQV6TNO.mjs +0 -3
  1337. package/dist/Play-2YQV6TNO.mjs.map +0 -1
  1338. package/dist/PlayCircle-RKDP5NYR.mjs +0 -3
  1339. package/dist/PlayCircle-RKDP5NYR.mjs.map +0 -1
  1340. package/dist/Previous-CR6OA6TB.mjs +0 -3
  1341. package/dist/Previous-CR6OA6TB.mjs.map +0 -1
  1342. package/dist/Printer-SZSIFHFB.mjs +0 -3
  1343. package/dist/Printer-SZSIFHFB.mjs.map +0 -1
  1344. package/dist/PrinterSlash-2RZLBNZP.mjs +0 -3
  1345. package/dist/PrinterSlash-2RZLBNZP.mjs.map +0 -1
  1346. package/dist/Profile-UTQTIUNC.mjs +0 -3
  1347. package/dist/Profile-UTQTIUNC.mjs.map +0 -1
  1348. package/dist/Profile2User-7E7JN25F.mjs +0 -3
  1349. package/dist/Profile2User-7E7JN25F.mjs.map +0 -1
  1350. package/dist/ProfileAdd-VBIS5UNL.mjs +0 -3
  1351. package/dist/ProfileAdd-VBIS5UNL.mjs.map +0 -1
  1352. package/dist/ProfileCircle-A252EU4D.mjs +0 -3
  1353. package/dist/ProfileCircle-A252EU4D.mjs.map +0 -1
  1354. package/dist/ProfileDelete-67BC3HWJ.mjs +0 -3
  1355. package/dist/ProfileDelete-67BC3HWJ.mjs.map +0 -1
  1356. package/dist/ProfileRemove-66OWFHC2.mjs +0 -3
  1357. package/dist/ProfileRemove-66OWFHC2.mjs.map +0 -1
  1358. package/dist/ProfileTick-CCULMZDF.mjs +0 -3
  1359. package/dist/ProfileTick-CCULMZDF.mjs.map +0 -1
  1360. package/dist/ProgrammingArrow-DHWZI2LW.mjs +0 -3
  1361. package/dist/ProgrammingArrow-DHWZI2LW.mjs.map +0 -1
  1362. package/dist/QuoteDown-2ORQIV5W.mjs +0 -3
  1363. package/dist/QuoteDown-2ORQIV5W.mjs.map +0 -1
  1364. package/dist/QuoteDownCircle-VMIPRFA4.mjs +0 -3
  1365. package/dist/QuoteDownCircle-VMIPRFA4.mjs.map +0 -1
  1366. package/dist/QuoteDownSquare-XGXP6IXB.mjs +0 -3
  1367. package/dist/QuoteDownSquare-XGXP6IXB.mjs.map +0 -1
  1368. package/dist/QuoteUp-M5SVDOFP.mjs +0 -3
  1369. package/dist/QuoteUp-M5SVDOFP.mjs.map +0 -1
  1370. package/dist/QuoteUpCircle-OBJMUS2N.mjs +0 -3
  1371. package/dist/QuoteUpCircle-OBJMUS2N.mjs.map +0 -1
  1372. package/dist/QuoteUpSquare-YGZSLLNI.mjs +0 -3
  1373. package/dist/QuoteUpSquare-YGZSLLNI.mjs.map +0 -1
  1374. package/dist/Ranking-TSWNJAA7.mjs +0 -3
  1375. package/dist/Ranking-TSWNJAA7.mjs.map +0 -1
  1376. package/dist/ReceiptDiscount-7MFJEZ3Z.mjs +0 -3
  1377. package/dist/ReceiptDiscount-7MFJEZ3Z.mjs.map +0 -1
  1378. package/dist/ReceiptDisscount-5REVPP45.mjs +0 -3
  1379. package/dist/ReceiptDisscount-5REVPP45.mjs.map +0 -1
  1380. package/dist/ReceiptItem-7YDMDNLL.mjs +0 -3
  1381. package/dist/ReceiptItem-7YDMDNLL.mjs.map +0 -1
  1382. package/dist/ReceiptMinus-LSFDB4Z4.mjs +0 -3
  1383. package/dist/ReceiptMinus-LSFDB4Z4.mjs.map +0 -1
  1384. package/dist/ReceiveSquare-OKM5GDG7.mjs +0 -3
  1385. package/dist/ReceiveSquare-OKM5GDG7.mjs.map +0 -1
  1386. package/dist/ReceiveSquare2-5SSBZSPZ.mjs +0 -3
  1387. package/dist/ReceiveSquare2-5SSBZSPZ.mjs.map +0 -1
  1388. package/dist/Received-J6L62RMS.mjs +0 -3
  1389. package/dist/Received-J6L62RMS.mjs.map +0 -1
  1390. package/dist/Record-DVMRKUFN.mjs +0 -3
  1391. package/dist/Record-DVMRKUFN.mjs.map +0 -1
  1392. package/dist/RecordCircle-NMZMFS3L.mjs +0 -3
  1393. package/dist/RecordCircle-NMZMFS3L.mjs.map +0 -1
  1394. package/dist/Redo-24VUIDIV.mjs +0 -3
  1395. package/dist/Redo-24VUIDIV.mjs.map +0 -1
  1396. package/dist/Refresh-PF7VBWBQ.mjs +0 -3
  1397. package/dist/Refresh-PF7VBWBQ.mjs.map +0 -1
  1398. package/dist/Refresh2-R2CLGBZ2.mjs +0 -3
  1399. package/dist/Refresh2-R2CLGBZ2.mjs.map +0 -1
  1400. package/dist/RefreshCircle-HALAGIS2.mjs +0 -3
  1401. package/dist/RefreshCircle-HALAGIS2.mjs.map +0 -1
  1402. package/dist/RefreshLeftSquare-KBQYH7HU.mjs +0 -3
  1403. package/dist/RefreshLeftSquare-KBQYH7HU.mjs.map +0 -1
  1404. package/dist/RefreshRightSquare-QXRLFS4U.mjs +0 -3
  1405. package/dist/RefreshRightSquare-QXRLFS4U.mjs.map +0 -1
  1406. package/dist/RefreshSquare2-3LD3V777.mjs +0 -3
  1407. package/dist/RefreshSquare2-3LD3V777.mjs.map +0 -1
  1408. package/dist/Repeat-525X3G6P.mjs +0 -3
  1409. package/dist/Repeat-525X3G6P.mjs.map +0 -1
  1410. package/dist/RepeatCircle-6Z2HY3YD.mjs +0 -3
  1411. package/dist/RepeatCircle-6Z2HY3YD.mjs.map +0 -1
  1412. package/dist/RepeateMusic-LYGF23LR.mjs +0 -3
  1413. package/dist/RepeateMusic-LYGF23LR.mjs.map +0 -1
  1414. package/dist/RepeateOne-CW645R66.mjs +0 -3
  1415. package/dist/RepeateOne-CW645R66.mjs.map +0 -1
  1416. package/dist/RotateLeft-VP52763H.mjs +0 -3
  1417. package/dist/RotateLeft-VP52763H.mjs.map +0 -1
  1418. package/dist/RotateRight-BM2SKWJ5.mjs +0 -3
  1419. package/dist/RotateRight-BM2SKWJ5.mjs.map +0 -1
  1420. package/dist/SafeHome-BXUR4PQ7.mjs +0 -3
  1421. package/dist/SafeHome-BXUR4PQ7.mjs.map +0 -1
  1422. package/dist/Scan-VDWATMHG.mjs +0 -3
  1423. package/dist/Scan-VDWATMHG.mjs.map +0 -1
  1424. package/dist/SearchNormal-WVR2C47E.mjs +0 -3
  1425. package/dist/SearchNormal-WVR2C47E.mjs.map +0 -1
  1426. package/dist/SearchZoomIn-2DRWT6RO.mjs +0 -3
  1427. package/dist/SearchZoomIn-2DRWT6RO.mjs.map +0 -1
  1428. package/dist/SearchZoomOut-GWIHACEL.mjs +0 -3
  1429. package/dist/SearchZoomOut-GWIHACEL.mjs.map +0 -1
  1430. package/dist/Send-P3SQMEXQ.mjs +0 -3
  1431. package/dist/Send-P3SQMEXQ.mjs.map +0 -1
  1432. package/dist/Send2-ZZSHDBAJ.mjs +0 -3
  1433. package/dist/Send2-ZZSHDBAJ.mjs.map +0 -1
  1434. package/dist/SendSqaure2-SDSQK2MQ.mjs +0 -3
  1435. package/dist/SendSqaure2-SDSQK2MQ.mjs.map +0 -1
  1436. package/dist/SendSquare-SM3KXLRB.mjs +0 -3
  1437. package/dist/SendSquare-SM3KXLRB.mjs.map +0 -1
  1438. package/dist/Shield-LXHTDSP4.mjs +0 -3
  1439. package/dist/Shield-LXHTDSP4.mjs.map +0 -1
  1440. package/dist/ShieldCross-A5YO6NJD.mjs +0 -3
  1441. package/dist/ShieldCross-A5YO6NJD.mjs.map +0 -1
  1442. package/dist/ShieldSecurity-U3VBFZMO.mjs +0 -3
  1443. package/dist/ShieldSecurity-U3VBFZMO.mjs.map +0 -1
  1444. package/dist/ShieldSlash-PNJYGLYA.mjs +0 -3
  1445. package/dist/ShieldSlash-PNJYGLYA.mjs.map +0 -1
  1446. package/dist/ShieldTick-EYDNIDIJ.mjs +0 -3
  1447. package/dist/ShieldTick-EYDNIDIJ.mjs.map +0 -1
  1448. package/dist/Slack-K7NWXLO4.mjs +0 -3
  1449. package/dist/Slack-K7NWXLO4.mjs.map +0 -1
  1450. package/dist/Slash-PTH7I3VA.mjs +0 -3
  1451. package/dist/Slash-PTH7I3VA.mjs.map +0 -1
  1452. package/dist/Smallcaps-5CGXI2OD.mjs +0 -3
  1453. package/dist/Smallcaps-5CGXI2OD.mjs.map +0 -1
  1454. package/dist/SmartHome-XLYADTFL.mjs +0 -3
  1455. package/dist/SmartHome-XLYADTFL.mjs.map +0 -1
  1456. package/dist/Sort-E2GT57EG.mjs +0 -3
  1457. package/dist/Sort-E2GT57EG.mjs.map +0 -1
  1458. package/dist/Sound-QZEAORTF.mjs +0 -3
  1459. package/dist/Sound-QZEAORTF.mjs.map +0 -1
  1460. package/dist/Spotify-QZTGVT35.mjs +0 -3
  1461. package/dist/Spotify-QZTGVT35.mjs.map +0 -1
  1462. package/dist/Star-PIWRN7BK.mjs +0 -3
  1463. package/dist/Star-PIWRN7BK.mjs.map +0 -1
  1464. package/dist/Sticker-J7LX66EQ.mjs +0 -3
  1465. package/dist/Sticker-J7LX66EQ.mjs.map +0 -1
  1466. package/dist/Stop-CIBGGFGV.mjs +0 -3
  1467. package/dist/Stop-CIBGGFGV.mjs.map +0 -1
  1468. package/dist/StopCircle-BBG2CWUF.mjs +0 -3
  1469. package/dist/StopCircle-BBG2CWUF.mjs.map +0 -1
  1470. package/dist/Story-QYYFT37P.mjs +0 -3
  1471. package/dist/Story-QYYFT37P.mjs.map +0 -1
  1472. package/dist/Sun-K7UA4TWU.mjs +0 -3
  1473. package/dist/Sun-K7UA4TWU.mjs.map +0 -1
  1474. package/dist/TagCross-PT7W3LE4.mjs +0 -3
  1475. package/dist/TagCross-PT7W3LE4.mjs.map +0 -1
  1476. package/dist/TagUser-ASQTTKIX.mjs +0 -3
  1477. package/dist/TagUser-ASQTTKIX.mjs.map +0 -1
  1478. package/dist/Teacher-EPPWX6CR.mjs +0 -3
  1479. package/dist/Teacher-EPPWX6CR.mjs.map +0 -1
  1480. package/dist/Text-US25RWNI.mjs +0 -3
  1481. package/dist/Text-US25RWNI.mjs.map +0 -1
  1482. package/dist/TextBlock-YQEYAPYA.mjs +0 -3
  1483. package/dist/TextBlock-YQEYAPYA.mjs.map +0 -1
  1484. package/dist/TextBold-CMVI56IO.mjs +0 -3
  1485. package/dist/TextBold-CMVI56IO.mjs.map +0 -1
  1486. package/dist/TextItalic-KJUMX7S6.mjs +0 -3
  1487. package/dist/TextItalic-KJUMX7S6.mjs.map +0 -1
  1488. package/dist/TextUnderline-KORJCL3L.mjs +0 -3
  1489. package/dist/TextUnderline-KORJCL3L.mjs.map +0 -1
  1490. package/dist/TextalignCenter-FXUXYHAX.mjs +0 -3
  1491. package/dist/TextalignCenter-FXUXYHAX.mjs.map +0 -1
  1492. package/dist/TextalignJustifycenter-IECWBOTP.mjs +0 -3
  1493. package/dist/TextalignJustifycenter-IECWBOTP.mjs.map +0 -1
  1494. package/dist/TextalignJustifyleft-ARICIXJB.mjs +0 -3
  1495. package/dist/TextalignJustifyleft-ARICIXJB.mjs.map +0 -1
  1496. package/dist/TextalignJustifyright-6BDZEGME.mjs +0 -3
  1497. package/dist/TextalignJustifyright-6BDZEGME.mjs.map +0 -1
  1498. package/dist/TextalignLeft-QAVX4LZ4.mjs +0 -3
  1499. package/dist/TextalignLeft-QAVX4LZ4.mjs.map +0 -1
  1500. package/dist/TextalignRight-XT6NB3WJ.mjs +0 -3
  1501. package/dist/TextalignRight-XT6NB3WJ.mjs.map +0 -1
  1502. package/dist/TickCircle-4JWHEMMI.mjs +0 -3
  1503. package/dist/TickCircle-4JWHEMMI.mjs.map +0 -1
  1504. package/dist/TickSquare-VA3EIOX7.mjs +0 -3
  1505. package/dist/TickSquare-VA3EIOX7.mjs.map +0 -1
  1506. package/dist/Ticket-DOMCU6MW.mjs +0 -3
  1507. package/dist/Ticket-DOMCU6MW.mjs.map +0 -1
  1508. package/dist/TicketDiscount-ZVZUOCRN.mjs +0 -3
  1509. package/dist/TicketDiscount-ZVZUOCRN.mjs.map +0 -1
  1510. package/dist/Translate-VDDWZG7F.mjs +0 -3
  1511. package/dist/Translate-VDDWZG7F.mjs.map +0 -1
  1512. package/dist/Trash-WZORNB4E.mjs +0 -3
  1513. package/dist/Trash-WZORNB4E.mjs.map +0 -1
  1514. package/dist/Triangle-Q3H7YAZW.mjs +0 -3
  1515. package/dist/Triangle-Q3H7YAZW.mjs.map +0 -1
  1516. package/dist/TrushSquare-S6ZCYHQL.mjs +0 -3
  1517. package/dist/TrushSquare-S6ZCYHQL.mjs.map +0 -1
  1518. package/dist/Undo-5YA4HBJL.mjs +0 -3
  1519. package/dist/Undo-5YA4HBJL.mjs.map +0 -1
  1520. package/dist/Unlimited-UYPPTOJK.mjs +0 -3
  1521. package/dist/Unlimited-UYPPTOJK.mjs.map +0 -1
  1522. package/dist/Unlock-5B6LVBFN.mjs +0 -3
  1523. package/dist/Unlock-5B6LVBFN.mjs.map +0 -1
  1524. package/dist/User-KLJLNXAW.mjs +0 -3
  1525. package/dist/User-KLJLNXAW.mjs.map +0 -1
  1526. package/dist/UserAdd-UOEKYPRY.mjs +0 -3
  1527. package/dist/UserAdd-UOEKYPRY.mjs.map +0 -1
  1528. package/dist/UserCirlceAdd-VA7KCSAW.mjs +0 -3
  1529. package/dist/UserCirlceAdd-VA7KCSAW.mjs.map +0 -1
  1530. package/dist/UserEdit-QMOLCXRQ.mjs +0 -3
  1531. package/dist/UserEdit-QMOLCXRQ.mjs.map +0 -1
  1532. package/dist/UserMinus-MGZ5S2HA.mjs +0 -3
  1533. package/dist/UserMinus-MGZ5S2HA.mjs.map +0 -1
  1534. package/dist/UserOctagon-JUYJJFUL.mjs +0 -3
  1535. package/dist/UserOctagon-JUYJJFUL.mjs.map +0 -1
  1536. package/dist/UserRemove-G7MKYUEN.mjs +0 -3
  1537. package/dist/UserRemove-G7MKYUEN.mjs.map +0 -1
  1538. package/dist/UserSearch-LJXRZNAS.mjs +0 -3
  1539. package/dist/UserSearch-LJXRZNAS.mjs.map +0 -1
  1540. package/dist/UserSquare-Q3FP253V.mjs +0 -3
  1541. package/dist/UserSquare-Q3FP253V.mjs.map +0 -1
  1542. package/dist/UserTag-ICUR5C4V.mjs +0 -3
  1543. package/dist/UserTag-ICUR5C4V.mjs.map +0 -1
  1544. package/dist/UserTick-3TXGN3E4.mjs +0 -3
  1545. package/dist/UserTick-3TXGN3E4.mjs.map +0 -1
  1546. package/dist/Verify-DE6QVJRE.mjs +0 -3
  1547. package/dist/Verify-DE6QVJRE.mjs.map +0 -1
  1548. package/dist/Video-2QGRNG3O.mjs +0 -3
  1549. package/dist/Video-2QGRNG3O.mjs.map +0 -1
  1550. package/dist/VideoCircle-OHD4MRL3.mjs +0 -3
  1551. package/dist/VideoCircle-OHD4MRL3.mjs.map +0 -1
  1552. package/dist/VideoPlay-666B4R2A.mjs +0 -3
  1553. package/dist/VideoPlay-666B4R2A.mjs.map +0 -1
  1554. package/dist/VideoSlash-53J47SKL.mjs +0 -3
  1555. package/dist/VideoSlash-53J47SKL.mjs.map +0 -1
  1556. package/dist/VideoSquare-R6EYB4LH.mjs +0 -3
  1557. package/dist/VideoSquare-R6EYB4LH.mjs.map +0 -1
  1558. package/dist/VoiceSquare-T7WNIKWE.mjs +0 -3
  1559. package/dist/VoiceSquare-T7WNIKWE.mjs.map +0 -1
  1560. package/dist/VolumeCross-BYSHSG6X.mjs +0 -3
  1561. package/dist/VolumeCross-BYSHSG6X.mjs.map +0 -1
  1562. package/dist/VolumeHigh-IGUFYHSL.mjs +0 -3
  1563. package/dist/VolumeHigh-IGUFYHSL.mjs.map +0 -1
  1564. package/dist/VolumeLow-UE3BAWDV.mjs +0 -3
  1565. package/dist/VolumeLow-UE3BAWDV.mjs.map +0 -1
  1566. package/dist/VolumeLow1-EO6JGVE6.mjs +0 -3
  1567. package/dist/VolumeLow1-EO6JGVE6.mjs.map +0 -1
  1568. package/dist/VolumeMute-UFETKTFO.mjs +0 -3
  1569. package/dist/VolumeMute-UFETKTFO.mjs.map +0 -1
  1570. package/dist/VolumeSlash-5SN2ESOX.mjs +0 -3
  1571. package/dist/VolumeSlash-5SN2ESOX.mjs.map +0 -1
  1572. package/dist/VolumeUp-2ZUORG3U.mjs +0 -3
  1573. package/dist/VolumeUp-2ZUORG3U.mjs.map +0 -1
  1574. package/dist/Warning2-HGWJQGXZ.mjs +0 -3
  1575. package/dist/Warning2-HGWJQGXZ.mjs.map +0 -1
  1576. package/dist/Whatsapp-SMQLL7JP.mjs +0 -3
  1577. package/dist/Whatsapp-SMQLL7JP.mjs.map +0 -1
  1578. package/dist/Wifi-ZVCJIIUD.mjs +0 -3
  1579. package/dist/Wifi-ZVCJIIUD.mjs.map +0 -1
  1580. package/dist/WifiSquare-PWL2NWJ2.mjs +0 -3
  1581. package/dist/WifiSquare-PWL2NWJ2.mjs.map +0 -1
  1582. package/dist/Windows-OTGPOV5B.mjs +0 -3
  1583. package/dist/Windows-OTGPOV5B.mjs.map +0 -1
  1584. package/dist/Youtube-UJ7IX23L.mjs +0 -3
  1585. package/dist/Youtube-UJ7IX23L.mjs.map +0 -1
  1586. package/dist/advanced-motion.d.mts +0 -93
  1587. package/dist/advanced-motion.js +0 -2
  1588. package/dist/advanced-motion.js.map +0 -1
  1589. package/dist/advanced-motion.mjs +0 -2
  1590. package/dist/advanced-motion.mjs.map +0 -1
  1591. package/dist/chunk-36N7GXIA.mjs +0 -2
  1592. package/dist/chunk-36N7GXIA.mjs.map +0 -1
  1593. package/dist/chunk-57XAC4ZA.mjs +0 -2
  1594. package/dist/chunk-57XAC4ZA.mjs.map +0 -1
  1595. package/dist/chunk-6JWIMJDJ.mjs +0 -2
  1596. package/dist/chunk-6JWIMJDJ.mjs.map +0 -1
  1597. package/dist/chunk-7QQMY5I2.mjs +0 -2
  1598. package/dist/chunk-7QQMY5I2.mjs.map +0 -1
  1599. package/dist/chunk-DMLVCGZL.mjs +0 -2
  1600. package/dist/chunk-DMLVCGZL.mjs.map +0 -1
  1601. package/dist/chunk-DP2CN36N.mjs +0 -2
  1602. package/dist/chunk-DP2CN36N.mjs.map +0 -1
  1603. package/dist/chunk-EE2MW3B5.mjs +0 -2
  1604. package/dist/chunk-EE2MW3B5.mjs.map +0 -1
  1605. package/dist/chunk-O5U2T64X.mjs +0 -2
  1606. package/dist/chunk-O5U2T64X.mjs.map +0 -1
  1607. package/dist/chunk-UHN7T3BX.mjs +0 -2
  1608. package/dist/chunk-UHN7T3BX.mjs.map +0 -1
  1609. package/dist/chunk-ULNG6SWK.mjs +0 -2
  1610. package/dist/chunk-ULNG6SWK.mjs.map +0 -1
  1611. package/dist/chunk-V65I7CVX.mjs +0 -2
  1612. package/dist/chunk-V65I7CVX.mjs.map +0 -1
  1613. package/dist/chunk-WSA7CYMB.mjs +0 -2
  1614. package/dist/chunk-WSA7CYMB.mjs.map +0 -1
  1615. package/dist/chunk-X3YDLY2H.mjs +0 -2
  1616. package/dist/chunk-X3YDLY2H.mjs.map +0 -1
  1617. package/dist/chunk-XJAQ7MK5.mjs +0 -2
  1618. package/dist/chunk-XJAQ7MK5.mjs.map +0 -1
  1619. package/dist/chunk-Z45QNK2S.mjs +0 -2
  1620. package/dist/chunk-Z45QNK2S.mjs.map +0 -1
  1621. package/dist/dashboard-MmFfZs15.d.mts +0 -1882
  1622. package/dist/icons-DcEq-9hv.d.mts +0 -136
  1623. package/dist/iconsax-icon-names-OC4Z7756.mjs +0 -273
  1624. package/dist/iconsax-icon-names-OC4Z7756.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Action.tsx","../src/components/Link.tsx","../src/components/Modal.tsx","../src/components/Grid.tsx","../src/components/Stack.tsx","../src/components/Divider.tsx","../src/components/Panel.tsx","../src/components/ActionToolbar.tsx","../src/components/Navigation.tsx","../src/components/Pagination.tsx","../src/components/BottomSheet.tsx","../src/components/ConfirmModal.tsx","../src/components/Menu.tsx","../src/components/ContextMenu.tsx","../src/components/Command.tsx","../src/components/ScrollArea.tsx","../src/hooks/useScrollToggle.ts","../src/components/ScrollToTop.tsx","../src/components/ThemeToggle.tsx","../src/lib/icon-names.ts"],"names":["isBrowser","useReducedMotion","reduce","setReduce","React","_a","mq","onChange","Action","className","children","actionType","feedback","particleEffect","rippleEffect","soundEffect","hapticFeedback","transparency","blurIntensity","glowIntensity","glowColor","loading","iconOnly","disabled","rest","ref","reduced","runEffects","event","AudioContextClass","audioContext","oscillator","gainNode","button","rect","x","y","size","ripple","style","i","particle","angle","velocity","vx","vy","styleVars","cls","merge","onClick","href","anchorRest","jsx","Button","e","btnRest","Link","variant","external","variantClasses","sizeClasses","useCombinedRefs","refs","node","Modal","isOpen","onClose","showCloseButton","closeOnOverlayClick","title","description","showBackdrop","backdropClassName","centered","modalRef","combinedRef","handleEscape","scrollbarWidth","handleOverlayClick","generatedTitleId","generatedDescId","titleId","descriptionId","jsxs","Grid","cols","gap","gapX","gapY","responsive","props","colsClasses","gapClasses","gapXClasses","gapYClasses","Stack","direction","spacing","align","justify","wrap","directionClasses","spacingClasses","alignClasses","justifyClasses","DividerComponent","orientation","color","orientationClasses","colorClasses","Divider","Panel","effect","borderOpacity","shadowOpacity","_hoverEffect","animationEffect","padding","customPadding","rounded","customRounded","background","gradientColors","patternType","backgroundImage","backgroundVideo","interactive","hoverScale","hoverRotate","hoverGlow","cardProps","styleClasses","baseClasses","effectClasses","paddingClasses","roundedClasses","patternBackground","backgroundStyles","styles","hoverClasses","classes","panelClasses","Card","ActionToolbarComponent","isSelectMode","totalCount","selectedCount","actions","selectModeActions","onToggleSelectMode","onToggleSelectAll","onCancelSelect","getBadgeColor","useCallback","renderButton","action","key","Icon","index","ActionToolbar","Navigation","value","defaultValue","onValueChange","scale","activeTab","setActiveTab","isControlled","currentValue","child","NavigationList","_onValueChange","getStyleClasses","getScaleClasses","NavigationItem","active","handleClick","NavigationContent","NavigationComponent","Pagination","currentPage","totalPages","onPageChange","showFirstLast","showPrevNext","maxVisiblePages","shape","getVisiblePages","pages","halfVisible","start","end","getSizeClasses","getShapeClasses","getVariantClasses","isActive","handlePageClick","page","visiblePages","PaginationOutlined","PaginationMinimal","PaginationWithInfo","totalItems","itemsPerPage","showInfo","startItem","endItem","Fragment","BottomSheet","open","onOpenChange","height","closeOnBackdropClick","closeOnEscape","showDragHandle","snapPoints","defaultSnap","isVisible","setIsVisible","isAnimating","setIsAnimating","currentHeight","setCurrentHeight","isDragging","setIsDragging","startY","setStartY","currentY","setCurrentY","heightClasses","timer","handleTouchStart","handleTouchMove","handleTouchEnd","deltaY","threshold","currentIndex","nextIndex","BottomSheetHeader","BottomSheetContent","ConfirmModal","onConfirm","message","warning","confirmText","cancelText","confirmButtonText","type","showInput","inputValue","onInputChange","inputPlaceholder","inputLabel","requiredInputValue","showCancel","_ref","config","isDisabled","Menu","MenuItem","icon","MenuSeparator","MenuLabel","MenuHorizontal","MenuVertical","MenuCompact","ContextMenu","controlledOpen","trigger","_placement","_align","_offset","internalOpen","setInternalOpen","coords","setCoords","triggerRef","menuRef","handleOpenChange","newOpen","handleContextMenu","updatePosition","menuRect","viewportWidth","viewportHeight","handleClickOutside","ContextMenuItem","ContextMenuSeparator","ContextMenuLabel","ContextMenuGroup","Command","placeholder","controlledSearchValue","onSearchChange","internalSearchValue","setInternalSearchValue","selectedIndex","setSelectedIndex","commandRef","inputRef","listRef","searchValue","handleSearchChange","handleKeyDown","items","itemCount","prev","selectedItem","_b","CommandInput","CommandList","CommandItem","selected","onSelect","CommandGroup","heading","CommandSeparator","CommandEmpty","CommandDialog","ScrollArea","scrollHideDelay","showScrollbar","setShowScrollbar","timeoutRef","handleMouseEnter","handleMouseLeave","ScrollBar","useScrollToggle","options","showOnMount","smooth","useState","mounted","setMounted","useEffect","toggleVisibility","ScrollToTop","scrollToTop","ThemeToggle","showLabel","label","theme","setTheme","resolvedTheme","useTheme","iconSizes","renderIcon","iconNames","iconProviderMapping","PROJECT_ICONS","isValidIconName","name","getIconNameForProvider","iconName","provider","mapping"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { merge } from \"../lib/utils\";\nimport { Button, type ButtonProps } from \"./Button\";\n\n/** Action 전용 옵션(버튼 공통 옵션은 ButtonProps에서 상속) */\ntype ActionKind =\n | \"primary\" | \"secondary\" | \"tertiary\"\n | \"magical\" | \"cyberpunk\" | \"ninja\" | \"wizard\" | \"sniper\";\ntype FeedbackKind = \"ripple\" | \"particle\" | \"sound\" | \"haptic\" | \"glitch\" | \"sparkle\" | \"smoke\";\n\ntype ActionExtras = {\n actionType?: ActionKind;\n feedback?: FeedbackKind;\n\n particleEffect?: boolean;\n rippleEffect?: boolean;\n soundEffect?: boolean;\n hapticFeedback?: boolean;\n\n transparency?: number; // 0~1\n blurIntensity?: number; // px\n glowIntensity?: number; // px\n glowColor?: string; // css color\n};\n\n/**\n * Action 컴포넌트의 props / Action component props\n * @typedef {Object} ActionProps\n * @property {ActionKind} [actionType=\"primary\"] - Action 타입 / Action type\n * @property {FeedbackKind} [feedback=\"ripple\"] - 피드백 타입 / Feedback type\n * @property {boolean} [particleEffect=false] - 파티클 효과 활성화 / Enable particle effect\n * @property {boolean} [rippleEffect=false] - 리플 효과 활성화 / Enable ripple effect\n * @property {boolean} [soundEffect=false] - 사운드 효과 활성화 / Enable sound effect\n * @property {boolean} [hapticFeedback=false] - 햅틱 피드백 활성화 / Enable haptic feedback\n * @property {number} [transparency=1] - 투명도 (0-1) / Transparency (0-1)\n * @property {number} [blurIntensity=0] - blur 강도 (px) / Blur intensity (px)\n * @property {number} [glowIntensity=0] - 글로우 강도 (px) / Glow intensity (px)\n * @property {string} [glowColor=\"rgba(91,140,255,.8)\"] - 글로우 색상 / Glow color\n * @extends {ButtonProps}\n */\nexport type ActionProps = ButtonProps & ActionExtras;\n\ntype AnchorEl = HTMLAnchorElement;\ntype ButtonEl = HTMLButtonElement;\ntype AnchorOrButton = AnchorEl | ButtonEl;\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction useReducedMotion() {\n const [reduce, setReduce] = React.useState(false);\n React.useEffect(() => {\n if (!isBrowser || !(\"matchMedia\" in window)) return;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const onChange = () => setReduce(!!mq.matches);\n onChange();\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return reduce;\n}\n\n/**\n * Action 컴포넌트 / Action component\n * \n * 고급 효과를 가진 액션 버튼 컴포넌트입니다.\n * Button 컴포넌트를 기반으로 하며, 파티클, 리플, 사운드, 햅틱 피드백 등을 지원합니다.\n * \n * Action button component with advanced effects.\n * Based on Button component, supports particle, ripple, sound, haptic feedback, etc.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Action>클릭</Action>\n * \n * @example\n * // 고급 효과 / Advanced effects\n * <Action \n * actionType=\"magical\"\n * feedback=\"particle\"\n * particleEffect\n * rippleEffect\n * >\n * 마법 버튼\n * </Action>\n * \n * @param {ActionProps} props - Action 컴포넌트의 props / Action component props\n * @param {React.Ref<AnchorOrButton>} ref - button 또는 anchor 요소 ref / button or anchor element ref\n * @returns {JSX.Element} Action 컴포넌트 / Action component\n */\nexport const Action = React.forwardRef<AnchorOrButton, ActionProps>(\n (\n {\n className,\n children,\n actionType = \"primary\",\n feedback = \"ripple\",\n particleEffect = false,\n rippleEffect = false,\n soundEffect = false,\n hapticFeedback = false,\n transparency = 1,\n blurIntensity = 0,\n glowIntensity = 0,\n glowColor = \"rgba(91,140,255,.8)\",\n loading = false,\n iconOnly = false,\n disabled,\n ...rest\n },\n ref\n ) => {\n const reduced = useReducedMotion();\n\n const runEffects = React.useCallback((event: React.MouseEvent) => {\n if (hapticFeedback && isBrowser && \"vibrate\" in navigator && !reduced) {\n try { navigator.vibrate?.(30); } catch { /* ignore */ }\n }\n \n if (soundEffect && !reduced && isBrowser) {\n // 간단한 클릭 사운드 효과 (선택적)\n try {\n const AudioContextClass = window.AudioContext || (window as typeof window & { webkitAudioContext?: typeof AudioContext }).webkitAudioContext;\n if (!AudioContextClass) return;\n const audioContext = new AudioContextClass();\n const oscillator = audioContext.createOscillator();\n const gainNode = audioContext.createGain();\n \n oscillator.connect(gainNode);\n gainNode.connect(audioContext.destination);\n \n oscillator.frequency.value = 800;\n oscillator.type = 'sine';\n gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);\n gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1);\n \n oscillator.start(audioContext.currentTime);\n oscillator.stop(audioContext.currentTime + 0.1);\n } catch {\n // 오디오 컨텍스트를 지원하지 않는 환경에서는 무시\n }\n }\n \n if (rippleEffect && !reduced && event.currentTarget) {\n // Ripple 효과: 클릭 위치에 원형 애니메이션 생성\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const size = Math.max(rect.width, rect.height);\n \n const ripple = document.createElement('span');\n ripple.style.cssText = `\n position: absolute;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.6);\n width: ${size}px;\n height: ${size}px;\n left: ${x - size / 2}px;\n top: ${y - size / 2}px;\n pointer-events: none;\n animation: ripple-animation 0.6s ease-out;\n `;\n \n // CSS 애니메이션 정의 (한 번만)\n if (!document.getElementById('ripple-animation-style')) {\n const style = document.createElement('style');\n style.id = 'ripple-animation-style';\n style.textContent = `\n @keyframes ripple-animation {\n to {\n transform: scale(4);\n opacity: 0;\n }\n }\n `;\n document.head.appendChild(style);\n }\n \n button.style.position = 'relative';\n button.style.overflow = 'hidden';\n button.appendChild(ripple);\n \n setTimeout(() => {\n ripple.remove();\n }, 600);\n }\n \n if (particleEffect && !reduced && event.currentTarget) {\n // 간단한 파티클 효과: 클릭 위치에서 작은 원들이 퍼져나감\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n \n for (let i = 0; i < 5; i++) {\n const particle = document.createElement('span');\n const angle = (Math.PI * 2 * i) / 5;\n const velocity = 30 + Math.random() * 20;\n const vx = Math.cos(angle) * velocity;\n const vy = Math.sin(angle) * velocity;\n \n particle.style.cssText = `\n position: absolute;\n width: 4px;\n height: 4px;\n background: ${glowColor || 'rgba(91,140,255,0.8)'};\n border-radius: 50%;\n left: ${x}px;\n top: ${y}px;\n pointer-events: none;\n animation: particle-animation-${i} 0.5s ease-out forwards;\n `;\n \n // CSS 애니메이션 정의\n if (!document.getElementById(`particle-animation-${i}`)) {\n const style = document.createElement('style');\n style.id = `particle-animation-${i}`;\n style.textContent = `\n @keyframes particle-animation-${i} {\n to {\n transform: translate(${vx}px, ${vy}px) scale(0);\n opacity: 0;\n }\n }\n `;\n document.head.appendChild(style);\n }\n \n button.style.position = 'relative';\n button.appendChild(particle);\n \n setTimeout(() => {\n particle.remove();\n }, 500);\n }\n }\n }, [hapticFeedback, soundEffect, rippleEffect, particleEffect, reduced, glowColor]);\n\n const styleVars = React.useMemo<React.CSSProperties>(() => ({\n \"--action-opacity\": String(transparency),\n \"--action-blur\": `${blurIntensity}px`,\n \"--action-glow-size\": `${glowIntensity}px`,\n \"--action-glow-color\": glowColor,\n }) as React.CSSProperties, [transparency, blurIntensity, glowIntensity, glowColor]);\n\n const cls = React.useMemo(\n () =>\n merge(\n \"hua-action relative inline-flex items-center rounded-xl px-4 py-2 font-medium\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60\",\n loading && \"cursor-wait opacity-80\",\n iconOnly && \"justify-center\",\n className\n ),\n [className, loading, iconOnly]\n );\n\n /** 분기 1) href가 있으면 앵커 브랜치 */\n if (\"href\" in rest && rest.href) {\n const { onClick, href, ...anchorRest } = rest as Extract<ButtonProps, { href: string }>;\n\n const handleClick: React.MouseEventHandler<AnchorEl> = (e) => {\n if (disabled || loading) { e.preventDefault(); e.stopPropagation(); return; }\n runEffects(e);\n onClick?.(e);\n };\n\n return (\n <Button\n ref={ref as React.Ref<AnchorEl>}\n href={href}\n className={cls}\n style={styleVars}\n onClick={handleClick}\n aria-busy={loading || undefined}\n aria-label={iconOnly ? (anchorRest[\"aria-label\"] as string) : undefined}\n data-action={actionType}\n data-feedback={feedback}\n data-reduced-motion={reduced ? \"true\" : \"false\"}\n disabled={disabled}\n {...anchorRest}\n >\n {children}\n </Button>\n );\n }\n\n /** 분기 2) 기본 버튼 브랜치 */\n const { onClick, ...btnRest } = rest as Extract<ButtonProps, { href?: undefined }>;\n\n const handleClick: React.MouseEventHandler<ButtonEl> = (e) => {\n if (disabled || loading) return;\n runEffects(e);\n onClick?.(e);\n };\n\n return (\n <Button\n ref={ref as React.Ref<ButtonEl>}\n className={cls}\n style={styleVars}\n onClick={handleClick}\n disabled={disabled}\n aria-busy={loading || undefined}\n aria-label={iconOnly ? (btnRest[\"aria-label\"] as string) : undefined}\n data-action={actionType}\n data-feedback={feedback}\n data-reduced-motion={reduced ? \"true\" : \"false\"}\n {...btnRest}\n >\n {children}\n </Button>\n );\n }\n);\n\nAction.displayName = \"Action\";\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Link 컴포넌트의 props / Link component props\n * @typedef {Object} LinkProps\n * @property {string} href - 링크 URL / Link URL\n * @property {React.ReactNode} children - 링크 텍스트 또는 내용 / Link text or content\n * @property {\"default\" | \"primary\" | \"secondary\" | \"ghost\" | \"underline\"} [variant=\"default\"] - Link 스타일 변형 / Link style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Link 크기 / Link size\n * @property {boolean} [external=false] - 외부 링크 여부 (target=\"_blank\" 자동 설정) / External link (auto sets target=\"_blank\")\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {() => void} [onClick] - 클릭 이벤트 핸들러 / Click event handler\n */\nexport interface LinkProps {\n href: string\n children: React.ReactNode\n variant?: \"default\" | \"primary\" | \"secondary\" | \"ghost\" | \"underline\"\n size?: \"sm\" | \"md\" | \"lg\"\n external?: boolean\n className?: string\n onClick?: () => void\n}\n\n/**\n * Link 컴포넌트 / Link component\n * \n * 링크를 표시하는 컴포넌트입니다.\n * 외부 링크의 경우 자동으로 `target=\"_blank\"`와 `rel=\"noopener noreferrer\"`를 설정합니다.\n * \n * Link component for displaying links.\n * Automatically sets `target=\"_blank\"` and `rel=\"noopener noreferrer\"` for external links.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Link href=\"/about\">소개</Link>\n * \n * @example\n * // 외부 링크 / External link\n * <Link href=\"https://example.com\" external>\n * 외부 사이트\n * </Link>\n * \n * @example\n * // Primary 스타일 / Primary style\n * <Link href=\"/contact\" variant=\"primary\" size=\"lg\">\n * 문의하기\n * </Link>\n * \n * @param {LinkProps} props - Link 컴포넌트의 props / Link component props\n * @returns {JSX.Element} Link 컴포넌트 / Link component\n */\nexport function Link({ \n href,\n children,\n className,\n variant = \"default\",\n size = \"md\",\n external = false,\n onClick\n}: LinkProps) {\n const variantClasses = {\n default: \"text-gray-900 dark:text-white hover:text-gray-700 dark:hover:text-gray-300\",\n primary: \"text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300\",\n secondary: \"text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200\",\n ghost: \"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:bg-gray-800\",\n underline: \"text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 underline hover:no-underline\"\n }\n\n const sizeClasses = {\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\"\n }\n\n return (\n <a\n href={href}\n className={merge(\n \"transition-colors duration-200\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n onClick={onClick}\n >\n {children}\n </a>\n )\n} ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Modal 컴포넌트의 props / Modal component props\n * @typedef {Object} ModalProps\n * @property {boolean} isOpen - 모달 열림/닫힘 상태 / Modal open/close state\n * @property {() => void} onClose - 모달 닫기 콜백 함수 / Modal close callback function\n * @property {React.ReactNode} children - 모달 내용 / Modal content\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\"} [size=\"md\"] - 모달 크기 / Modal size\n * @property {boolean} [showCloseButton=true] - 닫기 버튼 표시 여부 / Show close button\n * @property {boolean} [closeOnOverlayClick=true] - 오버레이 클릭 시 닫기 여부 / Close on overlay click\n * @property {string} [title] - 모달 제목 / Modal title\n * @property {string} [description] - 모달 설명 / Modal description\n * @property {boolean} [showBackdrop=true] - 배경 오버레이 표시 여부 / Show backdrop overlay\n * @property {string} [backdropClassName] - 배경 오버레이 추가 CSS 클래스 / Additional CSS class for backdrop\n * @property {boolean} [centered=true] - 모달을 화면 중앙에 배치할지 여부 / Center modal on screen\n * @property {string} [className] - 모달 컨테이너 추가 CSS 클래스 / Additional CSS class for modal container\n */\nexport interface ModalProps {\n isOpen: boolean\n onClose: () => void\n children: React.ReactNode\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\"\n showCloseButton?: boolean\n closeOnOverlayClick?: boolean\n title?: string\n description?: string\n showBackdrop?: boolean\n backdropClassName?: string\n centered?: boolean\n className?: string\n}\n\n// Ref 병합 유틸리티\nfunction useCombinedRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\n return React.useCallback(\n (node: T) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(node);\n } else {\n (ref as React.MutableRefObject<T | null>).current = node;\n }\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs\n );\n}\n\n/**\n * Modal 컴포넌트 / Modal component\n * \n * 오버레이와 함께 표시되는 모달 다이얼로그 컴포넌트입니다.\n * ESC 키로 닫기, 오버레이 클릭으로 닫기, 접근성 속성(ARIA)을 지원합니다.\n * \n * Modal dialog component displayed with overlay.\n * Supports closing with ESC key, overlay click, and ARIA accessibility attributes.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [isOpen, setIsOpen] = useState(false)\n * \n * <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <p>모달 내용</p>\n * </Modal>\n * \n * @example\n * // 제목과 설명 포함 / With title and description\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"확인\"\n * description=\"이 작업을 계속하시겠습니까?\"\n * >\n * <Button onClick={handleConfirm}>확인</Button>\n * </Modal>\n * \n * @example\n * // 큰 크기 모달 / Large size modal\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * size=\"xl\"\n * closeOnOverlayClick={false}\n * >\n * <div>큰 모달 내용</div>\n * </Modal>\n * \n * @param {ModalProps} props - Modal 컴포넌트의 props / Modal component props\n * @param {React.Ref<HTMLDivElement>} ref - 모달 컨테이너 ref / Modal container ref\n * @returns {JSX.Element} Modal 컴포넌트 / Modal component\n */\nexport const Modal = React.forwardRef<HTMLDivElement, ModalProps>(\n ({ \n className,\n isOpen,\n onClose,\n children,\n size = \"md\",\n showCloseButton = true,\n closeOnOverlayClick = true,\n title,\n description,\n showBackdrop = true,\n backdropClassName,\n centered = true\n }, ref) => {\n const modalRef = React.useRef<HTMLDivElement>(null)\n const combinedRef = useCombinedRefs(ref, modalRef)\n\n // ESC 키로 모달 닫기 및 스크롤 잠금 (화면 흔들림 방지)\n React.useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose()\n }\n }\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape)\n // 스크롤바 너비 계산하여 padding 추가 (화면 흔들림 방지)\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n document.body.style.overflow = \"hidden\"\n document.body.style.paddingRight = `${scrollbarWidth}px`\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape)\n document.body.style.overflow = \"unset\"\n document.body.style.paddingRight = \"unset\"\n }\n }, [isOpen, onClose])\n\n // 모달 외부 클릭으로 닫기\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose()\n }\n }\n\n // 모달 크기 클래스 (반응형 포함)\n const sizeClasses = {\n sm: \"md:w-80\", // 20rem = 320px\n md: \"md:w-96\", // 24rem = 384px\n lg: \"md:w-[32rem]\", // 32rem = 512px\n xl: \"md:w-[38rem]\", // 38rem = 608px\n \"2xl\": \"md:w-[50rem]\", // 50rem = 800px\n \"3xl\": \"md:w-[72rem]\" // 72rem = 1152px (더 넓게)\n }\n\n // 접근성을 위한 ID 생성\n const generatedTitleId = React.useId()\n const generatedDescId = React.useId()\n const titleId = title ? `modal-title-${generatedTitleId}` : undefined;\n const descriptionId = description ? `modal-description-${generatedDescId}` : undefined;\n\n if (!isOpen) return null\n\n return (\n <div\n className={merge(\n \"fixed top-0 left-0 right-0 bottom-0 z-50 flex justify-center p-4 overflow-hidden\", // PWA 호환성 개선\n centered ? \"items-center\" : \"items-start pt-16\", // 64px 상단 여백\n className\n )}\n style={{\n width: '100vw',\n height: '100vh',\n minHeight: '100vh'\n }}\n onClick={handleOverlayClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n >\n {/* 배경 오버레이 */}\n {showBackdrop && (\n <div className={merge(\n \"absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300\",\n backdropClassName\n )} />\n )}\n \n {/* 모달 컨테이너 */}\n <div\n ref={combinedRef}\n className={merge(\n \"relative bg-white dark:bg-gray-800 rounded-lg shadow-2xl border border-gray-200/50 dark:border-gray-700/50 transform transition-all duration-300 ease-out overflow-hidden\",\n // 반응형: 모바일 전체, 데스크톱 고정\n \"w-[calc(100vw-2rem)]\", // 모바일: 화면 너비 - 패딩\n sizeClasses[size], // 데스크톱: md:w-[72rem]\n \"max-w-[calc(100vw-2rem)] md:max-w-none\", // 모바일: 최대 너비 제한, 데스크톱: 제한 없음\n \"flex-none\" // flex 컨테이너에서 크기 유지\n )}\n style={{\n animation: \"modalSlideIn 0.3s cubic-bezier(0.16, 1, 0.3, 1)\",\n maxHeight: \"90vh\",\n marginTop: centered ? 'auto' : '0',\n marginBottom: centered ? 'auto' : '0'\n }}\n >\n \n {/* 헤더 */}\n {title && (\n <div className=\"relative z-10 px-6 pt-6 pb-4 border-b border-gray-200/50 dark:border-gray-700/50\">\n {/* 타이틀과 닫기 버튼 - 같은 줄, 양쪽 끝 */}\n <div className=\"flex items-center justify-between gap-4 mb-2\">\n <h2 id={titleId} className=\"text-xl font-semibold text-gray-900 dark:text-white flex-1 min-w-0\">{title}</h2>\n {/* 닫기 버튼 - 타이틀과 같은 계층의 오른쪽 끝 */}\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"flex-shrink-0 p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-all duration-200 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 hover:scale-110 z-20\"\n aria-label=\"닫기\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n {/* 설명 - 아래 줄 */}\n {description && (\n <p id={descriptionId} className=\"text-sm text-gray-600 dark:text-gray-400\">{description}</p>\n )}\n </div>\n )}\n \n {/* 타이틀이 없을 때만 별도 닫기 버튼 */}\n {!title && showCloseButton && (\n <button\n onClick={onClose}\n className=\"absolute top-4 right-4 p-2 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 transition-all duration-200 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 hover:scale-110 z-20\"\n aria-label=\"닫기\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n \n {/* 모달 내용 */}\n <div className={`relative z-10 ${title ? 'px-6 mb-6' : 'p-6'}`}>\n {children}\n </div>\n </div>\n </div>\n )\n})\n\nModal.displayName = \"Modal\" ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Grid 컴포넌트의 props\n * @typedef {Object} GridProps\n * @property {1|2|3|4|5|6|7|8|9|10|11|12} [cols=1] - 그리드 열 개수\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gap=\"md\"] - 그리드 아이템 간 간격\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gapX] - 가로 간격 (gap보다 우선)\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gapY] - 세로 간격\n * @property {boolean} [responsive=true] - 반응형 그리드 활성화 (모바일: 1열, 태블릿: 2열, 데스크톱: 지정 열)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n gap?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n gapX?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n gapY?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n responsive?: boolean\n}\n\n/**\n * Grid 컴포넌트\n * \n * CSS Grid를 사용한 그리드 레이아웃 컴포넌트입니다.\n * 반응형 그리드를 지원하여 모바일부터 데스크톱까지 최적화된 레이아웃을 제공합니다.\n * \n * @component\n * @example\n * // 기본 3열 그리드\n * <Grid cols={3} gap=\"md\">\n * <div>아이템 1</div>\n * <div>아이템 2</div>\n * <div>아이템 3</div>\n * </Grid>\n * \n * @example\n * // 가로/세로 간격 분리\n * <Grid cols={4} gapX=\"lg\" gapY=\"sm\">\n * {items.map(item => <div key={item.id}>{item.content}</div>)}\n * </Grid>\n * \n * @example\n * // 반응형 비활성화 (고정 그리드)\n * <Grid cols={6} responsive={false} gap=\"lg\">\n * <div>고정 6열</div>\n * </Grid>\n * \n * @param {GridProps} props - Grid 컴포넌트의 props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref\n * @returns {JSX.Element} Grid 컴포넌트\n */\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ \n className, \n cols = 1,\n gap = \"md\",\n gapX,\n gapY,\n responsive = true,\n ...props \n }, ref) => {\n const colsClasses = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\n 6: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-6\",\n 7: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-7\",\n 8: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-8\",\n 9: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-9\",\n 10: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-10\",\n 11: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-11\",\n 12: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-12\"\n }\n\n const gapClasses = {\n none: \"gap-0\",\n sm: \"gap-4\", // 16px\n md: \"gap-6\", // 24px\n lg: \"gap-8\", // 32px\n xl: \"gap-12\" // 48px\n }\n\n const gapXClasses = {\n none: \"gap-x-0\",\n sm: \"gap-x-4\", // 16px\n md: \"gap-x-6\", // 24px\n lg: \"gap-x-8\", // 32px\n xl: \"gap-x-12\" // 48px\n }\n\n const gapYClasses = {\n none: \"gap-y-0\",\n sm: \"gap-y-4\", // 16px\n md: \"gap-y-6\", // 24px\n lg: \"gap-y-8\", // 32px\n xl: \"gap-y-12\" // 48px\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"grid\",\n responsive ? colsClasses[cols] : `grid-cols-${cols}`,\n gapX ? gapXClasses[gapX] : gapClasses[gap],\n gapY && gapYClasses[gapY],\n className\n )}\n {...props}\n />\n )\n }\n)\nGrid.displayName = \"Grid\"\n\nexport { Grid } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Stack 컴포넌트의 props\n * @typedef {Object} StackProps\n * @property {\"vertical\" | \"horizontal\"} [direction=\"vertical\"] - 스택 방향\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [spacing=\"md\"] - 아이템 간 간격\n * @property {\"start\" | \"center\" | \"end\" | \"stretch\"} [align=\"start\"] - 교차축 정렬\n * @property {\"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\"} [justify=\"start\"] - 주축 정렬\n * @property {boolean} [wrap=false] - 아이템 줄바꿈 허용\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"vertical\" | \"horizontal\"\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\"\n wrap?: boolean\n}\n\n/**\n * Stack 컴포넌트\n * \n * Flexbox를 사용한 스택 레이아웃 컴포넌트입니다.\n * 수직 또는 수평 방향으로 아이템을 배치하고 정렬할 수 있습니다.\n * \n * @component\n * @example\n * // 기본 수직 스택\n * <Stack spacing=\"md\">\n * <div>아이템 1</div>\n * <div>아이템 2</div>\n * </Stack>\n * \n * @example\n * // 수평 스택, 중앙 정렬\n * <Stack direction=\"horizontal\" spacing=\"lg\" align=\"center\" justify=\"between\">\n * <Button>왼쪽</Button>\n * <Button>오른쪽</Button>\n * </Stack>\n * \n * @example\n * // 줄바꿈 허용\n * <Stack direction=\"horizontal\" wrap spacing=\"sm\">\n * {tags.map(tag => <Badge key={tag}>{tag}</Badge>)}\n * </Stack>\n * \n * @param {StackProps} props - Stack 컴포넌트의 props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref\n * @returns {JSX.Element} Stack 컴포넌트\n */\nconst Stack = React.forwardRef<HTMLDivElement, StackProps>(\n ({ \n className, \n direction = \"vertical\",\n spacing = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n ...props \n }, ref) => {\n const directionClasses = {\n vertical: \"flex flex-col\",\n horizontal: \"flex flex-row\"\n }\n\n const spacingClasses = {\n none: \"\",\n sm: direction === \"vertical\" ? \"space-y-4\" : \"space-x-4\", // 16px\n md: direction === \"vertical\" ? \"space-y-6\" : \"space-x-6\", // 24px\n lg: direction === \"vertical\" ? \"space-y-8\" : \"space-x-8\", // 32px\n xl: direction === \"vertical\" ? \"space-y-12\" : \"space-x-12\" // 48px\n }\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\"\n }\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\"\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n directionClasses[direction],\n spacingClasses[spacing],\n alignClasses[align],\n justifyClasses[justify],\n wrap && \"flex-wrap\",\n className\n )}\n {...props}\n />\n )\n }\n)\nStack.displayName = \"Stack\"\n\nexport { Stack } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Divider 컴포넌트의 props / Divider component props\n * @typedef {Object} DividerProps\n * @property {\"horizontal\" | \"vertical\"} [orientation=\"horizontal\"] - Divider 방향 / Divider orientation\n * @property {\"solid\" | \"dashed\" | \"dotted\" | \"gradient\" | \"glass\"} [variant=\"solid\"] - Divider 스타일 변형 / Divider style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Divider 크기 / Divider size\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [spacing=\"md\"] - Divider 주변 여백 / Divider spacing\n * @property {\"default\" | \"muted\" | \"primary\" | \"secondary\"} [color=\"default\"] - Divider 색상 / Divider color\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"solid\" | \"dashed\" | \"dotted\" | \"gradient\" | \"glass\"\n size?: \"sm\" | \"md\" | \"lg\"\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n color?: \"default\" | \"muted\" | \"primary\" | \"secondary\"\n}\n\n/**\n * Divider 컴포넌트 / Divider component\n * \n * 콘텐츠를 구분하는 구분선 컴포넌트입니다.\n * 가로/세로 방향, 다양한 스타일과 색상을 지원합니다.\n * \n * Divider component for separating content.\n * Supports horizontal/vertical orientation, various styles and colors.\n * \n * @component\n * @example\n * // 기본 사용 (가로) / Basic usage (horizontal)\n * <Divider />\n * \n * @example\n * // 세로 구분선 / Vertical divider\n * <div className=\"flex\">\n * <div>왼쪽</div>\n * <Divider orientation=\"vertical\" />\n * <div>오른쪽</div>\n * </div>\n * \n * @example\n * // 다양한 스타일 / Various styles\n * <Divider variant=\"dashed\" spacing=\"lg\" />\n * <Divider variant=\"gradient\" color=\"primary\" />\n * \n * @param {DividerProps} props - Divider 컴포넌트의 props / Divider component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Divider 컴포넌트 / Divider component\n */\nconst DividerComponent = React.forwardRef<HTMLDivElement, DividerProps>(\n ({ \n className, \n orientation = \"horizontal\",\n variant = \"solid\",\n size = \"md\",\n spacing = \"md\",\n color = \"default\",\n ...props \n }, ref) => {\n const orientationClasses = React.useMemo(() => ({\n horizontal: \"w-full\",\n vertical: \"h-full w-px\"\n }), [])\n\n const sizeClasses = React.useMemo(() => ({\n sm: orientation === \"horizontal\" ? \"h-px\" : \"w-px\",\n md: orientation === \"horizontal\" ? \"h-0.5\" : \"w-0.5\", // 2px\n lg: orientation === \"horizontal\" ? \"h-1\" : \"w-1\" // 4px\n }), [orientation])\n\n const variantClasses = React.useMemo(() => ({\n solid: \"\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n gradient: orientation === \"horizontal\" \n ? \"bg-gradient-to-r from-transparent via-gray-300 to-transparent dark:via-gray-600\"\n : \"bg-gradient-to-b from-transparent via-gray-300 to-transparent dark:via-gray-600\",\n glass: orientation === \"horizontal\"\n ? \"bg-gradient-to-r from-transparent via-white/30 to-transparent\"\n : \"bg-gradient-to-b from-transparent via-white/30 to-transparent\"\n }), [orientation])\n\n const colorClasses = React.useMemo(() => ({\n default: \"bg-gray-200 dark:bg-gray-700\",\n muted: \"bg-gray-100 dark:bg-gray-800\",\n primary: \"bg-blue-200 dark:bg-blue-700\",\n secondary: \"bg-gray-300 dark:bg-gray-600\"\n }), [])\n\n const spacingClasses = React.useMemo(() => ({\n none: \"\",\n sm: orientation === \"horizontal\" ? \"my-4\" : \"mx-4\", // 16px\n md: orientation === \"horizontal\" ? \"my-6\" : \"mx-6\", // 24px\n lg: orientation === \"horizontal\" ? \"my-8\" : \"mx-8\", // 32px\n xl: orientation === \"horizontal\" ? \"my-12\" : \"mx-12\" // 48px\n }), [orientation])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex-shrink-0\",\n orientationClasses[orientation],\n sizeClasses[size],\n variant === \"gradient\" ? variantClasses[variant] : colorClasses[color],\n variant !== \"gradient\" && variantClasses[variant],\n spacingClasses[spacing],\n className\n )}\n {...props}\n />\n )\n }\n)\n\nDividerComponent.displayName = \"Divider\"\n\nconst Divider = React.memo(DividerComponent)\n\nexport { Divider } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Card, CardProps } from \"./Card\"\n\n/**\n * Panel 컴포넌트의 props / Panel component props\n * @typedef {Object} PanelProps\n * @property {\"default\" | \"solid\" | \"glass\" | \"outline\" | \"elevated\" | \"neon\" | \"holographic\" | \"cyberpunk\" | \"minimal\" | \"luxury\"} [style=\"default\"] - Panel 스타일 / Panel style\n * @property {\"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\"} [effect=\"none\"] - Panel 효과 / Panel effect\n * @property {number} [transparency=1] - 투명도 (0-1) / Transparency (0-1)\n * @property {number} [blurIntensity=0] - backdrop-blur 강도 (px) / Backdrop blur intensity (px)\n * @property {number} [borderOpacity=1] - 보더 투명도 (0-1) / Border opacity (0-1)\n * @property {number} [shadowOpacity=1] - 그림자 투명도 (0-1) / Shadow opacity (0-1)\n * @property {number} [glowIntensity=0] - 글로우 강도 (px) / Glow intensity (px)\n * @property {string} [glowColor=\"blue\"] - 글로우 색상 / Glow color\n * @property {boolean} [particleEffect=false] - 파티클 효과 활성화 / Enable particle effect\n * @property {boolean} [hoverEffect=false] - 호버 효과 활성화 / Enable hover effect\n * @property {boolean} [animationEffect=false] - 애니메이션 효과 활성화 / Enable animation effect\n * @property {\"none\" | \"small\" | \"sm\" | \"medium\" | \"md\" | \"large\" | \"lg\" | \"xl\" | \"custom\"} [padding=\"md\"] - 패딩 크기 / Padding size\n * @property {string} [customPadding] - 커스텀 패딩 / Custom padding\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\"} [rounded=\"lg\"] - 둥근 모서리 크기 / Rounded corner size\n * @property {string} [customRounded] - 커스텀 둥근 모서리 / Custom rounded corners\n * @property {\"solid\" | \"gradient\" | \"pattern\" | \"image\" | \"video\"} [background=\"solid\"] - 배경 타입 / Background type\n * @property {string[]} [gradientColors] - 그라디언트 색상 배열 / Gradient color array\n * @property {\"dots\" | \"lines\" | \"grid\" | \"waves\" | \"custom\"} [patternType=\"dots\"] - 패턴 타입 / Pattern type\n * @property {string} [backgroundImage] - 배경 이미지 URL / Background image URL\n * @property {string} [backgroundVideo] - 배경 비디오 URL / Background video URL\n * @property {boolean} [interactive=false] - 인터랙티브 모드 활성화 / Enable interactive mode\n * @property {number} [hoverScale=1.05] - 호버 시 스케일 / Scale on hover\n * @property {number} [hoverRotate=0] - 호버 시 회전 각도 / Rotation angle on hover\n * @property {boolean} [hoverGlow=false] - 호버 시 글로우 효과 / Glow effect on hover\n * @extends {Omit<CardProps, 'variant' | 'style'>}\n */\nexport interface PanelProps extends Omit<CardProps, 'variant' | 'style'> {\n // 🆕 Panel 전용 고급 속성들\n style?: \"default\" | \"solid\" | \"glass\" | \"outline\" | \"elevated\" | \"neon\" | \"holographic\" | \"cyberpunk\" | \"minimal\" | \"luxury\"\n effect?: \"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\"\n \n // 고급 스타일링\n transparency?: number // 0-1 사이 투명도\n blurIntensity?: number // backdrop-blur 강도\n borderOpacity?: number // 보더 투명도\n shadowOpacity?: number // 그림자 투명도\n glowIntensity?: number // 글로우 강도\n glowColor?: string // 글로우 색상\n \n // 고급 효과\n particleEffect?: boolean\n hoverEffect?: boolean\n animationEffect?: boolean\n \n // 레이아웃 옵션\n padding?: \"none\" | \"small\" | \"sm\" | \"medium\" | \"md\" | \"large\" | \"lg\" | \"xl\" | \"custom\"\n customPadding?: string\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\"\n customRounded?: string\n \n // 배경 옵션\n background?: \"solid\" | \"gradient\" | \"pattern\" | \"image\" | \"video\"\n gradientColors?: string[]\n patternType?: \"dots\" | \"lines\" | \"grid\" | \"waves\" | \"custom\"\n backgroundImage?: string\n backgroundVideo?: string\n \n // 인터랙션\n interactive?: boolean\n hoverScale?: number\n hoverRotate?: number\n hoverGlow?: boolean\n}\n\n/**\n * Panel 컴포넌트 / Panel component\n * \n * 고급 스타일링 옵션을 가진 패널 컴포넌트입니다.\n * 다양한 스타일, 효과, 배경 옵션을 지원합니다.\n * Card 컴포넌트를 기반으로 하며, 추가적인 고급 기능을 제공합니다.\n * \n * Panel component with advanced styling options.\n * Supports various styles, effects, and background options.\n * Based on Card component with additional advanced features.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Panel>\n * <div>내용</div>\n * </Panel>\n * \n * @example\n * // Glass 스타일 / Glass style\n * <Panel style=\"glass\" effect=\"glow\">\n * <div>Glass 패널</div>\n * </Panel>\n * \n * @example\n * // 인터랙티브 패널 / Interactive panel\n * <Panel \n * style=\"neon\"\n * interactive\n * hoverScale={1.1}\n * hoverGlow\n * >\n * <div>호버 효과</div>\n * </Panel>\n * \n * @param {PanelProps} props - Panel 컴포넌트의 props / Panel component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Panel 컴포넌트 / Panel component\n */\nconst Panel = React.forwardRef<HTMLDivElement, PanelProps>(\n ({ \n className,\n style = \"default\",\n effect = \"none\",\n transparency = 1,\n blurIntensity = 0,\n borderOpacity = 1,\n shadowOpacity = 1,\n glowIntensity = 0,\n glowColor = \"blue\",\n particleEffect = false,\n hoverEffect: _hoverEffect = false,\n animationEffect = false,\n padding = \"md\",\n customPadding,\n rounded = \"lg\",\n customRounded,\n background = \"solid\",\n gradientColors = [\"#3B82F6\", \"#8B5CF6\"],\n patternType = \"dots\",\n backgroundImage,\n backgroundVideo,\n interactive = false,\n hoverScale = 1.05,\n hoverRotate = 0,\n hoverGlow = false,\n children,\n ...cardProps \n }, ref): React.ReactElement => {\n \n // 스타일별 클래스 생성 - useMemo로 메모이제이션\n const styleClasses = React.useMemo(() => {\n const baseClasses = \"transition-all duration-300\"\n \n switch (style) {\n case \"solid\":\n return merge(baseClasses, \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700\")\n case \"glass\":\n return merge(baseClasses, \"bg-white/10 backdrop-blur-md border border-white/20\")\n case \"outline\":\n return merge(baseClasses, \"bg-transparent border border-gray-300 dark:border-gray-600\")\n case \"elevated\":\n return merge(baseClasses, \"bg-white dark:bg-gray-800 shadow-lg border border-gray-100 dark:border-gray-700\")\n case \"neon\":\n return merge(baseClasses, \"bg-gray-900 border border-cyan-400/30 shadow-lg shadow-cyan-400/20\")\n case \"holographic\":\n return merge(baseClasses, \"bg-gradient-to-br from-white/20 via-purple-500/20 to-cyan-500/20 backdrop-blur-sm border border-white/30\")\n case \"cyberpunk\":\n return merge(baseClasses, \"bg-gray-900 border-2 border-pink-500 shadow-lg shadow-pink-500/30\")\n case \"minimal\":\n return merge(baseClasses, \"bg-white border border-gray-200 shadow-sm\")\n case \"luxury\":\n return merge(baseClasses, \"bg-gradient-to-br from-amber-50 to-yellow-100 border border-amber-200 shadow-xl\")\n default:\n return merge(baseClasses, \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700\")\n }\n }, [style])\n \n // 효과별 클래스 생성 - useMemo로 메모이제이션\n const effectClasses = React.useMemo(() => {\n switch (effect) {\n case \"glow\":\n return \"shadow-2xl shadow-blue-500/20 dark:shadow-cyan-400/20\"\n case \"shadow\":\n return \"shadow-xl\"\n case \"gradient\":\n return \"bg-gradient-to-r from-blue-500/10 via-purple-500/10 to-cyan-500/10\"\n case \"animated\":\n return \"animate-pulse\"\n default:\n return \"\"\n }\n }, [effect])\n \n // 패딩 클래스 생성 - useMemo로 메모이제이션\n const paddingClasses = React.useMemo(() => {\n if (customPadding) return customPadding\n \n switch (padding) {\n case \"none\": return \"p-0\"\n case \"small\":\n case \"sm\": return \"p-3\"\n case \"medium\":\n case \"md\": return \"p-6\"\n case \"large\":\n case \"lg\": return \"p-8\"\n case \"xl\": return \"p-12\"\n default: return \"p-6\"\n }\n }, [padding, customPadding])\n \n // 둥근 모서리 클래스 생성 - useMemo로 메모이제이션\n const roundedClasses = React.useMemo(() => {\n if (customRounded) return customRounded\n \n switch (rounded) {\n case \"none\": return \"rounded-none\"\n case \"sm\": return \"rounded-sm\"\n case \"md\": return \"rounded-md\"\n case \"lg\": return \"rounded-lg\"\n case \"xl\": return \"rounded-xl\"\n case \"full\": return \"rounded-full\"\n default: return \"rounded-lg\"\n }\n }, [rounded, customRounded])\n \n // 패턴 배경 생성 - useMemo로 메모이제이션\n const patternBackground = React.useMemo(() => {\n switch (patternType) {\n case \"dots\":\n return \"radial-gradient(circle, #000 1px, transparent 1px)\"\n case \"lines\":\n return \"linear-gradient(45deg, #000 1px, transparent 1px)\"\n case \"grid\":\n return \"linear-gradient(#000 1px, transparent 1px), linear-gradient(90deg, #000 1px, transparent 1px)\"\n case \"waves\":\n return \"repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(0,0,0,0.1) 10px, rgba(0,0,0,0.1) 20px)\"\n default:\n return \"\"\n }\n }, [patternType])\n \n // 배경 스타일 생성 - useMemo로 메모이제이션\n const backgroundStyles = React.useMemo((): React.CSSProperties => {\n const styles: React.CSSProperties = {\n opacity: transparency,\n }\n \n if (blurIntensity > 0) {\n styles.backdropFilter = `blur(${blurIntensity}px)`\n }\n \n if (borderOpacity < 1) {\n styles.borderColor = `rgba(0, 0, 0, ${borderOpacity})`\n }\n \n if (shadowOpacity < 1) {\n styles.boxShadow = `0 4px 6px -1px rgba(0, 0, 0, ${shadowOpacity * 0.1})`\n }\n \n if (glowIntensity > 0) {\n styles.boxShadow = `${styles.boxShadow || ''}, 0 0 ${glowIntensity * 10}px ${glowColor}`\n }\n \n switch (background) {\n case \"gradient\":\n styles.background = `linear-gradient(135deg, ${gradientColors.join(', ')})`\n break\n case \"pattern\":\n styles.backgroundImage = patternBackground\n break\n case \"image\":\n if (backgroundImage) {\n styles.backgroundImage = `url(${backgroundImage})`\n styles.backgroundSize = 'cover'\n styles.backgroundPosition = 'center'\n }\n break\n case \"video\":\n // 비디오 배경은 별도 요소로 처리\n break\n }\n \n return styles\n }, [transparency, blurIntensity, borderOpacity, shadowOpacity, glowIntensity, glowColor, background, gradientColors, patternBackground, backgroundImage])\n \n // 호버 효과 클래스 생성 - useMemo로 메모이제이션\n const hoverClasses = React.useMemo(() => {\n if (!interactive) return \"\"\n \n const classes = []\n \n if (hoverScale !== 1) {\n classes.push(`hover:scale-${hoverScale}`)\n }\n \n if (hoverRotate !== 0) {\n classes.push(`hover:rotate-${hoverRotate}`)\n }\n \n if (hoverGlow) {\n classes.push(\"hover:shadow-2xl hover:shadow-blue-500/30\")\n }\n \n return classes.join(\" \")\n }, [interactive, hoverScale, hoverRotate, hoverGlow])\n \n // Panel 전용 클래스들 - useMemo로 메모이제이션\n const panelClasses = React.useMemo(() => merge(\n \"panel-component\",\n `panel-${style}`,\n `panel-effect-${effect}`,\n styleClasses,\n effectClasses,\n paddingClasses,\n roundedClasses,\n hoverClasses,\n className\n ), [style, effect, styleClasses, effectClasses, paddingClasses, roundedClasses, hoverClasses, className])\n \n return (\n <div className=\"relative\">\n {/* 비디오 배경 */}\n {background === \"video\" && backgroundVideo && (\n <video\n className=\"absolute inset-0 w-full h-full object-cover rounded-lg\"\n autoPlay\n muted\n loop\n playsInline\n >\n <source src={backgroundVideo} type=\"video/mp4\" />\n </video>\n )}\n \n {/* 파티클 효과 */}\n {particleEffect && (\n <div className=\"absolute inset-0 pointer-events-none\">\n {/* 파티클 효과 렌더링 */}\n </div>\n )}\n \n {/* 메인 Panel */}\n <Card\n ref={ref}\n className={panelClasses}\n style={backgroundStyles}\n {...cardProps}\n >\n {children}\n </Card>\n \n {/* 애니메이션 효과 */}\n {animationEffect && (\n <div className=\"absolute inset-0 pointer-events-none\">\n {/* 애니메이션 효과 렌더링 */}\n </div>\n )}\n </div>\n )\n }\n)\n\nPanel.displayName = \"Panel\"\n\nexport { Panel } ","\"use client\";\n\nimport React, { useCallback } from 'react';\nimport { Button } from './Button';\nimport { Icon } from './Icon';\nimport type { IconName } from '../lib/icons';\nimport { merge } from '../lib/utils';\n\n/**\n * ActionButton 인터페이스\n * @typedef {Object} ActionButton\n * @property {string} label - 버튼 라벨 (데스크톱)\n * @property {string} [labelMobile] - 버튼 라벨 (모바일, 없으면 label 사용)\n * @property {IconName} [icon] - 버튼 아이콘\n * @property {() => void} onClick - 클릭 핸들러\n * @property {boolean} [disabled] - 비활성화 여부\n * @property {'default' | 'outline' | 'destructive' | 'ghost'} [variant='outline'] - 버튼 스타일\n * @property {Object} [badge] - 배지 정보\n * @property {number} badge.count - 배지 숫자\n * @property {'blue' | 'red' | 'gray' | 'green'} [badge.color='gray'] - 배지 색상\n * @property {string} [className] - 추가 CSS 클래스\n */\nexport interface ActionButton {\n label: string;\n labelMobile?: string; // 모바일에서 표시할 짧은 텍스트\n icon?: IconName;\n onClick: () => void;\n disabled?: boolean;\n variant?: 'default' | 'outline' | 'destructive' | 'ghost';\n badge?: {\n count: number;\n color?: 'blue' | 'red' | 'gray' | 'green';\n };\n className?: string;\n}\n\n/**\n * ActionToolbar 컴포넌트의 props / ActionToolbar component props\n * @typedef {Object} ActionToolbarProps\n * @property {boolean} [isSelectMode=false] - 선택 모드 활성화 여부 / Enable select mode\n * @property {number} [totalCount=0] - 전체 항목 개수 / Total item count\n * @property {number} [selectedCount=0] - 선택된 항목 개수 / Selected item count\n * @property {ActionButton[]} [actions=[]] - 일반 모드 액션 버튼들 / Normal mode action buttons\n * @property {ActionButton[]} [selectModeActions=[]] - 선택 모드 액션 버튼들 / Select mode action buttons\n * @property {() => void} [onToggleSelectMode] - 선택 모드 토글 함수 / Toggle select mode function\n * @property {() => void} [onToggleSelectAll] - 전체 선택/해제 함수 / Toggle select all function\n * @property {() => void} [onCancelSelect] - 선택 모드 취소 함수 / Cancel select mode function\n * @property {boolean} [loading=false] - 로딩 상태 / Loading state\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ActionToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 선택 모드 활성화 여부 */\n isSelectMode?: boolean;\n /** 전체 항목 개수 */\n totalCount?: number;\n /** 선택된 항목 개수 */\n selectedCount?: number;\n /** 일반 모드 액션 버튼들 */\n actions?: ActionButton[];\n /** 선택 모드 액션 버튼들 */\n selectModeActions?: ActionButton[];\n /** 선택 모드 토글 함수 */\n onToggleSelectMode?: () => void;\n /** 전체 선택/해제 함수 */\n onToggleSelectAll?: () => void;\n /** 선택 모드 취소 함수 */\n onCancelSelect?: () => void;\n /** 로딩 상태 */\n loading?: boolean;\n}\n\n/**\n * ActionToolbar 컴포넌트 / ActionToolbar component\n * \n * 범용 액션 툴바 컴포넌트입니다.\n * 알림, 로그 관리, 대시보드 등에서 재사용 가능한 액션 버튼 영역을 제공합니다.\n * 선택 모드, 일괄 액션, 반응형 레이아웃을 지원합니다.\n * \n * Universal action toolbar component.\n * Provides reusable action button area for notifications, log management, dashboard, etc.\n * Supports select mode, batch actions, and responsive layout.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * ```tsx\n * <ActionToolbar\n * isSelectMode={isSelectMode}\n * totalCount={notifications.length}\n * selectedCount={selectedIds.size}\n * actions={[\n * {\n * label: \"모두 읽음\",\n * labelMobile: \"읽음\",\n * icon: \"check\",\n * onClick: handleMarkAllAsRead,\n * disabled: unreadCount === 0,\n * badge: { count: unreadCount, color: 'blue' }\n * }\n * ]}\n * selectModeActions={[\n * {\n * label: \"선택 삭제\",\n * labelMobile: \"삭제\",\n * icon: \"delete\",\n * onClick: handleDeleteSelected,\n * disabled: selectedIds.size === 0,\n * badge: { count: selectedIds.size, color: 'red' }\n * }\n * ]}\n * onToggleSelectMode={() => setIsSelectMode(true)}\n * onToggleSelectAll={handleToggleSelectAll}\n * onCancelSelect={() => {\n * setIsSelectMode(false);\n * setSelectedIds(new Set());\n * }}\n * />\n * ```\n * \n * @param {ActionToolbarProps} props - ActionToolbar 컴포넌트의 props / ActionToolbar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ActionToolbar 컴포넌트 / ActionToolbar component\n */\nconst ActionToolbarComponent = React.forwardRef<HTMLDivElement, ActionToolbarProps>(\n (\n {\n isSelectMode = false,\n totalCount = 0,\n selectedCount = 0,\n actions = [],\n selectModeActions = [],\n onToggleSelectMode,\n onToggleSelectAll,\n onCancelSelect,\n loading = false,\n className,\n ...props\n },\n ref\n ) => {\n const getBadgeColor = useCallback((color?: string) => {\n switch (color) {\n case 'red':\n return 'bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300';\n case 'blue':\n return 'bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300';\n case 'green':\n return 'bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300';\n case 'gray':\n default:\n return 'bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300';\n }\n }, []);\n\n const renderButton = useCallback((action: ActionButton, key: string) => (\n <Button\n key={key}\n variant={action.variant || 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled || loading}\n className={merge('flex-1 sm:flex-initial', action.className)}\n >\n {action.icon && <Icon name={action.icon} className=\"h-4 w-4 sm:h-3.5 sm:w-3.5 mr-1 sm:mr-1.5\" />}\n <span className=\"hidden sm:inline\">{action.label}</span>\n <span className=\"sm:hidden\">{action.labelMobile || action.label}</span>\n {action.badge && action.badge.count > 0 && (\n <span className={merge('ml-1.5', getBadgeColor(action.badge.color), 'px-1.5 py-0.5 rounded-full text-xs font-semibold')}>\n {action.badge.count}\n </span>\n )}\n </Button>\n ), [getBadgeColor, loading]);\n\n return (\n <div\n ref={ref}\n className={merge(\n 'mb-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-3 sm:p-4',\n className\n )}\n {...props}\n >\n {isSelectMode ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* 전체 선택/해제 버튼 */}\n {onToggleSelectAll && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggleSelectAll}\n className=\"flex-1 sm:flex-initial min-w-[100px]\"\n >\n <Icon name={selectedCount === totalCount ? \"square\" : \"check\"} className=\"h-4 w-4 sm:h-3.5 sm:w-3.5 mr-1 sm:mr-1.5\" />\n <span className=\"hidden sm:inline\">{selectedCount === totalCount ? '전체 해제' : '전체 선택'}</span>\n <span className=\"sm:hidden\">{selectedCount === totalCount ? '해제' : '전체'}</span>\n </Button>\n )}\n \n {/* 선택 모드 액션 버튼들 */}\n {selectModeActions.map((action, index) => (\n <div key={`select-action-${index}`} className={merge('flex-1 sm:flex-initial min-w-[100px]', action.className)}>\n {renderButton(action, `select-${index}`)}\n </div>\n ))}\n \n {/* 취소 버튼 */}\n {onCancelSelect && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancelSelect}\n className=\"flex-1 sm:flex-initial min-w-[80px]\"\n >\n 취소\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* 선택 모드 진입 버튼 */}\n {onToggleSelectMode && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggleSelectMode}\n disabled={totalCount === 0}\n className=\"flex-1 sm:flex-initial min-w-[80px] sm:min-w-[auto] px-2 sm:px-3\"\n title={totalCount === 0 ? \"항목이 없습니다\" : \"여러 항목 선택\"}\n >\n <Icon name=\"check\" className=\"h-4 w-4 sm:h-3.5 sm:w-3.5\" />\n <span className=\"hidden sm:inline ml-1.5 sm:ml-2\">선택</span>\n </Button>\n )}\n \n {/* 일반 모드 액션 버튼들 */}\n {actions.map((action, index) => (\n <div key={`action-${index}`} className={merge('flex-1 sm:flex-initial min-w-[100px]', action.className)}>\n {renderButton(action, `action-${index}`)}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nActionToolbarComponent.displayName = 'ActionToolbar';\n\nexport const ActionToolbar = React.memo(ActionToolbarComponent);\n\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Navigation 컴포넌트의 props / Navigation component props\n * @typedef {Object} NavigationProps\n * @property {string} [value] - 제어 모드에서 활성 탭 값 / Active tab value in controlled mode\n * @property {string} [defaultValue] - 비제어 모드에서 기본 활성 탭 값 / Default active tab value in uncontrolled mode\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\n/**\n * Navigation 컴포넌트 / Navigation component\n * \n * 탭 네비게이션 컴포넌트입니다.\n * NavigationList, NavigationItem, NavigationContent와 함께 사용합니다.\n * \n * Tab navigation component.\n * Used with NavigationList, NavigationItem, and NavigationContent.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Navigation>\n * <Navigation.List>\n * <Navigation.Item value=\"tab1\">탭 1</Navigation.Item>\n * <Navigation.Item value=\"tab2\">탭 2</Navigation.Item>\n * </Navigation.List>\n * <Navigation.Content value=\"tab1\">내용 1</Navigation.Content>\n * </Navigation>\n * \n * @param {NavigationProps} props - Navigation 컴포넌트의 props / Navigation component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Navigation 컴포넌트 / Navigation component\n */\nconst Navigation = React.forwardRef<HTMLDivElement, NavigationProps>(\n ({ \n className, \n value,\n defaultValue,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props \n }, ref) => {\n const [activeTab, setActiveTab] = React.useState(value || defaultValue || \"\")\n const isControlled = value !== undefined\n const currentValue = isControlled ? value : activeTab\n\n const _handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue)\n }\n onValueChange?.(newValue)\n }\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value)\n }\n }, [value])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"w-full\",\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value: currentValue,\n variant,\n scale\n } as Partial<NavigationListProps | NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigation.displayName = \"Navigation\"\n\n/**\n * NavigationList 컴포넌트의 props / NavigationList component props\n * @typedef {Object} NavigationListProps\n * @property {string} [value] - 활성 탭 값 / Active tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant=\"pills\"] - Navigation 스타일 변형 / Navigation style variant\n * @property {\"small\" | \"medium\" | \"large\"} [scale=\"medium\"] - Navigation 크기 / Navigation size\n * @extends {Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>}\n */\nexport interface NavigationListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'> {\n value?: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n}\n\nconst NavigationList = React.forwardRef<HTMLDivElement, NavigationListProps>(\n ({\n className,\n value,\n onValueChange: _onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n children,\n ...props\n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return \"bg-slate-100 dark:bg-slate-800 p-1 rounded-xl\"\n case \"underline\":\n return \"border-b border-slate-200 dark:border-slate-700\"\n case \"cards\":\n return \"bg-slate-50 dark:bg-slate-900 p-1 rounded-xl\"\n default:\n return \"bg-slate-100 dark:bg-slate-800 p-1 rounded-xl\"\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"gap-1\"\n case \"large\":\n return \"gap-3\"\n default:\n return \"gap-2\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex\",\n getStyleClasses(),\n getScaleClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n variant,\n scale\n } as Partial<NavigationItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nNavigationList.displayName = \"NavigationList\"\n\n/**\n * NavigationItem 컴포넌트의 props / NavigationItem component props\n * @typedef {Object} NavigationItemProps\n * @property {string} value - 탭 값 / Tab value\n * @property {(value: string) => void} [onValueChange] - 탭 변경 콜백 / Tab change callback\n * @property {\"pills\" | \"underline\" | \"cards\"} [variant] - Navigation 스타일 변형 (자동으로 설정됨) / Navigation style variant (auto-set)\n * @property {\"small\" | \"medium\" | \"large\"} [scale] - Navigation 크기 (자동으로 설정됨) / Navigation size (auto-set)\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'>}\n */\nexport interface NavigationItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'> {\n value: string\n onValueChange?: (value: string) => void\n variant?: \"pills\" | \"underline\" | \"cards\"\n scale?: \"small\" | \"medium\" | \"large\"\n active?: boolean\n}\n\nconst NavigationItem = React.forwardRef<HTMLButtonElement, NavigationItemProps>(\n ({ \n className, \n value,\n onValueChange,\n variant = \"pills\",\n scale = \"medium\",\n active = false,\n children,\n ...props \n }, ref) => {\n const getStyleClasses = () => {\n switch (variant) {\n case \"pills\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active \n ? \"bg-white dark:bg-slate-700 text-slate-900 dark:text-slate-100 shadow-sm\" \n : \"text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100\"\n )\n case \"underline\":\n return merge(\n \"border-b-2 px-3 py-2 text-sm font-medium transition-all\",\n active \n ? \"border-blue-500 text-blue-600 dark:text-blue-400\" \n : \"border-transparent text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100\"\n )\n case \"cards\":\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active \n ? \"bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100 shadow-sm border border-slate-200 dark:border-slate-700\" \n : \"text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100\"\n )\n default:\n return merge(\n \"rounded-lg px-3 py-2 text-sm font-medium transition-all\",\n active \n ? \"bg-white dark:bg-slate-700 text-slate-900 dark:text-slate-100 shadow-sm\" \n : \"text-slate-600 dark:text-slate-400 hover:text-slate-900 dark:hover:text-slate-100\"\n )\n }\n }\n\n const getScaleClasses = () => {\n switch (scale) {\n case \"small\":\n return \"text-xs px-2 py-1\"\n case \"large\":\n return \"text-base px-4 py-3\"\n default:\n return \"text-sm px-3 py-2\"\n }\n }\n\n const handleClick = () => {\n onValueChange?.(value)\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n getStyleClasses(),\n getScaleClasses(),\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-offset-2\",\n className\n )}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nNavigationItem.displayName = \"NavigationItem\"\n\n/**\n * NavigationContent 컴포넌트의 props / NavigationContent component props\n * @typedef {Object} NavigationContentProps\n * @property {string} value - 탭 값 / Tab value\n * @property {boolean} [active] - 활성 상태 (자동으로 설정됨) / Active state (auto-set)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface NavigationContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n active?: boolean\n}\n\nconst NavigationContent = React.forwardRef<HTMLDivElement, NavigationContentProps>(\n ({ className, active = false, ...props }, ref) => {\n if (!active) return null\n\n return (\n <div\n ref={ref}\n className={merge(\"mt-4\", className)}\n {...props}\n />\n )\n }\n)\nNavigationContent.displayName = \"NavigationContent\"\n\n// 서브컴포넌트 타입 정의\nexport interface NavigationComponent extends React.ForwardRefExoticComponent<NavigationProps & React.RefAttributes<HTMLDivElement>> {\n List: typeof NavigationList\n Item: typeof NavigationItem\n Content: typeof NavigationContent\n}\n\nconst NavigationComponent = Navigation as NavigationComponent\nNavigationComponent.List = NavigationList\nNavigationComponent.Item = NavigationItem\nNavigationComponent.Content = NavigationContent\n\nexport { NavigationComponent as Navigation, NavigationList, NavigationItem, NavigationContent } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Pagination 컴포넌트의 props / Pagination component props\n * @typedef {Object} PaginationProps\n * @property {number} currentPage - 현재 페이지 번호 / Current page number\n * @property {number} totalPages - 전체 페이지 수 / Total number of pages\n * @property {(page: number) => void} onPageChange - 페이지 변경 콜백 / Page change callback\n * @property {boolean} [showFirstLast=true] - 첫/마지막 페이지 버튼 표시 여부 / Show first/last page buttons\n * @property {boolean} [showPrevNext=true] - 이전/다음 페이지 버튼 표시 여부 / Show previous/next page buttons\n * @property {number} [maxVisiblePages=5] - 최대 표시 페이지 수 / Maximum visible page numbers\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Pagination 크기 / Pagination size\n * @property {\"default\" | \"outlined\" | \"minimal\"} [variant=\"default\"] - Pagination 스타일 변형 / Pagination style variant\n * @property {\"square\" | \"circle\"} [shape=\"square\"] - 버튼 모양 / Button shape\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface PaginationProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPage: number\n totalPages: number\n onPageChange: (page: number) => void\n showFirstLast?: boolean\n showPrevNext?: boolean\n maxVisiblePages?: number\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"outlined\" | \"minimal\"\n shape?: \"square\" | \"circle\"\n}\n\n/**\n * Pagination 컴포넌트 / Pagination component\n * \n * 페이지네이션 컨트롤을 제공하는 컴포넌트입니다.\n * 첫/마지막 페이지, 이전/다음 페이지 버튼을 지원하며,\n * 많은 페이지가 있을 경우 자동으로 생략 표시(...)를 합니다.\n * \n * Component that provides pagination controls.\n * Supports first/last page and previous/next page buttons,\n * and automatically shows ellipsis (...) when there are many pages.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [page, setPage] = useState(1)\n * \n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * />\n * \n * @example\n * // Outlined 스타일, 원형 버튼 / Outlined style, circular buttons\n * <Pagination\n * currentPage={page}\n * totalPages={20}\n * onPageChange={setPage}\n * variant=\"outlined\"\n * shape=\"circle\"\n * />\n * \n * @param {PaginationProps} props - Pagination 컴포넌트의 props / Pagination component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Pagination 컴포넌트 / Pagination component\n */\nconst Pagination = React.forwardRef<HTMLDivElement, PaginationProps>(\n ({ \n className, \n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = true,\n showPrevNext = true,\n maxVisiblePages = 5,\n size = \"md\",\n variant = \"default\",\n shape = \"square\",\n ...props \n }, ref) => {\n const getVisiblePages = () => {\n const pages: (number | string)[] = []\n const halfVisible = Math.floor(maxVisiblePages / 2)\n \n let start = Math.max(1, currentPage - halfVisible)\n let end = Math.min(totalPages, currentPage + halfVisible)\n \n // 조정\n if (end - start + 1 < maxVisiblePages) {\n if (start === 1) {\n end = Math.min(totalPages, start + maxVisiblePages - 1)\n } else {\n start = Math.max(1, end - maxVisiblePages + 1)\n }\n }\n \n // 첫 페이지\n if (start > 1) {\n pages.push(1)\n if (start > 2) {\n pages.push(\"...\")\n }\n }\n \n // 중간 페이지들\n for (let i = start; i <= end; i++) {\n pages.push(i)\n }\n \n // 마지막 페이지\n if (end < totalPages) {\n if (end < totalPages - 1) {\n pages.push(\"...\")\n }\n pages.push(totalPages)\n }\n \n return pages\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"h-8 px-2 text-sm\" // 32px 높이, 8px 패딩\n case \"lg\":\n return \"h-12 px-4 text-base\" // 48px 높이, 16px 패딩\n default:\n return \"h-10 px-3 text-sm\" // 40px 높이, 12px 패딩\n }\n }\n\n const getShapeClasses = () => {\n switch (shape) {\n case \"circle\":\n return \"rounded-full aspect-square flex items-center justify-center\"\n default:\n return \"rounded-md\"\n }\n }\n\n const getVariantClasses = (isActive: boolean = false) => {\n switch (variant) {\n case \"outlined\":\n return merge(\n \"border border-gray-300 dark:border-gray-600\",\n isActive \n ? \"bg-blue-500 border-blue-500 text-white\" \n : \"bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700\"\n )\n case \"minimal\":\n return merge(\n \"border-0\",\n isActive \n ? \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\" \n : \"bg-transparent text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700\"\n )\n default:\n return merge(\n \"border-0\",\n isActive \n ? \"bg-blue-500 text-white\" \n : \"bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700\"\n )\n }\n }\n\n const handlePageClick = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page)\n }\n }\n\n const visiblePages = getVisiblePages()\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex items-center justify-center gap-1\",\n className\n )}\n {...props}\n >\n {/* 첫 페이지 버튼 */}\n {showFirstLast && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"첫 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M11 19l-7-7 7-7M19 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 이전 페이지 버튼 */}\n {showPrevNext && currentPage > 1 && (\n <button\n onClick={() => handlePageClick(currentPage - 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"이전 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* 페이지 번호들 */}\n {visiblePages.map((page, index) => (\n <React.Fragment key={index}>\n {page === \"...\" ? (\n <span className={merge(\n \"inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-gray-500 dark:text-gray-400\",\n getSizeClasses()\n )}>\n ...\n </span>\n ) : (\n <button\n onClick={() => handlePageClick(page as number)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses(page === currentPage)\n )}\n aria-label={`${page}페이지로 이동`}\n aria-current={page === currentPage ? \"page\" : undefined}\n >\n {page}\n </button>\n )}\n </React.Fragment>\n ))}\n\n {/* 다음 페이지 버튼 */}\n {showPrevNext && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(currentPage + 1)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"다음 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n\n {/* 마지막 페이지 버튼 */}\n {showFirstLast && currentPage < totalPages && (\n <button\n onClick={() => handlePageClick(totalPages)}\n className={merge(\n \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n getSizeClasses(),\n getShapeClasses(),\n getVariantClasses()\n )}\n aria-label=\"마지막 페이지로 이동\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 5l7 7-7 7M5 5l7 7-7 7\" />\n </svg>\n </button>\n )}\n </div>\n )\n }\n)\nPagination.displayName = \"Pagination\"\n\n// 편의 컴포넌트들\nexport const PaginationOutlined = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"outlined\" className={className} {...props} />\n )\n)\nPaginationOutlined.displayName = \"PaginationOutlined\"\n\nexport const PaginationMinimal = React.forwardRef<HTMLDivElement, Omit<PaginationProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Pagination ref={ref} variant=\"minimal\" className={className} {...props} />\n )\n)\nPaginationMinimal.displayName = \"PaginationMinimal\"\n\n// 복합 컴포넌트들\nexport const PaginationWithInfo = React.forwardRef<HTMLDivElement, PaginationProps & { \n totalItems?: number\n itemsPerPage?: number\n showInfo?: boolean\n}>(\n ({ \n totalItems = 0, \n itemsPerPage = 10, \n showInfo = true, \n className, \n ...props \n }, ref) => {\n const startItem = (props.currentPage - 1) * itemsPerPage + 1\n const endItem = Math.min(props.currentPage * itemsPerPage, totalItems)\n \n return (\n <div className={merge(\"flex flex-col sm:flex-row items-center justify-between gap-4\", className)}>\n {showInfo && (\n <div className=\"text-sm text-gray-700 dark:text-gray-300\">\n {totalItems > 0 ? (\n <>\n <span className=\"font-medium\">{startItem}</span>\n {\" - \"}\n <span className=\"font-medium\">{endItem}</span>\n {\" of \"}\n <span className=\"font-medium\">{totalItems}</span>\n {\" results\"}\n </>\n ) : (\n \"No results\"\n )}\n </div>\n )}\n <Pagination ref={ref} {...props} />\n </div>\n )\n }\n)\nPaginationWithInfo.displayName = \"PaginationWithInfo\"\n\nexport { Pagination } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\n\n/**\n * BottomSheet 컴포넌트의 props / BottomSheet component props\n * @typedef {Object} BottomSheetProps\n * @property {boolean} open - BottomSheet 열림/닫힘 상태 / BottomSheet open/close state\n * @property {(open: boolean) => void} onOpenChange - 상태 변경 콜백 / State change callback\n * @property {React.ReactNode} children - BottomSheet 내용 / BottomSheet content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"} [height=\"md\"] - BottomSheet 높이 / BottomSheet height\n * @property {boolean} [showBackdrop=true] - 배경 오버레이 표시 여부 / Show backdrop overlay\n * @property {string} [backdropClassName] - 배경 오버레이 추가 CSS 클래스 / Backdrop overlay additional CSS class\n * @property {boolean} [closeOnBackdropClick=true] - 배경 클릭 시 닫기 여부 / Close on backdrop click\n * @property {boolean} [closeOnEscape=true] - ESC 키로 닫기 여부 / Close on ESC key\n * @property {boolean} [showDragHandle=true] - 드래그 핸들 표시 여부 / Show drag handle\n * @property {number[]} [snapPoints=[25, 50, 75, 100]] - 스냅 포인트 (퍼센트) / Snap points (percentage)\n * @property {number} [defaultSnap=50] - 기본 스냅 포인트 (퍼센트) / Default snap point (percentage)\n */\ninterface BottomSheetProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n className?: string\n height?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"\n showBackdrop?: boolean\n backdropClassName?: string\n closeOnBackdropClick?: boolean\n closeOnEscape?: boolean\n showDragHandle?: boolean\n snapPoints?: number[]\n defaultSnap?: number\n}\n\n/**\n * BottomSheet 컴포넌트 / BottomSheet component\n * \n * 화면 하단에서 올라오는 시트 컴포넌트입니다.\n * 모바일 친화적인 UI를 제공하며, 드래그로 높이를 조절할 수 있습니다.\n * 스냅 포인트를 지원하여 특정 높이에서 멈출 수 있습니다.\n * \n * Sheet component that slides up from the bottom of the screen.\n * Provides mobile-friendly UI and allows height adjustment by dragging.\n * Supports snap points to stop at specific heights.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [open, setOpen] = useState(false)\n * \n * <BottomSheet open={open} onOpenChange={setOpen}>\n * <BottomSheetHeader>제목</BottomSheetHeader>\n * <BottomSheetContent>내용</BottomSheetContent>\n * </BottomSheet>\n * \n * @example\n * // 커스텀 스냅 포인트 / Custom snap points\n * <BottomSheet \n * open={open} \n * onOpenChange={setOpen}\n * snapPoints={[30, 60, 90]}\n * defaultSnap={30}\n * >\n * <BottomSheetContent>내용</BottomSheetContent>\n * </BottomSheet>\n * \n * @param {BottomSheetProps} props - BottomSheet 컴포넌트의 props / BottomSheet component props\n * @param {React.Ref<HTMLDivElement>} ref - BottomSheet 컨테이너 ref / BottomSheet container ref\n * @returns {JSX.Element} BottomSheet 컴포넌트 / BottomSheet component\n * \n * @todo 접근성 개선: role=\"dialog\", aria-modal=\"true\" 추가 필요 / Accessibility: Add role=\"dialog\", aria-modal=\"true\"\n * @todo 접근성 개선: aria-labelledby, aria-describedby 연결 필요 / Accessibility: Connect aria-labelledby, aria-describedby\n */\nconst BottomSheet = React.forwardRef<HTMLDivElement, BottomSheetProps>(\n ({ \n open, \n onOpenChange, \n children, \n className,\n height = \"md\",\n showBackdrop = true,\n backdropClassName,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n showDragHandle = true,\n snapPoints = [25, 50, 75, 100],\n defaultSnap = 50,\n ...props \n }, ref) => {\n const [isVisible, setIsVisible] = React.useState(false)\n const [isAnimating, setIsAnimating] = React.useState(false)\n const [currentHeight, setCurrentHeight] = React.useState(defaultSnap)\n const [isDragging, setIsDragging] = React.useState(false)\n const [startY, setStartY] = React.useState(0)\n const [currentY, setCurrentY] = React.useState(0)\n\n const heightClasses = {\n sm: \"h-64\",\n md: \"h-96\",\n lg: \"h-[32rem]\",\n xl: \"h-[40rem]\",\n full: \"h-full\"\n }\n\n React.useEffect(() => {\n if (open) {\n setIsVisible(true)\n setIsAnimating(true)\n const timer = setTimeout(() => setIsAnimating(false), 50)\n return () => clearTimeout(timer)\n } else {\n setIsAnimating(true)\n const timer = setTimeout(() => {\n setIsVisible(false)\n setIsAnimating(false)\n }, 300)\n return () => clearTimeout(timer)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!closeOnEscape) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && open) {\n onOpenChange(false)\n }\n }\n\n if (open) {\n document.addEventListener(\"keydown\", handleEscape)\n document.body.style.overflow = \"hidden\"\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape)\n document.body.style.overflow = \"\"\n }\n }, [open, closeOnEscape, onOpenChange])\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setIsDragging(true)\n setStartY(e.touches[0].clientY)\n setCurrentY(e.touches[0].clientY)\n }\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return\n setCurrentY(e.touches[0].clientY)\n }\n\n const handleTouchEnd = () => {\n if (!isDragging) return\n setIsDragging(false)\n\n const deltaY = currentY - startY\n const threshold = 100\n\n if (deltaY > threshold) {\n // 아래로 드래그 - 닫기\n onOpenChange(false)\n } else if (deltaY < -threshold) {\n // 위로 드래그 - 다음 스냅 포인트\n const currentIndex = snapPoints.indexOf(currentHeight)\n const nextIndex = Math.min(currentIndex + 1, snapPoints.length - 1)\n setCurrentHeight(snapPoints[nextIndex])\n }\n }\n\n if (!isVisible) return null\n\n return (\n <div className=\"fixed inset-0 z-50\">\n {/* Backdrop */}\n {showBackdrop && (\n <div\n className={merge(\n \"absolute inset-0 bg-black/60 backdrop-blur-md transition-opacity duration-300\",\n isAnimating ? (open ? \"opacity-100\" : \"opacity-0\") : \"\",\n backdropClassName\n )}\n onClick={closeOnBackdropClick ? () => onOpenChange(false) : undefined}\n />\n )}\n\n {/* Bottom Sheet */}\n <div\n ref={ref}\n className={merge(\n \"absolute bottom-0 left-0 right-0 bg-white/95 dark:!bg-gray-800/95 backdrop-blur-xl border-t border-gray-200/50 dark:!border-gray-600/50 shadow-2xl rounded-t-lg transition-transform duration-300 ease-out pb-safe\",\n heightClasses[height],\n isAnimating ? (open ? \"translate-y-0\" : \"translate-y-full\") : \"\",\n className\n )}\n style={{\n height: `${currentHeight}%`,\n transform: isDragging ? `translateY(${currentY - startY}px)` : undefined\n }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n {...props}\n >\n {/* Drag Handle */}\n {showDragHandle && (\n <div className=\"flex justify-center pt-3 pb-2\">\n <div className=\"w-12 h-1.5 bg-gray-300 dark:bg-gray-600 rounded-full\" />\n </div>\n )}\n\n {children}\n </div>\n </div>\n )\n }\n)\nBottomSheet.displayName = \"BottomSheet\"\n\n/**\n * BottomSheetHeader 컴포넌트의 props / BottomSheetHeader component props\n * @typedef {Object} BottomSheetHeaderProps\n * @property {React.ReactNode} children - 헤더 내용 / Header content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {boolean} [showCloseButton=true] - 닫기 버튼 표시 여부 / Show close button\n * @property {() => void} [onClose] - 닫기 버튼 클릭 콜백 / Close button click callback\n */\ninterface BottomSheetHeaderProps {\n children: React.ReactNode\n className?: string\n showCloseButton?: boolean\n onClose?: () => void\n}\n\n/**\n * BottomSheetHeader 컴포넌트 / BottomSheetHeader component\n * BottomSheet의 헤더 영역을 표시합니다.\n * Displays the header area of a BottomSheet.\n * \n * @component\n * @param {BottomSheetHeaderProps} props - BottomSheetHeader 컴포넌트의 props / BottomSheetHeader component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} BottomSheetHeader 컴포넌트 / BottomSheetHeader component\n */\nconst BottomSheetHeader = React.forwardRef<HTMLDivElement, BottomSheetHeaderProps>(\n ({ children, className, showCloseButton = true, onClose, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\"flex items-center justify-between px-6 py-4\", className)}\n {...props}\n >\n <div className=\"flex-1\">{children}</div>\n {showCloseButton && (\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg hover:bg-gray-100/80 dark:hover:bg-gray-800/80 transition-colors\"\n >\n <Icon name=\"close\" size={20} />\n </button>\n )}\n </div>\n )\n }\n)\nBottomSheetHeader.displayName = \"BottomSheetHeader\"\n\n/**\n * BottomSheetContent 컴포넌트의 props / BottomSheetContent component props\n * @typedef {Object} BottomSheetContentProps\n * @property {React.ReactNode} children - 콘텐츠 / Content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\ninterface BottomSheetContentProps {\n children: React.ReactNode\n className?: string\n}\n\n/**\n * BottomSheetContent 컴포넌트 / BottomSheetContent component\n * BottomSheet의 메인 콘텐츠 영역을 표시합니다.\n * Displays the main content area of a BottomSheet.\n * \n * @component\n * @param {BottomSheetContentProps} props - BottomSheetContent 컴포넌트의 props / BottomSheetContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} BottomSheetContent 컴포넌트 / BottomSheetContent component\n */\nconst BottomSheetContent = React.forwardRef<HTMLDivElement, BottomSheetContentProps>(\n ({ children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\"flex-1 px-6 pb-6 overflow-y-auto\", className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nBottomSheetContent.displayName = \"BottomSheetContent\"\n\nexport { BottomSheet, BottomSheetHeader, BottomSheetContent } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Modal } from \"./Modal\"\nimport { Button } from \"./Button\"\n\n/**\n * ConfirmModal 컴포넌트의 props / ConfirmModal component props\n * @typedef {Object} ConfirmModalProps\n * @property {boolean} isOpen - 모달 열림/닫힘 상태 / Modal open/close state\n * @property {() => void} onClose - 닫기 콜백 / Close callback\n * @property {() => void} onConfirm - 확인 콜백 / Confirm callback\n * @property {string} title - 모달 제목 / Modal title\n * @property {string} message - 모달 메시지 / Modal message\n * @property {string} [warning] - 경고 메시지 / Warning message\n * @property {string} [confirmText=\"확인\"] - 확인 버튼 텍스트 / Confirm button text\n * @property {string} [cancelText=\"취소\"] - 취소 버튼 텍스트 / Cancel button text\n * @property {string} [confirmButtonText] - 확인 버튼 커스텀 텍스트 / Custom confirm button text\n * @property {\"danger\" | \"warning\" | \"info\" | \"success\" | \"error\"} [type=\"danger\"] - 모달 타입 / Modal type\n * @property {boolean} [loading=false] - 로딩 상태 / Loading state\n * @property {boolean} [disabled=false] - 비활성화 여부 / Disabled state\n * @property {boolean} [showInput=false] - 입력 필드 표시 여부 / Show input field\n * @property {string} [inputValue=\"\"] - 입력 필드 값 / Input field value\n * @property {(value: string) => void} [onInputChange] - 입력 값 변경 콜백 / Input value change callback\n * @property {string} [inputPlaceholder] - 입력 필드 플레이스홀더 / Input field placeholder\n * @property {string} [inputLabel] - 입력 필드 라벨 / Input field label\n * @property {string} [requiredInputValue] - 필수 입력 값 (확인 버튼 활성화 조건) / Required input value (confirm button activation condition)\n * @property {boolean} [showCancel=true] - 취소 버튼 표시 여부 / Show cancel button\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\"} [size=\"md\"] - 모달 크기 / Modal size\n */\nexport interface ConfirmModalProps {\n isOpen: boolean\n onClose: () => void\n onConfirm: () => void\n title: string\n message: string\n warning?: string\n confirmText?: string\n cancelText?: string\n confirmButtonText?: string\n type?: \"danger\" | \"warning\" | \"info\" | \"success\" | \"error\"\n loading?: boolean\n disabled?: boolean\n showInput?: boolean\n inputValue?: string\n onInputChange?: (value: string) => void\n inputPlaceholder?: string\n inputLabel?: string\n requiredInputValue?: string\n showCancel?: boolean\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\"\n}\n\n/**\n * ConfirmModal 컴포넌트 / ConfirmModal component\n * \n * 확인/취소가 필요한 모달 컴포넌트입니다.\n * 다양한 타입(danger, warning, info, success, error)을 지원하며,\n * 입력 필드와 필수 입력 값 검증을 지원합니다.\n * \n * Modal component that requires confirmation/cancellation.\n * Supports various types (danger, warning, info, success, error),\n * and supports input fields and required input value validation.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ConfirmModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onConfirm={handleConfirm}\n * title=\"삭제 확인\"\n * message=\"정말 삭제하시겠습니까?\"\n * />\n * \n * @example\n * // 입력 필드와 함께 / With input field\n * <ConfirmModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * onConfirm={handleDelete}\n * title=\"삭제 확인\"\n * message=\"삭제하려면 'DELETE'를 입력하세요\"\n * showInput\n * inputLabel=\"확인 입력\"\n * requiredInputValue=\"DELETE\"\n * inputValue={inputValue}\n * onInputChange={setInputValue}\n * />\n * \n * @param {ConfirmModalProps} props - ConfirmModal 컴포넌트의 props / ConfirmModal component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ConfirmModal 컴포넌트 / ConfirmModal component\n */\nconst ConfirmModal = React.forwardRef<HTMLDivElement, ConfirmModalProps>(\n ({\n isOpen,\n onClose,\n onConfirm,\n title,\n message,\n warning,\n confirmText = \"확인\",\n cancelText = \"취소\",\n confirmButtonText,\n type = \"danger\",\n loading = false,\n disabled = false,\n showInput = false,\n inputValue = \"\",\n onInputChange,\n inputPlaceholder,\n inputLabel,\n requiredInputValue,\n showCancel = true,\n size = \"md\"\n }, _ref) => {\n // 타입별 아이콘과 색상\n const typeConfig = {\n danger: {\n icon: (\n <svg className=\"h-6 w-6 text-red-600 dark:text-red-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n ),\n bgColor: \"bg-red-100 dark:bg-red-900/20\",\n buttonColor: \"bg-red-600 hover:bg-red-700 focus:ring-red-500\",\n textColor: \"text-red-600 dark:text-red-400\"\n },\n warning: {\n icon: (\n <svg className=\"h-6 w-6 text-yellow-600 dark:text-yellow-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\n </svg>\n ),\n bgColor: \"bg-yellow-100 dark:bg-yellow-900/20\",\n buttonColor: \"bg-yellow-600 hover:bg-yellow-700 focus:ring-yellow-500\",\n textColor: \"text-yellow-600 dark:text-yellow-400\"\n },\n info: {\n icon: (\n <svg className=\"h-6 w-6 text-blue-600 dark:text-blue-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n bgColor: \"bg-blue-100 dark:bg-blue-900/20\",\n buttonColor: \"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500\",\n textColor: \"text-blue-600 dark:text-blue-400\"\n },\n success: {\n icon: (\n <svg className=\"h-6 w-6 text-green-600 dark:text-green-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ),\n bgColor: \"bg-green-100 dark:bg-green-900/20\",\n buttonColor: \"bg-green-600 hover:bg-green-700 focus:ring-green-500\",\n textColor: \"text-green-600 dark:text-green-400\"\n },\n error: {\n icon: (\n <svg className=\"h-6 w-6 text-red-600 dark:text-red-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ),\n bgColor: \"bg-red-100 dark:bg-red-900/20\",\n buttonColor: \"bg-red-600 hover:bg-red-700 focus:ring-red-500\",\n textColor: \"text-red-600 dark:text-red-400\"\n }\n }\n\n const config = typeConfig[type]\n const isInputValid = !showInput || !requiredInputValue || inputValue === requiredInputValue\n const isDisabled = disabled || loading || !isInputValid\n\n return (\n <Modal \n isOpen={isOpen} \n onClose={onClose} \n showCloseButton={false}\n size={size}\n >\n <div className=\"text-center\">\n {/* 아이콘 */}\n <div className={merge(\n \"mx-auto flex items-center justify-center h-16 w-16 rounded-full mb-6\", // 64px 아이콘, 24px 여백\n config.bgColor\n )}>\n {config.icon}\n </div>\n\n {/* 제목 */}\n <h3 className=\"text-xl font-semibold text-gray-900 dark:text-white mb-4\"> {/* 16px 여백 */}\n {title}\n </h3>\n\n {/* 메시지 */}\n <div className=\"mb-6\"> {/* 24px 여백 */}\n <p className=\"text-sm text-gray-600 dark:text-gray-400\">\n {message}\n </p>\n \n {/* 경고 메시지 */}\n {warning && (\n <p className={merge(\n \"text-sm mt-3 font-medium\", // 12px 여백\n config.textColor\n )}>\n {warning}\n </p>\n )}\n </div>\n\n {/* 입력 필드 */}\n {showInput && (\n <div className=\"mb-6\"> {/* 24px 여백 */}\n <label htmlFor=\"confirmInput\" className=\"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-3 text-left\"> {/* 12px 여백 */}\n {inputLabel}\n </label>\n <input\n type=\"text\"\n id=\"confirmInput\"\n value={inputValue}\n onChange={(e) => onInputChange?.(e.target.value)}\n placeholder={inputPlaceholder}\n className=\"w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-transparent dark:bg-gray-700 dark:text-white transition-colors\" // 16px, 12px 패딩\n />\n </div>\n )}\n\n {/* 버튼 */}\n <div className={merge(\n \"flex gap-3\", // 12px 간격\n showCancel ? \"justify-center\" : \"justify-center\"\n )}>\n {showCancel && (\n <Button\n variant=\"outline\"\n onClick={onClose}\n disabled={loading}\n className=\"px-6 py-3\" // 24px, 12px 패딩\n >\n {cancelText}\n </Button>\n )}\n <Button\n variant=\"default\"\n onClick={onConfirm}\n disabled={isDisabled}\n className={merge(\n \"px-6 py-3\", // 24px, 12px 패딩\n config.buttonColor\n )}\n >\n {loading ? (\n <div className=\"flex items-center\">\n <svg className=\"animate-spin -ml-1 mr-2 h-4 w-4 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n 처리 중...\n </div>\n ) : (\n confirmButtonText || confirmText\n )}\n </Button>\n </div>\n </div>\n </Modal>\n )\n }\n)\nConfirmModal.displayName = \"ConfirmModal\"\n\nexport { ConfirmModal } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Menu 컴포넌트의 props / Menu component props\n * @typedef {Object} MenuProps\n * @property {React.ReactNode} children - MenuItem, MenuSeparator, MenuLabel 컴포넌트들 / MenuItem, MenuSeparator, MenuLabel components\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant=\"default\"] - 메뉴 방향 및 스타일 / Menu direction and style\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 메뉴 아이템 크기 / Menu item size\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * Menu 컴포넌트 / Menu component\n * \n * 메뉴 리스트를 제공하는 컴포넌트입니다.\n * MenuItem, MenuSeparator, MenuLabel과 함께 사용합니다.\n * \n * Component that provides menu lists.\n * Used with MenuItem, MenuSeparator, and MenuLabel.\n * \n * @component\n * @example\n * // 기본 수직 메뉴 / Basic vertical menu\n * <Menu>\n * <MenuItem icon={<Icon name=\"home\" />}>홈</MenuItem>\n * <MenuItem icon={<Icon name=\"settings\" />}>설정</MenuItem>\n * <MenuSeparator />\n * <MenuItem>로그아웃</MenuItem>\n * </Menu>\n * \n * @example\n * // 수평 메뉴 / Horizontal menu\n * <Menu variant=\"horizontal\">\n * <MenuItem>메뉴 1</MenuItem>\n * <MenuItem>메뉴 2</MenuItem>\n * </Menu>\n * \n * @param {MenuProps} props - Menu 컴포넌트의 props / Menu component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Menu 컴포넌트 / Menu component\n */\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>(\n ({ \n className, \n children,\n variant = \"default\",\n size = \"md\",\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"flex items-center space-x-1\" // 4px 간격\n case \"vertical\":\n return \"flex flex-col space-y-1\" // 4px 간격\n case \"compact\":\n return \"flex flex-col space-y-0.5\" // 2px 간격\n default:\n return \"flex flex-col space-y-1\" // 4px 간격\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-sm\"\n case \"lg\":\n return \"text-base\"\n default:\n return \"text-sm\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n variant,\n size\n } as Partial<MenuItemProps | MenuSeparatorProps | MenuLabelProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nMenu.displayName = \"Menu\"\n\n/**\n * MenuItem 컴포넌트의 props / MenuItem component props\n * @typedef {Object} MenuItemProps\n * @property {React.ReactNode} [icon] - 메뉴 아이템 아이콘 / Menu item icon\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 메뉴 크기 (Menu에서 자동 전달) / Menu size (auto-passed from Menu)\n * @property {boolean} [active=false] - 활성화 상태 / Active state\n * @property {boolean} [disabled=false] - 비활성화 상태 / Disabled state\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface MenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n active?: boolean\n disabled?: boolean\n}\n\n/**\n * MenuItem 컴포넌트 / MenuItem component\n * 메뉴의 개별 아이템을 표시합니다.\n * Displays an individual menu item.\n * \n * @component\n * @param {MenuItemProps} props - MenuItem 컴포넌트의 props / MenuItem component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} MenuItem 컴포넌트 / MenuItem component\n */\nconst MenuItem = React.forwardRef<HTMLButtonElement, MenuItemProps>(\n ({ \n className, \n icon,\n variant = \"default\",\n size = \"md\",\n active = false,\n disabled = false,\n children,\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return merge(\n \"flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors\", // 12px, 8px 패딩\n active \n ? \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\" \n : \"text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-700\"\n )\n case \"vertical\":\n return merge(\n \"flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors\", // 16px, 12px 패딩\n active \n ? \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\" \n : \"text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-700\"\n )\n case \"compact\":\n return merge(\n \"flex items-center gap-2 px-2 py-1.5 rounded text-sm font-medium transition-colors\", // 8px, 6px 패딩\n active \n ? \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\" \n : \"text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-700\"\n )\n default:\n return merge(\n \"flex items-center gap-3 px-4 py-3 rounded-md text-sm font-medium transition-colors\", // 16px, 12px 패딩\n active \n ? \"bg-blue-100 dark:bg-blue-900 text-blue-700 dark:text-blue-300\" \n : \"text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 hover:bg-gray-100 dark:hover:bg-gray-700\"\n )\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-xs\"\n case \"lg\":\n return \"text-base\"\n default:\n return \"text-sm\"\n }\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n disabled={disabled}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nMenuItem.displayName = \"MenuItem\"\n\n/**\n * MenuSeparator 컴포넌트의 props / MenuSeparator component props\n * @typedef {Object} MenuSeparatorProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n}\n\n/**\n * MenuSeparator 컴포넌트 / MenuSeparator component\n * 메뉴 아이템들을 구분하는 구분선을 표시합니다.\n * Displays a separator line between menu items.\n * \n * @component\n * @param {MenuSeparatorProps} props - MenuSeparator 컴포넌트의 props / MenuSeparator component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MenuSeparator 컴포넌트 / MenuSeparator component\n */\nconst MenuSeparator = React.forwardRef<HTMLDivElement, MenuSeparatorProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"w-px h-4 bg-gray-200 dark:bg-gray-700 mx-1\" // 4px 여백\n case \"vertical\":\n case \"compact\":\n default:\n return \"h-px bg-gray-200 dark:bg-gray-700 my-2\" // 8px 여백\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(getVariantClasses(), className)}\n {...props}\n />\n )\n }\n)\nMenuSeparator.displayName = \"MenuSeparator\"\n\n/**\n * MenuLabel 컴포넌트의 props / MenuLabel component props\n * @typedef {Object} MenuLabelProps\n * @property {\"default\" | \"horizontal\" | \"vertical\" | \"compact\"} [variant] - 메뉴 변형 (Menu에서 자동 전달) / Menu variant (auto-passed from Menu)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - 메뉴 크기 (Menu에서 자동 전달) / Menu size (auto-passed from Menu)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface MenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"horizontal\" | \"vertical\" | \"compact\"\n size?: \"sm\" | \"md\" | \"lg\"\n}\n\n/**\n * MenuLabel 컴포넌트 / MenuLabel component\n * 메뉴 섹션의 레이블을 표시합니다.\n * Displays a label for a menu section.\n * \n * @component\n * @param {MenuLabelProps} props - MenuLabel 컴포넌트의 props / MenuLabel component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MenuLabel 컴포넌트 / MenuLabel component\n */\nconst MenuLabel = React.forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ className, variant = \"default\", size = \"md\", children, ...props }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"horizontal\":\n return \"px-3 py-1 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide\" // 12px, 4px 패딩\n case \"vertical\":\n case \"compact\":\n default:\n return \"px-4 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide\" // 16px, 8px 패딩\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case \"sm\":\n return \"text-xs\"\n case \"lg\":\n return \"text-sm\"\n default:\n return \"text-xs\"\n }\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n getVariantClasses(),\n getSizeClasses(),\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nMenuLabel.displayName = \"MenuLabel\"\n\n// 편의 컴포넌트들\nexport const MenuHorizontal = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"horizontal\" className={className} {...props} />\n )\n)\nMenuHorizontal.displayName = \"MenuHorizontal\"\n\nexport const MenuVertical = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"vertical\" className={className} {...props} />\n )\n)\nMenuVertical.displayName = \"MenuVertical\"\n\nexport const MenuCompact = React.forwardRef<HTMLDivElement, Omit<MenuProps, \"variant\">>(\n ({ className, ...props }, ref) => (\n <Menu ref={ref} variant=\"compact\" className={className} {...props} />\n )\n)\nMenuCompact.displayName = \"MenuCompact\"\n\nexport { Menu, MenuItem, MenuSeparator, MenuLabel } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * ContextMenu 컴포넌트의 props / ContextMenu component props\n * @typedef {Object} ContextMenuProps\n * @property {React.ReactNode} children - ContextMenu 내용 / ContextMenu content\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {React.ReactNode} [trigger] - ContextMenu를 열기 위한 트리거 요소 (우클릭 이벤트) / Trigger element to open context menu (right-click event)\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [placement=\"bottom\"] - ContextMenu 표시 위치 / ContextMenu display position\n * @property {\"start\" | \"center\" | \"end\"} [align=\"start\"] - ContextMenu 정렬 / ContextMenu alignment\n * @property {number} [offset=8] - 트리거와 ContextMenu 사이 간격 (px) / Spacing between trigger and context menu (px)\n * @property {boolean} [disabled=false] - ContextMenu 비활성화 여부 / Disable context menu\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ContextMenuProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n trigger?: React.ReactNode\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\"\n align?: \"start\" | \"center\" | \"end\"\n offset?: number\n disabled?: boolean\n}\n\n/**\n * ContextMenu 컴포넌트 / ContextMenu component\n * \n * 우클릭 시 표시되는 컨텍스트 메뉴 컴포넌트입니다.\n * 트리거 요소에 우클릭 이벤트를 자동으로 연결합니다.\n * \n * Context menu component that appears on right-click.\n * Automatically connects right-click events to the trigger element.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ContextMenu trigger={<div>우클릭하세요</div>}>\n * <div className=\"p-2\">\n * <button>항목 1</button>\n * <button>항목 2</button>\n * </div>\n * </ContextMenu>\n * \n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <ContextMenu \n * open={open}\n * onOpenChange={setOpen}\n * trigger={<div>우클릭</div>}\n * >\n * <Menu>\n * <MenuItem>복사</MenuItem>\n * <MenuItem>삭제</MenuItem>\n * </Menu>\n * </ContextMenu>\n * \n * @param {ContextMenuProps} props - ContextMenu 컴포넌트의 props / ContextMenu component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ContextMenu 컴포넌트 / ContextMenu component\n */\nconst ContextMenu = React.forwardRef<HTMLDivElement, ContextMenuProps>(\n ({ \n className, \n children,\n open: controlledOpen,\n onOpenChange,\n trigger,\n placement: _placement = \"bottom\",\n align: _align = \"start\",\n offset: _offset = 8,\n disabled = false,\n ...props \n }, ref) => {\n const [internalOpen, setInternalOpen] = React.useState(false)\n const [coords, setCoords] = React.useState({ x: 0, y: 0 })\n const triggerRef = React.useRef<HTMLDivElement>(null)\n const menuRef = React.useRef<HTMLDivElement>(null)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n if (disabled) return\n\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [disabled, isControlled, onOpenChange])\n\n const handleContextMenu = (event: React.MouseEvent) => {\n event.preventDefault()\n if (disabled) return\n\n const _rect = event.currentTarget.getBoundingClientRect()\n const x = event.clientX\n const y = event.clientY\n\n setCoords({ x, y })\n handleOpenChange(true)\n }\n\n const updatePosition = React.useCallback(() => {\n if (!menuRef.current) return\n\n const menuRect = menuRef.current.getBoundingClientRect()\n const viewportWidth = window.innerWidth\n const viewportHeight = window.innerHeight\n\n let x = coords.x\n let y = coords.y\n\n // 뷰포트 경계 확인 및 조정\n if (x + menuRect.width > viewportWidth - 8) {\n x = viewportWidth - menuRect.width - 8 // 8px 여백\n }\n if (y + menuRect.height > viewportHeight - 8) {\n y = viewportHeight - menuRect.height - 8 // 8px 여백\n }\n if (x < 8) x = 8 // 8px 여백\n if (y < 8) y = 8 // 8px 여백\n\n setCoords({ x, y })\n }, [coords.x, coords.y])\n\n React.useEffect(() => {\n if (isOpen) {\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition)\n \n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition)\n }\n }\n }, [isOpen, updatePosition])\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n triggerRef.current &&\n menuRef.current &&\n !triggerRef.current.contains(event.target as Node) &&\n !menuRef.current.contains(event.target as Node)\n ) {\n handleOpenChange(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }\n }, [isOpen, handleOpenChange])\n\n return (\n <div ref={ref} className={merge(\"relative\", className)} {...props}>\n {/* 트리거 */}\n {trigger && (\n <div\n ref={triggerRef}\n onContextMenu={handleContextMenu}\n className=\"inline-block\"\n >\n {trigger}\n </div>\n )}\n\n {/* 컨텍스트 메뉴 */}\n {isOpen && (\n <div\n ref={menuRef}\n className={merge(\n \"fixed z-50 bg-white dark:bg-gray-800 rounded-lg shadow-xl backdrop-blur-sm\", // 보더 대신 섀도우 사용\n \"min-w-[200px] py-2\", // 16px 패딩\n \"border-0\" // 보더 제거\n )}\n style={{\n left: coords.x,\n top: coords.y,\n boxShadow: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\"\n }}\n >\n {children}\n </div>\n )}\n </div>\n )\n }\n)\nContextMenu.displayName = \"ContextMenu\"\n\nexport interface ContextMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n variant?: \"default\" | \"destructive\" | \"disabled\"\n}\n\nconst ContextMenuItem = React.forwardRef<HTMLButtonElement, ContextMenuItemProps>(\n ({ \n className, \n icon,\n variant = \"default\",\n children,\n disabled,\n ...props \n }, ref) => {\n const getVariantClasses = () => {\n switch (variant) {\n case \"destructive\":\n return \"text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20\"\n case \"disabled\":\n return \"text-gray-400 dark:text-gray-500 cursor-not-allowed\"\n default:\n return \"text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700\"\n }\n }\n\n return (\n <button\n ref={ref}\n className={merge(\n \"w-full flex items-center gap-3 px-4 py-3 text-sm font-medium transition-colors focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-700\", // 16px, 12px 패딩\n getVariantClasses(),\n className\n )}\n disabled={disabled || variant === \"disabled\"}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nContextMenuItem.displayName = \"ContextMenuItem\"\n\nexport interface ContextMenuSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst ContextMenuSeparator = React.forwardRef<HTMLDivElement, ContextMenuSeparatorProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"h-px bg-gray-200 dark:bg-gray-700 my-2\", className)} // 8px 여백\n {...props}\n />\n )\n)\nContextMenuSeparator.displayName = \"ContextMenuSeparator\"\n\nexport interface ContextMenuLabelProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst ContextMenuLabel = React.forwardRef<HTMLDivElement, ContextMenuLabelProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"px-4 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide\", className)} // 16px, 8px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nContextMenuLabel.displayName = \"ContextMenuLabel\"\n\n// 편의 컴포넌트들\nconst ContextMenuGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"py-1\", className)} // 4px 패딩\n {...props}\n >\n {children}\n </div>\n )\n)\nContextMenuGroup.displayName = \"ContextMenuGroup\"\n\nexport { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuLabel, ContextMenuGroup } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Command 컴포넌트의 props / Command component props\n * @typedef {Object} CommandProps\n * @property {React.ReactNode} children - CommandList, CommandItem 등 / CommandList, CommandItem, etc.\n * @property {boolean} [open] - 제어 모드에서 열림/닫힘 상태 / Open/close state in controlled mode\n * @property {(open: boolean) => void} [onOpenChange] - 상태 변경 콜백 / State change callback\n * @property {string} [placeholder=\"명령어를 검색하세요...\"] - 검색 입력 플레이스홀더 / Search input placeholder\n * @property {string} [searchValue] - 제어 모드에서 검색 값 / Search value in controlled mode\n * @property {(value: string) => void} [onSearchChange] - 검색 값 변경 콜백 / Search value change callback\n * @property {boolean} [disabled=false] - Command 비활성화 여부 / Disable command\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n open?: boolean\n onOpenChange?: (open: boolean) => void\n placeholder?: string\n searchValue?: string\n onSearchChange?: (value: string) => void\n disabled?: boolean\n}\n\n/**\n * Command 컴포넌트 / Command component\n * \n * 명령 팔레트(Command Palette) 컴포넌트입니다.\n * Cmd+K (Mac) 또는 Ctrl+K (Windows)로 열 수 있습니다.\n * 키보드 네비게이션(Arrow keys, Enter, Escape)을 지원합니다.\n * \n * Command Palette component.\n * Can be opened with Cmd+K (Mac) or Ctrl+K (Windows).\n * Supports keyboard navigation (Arrow keys, Enter, Escape).\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Command>\n * <CommandInput placeholder=\"검색...\" />\n * <CommandList>\n * <CommandItem>항목 1</CommandItem>\n * <CommandItem>항목 2</CommandItem>\n * </CommandList>\n * </Command>\n * \n * @example\n * // 제어 모드 / Controlled mode\n * const [open, setOpen] = useState(false)\n * <Command \n * open={open}\n * onOpenChange={setOpen}\n * >\n * <CommandList>\n * <CommandGroup heading=\"파일\">\n * <CommandItem>새 파일</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </Command>\n * \n * @param {CommandProps} props - Command 컴포넌트의 props / Command component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Command 컴포넌트 / Command component\n */\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ \n className, \n children,\n open: controlledOpen,\n onOpenChange,\n placeholder = \"명령어를 검색하세요...\",\n searchValue: controlledSearchValue,\n onSearchChange,\n disabled = false,\n ...props \n }, ref) => {\n const [internalOpen, setInternalOpen] = React.useState(false)\n const [internalSearchValue, setInternalSearchValue] = React.useState(\"\")\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n const commandRef = React.useRef<HTMLDivElement>(null)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const listRef = React.useRef<HTMLDivElement>(null)\n \n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n const searchValue = controlledSearchValue !== undefined ? controlledSearchValue : internalSearchValue\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n if (disabled) return\n\n if (!isControlled) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [disabled, isControlled, onOpenChange])\n\n const handleSearchChange = (value: string) => {\n if (!isControlled) {\n setInternalSearchValue(value)\n }\n onSearchChange?.(value)\n setSelectedIndex(0)\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n const items = listRef.current?.querySelectorAll('[data-command-item]')\n const itemCount = items?.length || 0\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setSelectedIndex((prev) => (prev + 1) % itemCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setSelectedIndex((prev) => (prev - 1 + itemCount) % itemCount)\n break\n case 'Enter': {\n event.preventDefault()\n const selectedItem = items?.[selectedIndex] as HTMLElement\n selectedItem?.click()\n break\n }\n case 'Escape':\n event.preventDefault()\n handleOpenChange(false)\n break\n }\n }\n\n React.useEffect(() => {\n if (isOpen) {\n inputRef.current?.focus()\n setSelectedIndex(0)\n }\n }, [isOpen])\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n handleOpenChange(!isOpen)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [isOpen, handleOpenChange])\n\n React.useEffect(() => {\n const selectedItem = listRef.current?.querySelector(`[data-command-item]:nth-child(${selectedIndex + 1})`) as HTMLElement\n selectedItem?.scrollIntoView({ block: 'nearest' })\n }, [selectedIndex])\n\n return (\n <div ref={ref} className={merge(\"relative\", className)} {...props}>\n {isOpen && (\n <div\n ref={commandRef}\n className={merge(\n \"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\", // 50% 투명도\n \"flex items-start justify-center pt-16\" // 64px 상단 여백\n )}\n onClick={() => handleOpenChange(false)}\n >\n <div\n className={merge(\n \"w-full max-w-2xl mx-4 bg-white dark:bg-gray-800 rounded-lg shadow-2xl\", // 보더 대신 섀도우\n \"border-0 overflow-hidden\" // 보더 제거\n )}\n onClick={(e) => e.stopPropagation()}\n style={{\n boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n }}\n >\n <div className=\"p-4 border-b border-gray-200 dark:border-gray-700\"> {/* 16px 패딩 */}\n <input\n ref={inputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchValue}\n onChange={(e) => handleSearchChange(e.target.value)}\n onKeyDown={handleKeyDown}\n className={merge(\n \"w-full bg-transparent text-lg font-medium outline-none\", // 18px 텍스트\n \"placeholder:text-gray-500 dark:placeholder:text-gray-400\",\n \"text-gray-900 dark:text-gray-100\"\n )}\n />\n </div>\n \n <div\n ref={listRef}\n className=\"max-h-96 overflow-y-auto py-2\" // 384px 최대 높이, 8px 패딩\n >\n {React.Children.map(children, (child, index) => {\n if (React.isValidElement<CommandItemProps>(child)) {\n return React.cloneElement(child, {\n selected: index === selectedIndex,\n onSelect: () => {\n child.props.onSelect?.()\n handleOpenChange(false)\n }\n })\n }\n return child\n })}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n }\n)\nCommand.displayName = \"Command\"\n\n/**\n * CommandInput 컴포넌트의 props / CommandInput component props\n * @typedef {Object} CommandInputProps\n * @extends {React.InputHTMLAttributes<HTMLInputElement>}\n */\nexport interface CommandInputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst CommandInput = React.forwardRef<HTMLInputElement, CommandInputProps>(\n ({ className, ...props }, ref) => (\n <input\n ref={ref}\n className={merge(\n \"flex h-10 w-full rounded-md bg-transparent px-3 py-2 text-sm outline-none\", // 40px 높이, 12px, 8px 패딩\n \"placeholder:text-gray-500 dark:placeholder:text-gray-400\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n)\nCommandInput.displayName = \"CommandInput\"\n\nexport interface CommandListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandList = React.forwardRef<HTMLDivElement, CommandListProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"max-h-96 overflow-y-auto py-2\", className)} // 384px 최대 높이, 8px 패딩\n {...props}\n />\n )\n)\nCommandList.displayName = \"CommandList\"\n\n/**\n * CommandItem 컴포넌트의 props / CommandItem component props\n * @typedef {Object} CommandItemProps\n * @property {React.ReactNode} [icon] - 항목 아이콘 / Item icon\n * @property {boolean} [selected=false] - 선택 상태 / Selected state\n * @property {() => void} [onSelect] - 선택 시 콜백 / Selection callback\n * @extends {React.ButtonHTMLAttributes<HTMLButtonElement>}\n */\nexport interface CommandItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon?: React.ReactNode\n selected?: boolean\n onSelect?: () => void\n}\n\nconst CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(\n ({ \n className, \n icon,\n selected = false,\n onSelect,\n children,\n ...props \n }, ref) => {\n return (\n <button\n ref={ref}\n data-command-item\n className={merge(\n \"relative flex w-full items-center gap-3 rounded-sm px-4 py-3 text-sm\", // 16px, 12px 패딩\n \"text-gray-700 dark:text-gray-300\",\n \"hover:bg-gray-100 dark:hover:bg-gray-700\",\n \"focus:bg-gray-100 dark:focus:bg-gray-700\",\n \"focus:outline-none\",\n selected && \"bg-gray-100 dark:bg-gray-700\",\n \"transition-colors\",\n className\n )}\n onClick={onSelect}\n {...props}\n >\n {icon && (\n <div className=\"flex-shrink-0 w-4 h-4 text-gray-500 dark:text-gray-400\">\n {icon}\n </div>\n )}\n <span className=\"flex-1 text-left\">{children}</span>\n </button>\n )\n }\n)\nCommandItem.displayName = \"CommandItem\"\n\n/**\n * CommandGroup 컴포넌트의 props / CommandGroup component props\n * @typedef {Object} CommandGroupProps\n * @property {React.ReactNode} [heading] - 그룹 제목 / Group heading\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n heading?: React.ReactNode\n}\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, CommandGroupProps>(\n ({ className, heading, children, ...props }, ref) => (\n <div ref={ref} className={merge(\"py-2\", className)} {...props}> {/* 8px 패딩 */}\n {heading && (\n <div className=\"px-4 py-2 text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wide\"> {/* 16px, 8px 패딩 */}\n {heading}\n </div>\n )}\n <div className=\"space-y-1\"> {/* 4px 간격 */}\n {children}\n </div>\n </div>\n )\n)\nCommandGroup.displayName = \"CommandGroup\"\n\n/**\n * CommandSeparator 컴포넌트의 props / CommandSeparator component props\n * @typedef {Object} CommandSeparatorProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, CommandSeparatorProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\"h-px bg-gray-200 dark:bg-gray-700 my-2\", className)} // 8px 여백\n {...props}\n />\n )\n)\nCommandSeparator.displayName = \"CommandSeparator\"\n\n/**\n * CommandEmpty 컴포넌트의 props / CommandEmpty component props\n * @typedef {Object} CommandEmptyProps\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface CommandEmptyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, CommandEmptyProps>(\n ({ className, children = \"결과가 없습니다.\", ...props }, ref) => (\n <div\n ref={ref}\n className={merge(\n \"py-8 text-center text-sm text-gray-500 dark:text-gray-400\", // 32px 패딩\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n)\nCommandEmpty.displayName = \"CommandEmpty\"\n\n// 편의 컴포넌트들\nexport const CommandDialog = React.forwardRef<HTMLDivElement, CommandProps>(\n ({ className, ...props }, ref) => (\n <Command ref={ref} className={className} {...props} />\n )\n)\nCommandDialog.displayName = \"CommandDialog\"\n\nexport { Command, CommandInput, CommandList, CommandItem, CommandGroup, CommandSeparator, CommandEmpty } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * ScrollArea 컴포넌트의 props / ScrollArea component props\n * @typedef {Object} ScrollAreaProps\n * @property {React.ReactNode} children - 스크롤 영역 내용 / Scroll area content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"vertical\" | \"horizontal\" | \"both\"} [orientation=\"vertical\"] - 스크롤 방향 / Scroll direction\n * @property {number} [scrollHideDelay=600] - 스크롤바 숨김 지연 시간 (ms) / Scrollbar hide delay (ms)\n * @property {\"auto\" | \"always\" | \"scroll\" | \"hover\"} [type=\"hover\"] - 스크롤바 표시 타입 / Scrollbar display type\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\ninterface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n className?: string\n orientation?: \"vertical\" | \"horizontal\" | \"both\"\n scrollHideDelay?: number\n type?: \"auto\" | \"always\" | \"scroll\" | \"hover\"\n}\n\n/**\n * ScrollArea 컴포넌트 / ScrollArea component\n * \n * 커스텀 스크롤바를 가진 스크롤 영역 컴포넌트입니다.\n * 호버 시 스크롤바를 표시하거나 항상 표시할 수 있습니다.\n * \n * Scroll area component with custom scrollbar.\n * Can display scrollbar on hover or always.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ScrollArea className=\"h-64\">\n * <div>긴 내용...</div>\n * </ScrollArea>\n * \n * @example\n * // 가로 스크롤, 항상 표시 / Horizontal scroll, always visible\n * <ScrollArea orientation=\"horizontal\" type=\"always\">\n * <div className=\"flex space-x-4\">...</div>\n * </ScrollArea>\n * \n * @param {ScrollAreaProps} props - ScrollArea 컴포넌트의 props / ScrollArea component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ScrollArea 컴포넌트 / ScrollArea component\n */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ \n children, \n className, \n orientation = \"vertical\",\n scrollHideDelay = 600,\n type = \"hover\",\n ...props \n }, ref) => {\n const [showScrollbar, setShowScrollbar] = React.useState(false)\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n const handleMouseEnter = () => {\n if (type === \"hover\" || type === \"always\") {\n setShowScrollbar(true)\n }\n }\n\n const handleMouseLeave = () => {\n if (type === \"hover\") {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n timeoutRef.current = setTimeout(() => {\n setShowScrollbar(false)\n }, scrollHideDelay)\n }\n }\n\n React.useEffect(() => {\n if (type === \"always\") {\n setShowScrollbar(true)\n }\n }, [type])\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"relative overflow-auto scrollbar-thin\",\n orientation === \"vertical\" && \"overflow-y-auto overflow-x-hidden\",\n orientation === \"horizontal\" && \"overflow-x-auto overflow-y-hidden\",\n orientation === \"both\" && \"overflow-auto\",\n showScrollbar ? \"scrollbar-visible\" : \"scrollbar-hidden\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nScrollArea.displayName = \"ScrollArea\"\n\n/**\n * ScrollBar 컴포넌트의 props / ScrollBar component props\n * @typedef {Object} ScrollBarProps\n * @property {\"vertical\" | \"horizontal\"} [orientation=\"vertical\"] - 스크롤바 방향 / Scrollbar direction\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\ninterface ScrollBarProps {\n orientation?: \"vertical\" | \"horizontal\"\n className?: string\n}\n\n/**\n * ScrollBar 컴포넌트 / ScrollBar component\n * 커스텀 스크롤바를 표시합니다.\n * Displays a custom scrollbar.\n * \n * @component\n * @param {ScrollBarProps} props - ScrollBar 컴포넌트의 props / ScrollBar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ScrollBar 컴포넌트 / ScrollBar component\n */\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ orientation = \"vertical\", className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\n \"flex touch-none select-none transition-colors duration-150 ease-out\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar } ","import { useEffect, useState } from \"react\"\n\ninterface ScrollToggleOptions {\n threshold?: number\n showOnMount?: boolean\n smooth?: boolean\n}\n\nexport function useScrollToggle(options: ScrollToggleOptions = {}) {\n const {\n threshold = 400,\n showOnMount = false,\n smooth = true,\n } = options\n\n const [isVisible, setIsVisible] = useState(showOnMount)\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (!mounted) return\n\n const toggleVisibility = () => {\n if (typeof window === \"undefined\") return\n setIsVisible(window.pageYOffset > threshold)\n }\n\n toggleVisibility()\n window.addEventListener(\"scroll\", toggleVisibility, { passive: true })\n window.addEventListener(\"resize\", toggleVisibility, { passive: true })\n\n return () => {\n window.removeEventListener(\"scroll\", toggleVisibility)\n window.removeEventListener(\"resize\", toggleVisibility)\n }\n }, [threshold, mounted])\n\n const scrollToTop = () => {\n if (typeof window === \"undefined\") return\n if (smooth) {\n window.scrollTo({ top: 0, behavior: \"smooth\" })\n } else {\n window.scrollTo(0, 0)\n }\n }\n\n return {\n isVisible,\n scrollToTop,\n mounted,\n }\n}\n\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\nimport { IconName } from \"../lib/icons\"\nimport { useScrollToggle } from \"../hooks/useScrollToggle\"\n\n/**\n * ScrollToTop 컴포넌트의 props / ScrollToTop component props\n * @typedef {Object} ScrollToTopProps\n * @property {number} [threshold=400] - 표시 임계값 (px, 이 값 이상 스크롤 시 표시) / Display threshold (px, shows when scrolled beyond this value)\n * @property {boolean} [smooth=true] - 부드러운 스크롤 여부 / Smooth scroll\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {IconName} [icon='arrowUp'] - 아이콘 이름 / Icon name\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 버튼 크기 / Button size\n * @property {\"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\"} [variant=\"default\"] - 버튼 스타일 변형 / Button style variant\n * @property {boolean} [showOnMount=false] - 마운트 시 즉시 표시 여부 / Show immediately on mount\n * @extends {React.HTMLAttributes<HTMLButtonElement>}\n */\nexport interface ScrollToTopProps extends React.HTMLAttributes<HTMLButtonElement> {\n threshold?: number\n smooth?: boolean\n className?: string\n icon?: IconName\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\"\n showOnMount?: boolean\n}\n\n/**\n * ScrollToTop 컴포넌트 / ScrollToTop component\n * \n * 페이지 상단으로 스크롤하는 버튼 컴포넌트입니다.\n * 지정된 임계값 이상 스크롤 시 자동으로 표시됩니다.\n * \n * Button component that scrolls to top of page.\n * Automatically appears when scrolled beyond specified threshold.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ScrollToTop />\n * \n * @example\n * // 커스텀 설정 / Custom settings\n * <ScrollToTop \n * threshold={500}\n * variant=\"primary\"\n * size=\"lg\"\n * icon=\"arrowUp\"\n * />\n * \n * @param {ScrollToTopProps} props - ScrollToTop 컴포넌트의 props / ScrollToTop component props\n * @returns {JSX.Element} ScrollToTop 컴포넌트 / ScrollToTop component\n */\nconst ScrollToTop = ({ \n className, \n threshold = 400, \n smooth = true, \n icon = \"arrowUp\",\n size = \"md\",\n variant = \"default\",\n showOnMount = false,\n ...props \n}: ScrollToTopProps) => {\n // HUA Motion의 useScrollToggle 훅 사용\n const { isVisible, scrollToTop, mounted: _mounted } = useScrollToggle({\n threshold,\n showOnMount,\n smooth\n })\n\n const sizeClasses = {\n sm: \"w-8 h-8 sm:w-10 sm:h-10\",\n md: \"w-10 h-10 sm:w-12 sm:h-12\", \n lg: \"w-12 h-12 sm:w-14 sm:h-14\"\n }\n\n\n\n const variantClasses = {\n default: \"bg-white/20 backdrop-blur-md border border-white/30 text-white hover:bg-white/30 hover:shadow-lg hover:shadow-black/20 dark:bg-slate-800/20 dark:border-slate-700/50 dark:text-slate-100 dark:hover:bg-slate-700/30\",\n primary: \"bg-blue-600/70 backdrop-blur-md border border-blue-500/40 text-white hover:bg-blue-500/80 hover:shadow-xl hover:shadow-blue-500/50 hover:scale-105 transition-all duration-300 dark:bg-blue-500/70 dark:border-blue-400/40 dark:hover:bg-blue-400/80 dark:hover:shadow-blue-400/50\",\n secondary: \"bg-slate-100/60 backdrop-blur-md border border-slate-200/50 text-slate-700 hover:bg-slate-200/70 hover:shadow-lg dark:bg-slate-700/30 dark:border-slate-600/50 dark:text-slate-200 dark:hover:bg-slate-600/40\",\n outline: \"border border-white/40 bg-white/15 backdrop-blur-md text-white hover:bg-white/25 hover:shadow-lg dark:border-slate-600/50 dark:bg-slate-800/15 dark:text-slate-200 dark:hover:bg-slate-700/25\",\n ghost: \"bg-transparent hover:bg-white/15 backdrop-blur-md text-white hover:shadow-lg dark:text-slate-200 dark:hover:bg-slate-700/25\"\n }\n\n return (\n <button\n onClick={scrollToTop}\n className={merge(\n \"fixed z-[9999] rounded-full transition-all duration-500 ease-in-out\",\n \"flex items-center justify-center\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\",\n \"transform hover:scale-110 active:scale-95 shadow-lg\",\n // 페이드 애니메이션\n isVisible \n ? \"opacity-100 translate-y-0 pointer-events-auto\" \n : \"opacity-0 translate-y-4 pointer-events-none\",\n className,\n sizeClasses[size],\n variantClasses[variant]\n )}\n aria-label=\"Scroll to top\"\n {...props}\n >\n <Icon name={icon} className=\"w-5 h-5\" />\n </button>\n )\n}\n\nexport { ScrollToTop } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\nimport { useTheme } from \"./ThemeProvider\"\n\n/**\n * ThemeToggle 컴포넌트의 props / ThemeToggle component props\n * @typedef {Object} ThemeToggleProps\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Toggle 크기 / Toggle size\n * @property {\"button\" | \"icon\" | \"switch\"} [variant=\"button\"] - Toggle 스타일 변형 / Toggle style variant\n * @property {boolean} [showLabel=false] - 라벨 표시 여부 / Show label\n * @property {Object} [label] - 커스텀 라벨 텍스트 / Custom label text\n * @property {string} [label.light=\"라이트\"] - 라이트 모드 라벨 / Light mode label\n * @property {string} [label.dark=\"다크\"] - 다크 모드 라벨 / Dark mode label\n * @property {string} [label.system=\"시스템\"] - 시스템 모드 라벨 / System mode label\n */\ninterface ThemeToggleProps {\n className?: string\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"button\" | \"icon\" | \"switch\"\n showLabel?: boolean\n label?: {\n light?: string\n dark?: string\n system?: string\n }\n}\n\n/**\n * ThemeToggle 컴포넌트 / ThemeToggle component\n * \n * 테마를 전환하는 토글 컴포넌트입니다.\n * ThemeProvider와 함께 사용하며, light/dark/system 테마를 지원합니다.\n * \n * Toggle component for switching themes.\n * Used with ThemeProvider, supports light/dark/system themes.\n * \n * @component\n * @example\n * // 기본 사용 (버튼 스타일) / Basic usage (button style)\n * <ThemeToggle />\n * \n * @example\n * // 아이콘만 표시 / Icon only\n * <ThemeToggle variant=\"icon\" size=\"lg\" />\n * \n * @example\n * // Switch 스타일 / Switch style\n * <ThemeToggle variant=\"switch\" />\n * \n * @example\n * // 라벨과 함께 / With label\n * <ThemeToggle \n * showLabel\n * label={{ light: \"밝게\", dark: \"어둡게\" }}\n * />\n * \n * @param {ThemeToggleProps} props - ThemeToggle 컴포넌트의 props / ThemeToggle component props\n * @returns {JSX.Element} ThemeToggle 컴포넌트 / ThemeToggle component\n */\nexport function ThemeToggle({\n className,\n size = \"md\",\n variant = \"button\",\n showLabel = false,\n label = {\n light: \"라이트\",\n dark: \"다크\",\n system: \"시스템\"\n },\n ...props\n}: ThemeToggleProps) {\n const { theme, setTheme, resolvedTheme } = useTheme()\n\n const sizeClasses = {\n sm: \"h-10 w-10\", // 40px - 더 넉넉한 크기\n md: \"h-12 w-12\", // 48px - 더 넉넉한 크기\n lg: \"h-14 w-14\" // 56px - 더 넉넉한 크기\n }\n\n const iconSizes = {\n sm: 16,\n md: 20,\n lg: 24\n }\n\n const renderIcon = () => {\n if (theme === \"system\") {\n return <Icon name=\"monitor\" size={iconSizes[size]} />\n }\n return resolvedTheme === \"dark\" ? (\n <Icon name=\"moon\" size={iconSizes[size]} />\n ) : (\n <Icon name=\"sun\" size={iconSizes[size]} className=\"text-amber-600\" />\n )\n }\n\n const handleClick = () => {\n if (theme === \"system\") {\n setTheme(\"light\")\n } else if (theme === \"light\") {\n setTheme(\"dark\")\n } else if (theme === \"dark\") {\n setTheme(\"light\") // dark → light로 직접 전환\n }\n }\n\n if (variant === \"icon\") {\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"inline-flex items-center justify-center rounded-lg transition-all duration-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-2\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <div className=\"relative flex items-center justify-center w-full h-full\">\n <div\n className={merge(\n \"absolute inset-0 flex items-center justify-center transition-all duration-300\",\n resolvedTheme === \"dark\" ? \"rotate-0 opacity-100\" : \"rotate-90 opacity-0\"\n )}\n >\n <Icon name=\"moon\" size={iconSizes[size]} className=\"text-blue-500\" />\n </div>\n <div\n className={merge(\n \"absolute inset-0 flex items-center justify-center transition-all duration-300\",\n resolvedTheme === \"dark\" ? \"rotate-90 opacity-0\" : \"rotate-0 opacity-100\"\n )}\n >\n <Icon name=\"sun\" size={iconSizes[size]} className=\"text-amber-600 dark:text-yellow-500\" />\n </div>\n </div>\n </button>\n )\n }\n\n if (variant === \"switch\") {\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"relative inline-flex h-6 w-11 items-center rounded-full transition-colors duration-300 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-2\",\n resolvedTheme === \"dark\" \n ? \"bg-blue-600\" \n : \"bg-gray-200 dark:bg-gray-700\",\n className\n )}\n {...props}\n >\n <span\n className={merge(\n \"inline-block h-4 w-4 transform rounded-full bg-white transition-transform duration-300 shadow-lg\",\n resolvedTheme === \"dark\" ? \"translate-x-6\" : \"translate-x-1\"\n )}\n />\n <div className=\"absolute inset-0 flex items-center justify-between px-1.5\">\n <Icon name=\"sun\" size={12} className=\"text-amber-600 dark:text-yellow-500 opacity-0\" />\n <Icon name=\"moon\" size={12} className=\"text-blue-500 opacity-0\" />\n </div>\n </button>\n )\n }\n\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"inline-flex items-center gap-3 rounded-lg px-4 py-3 text-sm font-medium transition-all duration-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-2\", // 12px 간격, 16px, 12px 패딩\n className\n )}\n {...props}\n >\n {renderIcon()}\n {showLabel && (\n <span>\n {theme === \"system\" ? label.system : theme === \"dark\" ? label.dark : label.light}\n </span>\n )}\n </button>\n )\n} ","/**\n * Icon Names - 자동완성 지원\n * \n * 이 파일은 TypeScript 자동완성을 위한 아이콘 이름 목록입니다.\n * 실제 아이콘은 icons.ts와 PROJECT_ICONS에서 관리됩니다.\n */\n\nimport type { IconName } from './icons'\nimport { PROJECT_ICONS } from './icon-providers'\n\n/**\n * PROJECT_ICONS에 정의된 모든 아이콘 이름\n */\nexport type ProjectIconName = keyof typeof PROJECT_ICONS\n\n/**\n * 사용 가능한 모든 아이콘 이름 (icons.ts + PROJECT_ICONS)\n */\nexport type AllIconName = IconName | ProjectIconName\n\n/**\n * 아이콘 이름 목록 (자동완성용)\n */\nexport const iconNames = [\n // Navigation\n 'home', 'menu', 'close', 'search', 'settings', 'user', 'bell',\n 'arrowLeft', 'arrowRight', 'arrowUp', 'arrowDown',\n 'chevronLeft', 'chevronRight', 'chevronUp', 'chevronDown',\n \n // Actions\n 'add', 'edit', 'delete', 'remove', 'check', 'share', 'download', 'upload',\n 'save', 'copy', 'refresh', 'search',\n \n // Status & Feedback\n 'loader', 'success', 'error', 'warning', 'info', 'alertCircle',\n 'heart', 'star', 'bookmark',\n \n // User & Auth\n 'logIn', 'logOut', 'shield', 'key', 'lock', 'unlock',\n 'eye', 'eyeOff', 'users', 'userPlus',\n \n // Data & Analytics\n 'chart', 'barChart', 'pieChart', 'trendingUp', 'trendingDown',\n 'activity', 'database', 'zap', 'circle', 'dollarSign', 'dollar', 'currency',\n \n // Files & Content\n 'fileText', 'file', 'folder', 'book', 'bookOpen',\n 'image', 'video', 'camera',\n \n // Communication\n 'message', 'messageSquare', 'phone', 'mail', 'send',\n \n // Media\n 'play', 'pause', 'mic', 'headphones',\n \n // Emotions\n 'smile', 'frown', 'meh', 'laugh', 'angry',\n 'thumbsUp', 'thumbsDown',\n \n // Time & Date\n 'clock', 'timer', 'calendar', 'calendarDays',\n \n // UI & Theme\n 'monitor', 'sun', 'moon', 'sparkles', 'lightbulb', 'brain',\n \n // Navigation Extended\n 'externalLink', 'link', 'moreHorizontal', 'moreVertical',\n] as const\n\n/**\n * 프로바이더별 아이콘 이름 매핑 (참고용)\n * \n * @example\n * // Lucide 아이콘 사용\n * <Icon name=\"home\" provider=\"lucide\" /> // Lucide: Home\n * \n * // Phosphor 아이콘 사용\n * <Icon name=\"home\" provider=\"phosphor\" /> // Phosphor: House\n * \n * // Untitled 아이콘 사용\n * <Icon name=\"home\" provider=\"untitled\" /> // Untitled: home\n */\nexport const iconProviderMapping: Record<string, {\n lucide: string\n phosphor: string\n untitled: string\n}> = PROJECT_ICONS\n\n/**\n * 아이콘 이름이 유효한지 확인\n */\nexport function isValidIconName(name: string): name is AllIconName {\n return name in PROJECT_ICONS || (iconNames as readonly string[]).includes(name)\n}\n\n/**\n * 프로바이더별 아이콘 이름 가져오기\n */\nexport function getIconNameForProvider(\n iconName: string,\n provider: 'lucide' | 'phosphor' | 'untitled'\n): string | null {\n const mapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n if (!mapping) return null\n \n return mapping[provider] || null\n}\n\n\n"]}
1
+ {"version":3,"sources":["../src/components/Action.tsx","../src/components/Link.tsx","../src/components/Grid.tsx","../src/components/Stack.tsx","../src/components/Divider.tsx","../src/components/Panel.tsx","../src/components/ActionToolbar.tsx","../src/components/Toggle.tsx","../src/components/ScrollArea.tsx","../src/hooks/useScrollToggle.ts","../src/components/ScrollToTop.tsx","../src/components/ThemeToggle.tsx","../src/lib/icon-names.ts","../src/lib/styles/utils.ts","../src/lib/motion/presets.ts","../src/lib/motion/useMicroMotion.ts","../src/hooks/useInView.ts","../src/hooks/useScrollProgress.ts","../src/hooks/useMouse.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useWindowSize.ts"],"names":["isBrowser","useReducedMotion","reduce","setReduce","React","_a","mq","onChange","Action","className","children","actionType","feedback","particleEffect","rippleEffect","soundEffect","hapticFeedback","transparency","blurIntensity","glowIntensity","glowColor","loading","iconOnly","disabled","rest","ref","reduced","runEffects","event","AudioContextClass","audioContext","oscillator","gainNode","button","rect","x","y","size","ripple","style","i","particle","angle","velocity","vx","vy","styleVars","cls","merge","onClick","href","anchorRest","jsx","Button","e","btnRest","Link","variant","external","variantClasses","sizeClasses","Grid","cols","gap","gapX","gapY","responsive","props","colsClasses","gapClasses","gapXClasses","gapYClasses","Stack","direction","spacing","align","justify","wrap","directionClasses","spacingClasses","alignClasses","justifyClasses","DividerComponent","orientation","color","orientationClasses","colorClasses","Divider","Panel","effect","borderOpacity","shadowOpacity","_hoverEffect","animationEffect","padding","customPadding","rounded","customRounded","background","gradientColors","patternType","backgroundImage","backgroundVideo","interactive","hoverScale","hoverRotate","hoverGlow","cardProps","styleClasses","baseClasses","effectClasses","paddingClasses","roundedClasses","patternBackground","backgroundStyles","styles","hoverClasses","classes","panelClasses","jsxs","Card","ActionToolbarComponent","isSelectMode","totalCount","selectedCount","actions","selectModeActions","onToggleSelectMode","onToggleSelectAll","onCancelSelect","getBadgeColor","useCallback","renderButton","action","key","Icon","index","ActionToolbar","Toggle","controlledPressed","onPressedChange","label","description","icon","iconPosition","internalPressed","setInternalPressed","isControlled","pressed","handleClick","ScrollArea","scrollHideDelay","type","showScrollbar","setShowScrollbar","timeoutRef","handleMouseEnter","handleMouseLeave","ScrollBar","useScrollToggle","options","threshold","showOnMount","smooth","isVisible","setIsVisible","useState","mounted","setMounted","useEffect","toggleVisibility","ScrollToTop","scrollToTop","ThemeToggle","showLabel","theme","setTheme","resolvedTheme","useTheme","iconSizes","renderIcon","iconNames","iconProviderMapping","PROJECT_ICONS","isValidIconName","name","getIconNameForProvider","iconName","provider","mapping","withDarkMode","lightClass","darkClass","createGradient","from","to","withOpacity","opacity","isTextWhite","isGradientVariant","base","sm","md","lg","xl","conditionalClass","condition","trueClass","falseClass","EASING_FUNCTIONS","DURATIONS","HUA_DEFAULT_MOTION","COMPONENT_MOTION_DEFAULTS","CSS_MOTION_VARS","useMicroMotion","preset","duration","delay","scale","translateY","translateX","rotate","enableHover","enablePress","enableFocus","state","setState","animationTimeoutRef","useRef","setAnimating","isAnimating","prev","handlers","useMemo","transforms","easing","getMicroMotionClasses","enableActive","durationClass","useInView","rootMargin","triggerOnce","inView","setInView","entry","setEntry","frozenRef","element","observer","isInView","useScrollProgress","target","throttle","progress","setProgress","scrollY","setScrollY","scrollX","setScrollX","isScrolling","setIsScrolling","setDirection","lastScrollY","scrollTimeout","lastUpdate","calculateProgress","now","scrollTop","docHeight","newProgress","scrollHeight","useMouse","touch","moveTimeout","handleMove","clientX","clientY","elementX","elementY","elementPositionX","elementPositionY","isInside","handleMouseMove","handleTouchMove","prefersReducedMotion","setPrefersReducedMotion","mediaQuery","handleChange","useWindowSize","mobileBreakpoint","tabletBreakpoint","setSize","updateSize","width","height","timeoutId","handleResize"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { merge } from \"../lib/utils\";\nimport { Button, type ButtonProps } from \"./Button\";\n\n/** Action 전용 옵션(버튼 공통 옵션은 ButtonProps에서 상속) */\ntype ActionKind =\n | \"primary\" | \"secondary\" | \"tertiary\"\n | \"magical\" | \"cyberpunk\" | \"ninja\" | \"wizard\" | \"sniper\";\ntype FeedbackKind = \"ripple\" | \"particle\" | \"sound\" | \"haptic\" | \"glitch\" | \"sparkle\" | \"smoke\";\n\ntype ActionExtras = {\n actionType?: ActionKind;\n feedback?: FeedbackKind;\n\n particleEffect?: boolean;\n rippleEffect?: boolean;\n soundEffect?: boolean;\n hapticFeedback?: boolean;\n\n transparency?: number; // 0~1\n blurIntensity?: number; // px\n glowIntensity?: number; // px\n glowColor?: string; // css color\n};\n\n/**\n * Action 컴포넌트의 props / Action component props\n * @typedef {Object} ActionProps\n * @property {ActionKind} [actionType=\"primary\"] - Action 타입 / Action type\n * @property {FeedbackKind} [feedback=\"ripple\"] - 피드백 타입 / Feedback type\n * @property {boolean} [particleEffect=false] - 파티클 효과 활성화 / Enable particle effect\n * @property {boolean} [rippleEffect=false] - 리플 효과 활성화 / Enable ripple effect\n * @property {boolean} [soundEffect=false] - 사운드 효과 활성화 / Enable sound effect\n * @property {boolean} [hapticFeedback=false] - 햅틱 피드백 활성화 / Enable haptic feedback\n * @property {number} [transparency=1] - 투명도 (0-1) / Transparency (0-1)\n * @property {number} [blurIntensity=0] - blur 강도 (px) / Blur intensity (px)\n * @property {number} [glowIntensity=0] - 글로우 강도 (px) / Glow intensity (px)\n * @property {string} [glowColor=\"rgba(91,140,255,.8)\"] - 글로우 색상 / Glow color\n * @extends {ButtonProps}\n */\nexport type ActionProps = ButtonProps & ActionExtras;\n\ntype AnchorEl = HTMLAnchorElement;\ntype ButtonEl = HTMLButtonElement;\ntype AnchorOrButton = AnchorEl | ButtonEl;\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction useReducedMotion() {\n const [reduce, setReduce] = React.useState(false);\n React.useEffect(() => {\n if (!isBrowser || !(\"matchMedia\" in window)) return;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const onChange = () => setReduce(!!mq.matches);\n onChange();\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, []);\n return reduce;\n}\n\n/**\n * Action 컴포넌트 / Action component\n * \n * 고급 효과를 가진 액션 버튼 컴포넌트입니다.\n * Button 컴포넌트를 기반으로 하며, 파티클, 리플, 사운드, 햅틱 피드백 등을 지원합니다.\n * \n * Action button component with advanced effects.\n * Based on Button component, supports particle, ripple, sound, haptic feedback, etc.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Action>클릭</Action>\n * \n * @example\n * // 고급 효과 / Advanced effects\n * <Action \n * actionType=\"magical\"\n * feedback=\"particle\"\n * particleEffect\n * rippleEffect\n * >\n * 마법 버튼\n * </Action>\n * \n * @param {ActionProps} props - Action 컴포넌트의 props / Action component props\n * @param {React.Ref<AnchorOrButton>} ref - button 또는 anchor 요소 ref / button or anchor element ref\n * @returns {JSX.Element} Action 컴포넌트 / Action component\n */\nexport const Action = React.forwardRef<AnchorOrButton, ActionProps>(\n (\n {\n className,\n children,\n actionType = \"primary\",\n feedback = \"ripple\",\n particleEffect = false,\n rippleEffect = false,\n soundEffect = false,\n hapticFeedback = false,\n transparency = 1,\n blurIntensity = 0,\n glowIntensity = 0,\n glowColor = \"rgba(91,140,255,.8)\",\n loading = false,\n iconOnly = false,\n disabled,\n ...rest\n },\n ref\n ) => {\n const reduced = useReducedMotion();\n\n const runEffects = React.useCallback((event: React.MouseEvent) => {\n if (hapticFeedback && isBrowser && \"vibrate\" in navigator && !reduced) {\n try { navigator.vibrate?.(30); } catch { /* ignore */ }\n }\n \n if (soundEffect && !reduced && isBrowser) {\n // 간단한 클릭 사운드 효과 (선택적)\n try {\n const AudioContextClass = window.AudioContext || (window as typeof window & { webkitAudioContext?: typeof AudioContext }).webkitAudioContext;\n if (!AudioContextClass) return;\n const audioContext = new AudioContextClass();\n const oscillator = audioContext.createOscillator();\n const gainNode = audioContext.createGain();\n \n oscillator.connect(gainNode);\n gainNode.connect(audioContext.destination);\n \n oscillator.frequency.value = 800;\n oscillator.type = 'sine';\n gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);\n gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1);\n \n oscillator.start(audioContext.currentTime);\n oscillator.stop(audioContext.currentTime + 0.1);\n } catch {\n // 오디오 컨텍스트를 지원하지 않는 환경에서는 무시\n }\n }\n \n if (rippleEffect && !reduced && event.currentTarget) {\n // Ripple 효과: 클릭 위치에 원형 애니메이션 생성\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const size = Math.max(rect.width, rect.height);\n \n const ripple = document.createElement('span');\n ripple.style.cssText = `\n position: absolute;\n border-radius: 50%;\n background: rgba(255, 255, 255, 0.6);\n width: ${size}px;\n height: ${size}px;\n left: ${x - size / 2}px;\n top: ${y - size / 2}px;\n pointer-events: none;\n animation: ripple-animation 0.6s ease-out;\n `;\n \n // CSS 애니메이션 정의 (한 번만)\n if (!document.getElementById('ripple-animation-style')) {\n const style = document.createElement('style');\n style.id = 'ripple-animation-style';\n style.textContent = `\n @keyframes ripple-animation {\n to {\n transform: scale(4);\n opacity: 0;\n }\n }\n `;\n document.head.appendChild(style);\n }\n \n button.style.position = 'relative';\n button.style.overflow = 'hidden';\n button.appendChild(ripple);\n \n setTimeout(() => {\n ripple.remove();\n }, 600);\n }\n \n if (particleEffect && !reduced && event.currentTarget) {\n // 간단한 파티클 효과: 클릭 위치에서 작은 원들이 퍼져나감\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n \n for (let i = 0; i < 5; i++) {\n const particle = document.createElement('span');\n const angle = (Math.PI * 2 * i) / 5;\n const velocity = 30 + Math.random() * 20;\n const vx = Math.cos(angle) * velocity;\n const vy = Math.sin(angle) * velocity;\n \n particle.style.cssText = `\n position: absolute;\n width: 4px;\n height: 4px;\n background: ${glowColor || 'rgba(91,140,255,0.8)'};\n border-radius: 50%;\n left: ${x}px;\n top: ${y}px;\n pointer-events: none;\n animation: particle-animation-${i} 0.5s ease-out forwards;\n `;\n \n // CSS 애니메이션 정의\n if (!document.getElementById(`particle-animation-${i}`)) {\n const style = document.createElement('style');\n style.id = `particle-animation-${i}`;\n style.textContent = `\n @keyframes particle-animation-${i} {\n to {\n transform: translate(${vx}px, ${vy}px) scale(0);\n opacity: 0;\n }\n }\n `;\n document.head.appendChild(style);\n }\n \n button.style.position = 'relative';\n button.appendChild(particle);\n \n setTimeout(() => {\n particle.remove();\n }, 500);\n }\n }\n }, [hapticFeedback, soundEffect, rippleEffect, particleEffect, reduced, glowColor]);\n\n const styleVars = React.useMemo<React.CSSProperties>(() => ({\n \"--action-opacity\": String(transparency),\n \"--action-blur\": `${blurIntensity}px`,\n \"--action-glow-size\": `${glowIntensity}px`,\n \"--action-glow-color\": glowColor,\n }) as React.CSSProperties, [transparency, blurIntensity, glowIntensity, glowColor]);\n\n const cls = React.useMemo(\n () =>\n merge(\n \"hua-action relative inline-flex items-center rounded-xl px-4 py-2 font-medium\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary/60\",\n loading && \"cursor-wait opacity-80\",\n iconOnly && \"justify-center\",\n className\n ),\n [className, loading, iconOnly]\n );\n\n /** 분기 1) href가 있으면 앵커 브랜치 */\n if (\"href\" in rest && rest.href) {\n const { onClick, href, ...anchorRest } = rest as Extract<ButtonProps, { href: string }>;\n\n const handleClick: React.MouseEventHandler<AnchorEl> = (e) => {\n if (disabled || loading) { e.preventDefault(); e.stopPropagation(); return; }\n runEffects(e);\n onClick?.(e);\n };\n\n return (\n <Button\n ref={ref as React.Ref<AnchorEl>}\n href={href}\n className={cls}\n style={styleVars}\n onClick={handleClick}\n aria-busy={loading || undefined}\n aria-label={iconOnly ? (anchorRest[\"aria-label\"] as string) : undefined}\n data-action={actionType}\n data-feedback={feedback}\n data-reduced-motion={reduced ? \"true\" : \"false\"}\n disabled={disabled}\n {...anchorRest}\n >\n {children}\n </Button>\n );\n }\n\n /** 분기 2) 기본 버튼 브랜치 */\n const { onClick, ...btnRest } = rest as Extract<ButtonProps, { href?: undefined }>;\n\n const handleClick: React.MouseEventHandler<ButtonEl> = (e) => {\n if (disabled || loading) return;\n runEffects(e);\n onClick?.(e);\n };\n\n return (\n <Button\n ref={ref as React.Ref<ButtonEl>}\n className={cls}\n style={styleVars}\n onClick={handleClick}\n disabled={disabled}\n aria-busy={loading || undefined}\n aria-label={iconOnly ? (btnRest[\"aria-label\"] as string) : undefined}\n data-action={actionType}\n data-feedback={feedback}\n data-reduced-motion={reduced ? \"true\" : \"false\"}\n {...btnRest}\n >\n {children}\n </Button>\n );\n }\n);\n\nAction.displayName = \"Action\";\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Link 컴포넌트의 props / Link component props\n * @typedef {Object} LinkProps\n * @property {string} href - 링크 URL / Link URL\n * @property {React.ReactNode} children - 링크 텍스트 또는 내용 / Link text or content\n * @property {\"default\" | \"primary\" | \"secondary\" | \"ghost\" | \"underline\"} [variant=\"default\"] - Link 스타일 변형 / Link style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Link 크기 / Link size\n * @property {boolean} [external=false] - 외부 링크 여부 (target=\"_blank\" 자동 설정) / External link (auto sets target=\"_blank\")\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {() => void} [onClick] - 클릭 이벤트 핸들러 / Click event handler\n */\nexport interface LinkProps {\n href: string\n children: React.ReactNode\n variant?: \"default\" | \"primary\" | \"secondary\" | \"ghost\" | \"underline\"\n size?: \"sm\" | \"md\" | \"lg\"\n external?: boolean\n className?: string\n onClick?: () => void\n}\n\n/**\n * Link 컴포넌트 / Link component\n * \n * 링크를 표시하는 컴포넌트입니다.\n * 외부 링크의 경우 자동으로 `target=\"_blank\"`와 `rel=\"noopener noreferrer\"`를 설정합니다.\n * \n * Link component for displaying links.\n * Automatically sets `target=\"_blank\"` and `rel=\"noopener noreferrer\"` for external links.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Link href=\"/about\">소개</Link>\n * \n * @example\n * // 외부 링크 / External link\n * <Link href=\"https://example.com\" external>\n * 외부 사이트\n * </Link>\n * \n * @example\n * // Primary 스타일 / Primary style\n * <Link href=\"/contact\" variant=\"primary\" size=\"lg\">\n * 문의하기\n * </Link>\n * \n * @param {LinkProps} props - Link 컴포넌트의 props / Link component props\n * @returns {JSX.Element} Link 컴포넌트 / Link component\n */\nexport function Link({ \n href,\n children,\n className,\n variant = \"default\",\n size = \"md\",\n external = false,\n onClick\n}: LinkProps) {\n const variantClasses = {\n default: \"text-gray-900 dark:text-white hover:text-gray-700 dark:hover:text-gray-300\",\n primary: \"text-indigo-600 dark:text-indigo-400 hover:text-indigo-700 dark:hover:text-indigo-300\",\n secondary: \"text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200\",\n ghost: \"text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:bg-gray-800\",\n underline: \"text-indigo-600 dark:text-indigo-400 hover:text-indigo-700 dark:hover:text-indigo-300 underline hover:no-underline\"\n }\n\n const sizeClasses = {\n sm: \"text-sm\",\n md: \"text-base\",\n lg: \"text-lg\"\n }\n\n return (\n <a\n href={href}\n className={merge(\n \"transition-colors duration-200\",\n variantClasses[variant],\n sizeClasses[size],\n className\n )}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n onClick={onClick}\n >\n {children}\n </a>\n )\n} ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Grid 컴포넌트의 props\n * @typedef {Object} GridProps\n * @property {1|2|3|4|5|6|7|8|9|10|11|12} [cols=1] - 그리드 열 개수\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gap=\"md\"] - 그리드 아이템 간 간격\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gapX] - 가로 간격 (gap보다 우선)\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [gapY] - 세로 간격\n * @property {boolean} [responsive=true] - 반응형 그리드 활성화 (모바일: 1열, 태블릿: 2열, 데스크톱: 지정 열)\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n gap?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n gapX?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n gapY?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n responsive?: boolean\n}\n\n/**\n * Grid 컴포넌트\n * \n * CSS Grid를 사용한 그리드 레이아웃 컴포넌트입니다.\n * 반응형 그리드를 지원하여 모바일부터 데스크톱까지 최적화된 레이아웃을 제공합니다.\n * \n * @component\n * @example\n * // 기본 3열 그리드\n * <Grid cols={3} gap=\"md\">\n * <div>아이템 1</div>\n * <div>아이템 2</div>\n * <div>아이템 3</div>\n * </Grid>\n * \n * @example\n * // 가로/세로 간격 분리\n * <Grid cols={4} gapX=\"lg\" gapY=\"sm\">\n * {items.map(item => <div key={item.id}>{item.content}</div>)}\n * </Grid>\n * \n * @example\n * // 반응형 비활성화 (고정 그리드)\n * <Grid cols={6} responsive={false} gap=\"lg\">\n * <div>고정 6열</div>\n * </Grid>\n * \n * @param {GridProps} props - Grid 컴포넌트의 props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref\n * @returns {JSX.Element} Grid 컴포넌트\n */\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ \n className, \n cols = 1,\n gap = \"md\",\n gapX,\n gapY,\n responsive = true,\n ...props \n }, ref) => {\n const colsClasses = {\n 1: \"grid-cols-1\",\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4\",\n 5: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-5\",\n 6: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-6\",\n 7: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-7\",\n 8: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-8\",\n 9: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-9\",\n 10: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-10\",\n 11: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-11\",\n 12: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-12\"\n }\n\n const gapClasses = {\n none: \"gap-0\",\n sm: \"gap-4\", // 16px\n md: \"gap-6\", // 24px\n lg: \"gap-8\", // 32px\n xl: \"gap-12\" // 48px\n }\n\n const gapXClasses = {\n none: \"gap-x-0\",\n sm: \"gap-x-4\", // 16px\n md: \"gap-x-6\", // 24px\n lg: \"gap-x-8\", // 32px\n xl: \"gap-x-12\" // 48px\n }\n\n const gapYClasses = {\n none: \"gap-y-0\",\n sm: \"gap-y-4\", // 16px\n md: \"gap-y-6\", // 24px\n lg: \"gap-y-8\", // 32px\n xl: \"gap-y-12\" // 48px\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n \"grid\",\n responsive ? colsClasses[cols] : `grid-cols-${cols}`,\n gapX ? gapXClasses[gapX] : gapClasses[gap],\n gapY && gapYClasses[gapY],\n className\n )}\n {...props}\n />\n )\n }\n)\nGrid.displayName = \"Grid\"\n\nexport { Grid } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Stack 컴포넌트의 props\n * @typedef {Object} StackProps\n * @property {\"vertical\" | \"horizontal\"} [direction=\"vertical\"] - 스택 방향\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [spacing=\"md\"] - 아이템 간 간격\n * @property {\"start\" | \"center\" | \"end\" | \"stretch\"} [align=\"start\"] - 교차축 정렬\n * @property {\"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\"} [justify=\"start\"] - 주축 정렬\n * @property {boolean} [wrap=false] - 아이템 줄바꿈 허용\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"vertical\" | \"horizontal\"\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\" | \"evenly\"\n wrap?: boolean\n}\n\n/**\n * Stack 컴포넌트\n * \n * Flexbox를 사용한 스택 레이아웃 컴포넌트입니다.\n * 수직 또는 수평 방향으로 아이템을 배치하고 정렬할 수 있습니다.\n * \n * @component\n * @example\n * // 기본 수직 스택\n * <Stack spacing=\"md\">\n * <div>아이템 1</div>\n * <div>아이템 2</div>\n * </Stack>\n * \n * @example\n * // 수평 스택, 중앙 정렬\n * <Stack direction=\"horizontal\" spacing=\"lg\" align=\"center\" justify=\"between\">\n * <Button>왼쪽</Button>\n * <Button>오른쪽</Button>\n * </Stack>\n * \n * @example\n * // 줄바꿈 허용\n * <Stack direction=\"horizontal\" wrap spacing=\"sm\">\n * {tags.map(tag => <Badge key={tag}>{tag}</Badge>)}\n * </Stack>\n * \n * @param {StackProps} props - Stack 컴포넌트의 props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref\n * @returns {JSX.Element} Stack 컴포넌트\n */\nconst Stack = React.forwardRef<HTMLDivElement, StackProps>(\n ({ \n className, \n direction = \"vertical\",\n spacing = \"md\",\n align = \"start\",\n justify = \"start\",\n wrap = false,\n ...props \n }, ref) => {\n const directionClasses = {\n vertical: \"flex flex-col\",\n horizontal: \"flex flex-row\"\n }\n\n const spacingClasses = {\n none: \"\",\n sm: direction === \"vertical\" ? \"space-y-4\" : \"space-x-4\", // 16px\n md: direction === \"vertical\" ? \"space-y-6\" : \"space-x-6\", // 24px\n lg: direction === \"vertical\" ? \"space-y-8\" : \"space-x-8\", // 32px\n xl: direction === \"vertical\" ? \"space-y-12\" : \"space-x-12\" // 48px\n }\n\n const alignClasses = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n stretch: \"items-stretch\"\n }\n\n const justifyClasses = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n around: \"justify-around\",\n evenly: \"justify-evenly\"\n }\n\n return (\n <div\n ref={ref}\n className={merge(\n directionClasses[direction],\n spacingClasses[spacing],\n alignClasses[align],\n justifyClasses[justify],\n wrap && \"flex-wrap\",\n className\n )}\n {...props}\n />\n )\n }\n)\nStack.displayName = \"Stack\"\n\nexport { Stack } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Divider 컴포넌트의 props / Divider component props\n * @typedef {Object} DividerProps\n * @property {\"horizontal\" | \"vertical\"} [orientation=\"horizontal\"] - Divider 방향 / Divider orientation\n * @property {\"solid\" | \"dashed\" | \"dotted\" | \"gradient\" | \"glass\"} [variant=\"solid\"] - Divider 스타일 변형 / Divider style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Divider 크기 / Divider size\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"} [spacing=\"md\"] - Divider 주변 여백 / Divider spacing\n * @property {\"default\" | \"muted\" | \"primary\" | \"secondary\"} [color=\"default\"] - Divider 색상 / Divider color\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\"\n variant?: \"solid\" | \"dashed\" | \"dotted\" | \"gradient\" | \"glass\"\n size?: \"sm\" | \"md\" | \"lg\"\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\"\n color?: \"default\" | \"muted\" | \"primary\" | \"secondary\"\n}\n\n/**\n * Divider 컴포넌트 / Divider component\n * \n * 콘텐츠를 구분하는 구분선 컴포넌트입니다.\n * 가로/세로 방향, 다양한 스타일과 색상을 지원합니다.\n * \n * Divider component for separating content.\n * Supports horizontal/vertical orientation, various styles and colors.\n * \n * @component\n * @example\n * // 기본 사용 (가로) / Basic usage (horizontal)\n * <Divider />\n * \n * @example\n * // 세로 구분선 / Vertical divider\n * <div className=\"flex\">\n * <div>왼쪽</div>\n * <Divider orientation=\"vertical\" />\n * <div>오른쪽</div>\n * </div>\n * \n * @example\n * // 다양한 스타일 / Various styles\n * <Divider variant=\"dashed\" spacing=\"lg\" />\n * <Divider variant=\"gradient\" color=\"primary\" />\n * \n * @param {DividerProps} props - Divider 컴포넌트의 props / Divider component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Divider 컴포넌트 / Divider component\n */\nconst DividerComponent = React.forwardRef<HTMLDivElement, DividerProps>(\n ({ \n className, \n orientation = \"horizontal\",\n variant = \"solid\",\n size = \"md\",\n spacing = \"md\",\n color = \"default\",\n ...props \n }, ref) => {\n const orientationClasses = React.useMemo(() => ({\n horizontal: \"w-full\",\n vertical: \"h-full\"\n }), [])\n\n // dashed/dotted는 border 스타일 사용, solid/gradient/glass는 height/width 사용\n const sizeClasses = React.useMemo(() => {\n const useBorder = variant === \"dashed\" || variant === \"dotted\"\n if (useBorder) {\n // border 스타일일 때는 border-width 사용\n return {\n sm: orientation === \"horizontal\" ? \"border-t\" : \"border-l\",\n md: orientation === \"horizontal\" ? \"border-t-2\" : \"border-l-2\",\n lg: orientation === \"horizontal\" ? \"border-t-4\" : \"border-l-4\"\n }\n }\n // 배경색 스타일일 때는 height/width 사용\n return {\n sm: orientation === \"horizontal\" ? \"h-px\" : \"w-px\",\n md: orientation === \"horizontal\" ? \"h-0.5\" : \"w-0.5\",\n lg: orientation === \"horizontal\" ? \"h-1\" : \"w-1\"\n }\n }, [orientation, variant])\n\n const variantClasses = React.useMemo(() => ({\n solid: \"\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n gradient: orientation === \"horizontal\"\n ? \"bg-gradient-to-r from-transparent via-gray-300 to-transparent dark:via-gray-600\"\n : \"bg-gradient-to-b from-transparent via-gray-300 to-transparent dark:via-gray-600\",\n glass: orientation === \"horizontal\"\n ? \"bg-gradient-to-r from-transparent via-white/30 to-transparent\"\n : \"bg-gradient-to-b from-transparent via-white/30 to-transparent\"\n }), [orientation])\n\n // dashed/dotted는 border-color 사용, solid는 bg-color 사용\n const colorClasses = React.useMemo(() => {\n const useBorder = variant === \"dashed\" || variant === \"dotted\"\n if (useBorder) {\n return {\n default: \"border-gray-200 dark:border-gray-700\",\n muted: \"border-gray-100 dark:border-gray-800\",\n primary: \"border-indigo-200 dark:border-indigo-700\",\n secondary: \"border-gray-300 dark:border-gray-600\"\n }\n }\n return {\n default: \"bg-gray-200 dark:bg-gray-700\",\n muted: \"bg-gray-100 dark:bg-gray-800\",\n primary: \"bg-indigo-200 dark:bg-indigo-700\",\n secondary: \"bg-gray-300 dark:bg-gray-600\"\n }\n }, [variant])\n\n const spacingClasses = React.useMemo(() => ({\n none: \"\",\n sm: orientation === \"horizontal\" ? \"my-4\" : \"mx-4\", // 16px\n md: orientation === \"horizontal\" ? \"my-6\" : \"mx-6\", // 24px\n lg: orientation === \"horizontal\" ? \"my-8\" : \"mx-8\", // 32px\n xl: orientation === \"horizontal\" ? \"my-12\" : \"mx-12\" // 48px\n }), [orientation])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"flex-shrink-0\",\n orientationClasses[orientation],\n sizeClasses[size],\n variant === \"gradient\" ? variantClasses[variant] : colorClasses[color],\n variant !== \"gradient\" && variantClasses[variant],\n spacingClasses[spacing],\n className\n )}\n {...props}\n />\n )\n }\n)\n\nDividerComponent.displayName = \"Divider\"\n\nconst Divider = React.memo(DividerComponent)\n\nexport { Divider } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Card, CardProps } from \"./Card\"\n\n/**\n * Panel 컴포넌트의 props / Panel component props\n * @typedef {Object} PanelProps\n * @property {\"default\" | \"solid\" | \"glass\" | \"outline\" | \"elevated\" | \"neon\" | \"holographic\" | \"cyberpunk\" | \"minimal\" | \"luxury\"} [style=\"default\"] - Panel 스타일 / Panel style\n * @property {\"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\"} [effect=\"none\"] - Panel 효과 / Panel effect\n * @property {number} [transparency=1] - 투명도 (0-1) / Transparency (0-1)\n * @property {number} [blurIntensity=0] - backdrop-blur 강도 (px) / Backdrop blur intensity (px)\n * @property {number} [borderOpacity=1] - 보더 투명도 (0-1) / Border opacity (0-1)\n * @property {number} [shadowOpacity=1] - 그림자 투명도 (0-1) / Shadow opacity (0-1)\n * @property {number} [glowIntensity=0] - 글로우 강도 (px) / Glow intensity (px)\n * @property {string} [glowColor=\"blue\"] - 글로우 색상 / Glow color\n * @property {boolean} [particleEffect=false] - 파티클 효과 활성화 / Enable particle effect\n * @property {boolean} [hoverEffect=false] - 호버 효과 활성화 / Enable hover effect\n * @property {boolean} [animationEffect=false] - 애니메이션 효과 활성화 / Enable animation effect\n * @property {\"none\" | \"small\" | \"sm\" | \"medium\" | \"md\" | \"large\" | \"lg\" | \"xl\" | \"custom\"} [padding=\"md\"] - 패딩 크기 / Padding size\n * @property {string} [customPadding] - 커스텀 패딩 / Custom padding\n * @property {\"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\"} [rounded=\"lg\"] - 둥근 모서리 크기 / Rounded corner size\n * @property {string} [customRounded] - 커스텀 둥근 모서리 / Custom rounded corners\n * @property {\"solid\" | \"gradient\" | \"pattern\" | \"image\" | \"video\"} [background=\"solid\"] - 배경 타입 / Background type\n * @property {string[]} [gradientColors] - 그라디언트 색상 배열 / Gradient color array\n * @property {\"dots\" | \"lines\" | \"grid\" | \"waves\" | \"custom\"} [patternType=\"dots\"] - 패턴 타입 / Pattern type\n * @property {string} [backgroundImage] - 배경 이미지 URL / Background image URL\n * @property {string} [backgroundVideo] - 배경 비디오 URL / Background video URL\n * @property {boolean} [interactive=false] - 인터랙티브 모드 활성화 / Enable interactive mode\n * @property {number} [hoverScale=1.05] - 호버 시 스케일 / Scale on hover\n * @property {number} [hoverRotate=0] - 호버 시 회전 각도 / Rotation angle on hover\n * @property {boolean} [hoverGlow=false] - 호버 시 글로우 효과 / Glow effect on hover\n * @extends {Omit<CardProps, 'variant' | 'style'>}\n */\nexport interface PanelProps extends Omit<CardProps, 'variant' | 'style' | 'padding'> {\n // 🆕 Panel 전용 고급 속성들\n style?: \"default\" | \"solid\" | \"glass\" | \"outline\" | \"elevated\" | \"neon\" | \"holographic\" | \"cyberpunk\" | \"minimal\" | \"luxury\"\n effect?: \"none\" | \"glow\" | \"shadow\" | \"gradient\" | \"animated\"\n \n // 고급 스타일링\n transparency?: number // 0-1 사이 투명도\n blurIntensity?: number // backdrop-blur 강도\n borderOpacity?: number // 보더 투명도\n shadowOpacity?: number // 그림자 투명도\n glowIntensity?: number // 글로우 강도\n glowColor?: string // 글로우 색상\n \n // 고급 효과\n particleEffect?: boolean\n hoverEffect?: boolean\n animationEffect?: boolean\n \n // 레이아웃 옵션\n padding?: \"none\" | \"small\" | \"sm\" | \"medium\" | \"md\" | \"large\" | \"lg\" | \"xl\" | \"custom\"\n customPadding?: string\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\" | \"custom\"\n customRounded?: string\n \n // 배경 옵션\n background?: \"solid\" | \"gradient\" | \"pattern\" | \"image\" | \"video\"\n gradientColors?: string[]\n patternType?: \"dots\" | \"lines\" | \"grid\" | \"waves\" | \"custom\"\n backgroundImage?: string\n backgroundVideo?: string\n \n // 인터랙션\n interactive?: boolean\n hoverScale?: number\n hoverRotate?: number\n hoverGlow?: boolean\n}\n\n/**\n * Panel 컴포넌트 / Panel component\n * \n * 고급 스타일링 옵션을 가진 패널 컴포넌트입니다.\n * 다양한 스타일, 효과, 배경 옵션을 지원합니다.\n * Card 컴포넌트를 기반으로 하며, 추가적인 고급 기능을 제공합니다.\n * \n * Panel component with advanced styling options.\n * Supports various styles, effects, and background options.\n * Based on Card component with additional advanced features.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Panel>\n * <div>내용</div>\n * </Panel>\n * \n * @example\n * // Glass 스타일 / Glass style\n * <Panel style=\"glass\" effect=\"glow\">\n * <div>Glass 패널</div>\n * </Panel>\n * \n * @example\n * // 인터랙티브 패널 / Interactive panel\n * <Panel \n * style=\"neon\"\n * interactive\n * hoverScale={1.1}\n * hoverGlow\n * >\n * <div>호버 효과</div>\n * </Panel>\n * \n * @param {PanelProps} props - Panel 컴포넌트의 props / Panel component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Panel 컴포넌트 / Panel component\n */\nconst Panel = React.forwardRef<HTMLDivElement, PanelProps>(\n ({ \n className,\n style = \"default\",\n effect = \"none\",\n transparency = 1,\n blurIntensity = 0,\n borderOpacity = 1,\n shadowOpacity = 1,\n glowIntensity = 0,\n glowColor = \"blue\",\n particleEffect = false,\n hoverEffect: _hoverEffect = false,\n animationEffect = false,\n padding = \"md\",\n customPadding,\n rounded = \"lg\",\n customRounded,\n background = \"solid\",\n gradientColors = [\"#3B82F6\", \"#8B5CF6\"],\n patternType = \"dots\",\n backgroundImage,\n backgroundVideo,\n interactive = false,\n hoverScale = 1.05,\n hoverRotate = 0,\n hoverGlow = false,\n children,\n ...cardProps \n }, ref): React.ReactElement => {\n \n // 스타일별 클래스 생성 - useMemo로 메모이제이션\n const styleClasses = React.useMemo(() => {\n const baseClasses = \"transition-all duration-300\"\n \n switch (style) {\n case \"solid\":\n return merge(baseClasses, \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700\")\n case \"glass\":\n return merge(baseClasses, \"bg-white/60 dark:bg-white/10 backdrop-blur-md border border-gray-200/50 dark:border-white/20\")\n case \"outline\":\n return merge(baseClasses, \"bg-transparent border border-gray-300 dark:border-gray-600\")\n case \"elevated\":\n return merge(baseClasses, \"bg-white dark:bg-gray-800 shadow-lg border border-gray-100 dark:border-gray-700\")\n case \"neon\":\n return merge(baseClasses, \"bg-gray-50 dark:bg-gray-900 border border-cyan-300/30 dark:border-cyan-400/30 shadow-lg shadow-cyan-200/20 dark:shadow-cyan-400/20\")\n case \"holographic\":\n return merge(baseClasses, \"bg-gradient-to-br from-white/20 via-purple-500/20 to-cyan-500/20 backdrop-blur-sm border border-white/30\")\n case \"cyberpunk\":\n return merge(baseClasses, \"bg-white dark:bg-gray-900 border-2 border-pink-400 dark:border-pink-500 shadow-lg shadow-pink-300/30 dark:shadow-pink-500/30\")\n case \"minimal\":\n return merge(baseClasses, \"bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 shadow-sm\")\n case \"luxury\":\n return merge(baseClasses, \"bg-gradient-to-br from-amber-50 to-yellow-100 dark:from-amber-950 dark:to-yellow-950 border border-amber-200 dark:border-amber-800 shadow-xl\")\n default:\n return merge(baseClasses, \"bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700\")\n }\n }, [style])\n \n // 효과별 클래스 생성 - useMemo로 메모이제이션\n const effectClasses = React.useMemo(() => {\n switch (effect) {\n case \"glow\":\n return \"shadow-2xl shadow-indigo-500/20 dark:shadow-cyan-400/20\"\n case \"shadow\":\n return \"shadow-xl\"\n case \"gradient\":\n return \"bg-gradient-to-r from-indigo-500/10 via-purple-500/10 to-cyan-500/10\"\n case \"animated\":\n return \"animate-pulse\"\n default:\n return \"\"\n }\n }, [effect])\n \n // 패딩 클래스 생성 - useMemo로 메모이제이션\n const paddingClasses = React.useMemo(() => {\n if (customPadding) return customPadding\n \n switch (padding) {\n case \"none\": return \"p-0\"\n case \"small\":\n case \"sm\": return \"p-3\"\n case \"medium\":\n case \"md\": return \"p-6\"\n case \"large\":\n case \"lg\": return \"p-8\"\n case \"xl\": return \"p-12\"\n default: return \"p-6\"\n }\n }, [padding, customPadding])\n \n // 둥근 모서리 클래스 생성 - useMemo로 메모이제이션\n const roundedClasses = React.useMemo(() => {\n if (customRounded) return customRounded\n \n switch (rounded) {\n case \"none\": return \"rounded-none\"\n case \"sm\": return \"rounded-sm\"\n case \"md\": return \"rounded-md\"\n case \"lg\": return \"rounded-lg\"\n case \"xl\": return \"rounded-xl\"\n case \"full\": return \"rounded-full\"\n default: return \"rounded-lg\"\n }\n }, [rounded, customRounded])\n \n // 패턴 배경 생성 - useMemo로 메모이제이션\n const patternBackground = React.useMemo(() => {\n switch (patternType) {\n case \"dots\":\n return \"radial-gradient(circle, #000 1px, transparent 1px)\"\n case \"lines\":\n return \"linear-gradient(45deg, #000 1px, transparent 1px)\"\n case \"grid\":\n return \"linear-gradient(#000 1px, transparent 1px), linear-gradient(90deg, #000 1px, transparent 1px)\"\n case \"waves\":\n return \"repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(0,0,0,0.1) 10px, rgba(0,0,0,0.1) 20px)\"\n default:\n return \"\"\n }\n }, [patternType])\n \n // 배경 스타일 생성 - useMemo로 메모이제이션\n const backgroundStyles = React.useMemo((): React.CSSProperties => {\n const styles: React.CSSProperties = {\n opacity: transparency,\n }\n \n if (blurIntensity > 0) {\n styles.backdropFilter = `blur(${blurIntensity}px)`\n }\n \n if (borderOpacity < 1) {\n styles.borderColor = `rgba(0, 0, 0, ${borderOpacity})`\n }\n \n if (shadowOpacity < 1) {\n styles.boxShadow = `0 4px 6px -1px rgba(0, 0, 0, ${shadowOpacity * 0.1})`\n }\n \n if (glowIntensity > 0) {\n styles.boxShadow = `${styles.boxShadow || ''}, 0 0 ${glowIntensity * 10}px ${glowColor}`\n }\n \n switch (background) {\n case \"gradient\":\n styles.background = `linear-gradient(135deg, ${gradientColors.join(', ')})`\n break\n case \"pattern\":\n styles.backgroundImage = patternBackground\n break\n case \"image\":\n if (backgroundImage) {\n styles.backgroundImage = `url(${backgroundImage})`\n styles.backgroundSize = 'cover'\n styles.backgroundPosition = 'center'\n }\n break\n case \"video\":\n // 비디오 배경은 별도 요소로 처리\n break\n }\n \n return styles\n }, [transparency, blurIntensity, borderOpacity, shadowOpacity, glowIntensity, glowColor, background, gradientColors, patternBackground, backgroundImage])\n \n // 호버 효과 클래스 생성 - useMemo로 메모이제이션\n const hoverClasses = React.useMemo(() => {\n if (!interactive) return \"\"\n \n const classes = []\n \n if (hoverScale !== 1) {\n classes.push(`hover:scale-${hoverScale}`)\n }\n \n if (hoverRotate !== 0) {\n classes.push(`hover:rotate-${hoverRotate}`)\n }\n \n if (hoverGlow) {\n classes.push(\"hover:shadow-2xl hover:shadow-cyan-500/30\")\n }\n \n return classes.join(\" \")\n }, [interactive, hoverScale, hoverRotate, hoverGlow])\n \n // Panel 전용 클래스들 - useMemo로 메모이제이션\n const panelClasses = React.useMemo(() => merge(\n \"panel-component\",\n `panel-${style}`,\n `panel-effect-${effect}`,\n styleClasses,\n effectClasses,\n paddingClasses,\n roundedClasses,\n hoverClasses,\n className\n ), [style, effect, styleClasses, effectClasses, paddingClasses, roundedClasses, hoverClasses, className])\n \n return (\n <div className=\"relative\">\n {/* 비디오 배경 */}\n {background === \"video\" && backgroundVideo && (\n <video\n className=\"absolute inset-0 w-full h-full object-cover rounded-lg\"\n autoPlay\n muted\n loop\n playsInline\n >\n <source src={backgroundVideo} type=\"video/mp4\" />\n </video>\n )}\n \n {/* 파티클 효과 */}\n {particleEffect && (\n <div className=\"absolute inset-0 pointer-events-none\">\n {/* 파티클 효과 렌더링 */}\n </div>\n )}\n \n {/* 메인 Panel */}\n <Card\n ref={ref}\n className={panelClasses}\n style={backgroundStyles}\n {...cardProps}\n >\n {children}\n </Card>\n \n {/* 애니메이션 효과 */}\n {animationEffect && (\n <div className=\"absolute inset-0 pointer-events-none\">\n {/* 애니메이션 효과 렌더링 */}\n </div>\n )}\n </div>\n )\n }\n)\n\nPanel.displayName = \"Panel\"\n\nexport { Panel } ","\"use client\";\n\nimport React, { useCallback } from 'react';\nimport { Button } from './Button';\nimport { Icon } from './Icon';\nimport type { IconName } from '../lib/icons';\nimport { merge } from '../lib/utils';\n\n/**\n * ActionButton 인터페이스\n * @typedef {Object} ActionButton\n * @property {string} label - 버튼 라벨 (데스크톱)\n * @property {string} [labelMobile] - 버튼 라벨 (모바일, 없으면 label 사용)\n * @property {IconName} [icon] - 버튼 아이콘\n * @property {() => void} onClick - 클릭 핸들러\n * @property {boolean} [disabled] - 비활성화 여부\n * @property {'default' | 'outline' | 'destructive' | 'ghost'} [variant='outline'] - 버튼 스타일\n * @property {Object} [badge] - 배지 정보\n * @property {number} badge.count - 배지 숫자\n * @property {'blue' | 'red' | 'gray' | 'green'} [badge.color='gray'] - 배지 색상\n * @property {string} [className] - 추가 CSS 클래스\n */\nexport interface ActionButton {\n label: string;\n labelMobile?: string; // 모바일에서 표시할 짧은 텍스트\n icon?: IconName;\n onClick: () => void;\n disabled?: boolean;\n variant?: 'default' | 'outline' | 'destructive' | 'ghost';\n badge?: {\n count: number;\n color?: 'blue' | 'red' | 'gray' | 'green';\n };\n className?: string;\n}\n\n/**\n * ActionToolbar 컴포넌트의 props / ActionToolbar component props\n * @typedef {Object} ActionToolbarProps\n * @property {boolean} [isSelectMode=false] - 선택 모드 활성화 여부 / Enable select mode\n * @property {number} [totalCount=0] - 전체 항목 개수 / Total item count\n * @property {number} [selectedCount=0] - 선택된 항목 개수 / Selected item count\n * @property {ActionButton[]} [actions=[]] - 일반 모드 액션 버튼들 / Normal mode action buttons\n * @property {ActionButton[]} [selectModeActions=[]] - 선택 모드 액션 버튼들 / Select mode action buttons\n * @property {() => void} [onToggleSelectMode] - 선택 모드 토글 함수 / Toggle select mode function\n * @property {() => void} [onToggleSelectAll] - 전체 선택/해제 함수 / Toggle select all function\n * @property {() => void} [onCancelSelect] - 선택 모드 취소 함수 / Cancel select mode function\n * @property {boolean} [loading=false] - 로딩 상태 / Loading state\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\nexport interface ActionToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 선택 모드 활성화 여부 */\n isSelectMode?: boolean;\n /** 전체 항목 개수 */\n totalCount?: number;\n /** 선택된 항목 개수 */\n selectedCount?: number;\n /** 일반 모드 액션 버튼들 */\n actions?: ActionButton[];\n /** 선택 모드 액션 버튼들 */\n selectModeActions?: ActionButton[];\n /** 선택 모드 토글 함수 */\n onToggleSelectMode?: () => void;\n /** 전체 선택/해제 함수 */\n onToggleSelectAll?: () => void;\n /** 선택 모드 취소 함수 */\n onCancelSelect?: () => void;\n /** 로딩 상태 */\n loading?: boolean;\n}\n\n/**\n * ActionToolbar 컴포넌트 / ActionToolbar component\n * \n * 범용 액션 툴바 컴포넌트입니다.\n * 알림, 로그 관리, 대시보드 등에서 재사용 가능한 액션 버튼 영역을 제공합니다.\n * 선택 모드, 일괄 액션, 반응형 레이아웃을 지원합니다.\n * \n * Universal action toolbar component.\n * Provides reusable action button area for notifications, log management, dashboard, etc.\n * Supports select mode, batch actions, and responsive layout.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * ```tsx\n * <ActionToolbar\n * isSelectMode={isSelectMode}\n * totalCount={notifications.length}\n * selectedCount={selectedIds.size}\n * actions={[\n * {\n * label: \"모두 읽음\",\n * labelMobile: \"읽음\",\n * icon: \"check\",\n * onClick: handleMarkAllAsRead,\n * disabled: unreadCount === 0,\n * badge: { count: unreadCount, color: 'blue' }\n * }\n * ]}\n * selectModeActions={[\n * {\n * label: \"선택 삭제\",\n * labelMobile: \"삭제\",\n * icon: \"delete\",\n * onClick: handleDeleteSelected,\n * disabled: selectedIds.size === 0,\n * badge: { count: selectedIds.size, color: 'red' }\n * }\n * ]}\n * onToggleSelectMode={() => setIsSelectMode(true)}\n * onToggleSelectAll={handleToggleSelectAll}\n * onCancelSelect={() => {\n * setIsSelectMode(false);\n * setSelectedIds(new Set());\n * }}\n * />\n * ```\n * \n * @param {ActionToolbarProps} props - ActionToolbar 컴포넌트의 props / ActionToolbar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ActionToolbar 컴포넌트 / ActionToolbar component\n */\nconst ActionToolbarComponent = React.forwardRef<HTMLDivElement, ActionToolbarProps>(\n (\n {\n isSelectMode = false,\n totalCount = 0,\n selectedCount = 0,\n actions = [],\n selectModeActions = [],\n onToggleSelectMode,\n onToggleSelectAll,\n onCancelSelect,\n loading = false,\n className,\n ...props\n },\n ref\n ) => {\n const getBadgeColor = useCallback((color?: string) => {\n switch (color) {\n case 'red':\n return 'bg-red-100 dark:bg-red-900 text-red-700 dark:text-red-300';\n case 'blue':\n return 'bg-indigo-100 dark:bg-indigo-900 text-indigo-700 dark:text-indigo-300';\n case 'green':\n return 'bg-green-100 dark:bg-green-900 text-green-700 dark:text-green-300';\n case 'gray':\n default:\n return 'bg-gray-100 dark:bg-gray-700 text-gray-700 dark:text-gray-300';\n }\n }, []);\n\n const renderButton = useCallback((action: ActionButton, key: string) => (\n <Button\n key={key}\n variant={action.variant || 'outline'}\n size=\"sm\"\n onClick={action.onClick}\n disabled={action.disabled || loading}\n className={merge('flex-1 sm:flex-initial', action.className)}\n >\n {action.icon && <Icon name={action.icon} className=\"h-4 w-4 sm:h-3.5 sm:w-3.5 mr-1 sm:mr-1.5\" />}\n <span className=\"hidden sm:inline\">{action.label}</span>\n <span className=\"sm:hidden\">{action.labelMobile || action.label}</span>\n {action.badge && action.badge.count > 0 && (\n <span className={merge('ml-1.5', getBadgeColor(action.badge.color), 'px-1.5 py-0.5 rounded-full text-xs font-semibold')}>\n {action.badge.count}\n </span>\n )}\n </Button>\n ), [getBadgeColor, loading]);\n\n return (\n <div\n ref={ref}\n className={merge(\n 'mb-4 bg-white dark:bg-gray-800 rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-3 sm:p-4',\n className\n )}\n {...props}\n >\n {isSelectMode ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* 전체 선택/해제 버튼 */}\n {onToggleSelectAll && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggleSelectAll}\n className=\"flex-1 sm:flex-initial min-w-[100px]\"\n >\n <Icon name={selectedCount === totalCount ? \"square\" : \"check\"} className=\"h-4 w-4 sm:h-3.5 sm:w-3.5 mr-1 sm:mr-1.5\" />\n <span className=\"hidden sm:inline\">{selectedCount === totalCount ? '전체 해제' : '전체 선택'}</span>\n <span className=\"sm:hidden\">{selectedCount === totalCount ? '해제' : '전체'}</span>\n </Button>\n )}\n \n {/* 선택 모드 액션 버튼들 */}\n {selectModeActions.map((action, index) => (\n <div key={`select-action-${index}`} className={merge('flex-1 sm:flex-initial min-w-[100px]', action.className)}>\n {renderButton(action, `select-${index}`)}\n </div>\n ))}\n \n {/* 취소 버튼 */}\n {onCancelSelect && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onCancelSelect}\n className=\"flex-1 sm:flex-initial min-w-[80px]\"\n >\n 취소\n </Button>\n )}\n </div>\n ) : (\n <div className=\"flex flex-wrap items-center gap-2\">\n {/* 선택 모드 진입 버튼 */}\n {onToggleSelectMode && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onToggleSelectMode}\n disabled={totalCount === 0}\n className=\"flex-1 sm:flex-initial min-w-[80px] sm:min-w-[auto] px-2 sm:px-3\"\n title={totalCount === 0 ? \"항목이 없습니다\" : \"여러 항목 선택\"}\n >\n <Icon name=\"check\" className=\"h-4 w-4 sm:h-3.5 sm:w-3.5\" />\n <span className=\"hidden sm:inline ml-1.5 sm:ml-2\">선택</span>\n </Button>\n )}\n \n {/* 일반 모드 액션 버튼들 */}\n {actions.map((action, index) => (\n <div key={`action-${index}`} className={merge('flex-1 sm:flex-initial min-w-[100px]', action.className)}>\n {renderButton(action, `action-${index}`)}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nActionToolbarComponent.displayName = 'ActionToolbar';\n\nexport const ActionToolbar = React.memo(ActionToolbarComponent);\n\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * Toggle 컴포넌트의 props / Toggle component props\n * @typedef {Object} ToggleProps\n * @property {\"default\" | \"outline\" | \"filled\" | \"ghost\" | \"glass\"} [variant=\"default\"] - Toggle 스타일 변형 / Toggle style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Toggle 크기 / Toggle size\n * @property {boolean} [pressed] - 제어 모드에서 눌림 상태 / Pressed state in controlled mode\n * @property {(pressed: boolean) => void} [onPressedChange] - 상태 변경 콜백 / State change callback\n * @property {string} [label] - Toggle 라벨 텍스트 / Toggle label text\n * @property {string} [description] - Toggle 설명 텍스트 / Toggle description text\n * @property {React.ReactNode} [icon] - 아이콘 / Icon\n * @property {\"left\" | \"right\"} [iconPosition=\"left\"] - 아이콘 위치 / Icon position\n * @extends {Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'>}\n */\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {\n variant?: \"default\" | \"outline\" | \"filled\" | \"ghost\" | \"glass\"\n size?: \"sm\" | \"md\" | \"lg\"\n pressed?: boolean\n onPressedChange?: (pressed: boolean) => void\n label?: string\n description?: string\n icon?: React.ReactNode\n iconPosition?: \"left\" | \"right\"\n}\n\n/**\n * Toggle 컴포넌트 / Toggle component\n * \n * 눌림 상태를 가지는 토글 버튼 컴포넌트입니다.\n * Switch와 달리 버튼 형태로 표시되며, 여러 개를 그룹으로 사용할 수 있습니다.\n * \n * Toggle button component with pressed state.\n * Unlike Switch, displayed as a button and can be used in groups.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Toggle label=\"알림\" />\n * \n * @example\n * // 제어 모드 / Controlled mode\n * const [pressed, setPressed] = useState(false)\n * <Toggle \n * pressed={pressed}\n * onPressedChange={setPressed}\n * label=\"다크 모드\"\n * icon={<Icon name=\"moon\" />}\n * />\n * \n * @example\n * // 아이콘만 / Icon only\n * <Toggle \n * icon={<Icon name=\"heart\" />}\n * variant=\"ghost\"\n * />\n * \n * @param {ToggleProps} props - Toggle 컴포넌트의 props / Toggle component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} Toggle 컴포넌트 / Toggle component\n */\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n ({ \n className, \n variant = \"default\",\n size = \"md\",\n pressed: controlledPressed,\n onPressedChange,\n label,\n description,\n icon,\n iconPosition = \"left\",\n onClick,\n ...props \n }, ref) => {\n const [internalPressed, setInternalPressed] = React.useState(false)\n const isControlled = controlledPressed !== undefined\n const pressed = isControlled ? controlledPressed : internalPressed\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!isControlled) {\n setInternalPressed(!pressed)\n }\n onPressedChange?.(!pressed)\n onClick?.(e)\n }\n\n const sizeClasses = {\n sm: \"h-7 px-3 text-sm\",\n md: \"h-9 px-4 text-base\",\n lg: \"h-11 px-5 text-lg\"\n }\n\n const variantClasses = {\n default: pressed\n ? \"bg-primary text-white hover:bg-primary/80 dark:bg-primary dark:hover:bg-primary/90\"\n : \"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700\",\n outline: pressed\n ? \"border-2 border-primary bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:border-primary dark:bg-indigo-900/20 dark:text-indigo-400 dark:hover:bg-indigo-900/30\"\n : \"border-2 border-gray-300 bg-transparent text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800\",\n filled: pressed\n ? \"bg-primary text-white hover:bg-primary/80 dark:bg-primary dark:hover:bg-primary/90\"\n : \"bg-gray-50 text-gray-700 hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600\",\n ghost: pressed\n ? \"bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:bg-indigo-900/20 dark:text-indigo-400 dark:hover:bg-indigo-900/30\"\n : \"bg-transparent text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800\",\n glass: pressed\n ? \"bg-white/20 backdrop-blur-sm border border-white/30 text-white hover:bg-white/30 dark:bg-indigo-400/20 dark:border-indigo-300/50 dark:hover:bg-indigo-400/30\"\n : \"bg-white/10 backdrop-blur-sm border border-white/20 text-white hover:bg-white/20 dark:bg-slate-800/10 dark:border-slate-600/50 dark:text-slate-200 dark:hover:bg-slate-700/20\"\n }\n\n return (\n <div className=\"flex items-start space-x-3\">\n <button\n type=\"button\"\n ref={ref}\n className={merge(\n \"inline-flex items-center justify-center gap-2 rounded-md font-medium transition-all duration-200\",\n \"focus:outline-none focus:ring-1 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n sizeClasses[size],\n variantClasses[variant],\n className\n )}\n onClick={handleClick}\n aria-pressed={pressed}\n {...props}\n >\n {icon && iconPosition === \"left\" && (\n <span className=\"flex-shrink-0\">{icon}</span>\n )}\n {label && <span>{label}</span>}\n {icon && iconPosition === \"right\" && (\n <span className=\"flex-shrink-0\">{icon}</span>\n )}\n </button>\n {description && (\n <div className=\"flex flex-col\">\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {description}\n </p>\n </div>\n )}\n </div>\n )\n }\n)\nToggle.displayName = \"Toggle\"\n\nexport { Toggle }\n\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\n\n/**\n * ScrollArea 컴포넌트의 props / ScrollArea component props\n * @typedef {Object} ScrollAreaProps\n * @property {React.ReactNode} children - 스크롤 영역 내용 / Scroll area content\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"vertical\" | \"horizontal\" | \"both\"} [orientation=\"vertical\"] - 스크롤 방향 / Scroll direction\n * @property {number} [scrollHideDelay=600] - 스크롤바 숨김 지연 시간 (ms) / Scrollbar hide delay (ms)\n * @property {\"auto\" | \"always\" | \"scroll\" | \"hover\"} [type=\"hover\"] - 스크롤바 표시 타입 / Scrollbar display type\n * @extends {React.HTMLAttributes<HTMLDivElement>}\n */\ninterface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n className?: string\n orientation?: \"vertical\" | \"horizontal\" | \"both\"\n scrollHideDelay?: number\n type?: \"auto\" | \"always\" | \"scroll\" | \"hover\"\n}\n\n/**\n * ScrollArea 컴포넌트 / ScrollArea component\n * \n * 커스텀 스크롤바를 가진 스크롤 영역 컴포넌트입니다.\n * 호버 시 스크롤바를 표시하거나 항상 표시할 수 있습니다.\n * \n * Scroll area component with custom scrollbar.\n * Can display scrollbar on hover or always.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ScrollArea className=\"h-64\">\n * <div>긴 내용...</div>\n * </ScrollArea>\n * \n * @example\n * // 가로 스크롤, 항상 표시 / Horizontal scroll, always visible\n * <ScrollArea orientation=\"horizontal\" type=\"always\">\n * <div className=\"flex space-x-4\">...</div>\n * </ScrollArea>\n * \n * @param {ScrollAreaProps} props - ScrollArea 컴포넌트의 props / ScrollArea component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ScrollArea 컴포넌트 / ScrollArea component\n */\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ \n children, \n className, \n orientation = \"vertical\",\n scrollHideDelay = 600,\n type = \"hover\",\n ...props \n }, ref) => {\n const [showScrollbar, setShowScrollbar] = React.useState(false)\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n const handleMouseEnter = () => {\n if (type === \"hover\" || type === \"always\") {\n setShowScrollbar(true)\n }\n }\n\n const handleMouseLeave = () => {\n if (type === \"hover\") {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n timeoutRef.current = setTimeout(() => {\n setShowScrollbar(false)\n }, scrollHideDelay)\n }\n }\n\n React.useEffect(() => {\n if (type === \"always\") {\n setShowScrollbar(true)\n }\n }, [type])\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [])\n\n return (\n <div\n ref={ref}\n className={merge(\n \"relative overflow-auto scrollbar-thin\",\n orientation === \"vertical\" && \"overflow-y-auto overflow-x-hidden\",\n orientation === \"horizontal\" && \"overflow-x-auto overflow-y-hidden\",\n orientation === \"both\" && \"overflow-auto\",\n showScrollbar ? \"scrollbar-visible\" : \"scrollbar-hidden\",\n className\n )}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nScrollArea.displayName = \"ScrollArea\"\n\n/**\n * ScrollBar 컴포넌트의 props / ScrollBar component props\n * @typedef {Object} ScrollBarProps\n * @property {\"vertical\" | \"horizontal\"} [orientation=\"vertical\"] - 스크롤바 방향 / Scrollbar direction\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n */\ninterface ScrollBarProps {\n orientation?: \"vertical\" | \"horizontal\"\n className?: string\n}\n\n/**\n * ScrollBar 컴포넌트 / ScrollBar component\n * 커스텀 스크롤바를 표시합니다.\n * Displays a custom scrollbar.\n * \n * @component\n * @param {ScrollBarProps} props - ScrollBar 컴포넌트의 props / ScrollBar component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ScrollBar 컴포넌트 / ScrollBar component\n */\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ orientation = \"vertical\", className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={merge(\n \"flex touch-none select-none transition-colors duration-150 ease-out\",\n orientation === \"vertical\" && \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" && \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n />\n )\n }\n)\n\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar } ","import { useEffect, useState } from \"react\"\n\ninterface ScrollToggleOptions {\n threshold?: number\n showOnMount?: boolean\n smooth?: boolean\n}\n\nexport function useScrollToggle(options: ScrollToggleOptions = {}) {\n const {\n threshold = 400,\n showOnMount = false,\n smooth = true,\n } = options\n\n const [isVisible, setIsVisible] = useState(showOnMount)\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useEffect(() => {\n if (!mounted) return\n\n const toggleVisibility = () => {\n if (typeof window === \"undefined\") return\n setIsVisible(window.pageYOffset > threshold)\n }\n\n toggleVisibility()\n window.addEventListener(\"scroll\", toggleVisibility, { passive: true })\n window.addEventListener(\"resize\", toggleVisibility, { passive: true })\n\n return () => {\n window.removeEventListener(\"scroll\", toggleVisibility)\n window.removeEventListener(\"resize\", toggleVisibility)\n }\n }, [threshold, mounted])\n\n const scrollToTop = () => {\n if (typeof window === \"undefined\") return\n if (smooth) {\n window.scrollTo({ top: 0, behavior: \"smooth\" })\n } else {\n window.scrollTo(0, 0)\n }\n }\n\n return {\n isVisible,\n scrollToTop,\n mounted,\n }\n}\n\n","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\nimport { IconName } from \"../lib/icons\"\nimport { useScrollToggle } from \"../hooks/useScrollToggle\"\n\n/**\n * ScrollToTop 컴포넌트의 props / ScrollToTop component props\n * @typedef {Object} ScrollToTopProps\n * @property {number} [threshold=400] - 표시 임계값 (px, 이 값 이상 스크롤 시 표시) / Display threshold (px, shows when scrolled beyond this value)\n * @property {boolean} [smooth=true] - 부드러운 스크롤 여부 / Smooth scroll\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {IconName} [icon='arrowUp'] - 아이콘 이름 / Icon name\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 버튼 크기 / Button size\n * @property {\"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\"} [variant=\"default\"] - 버튼 스타일 변형 / Button style variant\n * @property {boolean} [showOnMount=false] - 마운트 시 즉시 표시 여부 / Show immediately on mount\n * @extends {React.HTMLAttributes<HTMLButtonElement>}\n */\nexport interface ScrollToTopProps extends React.HTMLAttributes<HTMLButtonElement> {\n threshold?: number\n smooth?: boolean\n className?: string\n icon?: IconName\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"default\" | \"primary\" | \"secondary\" | \"outline\" | \"ghost\"\n showOnMount?: boolean\n}\n\n/**\n * ScrollToTop 컴포넌트 / ScrollToTop component\n * \n * 페이지 상단으로 스크롤하는 버튼 컴포넌트입니다.\n * 지정된 임계값 이상 스크롤 시 자동으로 표시됩니다.\n * \n * Button component that scrolls to top of page.\n * Automatically appears when scrolled beyond specified threshold.\n * \n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ScrollToTop />\n * \n * @example\n * // 커스텀 설정 / Custom settings\n * <ScrollToTop \n * threshold={500}\n * variant=\"primary\"\n * size=\"lg\"\n * icon=\"arrowUp\"\n * />\n * \n * @param {ScrollToTopProps} props - ScrollToTop 컴포넌트의 props / ScrollToTop component props\n * @returns {JSX.Element} ScrollToTop 컴포넌트 / ScrollToTop component\n */\nconst ScrollToTop = ({ \n className, \n threshold = 400, \n smooth = true, \n icon = \"arrowUp\",\n size = \"md\",\n variant = \"default\",\n showOnMount = false,\n ...props \n}: ScrollToTopProps) => {\n // HUA Motion의 useScrollToggle 훅 사용\n const { isVisible, scrollToTop, mounted: _mounted } = useScrollToggle({\n threshold,\n showOnMount,\n smooth\n })\n\n const sizeClasses = {\n sm: \"w-8 h-8 sm:w-10 sm:h-10\",\n md: \"w-10 h-10 sm:w-12 sm:h-12\", \n lg: \"w-12 h-12 sm:w-14 sm:h-14\"\n }\n\n\n\n const variantClasses = {\n default: \"bg-white/20 backdrop-blur-md border border-white/30 text-white hover:bg-white/30 dark:bg-slate-800/20 dark:border-slate-700/50 dark:text-slate-100 dark:hover:bg-slate-700/30\",\n primary: \"bg-primary/70 backdrop-blur-md border border-indigo-500/40 text-white hover:bg-primary/80 transition-all duration-300 dark:bg-primary/70 dark:border-indigo-400/40 dark:hover:bg-indigo-400/80\",\n secondary: \"bg-slate-100/80 backdrop-blur-md border border-slate-200 text-slate-700 hover:bg-slate-200/90 dark:bg-slate-700/50 dark:border-slate-600 dark:text-slate-200 dark:hover:bg-slate-600/60\",\n outline: \"border border-white/40 bg-white/15 backdrop-blur-md text-white hover:bg-white/25 dark:border-slate-600/50 dark:bg-slate-800/15 dark:text-slate-200 dark:hover:bg-slate-700/25\",\n ghost: \"bg-transparent hover:bg-white/15 backdrop-blur-md text-white dark:text-slate-200 dark:hover:bg-slate-700/25\"\n }\n\n return (\n <button\n onClick={scrollToTop}\n className={merge(\n \"fixed z-[9999] rounded-full transition-all duration-500 ease-in-out\",\n \"flex items-center justify-center\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:ring-ring/50\",\n \"transform hover:scale-105 active:scale-95\",\n // 페이드 애니메이션\n isVisible \n ? \"opacity-100 translate-y-0 pointer-events-auto\" \n : \"opacity-0 translate-y-4 pointer-events-none\",\n className,\n sizeClasses[size],\n variantClasses[variant]\n )}\n aria-label=\"Scroll to top\"\n {...props}\n >\n <Icon name={icon} className=\"w-5 h-5\" />\n </button>\n )\n}\n\nexport { ScrollToTop } ","\"use client\"\n\nimport React from \"react\"\nimport { merge } from \"../lib/utils\"\nimport { Icon } from \"./Icon\"\nimport { useTheme } from \"./ThemeProvider\"\n\n/**\n * ThemeToggle 컴포넌트의 props / ThemeToggle component props\n * @typedef {Object} ThemeToggleProps\n * @property {string} [className] - 추가 CSS 클래스 / Additional CSS class\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Toggle 크기 / Toggle size\n * @property {\"button\" | \"icon\" | \"switch\"} [variant=\"button\"] - Toggle 스타일 변형 / Toggle style variant\n * @property {boolean} [showLabel=false] - 라벨 표시 여부 / Show label\n * @property {Object} [label] - 커스텀 라벨 텍스트 / Custom label text\n * @property {string} [label.light=\"라이트\"] - 라이트 모드 라벨 / Light mode label\n * @property {string} [label.dark=\"다크\"] - 다크 모드 라벨 / Dark mode label\n * @property {string} [label.system=\"시스템\"] - 시스템 모드 라벨 / System mode label\n */\ninterface ThemeToggleProps {\n className?: string\n size?: \"sm\" | \"md\" | \"lg\"\n variant?: \"button\" | \"icon\" | \"switch\"\n showLabel?: boolean\n label?: {\n light?: string\n dark?: string\n system?: string\n }\n}\n\n/**\n * ThemeToggle 컴포넌트 / ThemeToggle component\n * \n * 테마를 전환하는 토글 컴포넌트입니다.\n * ThemeProvider와 함께 사용하며, light/dark/system 테마를 지원합니다.\n * \n * Toggle component for switching themes.\n * Used with ThemeProvider, supports light/dark/system themes.\n * \n * @component\n * @example\n * // 기본 사용 (버튼 스타일) / Basic usage (button style)\n * <ThemeToggle />\n * \n * @example\n * // 아이콘만 표시 / Icon only\n * <ThemeToggle variant=\"icon\" size=\"lg\" />\n * \n * @example\n * // Switch 스타일 / Switch style\n * <ThemeToggle variant=\"switch\" />\n * \n * @example\n * // 라벨과 함께 / With label\n * <ThemeToggle \n * showLabel\n * label={{ light: \"밝게\", dark: \"어둡게\" }}\n * />\n * \n * @param {ThemeToggleProps} props - ThemeToggle 컴포넌트의 props / ThemeToggle component props\n * @returns {JSX.Element} ThemeToggle 컴포넌트 / ThemeToggle component\n */\nexport function ThemeToggle({\n className,\n size = \"md\",\n variant = \"button\",\n showLabel = false,\n label = {\n light: \"라이트\",\n dark: \"다크\",\n system: \"시스템\"\n },\n ...props\n}: ThemeToggleProps) {\n const { theme, setTheme, resolvedTheme } = useTheme()\n\n const sizeClasses = {\n sm: \"h-10 w-10\", // 40px - 더 넉넉한 크기\n md: \"h-12 w-12\", // 48px - 더 넉넉한 크기\n lg: \"h-14 w-14\" // 56px - 더 넉넉한 크기\n }\n\n const iconSizes = {\n sm: 16,\n md: 20,\n lg: 24\n }\n\n const renderIcon = () => {\n if (theme === \"system\") {\n return <Icon name=\"monitor\" size={iconSizes[size]} />\n }\n return resolvedTheme === \"dark\" ? (\n <Icon name=\"moon\" size={iconSizes[size]} />\n ) : (\n <Icon name=\"sun\" size={iconSizes[size]} className=\"text-amber-600\" />\n )\n }\n\n const handleClick = () => {\n if (theme === \"system\") {\n setTheme(\"light\")\n } else if (theme === \"light\") {\n setTheme(\"dark\")\n } else if (theme === \"dark\") {\n setTheme(\"light\") // dark → light로 직접 전환\n }\n }\n\n if (variant === \"icon\") {\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"inline-flex items-center justify-center rounded-lg transition-all duration-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <div className=\"relative flex items-center justify-center w-full h-full\">\n <div\n className={merge(\n \"absolute inset-0 flex items-center justify-center transition-all duration-300\",\n resolvedTheme === \"dark\" ? \"rotate-0 opacity-100\" : \"rotate-90 opacity-0\"\n )}\n >\n <Icon name=\"moon\" size={iconSizes[size]} className=\"text-indigo-500\" />\n </div>\n <div\n className={merge(\n \"absolute inset-0 flex items-center justify-center transition-all duration-300\",\n resolvedTheme === \"dark\" ? \"rotate-90 opacity-0\" : \"rotate-0 opacity-100\"\n )}\n >\n <Icon name=\"sun\" size={iconSizes[size]} className=\"text-amber-600 dark:text-yellow-500\" />\n </div>\n </div>\n </button>\n )\n }\n\n if (variant === \"switch\") {\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"relative inline-flex h-6 w-11 items-center rounded-full transition-colors duration-300 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2\",\n resolvedTheme === \"dark\" \n ? \"bg-primary\" \n : \"bg-gray-200 dark:bg-gray-700\",\n className\n )}\n {...props}\n >\n <span\n className={merge(\n \"inline-block h-4 w-4 transform rounded-full bg-white transition-transform duration-300 shadow-lg\",\n resolvedTheme === \"dark\" ? \"translate-x-6\" : \"translate-x-1\"\n )}\n />\n <div className=\"absolute inset-0 flex items-center justify-between px-1.5\">\n <Icon name=\"sun\" size={12} className=\"text-amber-600 dark:text-yellow-500 opacity-0\" />\n <Icon name=\"moon\" size={12} className=\"text-indigo-500 opacity-0\" />\n </div>\n </button>\n )\n }\n\n return (\n <button\n onClick={handleClick}\n className={merge(\n \"inline-flex items-center gap-3 rounded-lg px-4 py-3 text-sm font-medium transition-all duration-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2\", // 12px 간격, 16px, 12px 패딩\n className\n )}\n {...props}\n >\n {renderIcon()}\n {showLabel && (\n <span className=\"text-gray-700 dark:text-gray-300\">\n {theme === \"system\" ? label.system : theme === \"dark\" ? label.dark : label.light}\n </span>\n )}\n </button>\n )\n} ","/**\n * Icon Names - 자동완성 지원\n * \n * 이 파일은 TypeScript 자동완성을 위한 아이콘 이름 목록입니다.\n * 실제 아이콘은 icons.ts와 PROJECT_ICONS에서 관리됩니다.\n */\n\nimport type { IconName } from './icons'\nimport { PROJECT_ICONS } from './icon-providers'\n\n/**\n * PROJECT_ICONS에 정의된 모든 아이콘 이름\n */\nexport type ProjectIconName = keyof typeof PROJECT_ICONS\n\n/**\n * 사용 가능한 모든 아이콘 이름 (icons.ts + PROJECT_ICONS)\n */\nexport type AllIconName = IconName | ProjectIconName\n\n/**\n * 아이콘 이름 목록 (자동완성용)\n */\nexport const iconNames = [\n // Navigation\n 'home', 'menu', 'close', 'search', 'settings', 'user', 'bell',\n 'arrowLeft', 'arrowRight', 'arrowUp', 'arrowDown',\n 'chevronLeft', 'chevronRight', 'chevronUp', 'chevronDown',\n \n // Actions\n 'add', 'edit', 'delete', 'remove', 'check', 'share', 'download', 'upload',\n 'save', 'copy', 'refresh', 'search',\n \n // Status & Feedback\n 'loader', 'success', 'error', 'warning', 'info', 'alertCircle',\n 'heart', 'star', 'bookmark',\n \n // User & Auth\n 'logIn', 'logOut', 'shield', 'key', 'lock', 'unlock',\n 'eye', 'eyeOff', 'users', 'userPlus',\n \n // Data & Analytics\n 'chart', 'barChart', 'pieChart', 'trendingUp', 'trendingDown',\n 'activity', 'database', 'zap', 'circle', 'dollarSign', 'dollar', 'currency',\n \n // Files & Content\n 'fileText', 'file', 'folder', 'book', 'bookOpen',\n 'image', 'video', 'camera',\n \n // Communication\n 'message', 'messageSquare', 'phone', 'mail', 'send',\n \n // Media\n 'play', 'pause', 'mic', 'headphones',\n \n // Emotions\n 'smile', 'frown', 'meh', 'laugh', 'angry',\n 'thumbsUp', 'thumbsDown',\n \n // Time & Date\n 'clock', 'timer', 'calendar', 'calendarDays',\n \n // UI & Theme\n 'monitor', 'sun', 'moon', 'sparkle', 'sparkles', 'lightbulb', 'brain',\n\n // Device & Platform\n 'globe', 'deviceMobile', 'smartphone', 'floppyDisk',\n \n // Navigation Extended\n 'externalLink', 'link', 'moreHorizontal', 'moreVertical',\n\n // Additional\n 'rocket',\n\n // Connectivity & Misc\n 'ticket', 'clipboard', 'wifi', 'wifiOff', 'cpu', 'mask',\n] as const\n\n/**\n * 프로바이더별 아이콘 이름 매핑 (참고용)\n * \n * @example\n * // Lucide 아이콘 사용\n * <Icon name=\"home\" provider=\"lucide\" /> // Lucide: Home\n * \n * // Phosphor 아이콘 사용\n * <Icon name=\"home\" provider=\"phosphor\" /> // Phosphor: House\n * \n * // Iconsax 아이콘 사용 (requires '@hua-labs/ui/iconsax' import)\n * <Icon name=\"home\" provider=\"iconsax\" /> // Iconsax: Home2\n */\nexport const iconProviderMapping: Record<string, {\n lucide: string\n phosphor: string\n iconsax?: string\n}> = PROJECT_ICONS\n\n/**\n * 아이콘 이름이 유효한지 확인\n */\nexport function isValidIconName(name: string): name is AllIconName {\n return name in PROJECT_ICONS || (iconNames as readonly string[]).includes(name)\n}\n\n/**\n * 프로바이더별 아이콘 이름 가져오기\n */\nexport function getIconNameForProvider(\n iconName: string,\n provider: 'lucide' | 'phosphor' | 'iconsax'\n): string | null {\n const mapping = PROJECT_ICONS[iconName as keyof typeof PROJECT_ICONS]\n if (!mapping) return null\n\n return (mapping as Record<string, string>)[provider] || null\n}\n\n\n","/**\n * HUA UI 스타일 유틸리티 함수\n * 다크 모드, 그라데이션 등 공통 스타일 유틸리티\n */\n\nimport { merge } from \"../utils\";\n\n/**\n * 다크 모드 지원 클래스 생성\n * \n * @param lightClass - 라이트 모드 클래스\n * @param darkClass - 다크 모드 클래스\n * @returns 다크 모드 지원 클래스 문자열\n * \n * @example\n * ```tsx\n * withDarkMode(\"bg-white\", \"bg-gray-900\")\n * // \"bg-white dark:bg-gray-900\"\n * ```\n */\nexport function withDarkMode(lightClass: string, darkClass: string): string {\n return `${lightClass} dark:${darkClass}`;\n}\n\n/**\n * 그라데이션 클래스 생성\n * \n * @param from - 시작 색상\n * @param to - 끝 색상\n * @param direction - 그라데이션 방향 (기본값: \"to-r\")\n * @returns 그라데이션 클래스 문자열\n * \n * @example\n * ```tsx\n * createGradient(\"blue-500\", \"purple-600\")\n * // \"bg-gradient-to-r from-blue-500 to-purple-600\"\n * ```\n */\nexport function createGradient(\n from: string,\n to: string,\n direction: \"to-r\" | \"to-l\" | \"to-b\" | \"to-t\" | \"to-br\" | \"to-bl\" | \"to-tr\" | \"to-tl\" = \"to-r\"\n): string {\n return merge(`bg-gradient-${direction}`, `from-${from}`, `to-${to}`);\n}\n\n/**\n * 불투명도가 포함된 색상 클래스 생성\n * \n * @param color - 색상 클래스 (예: \"blue-500\")\n * @param opacity - 불투명도 (0-100)\n * @returns 불투명도가 포함된 색상 클래스\n * \n * @example\n * ```tsx\n * withOpacity(\"blue-500\", 50)\n * // \"blue-500/50\"\n * ```\n */\nexport function withOpacity(color: string, opacity: number): string {\n return `${color}/${opacity}`;\n}\n\n/**\n * 텍스트 색상이 그라데이션 variant일 때 흰색으로 변경하는지 확인\n * \n * @param variant - Variant 타입\n * @returns 텍스트가 흰색이어야 하는지 여부\n */\nexport function isTextWhite(variant: string): boolean {\n return variant === \"gradient\" || variant === \"solid\";\n}\n\n/**\n * 그라데이션 variant인지 확인\n * \n * @param variant - Variant 타입\n * @returns 그라데이션 variant인지 여부\n */\nexport function isGradientVariant(variant: string): boolean {\n return variant === \"gradient\";\n}\n\n/**\n * 반응형 클래스 생성 헬퍼\n * \n * @param base - 기본 클래스\n * @param sm - 작은 화면 클래스\n * @param md - 중간 화면 클래스\n * @param lg - 큰 화면 클래스\n * @param xl - 매우 큰 화면 클래스\n * @returns 반응형 클래스 문자열\n * \n * @example\n * ```tsx\n * responsive(\"text-sm\", \"md:text-base\", \"lg:text-lg\")\n * ```\n */\nexport function responsive(\n base: string,\n sm?: string,\n md?: string,\n lg?: string,\n xl?: string\n): string {\n return merge(\n base,\n sm && `sm:${sm}`,\n md && `md:${md}`,\n lg && `lg:${lg}`,\n xl && `xl:${xl}`\n );\n}\n\n/**\n * 조건부 클래스 적용\n * \n * @param condition - 조건\n * @param trueClass - 조건이 true일 때 적용할 클래스\n * @param falseClass - 조건이 false일 때 적용할 클래스 (선택사항)\n * @returns 조건에 따라 선택된 클래스\n */\nexport function conditionalClass(\n condition: boolean,\n trueClass: string,\n falseClass?: string\n): string {\n return condition ? trueClass : (falseClass || \"\");\n}\n\n","/**\n * HUA-UI 마이크로 모션 프리셋\n *\n * 핵심 철학: \"스륵 부드럽고 아주 조금 쫀득\"\n * - 스륵: 자연스럽고 부드러운 시작/끝\n * - 쫀득: 약간의 오버슈트로 생동감\n */\n\nimport type { MicroMotionPreset, SpringConfig, MicroMotionConfig } from './types'\n\n/**\n * 스프링 물리 프리셋\n * CSS cubic-bezier로 근사화된 값들\n */\nexport const SPRING_CONFIGS: Record<MicroMotionPreset, SpringConfig> = {\n subtle: {\n stiffness: 400,\n damping: 30,\n mass: 1,\n },\n soft: {\n stiffness: 300,\n damping: 25,\n mass: 1,\n },\n springy: {\n stiffness: 350,\n damping: 20,\n mass: 0.8,\n },\n bouncy: {\n stiffness: 400,\n damping: 15,\n mass: 0.7,\n },\n snappy: {\n stiffness: 500,\n damping: 35,\n mass: 0.5,\n },\n}\n\n/**\n * CSS easing 함수 (스프링 근사)\n * 각 프리셋에 맞는 cubic-bezier 값\n */\nexport const EASING_FUNCTIONS: Record<MicroMotionPreset, string> = {\n // 미세한 반응 - 거의 linear에 가까움\n subtle: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n // 부드러운 ease-out\n soft: 'cubic-bezier(0.22, 1, 0.36, 1)',\n // 약간의 오버슈트 (쫀득!)\n springy: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n // 더 큰 오버슈트\n bouncy: 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n // 빠르고 날카로운\n snappy: 'cubic-bezier(0.19, 1, 0.22, 1)',\n}\n\n/**\n * 기본 지속시간 (ms)\n */\nexport const DURATIONS: Record<MicroMotionPreset, number> = {\n subtle: 150,\n soft: 250,\n springy: 300,\n bouncy: 400,\n snappy: 180,\n}\n\n/**\n * HUA-UI 기본 마이크로 모션 설정\n * \"스륵 쫀득\"의 정수 - 아주 미세하게!\n */\nexport const HUA_DEFAULT_MOTION: MicroMotionConfig = {\n preset: 'springy',\n duration: 180,\n scale: 0.008, // 0.8% 스케일 변화 (아주아주 미세)\n translateY: -0.5, // 0.5px 위로 살짝\n}\n\n/**\n * 컴포넌트별 기본 모션 설정\n * 아주 미세한 반동으로 생동감 있게\n */\nexport const COMPONENT_MOTION_DEFAULTS = {\n button: {\n preset: 'springy' as MicroMotionPreset,\n duration: 180,\n scale: 0.008, // 0.8% - 아주아주 미세\n translateY: -0.5, // 0.5px\n },\n card: {\n preset: 'soft' as MicroMotionPreset,\n duration: 220,\n scale: 0.005, // 0.5%\n translateY: -1,\n },\n menuItem: {\n preset: 'subtle' as MicroMotionPreset,\n duration: 150,\n translateX: 1, // 1px\n },\n modal: {\n preset: 'springy' as MicroMotionPreset,\n duration: 250,\n scale: 0.01,\n },\n dropdown: {\n preset: 'soft' as MicroMotionPreset,\n duration: 180,\n translateY: -2,\n },\n tooltip: {\n preset: 'snappy' as MicroMotionPreset,\n duration: 120,\n scale: 0.02,\n },\n checkbox: {\n preset: 'springy' as MicroMotionPreset,\n duration: 200,\n scale: 0.03, // 체크박스는 조금 더\n },\n switch: {\n preset: 'springy' as MicroMotionPreset,\n duration: 180,\n },\n}\n\n/**\n * CSS 변수로 사용할 수 있는 기본값들\n * 미세한 스프링 반동 느낌\n */\nexport const CSS_MOTION_VARS = {\n '--hua-motion-duration': '180ms',\n '--hua-motion-easing': EASING_FUNCTIONS.springy,\n '--hua-motion-scale-hover': '1.008', // 0.8% 확대 (아주아주 미세)\n '--hua-motion-scale-active': '0.992', // 0.8% 축소\n '--hua-motion-translate-y': '-0.5px',\n} as const\n","'use client'\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from 'react'\nimport type {\n MicroMotionConfig,\n MicroMotionState,\n MicroMotionStyle,\n MicroMotionPreset,\n} from './types'\nimport { EASING_FUNCTIONS, DURATIONS, HUA_DEFAULT_MOTION } from './presets'\n\nexport interface UseMicroMotionOptions extends MicroMotionConfig {\n /** hover 시 모션 활성화 */\n enableHover?: boolean\n /** press 시 모션 활성화 */\n enablePress?: boolean\n /** focus 시 모션 활성화 */\n enableFocus?: boolean\n}\n\nexport interface UseMicroMotionReturn {\n /** 모션 상태 */\n state: MicroMotionState\n /** 적용할 스타일 */\n style: MicroMotionStyle\n /** 이벤트 핸들러들 */\n handlers: {\n onMouseEnter: () => void\n onMouseLeave: () => void\n onMouseDown: () => void\n onMouseUp: () => void\n onFocus: () => void\n onBlur: () => void\n }\n /** CSS 클래스 (Tailwind 호환) */\n className: string\n}\n\n/**\n * HUA-UI 마이크로 모션 훅\n *\n * \"스륵 부드럽고 쫀득\" 모션을 적용하는 훅\n *\n * @example\n * ```tsx\n * const { handlers, style, className } = useMicroMotion({ preset: 'springy' })\n *\n * return (\n * <button\n * {...handlers}\n * style={style}\n * className={className}\n * >\n * Click me\n * </button>\n * )\n * ```\n */\nexport function useMicroMotion(\n options: UseMicroMotionOptions = {}\n): UseMicroMotionReturn {\n const {\n preset = HUA_DEFAULT_MOTION.preset || 'springy',\n duration = DURATIONS[preset as MicroMotionPreset] || 200,\n delay = 0,\n scale = HUA_DEFAULT_MOTION.scale || 0.02,\n translateY = HUA_DEFAULT_MOTION.translateY || 0,\n translateX = 0,\n rotate = 0,\n disabled = false,\n enableHover = true,\n enablePress = true,\n enableFocus = false,\n } = options\n\n const [state, setState] = useState<MicroMotionState>({\n isHovered: false,\n isPressed: false,\n isFocused: false,\n isAnimating: false,\n })\n\n const animationTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // 애니메이션 상태 업데이트\n const setAnimating = useCallback((isAnimating: boolean) => {\n if (animationTimeoutRef.current) {\n clearTimeout(animationTimeoutRef.current)\n }\n\n if (isAnimating) {\n setState(prev => ({ ...prev, isAnimating: true }))\n animationTimeoutRef.current = setTimeout(() => {\n setState(prev => ({ ...prev, isAnimating: false }))\n }, duration + delay)\n } else {\n setState(prev => ({ ...prev, isAnimating: false }))\n }\n }, [duration, delay])\n\n // 이벤트 핸들러들\n const handlers = useMemo(() => ({\n onMouseEnter: () => {\n if (disabled || !enableHover) return\n setState(prev => ({ ...prev, isHovered: true }))\n setAnimating(true)\n },\n onMouseLeave: () => {\n if (disabled) return\n setState(prev => ({ ...prev, isHovered: false, isPressed: false }))\n setAnimating(true)\n },\n onMouseDown: () => {\n if (disabled || !enablePress) return\n setState(prev => ({ ...prev, isPressed: true }))\n setAnimating(true)\n },\n onMouseUp: () => {\n if (disabled) return\n setState(prev => ({ ...prev, isPressed: false }))\n setAnimating(true)\n },\n onFocus: () => {\n if (disabled || !enableFocus) return\n setState(prev => ({ ...prev, isFocused: true }))\n setAnimating(true)\n },\n onBlur: () => {\n if (disabled) return\n setState(prev => ({ ...prev, isFocused: false }))\n setAnimating(true)\n },\n }), [disabled, enableHover, enablePress, enableFocus, setAnimating])\n\n // 스타일 계산\n const style = useMemo<MicroMotionStyle>(() => {\n if (disabled) {\n return {\n transform: 'none',\n transition: 'none',\n willChange: 'auto',\n }\n }\n\n const transforms: string[] = []\n const easing = EASING_FUNCTIONS[preset as MicroMotionPreset] || EASING_FUNCTIONS.springy\n\n // Hover 상태\n if (state.isHovered && !state.isPressed) {\n if (scale) transforms.push(`scale(${1 + scale})`)\n if (translateY) transforms.push(`translateY(${translateY}px)`)\n if (translateX) transforms.push(`translateX(${translateX}px)`)\n if (rotate) transforms.push(`rotate(${rotate}deg)`)\n }\n\n // Press 상태 (hover보다 우선)\n if (state.isPressed) {\n // 눌렸을 때는 살짝 작아지고 내려감\n if (scale) transforms.push(`scale(${1 - scale * 0.5})`)\n if (translateY) transforms.push(`translateY(${Math.abs(translateY) * 0.5}px)`)\n }\n\n // Focus 상태\n if (state.isFocused && !state.isHovered && !state.isPressed) {\n if (scale) transforms.push(`scale(${1 + scale * 0.5})`)\n }\n\n return {\n transform: transforms.length > 0 ? transforms.join(' ') : 'none',\n transition: `transform ${duration}ms ${easing} ${delay}ms`,\n willChange: state.isAnimating ? 'transform' : 'auto',\n }\n }, [state, disabled, preset, duration, delay, scale, translateY, translateX, rotate])\n\n // Tailwind 호환 클래스\n const className = useMemo(() => {\n if (disabled) return ''\n\n const classes: string[] = [\n 'transform-gpu', // GPU 가속\n ]\n\n return classes.join(' ')\n }, [disabled])\n\n // 클린업\n useEffect(() => {\n return () => {\n if (animationTimeoutRef.current) {\n clearTimeout(animationTimeoutRef.current)\n }\n }\n }, [])\n\n return {\n state,\n style,\n handlers,\n className,\n }\n}\n\n/**\n * 간단한 CSS-only 마이크로 모션 클래스 생성기\n *\n * motion-core 없이도 \"스륵 쫀득\" 느낌을 주는 Tailwind 클래스\n */\nexport function getMicroMotionClasses(\n preset: MicroMotionPreset = 'springy',\n options: {\n enableHover?: boolean\n enableActive?: boolean\n enableFocus?: boolean\n } = {}\n): string {\n const { enableHover = true, enableActive = true, enableFocus = false } = options\n\n const baseClasses = ['transform-gpu', 'transition-transform']\n\n // 지속시간\n const durationClass = {\n subtle: 'duration-150',\n soft: 'duration-250',\n springy: 'duration-200',\n bouncy: 'duration-300',\n snappy: 'duration-150',\n }[preset]\n\n baseClasses.push(durationClass)\n\n // Hover 효과\n if (enableHover) {\n baseClasses.push('hover:scale-[1.02]', 'hover:-translate-y-0.5')\n }\n\n // Active 효과\n if (enableActive) {\n baseClasses.push('active:scale-[0.98]', 'active:translate-y-0')\n }\n\n // Focus 효과\n if (enableFocus) {\n baseClasses.push('focus:scale-[1.01]')\n }\n\n return baseClasses.join(' ')\n}\n","\"use client\";\n\nimport { useRef, useState, useEffect, useCallback } from \"react\";\n\n/**\n * useInView 훅의 옵션 / useInView hook options\n * @property {number} [threshold=0] - 뷰포트 진입 임계값 (0-1) / Viewport entry threshold\n * @property {string} [rootMargin=\"0px\"] - 루트 마진 / Root margin\n * @property {boolean} [triggerOnce=false] - 한 번만 트리거 / Trigger only once\n * @property {(entry: IntersectionObserverEntry) => void} [onChange] - 상태 변경 콜백 / State change callback\n */\nexport interface UseInViewOptions {\n threshold?: number | number[];\n rootMargin?: string;\n triggerOnce?: boolean;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/**\n * useInView 훅의 반환값 / useInView hook return value\n */\nexport interface UseInViewReturn<T extends HTMLElement = HTMLElement> {\n ref: React.RefObject<T | null>;\n inView: boolean;\n entry: IntersectionObserverEntry | null;\n}\n\n/**\n * useInView 훅 / useInView hook\n *\n * 요소가 뷰포트에 진입했는지 감지하는 훅입니다.\n * 애니메이션 트리거, 레이지 로딩, 무한 스크롤 등에 사용합니다.\n *\n * Hook that detects when an element enters the viewport.\n * Used for animation triggers, lazy loading, infinite scroll, etc.\n *\n * @example\n * // 기본 사용 / Basic usage\n * const { ref, inView } = useInView();\n *\n * return (\n * <div ref={ref} className={inView ? \"animate-in\" : \"opacity-0\"}>\n * Content\n * </div>\n * );\n *\n * @example\n * // 한 번만 트리거 / Trigger once\n * const { ref, inView } = useInView({ triggerOnce: true, threshold: 0.5 });\n */\nexport function useInView<T extends HTMLElement = HTMLElement>(\n options: UseInViewOptions = {}\n): UseInViewReturn<T> {\n const {\n threshold = 0,\n rootMargin = \"0px\",\n triggerOnce = false,\n onChange,\n } = options;\n\n const ref = useRef<T>(null);\n const [inView, setInView] = useState(false);\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null);\n const frozenRef = useRef(false);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n // Skip if already triggered once\n if (triggerOnce && frozenRef.current) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n const isInView = entry.isIntersecting;\n\n // Handle triggerOnce\n if (triggerOnce && isInView) {\n frozenRef.current = true;\n }\n\n setInView(isInView);\n setEntry(entry);\n onChange?.(entry);\n },\n { threshold, rootMargin }\n );\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [threshold, rootMargin, triggerOnce, onChange]);\n\n return { ref, inView, entry };\n}\n\nexport default useInView;\n","\"use client\";\n\nimport { useState, useEffect, useRef, useCallback } from \"react\";\n\n/**\n * useScrollProgress 훅의 옵션 / useScrollProgress hook options\n * @property {\"page\" | \"element\"} [target=\"page\"] - 추적 대상 / Tracking target\n * @property {number} [throttle=16] - 쓰로틀 간격 (ms) / Throttle interval\n */\nexport interface UseScrollProgressOptions {\n target?: \"page\" | \"element\";\n throttle?: number;\n}\n\n/**\n * useScrollProgress 훅의 반환값 / useScrollProgress hook return value\n */\nexport interface UseScrollProgressReturn<T extends HTMLElement = HTMLElement> {\n ref: React.RefObject<T | null>;\n progress: number;\n scrollY: number;\n scrollX: number;\n isScrolling: boolean;\n direction: \"up\" | \"down\" | null;\n}\n\n/**\n * useScrollProgress 훅 / useScrollProgress hook\n *\n * 페이지 또는 요소의 스크롤 진행률을 추적하는 훅입니다.\n * 스크롤 기반 애니메이션, 진행률 표시 등에 사용합니다.\n *\n * Hook that tracks scroll progress of page or element.\n * Used for scroll-based animations, progress indicators, etc.\n *\n * @example\n * // 페이지 스크롤 / Page scroll\n * const { progress, direction } = useScrollProgress();\n *\n * return (\n * <div style={{ width: `${progress * 100}%` }} className=\"progress-bar\" />\n * );\n *\n * @example\n * // 요소 스크롤 / Element scroll\n * const { ref, progress } = useScrollProgress({ target: \"element\" });\n *\n * return (\n * <div ref={ref} className=\"overflow-auto h-[400px]\">\n * <p>Progress: {Math.round(progress * 100)}%</p>\n * </div>\n * );\n */\nexport function useScrollProgress<T extends HTMLElement = HTMLElement>(\n options: UseScrollProgressOptions = {}\n): UseScrollProgressReturn<T> {\n const { target = \"page\", throttle = 16 } = options;\n\n const ref = useRef<T>(null);\n const [progress, setProgress] = useState(0);\n const [scrollY, setScrollY] = useState(0);\n const [scrollX, setScrollX] = useState(0);\n const [isScrolling, setIsScrolling] = useState(false);\n const [direction, setDirection] = useState<\"up\" | \"down\" | null>(null);\n\n const lastScrollY = useRef(0);\n const scrollTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastUpdate = useRef(0);\n\n const calculateProgress = useCallback(() => {\n const now = Date.now();\n if (now - lastUpdate.current < throttle) return;\n lastUpdate.current = now;\n\n if (target === \"page\") {\n const scrollTop = window.scrollY;\n const docHeight = document.documentElement.scrollHeight - window.innerHeight;\n const newProgress = docHeight > 0 ? Math.min(scrollTop / docHeight, 1) : 0;\n\n setProgress(newProgress);\n setScrollY(scrollTop);\n setScrollX(window.scrollX);\n setDirection(scrollTop > lastScrollY.current ? \"down\" : \"up\");\n lastScrollY.current = scrollTop;\n } else if (ref.current) {\n const element = ref.current;\n const scrollTop = element.scrollTop;\n const scrollHeight = element.scrollHeight - element.clientHeight;\n const newProgress = scrollHeight > 0 ? Math.min(scrollTop / scrollHeight, 1) : 0;\n\n setProgress(newProgress);\n setScrollY(scrollTop);\n setScrollX(element.scrollLeft);\n setDirection(scrollTop > lastScrollY.current ? \"down\" : \"up\");\n lastScrollY.current = scrollTop;\n }\n\n setIsScrolling(true);\n if (scrollTimeout.current) clearTimeout(scrollTimeout.current);\n scrollTimeout.current = setTimeout(() => {\n setIsScrolling(false);\n }, 150);\n }, [target, throttle]);\n\n useEffect(() => {\n if (target === \"page\") {\n // Initial calculation\n calculateProgress();\n\n window.addEventListener(\"scroll\", calculateProgress, { passive: true });\n window.addEventListener(\"resize\", calculateProgress, { passive: true });\n\n return () => {\n window.removeEventListener(\"scroll\", calculateProgress);\n window.removeEventListener(\"resize\", calculateProgress);\n if (scrollTimeout.current) clearTimeout(scrollTimeout.current);\n };\n } else {\n const element = ref.current;\n if (!element) return;\n\n element.addEventListener(\"scroll\", calculateProgress, { passive: true });\n\n return () => {\n element.removeEventListener(\"scroll\", calculateProgress);\n if (scrollTimeout.current) clearTimeout(scrollTimeout.current);\n };\n }\n }, [target, calculateProgress]);\n\n return { ref, progress, scrollY, scrollX, isScrolling, direction };\n}\n\nexport default useScrollProgress;\n","\"use client\";\n\nimport { useState, useEffect, useRef, useCallback } from \"react\";\n\n/**\n * useMouse 훅의 옵션 / useMouse hook options\n * @property {\"page\" | \"element\" | \"viewport\"} [type=\"page\"] - 좌표 타입 / Coordinate type\n * @property {boolean} [touch=false] - 터치 이벤트 포함 / Include touch events\n * @property {number} [throttle=0] - 쓰로틀 간격 (ms) / Throttle interval\n */\nexport interface UseMouseOptions {\n type?: \"page\" | \"element\" | \"viewport\";\n touch?: boolean;\n throttle?: number;\n}\n\n/**\n * useMouse 훅의 반환값 / useMouse hook return value\n */\nexport interface UseMouseReturn<T extends HTMLElement = HTMLElement> {\n ref: React.RefObject<T | null>;\n x: number;\n y: number;\n elementX: number;\n elementY: number;\n elementPositionX: number;\n elementPositionY: number;\n isInside: boolean;\n isMoving: boolean;\n}\n\n/**\n * useMouse 훅 / useMouse hook\n *\n * 마우스 위치를 추적하는 훅입니다.\n * 커서 효과, 마우스 따라다니는 요소 등에 사용합니다.\n *\n * Hook that tracks mouse position.\n * Used for cursor effects, mouse-following elements, etc.\n *\n * @example\n * // 전역 마우스 위치 / Global mouse position\n * const { x, y } = useMouse();\n *\n * return (\n * <div style={{ transform: `translate(${x}px, ${y}px)` }} className=\"cursor\" />\n * );\n *\n * @example\n * // 요소 내 상대 위치 / Relative position in element\n * const { ref, elementX, elementY, isInside } = useMouse({ type: \"element\" });\n *\n * return (\n * <div ref={ref} className=\"relative\">\n * {isInside && (\n * <div style={{ left: elementX, top: elementY }} className=\"spotlight\" />\n * )}\n * </div>\n * );\n */\nexport function useMouse<T extends HTMLElement = HTMLElement>(\n options: UseMouseOptions = {}\n): UseMouseReturn<T> {\n const { type = \"page\", touch = false, throttle = 0 } = options;\n\n const ref = useRef<T>(null);\n const [state, setState] = useState({\n x: 0,\n y: 0,\n elementX: 0,\n elementY: 0,\n elementPositionX: 0,\n elementPositionY: 0,\n isInside: false,\n isMoving: false,\n });\n\n const lastUpdate = useRef(0);\n const moveTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleMove = useCallback(\n (clientX: number, clientY: number) => {\n const now = Date.now();\n if (throttle > 0 && now - lastUpdate.current < throttle) return;\n lastUpdate.current = now;\n\n let x = clientX;\n let y = clientY;\n let elementX = 0;\n let elementY = 0;\n let elementPositionX = 0;\n let elementPositionY = 0;\n let isInside = false;\n\n // Calculate page coordinates\n if (type === \"page\") {\n x = clientX + window.scrollX;\n y = clientY + window.scrollY;\n }\n\n // Calculate element-relative coordinates\n if (ref.current) {\n const rect = ref.current.getBoundingClientRect();\n elementX = clientX - rect.left;\n elementY = clientY - rect.top;\n elementPositionX = elementX / rect.width; // 0-1 normalized\n elementPositionY = elementY / rect.height; // 0-1 normalized\n isInside =\n clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom;\n }\n\n setState({\n x,\n y,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n isInside,\n isMoving: true,\n });\n\n if (moveTimeout.current) clearTimeout(moveTimeout.current);\n moveTimeout.current = setTimeout(() => {\n setState((prev) => ({ ...prev, isMoving: false }));\n }, 150);\n },\n [type, throttle]\n );\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n handleMove(e.clientX, e.clientY);\n };\n\n const handleTouchMove = (e: TouchEvent) => {\n if (e.touches.length > 0) {\n handleMove(e.touches[0].clientX, e.touches[0].clientY);\n }\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove, { passive: true });\n if (touch) {\n window.addEventListener(\"touchmove\", handleTouchMove, { passive: true });\n }\n\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n if (touch) {\n window.removeEventListener(\"touchmove\", handleTouchMove);\n }\n if (moveTimeout.current) clearTimeout(moveTimeout.current);\n };\n }, [handleMove, touch]);\n\n return {\n ref,\n ...state,\n };\n}\n\nexport default useMouse;\n","\"use client\";\n\nimport { useState, useEffect } from \"react\";\n\n/**\n * useReducedMotion 훅 / useReducedMotion hook\n *\n * 사용자의 모션 감소 선호 설정을 감지하는 훅입니다.\n * 접근성을 위해 애니메이션을 조건부로 적용할 때 사용합니다.\n *\n * Hook that detects user's reduced motion preference.\n * Used for conditionally applying animations for accessibility.\n *\n * @returns {boolean} 모션 감소 선호 여부 / Whether reduced motion is preferred\n *\n * @example\n * const prefersReducedMotion = useReducedMotion();\n *\n * return (\n * <div\n * className={prefersReducedMotion ? \"\" : \"animate-bounce\"}\n * style={{ transition: prefersReducedMotion ? \"none\" : \"all 0.3s\" }}\n * >\n * Content\n * </div>\n * );\n *\n * @example\n * // 조건부 애니메이션 / Conditional animation\n * const prefersReducedMotion = useReducedMotion();\n *\n * const variants = {\n * initial: { opacity: 0, y: prefersReducedMotion ? 0 : 20 },\n * animate: { opacity: 1, y: 0 },\n * };\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n useEffect(() => {\n // Check if window is available (SSR safety)\n if (typeof window === \"undefined\") return;\n\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\n // Set initial value\n setPrefersReducedMotion(mediaQuery.matches);\n\n // Listen for changes\n const handleChange = (e: MediaQueryListEvent) => {\n setPrefersReducedMotion(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n\n return () => {\n mediaQuery.removeEventListener(\"change\", handleChange);\n };\n }, []);\n\n return prefersReducedMotion;\n}\n\nexport default useReducedMotion;\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\n\n/**\n * useWindowSize 훅의 반환값 / useWindowSize hook return value\n */\nexport interface UseWindowSizeReturn {\n width: number;\n height: number;\n isMobile: boolean;\n isTablet: boolean;\n isDesktop: boolean;\n}\n\n/**\n * useWindowSize 훅의 옵션 / useWindowSize hook options\n */\nexport interface UseWindowSizeOptions {\n throttle?: number;\n mobileBreakpoint?: number;\n tabletBreakpoint?: number;\n}\n\n/**\n * useWindowSize 훅 / useWindowSize hook\n *\n * 윈도우 크기를 추적하는 훅입니다.\n * 반응형 애니메이션, 조건부 렌더링 등에 사용합니다.\n *\n * Hook that tracks window size.\n * Used for responsive animations, conditional rendering, etc.\n *\n * @example\n * const { width, height, isMobile } = useWindowSize();\n *\n * return (\n * <div style={{ fontSize: isMobile ? \"14px\" : \"16px\" }}>\n * Window: {width} x {height}\n * </div>\n * );\n */\nexport function useWindowSize(options: UseWindowSizeOptions = {}): UseWindowSizeReturn {\n const {\n throttle = 100,\n mobileBreakpoint = 768,\n tabletBreakpoint = 1024,\n } = options;\n\n const [size, setSize] = useState<UseWindowSizeReturn>({\n width: typeof window !== \"undefined\" ? window.innerWidth : 0,\n height: typeof window !== \"undefined\" ? window.innerHeight : 0,\n isMobile: false,\n isTablet: false,\n isDesktop: true,\n });\n\n const updateSize = useCallback(() => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n\n setSize({\n width,\n height,\n isMobile: width < mobileBreakpoint,\n isTablet: width >= mobileBreakpoint && width < tabletBreakpoint,\n isDesktop: width >= tabletBreakpoint,\n });\n }, [mobileBreakpoint, tabletBreakpoint]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n // Initial update\n updateSize();\n\n let timeoutId: NodeJS.Timeout;\n\n const handleResize = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(updateSize, throttle);\n };\n\n window.addEventListener(\"resize\", handleResize, { passive: true });\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n clearTimeout(timeoutId);\n };\n }, [updateSize, throttle]);\n\n return size;\n}\n\nexport default useWindowSize;\n"]}