@hua-labs/ui 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -43
  3. package/dist/{ComponentLayout-DrZpz0yv.d.mts → ComponentLayout-Clf6C2jV.d.mts} +38 -4
  4. package/dist/DashboardSidebar-ZulecqKs.d.mts +54 -0
  5. package/dist/DashboardToolbar-BRZayZNz.d.mts +122 -0
  6. package/dist/EmptyState-SQ3Z6Vf2.d.mts +64 -0
  7. package/dist/{Modal-CrXmb3Ll.d.mts → Modal-DKKtBtbh.d.mts} +12 -6
  8. package/dist/{Section-BWzyshgX.d.mts → Section-DKdIG1sg.d.mts} +11 -12
  9. package/dist/SectionHeader-DHwQ_xh8.d.mts +1653 -0
  10. package/dist/{Switch-Dzm5TLR3.d.mts → Switch-D0l7SJrz.d.mts} +31 -15
  11. package/dist/Tooltip-Cv7nYhPW.d.mts +304 -0
  12. package/dist/advanced/Logo.d.ts +8 -4
  13. package/dist/advanced/Logo.d.ts.map +1 -1
  14. package/dist/advanced/dashboard.d.ts +28 -6
  15. package/dist/advanced/dashboard.d.ts.map +1 -1
  16. package/dist/advanced-dashboard.d.mts +9 -2278
  17. package/dist/advanced-dashboard.mjs +1 -33
  18. package/dist/advanced-dashboard.mjs.map +1 -1
  19. package/dist/advanced-emotion.d.mts +13 -5
  20. package/dist/advanced-emotion.mjs +1 -1
  21. package/dist/advanced-motion.d.mts +144 -61
  22. package/dist/advanced-motion.mjs +1 -1
  23. package/dist/advanced.d.mts +70 -37
  24. package/dist/advanced.mjs +14 -3
  25. package/dist/advanced.mjs.map +1 -1
  26. package/dist/chunk-32OZGTPV.mjs +41 -0
  27. package/dist/chunk-32OZGTPV.mjs.map +1 -0
  28. package/dist/chunk-6WBFZ2KV.mjs +3 -0
  29. package/dist/chunk-6WBFZ2KV.mjs.map +1 -0
  30. package/dist/chunk-7CGJQSJO.mjs +3 -0
  31. package/dist/chunk-7CGJQSJO.mjs.map +1 -0
  32. package/dist/chunk-7T3IUG3G.mjs +3 -0
  33. package/dist/chunk-7T3IUG3G.mjs.map +1 -0
  34. package/dist/chunk-A5YOVVM5.mjs +3 -0
  35. package/dist/chunk-A5YOVVM5.mjs.map +1 -0
  36. package/dist/chunk-AJOGTUWS.mjs +3 -0
  37. package/dist/chunk-AJOGTUWS.mjs.map +1 -0
  38. package/dist/chunk-AQTSQYH2.mjs +3 -0
  39. package/dist/chunk-AQTSQYH2.mjs.map +1 -0
  40. package/dist/chunk-B2MRZJQA.mjs +3 -0
  41. package/dist/chunk-B2MRZJQA.mjs.map +1 -0
  42. package/dist/chunk-BOX4TONF.mjs +3 -0
  43. package/dist/chunk-BOX4TONF.mjs.map +1 -0
  44. package/dist/chunk-C2DOXNBK.mjs +3 -0
  45. package/dist/chunk-C2DOXNBK.mjs.map +1 -0
  46. package/dist/chunk-CQBMR7VU.mjs +3 -0
  47. package/dist/chunk-CQBMR7VU.mjs.map +1 -0
  48. package/dist/chunk-CYAAAEPJ.mjs +3 -0
  49. package/dist/chunk-CYAAAEPJ.mjs.map +1 -0
  50. package/dist/chunk-D7MTTTQY.mjs +8 -0
  51. package/dist/chunk-D7MTTTQY.mjs.map +1 -0
  52. package/dist/chunk-DABVKUJN.mjs +3 -0
  53. package/dist/chunk-DABVKUJN.mjs.map +1 -0
  54. package/dist/chunk-EAZEI74V.mjs +3 -0
  55. package/dist/chunk-EAZEI74V.mjs.map +1 -0
  56. package/dist/chunk-EK6BLFVQ.mjs +3 -0
  57. package/dist/chunk-EK6BLFVQ.mjs.map +1 -0
  58. package/dist/chunk-FVUAVGP5.mjs +3 -0
  59. package/dist/chunk-FVUAVGP5.mjs.map +1 -0
  60. package/dist/chunk-GAIUZVNC.mjs +3 -0
  61. package/dist/chunk-GAIUZVNC.mjs.map +1 -0
  62. package/dist/chunk-HLBIIF4I.mjs +3 -0
  63. package/dist/chunk-HLBIIF4I.mjs.map +1 -0
  64. package/dist/chunk-I6NCGF6E.mjs +3 -0
  65. package/dist/chunk-I6NCGF6E.mjs.map +1 -0
  66. package/dist/chunk-J46VEBVF.mjs +3 -0
  67. package/dist/chunk-J46VEBVF.mjs.map +1 -0
  68. package/dist/chunk-JNW3CLCA.mjs +3 -0
  69. package/dist/chunk-JNW3CLCA.mjs.map +1 -0
  70. package/dist/chunk-JY3QVUGW.mjs +3 -0
  71. package/dist/chunk-JY3QVUGW.mjs.map +1 -0
  72. package/dist/chunk-KHBZOGUU.mjs +3 -0
  73. package/dist/chunk-KHBZOGUU.mjs.map +1 -0
  74. package/dist/chunk-KPNNAQLI.mjs +3 -0
  75. package/dist/chunk-KPNNAQLI.mjs.map +1 -0
  76. package/dist/chunk-L2LGSILS.mjs +13 -0
  77. package/dist/chunk-L2LGSILS.mjs.map +1 -0
  78. package/dist/chunk-LPHUWTQ2.mjs +3 -0
  79. package/dist/chunk-LPHUWTQ2.mjs.map +1 -0
  80. package/dist/chunk-M4JE7TQL.mjs +3 -0
  81. package/dist/chunk-M4JE7TQL.mjs.map +1 -0
  82. package/dist/chunk-MEDKGNLV.mjs +3 -0
  83. package/dist/chunk-MEDKGNLV.mjs.map +1 -0
  84. package/dist/chunk-MR46CSMC.mjs +3 -0
  85. package/dist/chunk-MR46CSMC.mjs.map +1 -0
  86. package/dist/chunk-NSDWT2JM.mjs +3 -0
  87. package/dist/chunk-NSDWT2JM.mjs.map +1 -0
  88. package/dist/chunk-OBMOTQEU.mjs +3 -0
  89. package/dist/chunk-OBMOTQEU.mjs.map +1 -0
  90. package/dist/chunk-QEMPERUK.mjs +3 -0
  91. package/dist/chunk-QEMPERUK.mjs.map +1 -0
  92. package/dist/chunk-RICRFXFP.mjs +3 -0
  93. package/dist/chunk-RICRFXFP.mjs.map +1 -0
  94. package/dist/chunk-SOK7VBSM.mjs +13 -0
  95. package/dist/chunk-SOK7VBSM.mjs.map +1 -0
  96. package/dist/chunk-SPZ7SZH4.mjs +3 -0
  97. package/dist/chunk-SPZ7SZH4.mjs.map +1 -0
  98. package/dist/chunk-TB3DARQO.mjs +3 -0
  99. package/dist/chunk-TB3DARQO.mjs.map +1 -0
  100. package/dist/chunk-TND4HPKW.mjs +51 -0
  101. package/dist/chunk-TND4HPKW.mjs.map +1 -0
  102. package/dist/chunk-TSAXVD2H.mjs +35 -0
  103. package/dist/chunk-TSAXVD2H.mjs.map +1 -0
  104. package/dist/chunk-UR3TIWBS.mjs +3 -0
  105. package/dist/chunk-UR3TIWBS.mjs.map +1 -0
  106. package/dist/chunk-XU2XBAEW.mjs +3 -0
  107. package/dist/chunk-XU2XBAEW.mjs.map +1 -0
  108. package/dist/chunk-XXHDNZTG.mjs +3 -0
  109. package/dist/chunk-XXHDNZTG.mjs.map +1 -0
  110. package/dist/chunk-YW5DA7Q6.mjs +3 -0
  111. package/dist/chunk-YW5DA7Q6.mjs.map +1 -0
  112. package/dist/chunk-ZTHUGQZL.mjs +3 -0
  113. package/dist/chunk-ZTHUGQZL.mjs.map +1 -0
  114. package/dist/chunk-ZVCGC6EV.mjs +3 -0
  115. package/dist/chunk-ZVCGC6EV.mjs.map +1 -0
  116. package/dist/chunk-ZZ67E3M5.mjs +3 -0
  117. package/dist/chunk-ZZ67E3M5.mjs.map +1 -0
  118. package/dist/{common-YLvZxA_K.d.mts → common-Bej8Okcg.d.mts} +1 -1
  119. package/dist/components/Accordion.d.ts +14 -7
  120. package/dist/components/Accordion.d.ts.map +1 -1
  121. package/dist/components/Action.d.ts.map +1 -1
  122. package/dist/components/ActionToolbar.d.ts +10 -6
  123. package/dist/components/ActionToolbar.d.ts.map +1 -1
  124. package/dist/components/Alert.d.ts +16 -2
  125. package/dist/components/Alert.d.ts.map +1 -1
  126. package/dist/components/Autocomplete.d.ts +6 -4
  127. package/dist/components/Autocomplete.d.ts.map +1 -1
  128. package/dist/components/Avatar.d.ts +20 -7
  129. package/dist/components/Avatar.d.ts.map +1 -1
  130. package/dist/components/Badge.d.ts +27 -9
  131. package/dist/components/Badge.d.ts.map +1 -1
  132. package/dist/components/Bookmark.d.ts +4 -2
  133. package/dist/components/Bookmark.d.ts.map +1 -1
  134. package/dist/components/BottomSheet.d.ts +13 -9
  135. package/dist/components/BottomSheet.d.ts.map +1 -1
  136. package/dist/components/Box.d.ts +9 -0
  137. package/dist/components/Box.d.ts.map +1 -0
  138. package/dist/components/Breadcrumb.d.ts +9 -4
  139. package/dist/components/Breadcrumb.d.ts.map +1 -1
  140. package/dist/components/Button.d.ts +3 -29
  141. package/dist/components/Button.d.ts.map +1 -1
  142. package/dist/components/Button.variants.d.ts +54 -10
  143. package/dist/components/Button.variants.d.ts.map +1 -1
  144. package/dist/components/Card.d.ts +49 -14
  145. package/dist/components/Card.d.ts.map +1 -1
  146. package/dist/components/ChatMessage.d.ts +3 -2
  147. package/dist/components/ChatMessage.d.ts.map +1 -1
  148. package/dist/components/Checkbox.d.ts +5 -2
  149. package/dist/components/Checkbox.d.ts.map +1 -1
  150. package/dist/components/CodeBlock.d.ts +8 -5
  151. package/dist/components/CodeBlock.d.ts.map +1 -1
  152. package/dist/components/ColorPicker.d.ts +4 -2
  153. package/dist/components/ColorPicker.d.ts.map +1 -1
  154. package/dist/components/Command.d.ts +28 -14
  155. package/dist/components/Command.d.ts.map +1 -1
  156. package/dist/components/ComponentLayout.d.ts +5 -2
  157. package/dist/components/ComponentLayout.d.ts.map +1 -1
  158. package/dist/components/ConfirmModal.d.ts +4 -0
  159. package/dist/components/ConfirmModal.d.ts.map +1 -1
  160. package/dist/components/Container.d.ts +18 -5
  161. package/dist/components/Container.d.ts.map +1 -1
  162. package/dist/components/ContextMenu.d.ts +36 -36
  163. package/dist/components/ContextMenu.d.ts.map +1 -1
  164. package/dist/components/DatePicker.d.ts +12 -5
  165. package/dist/components/DatePicker.d.ts.map +1 -1
  166. package/dist/components/Divider.d.ts +2 -1
  167. package/dist/components/Divider.d.ts.map +1 -1
  168. package/dist/components/Drawer.d.ts +17 -12
  169. package/dist/components/Drawer.d.ts.map +1 -1
  170. package/dist/components/Dropdown.d.ts +25 -57
  171. package/dist/components/Dropdown.d.ts.map +1 -1
  172. package/dist/components/EmotionAnalysis.d.ts +3 -1
  173. package/dist/components/EmotionAnalysis.d.ts.map +1 -1
  174. package/dist/components/EmotionButton.d.ts +3 -1
  175. package/dist/components/EmotionButton.d.ts.map +1 -1
  176. package/dist/components/EmotionMeter.d.ts +3 -1
  177. package/dist/components/EmotionMeter.d.ts.map +1 -1
  178. package/dist/components/EmotionSelector.d.ts +3 -1
  179. package/dist/components/EmotionSelector.d.ts.map +1 -1
  180. package/dist/components/FeatureCard.d.ts +9 -3
  181. package/dist/components/FeatureCard.d.ts.map +1 -1
  182. package/dist/components/Form.d.ts +20 -54
  183. package/dist/components/Form.d.ts.map +1 -1
  184. package/dist/components/FormControl.d.ts +3 -2
  185. package/dist/components/FormControl.d.ts.map +1 -1
  186. package/dist/components/Grid.d.ts +11 -4
  187. package/dist/components/Grid.d.ts.map +1 -1
  188. package/dist/components/HeroSection.d.ts +4 -2
  189. package/dist/components/HeroSection.d.ts.map +1 -1
  190. package/dist/components/Icon/Icon.d.ts +12 -8
  191. package/dist/components/Icon/Icon.d.ts.map +1 -1
  192. package/dist/components/IconsaxGallery/index.d.ts +8 -5
  193. package/dist/components/IconsaxGallery/index.d.ts.map +1 -1
  194. package/dist/components/InfoCard.d.ts +5 -2
  195. package/dist/components/InfoCard.d.ts.map +1 -1
  196. package/dist/components/Input.d.ts +29 -4
  197. package/dist/components/Input.d.ts.map +1 -1
  198. package/dist/components/Label.d.ts +15 -10
  199. package/dist/components/Label.d.ts.map +1 -1
  200. package/dist/components/LanguageToggle.d.ts +5 -3
  201. package/dist/components/LanguageToggle.d.ts.map +1 -1
  202. package/dist/components/Link.d.ts +17 -6
  203. package/dist/components/Link.d.ts.map +1 -1
  204. package/dist/components/LoadingSpinner.d.ts +7 -3
  205. package/dist/components/LoadingSpinner.d.ts.map +1 -1
  206. package/dist/components/Menu.d.ts +59 -60
  207. package/dist/components/Menu.d.ts.map +1 -1
  208. package/dist/components/Modal.d.ts +12 -6
  209. package/dist/components/Modal.d.ts.map +1 -1
  210. package/dist/components/Navigation.d.ts +26 -11
  211. package/dist/components/Navigation.d.ts.map +1 -1
  212. package/dist/components/NumberInput.d.ts +5 -2
  213. package/dist/components/NumberInput.d.ts.map +1 -1
  214. package/dist/components/PageNavigation.d.ts +6 -3
  215. package/dist/components/PageNavigation.d.ts.map +1 -1
  216. package/dist/components/PageTransition.d.ts +2 -2
  217. package/dist/components/PageTransition.d.ts.map +1 -1
  218. package/dist/components/Pagination.d.ts +5 -2
  219. package/dist/components/Pagination.d.ts.map +1 -1
  220. package/dist/components/Panel.d.ts +1 -7
  221. package/dist/components/Panel.d.ts.map +1 -1
  222. package/dist/components/Popover.d.ts +25 -9
  223. package/dist/components/Popover.d.ts.map +1 -1
  224. package/dist/components/Pressable.d.ts +14 -0
  225. package/dist/components/Pressable.d.ts.map +1 -0
  226. package/dist/components/Progress.d.ts +36 -13
  227. package/dist/components/Progress.d.ts.map +1 -1
  228. package/dist/components/Prose.d.ts +51 -0
  229. package/dist/components/Prose.d.ts.map +1 -0
  230. package/dist/components/Radio.d.ts +29 -33
  231. package/dist/components/Radio.d.ts.map +1 -1
  232. package/dist/components/ScrollArea.d.ts +8 -9
  233. package/dist/components/ScrollArea.d.ts.map +1 -1
  234. package/dist/components/ScrollIndicator.d.ts +9 -8
  235. package/dist/components/ScrollIndicator.d.ts.map +1 -1
  236. package/dist/components/ScrollProgress.d.ts +3 -2
  237. package/dist/components/ScrollProgress.d.ts.map +1 -1
  238. package/dist/components/ScrollToTop.d.ts +5 -5
  239. package/dist/components/ScrollToTop.d.ts.map +1 -1
  240. package/dist/components/Section.d.ts +12 -9
  241. package/dist/components/Section.d.ts.map +1 -1
  242. package/dist/components/SectionHeader.d.ts +3 -2
  243. package/dist/components/SectionHeader.d.ts.map +1 -1
  244. package/dist/components/Select.d.ts +18 -5
  245. package/dist/components/Select.d.ts.map +1 -1
  246. package/dist/components/Skeleton.d.ts +43 -15
  247. package/dist/components/Skeleton.d.ts.map +1 -1
  248. package/dist/components/Slider.d.ts +7 -5
  249. package/dist/components/Slider.d.ts.map +1 -1
  250. package/dist/components/Stack.d.ts +22 -6
  251. package/dist/components/Stack.d.ts.map +1 -1
  252. package/dist/components/StatsPanel.d.ts +4 -2
  253. package/dist/components/StatsPanel.d.ts.map +1 -1
  254. package/dist/components/Switch.d.ts +9 -4
  255. package/dist/components/Switch.d.ts.map +1 -1
  256. package/dist/components/Table.d.ts +43 -18
  257. package/dist/components/Table.d.ts.map +1 -1
  258. package/dist/components/Tabs.d.ts +50 -77
  259. package/dist/components/Tabs.d.ts.map +1 -1
  260. package/dist/components/Text.d.ts +11 -0
  261. package/dist/components/Text.d.ts.map +1 -0
  262. package/dist/components/Textarea.d.ts +24 -6
  263. package/dist/components/Textarea.d.ts.map +1 -1
  264. package/dist/components/ThemeToggle.d.ts +18 -27
  265. package/dist/components/ThemeToggle.d.ts.map +1 -1
  266. package/dist/components/Timeline.d.ts +4 -2
  267. package/dist/components/Timeline.d.ts.map +1 -1
  268. package/dist/components/Toast.d.ts +1 -1
  269. package/dist/components/Toast.d.ts.map +1 -1
  270. package/dist/components/Toggle.d.ts +11 -2
  271. package/dist/components/Toggle.d.ts.map +1 -1
  272. package/dist/components/Tooltip.d.ts +5 -2
  273. package/dist/components/Tooltip.d.ts.map +1 -1
  274. package/dist/components/Upload.d.ts +5 -3
  275. package/dist/components/Upload.d.ts.map +1 -1
  276. package/dist/components/advanced/AdvancedPageTransition.d.ts +7 -5
  277. package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -1
  278. package/dist/components/advanced/AnimatedGradient.d.ts +6 -2
  279. package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
  280. package/dist/components/advanced/Carousel.d.ts +3 -1
  281. package/dist/components/advanced/Carousel.d.ts.map +1 -1
  282. package/dist/components/advanced/DotNav.d.ts +12 -5
  283. package/dist/components/advanced/DotNav.d.ts.map +1 -1
  284. package/dist/components/advanced/GlowCard.d.ts +4 -1
  285. package/dist/components/advanced/GlowCard.d.ts.map +1 -1
  286. package/dist/components/advanced/HorizontalScroll.d.ts +4 -1
  287. package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -1
  288. package/dist/components/advanced/ImageReveal.d.ts +23 -1
  289. package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
  290. package/dist/components/advanced/Marquee.d.ts +4 -2
  291. package/dist/components/advanced/Marquee.d.ts.map +1 -1
  292. package/dist/components/advanced/Parallax.d.ts +12 -7
  293. package/dist/components/advanced/Parallax.d.ts.map +1 -1
  294. package/dist/components/advanced/SpotlightCard.d.ts +13 -12
  295. package/dist/components/advanced/SpotlightCard.d.ts.map +1 -1
  296. package/dist/components/advanced/TextReveal.d.ts +5 -1
  297. package/dist/components/advanced/TextReveal.d.ts.map +1 -1
  298. package/dist/components/advanced/TiltCard.d.ts +6 -2
  299. package/dist/components/advanced/TiltCard.d.ts.map +1 -1
  300. package/dist/components/advanced/VideoBackground.d.ts +4 -1
  301. package/dist/components/advanced/VideoBackground.d.ts.map +1 -1
  302. package/dist/components/advanced/blog-editor/BlogEditor.d.ts +4 -2
  303. package/dist/components/advanced/blog-editor/BlogEditor.d.ts.map +1 -1
  304. package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts +4 -2
  305. package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts.map +1 -1
  306. package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts +4 -2
  307. package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts.map +1 -1
  308. package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts +4 -2
  309. package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts.map +1 -1
  310. package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts +4 -2
  311. package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts.map +1 -1
  312. package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts +5 -3
  313. package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts.map +1 -1
  314. package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts +5 -3
  315. package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts.map +1 -1
  316. package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts +4 -2
  317. package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts.map +1 -1
  318. package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts +4 -2
  319. package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts.map +1 -1
  320. package/dist/components/advanced/blog-editor/types.d.ts +5 -2
  321. package/dist/components/advanced/blog-editor/types.d.ts.map +1 -1
  322. package/dist/components/advanced/emotion/EmotionAnalysis.d.ts +3 -1
  323. package/dist/components/advanced/emotion/EmotionAnalysis.d.ts.map +1 -1
  324. package/dist/components/advanced/emotion/EmotionButton.d.ts +3 -1
  325. package/dist/components/advanced/emotion/EmotionButton.d.ts.map +1 -1
  326. package/dist/components/advanced/emotion/EmotionMeter.d.ts +4 -2
  327. package/dist/components/advanced/emotion/EmotionMeter.d.ts.map +1 -1
  328. package/dist/components/advanced/emotion/EmotionSelector.d.ts +3 -1
  329. package/dist/components/advanced/emotion/EmotionSelector.d.ts.map +1 -1
  330. package/dist/components/dashboard/ActivityFeed.d.ts +5 -2
  331. package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -1
  332. package/dist/components/dashboard/BarChart.d.ts +3 -2
  333. package/dist/components/dashboard/BarChart.d.ts.map +1 -1
  334. package/dist/components/dashboard/DashboardGrid.d.ts +13 -3
  335. package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -1
  336. package/dist/components/dashboard/DashboardSidebar.d.ts +15 -82
  337. package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
  338. package/dist/components/dashboard/DashboardToolbar.d.ts +3 -2
  339. package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -1
  340. package/dist/components/dashboard/EmptyState.d.ts +3 -2
  341. package/dist/components/dashboard/EmptyState.d.ts.map +1 -1
  342. package/dist/components/dashboard/MembershipBadge.d.ts +3 -2
  343. package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -1
  344. package/dist/components/dashboard/MerchantList.d.ts +3 -2
  345. package/dist/components/dashboard/MerchantList.d.ts.map +1 -1
  346. package/dist/components/dashboard/MetricCard.d.ts +3 -2
  347. package/dist/components/dashboard/MetricCard.d.ts.map +1 -1
  348. package/dist/components/dashboard/MiniBarChart.d.ts +3 -2
  349. package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -1
  350. package/dist/components/dashboard/NotificationCard.d.ts +5 -2
  351. package/dist/components/dashboard/NotificationCard.d.ts.map +1 -1
  352. package/dist/components/dashboard/ProfileCard.d.ts +5 -2
  353. package/dist/components/dashboard/ProfileCard.d.ts.map +1 -1
  354. package/dist/components/dashboard/ProgressCard.d.ts +6 -3
  355. package/dist/components/dashboard/ProgressCard.d.ts.map +1 -1
  356. package/dist/components/dashboard/QuickActionCard.d.ts +22 -27
  357. package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -1
  358. package/dist/components/dashboard/RoutingBreakdownCard.d.ts +3 -2
  359. package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -1
  360. package/dist/components/dashboard/SettlementTimeline.d.ts +3 -2
  361. package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -1
  362. package/dist/components/dashboard/StatCard.d.ts +7 -4
  363. package/dist/components/dashboard/StatCard.d.ts.map +1 -1
  364. package/dist/components/dashboard/SummaryCard.d.ts +6 -3
  365. package/dist/components/dashboard/SummaryCard.d.ts.map +1 -1
  366. package/dist/components/dashboard/TransactionDetailDrawer.d.ts +2 -2
  367. package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -1
  368. package/dist/components/dashboard/TransactionsTable.d.ts +3 -2
  369. package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -1
  370. package/dist/components/dashboard/TrendChart.d.ts +3 -2
  371. package/dist/components/dashboard/TrendChart.d.ts.map +1 -1
  372. package/dist/components/dashboard/YearlyHeatmap.d.ts +4 -2
  373. package/dist/components/dashboard/YearlyHeatmap.d.ts.map +1 -1
  374. package/dist/components/dashboard/kanban/KanbanAddCard.d.ts.map +1 -1
  375. package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts.map +1 -1
  376. package/dist/components/dashboard/kanban/KanbanBoard.d.ts.map +1 -1
  377. package/dist/components/dashboard/kanban/KanbanCard.d.ts.map +1 -1
  378. package/dist/components/dashboard/kanban/KanbanColumn.d.ts.map +1 -1
  379. package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts.map +1 -1
  380. package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts.map +1 -1
  381. package/dist/components/dashboard/kanban/index.d.ts +1 -1
  382. package/dist/components/dashboard/kanban/types.d.ts +24 -12
  383. package/dist/components/dashboard/kanban/types.d.ts.map +1 -1
  384. package/dist/components/scrollbar/scrollbar.d.ts +2 -1
  385. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  386. package/dist/context/MotionConfigContext.d.ts +41 -0
  387. package/dist/context/MotionConfigContext.d.ts.map +1 -0
  388. package/dist/data.d.mts +55 -23
  389. package/dist/data.d.ts +45 -3
  390. package/dist/data.d.ts.map +1 -1
  391. package/dist/data.mjs +2 -2
  392. package/dist/data.mjs.map +1 -1
  393. package/dist/feedback.d.mts +6 -293
  394. package/dist/feedback.d.ts +7 -5
  395. package/dist/feedback.d.ts.map +1 -1
  396. package/dist/feedback.mjs +1 -1
  397. package/dist/form.d.mts +99 -114
  398. package/dist/form.mjs +9 -4
  399. package/dist/form.mjs.map +1 -1
  400. package/dist/hooks/index.d.ts +6 -0
  401. package/dist/hooks/index.d.ts.map +1 -1
  402. package/dist/hooks/useAnimatedEntrance.d.ts +24 -0
  403. package/dist/hooks/useAnimatedEntrance.d.ts.map +1 -0
  404. package/dist/hooks/useBreakpoint.d.ts +22 -0
  405. package/dist/hooks/useBreakpoint.d.ts.map +1 -0
  406. package/dist/hooks/useDotEnv.d.ts +12 -0
  407. package/dist/hooks/useDotEnv.d.ts.map +1 -0
  408. package/dist/hooks/useDotMap.d.ts +38 -0
  409. package/dist/hooks/useDotMap.d.ts.map +1 -0
  410. package/dist/{icons-DmhQEH_E.d.mts → icons-DcOBy9Hf.d.mts} +4 -0
  411. package/dist/iconsax-extended.mjs +2 -2
  412. package/dist/iconsax-extended.mjs.map +1 -1
  413. package/dist/iconsax.mjs +2 -2
  414. package/dist/iconsax.mjs.map +1 -1
  415. package/dist/index.d.mts +360 -210
  416. package/dist/index.d.ts +74 -64
  417. package/dist/index.d.ts.map +1 -1
  418. package/dist/index.mjs +15 -15
  419. package/dist/index.mjs.map +1 -1
  420. package/dist/interactive/kanban.d.ts +12 -0
  421. package/dist/interactive/kanban.d.ts.map +1 -0
  422. package/dist/interactive-kanban.d.mts +378 -0
  423. package/dist/interactive-kanban.mjs +3 -0
  424. package/dist/interactive-kanban.mjs.map +1 -0
  425. package/dist/interactive.d.mts +193 -197
  426. package/dist/interactive.d.ts +7 -5
  427. package/dist/interactive.d.ts.map +1 -1
  428. package/dist/interactive.mjs +1 -1
  429. package/dist/interactive.mjs.map +1 -1
  430. package/dist/landing/LandingAbout.d.ts +2 -2
  431. package/dist/landing/LandingAbout.d.ts.map +1 -1
  432. package/dist/landing/LandingCTA.d.ts +2 -2
  433. package/dist/landing/LandingCTA.d.ts.map +1 -1
  434. package/dist/landing/LandingContact.d.ts +2 -2
  435. package/dist/landing/LandingContact.d.ts.map +1 -1
  436. package/dist/landing/LandingExperience.d.ts +1 -1
  437. package/dist/landing/LandingExperience.d.ts.map +1 -1
  438. package/dist/landing/LandingFeatures.d.ts +1 -1
  439. package/dist/landing/LandingFeatures.d.ts.map +1 -1
  440. package/dist/landing/LandingHero.d.ts +2 -2
  441. package/dist/landing/LandingHero.d.ts.map +1 -1
  442. package/dist/landing/LandingLogoCloud.d.ts +2 -2
  443. package/dist/landing/LandingLogoCloud.d.ts.map +1 -1
  444. package/dist/landing/LandingMetrics.d.ts +1 -1
  445. package/dist/landing/LandingMetrics.d.ts.map +1 -1
  446. package/dist/landing/LandingProjects.d.ts +1 -1
  447. package/dist/landing/LandingProjects.d.ts.map +1 -1
  448. package/dist/landing/LandingShowcase.d.ts +2 -2
  449. package/dist/landing/LandingShowcase.d.ts.map +1 -1
  450. package/dist/landing/LandingSkills.d.ts +1 -1
  451. package/dist/landing/LandingSkills.d.ts.map +1 -1
  452. package/dist/landing/LandingStats.d.ts +1 -1
  453. package/dist/landing/LandingStats.d.ts.map +1 -1
  454. package/dist/landing/LandingTestimonials.d.ts +1 -1
  455. package/dist/landing/LandingTestimonials.d.ts.map +1 -1
  456. package/dist/landing/types.d.ts +42 -30
  457. package/dist/landing/types.d.ts.map +1 -1
  458. package/dist/landing.d.mts +47 -37
  459. package/dist/landing.mjs +4 -20
  460. package/dist/landing.mjs.map +1 -1
  461. package/dist/lib/Slot.d.ts.map +1 -1
  462. package/dist/lib/icon-providers.d.ts +25 -27
  463. package/dist/lib/icon-providers.d.ts.map +1 -1
  464. package/dist/lib/icons.d.ts +4 -0
  465. package/dist/lib/icons.d.ts.map +1 -1
  466. package/dist/lib/styles/animation.d.ts +35 -0
  467. package/dist/lib/styles/animation.d.ts.map +1 -0
  468. package/dist/lib/styles/disabled.d.ts +15 -0
  469. package/dist/lib/styles/disabled.d.ts.map +1 -0
  470. package/dist/lib/styles/focus.d.ts +34 -0
  471. package/dist/lib/styles/focus.d.ts.map +1 -0
  472. package/dist/lib/styles/glass.d.ts +18 -0
  473. package/dist/lib/styles/glass.d.ts.map +1 -0
  474. package/dist/lib/styles/hover.d.ts +9 -0
  475. package/dist/lib/styles/hover.d.ts.map +1 -0
  476. package/dist/lib/styles/index.d.ts +6 -0
  477. package/dist/lib/styles/index.d.ts.map +1 -1
  478. package/dist/lib/styles/transition.d.ts +42 -0
  479. package/dist/lib/styles/transition.d.ts.map +1 -0
  480. package/dist/lib/types/common.d.ts +3 -3
  481. package/dist/lib/types/common.d.ts.map +1 -1
  482. package/dist/lib/utils.d.ts.map +1 -1
  483. package/dist/native/Box.d.ts +11 -0
  484. package/dist/native/Box.d.ts.map +1 -0
  485. package/dist/native/Pressable.d.ts +10 -0
  486. package/dist/native/Pressable.d.ts.map +1 -0
  487. package/dist/native/Text.d.ts +11 -0
  488. package/dist/native/Text.d.ts.map +1 -0
  489. package/dist/native/index.d.ts +9 -0
  490. package/dist/native/index.d.ts.map +1 -0
  491. package/dist/native/useDotMap.d.ts +51 -0
  492. package/dist/native/useDotMap.d.ts.map +1 -0
  493. package/dist/native.mjs +2 -0
  494. package/dist/native.mjs.map +1 -0
  495. package/dist/navigation.d.mts +49 -22
  496. package/dist/navigation.d.ts +10 -8
  497. package/dist/navigation.d.ts.map +1 -1
  498. package/dist/navigation.mjs +1 -1
  499. package/dist/navigation.mjs.map +1 -1
  500. package/dist/overlay.d.mts +84 -87
  501. package/dist/overlay.mjs +2 -2
  502. package/dist/overlay.mjs.map +1 -1
  503. package/dist/sdui/SDUIRenderer.d.ts.map +1 -1
  504. package/dist/sdui/core.d.ts +50 -0
  505. package/dist/sdui/core.d.ts.map +1 -0
  506. package/dist/sdui/index.d.ts +3 -1
  507. package/dist/sdui/index.d.ts.map +1 -1
  508. package/dist/sdui/registry.d.ts.map +1 -1
  509. package/dist/sdui/types.d.ts +38 -0
  510. package/dist/sdui/types.d.ts.map +1 -1
  511. package/dist/sdui.d.mts +89 -1
  512. package/dist/sdui.mjs +2 -2
  513. package/dist/sdui.mjs.map +1 -1
  514. package/dist/theme.d.mts +85 -0
  515. package/dist/theme.d.ts +14 -0
  516. package/dist/theme.d.ts.map +1 -0
  517. package/dist/theme.mjs +3 -0
  518. package/dist/theme.mjs.map +1 -0
  519. package/package.json +50 -22
  520. package/src/styles/component-vars.css +503 -69
  521. package/src/styles/landing.css +12 -12
  522. package/src/styles/prose.css +284 -0
  523. package/src/styles/recommended-theme.css +123 -141
  524. package/src/styles/utilities.css +3 -3
  525. package/dist/advanced-dashboard.js +0 -39
  526. package/dist/advanced-dashboard.js.map +0 -1
  527. package/dist/advanced-emotion.js +0 -2
  528. package/dist/advanced-emotion.js.map +0 -1
  529. package/dist/advanced-motion.js +0 -82
  530. package/dist/advanced-motion.js.map +0 -1
  531. package/dist/advanced.js +0 -112
  532. package/dist/advanced.js.map +0 -1
  533. package/dist/chunk-3CCF7U3P.mjs +0 -3
  534. package/dist/chunk-3CCF7U3P.mjs.map +0 -1
  535. package/dist/chunk-3GAUTZXQ.mjs +0 -3
  536. package/dist/chunk-3GAUTZXQ.mjs.map +0 -1
  537. package/dist/chunk-42RGFEL2.mjs +0 -3
  538. package/dist/chunk-42RGFEL2.mjs.map +0 -1
  539. package/dist/chunk-4NJE7D6X.mjs +0 -3
  540. package/dist/chunk-4NJE7D6X.mjs.map +0 -1
  541. package/dist/chunk-6HVJFEDA.mjs +0 -3
  542. package/dist/chunk-6HVJFEDA.mjs.map +0 -1
  543. package/dist/chunk-7OYT3QSY.mjs +0 -3
  544. package/dist/chunk-7OYT3QSY.mjs.map +0 -1
  545. package/dist/chunk-ANYZ56VB.mjs +0 -3
  546. package/dist/chunk-ANYZ56VB.mjs.map +0 -1
  547. package/dist/chunk-AOSXB5JJ.mjs +0 -4
  548. package/dist/chunk-AOSXB5JJ.mjs.map +0 -1
  549. package/dist/chunk-B544MRF7.mjs +0 -3
  550. package/dist/chunk-B544MRF7.mjs.map +0 -1
  551. package/dist/chunk-CVWWS25A.mjs +0 -3
  552. package/dist/chunk-CVWWS25A.mjs.map +0 -1
  553. package/dist/chunk-DYNBM24D.mjs +0 -3
  554. package/dist/chunk-DYNBM24D.mjs.map +0 -1
  555. package/dist/chunk-FX57OSYG.mjs +0 -3
  556. package/dist/chunk-FX57OSYG.mjs.map +0 -1
  557. package/dist/chunk-IJSYSNM5.mjs +0 -3
  558. package/dist/chunk-IJSYSNM5.mjs.map +0 -1
  559. package/dist/chunk-KJZGOL2Z.mjs +0 -3
  560. package/dist/chunk-KJZGOL2Z.mjs.map +0 -1
  561. package/dist/chunk-KYRIUUQP.mjs +0 -3
  562. package/dist/chunk-KYRIUUQP.mjs.map +0 -1
  563. package/dist/chunk-LSA7DU3N.mjs +0 -73
  564. package/dist/chunk-LSA7DU3N.mjs.map +0 -1
  565. package/dist/chunk-MDLCJASB.mjs +0 -3
  566. package/dist/chunk-MDLCJASB.mjs.map +0 -1
  567. package/dist/chunk-N56BUOCD.mjs +0 -3
  568. package/dist/chunk-N56BUOCD.mjs.map +0 -1
  569. package/dist/chunk-OFYITQXI.mjs +0 -13
  570. package/dist/chunk-OFYITQXI.mjs.map +0 -1
  571. package/dist/chunk-OZNST3EZ.mjs +0 -3
  572. package/dist/chunk-OZNST3EZ.mjs.map +0 -1
  573. package/dist/chunk-RS6RKW5U.mjs +0 -13
  574. package/dist/chunk-RS6RKW5U.mjs.map +0 -1
  575. package/dist/chunk-TXBZZJNR.mjs +0 -3
  576. package/dist/chunk-TXBZZJNR.mjs.map +0 -1
  577. package/dist/chunk-TZ4YSHMC.mjs +0 -3
  578. package/dist/chunk-TZ4YSHMC.mjs.map +0 -1
  579. package/dist/chunk-U6CTBZ2U.mjs +0 -3
  580. package/dist/chunk-U6CTBZ2U.mjs.map +0 -1
  581. package/dist/chunk-WP7VFE77.mjs +0 -3
  582. package/dist/chunk-WP7VFE77.mjs.map +0 -1
  583. package/dist/chunk-XCZMLKPK.mjs +0 -3
  584. package/dist/chunk-XCZMLKPK.mjs.map +0 -1
  585. package/dist/chunk-XGHT7WMO.mjs +0 -3
  586. package/dist/chunk-XGHT7WMO.mjs.map +0 -1
  587. package/dist/chunk-XL4KTJ4L.mjs +0 -3
  588. package/dist/chunk-XL4KTJ4L.mjs.map +0 -1
  589. package/dist/chunk-Z74YUUVT.mjs +0 -3
  590. package/dist/chunk-Z74YUUVT.mjs.map +0 -1
  591. package/dist/chunk-ZXZIHU7J.mjs +0 -8
  592. package/dist/chunk-ZXZIHU7J.mjs.map +0 -1
  593. package/dist/components/EmptyState.d.ts +0 -62
  594. package/dist/components/EmptyState.d.ts.map +0 -1
  595. package/dist/data.js +0 -3
  596. package/dist/data.js.map +0 -1
  597. package/dist/feedback.js +0 -12
  598. package/dist/feedback.js.map +0 -1
  599. package/dist/form.js +0 -8
  600. package/dist/form.js.map +0 -1
  601. package/dist/iconsax-extended.js +0 -3
  602. package/dist/iconsax-extended.js.map +0 -1
  603. package/dist/iconsax.js +0 -3
  604. package/dist/iconsax.js.map +0 -1
  605. package/dist/index.js +0 -51
  606. package/dist/index.js.map +0 -1
  607. package/dist/interactive.js +0 -2
  608. package/dist/interactive.js.map +0 -1
  609. package/dist/landing.js +0 -100
  610. package/dist/landing.js.map +0 -1
  611. package/dist/lib/phosphor-icons.d.ts +0 -6
  612. package/dist/lib/phosphor-icons.d.ts.map +0 -1
  613. package/dist/navigation.js +0 -12
  614. package/dist/navigation.js.map +0 -1
  615. package/dist/overlay.js +0 -3
  616. package/dist/overlay.js.map +0 -1
  617. package/dist/sdui.js +0 -9
  618. package/dist/sdui.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/dashboard/StatCard.tsx","../src/components/dashboard/QuickActionCard.tsx","../src/components/dashboard/DashboardGrid.tsx","../src/components/dashboard/ActivityFeed.tsx","../src/components/dashboard/ProfileCard.tsx","../src/components/dashboard/MembershipBadge.tsx","../src/components/dashboard/MiniBarChart.tsx","../src/components/dashboard/SummaryCard.tsx","../src/components/dashboard/NotificationCard.tsx","../src/components/dashboard/MetricCard.tsx","../src/components/dashboard/ProgressCard.tsx","../src/components/Table.tsx","../src/components/dashboard/TransactionsTable.tsx","../src/components/dashboard/TrendChart.tsx","../src/components/dashboard/BarChart.tsx","../src/components/dashboard/TransactionDetailDrawer.tsx","../src/components/dashboard/SettlementTimeline.tsx","../src/components/dashboard/RoutingBreakdownCard.tsx","../src/components/dashboard/MerchantList.tsx","../src/components/dashboard/YearlyHeatmap.tsx"],"names":["BASE_CARD","resolveDot","GRADIENT_CARD_EXTRAS","ELEVATED_CARD_EXTRAS","HOVER_SHADOW","getCardBg","color","variant","c","getIconContainerStyle","isGradient","base","ICON_SIZE","getBadgeStyle","StatCard","React","title","value","description","icon","trend","loading","emptyState","dotProp","style","props","ref","isHovered","setIsHovered","useState","formatValue","val","cardStyle","useMemo","colorVariantStyle","mergeStyles","emptyCardStyle","jsx","jsxs","iconContainerStyle","badgeStyle","valueStyle","descStyle","loadingBarStyle","trendRowStyle","Icon","useIsDark","isDark","setIsDark","useEffect","check","observer","PALETTE","px","shade","_a","rgba","hex","alpha","g","b","getGradientStyle","getGradientHoverStyle","getOutlineStyle","getOutlineHoverStyle","getSolidStyle","getSolidHoverStyle","s","input","dotFn","BASE_LAYOUT","QuickActionCard","href","onClick","badge","styleProp","isTextWhite","computedStyle","variantStyle","variantHoverStyle","iconStyle","titleStyle","content","Fragment","interactionHandlers","dashboardGridVariants","dotVariants","GAP_VALUES","DashboardGrid","columns","gap","responsive","children","bp","useBreakpoint","resolvedCols","colStyle","CONTAINER_BASE","HEADER_STYLE","HEADER_TITLE_STYLE","LINK_BASE","LINK_HOVER","LIST_STYLE","ITEM_BASE","ITEM_HOVER","ITEM_LAST_BORDER","ITEM_ROW_STYLE","FLEX_1_MIN0","ICON_ROW_STYLE","ICON_WRAP_STYLE","ITEM_TITLE_STYLE","ITEM_DESC_STYLE","BADGE_SHRINK","BADGE_STRING_STYLE","META_WRAP_STYLE","META_CHIP_STYLE","TIMESTAMP_STYLE","MORE_WRAP_STYLE","MORE_BTN_BASE","MORE_BTN_HOVER","EMPTY_WRAP_STYLE","EMPTY_ICON_STYLE","EMPTY_TEXT_STYLE","ActivityItemRow","item","isLast","clickable","rowStyle","e","key","formatRelativeTime","ActivityFeed","items","emptyMessage","showHeader","maxItems","onViewAll","viewAllLabel","viewAllHovered","setViewAllHovered","moreHovered","setMoreHovered","displayItems","hasMore","containerStyle","viewAllStyle","moreBtnStyle","index","TIER_BADGE_STYLES","tierLabels","VARIANT_STYLES","GRADIENT_OVERLAY_1","GRADIENT_OVERLAY_2","INNER_ROW","SETTINGS_ABS","SETTINGS_BTN_BASE","AVATAR_WRAP","AVATAR_IMG","AVATAR_FALLBACK","AVATAR_INITIAL","INFO_WRAP","GREETING_WRAP","GREETING_GRADIENT_SPAN","GREETING_PLAIN_SPAN","NAME_ROW","NAME_TEXT","TIER_BADGE_BASE","TIER_ICON","EMAIL_STYLE","SINCE_ROW","ProfileCard","name","email","avatar","avatarAlt","greeting","memberSince","membershipTier","membershipLabel","onSettingsClick","settingsHref","showAvatar","showMembership","showSettings","formatDate","date","tier","tierBadgeStyle","tierLabel","part","isEmoji","tierConfig","sizeConfig","MembershipBadge","label","size","showIcon","dot","config","sizes","displayLabel","getIcon","chartColorValues","MiniBarChart","data","labels","maxValue","height","showTooltip","showStats","highlightToday","todayIndex","colors","calculatedMax","fixedMax","todayIdx","calculateHeight","total","sum","average","max","chartLabel","hoveredIndex","setHoveredIndex","isToday","barHeight","barColor","DEFAULT_BG_LIGHT","GRADIENT_BG","OUTLINE_BORDER_LIGHT","ICON_BG_LIGHT","BUTTON_BG","ACCENT_COLOR","CARD_BASE","HEADER_ROW","HEADER_LEFT","ICON_WRAP_GRADIENT","BADGE_WRAP","VALUE_WRAP","FOOTER_WRAP","ACTION_WRAP","ACTION_BUTTON_BASE","LOADING_SKELETON","SummaryCard","subtitle","footer","showAction","actionLabel","isCardHovered","setIsCardHovered","isActionHovered","setIsActionHovered","iconWrapStyle","badgePillStyle","subtitleStyle","actionStyle","orbTopRight","orbBottomLeft","BELL_WRAP","CARD_TITLE","COUNT_BADGE","LIST_CONTAINER","TYPE_ITEM_STYLES","TYPE_DOT_COLORS","ITEM_INTERACTIVE_BASE","ITEM_INNER","DOT_INDICATOR","ITEM_CONTENT","ITEM_HEADER","ITEM_TITLE","ITEM_TIME","ITEM_MESSAGE","EMPTY_STATE","EMPTY_MESSAGE","VIEW_ALL_ROW","VIEW_ALL_BUTTON_BASE","VIEW_ALL_BUTTON_HOVER","NotificationRow","isInteractive","typeKey","typeStyle","dotColor","NotificationCard","showCount","rootStyle","viewAllButtonStyle","colorTokens","MetricCard","chartData","chartLabels","showChart","tokens","COLOR_TOKENS","SIZE_TOKENS","ProgressCard","current","unit","showPercentage","showLabel","percentage","descriptionStyle","totalLabelStyle","percentageLabelStyle","progressTrackStyle","progressFillStyle","iconDot","TABLE_BASE","THEAD_BASE","TBODY_BASE","TFOOT_BASE","TR_BASE","TH_BASE","TD_BASE","CAPTION_BASE","TABLE_VARIANT","SIZE_PADDING","TableContext","Table","TableHeader","TableBody","TableFooter","TableRow","onMouseEnter","onMouseLeave","TableHead","TableCell","TableCaption","STATUS_STYLES","DEFAULT_COLUMNS","TransactionsTable","rows","isLoading","caption","filters","onRowClick","highlightRow","statusLabels","statusRenderer","amountFormatter","methodFormatter","dateFormatter","locale","defaultCurrency","rowActionLabel","rowActionHint","columnList","hasRows","tableId","rowActionHintId","getRowActionLabel","row","renderStatus","status","renderAmount","currency","renderMethod","renderDate","renderCell","column","SkeletonTable","DashboardEmptyState","handleRowKeyDown","event","rowLabel","PRESET_PALETTES","TrendChart","series","categories","palette","showLegend","showDots","paletteColors","safeCategories","denominator","points","point","i","_b","pathData","p","areaData","_idx","colorSchemeValues","BarChart","showValues","showLabels","colorScheme","showGrid","d","percent","isHighlighted","formatAmount","amount","parsed","getEventStyle","getSettlementBadgeStyle","TransactionDetailDrawer","open","onClose","transaction","metadata","settlement","fees","events","actions","summary","_c","_d","_e","_f","_g","statusStyle","sectionStyle","Drawer","DrawerHeader","DrawerContent","_","idx","fee","DrawerFooter","STATUS_CONFIG","SettlementTimeline","highlightedId","hasItems","statusConfig","showConnector","itemLabel","DEFAULT_COLORS","STATUS_BADGE_STYLES","STATUS_LABELS","formatPercentage","RoutingBreakdownCard","segments","totalLabel","totalValue","highlightId","formatter","hasSegments","segment","width","statusLabel","customContent","HEALTH_BADGE_STYLES","HEALTH_LABELS","formatPercent","formatVolume","MerchantList","onMerchantSelect","Skeleton","merchant","approval","volume","healthBadgeStyle","healthLabel","merchantLabel","Badge","meta","colorSteps","YearlyHeatmap","steps","weeks","monthLabels","today","startDate","currentDate","lastMonth","week","weekHasFirstOfMonth","firstOfMonthDate","cellDate","getDateKey","getCellStyle","count","bg","getTooltip","dateStr","v","wi","ml","m","di"],"mappings":"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","file":"chunk-KHBZOGUU.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport type { Color } from \"../../lib/types/common\";\n\n/**\n * StatCard 컴포넌트의 props / StatCard component props\n * @typedef {Object} StatCardProps\n * @property {string} title - 카드 제목 / Card title\n * @property {string | number | null | undefined} value - 통계 값 / Statistic value\n * @property {string} [description] - 카드 설명 / Card description\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {Object} [trend] - 추세 정보 / Trend information\n * @property {number} trend.value - 추세 값 / Trend value\n * @property {string} trend.label - 추세 라벨 / Trend label\n * @property {boolean} [trend.positive] - 긍정적 추세 여부 / Positive trend\n * @property {\"default\" | \"gradient\" | \"outline\" | \"elevated\"} [variant=\"elevated\"] - 카드 스타일 변형 / Card style variant\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\" | \"cyan\"} [color=\"blue\"] - 카드 색상 / Card color\n * @property {boolean} [loading] - 로딩 상태 / Loading state\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {string} [dot] - dot 스타일 유틸리티 문자열 / Dot style utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface StatCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title: string;\n value: string | number | null | undefined;\n description?: string;\n icon?: IconName | React.ReactNode;\n trend?: {\n value: number;\n label: string;\n positive?: boolean;\n };\n variant?: \"default\" | \"gradient\" | \"outline\" | \"elevated\";\n color?: Color;\n loading?: boolean;\n emptyState?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Base layout styles (CSSProperties) ────────────────────────────────────\n\nconst BASE_CARD: React.CSSProperties = {\n ...resolveDot(\"p-6 rounded-3xl\"),\n border: \"1px solid\",\n transition: \"box-shadow 200ms ease-in-out\",\n};\n\nconst GRADIENT_CARD_EXTRAS: React.CSSProperties = {\n color: \"white\",\n};\n\nconst ELEVATED_CARD_EXTRAS: React.CSSProperties = {\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,.1), 0 4px 6px -4px rgba(0,0,0,.1)\",\n};\n\nconst HOVER_SHADOW: React.CSSProperties = {\n boxShadow: \"0 20px 25px -5px rgba(0,0,0,.1), 0 8px 10px -6px rgba(0,0,0,.1)\",\n};\n\n// ─── Per-color, per-variant CSS variable references ─────────────────────────\n\ntype Variant = \"default\" | \"gradient\" | \"outline\" | \"elevated\";\n\nfunction getCardBg(color: Color, variant: Variant): React.CSSProperties {\n const c = color;\n switch (variant) {\n case \"default\":\n return {\n backgroundColor: `var(--stat-card-${c}-default-bg)`,\n borderColor: `var(--stat-card-${c}-default-border)`,\n };\n case \"gradient\":\n return {\n background: `linear-gradient(135deg, var(--stat-card-${c}-gradient-from), var(--stat-card-${c}-gradient-to))`,\n borderColor: `var(--stat-card-${c}-gradient-border)`,\n ...GRADIENT_CARD_EXTRAS,\n };\n case \"outline\":\n return {\n backgroundColor: \"transparent\",\n borderColor: `var(--stat-card-${c}-outline-border)`,\n borderWidth: \"2px\",\n color: `var(--stat-card-${c}-outline-text)`,\n };\n case \"elevated\":\n return {\n backgroundColor: `var(--stat-card-${c}-elevated-bg)`,\n borderColor: `var(--stat-card-${c}-elevated-border)`,\n ...ELEVATED_CARD_EXTRAS,\n };\n }\n}\n\nfunction getIconContainerStyle(\n color: Color,\n isGradient: boolean,\n): React.CSSProperties {\n const base: React.CSSProperties = {\n ...resolveDot(\"w-12 h-12 rounded-lg\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n };\n if (isGradient) {\n return {\n ...base,\n backgroundColor: \"rgba(255,255,255,0.2)\",\n color: \"white\",\n };\n }\n return {\n ...base,\n backgroundColor: `var(--stat-card-${color}-icon-bg)`,\n color: `var(--stat-card-${color}-icon-color)`,\n };\n}\n\n// Returns a size number for Icon's `size` prop (24px = 1.5rem)\nconst ICON_SIZE = 24;\n\nfunction getBadgeStyle(color: Color, isGradient: boolean): React.CSSProperties {\n const base: React.CSSProperties = {\n fontSize: \"0.875rem\",\n ...resolveDot(\"px-3 py-1 rounded-full\"),\n fontWeight: 500,\n };\n if (isGradient) {\n return {\n ...base,\n backgroundColor: \"rgba(255,255,255,0.2)\",\n color: \"white\",\n };\n }\n return {\n ...base,\n backgroundColor: `var(--stat-card-${color}-badge-bg)`,\n color: `var(--stat-card-${color}-badge-text)`,\n };\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * StatCard 컴포넌트 / StatCard component\n *\n * 통계 정보를 표시하는 카드 컴포넌트입니다.\n * 제목, 값, 설명, 아이콘, 추세 정보를 포함할 수 있습니다.\n *\n * Card component that displays statistic information.\n * Can include title, value, description, icon, and trend information.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <StatCard\n * title=\"총 사용자\"\n * value=\"1,234\"\n * description=\"지난 달 대비\"\n * icon=\"users\"\n * />\n *\n * @example\n * // 추세 정보 포함 / With trend information\n * <StatCard\n * title=\"매출\"\n * value=\"₩1,000,000\"\n * trend={{ value: 12.5, label: \"전월 대비\", positive: true }}\n * color=\"green\"\n * variant=\"gradient\"\n * />\n *\n * @param {StatCardProps} props - StatCard 컴포넌트의 props / StatCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} StatCard 컴포넌트 / StatCard component\n */\nexport const StatCard = React.forwardRef<HTMLDivElement, StatCardProps>(\n (\n {\n title,\n value,\n description,\n icon,\n trend,\n variant = \"elevated\",\n color = \"blue\",\n loading = false,\n emptyState,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const isGradient = variant === \"gradient\";\n\n const formatValue = (val: string | number): string => {\n if (typeof val === \"number\") {\n return val.toLocaleString();\n }\n return val;\n };\n\n const cardStyle = useMemo((): React.CSSProperties => {\n const colorVariantStyle = getCardBg(color, variant);\n return mergeStyles(\n BASE_CARD,\n colorVariantStyle,\n isHovered ? HOVER_SHADOW : undefined,\n resolveDot(dotProp),\n style,\n );\n }, [color, variant, isHovered, dotProp, style]);\n\n const emptyCardStyle = useMemo(\n (): React.CSSProperties => ({\n ...resolveDot(\"rounded-xl p-6\"),\n border: \"1px solid var(--stat-card-empty-border)\",\n backgroundColor: \"var(--stat-card-empty-bg)\",\n ...resolveDot(dotProp),\n ...style,\n }),\n [dotProp, style],\n );\n\n // Empty state\n if (!loading && (value === null || value === undefined || value === \"\")) {\n return emptyState ? (\n <div style={mergeStyles(resolveDot(dotProp), style)} {...props}>\n {emptyState}\n </div>\n ) : (\n <div style={emptyCardStyle} {...props}>\n <h3\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"var(--stat-card-empty-title)\",\n margin: 0,\n }}\n >\n {title}\n </h3>\n <p\n style={{\n fontSize: \"0.875rem\",\n color: \"var(--stat-card-empty-text)\",\n margin: \"0.5rem 0 0\",\n }}\n >\n 데이터가 없습니다.\n </p>\n </div>\n );\n }\n\n const iconContainerStyle = getIconContainerStyle(color, isGradient);\n const badgeStyle = getBadgeStyle(color, isGradient);\n\n const valueStyle: React.CSSProperties = {\n fontSize: \"1.875rem\",\n fontWeight: 700,\n ...resolveDot(\"mb-1\"),\n margin: \"0 0 0.25rem\",\n color: isGradient ? \"white\" : \"var(--stat-card-value-color)\",\n };\n\n const descStyle: React.CSSProperties = {\n fontSize: \"0.875rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--stat-card-desc-color)\",\n margin: 0,\n };\n\n const loadingBarStyle: React.CSSProperties = {\n ...resolveDot(\"h-10 rounded-md mb-2\"),\n backgroundColor: \"var(--stat-card-loading-bg)\",\n animation: \"pulse 2s cubic-bezier(0.4,0,0.6,1) infinite\",\n };\n\n const trendRowStyle: React.CSSProperties = {\n ...resolveDot(\"mt-3 gap-1\"),\n display: \"flex\",\n alignItems: \"center\",\n };\n\n return (\n <div\n ref={ref}\n style={cardStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...props}\n >\n {/* Header row: icon + badge */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mb-4\"),\n }}\n >\n {icon && (\n <div style={iconContainerStyle}>\n {typeof icon === \"string\" ? (\n <Icon\n name={icon as IconName}\n size={ICON_SIZE}\n variant=\"default\"\n />\n ) : (\n icon\n )}\n </div>\n )}\n\n {title && <span style={badgeStyle}>{title}</span>}\n </div>\n\n {/* Value */}\n {loading ? (\n <div style={loadingBarStyle} />\n ) : (\n <h3 style={valueStyle}>{formatValue(value ?? 0)}</h3>\n )}\n\n {/* Description */}\n {description && <p style={descStyle}>{description}</p>}\n\n {/* Trend */}\n {trend && !loading && (\n <div style={trendRowStyle}>\n <span\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n color:\n trend.positive !== false\n ? \"var(--stat-card-trend-pos)\"\n : \"var(--stat-card-trend-neg)\",\n }}\n >\n {trend.positive !== false ? \"↑\" : \"↓\"} {Math.abs(trend.value)}%\n </span>\n <span\n style={{\n fontSize: \"0.75rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.7)\"\n : \"var(--stat-card-trend-muted)\",\n }}\n >\n {trend.label}\n </span>\n </div>\n )}\n </div>\n );\n },\n);\n\nStatCard.displayName = \"StatCard\";\n","\"use client\";\n\nimport React, { useState, useMemo, useEffect } from \"react\";\nimport { dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport type { Color } from \"../../lib/types/common\";\n\n// ─── Dark-mode detection ────────────────────────────────────────\n\nfunction useIsDark(): boolean {\n const [isDark, setIsDark] = useState(false);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n const check = () =>\n setIsDark(document.documentElement.classList.contains(\"dark\"));\n\n check();\n\n const observer = new MutationObserver(check);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n return () => observer.disconnect();\n }, []);\n\n return isDark;\n}\n\n// ─── Color palette (hex) ────────────────────────────────────────\n\nconst PALETTE: Record<Color, Record<string, string>> = {\n blue: {\n \"50\": \"#eff6ff\",\n \"200\": \"#bfdbfe\",\n \"300\": \"#93c5fd\",\n \"400\": \"#60a5fa\",\n \"500\": \"#3b82f6\",\n \"600\": \"#2563eb\",\n \"700\": \"#1d4ed8\",\n \"800\": \"#1e40af\",\n \"900\": \"#1e3a8a\",\n },\n purple: {\n \"50\": \"#faf5ff\",\n \"200\": \"#e9d5ff\",\n \"300\": \"#d8b4fe\",\n \"400\": \"#c084fc\",\n \"500\": \"#a855f7\",\n \"600\": \"#9333ea\",\n \"700\": \"#7e22ce\",\n \"800\": \"#6b21a8\",\n \"900\": \"#581c87\",\n },\n green: {\n \"50\": \"#f0fdf4\",\n \"200\": \"#bbf7d0\",\n \"300\": \"#86efac\",\n \"400\": \"#4ade80\",\n \"500\": \"#22c55e\",\n \"600\": \"#16a34a\",\n \"700\": \"#15803d\",\n \"800\": \"#166534\",\n \"900\": \"#14532d\",\n },\n orange: {\n \"50\": \"#fff7ed\",\n \"200\": \"#fed7aa\",\n \"300\": \"#fdba74\",\n \"400\": \"#fb923c\",\n \"500\": \"#f97316\",\n \"600\": \"#ea580c\",\n \"700\": \"#c2410c\",\n \"800\": \"#9a3412\",\n \"900\": \"#7c2d12\",\n },\n red: {\n \"50\": \"#fef2f2\",\n \"200\": \"#fecaca\",\n \"300\": \"#fca5a5\",\n \"400\": \"#f87171\",\n \"500\": \"#ef4444\",\n \"600\": \"#dc2626\",\n \"700\": \"#b91c1c\",\n \"800\": \"#991b1b\",\n \"900\": \"#7f1d1d\",\n },\n indigo: {\n \"50\": \"#eef2ff\",\n \"200\": \"#c7d2fe\",\n \"300\": \"#a5b4fc\",\n \"400\": \"#818cf8\",\n \"500\": \"#6366f1\",\n \"600\": \"#4f46e5\",\n \"700\": \"#4338ca\",\n \"800\": \"#3730a3\",\n \"900\": \"#312e81\",\n },\n pink: {\n \"50\": \"#fdf2f8\",\n \"200\": \"#fbcfe8\",\n \"300\": \"#f9a8d4\",\n \"400\": \"#f472b6\",\n \"500\": \"#ec4899\",\n \"600\": \"#db2777\",\n \"700\": \"#be185d\",\n \"800\": \"#9d174d\",\n \"900\": \"#831843\",\n },\n gray: {\n \"50\": \"#f9fafb\",\n \"200\": \"#e5e7eb\",\n \"300\": \"#d1d5db\",\n \"400\": \"#9ca3af\",\n \"500\": \"#6b7280\",\n \"600\": \"#4b5563\",\n \"700\": \"#374151\",\n \"800\": \"#1f2937\",\n \"900\": \"#111827\",\n },\n cyan: {\n \"50\": \"#ecfeff\",\n \"200\": \"#a5f3fc\",\n \"300\": \"#67e8f9\",\n \"400\": \"#22d3ee\",\n \"500\": \"#06b6d4\",\n \"600\": \"#0891b2\",\n \"700\": \"#0e7490\",\n \"800\": \"#155e75\",\n \"900\": \"#164e63\",\n },\n primary: {\n \"50\": \"var(--color-primary, #ecfeff)\",\n \"100\": \"var(--color-primary, #cffafe)\",\n \"200\": \"var(--color-primary, #a5f3fc)\",\n \"300\": \"var(--color-primary, #67e8f9)\",\n \"400\": \"var(--color-primary, #22d3ee)\",\n \"500\": \"var(--color-primary, #06b6d4)\",\n \"600\": \"var(--color-primary, #0891b2)\",\n \"700\": \"var(--color-primary, #0e7490)\",\n \"800\": \"var(--color-primary, #155e75)\",\n \"900\": \"var(--color-primary, #164e63)\",\n },\n};\n\nfunction px(color: Color, shade: string): string {\n return PALETTE[color][shade] ?? \"#000\";\n}\n\n/** rgba with alpha from a hex color */\nfunction rgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n// ─── Per-variant style builders ─────────────────────────────────\n\nfunction getGradientStyle(color: Color): React.CSSProperties {\n return {\n background: `linear-gradient(135deg, ${px(color, \"500\")}, ${px(color, \"600\")})`,\n borderColor: px(color, \"400\"),\n color: \"#ffffff\",\n };\n}\n\nfunction getGradientHoverStyle(color: Color): React.CSSProperties {\n return {\n boxShadow: `0 20px 25px -5px ${rgba(px(color, \"500\"), 0.3)}, 0 8px 10px -6px ${rgba(px(color, \"500\"), 0.2)}`,\n };\n}\n\nfunction getOutlineStyle(color: Color, isDark: boolean): React.CSSProperties {\n return {\n borderWidth: \"2px\",\n borderStyle: \"solid\",\n borderColor: isDark ? px(color, \"600\") : px(color, \"300\"),\n backgroundColor: \"transparent\",\n color: isDark ? px(color, \"400\") : px(color, \"600\"),\n };\n}\n\nfunction getOutlineHoverStyle(): React.CSSProperties {\n return {\n boxShadow:\n \"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.08)\",\n };\n}\n\nfunction getSolidStyle(color: Color): React.CSSProperties {\n return {\n backgroundColor: px(color, \"600\"),\n color: \"#ffffff\",\n };\n}\n\nfunction getSolidHoverStyle(color: Color): React.CSSProperties {\n return {\n backgroundColor: px(color, \"700\"),\n boxShadow:\n \"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.08)\",\n };\n}\n\n// ─── Icon container style ────────────────────────────────────────\n\nfunction getIconContainerStyle(\n variant: \"gradient\" | \"outline\" | \"solid\",\n color: Color,\n isDark: boolean,\n): React.CSSProperties {\n if (variant === \"gradient\" || variant === \"solid\") {\n return {\n backgroundColor: \"rgba(255,255,255,0.2)\",\n width: 48,\n height: 48,\n borderRadius: 8,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: \"0 auto 8px\",\n flexShrink: 0,\n };\n }\n // outline\n return {\n backgroundColor: isDark\n ? rgba(px(color, \"900\"), 0.3)\n : rgba(px(color, \"100\"), 0.3),\n color: isDark ? px(color, \"400\") : px(color, \"600\"),\n width: 48,\n height: 48,\n borderRadius: 8,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n margin: \"0 auto 8px\",\n flexShrink: 0,\n };\n}\n\n// ─── Base layout style (shared) ─────────────────────────────────\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties;\n\nconst BASE_LAYOUT: React.CSSProperties = {\n ...s(\"rounded-2xl p-6 transition-all shadow-lg\"),\n textAlign: \"center\",\n display: \"block\",\n boxSizing: \"border-box\",\n cursor: \"pointer\",\n width: \"100%\",\n textDecoration: \"none\",\n};\n\n// ─── Types ───────────────────────────────────────────────────────\n\n/**\n * QuickActionCard component props\n */\nexport interface QuickActionCardProps extends Omit<\n React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement>,\n \"className\"\n> {\n /** Card title */\n title: string;\n /** Card description */\n description?: string;\n /** Icon name or ReactNode */\n icon?: IconName | React.ReactNode;\n /** Link URL — renders as <a> when provided */\n href?: string;\n /** Click handler — renders as <button> when provided */\n onClick?: () => void;\n /** Card style variant */\n variant?: \"gradient\" | \"outline\" | \"solid\";\n /** Card color */\n color?: Color;\n /** Loading state */\n loading?: boolean;\n /** Top-right badge label (e.g. \"Coming Soon\") */\n badge?: string;\n /** Extra dot utility string */\n dot?: string;\n /** Extra inline style (applied last, overrides everything) */\n style?: React.CSSProperties;\n}\n\n// ─── Component ──────────────────────────────────────────────────\n\n/**\n * QuickActionCard component\n *\n * Card component for quick actions.\n * Works as a link or button, used as a clickable action card.\n *\n * @component\n * @example\n * // Link card\n * <QuickActionCard\n * title=\"New Order\"\n * description=\"Create an order quickly\"\n * icon=\"plus\"\n * href=\"/orders/new\"\n * color=\"blue\"\n * />\n *\n * @example\n * // Button card\n * <QuickActionCard\n * title=\"Download Report\"\n * description=\"Download the latest report\"\n * icon=\"download\"\n * onClick={handleDownload}\n * variant=\"outline\"\n * color=\"green\"\n * />\n */\nexport const QuickActionCard = React.forwardRef<\n HTMLAnchorElement | HTMLButtonElement,\n QuickActionCardProps\n>(\n (\n {\n title,\n description,\n icon,\n href,\n onClick,\n variant = \"gradient\",\n color = \"blue\",\n loading = false,\n badge,\n dot: dotProp,\n style: styleProp,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const isDark = useIsDark();\n\n const isTextWhite = variant === \"gradient\" || variant === \"solid\";\n\n const computedStyle = useMemo<React.CSSProperties>(() => {\n // 1. Variant base style\n let variantStyle: React.CSSProperties;\n let variantHoverStyle: React.CSSProperties | undefined;\n\n if (variant === \"gradient\") {\n variantStyle = getGradientStyle(color);\n variantHoverStyle = getGradientHoverStyle(color);\n } else if (variant === \"outline\") {\n variantStyle = getOutlineStyle(color, isDark);\n variantHoverStyle = getOutlineHoverStyle();\n } else {\n variantStyle = getSolidStyle(color);\n variantHoverStyle = getSolidHoverStyle(color);\n }\n\n // 2. Position context for badge\n const positionStyle: React.CSSProperties = badge\n ? { position: \"relative\" }\n : {};\n\n return mergeStyles(\n BASE_LAYOUT,\n variantStyle,\n positionStyle,\n { transition: \"all 200ms ease-in-out\" },\n isHovered ? variantHoverStyle : undefined,\n resolveDot(dotProp),\n styleProp,\n );\n }, [variant, color, isDark, badge, isHovered, dotProp, styleProp]);\n\n const iconContainerStyle = useMemo(\n () => getIconContainerStyle(variant, color, isDark),\n [variant, color, isDark],\n );\n\n const iconStyle: React.CSSProperties = isTextWhite\n ? { width: 24, height: 24, color: \"#ffffff\" }\n : { width: 24, height: 24 };\n\n const titleStyle: React.CSSProperties = {\n fontSize: \"1.25rem\",\n fontWeight: 600,\n marginBottom: \"0.25rem\",\n ...(isTextWhite ? { color: \"#ffffff\" } : {}),\n };\n\n const descriptionStyle: React.CSSProperties = isTextWhite\n ? { fontSize: \"0.875rem\", color: \"rgba(255,255,255,0.9)\", margin: 0 }\n : {\n fontSize: \"0.875rem\",\n color: isDark ? \"var(--color-muted-foreground, #9ca3af)\" : \"#4b5563\",\n margin: 0,\n };\n\n const badgeStyle: React.CSSProperties = {\n position: \"absolute\",\n top: 8,\n right: 8,\n fontSize: \"0.625rem\",\n fontWeight: 500,\n backgroundColor: isDark ? \"#374151\" : \"#e5e7eb\",\n color: isDark ? \"#9ca3af\" : \"#6b7280\",\n padding: \"2px 6px\",\n borderRadius: 9999,\n pointerEvents: \"none\",\n };\n\n const content = (\n <>\n {/* Badge */}\n {badge && <span style={badgeStyle}>{badge}</span>}\n\n {/* Icon */}\n {icon && (\n <div style={iconContainerStyle}>\n {typeof icon === \"string\" ? (\n <Icon name={icon as IconName} style={iconStyle} />\n ) : (\n icon\n )}\n </div>\n )}\n\n {/* Title */}\n <h3 style={titleStyle}>{title}</h3>\n\n {/* Description */}\n {description && <p style={descriptionStyle}>{description}</p>}\n\n {/* Loading bar */}\n {loading && (\n <div\n style={{\n marginTop: 8,\n height: 16,\n backgroundColor: \"rgba(255,255,255,0.2)\",\n borderRadius: 4,\n animation: \"pulse 2s cubic-bezier(0.4,0,0.6,1) infinite\",\n }}\n />\n )}\n </>\n );\n\n const interactionHandlers = {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n };\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n style={computedStyle}\n {...interactionHandlers}\n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n onClick={onClick}\n style={computedStyle}\n {...interactionHandlers}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {content}\n </button>\n );\n },\n);\n\nQuickActionCard.displayName = \"QuickActionCard\";\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dotVariants } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\n\nexport const dashboardGridVariants = dotVariants({\n base: \"grid\",\n variants: {\n gap: {\n sm: \"gap-3\",\n md: \"gap-6\",\n lg: \"gap-8\",\n xl: \"gap-12\",\n },\n },\n defaultVariants: {\n gap: \"md\",\n },\n});\n\nconst GAP_VALUES: Record<\"sm\" | \"md\" | \"lg\" | \"xl\", string> = {\n sm: \"0.75rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n xl: \"3rem\",\n};\n\n/**\n * DashboardGrid 컴포넌트의 props\n * @property {1 | 2 | 3 | 4 | 5 | 6} [columns=4] - 그리드 컬럼 수\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\"} [gap=\"md\"] - 그리드 간격\n * @property {boolean} [responsive=true] - 반응형 여부\n * @property {string} [dot] - dot utility string\n * @property {React.CSSProperties} [style] - inline styles\n */\nexport interface DashboardGridProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> {\n columns?: 1 | 2 | 3 | 4 | 5 | 6;\n gap?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n responsive?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * DashboardGrid 컴포넌트\n *\n * 대시보드 그리드 레이아웃을 제공하는 컴포넌트입니다.\n * 반응형 그리드를 지원하며, 다양한 컬럼 수와 간격을 설정할 수 있습니다.\n *\n * Dashboard grid layout component.\n * Supports responsive grid with configurable column count and gap sizes.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <DashboardGrid columns={4}>\n * <StatCard title=\"항목 1\" value=\"100\" />\n * <StatCard title=\"항목 2\" value=\"200\" />\n * </DashboardGrid>\n *\n * @example\n * // 반응형 그리드 / Responsive grid\n * <DashboardGrid columns={3} gap=\"lg\" responsive>\n * <MetricCard title=\"메트릭 1\" value=\"1,000\" />\n * <MetricCard title=\"메트릭 2\" value=\"2,000\" />\n * </DashboardGrid>\n *\n * @param {DashboardGridProps} props - DashboardGrid 컴포넌트의 props / DashboardGrid component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} DashboardGrid 컴포넌트 / DashboardGrid component\n */\nexport const DashboardGrid = React.forwardRef<\n HTMLDivElement,\n DashboardGridProps\n>(\n (\n {\n columns = 4,\n gap = \"md\",\n responsive = true,\n dot: dotProp,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const bp = useBreakpoint();\n\n const computedStyle = useMemo(() => {\n const base = dashboardGridVariants({ gap }) as React.CSSProperties;\n\n // Responsive column resolution\n let resolvedCols: number;\n if (responsive && columns > 1) {\n if (!bp || bp === \"sm\") {\n resolvedCols = 1;\n } else if (bp === \"md\") {\n resolvedCols = Math.min(columns, 2);\n } else {\n resolvedCols = columns;\n }\n } else {\n resolvedCols = columns;\n }\n\n const colStyle: React.CSSProperties = {\n gridTemplateColumns: `repeat(${resolvedCols}, minmax(0, 1fr))`,\n gap: GAP_VALUES[gap],\n };\n\n return mergeStyles(base, colStyle, resolveDot(dotProp), style);\n }, [columns, gap, responsive, bp, dotProp, style]);\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n }\n);\n\nDashboardGrid.displayName = \"DashboardGrid\";\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { formatRelativeTime } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\n\n/**\n * ActivityItem 인터페이스 / ActivityItem interface\n * @typedef {Object} ActivityItem\n * @property {string} id - 활동 항목 고유 ID / Activity item unique ID\n * @property {string} title - 활동 제목 / Activity title\n * @property {string} [description] - 활동 설명 / Activity description\n * @property {Date | string} timestamp - 활동 타임스탬프 / Activity timestamp\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {string | React.ReactNode} [badge] - 배지 / Badge\n * @property {() => void} [onClick] - 클릭 핸들러 / Click handler\n * @property {Record<string, unknown>} [metadata] - 추가 메타데이터 / Additional metadata\n */\nexport interface ActivityItem {\n id: string;\n title: string;\n description?: string;\n timestamp: Date | string;\n icon?: IconName | React.ReactNode;\n badge?: string | React.ReactNode;\n onClick?: () => void;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * ActivityFeed 컴포넌트의 props / ActivityFeed component props\n * @typedef {Object} ActivityFeedProps\n * @property {string} [title] - 피드 제목 / Feed title\n * @property {ActivityItem[]} items - 활동 항목 배열 / Activity items array\n * @property {string} [emptyMessage=\"활동 내역이 없습니다.\"] - 빈 상태 메시지 / Empty state message\n * @property {boolean} [showHeader=true] - 헤더 표시 여부 / Show header\n * @property {number} [maxItems] - 최대 표시 항목 수 / Maximum items to display\n * @property {() => void} [onViewAll] - 전체 보기 핸들러 / View all handler\n * @property {string} [viewAllLabel=\"전체 보기\"] - 전체 보기 라벨 / View all label\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {string} [dot] - dot 스타일 유틸리티 문자열 / Dot style utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface ActivityFeedProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title?: string;\n items: ActivityItem[];\n emptyMessage?: string;\n showHeader?: boolean;\n maxItems?: number;\n onViewAll?: () => void;\n viewAllLabel?: string;\n emptyState?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ── Static style constants ────────────────────────────────────────────────────\n\nconst CONTAINER_BASE: React.CSSProperties = {\n backgroundColor: \"var(--activity-feed-bg)\",\n ...resolveDot(\"rounded-xl\"),\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n border: \"1px solid var(--activity-feed-border)\",\n overflow: \"hidden\",\n};\n\nconst HEADER_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"p-6\"),\n borderBottom: \"1px solid var(--activity-feed-divider)\",\n};\n\nconst HEADER_TITLE_STYLE: React.CSSProperties = {\n fontSize: \"1.25rem\",\n fontWeight: 700,\n color: \"var(--activity-feed-title)\",\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst LINK_BASE: React.CSSProperties = {\n color: \"var(--activity-feed-link)\",\n fontWeight: 500,\n fontSize: \"0.875rem\",\n transition: \"color 150ms ease\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n};\n\nconst LINK_HOVER: React.CSSProperties = {\n color: \"var(--activity-feed-link-hover)\",\n};\n\nconst LIST_STYLE: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n};\n\nconst ITEM_BASE: React.CSSProperties = {\n ...resolveDot(\"p-4\"),\n transition: \"background-color 150ms ease\",\n borderBottom: \"1px solid var(--activity-feed-divider)\",\n};\n\nconst ITEM_HOVER: React.CSSProperties = {\n backgroundColor: \"var(--activity-feed-item-hover-bg)\",\n cursor: \"pointer\",\n};\n\nconst ITEM_LAST_BORDER: React.CSSProperties = {\n borderBottom: \"none\",\n};\n\nconst ITEM_ROW_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mb-2\"),\n};\n\nconst FLEX_1_MIN0: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst ICON_ROW_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n ...resolveDot(\"gap-3\"),\n};\n\nconst ICON_WRAP_STYLE: React.CSSProperties = {\n ...resolveDot(\"w-8 h-8 rounded-lg\"),\n backgroundColor: \"var(--activity-feed-icon-bg)\",\n color: \"var(--activity-feed-icon-color)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n marginTop: \"0.125rem\",\n};\n\nconst ITEM_TITLE_STYLE: React.CSSProperties = {\n fontSize: \"1rem\",\n fontWeight: 600,\n color: \"var(--activity-feed-title-text)\",\n ...resolveDot(\"mb-1\"),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n};\n\nconst ITEM_DESC_STYLE: React.CSSProperties = {\n fontSize: \"0.875rem\",\n color: \"var(--activity-feed-desc-text)\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n};\n\nconst BADGE_SHRINK: React.CSSProperties = {\n ...resolveDot(\"ml-2\"),\n flexShrink: 0,\n};\n\nconst BADGE_STRING_STYLE: React.CSSProperties = {\n ...resolveDot(\"py-1 px-2\"),\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n fontWeight: 500,\n backgroundColor: \"var(--activity-feed-badge-bg)\",\n color: \"var(--activity-feed-badge-text)\",\n};\n\nconst META_WRAP_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n flexWrap: \"wrap\",\n ...resolveDot(\"mt-2\"),\n};\n\nconst META_CHIP_STYLE: React.CSSProperties = {\n fontSize: \"0.75rem\",\n backgroundColor: \"var(--activity-feed-meta-bg)\",\n color: \"var(--activity-feed-meta-text)\",\n paddingTop: \"0.125rem\",\n paddingBottom: \"0.125rem\",\n ...resolveDot(\"px-2\"),\n ...resolveDot(\"rounded-md\"),\n};\n\nconst TIMESTAMP_STYLE: React.CSSProperties = {\n fontSize: \"0.75rem\",\n color: \"var(--activity-feed-timestamp)\",\n ...resolveDot(\"mt-2\"),\n};\n\nconst MORE_WRAP_STYLE: React.CSSProperties = {\n ...resolveDot(\"p-4\"),\n textAlign: \"center\",\n borderTop: \"1px solid var(--activity-feed-divider)\",\n};\n\nconst MORE_BTN_BASE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n fontSize: \"0.875rem\",\n color: \"var(--activity-feed-link)\",\n fontWeight: 500,\n transition: \"color 150ms ease\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n};\n\nconst MORE_BTN_HOVER: React.CSSProperties = {\n color: \"var(--activity-feed-link-hover)\",\n};\n\nconst EMPTY_WRAP_STYLE: React.CSSProperties = {\n textAlign: \"center\",\n ...resolveDot(\"py-8\"),\n};\n\nconst EMPTY_ICON_STYLE: React.CSSProperties = {\n fontSize: \"2.25rem\",\n ...resolveDot(\"mb-3\"),\n display: \"block\",\n};\n\nconst EMPTY_TEXT_STYLE: React.CSSProperties = {\n color: \"var(--activity-feed-empty-text)\",\n fontSize: \"0.875rem\",\n};\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\ninterface ActivityItemRowProps {\n item: ActivityItem;\n isLast: boolean;\n}\n\nconst ActivityItemRow: React.FC<ActivityItemRowProps> = ({ item, isLast }) => {\n const [isHovered, setIsHovered] = useState(false);\n const clickable = Boolean(item.onClick);\n\n const rowStyle = useMemo<React.CSSProperties>(\n () =>\n mergeStyles(\n ITEM_BASE,\n isLast ? ITEM_LAST_BORDER : undefined,\n clickable && isHovered ? ITEM_HOVER : undefined,\n ),\n [isLast, clickable, isHovered],\n );\n\n return (\n <div\n style={rowStyle}\n onClick={item.onClick}\n onMouseEnter={clickable ? () => setIsHovered(true) : undefined}\n onMouseLeave={clickable ? () => setIsHovered(false) : undefined}\n role={clickable ? \"button\" : undefined}\n tabIndex={clickable ? 0 : undefined}\n onKeyDown={\n clickable && item.onClick\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") item.onClick!();\n }\n : undefined\n }\n >\n <div style={ITEM_ROW_STYLE}>\n <div style={FLEX_1_MIN0}>\n {/* 아이콘과 제목 */}\n <div style={ICON_ROW_STYLE}>\n {item.icon && (\n <div style={ICON_WRAP_STYLE}>\n {typeof item.icon === \"string\" ? (\n <Icon\n name={item.icon as IconName}\n size={16}\n variant=\"inherit\"\n />\n ) : (\n item.icon\n )}\n </div>\n )}\n <div style={FLEX_1_MIN0}>\n <h3 style={ITEM_TITLE_STYLE}>{item.title}</h3>\n {item.description && (\n <p style={ITEM_DESC_STYLE}>{item.description}</p>\n )}\n </div>\n </div>\n </div>\n\n {/* 배지 */}\n {item.badge && (\n <div style={BADGE_SHRINK}>\n {typeof item.badge === \"string\" ? (\n <span style={BADGE_STRING_STYLE}>{item.badge}</span>\n ) : (\n item.badge\n )}\n </div>\n )}\n </div>\n\n {/* 메타데이터 */}\n {item.metadata && Object.keys(item.metadata).length > 0 && (\n <div style={META_WRAP_STYLE}>\n {Object.entries(item.metadata).map(([key, value]) => (\n <span key={key} style={META_CHIP_STYLE}>\n {key}: {String(value)}\n </span>\n ))}\n </div>\n )}\n\n {/* 타임스탬프 */}\n <p style={TIMESTAMP_STYLE}>\n <time\n dateTime={\n item.timestamp instanceof Date\n ? item.timestamp.toISOString()\n : typeof item.timestamp === \"string\"\n ? item.timestamp\n : undefined\n }\n >\n {formatRelativeTime(item.timestamp)}\n </time>\n </p>\n </div>\n );\n};\n\n// ── Main component ────────────────────────────────────────────────────────────\n\n/**\n * ActivityFeed 컴포넌트 / ActivityFeed component\n *\n * 활동 내역을 표시하는 피드 컴포넌트입니다.\n * 타임스탬프를 상대 시간으로 표시하며, 최대 항목 수 제한을 지원합니다.\n *\n * Feed component that displays activity history.\n * Shows timestamps as relative time and supports maximum items limit.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ActivityFeed\n * title=\"최근 활동\"\n * items={[\n * {\n * id: \"1\",\n * title: \"새 주문 생성\",\n * description: \"주문 #1234\",\n * timestamp: new Date(),\n * icon: \"shoppingCart\"\n * }\n * ]}\n * />\n *\n * @example\n * // 최대 항목 수 제한 / Maximum items limit\n * <ActivityFeed\n * title=\"활동 내역\"\n * items={activities}\n * maxItems={10}\n * onViewAll={() => navigate(\"/activities\")}\n * />\n *\n * @param {ActivityFeedProps} props - ActivityFeed 컴포넌트의 props / ActivityFeed component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ActivityFeed 컴포넌트 / ActivityFeed component\n */\nexport const ActivityFeed = React.forwardRef<HTMLDivElement, ActivityFeedProps>(\n (\n {\n title,\n items,\n emptyMessage = \"활동 내역이 없습니다.\",\n showHeader = true,\n maxItems,\n onViewAll,\n viewAllLabel = \"전체 보기\",\n emptyState,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [viewAllHovered, setViewAllHovered] = useState(false);\n const [moreHovered, setMoreHovered] = useState(false);\n\n const displayItems = maxItems ? items.slice(0, maxItems) : items;\n const hasMore = maxItems && items.length > maxItems;\n\n const containerStyle = useMemo(\n () => mergeStyles(CONTAINER_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n const viewAllStyle = useMemo<React.CSSProperties>(\n () => mergeStyles(LINK_BASE, viewAllHovered ? LINK_HOVER : undefined),\n [viewAllHovered],\n );\n\n const moreBtnStyle = useMemo<React.CSSProperties>(\n () =>\n mergeStyles(MORE_BTN_BASE, moreHovered ? MORE_BTN_HOVER : undefined),\n [moreHovered],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n {/* 헤더 */}\n {showHeader && title && (\n <div style={HEADER_STYLE}>\n <h2 style={HEADER_TITLE_STYLE}>{title}</h2>\n {onViewAll && (\n <button\n onClick={onViewAll}\n aria-label={`${viewAllLabel} - ${title || \"활동 내역\"}`}\n style={viewAllStyle}\n onMouseEnter={() => setViewAllHovered(true)}\n onMouseLeave={() => setViewAllHovered(false)}\n >\n {viewAllLabel} →\n </button>\n )}\n </div>\n )}\n\n {/* 활동 목록 */}\n {displayItems.length > 0 ? (\n <div style={LIST_STYLE}>\n {displayItems.map((item, index) => (\n <ActivityItemRow\n key={item.id}\n item={item}\n isLast={index === displayItems.length - 1 && !hasMore}\n />\n ))}\n\n {/* 더 보기 */}\n {hasMore && (\n <div style={MORE_WRAP_STYLE}>\n <button\n onClick={onViewAll}\n aria-label={`더 많은 활동 보기 - ${items.length - (maxItems || 0)}개 더`}\n style={moreBtnStyle}\n onMouseEnter={() => setMoreHovered(true)}\n onMouseLeave={() => setMoreHovered(false)}\n >\n <span>더 많은 활동 보기</span>\n <span style={{ ...resolveDot(\"ml-1\") }}>\n ({items.length - (maxItems || 0)}개 더)\n </span>\n <span style={{ ...resolveDot(\"ml-1\") }}>→</span>\n </button>\n </div>\n )}\n </div>\n ) : emptyState ? (\n emptyState\n ) : (\n <div style={EMPTY_WRAP_STYLE}>\n <span style={EMPTY_ICON_STYLE}>📭</span>\n <p style={EMPTY_TEXT_STYLE}>{emptyMessage}</p>\n </div>\n )}\n </div>\n );\n },\n);\n\nActivityFeed.displayName = \"ActivityFeed\";\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\n\n/**\n * 멤버십 등급 인터페이스\n * @typedef {Object} MembershipTier\n * @property {\"basic\" | \"pro\" | \"premium\" | \"admin\"} tier - 등급\n * @property {string} label - 등급 라벨\n */\nexport interface MembershipTier {\n tier: \"basic\" | \"pro\" | \"premium\" | \"admin\";\n label: string;\n}\n\n/**\n * ProfileCard 컴포넌트의 props / ProfileCard component props\n * @typedef {Object} ProfileCardProps\n * @property {string} name - 사용자 이름 / User name\n * @property {string} [email] - 이메일 / Email\n * @property {string} [avatar] - 아바타 이미지 URL / Avatar image URL\n * @property {string} [avatarAlt] - 아바타 대체 텍스트 / Avatar alt text\n * @property {string} [greeting] - 인사말 / Greeting\n * @property {Date | string} [memberSince] - 가입일 / Member since date\n * @property {MembershipTier[\"tier\"]} [membershipTier] - 멤버십 등급 / Membership tier\n * @property {string} [membershipLabel] - 멤버십 라벨 / Membership label\n * @property {() => void} [onSettingsClick] - 설정 클릭 핸들러 / Settings click handler\n * @property {string} [settingsHref] - 설정 링크 URL / Settings link URL\n * @property {\"default\" | \"gradient\" | \"minimal\"} [variant=\"default\"] - 스타일 변형 / Style variant\n * @property {boolean} [showAvatar=true] - 아바타 표시 여부 / Show avatar\n * @property {boolean} [showMembership=true] - 멤버십 표시 여부 / Show membership\n * @property {boolean} [showSettings=true] - 설정 버튼 표시 여부 / Show settings button\n * @property {string} [dot] - dot 스타일 유틸리티 문자열 / Dot style utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface ProfileCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n name: string;\n email?: string;\n avatar?: string;\n avatarAlt?: string;\n greeting?: string;\n memberSince?: Date | string;\n membershipTier?: MembershipTier[\"tier\"];\n membershipLabel?: string;\n onSettingsClick?: () => void;\n settingsHref?: string;\n variant?: \"default\" | \"gradient\" | \"minimal\";\n showAvatar?: boolean;\n showMembership?: boolean;\n showSettings?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ── Tier badge gradient styles (hardcoded — no CSS var equivalent) ────────────\n\nconst TIER_BADGE_STYLES: Record<MembershipTier[\"tier\"], React.CSSProperties> = {\n basic: {\n background: \"linear-gradient(to right, rgb(99,102,241), rgb(6,182,212))\",\n color: \"white\",\n },\n pro: {\n background: \"linear-gradient(to right, rgb(168,85,247), rgb(236,72,153))\",\n color: \"white\",\n },\n premium: {\n background: \"linear-gradient(to right, rgb(250,204,21), rgb(249,115,22))\",\n color: \"white\",\n },\n admin: {\n background: \"linear-gradient(to right, rgb(239,68,68), rgb(236,72,153))\",\n color: \"white\",\n },\n};\n\nconst tierLabels: Record<MembershipTier[\"tier\"], string> = {\n basic: \"Basic\",\n pro: \"Pro\",\n premium: \"Premium\",\n admin: \"Admin\",\n};\n\n// ── Static style constants ────────────────────────────────────────────────────\n\nconst CONTAINER_BASE: React.CSSProperties = {\n position: \"relative\",\n overflow: \"hidden\",\n ...resolveDot(\"p-6\"),\n};\n\nconst VARIANT_STYLES: Record<\n \"default\" | \"gradient\" | \"minimal\",\n React.CSSProperties\n> = {\n default: {\n backgroundColor: \"var(--profile-card-bg)\",\n borderRadius: \"1rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n border: \"1px solid var(--profile-card-border)\",\n },\n gradient: {\n background: \"var(--profile-card-gradient-bg)\",\n borderRadius: \"1rem\",\n boxShadow:\n \"0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1)\",\n border: \"1px solid var(--profile-card-gradient-border)\",\n },\n minimal: {\n background: \"transparent\",\n },\n};\n\n// Gradient overlay decorations (gradient variant only)\nconst GRADIENT_OVERLAY_1: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n background:\n \"linear-gradient(to bottom right, rgb(99,102,241), rgb(168,85,247), rgb(236,72,153))\",\n opacity: \"var(--profile-card-overlay-opacity, 0.10)\",\n pointerEvents: \"none\",\n};\n\nconst GRADIENT_OVERLAY_2: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n background:\n \"linear-gradient(to top right, rgb(34,211,238), rgb(99,102,241), rgb(147,51,234))\",\n opacity: \"var(--profile-card-overlay2-opacity, 0.05)\",\n pointerEvents: \"none\",\n};\n\nconst INNER_ROW: React.CSSProperties = {\n position: \"relative\",\n display: \"flex\",\n alignItems: \"flex-start\",\n ...resolveDot(\"gap-6\"),\n};\n\nconst SETTINGS_ABS: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n right: 0,\n};\n\nconst SETTINGS_BTN_BASE: React.CSSProperties = {\n ...resolveDot(\"p-2\"),\n color: \"var(--profile-card-settings-color)\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"color 150ms ease\",\n display: \"inline-flex\",\n alignItems: \"center\",\n};\n\nconst AVATAR_WRAP: React.CSSProperties = {\n position: \"relative\",\n flexShrink: 0,\n};\n\nconst AVATAR_IMG: React.CSSProperties = {\n width: \"5rem\",\n height: \"5rem\",\n borderRadius: \"9999px\",\n border: \"4px solid var(--profile-card-avatar-border)\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n objectFit: \"cover\",\n};\n\nconst AVATAR_FALLBACK: React.CSSProperties = {\n width: \"5rem\",\n height: \"5rem\",\n borderRadius: \"9999px\",\n background:\n \"linear-gradient(to bottom right, rgb(99,102,241), rgb(147,51,234))\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"4px solid var(--profile-card-avatar-border)\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n};\n\nconst AVATAR_INITIAL: React.CSSProperties = {\n fontSize: \"1.5rem\",\n fontWeight: 700,\n color: \"white\",\n};\n\nconst INFO_WRAP: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst GREETING_WRAP: React.CSSProperties = {\n fontSize: \"1.125rem\",\n fontWeight: 600,\n ...resolveDot(\"mb-2\"),\n};\n\nconst GREETING_GRADIENT_SPAN: React.CSSProperties = {\n fontSize: \"1.25rem\",\n fontWeight: 700,\n background: \"linear-gradient(to right, rgb(99,102,241), rgb(168,85,247))\",\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n backgroundClip: \"text\",\n};\n\nconst GREETING_PLAIN_SPAN: React.CSSProperties = {\n color: \"var(--profile-card-name-color)\",\n};\n\nconst NAME_ROW: React.CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2 mb-2\"),\n};\n\nconst NAME_TEXT: React.CSSProperties = {\n fontSize: \"1.25rem\",\n fontWeight: 700,\n color: \"var(--profile-card-name-color)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n};\n\nconst TIER_BADGE_BASE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n ...resolveDot(\"py-1 px-3 rounded-full\"),\n fontSize: \"0.75rem\",\n fontWeight: 600,\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)\",\n};\n\nconst TIER_ICON: React.CSSProperties = {\n ...resolveDot(\"w-3 h-3 mr-1\"),\n};\n\nconst EMAIL_STYLE: React.CSSProperties = {\n color: \"var(--profile-card-email-color)\",\n fontSize: \"0.875rem\",\n ...resolveDot(\"mb-1\"),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n};\n\nconst SINCE_ROW: React.CSSProperties = {\n color: \"var(--profile-card-since-color)\",\n fontSize: \"0.75rem\",\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n};\n\n/**\n * ProfileCard 컴포넌트\n *\n * 사용자 프로필 정보를 표시하는 카드 컴포넌트입니다.\n * 아바타, 이름, 이메일, 멤버십 등급 등을 표시할 수 있습니다.\n *\n * Card component that displays user profile information.\n * Can show avatar, name, email, membership tier, and more.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ProfileCard\n * name=\"홍길동\"\n * email=\"hong@example.com\"\n * avatar=\"/avatar.jpg\"\n * membershipTier=\"premium\"\n * memberSince={new Date(\"2024-01-01\")}\n * />\n *\n * @example\n * // 그라디언트 스타일 / Gradient style\n * <ProfileCard\n * name=\"김철수\"\n * greeting=\"안녕하세요\"\n * variant=\"gradient\"\n * membershipTier=\"pro\"\n * onSettingsClick={() => navigate(\"/settings\")}\n * />\n *\n * @param {ProfileCardProps} props - ProfileCard 컴포넌트의 props / ProfileCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ProfileCard 컴포넌트 / ProfileCard component\n */\nexport const ProfileCard = React.forwardRef<HTMLDivElement, ProfileCardProps>(\n (\n {\n name,\n email,\n avatar,\n avatarAlt,\n greeting,\n memberSince,\n membershipTier,\n membershipLabel,\n onSettingsClick,\n settingsHref,\n variant = \"default\",\n showAvatar = true,\n showMembership = true,\n showSettings = true,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const formatDate = (date: Date | string): string => {\n const d = typeof date === \"string\" ? new Date(date) : date;\n return d.toLocaleDateString(\"ko-KR\", {\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n });\n };\n\n const tier = membershipTier || \"basic\";\n const tierBadgeStyle = TIER_BADGE_STYLES[tier];\n const tierLabel = membershipLabel || tierLabels[tier];\n\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n CONTAINER_BASE,\n VARIANT_STYLES[variant],\n resolveDot(dotProp),\n style,\n ),\n [variant, dotProp, style],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n {/* 그라데이션 배경 장식 (gradient variant일 때) */}\n {variant === \"gradient\" && (\n <>\n <div style={GRADIENT_OVERLAY_1} />\n <div style={GRADIENT_OVERLAY_2} />\n </>\n )}\n\n <div style={INNER_ROW}>\n {/* 설정 아이콘 */}\n {showSettings && (onSettingsClick || settingsHref) && (\n <div style={SETTINGS_ABS}>\n {settingsHref ? (\n <a href={settingsHref} style={SETTINGS_BTN_BASE} title=\"설정\">\n <Icon name=\"settings\" dot=\"w-6 h-6\" />\n </a>\n ) : (\n <button\n onClick={onSettingsClick}\n style={SETTINGS_BTN_BASE}\n title=\"설정\"\n >\n <Icon name=\"settings\" dot=\"w-6 h-6\" />\n </button>\n )}\n </div>\n )}\n\n {/* 아바타 */}\n {showAvatar && (\n <div style={AVATAR_WRAP}>\n {avatar ? (\n <img src={avatar} alt={avatarAlt || name} style={AVATAR_IMG} />\n ) : (\n <div style={AVATAR_FALLBACK}>\n <span style={AVATAR_INITIAL}>\n {name.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n </div>\n )}\n\n {/* 정보 */}\n <div style={INFO_WRAP}>\n {/* 인사말 */}\n {greeting && (\n <div style={GREETING_WRAP}>\n {greeting.split(\" \").map((part, index) => {\n const isEmoji =\n /[\\u{1F600}-\\u{1F64F}]|[\\u{1F300}-\\u{1F5FF}]|[\\u{1F680}-\\u{1F6FF}]|[\\u{1F1E0}-\\u{1F1FF}]|[\\u{2600}-\\u{26FF}]|[\\u{2700}-\\u{27BF}]/u.test(\n part,\n );\n return (\n <span key={index}>\n {isEmoji ? (\n <span style={GREETING_PLAIN_SPAN}>{part}</span>\n ) : (\n <span style={GREETING_GRADIENT_SPAN}>{part}</span>\n )}\n {index < greeting.split(\" \").length - 1 && \" \"}\n </span>\n );\n })}\n </div>\n )}\n\n {/* 이름과 멤버십 뱃지 */}\n <div style={NAME_ROW}>\n <span style={NAME_TEXT}>{name}!</span>\n {showMembership && membershipTier && (\n <span style={mergeStyles(TIER_BADGE_BASE, tierBadgeStyle)}>\n <svg\n style={TIER_ICON}\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n >\n {tier === \"premium\" ? (\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n ) : tier === \"admin\" ? (\n <path\n fillRule=\"evenodd\"\n d=\"M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z\"\n clipRule=\"evenodd\"\n />\n ) : (\n <path\n fillRule=\"evenodd\"\n d=\"M6.267 3.455a3.066 3.066 0 001.745-.723 3.066 3.066 0 013.976 0 3.066 3.066 0 001.745.723 3.066 3.066 0 012.812 2.812c.051.643.304 1.254.723 1.745a3.066 3.066 0 010 3.976 3.066 3.066 0 00-.723 1.745 3.066 3.066 0 01-2.812 2.812 3.066 3.066 0 00-1.745.723 3.066 3.066 0 01-3.976 0 3.066 3.066 0 00-1.745-.723 3.066 3.066 0 01-2.812-2.812 3.066 3.066 0 00-.723-1.745 3.066 3.066 0 010-3.976 3.066 3.066 0 00.723-1.745 3.066 3.066 0 012.812-2.812zm7.44 5.252a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n )}\n </svg>\n {tierLabel}\n </span>\n )}\n </div>\n\n {/* 이메일 */}\n {email && <div style={EMAIL_STYLE}>{email}</div>}\n\n {/* 가입일 */}\n {memberSince && (\n <div style={SINCE_ROW}>\n <Icon name=\"clock\" dot=\"w-3 h-3\" />\n 가입일 {formatDate(memberSince)}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nProfileCard.displayName = \"ProfileCard\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\n\n/**\n * MembershipBadge 컴포넌트의 props / MembershipBadge component props\n * @typedef {Object} MembershipBadgeProps\n * @property {\"basic\" | \"pro\" | \"premium\" | \"admin\"} tier - 멤버십 등급 / Membership tier\n * @property {string} [label] - 커스텀 라벨 (기본값: 등급별 라벨) / Custom label (default: tier-specific label)\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 배지 크기 / Badge size\n * @property {boolean} [showIcon=true] - 아이콘 표시 여부 / Show icon\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface MembershipBadgeProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n \"className\"\n> {\n tier: \"basic\" | \"pro\" | \"premium\" | \"admin\";\n label?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n showIcon?: boolean;\n dot?: string;\n}\n\nconst tierConfig = {\n basic: {\n gradient: \"linear-gradient(to right, #6366f1, #06b6d4)\",\n label: \"Basic\",\n },\n pro: {\n gradient: \"linear-gradient(to right, #a855f7, #ec4899)\",\n label: \"Pro\",\n },\n premium: {\n gradient: \"linear-gradient(to right, #facc15, #f97316)\",\n label: \"Premium\",\n },\n admin: {\n gradient: \"linear-gradient(to right, #ef4444, #ec4899)\",\n label: \"Admin\",\n },\n};\n\nconst sizeConfig = {\n sm: {\n padding: \"0.125rem 0.5rem\",\n fontSize: \"0.75rem\",\n iconSize: \"0.625rem\",\n },\n md: {\n padding: \"0.25rem 0.75rem\",\n fontSize: \"0.75rem\",\n iconSize: \"0.75rem\",\n },\n lg: {\n padding: \"0.375rem 1rem\",\n fontSize: \"0.875rem\",\n iconSize: \"1rem\",\n },\n};\n\n/**\n * MembershipBadge 컴포넌트\n *\n * 멤버십 등급을 표시하는 배지 컴포넌트입니다.\n * 등급별로 다른 그라디언트 색상과 아이콘을 제공합니다.\n *\n * Badge component that displays membership tier.\n * Provides different gradient colors and icons for each tier.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <MembershipBadge tier=\"premium\" />\n *\n * @example\n * // 커스텀 라벨과 크기 / Custom label and size\n * <MembershipBadge\n * tier=\"pro\"\n * label=\"프로 플랜\"\n * size=\"lg\"\n * showIcon={false}\n * />\n *\n * @param {MembershipBadgeProps} props - MembershipBadge 컴포넌트의 props / MembershipBadge component props\n * @param {React.Ref<HTMLSpanElement>} ref - span 요소 ref / span element ref\n * @returns {JSX.Element} MembershipBadge 컴포넌트 / MembershipBadge component\n */\nexport const MembershipBadge = React.forwardRef<\n HTMLSpanElement,\n MembershipBadgeProps\n>(\n (\n { tier, label, size = \"md\", showIcon = true, dot, style, ...props },\n ref,\n ) => {\n const config = tierConfig[tier];\n const sizes = sizeConfig[size];\n const displayLabel = label || config.label;\n\n const getIcon = () => {\n if (!showIcon) return null;\n\n const iconStyle: React.CSSProperties = {\n width: sizes.iconSize,\n height: sizes.iconSize,\n display: \"inline-block\",\n };\n\n if (tier === \"premium\") {\n return (\n <svg style={iconStyle} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n );\n }\n\n if (tier === \"admin\") {\n return (\n <svg style={iconStyle} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n }\n\n return (\n <svg style={iconStyle} fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path\n fillRule=\"evenodd\"\n d=\"M6.267 3.455a3.066 3.066 0 001.745-.723 3.066 3.066 0 013.976 0 3.066 3.066 0 001.745.723 3.066 3.066 0 012.812 2.812c.051.643.304 1.254.723 1.745a3.066 3.066 0 010 3.976 3.066 3.066 0 00-.723 1.745 3.066 3.066 0 01-2.812 2.812 3.066 3.066 0 00-1.745.723 3.066 3.066 0 01-3.976 0 3.066 3.066 0 00-1.745-.723 3.066 3.066 0 01-2.812-2.812 3.066 3.066 0 00-.723-1.745 3.066 3.066 0 010-3.976 3.066 3.066 0 00.723-1.745 3.066 3.066 0 012.812-2.812zm7.44 5.252a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\"\n clipRule=\"evenodd\"\n />\n </svg>\n );\n };\n\n return (\n <span\n ref={ref}\n style={mergeStyles(\n {\n display: \"inline-flex\",\n alignItems: \"center\",\n borderRadius: \"9999px\",\n fontWeight: 600,\n color: \"#ffffff\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1)\",\n backgroundImage: config.gradient,\n padding: sizes.padding,\n fontSize: sizes.fontSize,\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {showIcon && <span style={{ ...resolveDot(\"mr-1\") }}>{getIcon()}</span>}\n {displayLabel}\n </span>\n );\n },\n);\n\nMembershipBadge.displayName = \"MembershipBadge\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport type { Color } from \"../../lib/types/common\";\n\n/**\n * MiniBarChart 컴포넌트의 props\n * @typedef {Object} MiniBarChartProps\n * @property {number[]} data - 차트 데이터 배열\n * @property {string[]} [labels] - 라벨 배열\n * @property {number} [maxValue] - 최대값 (자동 계산 시 생략)\n * @property {number} [height=160] - 차트 높이 (px)\n * @property {boolean} [showTooltip=true] - 툴팁 표시 여부\n * @property {boolean} [showStats=true] - 통계 정보 표시 여부\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\"} [color=\"blue\"] - 색상\n * @property {boolean} [highlightToday=true] - 오늘 항목 강조 여부\n * @property {number} [todayIndex] - 오늘 인덱스 (기본값: 마지막 항목)\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface MiniBarChartProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n data: number[];\n labels?: string[];\n maxValue?: number;\n height?: number;\n showTooltip?: boolean;\n showStats?: boolean;\n color?: Color;\n highlightToday?: boolean;\n todayIndex?: number;\n dot?: string;\n}\n\n// Chart colors as actual CSS values\nconst chartColorValues: Record<Color, { default: string; highlight: string }> =\n {\n primary: {\n default: \"var(--color-primary, #06b6d4)\",\n highlight: \"var(--color-primary, #0891b2)\",\n },\n blue: {\n default: \"#6366f1\",\n highlight: \"#0891b2\",\n },\n purple: {\n default: \"#a855f7\",\n highlight: \"#9333ea\",\n },\n green: {\n default: \"#22c55e\",\n highlight: \"#16a34a\",\n },\n orange: {\n default: \"#f97316\",\n highlight: \"#ea580c\",\n },\n red: {\n default: \"#ef4444\",\n highlight: \"#dc2626\",\n },\n indigo: {\n default: \"#6366f1\",\n highlight: \"#4f46e5\",\n },\n pink: {\n default: \"#ec4899\",\n highlight: \"#db2777\",\n },\n gray: {\n default: \"#6b7280\",\n highlight: \"#4b5563\",\n },\n cyan: {\n default: \"#06b6d4\",\n highlight: \"#0891b2\",\n },\n };\n\n/**\n * MiniBarChart 컴포넌트\n *\n * 작은 막대 그래프 차트 컴포넌트입니다.\n * 간단한 데이터 시각화에 적합하며, 오늘 항목 강조 기능을 제공합니다.\n *\n * Small bar chart component for simple data visualization.\n * Suitable for compact displays with today's item highlight feature.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <MiniBarChart\n * data={[10, 20, 15, 30, 25, 40, 35]}\n * labels={[\"월\", \"화\", \"수\", \"목\", \"금\", \"토\", \"일\"]}\n * />\n *\n * @example\n * // 커스텀 색상과 통계 / Custom color and stats\n * <MiniBarChart\n * data={dailyData}\n * color=\"purple\"\n * showStats={true}\n * highlightToday={true}\n * todayIndex={6}\n * />\n *\n * @param {MiniBarChartProps} props - MiniBarChart 컴포넌트의 props / MiniBarChart component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MiniBarChart 컴포넌트 / MiniBarChart component\n */\nexport const MiniBarChart = React.forwardRef<HTMLDivElement, MiniBarChartProps>(\n (\n {\n data,\n labels,\n maxValue,\n height = 160,\n showTooltip = true,\n showStats = true,\n color = \"blue\",\n highlightToday = true,\n todayIndex,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const colors = chartColorValues[color] || chartColorValues.blue;\n const calculatedMax = maxValue || Math.max(...data, 1);\n const fixedMax = Math.max(calculatedMax, 10);\n const todayIdx = todayIndex !== undefined ? todayIndex : data.length - 1;\n\n const calculateHeight = (value: number): number => {\n if (fixedMax === 0) return 8;\n return Math.max((value / fixedMax) * height, 8);\n };\n\n const total = data.reduce((sum, val) => sum + val, 0);\n const average = data.length > 0 ? Math.round(total / data.length) : 0;\n const max = Math.max(...data);\n\n const _chartId = React.useId();\n const chartLabel =\n labels && labels.length > 0\n ? `미니 막대 그래프 - ${labels.length}개 항목, 최대값 ${max.toLocaleString()}, 평균 ${average.toLocaleString()}`\n : `미니 막대 그래프 - ${data.length}개 항목, 최대값 ${max.toLocaleString()}, 평균 ${average.toLocaleString()}`;\n\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null);\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={chartLabel}\n style={mergeStyles({ width: \"100%\" }, resolveDot(dot), style)}\n {...props}\n >\n {/* 그래프 영역 */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"space-between\",\n gap: \"0.5rem\",\n paddingLeft: \"0.5rem\",\n paddingRight: \"0.5rem\",\n position: \"relative\",\n height: `${height + 40}px`,\n }}\n >\n {/* 기준선 */}\n <div\n style={{\n position: \"absolute\",\n left: \"0.5rem\",\n right: \"0.5rem\",\n bottom: \"2rem\",\n borderTop: \"1px solid var(--color-border, #e5e7eb)\",\n opacity: 0.5,\n }}\n />\n\n {data.map((value, index) => {\n const isToday = highlightToday && index === todayIdx;\n const barHeight = calculateHeight(value);\n const barColor = isToday ? colors.highlight : colors.default;\n const isHovered = hoveredIndex === index;\n\n return (\n <div\n key={index}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n flex: 1,\n position: \"relative\",\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {/* 툴팁 */}\n {showTooltip && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n marginBottom: \"0.5rem\",\n padding: \"0.25rem 0.5rem\",\n backgroundColor: \"#111827\",\n color: \"#ffffff\",\n fontSize: \"0.75rem\",\n borderRadius: \"0.25rem\",\n opacity: isHovered ? 1 : 0,\n transition: \"opacity 200ms\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n zIndex: 10,\n }}\n >\n {value}개\n <div\n style={{\n position: \"absolute\",\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 0,\n height: 0,\n borderLeft: \"4px solid transparent\",\n borderRight: \"4px solid transparent\",\n borderTop: \"4px solid #111827\",\n }}\n />\n </div>\n )}\n\n {/* 값 표시 (호버 시) */}\n <div\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n color: \"var(--color-foreground, #374151)\",\n marginBottom: \"0.25rem\",\n opacity: isHovered ? 1 : 0,\n transition: \"opacity 200ms\",\n }}\n >\n {value}\n </div>\n\n {/* 막대 */}\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n flex: 1,\n display: \"flex\",\n alignItems: \"flex-end\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n borderTopLeftRadius: \"0.5rem\",\n borderTopRightRadius: \"0.5rem\",\n transition: \"all 500ms ease-out\",\n backgroundColor: barColor,\n height: `${barHeight}px`,\n minHeight: \"8px\",\n transform: isHovered ? \"scaleX(1.05)\" : undefined,\n }}\n >\n {/* 막대 위 점 */}\n {value > 0 && (\n <div\n style={{\n position: \"absolute\",\n top: \"-4px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: \"8px\",\n height: \"8px\",\n backgroundColor: \"var(--color-background, #ffffff)\",\n borderRadius: \"50%\",\n boxShadow: \"0 1px 2px rgba(0,0,0,0.1)\",\n }}\n />\n )}\n </div>\n </div>\n\n {/* 라벨 */}\n {labels && labels[index] && (\n <div\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n marginTop: \"0.5rem\",\n transition: \"color 200ms\",\n color: isToday\n ? \"#9333ea\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n {labels[index]}\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* 통계 정보 */}\n {showStats && (\n <div\n style={{\n marginTop: \"1rem\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n paddingLeft: \"0.5rem\",\n paddingRight: \"0.5rem\",\n }}\n >\n <div>총: {total}</div>\n <div>평균: {average}</div>\n <div>최고: {max}</div>\n </div>\n )}\n </div>\n );\n },\n);\n\nMiniBarChart.displayName = \"MiniBarChart\";\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport type { Color } from \"../../lib/types/common\";\n\n/**\n * SummaryCard 컴포넌트의 props\n * @typedef {Object} SummaryCardProps\n * @property {string} title - 카드 제목\n * @property {string | number} value - 요약 값\n * @property {string} [subtitle] - 부제목\n * @property {IconName | React.ReactNode} [icon] - 아이콘\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\" | \"cyan\"} [color] - 카드 색상\n * @property {\"default\" | \"gradient\" | \"outline\"} [variant=\"default\"] - 카드 스타일 변형\n * @property {string} [href] - 링크 URL\n * @property {() => void} [onClick] - 클릭 핸들러\n * @property {boolean} [loading] - 로딩 상태\n * @property {string | React.ReactNode} [badge] - 배지\n * @property {React.ReactNode} [footer] - 푸터 콘텐츠\n * @property {boolean} [showAction] - 액션 버튼 표시 여부\n * @property {string} [actionLabel] - 액션 버튼 라벨\n * @property {string} [dot] - dot 스타일 유틸리티 문자열\n * @property {React.CSSProperties} [style] - 인라인 스타일\n */\nexport interface SummaryCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title: string;\n value: string | number;\n subtitle?: string;\n icon?: IconName | React.ReactNode;\n color?: Color;\n variant?: \"default\" | \"gradient\" | \"outline\";\n href?: string;\n onClick?: () => void;\n loading?: boolean;\n badge?: string | React.ReactNode;\n footer?: React.ReactNode;\n showAction?: boolean;\n actionLabel?: string;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Color token maps ──────────────────────────────────────────────────────────\n\n/** Background gradient for default variant (light theme) */\nconst DEFAULT_BG_LIGHT: Record<Color, string> = {\n blue: \"linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%)\",\n purple: \"linear-gradient(135deg, #faf5ff 0%, #fce7f3 100%)\",\n green: \"linear-gradient(135deg, #f0fdf4 0%, #d1fae5 100%)\",\n orange: \"linear-gradient(135deg, #fff7ed 0%, #fef3c7 100%)\",\n red: \"linear-gradient(135deg, #fef2f2 0%, #ffe4e6 100%)\",\n indigo: \"linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%)\",\n pink: \"linear-gradient(135deg, #fdf2f8 0%, #ffe4e6 100%)\",\n gray: \"linear-gradient(135deg, #f9fafb 0%, #f3f4f6 100%)\",\n cyan: \"linear-gradient(135deg, #ecfeff 0%, #cffafe 100%)\",\n primary:\n \"linear-gradient(135deg, rgba(var(--color-primary-rgb, 6,182,212),0.1) 0%, rgba(var(--color-primary-rgb, 6,182,212),0.05) 100%)\",\n};\n\n/** Background gradient for default variant (dark theme, as rgba overlay) */\nconst DEFAULT_BG_DARK: Record<Color, string> = {\n blue: \"linear-gradient(135deg, rgba(99,102,241,0.2) 0%, rgba(99,102,241,0.2) 100%)\",\n purple:\n \"linear-gradient(135deg, rgba(168,85,247,0.2) 0%, rgba(236,72,153,0.2) 100%)\",\n green:\n \"linear-gradient(135deg, rgba(34,197,94,0.2) 0%, rgba(16,185,129,0.2) 100%)\",\n orange:\n \"linear-gradient(135deg, rgba(249,115,22,0.2) 0%, rgba(245,158,11,0.2) 100%)\",\n red: \"linear-gradient(135deg, rgba(239,68,68,0.2) 0%, rgba(244,63,94,0.2) 100%)\",\n indigo:\n \"linear-gradient(135deg, rgba(99,102,241,0.2) 0%, rgba(99,102,241,0.2) 100%)\",\n pink: \"linear-gradient(135deg, rgba(236,72,153,0.2) 0%, rgba(244,63,94,0.2) 100%)\",\n gray: \"linear-gradient(135deg, rgba(107,114,128,0.2) 0%, rgba(31,41,55,0.2) 100%)\",\n cyan: \"linear-gradient(135deg, rgba(6,182,212,0.2) 0%, rgba(6,182,212,0.2) 100%)\",\n primary:\n \"linear-gradient(135deg, rgba(var(--color-primary-rgb, 6,182,212),0.2) 0%, rgba(var(--color-primary-rgb, 6,182,212),0.2) 100%)\",\n};\n\n/** Background gradient for gradient variant */\nconst GRADIENT_BG: Record<Color, string> = {\n blue: \"linear-gradient(135deg, #06b6d4 0%, #4f46e5 100%)\",\n purple: \"linear-gradient(135deg, #9333ea 0%, #db2777 100%)\",\n green: \"linear-gradient(135deg, #16a34a 0%, #059669 100%)\",\n orange: \"linear-gradient(135deg, #ea580c 0%, #d97706 100%)\",\n red: \"linear-gradient(135deg, #dc2626 0%, #e11d48 100%)\",\n indigo: \"linear-gradient(135deg, #4f46e5 0%, #06b6d4 100%)\",\n pink: \"linear-gradient(135deg, #db2777 0%, #e11d48 100%)\",\n gray: \"linear-gradient(135deg, #4b5563 0%, #374151 100%)\",\n cyan: \"linear-gradient(135deg, #0891b2 0%, #0d9488 100%)\",\n primary:\n \"linear-gradient(135deg, var(--color-primary, #0891b2) 0%, var(--color-primary, #0d9488) 100%)\",\n};\n\n/** Border color for outline variant (light) */\nconst OUTLINE_BORDER_LIGHT: Record<Color, string> = {\n blue: \"#93c5fd\",\n purple: \"#d8b4fe\",\n green: \"#86efac\",\n orange: \"#fdba74\",\n red: \"#fca5a5\",\n indigo: \"#a5b4fc\",\n pink: \"#f9a8d4\",\n gray: \"#d1d5db\",\n cyan: \"#67e8f9\",\n primary: \"var(--color-primary, #67e8f9)\",\n};\n\n/** Border color for outline variant (dark) */\nconst OUTLINE_BORDER_DARK: Record<Color, string> = {\n blue: \"#2563eb\",\n purple: \"#9333ea\",\n green: \"#16a34a\",\n orange: \"#ea580c\",\n red: \"#dc2626\",\n indigo: \"#4f46e5\",\n pink: \"#db2777\",\n gray: \"#4b5563\",\n cyan: \"#0891b2\",\n primary: \"var(--color-primary, #0891b2)\",\n};\n\n/** Icon container background for default/outline variants */\nconst ICON_BG_LIGHT: Record<Color, string> = {\n blue: \"#dbeafe\",\n purple: \"#f3e8ff\",\n green: \"#dcfce7\",\n orange: \"#ffedd5\",\n red: \"#fee2e2\",\n indigo: \"#e0e7ff\",\n pink: \"#fce7f3\",\n gray: \"#f3f4f6\",\n cyan: \"#cffafe\",\n primary: \"rgba(var(--color-primary-rgb, 6,182,212),0.15)\",\n};\n\n/** Button gradient background */\nconst BUTTON_BG: Record<Color, string> = {\n blue: \"linear-gradient(90deg, #0891b2 0%, #4f46e5 100%)\",\n purple: \"linear-gradient(90deg, #9333ea 0%, #db2777 100%)\",\n green: \"linear-gradient(90deg, #16a34a 0%, #059669 100%)\",\n orange: \"linear-gradient(90deg, #ea580c 0%, #d97706 100%)\",\n red: \"linear-gradient(90deg, #dc2626 0%, #e11d48 100%)\",\n indigo: \"linear-gradient(90deg, #4f46e5 0%, #0891b2 100%)\",\n pink: \"linear-gradient(90deg, #db2777 0%, #e11d48 100%)\",\n gray: \"linear-gradient(90deg, #4b5563 0%, #374151 100%)\",\n cyan: \"linear-gradient(90deg, #0891b2 0%, #0d9488 100%)\",\n primary:\n \"linear-gradient(90deg, var(--color-primary, #0891b2) 0%, var(--color-primary, #0d9488) 100%)\",\n};\n\n/** Decorative orb accent color (rgba) */\nconst ACCENT_COLOR: Record<Color, string> = {\n blue: \"rgba(34,211,238,0.1)\",\n purple: \"rgba(192,132,252,0.1)\",\n green: \"rgba(74,222,128,0.1)\",\n orange: \"rgba(251,146,60,0.1)\",\n red: \"rgba(248,113,113,0.1)\",\n indigo: \"rgba(129,140,248,0.1)\",\n pink: \"rgba(244,114,182,0.1)\",\n gray: \"rgba(156,163,175,0.1)\",\n cyan: \"rgba(34,211,238,0.1)\",\n primary: \"rgba(var(--color-primary-rgb, 6,182,212),0.1)\",\n};\n\n// ─── Static style objects ──────────────────────────────────────────────────────\n\nconst CARD_BASE: React.CSSProperties = {\n padding: \"1.5rem\",\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: \"220px\",\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: \"0.75rem\",\n transition: \"box-shadow 300ms ease, transform 300ms ease\",\n};\n\nconst HEADER_ROW: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: \"1rem\",\n position: \"relative\",\n zIndex: 10,\n};\n\nconst HEADER_LEFT: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst ICON_WRAP_GRADIENT: React.CSSProperties = {\n padding: \"0.5rem\",\n borderRadius: \"0.5rem\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n};\n\nconst BADGE_WRAP: React.CSSProperties = {\n fontSize: \"0.75rem\",\n fontWeight: 500,\n};\n\nconst VALUE_WRAP: React.CSSProperties = {\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n position: \"relative\",\n zIndex: 10,\n};\n\nconst FOOTER_WRAP: React.CSSProperties = {\n position: \"relative\",\n zIndex: 10,\n marginBottom: \"1rem\",\n};\n\nconst ACTION_WRAP: React.CSSProperties = {\n position: \"relative\",\n zIndex: 10,\n};\n\nconst ACTION_BUTTON_BASE: React.CSSProperties = {\n display: \"block\",\n width: \"100%\",\n textAlign: \"center\",\n paddingTop: \"0.75rem\",\n paddingBottom: \"0.75rem\",\n borderRadius: \"0.5rem\",\n fontWeight: 600,\n color: \"#ffffff\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"box-shadow 200ms ease, transform 200ms ease\",\n textDecoration: \"none\",\n};\n\nconst LOADING_SKELETON: React.CSSProperties = {\n height: \"2.5rem\",\n backgroundColor: \"#e5e7eb\",\n borderRadius: \"0.25rem\",\n marginBottom: \"0.5rem\",\n // animation not expressible in CSSProperties; handled via className fallback below\n};\n\n/**\n * SummaryCard 컴포넌트 / SummaryCard component\n *\n * 요약 정보를 표시하는 카드 컴포넌트입니다.\n * 제목, 값, 부제목, 아이콘을 포함하며, 클릭 가능한 링크나 액션 버튼을 지원합니다.\n *\n * Card component that displays summary information.\n * Includes title, value, subtitle, icon, and supports clickable links or action buttons.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <SummaryCard\n * title=\"총 매출\"\n * value=\"₩10,000,000\"\n * subtitle=\"이번 달\"\n * icon=\"dollarSign\"\n * />\n *\n * @example\n * // 클릭 가능한 카드 / Clickable card\n * <SummaryCard\n * title=\"주문\"\n * value=\"1,234\"\n * href=\"/orders\"\n * showAction\n * actionLabel=\"자세히 보기\"\n * color=\"blue\"\n * variant=\"gradient\"\n * />\n *\n * @param {SummaryCardProps} props - SummaryCard 컴포넌트의 props / SummaryCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} SummaryCard 컴포넌트 / SummaryCard component\n */\nexport const SummaryCard = React.forwardRef<HTMLDivElement, SummaryCardProps>(\n (\n {\n title,\n value,\n subtitle,\n icon,\n color = \"blue\",\n variant = \"default\",\n href,\n onClick,\n loading = false,\n badge,\n footer,\n showAction = true,\n actionLabel = \"자세히 보기\",\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [isCardHovered, setIsCardHovered] = useState(false);\n const [isActionHovered, setIsActionHovered] = useState(false);\n\n const isGradient = variant === \"gradient\";\n const isTextWhite = isGradient;\n\n // ── Card container style ─────────────────────────────────────────────────\n const cardStyle = useMemo((): React.CSSProperties => {\n let base: React.CSSProperties = { ...CARD_BASE };\n\n if (variant === \"default\") {\n // Using light gradient; dark mode handled via CSS variable fallback isn't\n // feasible without className — we pick the light token as default, acceptable\n // since the design system consumer can override via `style` prop.\n base = {\n ...base,\n background: DEFAULT_BG_LIGHT[color],\n boxShadow: isCardHovered\n ? \"0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)\"\n : \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)\",\n };\n } else if (variant === \"gradient\") {\n base = {\n ...base,\n background: GRADIENT_BG[color],\n boxShadow: isCardHovered\n ? \"0 25px 50px -12px rgba(0,0,0,0.25)\"\n : \"0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)\",\n };\n } else {\n // outline\n base = {\n ...base,\n background: \"transparent\",\n border: `2px solid ${OUTLINE_BORDER_LIGHT[color]}`,\n boxShadow: isCardHovered\n ? \"0 10px 15px -3px rgba(0,0,0,0.1)\"\n : \"none\",\n };\n }\n\n return mergeStyles(base, resolveDot(dotProp), style);\n }, [variant, color, isCardHovered, dotProp, style]);\n\n // ── Icon container style ─────────────────────────────────────────────────\n const iconWrapStyle = useMemo((): React.CSSProperties => {\n if (isGradient) return ICON_WRAP_GRADIENT;\n return {\n padding: \"0.5rem\",\n borderRadius: \"0.5rem\",\n backgroundColor: ICON_BG_LIGHT[color],\n };\n }, [isGradient, color]);\n\n // ── Title style ──────────────────────────────────────────────────────────\n const titleStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"1.125rem\",\n fontWeight: 600,\n marginLeft: \"0.75rem\",\n color: isTextWhite ? \"#ffffff\" : undefined,\n }),\n [isTextWhite],\n );\n\n // ── Badge pill style ─────────────────────────────────────────────────────\n const badgePillStyle = useMemo((): React.CSSProperties => {\n if (isGradient) {\n return {\n padding: \"0.25rem 0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n color: \"#ffffff\",\n };\n }\n return {\n padding: \"0.25rem 0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: \"rgba(255,255,255,0.5)\",\n color: \"#374151\",\n };\n }, [isGradient]);\n\n // ── Value style ──────────────────────────────────────────────────────────\n const valueStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"1.875rem\",\n fontWeight: 700,\n marginBottom: \"0.5rem\",\n color: isTextWhite ? \"#ffffff\" : undefined,\n }),\n [isTextWhite],\n );\n\n // ── Subtitle style ───────────────────────────────────────────────────────\n const subtitleStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"0.875rem\",\n marginBottom: \"1rem\",\n color: isTextWhite ? \"rgba(255,255,255,0.9)\" : \"#4b5563\",\n }),\n [isTextWhite],\n );\n\n // ── Action button style ──────────────────────────────────────────────────\n const actionStyle = useMemo(\n (): React.CSSProperties => ({\n ...ACTION_BUTTON_BASE,\n background: BUTTON_BG[color],\n boxShadow: isActionHovered\n ? \"0 10px 15px -3px rgba(0,0,0,0.2)\"\n : \"none\",\n transform:\n isCardHovered && isActionHovered ? \"scale(1.02)\" : \"scale(1)\",\n }),\n [color, isActionHovered, isCardHovered],\n );\n\n // ── Decorative orb styles ────────────────────────────────────────────────\n const orbTopRight: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"8rem\",\n height: \"8rem\",\n borderRadius: \"9999px\",\n background: `radial-gradient(circle, ${ACCENT_COLOR[color]} 0%, transparent 70%)`,\n transform: \"translate(4rem, -4rem)\",\n pointerEvents: \"none\",\n };\n\n const orbBottomLeft: React.CSSProperties = {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n width: \"6rem\",\n height: \"6rem\",\n borderRadius: \"9999px\",\n background: `radial-gradient(circle, ${ACCENT_COLOR[color]} 0%, transparent 70%)`,\n transform: \"translate(-3rem, 3rem)\",\n pointerEvents: \"none\",\n };\n\n const formatValue = (val: string | number): string =>\n typeof val === \"number\" ? val.toLocaleString() : val;\n\n return (\n <div\n ref={ref}\n style={cardStyle}\n onMouseEnter={() => setIsCardHovered(true)}\n onMouseLeave={() => setIsCardHovered(false)}\n {...props}\n >\n {/* Decorative orbs */}\n <div style={orbTopRight} />\n <div style={orbBottomLeft} />\n\n {/* Header */}\n <div style={HEADER_ROW}>\n <div style={HEADER_LEFT}>\n {icon && (\n <div style={iconWrapStyle}>\n {typeof icon === \"string\" ? (\n <Icon\n name={icon as IconName}\n size={24}\n dot={isTextWhite ? \"text-white\" : undefined}\n />\n ) : (\n icon\n )}\n </div>\n )}\n <span style={titleStyle}>{title}</span>\n </div>\n {badge && (\n <div style={BADGE_WRAP}>\n {typeof badge === \"string\" ? (\n <span style={badgePillStyle}>{badge}</span>\n ) : (\n badge\n )}\n </div>\n )}\n </div>\n\n {/* Value area */}\n <div style={VALUE_WRAP}>\n {loading ? (\n <div\n style={{\n ...LOADING_SKELETON,\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n }}\n />\n ) : (\n <>\n <div style={valueStyle}>{formatValue(value)}</div>\n {subtitle && <div style={subtitleStyle}>{subtitle}</div>}\n </>\n )}\n </div>\n\n {/* Footer */}\n {footer && <div style={FOOTER_WRAP}>{footer}</div>}\n\n {/* Action button */}\n {showAction && (href || onClick) && (\n <div style={ACTION_WRAP}>\n {href ? (\n <a\n href={href}\n style={actionStyle}\n onMouseEnter={() => setIsActionHovered(true)}\n onMouseLeave={() => setIsActionHovered(false)}\n >\n {actionLabel}\n </a>\n ) : (\n <button\n type=\"button\"\n onClick={onClick}\n style={actionStyle}\n onMouseEnter={() => setIsActionHovered(true)}\n onMouseLeave={() => setIsActionHovered(false)}\n >\n {actionLabel}\n </button>\n )}\n </div>\n )}\n </div>\n );\n },\n);\n\nSummaryCard.displayName = \"SummaryCard\";\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { formatRelativeTime } from \"../../lib/utils\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\n\n/**\n * NotificationItem 인터페이스\n * @typedef {Object} NotificationItem\n * @property {string} id - 알림 고유 ID\n * @property {string} title - 알림 제목\n * @property {string} message - 알림 메시지\n * @property {Date | string} timestamp - 알림 타임스탬프\n * @property {\"info\" | \"warning\" | \"error\" | \"success\"} [type] - 알림 타입\n * @property {IconName | React.ReactNode} [icon] - 아이콘\n * @property {() => void} [onClick] - 클릭 핸들러\n * @property {string} [href] - 링크 URL\n */\nexport interface NotificationItem {\n id: string;\n title: string;\n message: string;\n timestamp: Date | string;\n type?: \"info\" | \"warning\" | \"error\" | \"success\";\n icon?: IconName | React.ReactNode;\n onClick?: () => void;\n href?: string;\n}\n\n/**\n * NotificationCard 컴포넌트의 props / NotificationCard component props\n * @typedef {Object} NotificationCardProps\n * @property {string} [title=\"알림 및 공지\"] - 카드 제목 / Card title\n * @property {NotificationItem[]} items - 알림 항목 배열 / Notification items array\n * @property {string} [emptyMessage=\"알림이 없습니다.\"] - 빈 상태 메시지 / Empty state message\n * @property {number} [maxItems] - 최대 표시 항목 수 / Maximum items to display\n * @property {() => void} [onViewAll] - 전체 보기 핸들러 / View all handler\n * @property {string} [viewAllLabel=\"모든 알림 보기\"] - 전체 보기 라벨 / View all label\n * @property {boolean} [showHeader=true] - 헤더 표시 여부 / Show header\n * @property {boolean} [showCount=true] - 개수 표시 여부 / Show count\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface NotificationCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title?: string;\n items: NotificationItem[];\n emptyMessage?: string;\n maxItems?: number;\n onViewAll?: () => void;\n viewAllLabel?: string;\n showHeader?: boolean;\n showCount?: boolean;\n emptyState?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Static CSSProperties style constants\n// ---------------------------------------------------------------------------\n\n/** Root card container */\nconst CARD_BASE: React.CSSProperties = {\n backgroundColor: \"var(--color-card, #ffffff)\",\n ...resolveDot(\"rounded-xl p-6\"),\n boxShadow: \"0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px -1px rgba(0,0,0,0.1)\",\n};\n\n/** Header row: flex, align-center, justify-between, mb-4 */\nconst HEADER_ROW: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mb-4\"),\n};\n\nconst HEADER_LEFT: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n};\n\n/** Bell icon wrapper */\nconst BELL_WRAP: React.CSSProperties = {\n ...resolveDot(\"p-2 rounded-lg mr-3\"),\n backgroundColor: \"rgba(249, 115, 22, 0.1)\",\n};\n\n/** Card title */\nconst CARD_TITLE: React.CSSProperties = {\n fontSize: \"1.125rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #111827)\",\n};\n\n/** Count badge */\nconst COUNT_BADGE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"0.125rem 0.625rem\",\n ...resolveDot(\"rounded-full\"),\n fontSize: \"0.75rem\",\n fontWeight: 500,\n backgroundColor: \"rgba(254, 215, 170, 0.8)\",\n color: \"rgba(154, 52, 18, 1)\",\n};\n\n/** Notification list container */\nconst LIST_CONTAINER: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n};\n\n/** Per-type item container background + border */\nconst TYPE_ITEM_STYLES: Record<\n NonNullable<NotificationItem[\"type\"]> | \"default\",\n React.CSSProperties\n> = {\n info: {\n background:\n \"linear-gradient(to right, rgba(238, 242, 255, 1), rgba(238, 242, 255, 1))\",\n borderColor: \"rgba(199, 210, 254, 0.5)\",\n },\n warning: {\n background:\n \"linear-gradient(to right, rgba(255, 247, 237, 1), rgba(254, 242, 242, 1))\",\n borderColor: \"rgba(253, 186, 116, 0.5)\",\n },\n error: {\n background:\n \"linear-gradient(to right, rgba(254, 242, 242, 1), rgba(255, 241, 242, 1))\",\n borderColor: \"rgba(252, 165, 165, 0.5)\",\n },\n success: {\n background:\n \"linear-gradient(to right, rgba(240, 253, 244, 1), rgba(236, 253, 245, 1))\",\n borderColor: \"rgba(134, 239, 172, 0.5)\",\n },\n default: {\n background:\n \"linear-gradient(to right, rgba(249, 250, 251, 1), rgba(243, 244, 246, 1))\",\n borderColor: \"rgba(209, 213, 219, 0.5)\",\n },\n};\n\n/** Per-type dot color */\nconst TYPE_DOT_COLORS: Record<\n NonNullable<NotificationItem[\"type\"]> | \"default\",\n React.CSSProperties\n> = {\n info: { backgroundColor: \"var(--color-primary, #3b82f6)\" },\n warning: { backgroundColor: \"rgba(239, 68, 68, 1)\" },\n error: { backgroundColor: \"rgba(220, 38, 38, 1)\" },\n success: { backgroundColor: \"rgba(34, 197, 94, 1)\" },\n default: { backgroundColor: \"rgba(107, 114, 128, 1)\" },\n};\n\n/** Item container base */\nconst ITEM_BASE: React.CSSProperties = {\n ...resolveDot(\"p-3 rounded-lg\"),\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n};\n\nconst ITEM_INTERACTIVE_BASE: React.CSSProperties = {\n ...ITEM_BASE,\n cursor: \"pointer\",\n transition: \"box-shadow 200ms ease-in-out\",\n};\n\nconst ITEM_HOVER: React.CSSProperties = {\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n};\n\nconst ITEM_INNER: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"flex-start\",\n};\n\nconst DOT_INDICATOR: React.CSSProperties = {\n ...resolveDot(\"w-2 h-2 rounded-full mt-2 mr-3\"),\n flexShrink: 0,\n};\n\nconst ITEM_CONTENT: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst ITEM_HEADER: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mb-1\"),\n};\n\nconst ITEM_TITLE: React.CSSProperties = {\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #111827)\",\n};\n\nconst ITEM_TIME: React.CSSProperties = {\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n ...resolveDot(\"ml-2\"),\n flexShrink: 0,\n};\n\nconst ITEM_MESSAGE: React.CSSProperties = {\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n};\n\n/** Empty state */\nconst EMPTY_STATE: React.CSSProperties = {\n textAlign: \"center\",\n ...resolveDot(\"py-8\"),\n};\n\nconst EMPTY_MESSAGE: React.CSSProperties = {\n color: \"var(--color-muted-foreground, #6b7280)\",\n fontSize: \"0.875rem\",\n};\n\n/** View all button row */\nconst VIEW_ALL_ROW: React.CSSProperties = {\n ...resolveDot(\"mt-4\"),\n textAlign: \"center\",\n};\n\nconst VIEW_ALL_BUTTON_BASE: React.CSSProperties = {\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground, #9ca3af)\",\n fontWeight: 500,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"color 200ms ease-in-out\",\n};\n\nconst VIEW_ALL_BUTTON_HOVER: React.CSSProperties = {\n color: \"var(--color-foreground, #4b5563)\",\n};\n\n// ---------------------------------------------------------------------------\n// NotificationItem row — isolated component for hover state\n// ---------------------------------------------------------------------------\n\ninterface NotificationRowProps {\n item: NotificationItem;\n}\n\nconst NotificationRow: React.FC<NotificationRowProps> = ({ item }) => {\n const [isHovered, setIsHovered] = useState(false);\n const isInteractive = !!(item.onClick || item.href);\n\n const typeKey = (item.type ?? \"default\") as\n | NonNullable<NotificationItem[\"type\"]>\n | \"default\";\n const typeStyle = TYPE_ITEM_STYLES[typeKey];\n const dotColor = TYPE_DOT_COLORS[typeKey];\n\n const containerStyle = useMemo((): React.CSSProperties => {\n const base = isInteractive ? ITEM_INTERACTIVE_BASE : ITEM_BASE;\n return mergeStyles(\n base,\n typeStyle,\n isInteractive && isHovered ? ITEM_HOVER : undefined,\n );\n }, [isInteractive, isHovered, typeStyle]);\n\n const content = (\n <div\n style={containerStyle}\n onMouseEnter={isInteractive ? () => setIsHovered(true) : undefined}\n onMouseLeave={isInteractive ? () => setIsHovered(false) : undefined}\n >\n <div style={ITEM_INNER}>\n <div style={{ ...DOT_INDICATOR, ...dotColor }} />\n <div style={ITEM_CONTENT}>\n <div style={ITEM_HEADER}>\n <span style={ITEM_TITLE}>{item.title}</span>\n <time\n dateTime={\n item.timestamp instanceof Date\n ? item.timestamp.toISOString()\n : typeof item.timestamp === \"string\"\n ? item.timestamp\n : undefined\n }\n style={ITEM_TIME}\n >\n {formatRelativeTime(item.timestamp)}\n </time>\n </div>\n <p style={ITEM_MESSAGE}>{item.message}</p>\n </div>\n </div>\n </div>\n );\n\n if (item.href) {\n return (\n <a href={item.href} style={{ display: \"block\", textDecoration: \"none\" }}>\n {content}\n </a>\n );\n }\n\n if (item.onClick) {\n return (\n <div onClick={item.onClick} style={{ cursor: \"pointer\" }}>\n {content}\n </div>\n );\n }\n\n return <div>{content}</div>;\n};\n\n// ---------------------------------------------------------------------------\n// NotificationCard\n// ---------------------------------------------------------------------------\n\n/**\n * NotificationCard 컴포넌트 / NotificationCard component\n *\n * 알림 목록을 표시하는 카드 컴포넌트입니다.\n * 여러 알림 항목을 표시하며, 타입별로 다른 스타일을 적용할 수 있습니다.\n *\n * Card component that displays a list of notifications.\n * Shows multiple notification items and can apply different styles by type.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <NotificationCard\n * items={[\n * {\n * id: \"1\",\n * title: \"새 주문\",\n * message: \"주문 #1234가 생성되었습니다\",\n * timestamp: new Date(),\n * type: \"success\"\n * }\n * ]}\n * />\n *\n * @example\n * // 최대 항목 수 제한 / Maximum items limit\n * <NotificationCard\n * title=\"최근 알림\"\n * items={notifications}\n * maxItems={5}\n * onViewAll={() => navigate(\"/notifications\")}\n * showCount\n * />\n *\n * @param {NotificationCardProps} props - NotificationCard 컴포넌트의 props / NotificationCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} NotificationCard 컴포넌트 / NotificationCard component\n */\nexport const NotificationCard = React.forwardRef<\n HTMLDivElement,\n NotificationCardProps\n>(\n (\n {\n title = \"알림 및 공지\",\n items,\n emptyMessage = \"알림이 없습니다.\",\n maxItems,\n onViewAll,\n viewAllLabel = \"모든 알림 보기\",\n showHeader = true,\n showCount = true,\n emptyState,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [viewAllHovered, setViewAllHovered] = useState(false);\n\n const displayItems = maxItems ? items.slice(0, maxItems) : items;\n const hasMore = maxItems && items.length > maxItems;\n\n const rootStyle = useMemo(\n () => mergeStyles(CARD_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n const viewAllButtonStyle = useMemo(\n () =>\n mergeStyles(\n VIEW_ALL_BUTTON_BASE,\n viewAllHovered ? VIEW_ALL_BUTTON_HOVER : undefined,\n ),\n [viewAllHovered],\n );\n\n return (\n <div ref={ref} style={rootStyle} {...props}>\n {/* 헤더 */}\n {showHeader && (\n <div style={HEADER_ROW}>\n <div style={HEADER_LEFT}>\n <div style={BELL_WRAP}>\n <Icon name=\"bell\" size={24} dot=\"text-orange-600\" />\n </div>\n <h3 style={CARD_TITLE}>{title}</h3>\n </div>\n {showCount && items.length > 0 && (\n <span style={COUNT_BADGE}>{items.length}개</span>\n )}\n </div>\n )}\n\n {/* 알림 목록 */}\n {displayItems.length > 0 ? (\n <div style={LIST_CONTAINER}>\n {displayItems.map((item) => (\n <NotificationRow key={item.id} item={item} />\n ))}\n </div>\n ) : emptyState ? (\n emptyState\n ) : (\n <div style={EMPTY_STATE}>\n <span\n style={{\n display: \"block\",\n width: \"3rem\",\n height: \"3rem\",\n margin: \"0 auto 0.75rem\",\n color: \"var(--color-muted-foreground, #9ca3af)\",\n }}\n >\n <Icon name=\"bell\" size={48} />\n </span>\n <p style={EMPTY_MESSAGE}>{emptyMessage}</p>\n </div>\n )}\n\n {/* 더 보기 */}\n {hasMore && onViewAll && (\n <div style={VIEW_ALL_ROW}>\n <button\n onClick={onViewAll}\n style={viewAllButtonStyle}\n onMouseEnter={() => setViewAllHovered(true)}\n onMouseLeave={() => setViewAllHovered(false)}\n >\n {viewAllLabel} ({items.length - (maxItems || 0)}개 더)\n </button>\n </div>\n )}\n </div>\n );\n },\n);\n\nNotificationCard.displayName = \"NotificationCard\";\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport { MiniBarChart } from \"./MiniBarChart\";\nimport type { Color } from \"../../lib/types/common\";\n\n/**\n * MetricCard 컴포넌트의 props / MetricCard component props\n * @typedef {Object} MetricCardProps\n * @property {string} title - 카드 제목 / Card title\n * @property {string | number} value - 메트릭 값 / Metric value\n * @property {string} [description] - 카드 설명 / Card description\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {Object} [trend] - 추세 정보 / Trend information\n * @property {number} trend.value - 추세 값 / Trend value\n * @property {string} trend.label - 추세 라벨 / Trend label\n * @property {boolean} [trend.positive] - 긍정적 추세 여부 / Positive trend\n * @property {number[]} [chartData] - 차트 데이터 / Chart data\n * @property {string[]} [chartLabels] - 차트 라벨 / Chart labels\n * @property {\"default\" | \"gradient\" | \"outline\" | \"elevated\"} [variant=\"default\"] - 카드 스타일 변형 / Card style variant\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\"} [color] - 카드 색상 / Card color\n * @property {boolean} [loading] - 로딩 상태 / Loading state\n * @property {boolean} [showChart] - 차트 표시 여부 / Show chart\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface MetricCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title: string;\n value: string | number;\n description?: string;\n icon?: IconName | React.ReactNode;\n trend?: {\n value: number;\n label: string;\n positive?: boolean;\n };\n chartData?: number[];\n chartLabels?: string[];\n variant?: \"default\" | \"gradient\" | \"outline\" | \"elevated\";\n color?: Color;\n loading?: boolean;\n showChart?: boolean;\n dot?: string;\n}\n\n// Color token maps for variants\nconst colorTokens: Record<\n Color,\n {\n gradientBg: string;\n defaultBorder: string;\n defaultBg: string;\n iconBg: string;\n iconText: string;\n badgeBg: string;\n badgeText: string;\n }\n> = {\n blue: {\n gradientBg: \"linear-gradient(135deg, #3b82f6, #2563eb)\",\n defaultBorder: \"#bfdbfe\",\n defaultBg: \"rgba(239,246,255,0.5)\",\n iconBg: \"rgba(219,234,254,0.3)\",\n iconText: \"#2563eb\",\n badgeBg: \"rgba(239,246,255,0.3)\",\n badgeText: \"#1d4ed8\",\n },\n purple: {\n gradientBg: \"linear-gradient(135deg, #a855f7, #9333ea)\",\n defaultBorder: \"#e9d5ff\",\n defaultBg: \"rgba(250,245,255,0.5)\",\n iconBg: \"rgba(233,213,255,0.3)\",\n iconText: \"#9333ea\",\n badgeBg: \"rgba(250,245,255,0.3)\",\n badgeText: \"#7e22ce\",\n },\n green: {\n gradientBg: \"linear-gradient(135deg, #22c55e, #16a34a)\",\n defaultBorder: \"#bbf7d0\",\n defaultBg: \"rgba(240,253,244,0.5)\",\n iconBg: \"rgba(187,247,208,0.3)\",\n iconText: \"#16a34a\",\n badgeBg: \"rgba(240,253,244,0.3)\",\n badgeText: \"#15803d\",\n },\n orange: {\n gradientBg: \"linear-gradient(135deg, #f97316, #ea580c)\",\n defaultBorder: \"#fed7aa\",\n defaultBg: \"rgba(255,247,237,0.5)\",\n iconBg: \"rgba(254,215,170,0.3)\",\n iconText: \"#ea580c\",\n badgeBg: \"rgba(255,247,237,0.3)\",\n badgeText: \"#c2410c\",\n },\n red: {\n gradientBg: \"linear-gradient(135deg, #ef4444, #dc2626)\",\n defaultBorder: \"#fecaca\",\n defaultBg: \"rgba(254,242,242,0.5)\",\n iconBg: \"rgba(254,202,202,0.3)\",\n iconText: \"#dc2626\",\n badgeBg: \"rgba(254,242,242,0.3)\",\n badgeText: \"#b91c1c\",\n },\n indigo: {\n gradientBg: \"linear-gradient(135deg, #6366f1, #4f46e5)\",\n defaultBorder: \"#c7d2fe\",\n defaultBg: \"rgba(238,242,255,0.5)\",\n iconBg: \"rgba(199,210,254,0.3)\",\n iconText: \"#4f46e5\",\n badgeBg: \"rgba(238,242,255,0.3)\",\n badgeText: \"#4338ca\",\n },\n pink: {\n gradientBg: \"linear-gradient(135deg, #ec4899, #db2777)\",\n defaultBorder: \"#fbcfe8\",\n defaultBg: \"rgba(253,242,248,0.5)\",\n iconBg: \"rgba(251,207,232,0.3)\",\n iconText: \"#db2777\",\n badgeBg: \"rgba(253,242,248,0.3)\",\n badgeText: \"#be185d\",\n },\n gray: {\n gradientBg: \"linear-gradient(135deg, #6b7280, #4b5563)\",\n defaultBorder: \"#e5e7eb\",\n defaultBg: \"rgba(249,250,251,0.5)\",\n iconBg: \"rgba(229,231,235,0.3)\",\n iconText: \"#4b5563\",\n badgeBg: \"rgba(249,250,251,0.3)\",\n badgeText: \"#374151\",\n },\n cyan: {\n gradientBg: \"linear-gradient(135deg, #06b6d4, #0891b2)\",\n defaultBorder: \"#a5f3fc\",\n defaultBg: \"rgba(236,254,255,0.5)\",\n iconBg: \"rgba(165,243,252,0.3)\",\n iconText: \"#0891b2\",\n badgeBg: \"rgba(236,254,255,0.3)\",\n badgeText: \"#0e7490\",\n },\n primary: {\n gradientBg:\n \"linear-gradient(135deg, var(--color-primary, #06b6d4), var(--color-primary, #0891b2))\",\n defaultBorder: \"var(--color-primary, #a5f3fc)\",\n defaultBg: \"rgba(var(--color-primary-rgb, 6,182,212),0.05)\",\n iconBg: \"rgba(var(--color-primary-rgb, 6,182,212),0.15)\",\n iconText: \"var(--color-primary, #0891b2)\",\n badgeBg: \"rgba(var(--color-primary-rgb, 6,182,212),0.1)\",\n badgeText: \"var(--color-primary, #0e7490)\",\n },\n};\n\n/**\n * MetricCard 컴포넌트 / MetricCard component\n *\n * 메트릭 정보를 표시하는 카드 컴포넌트입니다.\n * StatCard와 유사하지만 차트 데이터를 포함할 수 있습니다.\n *\n * Card component that displays metric information.\n * Similar to StatCard but can include chart data.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <MetricCard\n * title=\"페이지뷰\"\n * value=\"10,234\"\n * description=\"오늘\"\n * icon=\"eye\"\n * />\n *\n * @example\n * // 차트 포함 / With chart\n * <MetricCard\n * title=\"방문자\"\n * value=\"5,678\"\n * chartData={[100, 200, 150, 300, 250]}\n * chartLabels={[\"월\", \"화\", \"수\", \"목\", \"금\"]}\n * showChart\n * color=\"blue\"\n * />\n *\n * @param {MetricCardProps} props - MetricCard 컴포넌트의 props / MetricCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} MetricCard 컴포넌트 / MetricCard component\n */\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n (\n {\n title,\n value,\n description,\n icon,\n trend,\n chartData,\n chartLabels,\n variant = \"elevated\",\n color = \"blue\",\n loading = false,\n showChart = false,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const tokens = colorTokens[color] || colorTokens.blue;\n const isGradient = variant === \"gradient\";\n\n const containerStyle = useMemo((): React.CSSProperties => {\n const base: React.CSSProperties = {\n padding: \"1.5rem\",\n transition: \"all 200ms\",\n borderRadius: variant === \"elevated\" ? \"1.5rem\" : \"1rem\",\n border: \"1px solid\",\n };\n\n switch (variant) {\n case \"gradient\":\n return {\n ...base,\n backgroundImage: tokens.gradientBg,\n borderColor: \"transparent\",\n color: \"#ffffff\",\n };\n case \"default\":\n return {\n ...base,\n borderColor: tokens.defaultBorder,\n backgroundColor: tokens.defaultBg,\n };\n case \"outline\":\n return {\n ...base,\n borderWidth: \"2px\",\n borderColor: tokens.defaultBorder,\n backgroundColor: \"transparent\",\n };\n case \"elevated\":\n default:\n return {\n ...base,\n borderColor: tokens.defaultBorder,\n backgroundColor: \"#ffffff\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1)\",\n };\n }\n }, [variant, tokens]);\n\n const formatValue = (val: string | number): string => {\n if (typeof val === \"number\") {\n return val.toLocaleString();\n }\n return val;\n };\n\n return (\n <div\n ref={ref}\n style={mergeStyles(containerStyle, resolveDot(dot), style)}\n {...props}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n marginBottom: \"1rem\",\n }}\n >\n {/* 아이콘 */}\n {icon && (\n <div\n style={{\n width: \"3rem\",\n height: \"3rem\",\n borderRadius: \"0.5rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n backgroundColor: isGradient\n ? \"rgba(255,255,255,0.2)\"\n : tokens.iconBg,\n }}\n >\n {typeof icon === \"string\" ? (\n <Icon\n name={icon as IconName}\n dot=\"w-6 h-6\"\n style={{ color: isGradient ? \"#ffffff\" : tokens.iconText }}\n />\n ) : (\n icon\n )}\n </div>\n )}\n\n {/* 배지 */}\n {title && (\n <span\n style={{\n fontSize: \"0.875rem\",\n padding: \"0.25rem 0.75rem\",\n borderRadius: \"9999px\",\n fontWeight: 500,\n backgroundColor: isGradient\n ? \"rgba(255,255,255,0.2)\"\n : tokens.badgeBg,\n color: isGradient ? \"#ffffff\" : tokens.badgeText,\n }}\n >\n {title}\n </span>\n )}\n </div>\n\n {/* 값 */}\n {loading ? (\n <div\n style={{\n height: \"2.5rem\",\n backgroundColor: \"#e5e7eb\",\n borderRadius: \"0.25rem\",\n animation: \"pulse 2s infinite\",\n marginBottom: \"0.5rem\",\n }}\n />\n ) : (\n <h3\n style={{\n fontSize: \"1.875rem\",\n fontWeight: 700,\n marginBottom: \"0.25rem\",\n color: isGradient\n ? \"#ffffff\"\n : \"var(--color-foreground, #1f2937)\",\n }}\n >\n {formatValue(value)}\n </h3>\n )}\n\n {/* 설명 */}\n {description && (\n <p\n style={{\n fontSize: \"0.875rem\",\n marginBottom: \"0.75rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--color-muted-foreground, #4b5563)\",\n }}\n >\n {description}\n </p>\n )}\n\n {/* 차트 */}\n {showChart && chartData && chartData.length > 0 && (\n <div style={{ marginTop: \"1rem\", marginBottom: \"0.75rem\" }}>\n <MiniBarChart\n data={chartData}\n labels={chartLabels}\n color={color}\n height={100}\n showStats={false}\n />\n </div>\n )}\n\n {/* 트렌드 */}\n {trend && !loading && (\n <div\n style={{\n marginTop: \"0.75rem\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.25rem\",\n }}\n >\n <span\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n color: trend.positive !== false ? \"#16a34a\" : \"#dc2626\",\n }}\n >\n {trend.positive !== false ? \"↑\" : \"↓\"} {Math.abs(trend.value)}%\n </span>\n <span\n style={{\n fontSize: \"0.75rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.7)\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n {trend.label}\n </span>\n </div>\n )}\n </div>\n );\n },\n);\n\nMetricCard.displayName = \"MetricCard\";\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport type { Color } from \"../../lib/types/common\";\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties;\n\n/**\n * ProgressCard 컴포넌트의 props / ProgressCard component props\n * @typedef {Object} ProgressCardProps\n * @property {string} title - 카드 제목 / Card title\n * @property {number} current - 현재 값 / Current value\n * @property {number} total - 전체 값 / Total value\n * @property {string} [unit] - 단위 / Unit\n * @property {string} [description] - 카드 설명 / Card description\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\" | \"cyan\"} [color] - 카드 색상 / Card color\n * @property {\"default\" | \"gradient\" | \"outline\" | \"elevated\"} [variant=\"default\"] - 카드 스타일 변형 / Card style variant\n * @property {boolean} [showPercentage] - 퍼센트 표시 여부 / Show percentage\n * @property {boolean} [showLabel] - 라벨 표시 여부 / Show label\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - 카드 크기 / Card size\n * @property {boolean} [loading] - 로딩 상태 / Loading state\n * @property {string} [dot] - dot 스타일 유틸리티 문자열 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\nexport interface ProgressCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title: string;\n current: number;\n total: number;\n unit?: string;\n description?: string;\n icon?: IconName | React.ReactNode;\n color?: Color;\n variant?: \"default\" | \"gradient\" | \"outline\" | \"elevated\";\n showPercentage?: boolean;\n showLabel?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n loading?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Color palette — CSS color values per Color token\n// ---------------------------------------------------------------------------\ntype ColorTokens = {\n /** main accent (e.g. progress bar fill) */\n accent: string;\n /** lighter accent for dark-mode text */\n accentLight: string;\n /** card border (light mode) */\n border: string;\n /** card background (light mode, low opacity) */\n bgLight: string;\n /** icon container background */\n iconBg: string;\n /** gradient start */\n gradFrom: string;\n /** gradient end */\n gradTo: string;\n};\n\nconst COLOR_TOKENS: Record<Color, ColorTokens> = {\n blue: {\n accent: \"#3b82f6\",\n accentLight: \"#93c5fd\",\n border: \"#bfdbfe\",\n bgLight: \"rgba(239,246,255,0.5)\",\n iconBg: \"rgba(219,234,254,0.6)\",\n gradFrom: \"#3b82f6\",\n gradTo: \"#2563eb\",\n },\n purple: {\n accent: \"#a855f7\",\n accentLight: \"#d8b4fe\",\n border: \"#e9d5ff\",\n bgLight: \"rgba(250,245,255,0.5)\",\n iconBg: \"rgba(233,213,255,0.6)\",\n gradFrom: \"#a855f7\",\n gradTo: \"#9333ea\",\n },\n green: {\n accent: \"#22c55e\",\n accentLight: \"#86efac\",\n border: \"#bbf7d0\",\n bgLight: \"rgba(240,253,244,0.5)\",\n iconBg: \"rgba(187,247,208,0.6)\",\n gradFrom: \"#22c55e\",\n gradTo: \"#16a34a\",\n },\n orange: {\n accent: \"#f97316\",\n accentLight: \"#fdba74\",\n border: \"#fed7aa\",\n bgLight: \"rgba(255,247,237,0.5)\",\n iconBg: \"rgba(254,215,170,0.6)\",\n gradFrom: \"#f97316\",\n gradTo: \"#ea580c\",\n },\n red: {\n accent: \"#ef4444\",\n accentLight: \"#fca5a5\",\n border: \"#fecaca\",\n bgLight: \"rgba(254,242,242,0.5)\",\n iconBg: \"rgba(254,202,202,0.6)\",\n gradFrom: \"#ef4444\",\n gradTo: \"#dc2626\",\n },\n indigo: {\n accent: \"#6366f1\",\n accentLight: \"#a5b4fc\",\n border: \"#c7d2fe\",\n bgLight: \"rgba(238,242,255,0.5)\",\n iconBg: \"rgba(199,210,254,0.6)\",\n gradFrom: \"#6366f1\",\n gradTo: \"#4f46e5\",\n },\n pink: {\n accent: \"#ec4899\",\n accentLight: \"#f9a8d4\",\n border: \"#fbcfe8\",\n bgLight: \"rgba(253,242,248,0.5)\",\n iconBg: \"rgba(251,207,232,0.6)\",\n gradFrom: \"#ec4899\",\n gradTo: \"#db2777\",\n },\n gray: {\n accent: \"#6b7280\",\n accentLight: \"#9ca3af\",\n border: \"#d1d5db\",\n bgLight: \"rgba(249,250,251,0.5)\",\n iconBg: \"rgba(209,213,219,0.6)\",\n gradFrom: \"#6b7280\",\n gradTo: \"#4b5563\",\n },\n cyan: {\n accent: \"#06b6d4\",\n accentLight: \"#67e8f9\",\n border: \"#a5f3fc\",\n bgLight: \"rgba(236,254,255,0.5)\",\n iconBg: \"rgba(165,243,252,0.6)\",\n gradFrom: \"#06b6d4\",\n gradTo: \"#0891b2\",\n },\n primary: {\n accent: \"var(--color-primary, #06b6d4)\",\n accentLight: \"var(--color-primary, #06b6d4)\",\n border: \"var(--color-primary, #06b6d4)\",\n bgLight: \"rgba(var(--color-primary-rgb, 6,182,212),0.05)\",\n iconBg: \"rgba(var(--color-primary-rgb, 6,182,212),0.15)\",\n gradFrom: \"var(--color-primary, #06b6d4)\",\n gradTo: \"var(--color-primary, #0891b2)\",\n },\n};\n\n// ---------------------------------------------------------------------------\n// Size tokens — CSSProperties equivalents of the old Tailwind sizeStyles\n// ---------------------------------------------------------------------------\ntype SizeTokens = {\n containerPadding: React.CSSProperties;\n iconBox: React.CSSProperties;\n iconInner: React.CSSProperties;\n titleSize: React.CSSProperties;\n valueSize: React.CSSProperties;\n progressHeight: number;\n};\n\nconst SIZE_TOKENS: Record<\"sm\" | \"md\" | \"lg\", SizeTokens> = {\n sm: {\n containerPadding: { padding: \"1rem\" },\n iconBox: { width: \"2rem\", height: \"2rem\" },\n iconInner: { width: \"1rem\", height: \"1rem\" },\n titleSize: { fontSize: \"0.875rem\" },\n valueSize: { fontSize: \"1.25rem\" },\n progressHeight: 6,\n },\n md: {\n containerPadding: { padding: \"1.5rem\" },\n iconBox: { width: \"3rem\", height: \"3rem\" },\n iconInner: { width: \"1.5rem\", height: \"1.5rem\" },\n titleSize: { fontSize: \"1rem\" },\n valueSize: { fontSize: \"1.5rem\" },\n progressHeight: 8,\n },\n lg: {\n containerPadding: { padding: \"2rem\" },\n iconBox: { width: \"4rem\", height: \"4rem\" },\n iconInner: { width: \"2rem\", height: \"2rem\" },\n titleSize: { fontSize: \"1.125rem\" },\n valueSize: { fontSize: \"1.875rem\" },\n progressHeight: 12,\n },\n};\n\n/**\n * ProgressCard 컴포넌트 / ProgressCard component\n *\n * 진행률을 표시하는 카드 컴포넌트입니다.\n * 현재 값과 전체 값을 비교하여 진행률을 시각적으로 표시합니다.\n *\n * Card component that displays progress.\n * Compares current value with total value to visually display progress.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <ProgressCard\n * title=\"목표 달성률\"\n * current={75}\n * total={100}\n * unit=\"%\"\n * description=\"이번 달 목표\"\n * />\n *\n * @example\n * // 퍼센트 표시 / Show percentage\n * <ProgressCard\n * title=\"판매 진행률\"\n * current={150}\n * total={200}\n * showPercentage\n * color=\"green\"\n * variant=\"gradient\"\n * />\n *\n * @param {ProgressCardProps} props - ProgressCard 컴포넌트의 props / ProgressCard component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} ProgressCard 컴포넌트 / ProgressCard component\n */\nexport const ProgressCard = React.forwardRef<HTMLDivElement, ProgressCardProps>(\n (\n {\n title,\n current,\n total,\n unit = \"\",\n description,\n icon,\n color = \"blue\",\n variant = \"elevated\",\n showPercentage = true,\n showLabel = true,\n size = \"md\",\n loading = false,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const tokens = COLOR_TOKENS[color];\n const sizes = SIZE_TOKENS[size];\n const percentage =\n total > 0 ? Math.min(Math.max((current / total) * 100, 0), 100) : 0;\n const isGradient = variant === \"gradient\";\n\n // ------------------------------------------------------------------\n // Container style by variant\n // ------------------------------------------------------------------\n const containerStyle = useMemo((): React.CSSProperties => {\n const base: React.CSSProperties = {\n ...sizes.containerPadding,\n transition: \"all 200ms ease-in-out\",\n borderStyle: \"solid\",\n borderWidth: 1,\n };\n\n switch (variant) {\n case \"gradient\":\n return {\n ...base,\n borderRadius: \"1rem\",\n background: `linear-gradient(135deg, ${tokens.gradFrom}, ${tokens.gradTo})`,\n borderColor: tokens.gradFrom,\n color: \"#ffffff\",\n };\n case \"outline\":\n return {\n ...base,\n borderRadius: \"1rem\",\n borderWidth: 2,\n borderColor: tokens.accent,\n background: \"transparent\",\n };\n case \"elevated\":\n return {\n ...base,\n borderRadius: \"1.5rem\",\n background: \"var(--color-card, #ffffff)\",\n borderColor: tokens.border,\n boxShadow:\n \"0 4px 6px -1px rgba(0,0,0,.07), 0 2px 4px -2px rgba(0,0,0,.05)\",\n };\n case \"default\":\n default:\n return {\n ...base,\n borderRadius: \"1rem\",\n background: tokens.bgLight,\n borderColor: tokens.border,\n };\n }\n }, [variant, tokens, sizes.containerPadding]);\n\n // ------------------------------------------------------------------\n // Icon container style\n // ------------------------------------------------------------------\n const iconContainerStyle = useMemo(\n (): React.CSSProperties => ({\n ...sizes.iconBox,\n borderRadius: \"0.5rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n background: isGradient ? \"rgba(255,255,255,0.2)\" : tokens.iconBg,\n }),\n [sizes.iconBox, isGradient, tokens.iconBg],\n );\n\n // ------------------------------------------------------------------\n // Text colors derived from variant / dark-mode via CSS vars\n // ------------------------------------------------------------------\n const titleStyle = useMemo(\n (): React.CSSProperties => ({\n ...sizes.titleSize,\n fontWeight: 600,\n marginBottom: \"0.25rem\",\n color: isGradient ? \"#ffffff\" : \"var(--color-foreground, #1f2937)\",\n }),\n [sizes.titleSize, isGradient],\n );\n\n const descriptionStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"0.875rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }),\n [isGradient],\n );\n\n const valueStyle = useMemo(\n (): React.CSSProperties => ({\n ...sizes.valueSize,\n fontWeight: 700,\n color: isGradient ? \"#ffffff\" : tokens.accent,\n }),\n [sizes.valueSize, isGradient, tokens.accent],\n );\n\n const totalLabelStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"0.875rem\",\n color: isGradient\n ? \"rgba(255,255,255,0.8)\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }),\n [isGradient],\n );\n\n const percentageLabelStyle = useMemo(\n (): React.CSSProperties => ({\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: isGradient ? \"rgba(255,255,255,0.9)\" : tokens.accent,\n }),\n [isGradient, tokens.accent],\n );\n\n // ------------------------------------------------------------------\n // Progress bar track + fill\n // ------------------------------------------------------------------\n const progressTrackStyle = useMemo(\n (): React.CSSProperties => ({\n width: \"100%\",\n height: sizes.progressHeight,\n borderRadius: 9999,\n overflow: \"hidden\",\n background: isGradient\n ? \"rgba(255,255,255,0.25)\"\n : \"var(--color-muted, #e5e7eb)\",\n }),\n [sizes.progressHeight, isGradient],\n );\n\n const progressFillStyle = useMemo(\n (): React.CSSProperties => ({\n height: \"100%\",\n borderRadius: 9999,\n transition: \"width 500ms ease-in-out\",\n width: `${percentage}%`,\n background: isGradient\n ? `linear-gradient(90deg, rgba(255,255,255,0.7), rgba(255,255,255,0.9))`\n : tokens.accent,\n }),\n [percentage, isGradient, tokens.accent],\n );\n\n // ------------------------------------------------------------------\n // Merge final container style with dot prop + consumer style override\n // ------------------------------------------------------------------\n const computedStyle = useMemo(\n () => mergeStyles(containerStyle, resolveDot(dotProp), style),\n [containerStyle, dotProp, style],\n );\n\n // Icon dot style for size\n const iconDot = `w-${size === \"sm\" ? \"4\" : size === \"md\" ? \"6\" : \"8\"} h-${size === \"sm\" ? \"4\" : size === \"md\" ? \"6\" : \"8\"}`;\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {/* Header row */}\n <div style={s(\"flex items-start justify-between mb-4\")}>\n {/* Icon */}\n {icon && (\n <div style={iconContainerStyle}>\n {typeof icon === \"string\" ? (\n <Icon\n name={icon as IconName}\n dot={iconDot}\n style={\n isGradient ? { color: \"#ffffff\" } : { color: tokens.accent }\n }\n />\n ) : (\n icon\n )}\n </div>\n )}\n\n {/* Title + description */}\n <div\n style={mergeStyles(\n s(\"flex-1\"),\n icon ? { marginLeft: \"1rem\" } : undefined,\n )}\n >\n <h3 style={titleStyle}>{title}</h3>\n {description && <p style={descriptionStyle}>{description}</p>}\n </div>\n </div>\n\n {/* Progress section */}\n {loading ? (\n <div\n style={{ display: \"flex\", flexDirection: \"column\", gap: \"0.5rem\" }}\n >\n <div\n style={{\n height: \"1rem\",\n borderRadius: \"0.25rem\",\n background: \"var(--color-muted, #e5e7eb)\",\n animation: \"pulse 2s cubic-bezier(0.4,0,0.6,1) infinite\",\n }}\n />\n <div\n style={{\n height: sizes.progressHeight,\n borderRadius: \"0.25rem\",\n background: \"var(--color-muted, #e5e7eb)\",\n animation: \"pulse 2s cubic-bezier(0.4,0,0.6,1) infinite\",\n }}\n />\n </div>\n ) : (\n <>\n {/* Value row */}\n <div style={s(\"flex items-baseline justify-between mb-2\")}>\n <span style={valueStyle}>\n {current.toLocaleString()}\n {unit && (\n <span style={{ fontSize: \"0.875rem\", marginLeft: \"0.25rem\" }}>\n {unit}\n </span>\n )}\n </span>\n {showLabel && (\n <span style={totalLabelStyle}>\n / {total.toLocaleString()}\n {unit && (\n <span style={{ marginLeft: \"0.25rem\" }}>{unit}</span>\n )}\n </span>\n )}\n </div>\n\n {/* Progress bar */}\n <div style={progressTrackStyle}>\n <div style={progressFillStyle} />\n </div>\n\n {/* Percentage label */}\n {showPercentage && (\n <div style={s(\"mt-2 flex justify-end\")}>\n <span style={percentageLabelStyle}>\n {percentage.toFixed(1)}%\n </span>\n </div>\n )}\n </>\n )}\n </div>\n );\n },\n);\n\nProgressCard.displayName = \"ProgressCard\";\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ── Base styles ────────────────────────────────────────────────────────────\n\nconst TABLE_BASE: React.CSSProperties = {\n width: \"100%\",\n captionSide: \"bottom\",\n fontSize: \"0.875rem\",\n borderCollapse: \"collapse\",\n};\n\nconst THEAD_BASE: React.CSSProperties = {\n borderBottom: \"1px solid var(--color-border)\",\n};\n\nconst TBODY_BASE: React.CSSProperties = {};\n\nconst TFOOT_BASE: React.CSSProperties = {\n borderTop: \"1px solid var(--color-border)\",\n fontWeight: 500,\n};\n\nconst TR_BASE: React.CSSProperties = {\n borderBottom: \"1px solid var(--color-border)\",\n transition: \"background-color 150ms\",\n};\n\nconst TH_BASE: React.CSSProperties = {\n ...resolveDot(\"h-12 px-4\"),\n textAlign: \"left\",\n verticalAlign: \"middle\",\n fontWeight: 500,\n color: \"var(--color-muted-foreground)\",\n};\n\nconst TD_BASE: React.CSSProperties = {\n ...resolveDot(\"p-4\"),\n verticalAlign: \"middle\",\n};\n\nconst CAPTION_BASE: React.CSSProperties = {\n ...resolveDot(\"mt-4\"),\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground)\",\n};\n\n// ── Variant styles ─────────────────────────────────────────────────────────\n\nconst TABLE_VARIANT: Record<\n \"default\" | \"bordered\" | \"striped\",\n React.CSSProperties\n> = {\n default: {},\n bordered: {\n border: \"1px solid var(--color-border)\",\n },\n striped: {},\n};\n\n// ── Size styles (applied to th/td padding via context) ─────────────────────\n\nconst SIZE_PADDING: Record<\n \"sm\" | \"md\" | \"lg\",\n {\n th: React.CSSProperties;\n td: React.CSSProperties;\n fontSize: React.CSSProperties;\n }\n> = {\n sm: {\n th: { ...resolveDot(\"px-3 h-10\") },\n td: { ...resolveDot(\"py-2 px-3\") },\n fontSize: { fontSize: \"0.8125rem\" },\n },\n md: {\n th: {},\n td: {},\n fontSize: {},\n },\n lg: {\n th: { padding: \"0 1.25rem\", height: \"3.5rem\" },\n td: { padding: \"1.25rem\" },\n fontSize: { fontSize: \"1rem\" },\n },\n};\n\n// ── Context ────────────────────────────────────────────────────────────────\n\ninterface TableContextValue {\n variant: \"default\" | \"bordered\" | \"striped\";\n size: \"sm\" | \"md\" | \"lg\";\n}\n\nconst TableContext = React.createContext<TableContextValue>({\n variant: \"default\",\n size: \"md\",\n});\n\n// ── Interfaces ─────────────────────────────────────────────────────────────\n\n/**\n * Table 컴포넌트의 props / Table component props\n * @typedef {Object} TableProps\n * @property {React.ReactNode} children - TableHeader, TableBody, TableFooter 등 / TableHeader, TableBody, TableFooter, etc.\n * @property {\"default\" | \"bordered\" | \"striped\"} [variant=\"default\"] - Table 스타일 변형 / Table style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Table 크기 / Table size\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableProps extends Omit<\n React.HTMLAttributes<HTMLTableElement>,\n \"className\"\n> {\n children: React.ReactNode;\n variant?: \"default\" | \"bordered\" | \"striped\";\n size?: \"sm\" | \"md\" | \"lg\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableHeader 컴포넌트의 props / TableHeader component props\n * @typedef {Object} TableHeaderProps\n * @property {React.ReactNode} children - TableHead 컴포넌트들 / TableHead components\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableHeaderProps extends Omit<\n React.HTMLAttributes<HTMLTableSectionElement>,\n \"className\"\n> {\n children: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableBody 컴포넌트의 props / TableBody component props\n * @typedef {Object} TableBodyProps\n * @property {React.ReactNode} children - TableRow 컴포넌트들 / TableRow components\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableBodyProps extends Omit<\n React.HTMLAttributes<HTMLTableSectionElement>,\n \"className\"\n> {\n children: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableFooter 컴포넌트의 props / TableFooter component props\n * @typedef {Object} TableFooterProps\n * @property {React.ReactNode} children - TableRow 컴포넌트들 / TableRow components\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableFooterProps extends Omit<\n React.HTMLAttributes<HTMLTableSectionElement>,\n \"className\"\n> {\n children: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableRow 컴포넌트의 props / TableRow component props\n * @typedef {Object} TableRowProps\n * @property {React.ReactNode} children - TableHead 또는 TableCell 컴포넌트들 / TableHead or TableCell components\n * @property {\"default\" | \"hover\"} [variant=\"default\"] - Row 스타일 변형 / Row style variant\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableRowProps extends Omit<\n React.HTMLAttributes<HTMLTableRowElement>,\n \"className\"\n> {\n children: React.ReactNode;\n variant?: \"default\" | \"hover\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableHead 컴포넌트의 props / TableHead component props\n * @typedef {Object} TableHeadProps\n * @property {React.ReactNode} children - 헤더 셀 내용 / Header cell content\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableHeadProps extends Omit<\n React.ThHTMLAttributes<HTMLTableCellElement>,\n \"className\"\n> {\n children?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TableCell 컴포넌트의 props / TableCell component props\n * @typedef {Object} TableCellProps\n * @property {React.ReactNode} children - 셀 내용 / Cell content\n * @property {string} [dot] - dot utility string for custom styles\n * @property {React.CSSProperties} [style] - inline style overrides\n */\nexport interface TableCellProps extends Omit<\n React.TdHTMLAttributes<HTMLTableCellElement>,\n \"className\"\n> {\n children?: React.ReactNode;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ── Components ─────────────────────────────────────────────────────────────\n\n/**\n * Table 컴포넌트 / Table component\n *\n * 데이터를 표 형태로 표시하는 테이블 컴포넌트입니다.\n * TableHeader, TableBody, TableFooter, TableRow, TableHead, TableCell과 함께 사용합니다.\n *\n * Table component that displays data in tabular format.\n * Used with TableHeader, TableBody, TableFooter, TableRow, TableHead, and TableCell.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Table>\n * <TableHeader>\n * <TableRow>\n * <TableHead>이름</TableHead>\n * <TableHead>나이</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>홍길동</TableCell>\n * <TableCell>30</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n *\n * @example\n * // Bordered 스타일 / Bordered style\n * <Table variant=\"bordered\">\n * <TableHeader>\n * <TableRow>\n * <TableHead>항목</TableHead>\n * </TableRow>\n * </TableHeader>\n * <TableBody>\n * <TableRow>\n * <TableCell>값</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n *\n * @example\n * // Striped 스타일, 호버 효과 / Striped style with hover effect\n * <Table variant=\"striped\">\n * <TableBody>\n * <TableRow variant=\"hover\">\n * <TableCell>데이터</TableCell>\n * </TableRow>\n * </TableBody>\n * </Table>\n *\n * @param {TableProps} props - Table 컴포넌트의 props / Table component props\n * @param {React.Ref<HTMLTableElement>} ref - table 요소 ref / table element ref\n * @returns {JSX.Element} Table 컴포넌트 / Table component\n */\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n (\n { dot: dotProp, variant = \"default\", size = \"md\", style, ...props },\n ref,\n ) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n TABLE_BASE,\n TABLE_VARIANT[variant],\n SIZE_PADDING[size].fontSize,\n resolveDot(dotProp),\n style,\n ),\n [variant, size, dotProp, style],\n );\n\n return (\n <TableContext.Provider value={{ variant, size }}>\n <div style={{ width: \"100%\", overflowX: \"auto\" }}>\n <table ref={ref} style={computedStyle} {...props} />\n </div>\n </TableContext.Provider>\n );\n },\n);\nTable.displayName = \"Table\";\n\n/**\n * TableHeader 컴포넌트 / TableHeader component\n * 테이블의 헤더 영역을 표시합니다.\n * Displays the header area of a table.\n *\n * @component\n * @param {TableHeaderProps} props - TableHeader 컴포넌트의 props / TableHeader component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - thead 요소 ref / thead element ref\n * @returns {JSX.Element} TableHeader 컴포넌트 / TableHeader component\n */\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(THEAD_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return <thead ref={ref} style={computedStyle} {...props} />;\n },\n);\nTableHeader.displayName = \"TableHeader\";\n\n/**\n * TableBody 컴포넌트 / TableBody component\n * 테이블의 본문 영역을 표시합니다.\n * Displays the body area of a table.\n *\n * @component\n * @param {TableBodyProps} props - TableBody 컴포넌트의 props / TableBody component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - tbody 요소 ref / tbody element ref\n * @returns {JSX.Element} TableBody 컴포넌트 / TableBody component\n */\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(TBODY_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return <tbody ref={ref} style={computedStyle} {...props} />;\n },\n);\nTableBody.displayName = \"TableBody\";\n\n/**\n * TableFooter 컴포넌트 / TableFooter component\n * 테이블의 푸터 영역을 표시합니다.\n * Displays the footer area of a table.\n *\n * @component\n * @param {TableFooterProps} props - TableFooter 컴포넌트의 props / TableFooter component props\n * @param {React.Ref<HTMLTableSectionElement>} ref - tfoot 요소 ref / tfoot element ref\n * @returns {JSX.Element} TableFooter 컴포넌트 / TableFooter component\n */\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(TFOOT_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return <tfoot ref={ref} style={computedStyle} {...props} />;\n },\n);\nTableFooter.displayName = \"TableFooter\";\n\n/**\n * TableRow 컴포넌트 / TableRow component\n * 테이블의 행을 표시합니다.\n * Displays a table row.\n *\n * @component\n * @param {TableRowProps} props - TableRow 컴포넌트의 props / TableRow component props\n * @param {React.Ref<HTMLTableRowElement>} ref - tr 요소 ref / tr element ref\n * @returns {JSX.Element} TableRow 컴포넌트 / TableRow component\n */\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n (\n {\n dot: dotProp,\n variant = \"default\",\n style,\n onMouseEnter,\n onMouseLeave,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n TR_BASE,\n isHovered && variant === \"hover\"\n ? { backgroundColor: \"var(--color-muted)\" }\n : undefined,\n resolveDot(dotProp),\n style,\n ),\n [variant, isHovered, dotProp, style],\n );\n\n const handleMouseEnter = (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (variant === \"hover\") setIsHovered(true);\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave = (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (variant === \"hover\") setIsHovered(false);\n onMouseLeave?.(e);\n };\n\n return (\n <tr\n ref={ref}\n style={computedStyle}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n />\n );\n },\n);\nTableRow.displayName = \"TableRow\";\n\n/**\n * TableHead 컴포넌트 / TableHead component\n * 테이블의 헤더 셀을 표시합니다.\n * Displays a table header cell.\n *\n * @component\n * @param {TableHeadProps} props - TableHead 컴포넌트의 props / TableHead component props\n * @param {React.Ref<HTMLTableCellElement>} ref - th 요소 ref / th element ref\n * @returns {JSX.Element} TableHead 컴포넌트 / TableHead component\n */\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const { size } = React.useContext(TableContext);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(TH_BASE, SIZE_PADDING[size].th, resolveDot(dotProp), style),\n [size, dotProp, style],\n );\n\n return <th ref={ref} style={computedStyle} {...props} />;\n },\n);\nTableHead.displayName = \"TableHead\";\n\n/**\n * TableCell 컴포넌트 / TableCell component\n * 테이블의 데이터 셀을 표시합니다.\n * Displays a table data cell.\n *\n * @component\n * @param {TableCellProps} props - TableCell 컴포넌트의 props / TableCell component props\n * @param {React.Ref<HTMLTableCellElement>} ref - td 요소 ref / td element ref\n * @returns {JSX.Element} TableCell 컴포넌트 / TableCell component\n */\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const { size } = React.useContext(TableContext);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(TD_BASE, SIZE_PADDING[size].td, resolveDot(dotProp), style),\n [size, dotProp, style],\n );\n\n return <td ref={ref} style={computedStyle} {...props} />;\n },\n);\nTableCell.displayName = \"TableCell\";\n\n/**\n * TableCaption 컴포넌트 / TableCaption component\n * 테이블의 캡션을 표시합니다.\n * Displays a table caption.\n *\n * @component\n * @param {TableCaptionProps} props - TableCaption 컴포넌트의 props / TableCaption component props\n * @param {React.Ref<HTMLTableCaptionElement>} ref - caption 요소 ref / caption element ref\n * @returns {JSX.Element} TableCaption 컴포넌트 / TableCaption component\n */\nexport interface TableCaptionProps extends Omit<\n React.HTMLAttributes<HTMLTableCaptionElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n TableCaptionProps\n>(({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(CAPTION_BASE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n\n return <caption ref={ref} style={computedStyle} {...props} />;\n});\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableCaption,\n} from \"../Table\";\nimport { Badge } from \"../Badge\";\nimport { SkeletonTable } from \"../Skeleton\";\nimport { DashboardEmptyState } from \"./EmptyState\";\n\nexport type TransactionStatus =\n | \"approved\"\n | \"pending\"\n | \"failed\"\n | \"refunded\"\n | \"cancelled\"\n | \"review\";\n\nexport type TransactionColumnKey =\n | \"id\"\n | \"merchant\"\n | \"amount\"\n | \"status\"\n | \"method\"\n | \"date\"\n | \"fee\"\n | \"customer\";\n\n/**\n * 거래 테이블 행 인터페이스\n * @typedef {Object} TransactionRow\n * @property {string} id - 거래 ID\n * @property {string} merchant - 가맹점\n * @property {number} amount - 거래 금액\n * @property {string} [currency] - 통화\n * @property {TransactionStatus} status - 거래 상태\n * @property {string} [method] - 결제수단\n * @property {string | Date} date - 거래 일시\n * @property {string} [customer] - 고객 정보\n * @property {number} [fee] - 수수료\n * @property {string} [reference] - 참조 번호\n */\nexport interface TransactionRow {\n id: string;\n merchant: string;\n amount: number;\n currency?: string;\n status: TransactionStatus;\n method?: string;\n date: string | Date;\n customer?: string;\n fee?: number;\n reference?: string;\n [key: string]: unknown;\n}\n\n/**\n * 거래 테이블 컬럼 설정 인터페이스\n * @typedef {Object} TransactionColumnConfig\n * @property {TransactionColumnKey} key - 컬럼 키\n * @property {string} [label] - 컬럼 라벨\n * @property {\"left\" | \"center\" | \"right\"} [align] - 정렬\n * @property {string} [width] - 컬럼 너비\n * @property {(row: TransactionRow) => React.ReactNode} [render] - 커스텀 렌더러\n */\nexport interface TransactionColumnConfig {\n key: TransactionColumnKey;\n label?: string;\n align?: \"left\" | \"center\" | \"right\";\n width?: string;\n render?: (row: TransactionRow) => React.ReactNode;\n}\n\n/**\n * TransactionsTable 컴포넌트의 props\n * @typedef {Object} TransactionsTableProps\n * @property {TransactionRow[]} rows - 거래 행 배열\n * @property {TransactionColumnConfig[]} [columns] - 컬럼 설정 배열\n * @property {boolean} [isLoading=false] - 로딩 상태\n * @property {number} [loadingRows] - 로딩 행 수\n * @property {React.ReactNode} [caption] - 테이블 캡션\n * @property {React.ReactNode} [filters] - 필터 컴포넌트\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트\n * @property {(row: TransactionRow) => void} [onRowClick] - 행 클릭 핸들러\n * @property {(row: TransactionRow) => boolean} [highlightRow] - 행 강조 조건\n * @property {Partial<Record<TransactionStatus, string>>} [statusLabels] - 상태 라벨 커스터마이징\n * @property {(status: TransactionStatus, row: TransactionRow) => React.ReactNode} [statusRenderer] - 상태 커스텀 렌더러\n * @property {(row: TransactionRow) => React.ReactNode} [amountFormatter] - 금액 커스텀 포맷터\n * @property {(row: TransactionRow) => React.ReactNode} [methodFormatter] - 결제수단 커스텀 포맷터\n * @property {(row: TransactionRow) => React.ReactNode} [dateFormatter] - 날짜 커스텀 포맷터\n * @property {string} [locale=\"ko-KR\"] - 로케일\n * @property {string} [defaultCurrency=\"KRW\"] - 기본 통화\n * @property {string} [dot] - dot 유틸리티 스트링\n * @property {React.ReactNode} [footer] - 푸터 컴포넌트\n * @property {(row: TransactionRow) => string} [rowActionLabel] - 행 액션 라벨 생성 함수\n * @property {string} [rowActionHint] - 행 액션 힌트 텍스트\n */\nexport interface TransactionsTableProps {\n rows: TransactionRow[];\n columns?: TransactionColumnConfig[];\n isLoading?: boolean;\n loadingRows?: number;\n caption?: React.ReactNode;\n filters?: React.ReactNode;\n emptyState?: React.ReactNode;\n onRowClick?: (row: TransactionRow) => void;\n highlightRow?: (row: TransactionRow) => boolean;\n statusLabels?: Partial<Record<TransactionStatus, string>>;\n statusRenderer?: (\n status: TransactionStatus,\n row: TransactionRow,\n ) => React.ReactNode;\n amountFormatter?: (row: TransactionRow) => React.ReactNode;\n methodFormatter?: (row: TransactionRow) => React.ReactNode;\n dateFormatter?: (row: TransactionRow) => React.ReactNode;\n locale?: string;\n defaultCurrency?: string;\n style?: React.CSSProperties;\n dot?: string;\n footer?: React.ReactNode;\n rowActionLabel?: (row: TransactionRow) => string;\n rowActionHint?: string;\n}\n\nconst STATUS_STYLES: Record<\n TransactionStatus,\n { label: string; badgeStyle: React.CSSProperties }\n> = {\n approved: {\n label: \"승인\",\n badgeStyle: { backgroundColor: \"#d1fae5\", color: \"#065f46\" },\n },\n pending: {\n label: \"대기\",\n badgeStyle: { backgroundColor: \"#fef3c7\", color: \"#92400e\" },\n },\n failed: {\n label: \"실패\",\n badgeStyle: { backgroundColor: \"#ffe4e6\", color: \"#9f1239\" },\n },\n refunded: {\n label: \"환불\",\n badgeStyle: { backgroundColor: \"#e0f2fe\", color: \"#075985\" },\n },\n cancelled: {\n label: \"취소\",\n badgeStyle: { backgroundColor: \"#f1f5f9\", color: \"#334155\" },\n },\n review: {\n label: \"검토중\",\n badgeStyle: { backgroundColor: \"#ede9fe\", color: \"#5b21b6\" },\n },\n};\n\nconst DEFAULT_COLUMNS: TransactionColumnConfig[] = [\n { key: \"id\", label: \"거래 ID\", width: \"160px\" },\n { key: \"merchant\", label: \"가맹점\" },\n { key: \"amount\", label: \"금액\", align: \"right\", width: \"140px\" },\n { key: \"status\", label: \"상태\", width: \"120px\" },\n { key: \"method\", label: \"결제수단\", width: \"120px\" },\n { key: \"date\", label: \"거래 일시\", width: \"180px\" },\n];\n\n/**\n * TransactionsTable 컴포넌트\n *\n * 거래 목록을 테이블 형태로 표시하는 컴포넌트입니다.\n * 정렬, 필터링, 커스텀 렌더링 등을 지원합니다.\n *\n * Table component that displays transaction list.\n * Supports sorting, filtering, and custom rendering.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <TransactionsTable\n * rows={[\n * {\n * id: \"tx_123\",\n * merchant: \"가맹점 A\",\n * amount: 100000,\n * status: \"approved\",\n * method: \"카드\",\n * date: new Date()\n * }\n * ]}\n * onRowClick={(row) => console.log(row)}\n * />\n *\n * @example\n * // 커스텀 컬럼과 포맷터 / Custom columns and formatters\n * <TransactionsTable\n * rows={transactions}\n * columns={[\n * { key: \"id\", label: \"ID\" },\n * { key: \"amount\", label: \"금액\", align: \"right\" },\n * { key: \"status\", label: \"상태\" }\n * ]}\n * amountFormatter={(row) => `₩${row.amount.toLocaleString()}`}\n * statusRenderer={(status) => <CustomBadge status={status} />}\n * isLoading={loading}\n * />\n *\n * @param {TransactionsTableProps} props - TransactionsTable 컴포넌트의 props / TransactionsTable component props\n * @returns {JSX.Element} TransactionsTable 컴포넌트 / TransactionsTable component\n */\nexport const TransactionsTable: React.FC<TransactionsTableProps> = ({\n rows,\n columns = DEFAULT_COLUMNS,\n isLoading = false,\n caption,\n filters,\n emptyState,\n onRowClick,\n highlightRow,\n statusLabels,\n statusRenderer,\n amountFormatter,\n methodFormatter,\n dateFormatter,\n locale = \"ko-KR\",\n defaultCurrency = \"KRW\",\n style,\n dot: dotProp,\n footer,\n rowActionLabel,\n rowActionHint,\n}) => {\n const columnList = columns.length > 0 ? columns : DEFAULT_COLUMNS;\n const hasRows = rows.length > 0;\n const tableId = React.useId();\n const rowActionHintId = rowActionHint\n ? `${tableId}-row-action-hint`\n : undefined;\n\n const getRowActionLabel = React.useCallback(\n (row: TransactionRow) => {\n if (rowActionLabel) return rowActionLabel(row);\n const baseLabel = row.id ? `거래 ${row.id}` : \"거래 행\";\n return `${baseLabel} 상세 보기`;\n },\n [rowActionLabel],\n );\n\n const renderStatus = (status: TransactionStatus, row: TransactionRow) => {\n if (statusRenderer) return statusRenderer(status, row);\n const config = STATUS_STYLES[status] || STATUS_STYLES.pending;\n const label = statusLabels?.[status] ?? config.label;\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n fontWeight: 500,\n ...resolveDot(\"px-3 py-1 rounded-full\"),\n fontSize: \"0.75rem\",\n ...config.badgeStyle,\n }}\n >\n {label}\n </span>\n );\n };\n\n const renderAmount = (row: TransactionRow) => {\n if (amountFormatter) return amountFormatter(row);\n const currency = row.currency || defaultCurrency;\n try {\n return (\n <span\n style={{ fontWeight: 600, color: \"var(--color-foreground, #0f172a)\" }}\n >\n {new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n maximumFractionDigits: 2,\n }).format(row.amount)}\n </span>\n );\n } catch {\n return `${row.amount.toLocaleString(locale)} ${currency}`;\n }\n };\n\n const renderMethod = (row: TransactionRow) => {\n if (methodFormatter) return methodFormatter(row);\n return row.method ?? \"-\";\n };\n\n const renderDate = (row: TransactionRow) => {\n if (dateFormatter) return dateFormatter(row);\n const dateObj = row.date instanceof Date ? row.date : new Date(row.date);\n return dateObj.toLocaleString(locale, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n };\n\n const renderCell = (column: TransactionColumnConfig, row: TransactionRow) => {\n if (column.render) return column.render(row);\n\n switch (column.key) {\n case \"id\":\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <span\n style={{\n fontWeight: 500,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {row.id}\n </span>\n {row.reference && (\n <span style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {row.reference}\n </span>\n )}\n </div>\n );\n case \"merchant\":\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <span\n style={{\n fontWeight: 500,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {row.merchant}\n </span>\n {row.customer && (\n <span style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {row.customer}\n </span>\n )}\n </div>\n );\n case \"amount\":\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n }}\n >\n {renderAmount(row)}\n {typeof row.fee === \"number\" && (\n <span style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n 수수료 {row.fee.toLocaleString(locale)}\n </span>\n )}\n </div>\n );\n case \"status\":\n return renderStatus(row.status, row);\n case \"method\":\n return <span style={{ color: \"#475569\" }}>{renderMethod(row)}</span>;\n case \"date\":\n return <span style={{ color: \"#475569\" }}>{renderDate(row)}</span>;\n case \"customer\":\n return row.customer ?? \"-\";\n case \"fee\":\n return typeof row.fee === \"number\"\n ? row.fee.toLocaleString(locale)\n : \"-\";\n default:\n return \"-\";\n }\n };\n\n return (\n <div\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-xl\"),\n border: \"1px solid rgba(226,232,240,0.6)\",\n backgroundColor: \"var(--color-card, #ffffff)\",\n },\n resolveDot(dotProp),\n style,\n )}\n >\n {filters && (\n <div\n style={{\n borderBottom: \"1px solid var(--color-border, #f1f5f9)\",\n padding: \"1rem 1.5rem\",\n }}\n >\n {filters}\n </div>\n )}\n <div style={{ padding: \"1rem 1.5rem\" }}>\n <div\n style={{\n ...resolveDot(\"rounded-xl\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n overflow: \"hidden\",\n }}\n >\n <Table\n role=\"table\"\n aria-label={\n caption\n ? typeof caption === \"string\"\n ? caption\n : \"거래 목록 테이블\"\n : \"거래 목록 테이블\"\n }\n >\n {caption && <TableCaption>{caption}</TableCaption>}\n <TableHeader\n style={{ backgroundColor: \"var(--color-muted)\", opacity: 0.6 }}\n >\n <TableRow\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"var(--color-muted-foreground)\",\n }}\n >\n {columnList.map((column) => (\n <TableHead\n key={column.key}\n style={{\n width: column.width,\n textAlign:\n column.align === \"right\"\n ? \"right\"\n : column.align === \"center\"\n ? \"center\"\n : \"left\",\n fontSize: \"0.75rem\",\n fontWeight: 600,\n }}\n >\n {column.label}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {isLoading && (\n <TableRow>\n <TableCell colSpan={columnList.length}>\n <SkeletonTable dot=\"py-4\" />\n </TableCell>\n </TableRow>\n )}\n {!isLoading && !hasRows && (\n <TableRow>\n <TableCell colSpan={columnList.length}>\n {emptyState || (\n <DashboardEmptyState\n title=\"거래 데이터가 없습니다\"\n description=\"필터를 조정하거나 날짜 범위를 변경해보세요.\"\n icon=\"database-backup\"\n size=\"md\"\n />\n )}\n </TableCell>\n </TableRow>\n )}\n {!isLoading &&\n rows.map((row) => {\n const clickable = Boolean(onRowClick);\n const handleRowKeyDown = (\n event: React.KeyboardEvent<HTMLTableRowElement>,\n ) => {\n if (!onRowClick) return;\n if (\n event.key === \"Enter\" ||\n event.key === \" \" ||\n event.key === \"Spacebar\"\n ) {\n event.preventDefault();\n onRowClick(row);\n }\n };\n const rowLabel = clickable\n ? getRowActionLabel(row)\n : undefined;\n return (\n <TableRow\n key={row.id}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? \"button\" : undefined}\n onKeyDown={clickable ? handleRowKeyDown : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n aria-label={rowLabel}\n aria-describedby={\n clickable && rowActionHintId\n ? rowActionHintId\n : undefined\n }\n style={{\n fontSize: \"0.875rem\",\n cursor: clickable ? \"pointer\" : undefined,\n backgroundColor: highlightRow?.(row)\n ? \"var(--color-primary-50, rgba(99,102,241,0.06))\"\n : undefined,\n }}\n >\n {columnList.map((column) => (\n <TableCell\n key={column.key}\n style={{\n textAlign:\n column.align === \"right\"\n ? \"right\"\n : column.align === \"center\"\n ? \"center\"\n : \"left\",\n verticalAlign: \"middle\",\n }}\n >\n {renderCell(column, row)}\n </TableCell>\n ))}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n {!isLoading && hasRows && footer && (\n <div\n style={{\n borderTop: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-muted, rgba(248,250,252,0.5))\",\n ...resolveDot(\"py-3 px-4\"),\n fontSize: \"0.875rem\",\n color: \"#475569\",\n }}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n {rowActionHint && (\n <p\n id={rowActionHintId}\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0,0,0,0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n >\n {rowActionHint}\n </p>\n )}\n </div>\n );\n};\n\nTransactionsTable.displayName = \"TransactionsTable\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\n\nexport type TrendSeriesPalette = \"approval\" | \"settlement\" | \"custom\";\n\n/**\n * 트렌드 시리즈 인터페이스\n * @typedef {Object} TrendSeries\n * @property {string} label - 시리즈 라벨\n * @property {number[]} data - 데이터 배열\n * @property {string} [color] - 커스텀 색상\n * @property {boolean} [area] - 영역 채우기 여부\n */\nexport interface TrendSeries {\n label: string;\n data: number[];\n color?: string;\n area?: boolean;\n}\n\n/**\n * TrendChart 컴포넌트의 props / TrendChart component props\n * @typedef {Object} TrendChartProps\n * @property {TrendSeries[]} series - 시리즈 배열 / Series array\n * @property {string[]} categories - 카테고리 배열 / Categories array\n * @property {TrendSeriesPalette} [palette=\"approval\"] - 색상 팔레트 / Color palette\n * @property {number} [height=200] - 차트 높이 (px) / Chart height (px)\n * @property {boolean} [showLegend=true] - 범례 표시 여부 / Show legend\n * @property {boolean} [showDots=true] - 점 표시 여부 / Show dots\n * @property {boolean} [showTooltip=false] - 툴팁 표시 여부 / Show tooltip\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface TrendChartProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n series: TrendSeries[];\n categories: string[];\n palette?: TrendSeriesPalette;\n height?: number;\n showLegend?: boolean;\n showDots?: boolean;\n showTooltip?: boolean;\n dot?: string;\n}\n\nconst PRESET_PALETTES: Record<TrendSeriesPalette, string[]> = {\n approval: [\"#22c55e\", \"#f97316\", \"#ef4444\"],\n settlement: [\"#6366f1\", \"#0ea5e9\", \"#14b8a6\"],\n custom: [\"#0ea5e9\"],\n};\n\n/**\n * TrendChart 컴포넌트\n *\n * 트렌드 데이터를 선 그래프로 표시하는 컴포넌트입니다.\n * 여러 시리즈를 동시에 표시할 수 있으며, 영역 채우기 옵션을 제공합니다.\n *\n * Line chart component that displays trend data.\n * Can display multiple series simultaneously with area fill option.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <TrendChart\n * series={[\n * { label: \"승인\", data: [10, 20, 15, 30, 25] },\n * { label: \"거부\", data: [5, 10, 8, 15, 12] }\n * ]}\n * categories={[\"월\", \"화\", \"수\", \"목\", \"금\"]}\n * palette=\"approval\"\n * />\n *\n * @example\n * // 영역 채우기와 커스텀 색상 / Area fill and custom color\n * <TrendChart\n * series={[\n * { label: \"정산\", data: [100, 200, 150], area: true, color: \"#6366f1\" }\n * ]}\n * categories={[\"1월\", \"2월\", \"3월\"]}\n * palette=\"settlement\"\n * showDots={true}\n * showTooltip={true}\n * />\n *\n * @param {TrendChartProps} props - TrendChart 컴포넌트의 props / TrendChart component props\n * @returns {JSX.Element} TrendChart 컴포넌트 / TrendChart component\n */\nexport const TrendChart: React.FC<TrendChartProps> = ({\n series,\n categories,\n palette = \"approval\",\n height = 200,\n showLegend = true,\n showDots = true,\n showTooltip = false,\n dot,\n style,\n ...props\n}) => {\n const paletteColors = PRESET_PALETTES[palette] || PRESET_PALETTES.approval;\n const safeCategories = categories.length > 0 ? categories : [\"—\"];\n const denominator = Math.max(safeCategories.length - 1, 1);\n\n const maxValue = Math.max(...series.flatMap((s) => s.data), 10);\n\n const _chartId = React.useId();\n const chartLabel =\n series.length > 0\n ? `트렌드 차트 - ${series.length}개 시리즈, ${safeCategories.length}개 카테고리, 최대값 ${maxValue.toLocaleString()}`\n : `트렌드 차트 - ${safeCategories.length}개 카테고리`;\n\n return (\n <div\n role=\"img\"\n aria-label={chartLabel}\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-xl p-4\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, #ffffff)\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <div style={{ position: \"relative\", height }}>\n {series.map((s, index) => {\n const color = s.color || paletteColors[index % paletteColors.length];\n const points = s.data.map((point, i) => ({\n x: (i / denominator) * 100,\n y: 100 - (point / maxValue) * 100,\n value: point,\n label:\n safeCategories[i] ??\n safeCategories[safeCategories.length - 1] ??\n \"\",\n }));\n\n if (points.length === 0) {\n return null;\n }\n\n const pathData = points\n .map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x},${p.y}`)\n .join(\" \");\n\n const areaData = `${pathData} L 100,100 L 0,100 Z`;\n\n return (\n <svg\n key={s.label}\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"none\"\n style={{\n position: \"absolute\",\n inset: 0,\n height: \"100%\",\n width: \"100%\",\n }}\n >\n {s.area && (\n <path d={areaData} fill={color} opacity={0.08} stroke=\"none\" />\n )}\n <path\n d={pathData}\n fill=\"none\"\n stroke={color}\n strokeWidth={2}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n {showDots &&\n points.map((p, i) => (\n <circle\n key={`${s.label}-${i}`}\n cx={p.x}\n cy={p.y}\n r={1.2}\n fill=\"#fff\"\n stroke={color}\n strokeWidth={0.8}\n >\n {showTooltip && (\n <title>\n {s.label} · {p.label}: {p.value.toLocaleString()}\n </title>\n )}\n </circle>\n ))}\n </svg>\n );\n })}\n <div\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n fontSize: \"0.625rem\",\n color: \"#94a3b8\",\n }}\n >\n {safeCategories.map((label, _idx) => (\n <div key={label} style={{ flex: 1, textAlign: \"center\" }}>\n {label}\n </div>\n ))}\n </div>\n </div>\n\n {showLegend && (\n <div\n style={{\n ...resolveDot(\"mt-4 gap-4\"),\n display: \"flex\",\n flexWrap: \"wrap\",\n fontSize: \"0.875rem\",\n color: \"var(--color-muted-foreground, #475569)\",\n }}\n role=\"list\"\n aria-label=\"차트 범례\"\n >\n {series.map((s, index) => {\n const color =\n s.color || paletteColors[index % paletteColors.length];\n return (\n <div\n key={s.label}\n role=\"listitem\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n tabIndex={0}\n aria-label={`${s.label} 시리즈`}\n onKeyDown={(e) => {\n // 키보드 네비게이션 지원\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n }\n }}\n >\n <span\n style={{\n display: \"inline-block\",\n ...resolveDot(\"w-2 h-2 rounded-full\"),\n backgroundColor: color,\n }}\n aria-hidden=\"true\"\n />\n <span>{s.label}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nTrendChart.displayName = \"TrendChart\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\n\n/**\n * BarChartData 인터페이스 / BarChartData interface\n * @typedef {Object} BarChartData\n * @property {string} label - 막대 라벨 / Bar label\n * @property {number} value - 막대 값 / Bar value\n * @property {string} [color] - 커스텀 색상 / Custom color\n * @property {boolean} [highlight] - 강조 표시 여부 / Highlight display\n */\nexport interface BarChartData {\n label: string;\n value: number;\n color?: string;\n highlight?: boolean;\n}\n\n/**\n * BarChart 컴포넌트의 props / BarChart component props\n * @typedef {Object} BarChartProps\n * @property {BarChartData[]} data - 차트 데이터 배열 / Chart data array\n * @property {string} [title] - 차트 제목 / Chart title\n * @property {number} [height=200] - 차트 높이 (px) / Chart height (px)\n * @property {boolean} [showValues=true] - 값 표시 여부 / Show values\n * @property {boolean} [showLabels=true] - 라벨 표시 여부 / Show labels\n * @property {number} [maxValue] - 최대값 (자동 계산 시 생략) / Maximum value (omit for auto-calculation)\n * @property {\"blue\" | \"purple\" | \"green\" | \"orange\" | \"red\" | \"indigo\" | \"pink\" | \"gray\"} [colorScheme=\"blue\"] - 색상 스킴 / Color scheme\n * @property {\"default\" | \"gradient\"} [variant=\"gradient\"] - 차트 스타일 변형 / Chart style variant\n * @property {boolean} [showGrid=true] - 그리드 표시 여부 / Show grid\n * @property {boolean} [showTooltip] - 툴팁 표시 여부 / Show tooltip\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface BarChartProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n data: BarChartData[];\n title?: string;\n height?: number;\n showValues?: boolean;\n showLabels?: boolean;\n maxValue?: number;\n colorScheme?:\n | \"blue\"\n | \"purple\"\n | \"green\"\n | \"orange\"\n | \"red\"\n | \"indigo\"\n | \"pink\"\n | \"gray\";\n variant?: \"default\" | \"gradient\";\n showGrid?: boolean;\n showTooltip?: boolean;\n dot?: string;\n}\n\n// Color scheme maps — using explicit hex values to avoid Tailwind class resolution issues\nconst colorSchemeValues = {\n blue: {\n default: \"#6366f1\",\n gradient: [\"#6366f1\", \"#0891b2\"],\n highlight: [\"#0891b2\", \"#0e7490\"],\n },\n purple: {\n default: \"#a855f7\",\n gradient: [\"#a855f7\", \"#9333ea\"],\n highlight: [\"#9333ea\", \"#7e22ce\"],\n },\n green: {\n default: \"#22c55e\",\n gradient: [\"#22c55e\", \"#16a34a\"],\n highlight: [\"#16a34a\", \"#15803d\"],\n },\n orange: {\n default: \"#f97316\",\n gradient: [\"#f97316\", \"#ea580c\"],\n highlight: [\"#ea580c\", \"#c2410c\"],\n },\n red: {\n default: \"#ef4444\",\n gradient: [\"#ef4444\", \"#dc2626\"],\n highlight: [\"#dc2626\", \"#b91c1c\"],\n },\n indigo: {\n default: \"#6366f1\",\n gradient: [\"#6366f1\", \"#4f46e5\"],\n highlight: [\"#4f46e5\", \"#4338ca\"],\n },\n pink: {\n default: \"#ec4899\",\n gradient: [\"#ec4899\", \"#db2777\"],\n highlight: [\"#db2777\", \"#be185d\"],\n },\n gray: {\n default: \"#6b7280\",\n gradient: [\"#6b7280\", \"#4b5563\"],\n highlight: [\"#4b5563\", \"#374151\"],\n },\n};\n\n/**\n * BarChart 컴포넌트\n *\n * 막대 차트를 표시하는 컴포넌트입니다.\n * 다양한 색상 스킴과 그라디언트 스타일을 지원합니다.\n *\n * Bar chart component that displays data in bar format.\n * Supports various color schemes and gradient styles.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <BarChart\n * data={[\n * { label: \"월\", value: 100 },\n * { label: \"화\", value: 200 },\n * { label: \"수\", value: 150 }\n * ]}\n * title=\"주간 매출\"\n * />\n *\n * @example\n * // 커스텀 색상 및 강조 / Custom color and highlight\n * <BarChart\n * data={[\n * { label: \"1월\", value: 1000, highlight: true },\n * { label: \"2월\", value: 1200 },\n * { label: \"3월\", value: 1500 }\n * ]}\n * colorScheme=\"green\"\n * variant=\"gradient\"\n * showTooltip\n * />\n *\n * @param {BarChartProps} props - BarChart 컴포넌트의 props / BarChart component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} BarChart 컴포넌트 / BarChart component\n */\nexport const BarChart = React.forwardRef<HTMLDivElement, BarChartProps>(\n (\n {\n data,\n title,\n height = 200,\n showValues = true,\n showLabels = true,\n maxValue,\n colorScheme = \"blue\",\n variant = \"gradient\",\n showGrid = true,\n showTooltip = true,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const colors = colorSchemeValues[colorScheme];\n\n // 성능 최적화: max 값 계산을 useMemo로 메모이제이션\n // Performance optimization: Memoize max value calculation with useMemo\n const max = React.useMemo(() => {\n return maxValue || Math.max(...data.map((d) => d.value), 1);\n }, [maxValue, data]);\n\n // 성능 최적화: chartLabel 계산을 useMemo로 메모이제이션\n // Performance optimization: Memoize chartLabel calculation with useMemo\n const chartLabel = React.useMemo(() => {\n return title\n ? `${title} 차트 - 총 ${data.length}개 항목, 최대값 ${max.toLocaleString()}`\n : `막대 그래프 차트 - 총 ${data.length}개 항목, 최대값 ${max.toLocaleString()}`;\n }, [title, data.length, max]);\n\n const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null);\n const _chartId = React.useId();\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={chartLabel}\n style={mergeStyles(\n resolveDot(\"rounded-2xl p-6\"),\n {\n backgroundColor: \"var(--color-background, #ffffff)\",\n boxShadow: \"0 10px 15px -3px rgba(0,0,0,0.1)\",\n border: \"1px solid var(--color-border, #e5e7eb)\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {title && (\n <h3\n style={{\n fontSize: \"1.125rem\",\n fontWeight: 600,\n ...resolveDot(\"mb-4\"),\n color: \"var(--color-foreground, #111827)\",\n }}\n >\n {title}\n </h3>\n )}\n\n <div\n style={{ position: \"relative\", height: `${height}px` }}\n aria-hidden=\"true\"\n >\n {/* 그리드 라인 */}\n {showGrid && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n }}\n >\n {[0, 25, 50, 75, 100].map((percent) => (\n <div\n key={percent}\n style={{\n borderTop: \"1px solid var(--color-border, #e5e7eb)\",\n opacity: 0.3,\n marginTop:\n percent === 0 ? 0 : `${(percent / 100) * height - 1}px`,\n }}\n />\n ))}\n </div>\n )}\n\n {/* 막대 그래프 */}\n <div\n style={{\n position: \"relative\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"space-between\",\n ...resolveDot(\"gap-2 px-2\"),\n }}\n >\n {data.map((item, index) => {\n const barHeight =\n max > 0 ? (item.value / max) * (height - 40) : 0;\n const isHighlighted = item.highlight || hoveredIndex === index;\n const barColor = item.color\n ? item.color\n : variant === \"gradient\"\n ? isHighlighted\n ? colors.highlight[0]\n : colors.gradient[0]\n : colors.default;\n\n return (\n <div\n key={index}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n flex: 1,\n position: \"relative\",\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {/* 툴팁 */}\n {showTooltip && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n ...resolveDot(\"mb-2\"),\n ...resolveDot(\"py-1 px-2\"),\n backgroundColor: \"#111827\",\n color: \"#ffffff\",\n fontSize: \"0.75rem\",\n ...resolveDot(\"rounded-md\"),\n opacity: hoveredIndex === index ? 1 : 0,\n transition: \"opacity 200ms\",\n pointerEvents: \"none\",\n whiteSpace: \"nowrap\",\n zIndex: 10,\n }}\n >\n {item.label}: {item.value.toLocaleString()}\n <div\n style={{\n position: \"absolute\",\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 0,\n height: 0,\n borderLeft: \"4px solid transparent\",\n borderRight: \"4px solid transparent\",\n borderTop: \"4px solid #111827\",\n }}\n />\n </div>\n )}\n\n {/* 값 표시 */}\n {showValues && (\n <div\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n ...resolveDot(\"mb-1\"),\n transition: \"opacity 200ms\",\n opacity: hoveredIndex === index ? 1 : 0,\n color:\n hoveredIndex === index\n ? \"var(--color-foreground, #111827)\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n {item.value.toLocaleString()}\n </div>\n )}\n\n {/* 막대 */}\n <div\n style={{\n position: \"relative\",\n width: \"100%\",\n flex: 1,\n display: \"flex\",\n alignItems: \"flex-end\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n ...resolveDot(\"rounded-tl-lg rounded-tr-lg\"),\n transition: \"all 500ms ease-out\",\n backgroundColor: barColor,\n height: `${Math.max(barHeight, 4)}px`,\n minHeight: \"4px\",\n boxShadow: isHighlighted\n ? \"0 10px 15px -3px rgba(0,0,0,0.1)\"\n : undefined,\n transform: isHighlighted ? \"scaleX(1.05)\" : undefined,\n }}\n >\n {/* 막대 위 점 */}\n {item.value > 0 && (\n <div\n style={{\n position: \"absolute\",\n top: \"-4px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: \"8px\",\n height: \"8px\",\n backgroundColor: \"var(--color-background, #ffffff)\",\n borderRadius: \"50%\",\n boxShadow: \"0 1px 2px rgba(0,0,0,0.1)\",\n }}\n />\n )}\n </div>\n </div>\n\n {/* 라벨 */}\n {showLabels && (\n <div\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n ...resolveDot(\"mt-2\"),\n transition: \"color 200ms\",\n color: isHighlighted\n ? \"#9333ea\"\n : \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n {item.label}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* 하단 통계 */}\n {data.length > 0 && (\n <div\n style={{\n ...resolveDot(\"mt-4\"),\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n ...resolveDot(\"px-2\"),\n }}\n >\n <div>\n 총:{\" \"}\n {data.reduce((sum, item) => sum + item.value, 0).toLocaleString()}\n </div>\n <div>\n 평균:{\" \"}\n {Math.round(\n data.reduce((sum, item) => sum + item.value, 0) / data.length,\n ).toLocaleString()}\n </div>\n <div>최고: {max.toLocaleString()}</div>\n </div>\n )}\n </div>\n );\n },\n);\n\nBarChart.displayName = \"BarChart\";\n","\"use client\";\n\nimport React from \"react\";\nimport { Drawer, DrawerHeader, DrawerContent, DrawerFooter } from \"../Drawer\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { DashboardEmptyState } from \"./EmptyState\";\nimport type { TransactionStatus } from \"./TransactionsTable\";\n\nconst STATUS_STYLES: Record<\n TransactionStatus,\n { label: string; badgeStyle: React.CSSProperties }\n> = {\n approved: {\n label: \"승인\",\n badgeStyle: { backgroundColor: \"#d1fae5\", color: \"#065f46\" },\n },\n pending: {\n label: \"대기\",\n badgeStyle: { backgroundColor: \"#fef3c7\", color: \"#92400e\" },\n },\n failed: {\n label: \"실패\",\n badgeStyle: { backgroundColor: \"#ffe4e6\", color: \"#9f1239\" },\n },\n refunded: {\n label: \"환불\",\n badgeStyle: { backgroundColor: \"#e0f2fe\", color: \"#075985\" },\n },\n cancelled: {\n label: \"취소\",\n badgeStyle: { backgroundColor: \"#f1f5f9\", color: \"#334155\" },\n },\n review: {\n label: \"검토중\",\n badgeStyle: { backgroundColor: \"#ede9fe\", color: \"#5b21b6\" },\n },\n};\n\n/**\n * 거래 상세 정보 인터페이스 / TransactionDetail interface\n * @typedef {Object} TransactionDetail\n * @property {string} id - 거래 ID / Transaction ID\n * @property {TransactionStatus} status - 거래 상태 / Transaction status\n * @property {number} amount - 거래 금액 / Transaction amount\n * @property {string} [currency] - 통화 / Currency\n * @property {string} [merchant] - 가맹점 / Merchant\n * @property {string} [method] - 결제수단 / Payment method\n * @property {string | Date} [createdAt] - 생성일시 / Created date\n * @property {string | Date} [approvedAt] - 승인일시 / Approved date\n * @property {string} [customer] - 고객 정보 / Customer information\n * @property {string} [reference] - 참조 번호 / Reference number\n */\nexport interface TransactionDetail {\n id: string;\n status: TransactionStatus;\n amount: number;\n currency?: string;\n merchant?: string;\n method?: string;\n createdAt?: string | Date;\n approvedAt?: string | Date;\n customer?: string;\n reference?: string;\n}\n\n/**\n * 거래 메타데이터 아이템 인터페이스 / TransactionMetadataItem interface\n * @typedef {Object} TransactionMetadataItem\n * @property {string} label - 라벨 / Label\n * @property {React.ReactNode} value - 값 / Value\n * @property {IconName} [icon] - 아이콘 / Icon\n */\nexport interface TransactionMetadataItem {\n label: string;\n value: React.ReactNode;\n icon?: IconName;\n}\n\nexport type SettlementStatus =\n | \"pending\"\n | \"processing\"\n | \"completed\"\n | \"failed\";\n\n/**\n * 정산 정보 인터페이스 / SettlementInfo interface\n * @typedef {Object} SettlementInfo\n * @property {SettlementStatus} [status] - 정산 상태 / Settlement status\n * @property {number} [amount] - 정산 금액 / Settlement amount\n * @property {string} [currency] - 통화 / Currency\n * @property {string | Date} [scheduledDate] - 예정일 / Scheduled date\n * @property {string} [expectedPayout] - 예상 지급액 / Expected payout\n * @property {string} [bankAccount] - 계좌 정보 / Bank account information\n * @property {string} [reference] - 참조 번호 / Reference number\n * @property {string} [note] - 메모 / Note\n */\nexport interface SettlementInfo {\n status?: SettlementStatus;\n amount?: number;\n currency?: string;\n scheduledDate?: string | Date;\n expectedPayout?: string;\n bankAccount?: string;\n reference?: string;\n note?: string;\n}\n\n/**\n * 수수료 내역 인터페이스 / FeeBreakdown interface\n * @typedef {Object} FeeBreakdown\n * @property {string} label - 수수료 라벨 / Fee label\n * @property {number} amount - 수수료 금액 / Fee amount\n * @property {string} [currency] - 통화 / Currency\n * @property {string} [description] - 설명 / Description\n */\nexport interface FeeBreakdown {\n label: string;\n amount: number;\n currency?: string;\n description?: string;\n}\n\n/**\n * 거래 이벤트 인터페이스 / TransactionEvent interface\n * @typedef {Object} TransactionEvent\n * @property {string} id - 이벤트 ID / Event ID\n * @property {string} title - 이벤트 제목 / Event title\n * @property {string} [description] - 설명 / Description\n * @property {string | Date} timestamp - 타임스탬프 / Timestamp\n * @property {\"success\" | \"warning\" | \"error\" | \"info\"} [status] - 이벤트 상태 / Event status\n * @property {IconName} [icon] - 아이콘 / Icon\n * @property {string} [actor] - 실행자 / Actor\n */\nexport interface TransactionEvent {\n id: string;\n title: string;\n description?: string;\n timestamp: string | Date;\n status?: \"success\" | \"warning\" | \"error\" | \"info\";\n icon?: IconName;\n actor?: string;\n}\n\n/**\n * TransactionDetailDrawer 컴포넌트의 props / TransactionDetailDrawer component props\n * @typedef {Object} TransactionDetailDrawerProps\n * @property {boolean} open - 드로어 열림 상태 / Drawer open state\n * @property {() => void} onClose - 닫기 핸들러 / Close handler\n * @property {TransactionDetail} [transaction] - 거래 상세 정보 / Transaction detail information\n * @property {TransactionMetadataItem[]} [metadata=[]] - 메타데이터 배열 / Metadata array\n * @property {SettlementInfo} [settlement] - 정산 정보 / Settlement information\n * @property {FeeBreakdown[]} [fees=[]] - 수수료 내역 배열 / Fee breakdown array\n * @property {TransactionEvent[]} [events=[]] - 이벤트 로그 배열 / Event log array\n * @property {React.ReactNode} [actions] - 액션 컴포넌트 / Actions component\n * @property {React.ReactNode} [summary] - 요약 컴포넌트 / Summary component\n * @property {boolean} [loading=false] - 로딩 상태 / Loading state\n * @property {string} [locale=\"ko-KR\"] - 로케일 / Locale\n * @property {string} [defaultCurrency=\"KRW\"] - 기본 통화 / Default currency\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface TransactionDetailDrawerProps {\n open: boolean;\n onClose: () => void;\n transaction?: TransactionDetail;\n metadata?: TransactionMetadataItem[];\n settlement?: SettlementInfo;\n fees?: FeeBreakdown[];\n events?: TransactionEvent[];\n actions?: React.ReactNode;\n summary?: React.ReactNode;\n loading?: boolean;\n locale?: string;\n defaultCurrency?: string;\n emptyState?: React.ReactNode;\n dot?: string;\n}\n\nconst formatAmount = (amount?: number, currency?: string, locale = \"ko-KR\") => {\n if (typeof amount !== \"number\") return \"-\";\n try {\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: currency ?? \"KRW\",\n maximumFractionDigits: 2,\n }).format(amount);\n } catch {\n return `${amount.toLocaleString(locale)} ${currency ?? \"\"}`.trim();\n }\n};\n\nconst formatDate = (date?: string | Date, locale = \"ko-KR\") => {\n if (!date) return \"-\";\n const parsed = date instanceof Date ? date : new Date(date);\n if (Number.isNaN(parsed.getTime())) return \"-\";\n return parsed.toLocaleString(locale, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\nconst getEventStyle = (\n status?: TransactionEvent[\"status\"],\n): React.CSSProperties => {\n switch (status) {\n case \"success\":\n return { backgroundColor: \"#ecfdf5\", color: \"#047857\" };\n case \"warning\":\n return { backgroundColor: \"#fffbeb\", color: \"#b45309\" };\n case \"error\":\n return { backgroundColor: \"#fff1f2\", color: \"#be123c\" };\n default:\n return { backgroundColor: \"#f8fafc\", color: \"#475569\" };\n }\n};\n\nconst getSettlementBadgeStyle = (\n status?: SettlementStatus,\n): React.CSSProperties => {\n switch (status) {\n case \"completed\":\n return { backgroundColor: \"#ecfdf5\", color: \"#047857\" };\n case \"processing\":\n return { backgroundColor: \"#e0f2fe\", color: \"#075985\" };\n case \"failed\":\n return { backgroundColor: \"#fff1f2\", color: \"#be123c\" };\n case \"pending\":\n return { backgroundColor: \"#fffbeb\", color: \"#b45309\" };\n default:\n return { backgroundColor: \"#f8fafc\", color: \"#475569\" };\n }\n};\n\n/**\n * TransactionDetailDrawer 컴포넌트\n *\n * 거래 상세 정보를 표시하는 드로어 컴포넌트입니다.\n * 거래 정보, 정산 정보, 수수료 내역, 이벤트 로그 등을 포함합니다.\n *\n * Drawer component that displays detailed transaction information.\n * Includes transaction details, settlement info, fee breakdown, and event logs.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <TransactionDetailDrawer\n * open={isOpen}\n * onClose={() => setIsOpen(false)}\n * transaction={{\n * id: \"tx_123\",\n * status: \"approved\",\n * amount: 100000,\n * currency: \"KRW\",\n * merchant: \"가맹점 A\"\n * }}\n * metadata={[\n * { label: \"거래 ID\", value: \"tx_123\", icon: \"creditCard\" },\n * { label: \"고객\", value: \"홍길동\", icon: \"user\" }\n * ]}\n * />\n *\n * @example\n * // 정산 정보 포함 / With settlement info\n * <TransactionDetailDrawer\n * open={isOpen}\n * onClose={handleClose}\n * transaction={transaction}\n * settlement={{\n * status: \"processing\",\n * amount: 95000,\n * currency: \"KRW\",\n * scheduledDate: new Date(\"2024-01-15\")\n * }}\n * fees={[\n * { label: \"수수료\", amount: 5000, currency: \"KRW\" }\n * ]}\n * events={eventLogs}\n * />\n *\n * @param {TransactionDetailDrawerProps} props - TransactionDetailDrawer 컴포넌트의 props / TransactionDetailDrawer component props\n * @returns {JSX.Element} TransactionDetailDrawer 컴포넌트 / TransactionDetailDrawer component\n */\nexport const TransactionDetailDrawer: React.FC<\n TransactionDetailDrawerProps\n> = ({\n open,\n onClose,\n transaction,\n metadata = [],\n settlement,\n fees = [],\n events = [],\n actions,\n summary,\n loading = false,\n locale = \"ko-KR\",\n defaultCurrency = \"KRW\",\n emptyState,\n dot: dotProp,\n}) => {\n const statusStyle = transaction && STATUS_STYLES[transaction.status];\n\n const sectionStyle: React.CSSProperties = {\n ...resolveDot(\"rounded-xl p-4\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, rgba(255,255,255,0.4))\",\n };\n\n return (\n <Drawer isOpen={open} onClose={onClose} dot={dotProp}>\n <DrawerHeader onClose={onClose}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-1\"),\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n color: \"#94a3b8\",\n }}\n >\n <span>거래 상세</span>\n {transaction?.reference && (\n <span\n style={{\n borderRadius: \"9999px\",\n backgroundColor: \"#f1f5f9\",\n padding: \"0.125rem 0.5rem\",\n color: \"#64748b\",\n }}\n >\n {transaction.reference}\n </span>\n )}\n </div>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n <p\n style={{\n fontSize: \"1.125rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {transaction?.id ?? \"—\"}\n </p>\n {statusStyle && (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n fontWeight: 500,\n padding: \"0.25rem 0.75rem\",\n borderRadius: \"9999px\",\n fontSize: \"0.75rem\",\n ...statusStyle.badgeStyle,\n }}\n >\n {statusStyle.label}\n </span>\n )}\n </div>\n <p style={{ fontSize: \"0.875rem\", color: \"#64748b\" }}>\n {transaction?.merchant ?? \"가맹점 정보 없음\"} ·{\" \"}\n {transaction?.method ?? \"결제수단 미지정\"}\n </p>\n </div>\n </DrawerHeader>\n\n <DrawerContent\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-6\"),\n }}\n >\n {loading ? (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n {[...Array(3)].map((_, idx) => (\n <div\n key={idx}\n style={{\n ...resolveDot(\"h-20 rounded-xl\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n animation: \"pulse 2s infinite\",\n backgroundColor: \"var(--color-muted, rgba(248,250,252,0.6))\",\n }}\n />\n ))}\n </div>\n ) : (\n <>\n <section\n style={{\n ...sectionStyle,\n display: \"grid\",\n ...resolveDot(\"gap-4\"),\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n }}\n aria-label=\"거래 요약 정보\"\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-1\"),\n }}\n >\n <p\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 거래 금액\n </p>\n <p\n style={{\n fontSize: \"1.5rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {formatAmount(\n transaction?.amount,\n transaction?.currency ?? defaultCurrency,\n locale,\n )}\n </p>\n <p style={{ fontSize: \"0.75rem\", color: \"#94a3b8\" }}>\n 생성{\" \"}\n <time\n dateTime={\n transaction?.createdAt instanceof Date\n ? transaction.createdAt.toISOString()\n : typeof transaction?.createdAt === \"string\"\n ? transaction.createdAt\n : undefined\n }\n >\n {formatDate(transaction?.createdAt, locale)}\n </time>\n </p>\n </div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <p\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 요약\n </p>\n {summary ?? (\n <p style={{ fontSize: \"0.875rem\", color: \"#475569\" }}>\n {transaction?.customer ?? \"고객 정보 없음\"} /{\" \"}\n {transaction?.method ?? \"결제수단 미지정\"}\n </p>\n )}\n </div>\n </section>\n\n {metadata.length > 0 && (\n <section\n style={sectionStyle}\n aria-label=\"거래 세부 정보\"\n role=\"region\"\n >\n <h3\n style={{\n ...resolveDot(\"mb-3\"),\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n 세부 정보\n </h3>\n <dl\n style={{\n display: \"grid\",\n ...resolveDot(\"gap-4\"),\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n }}\n >\n {metadata.map((item) => (\n <div\n key={item.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n {item.icon && (\n <span\n style={{\n ...resolveDot(\"rounded-lg p-2\"),\n backgroundColor: \"var(--color-muted, #f1f5f9)\",\n color: \"#64748b\",\n }}\n aria-hidden=\"true\"\n >\n <Icon name={item.icon} dot=\"w-4 h-4\" />\n </span>\n )}\n <div>\n <dt\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n {item.label}\n </dt>\n <dd style={{ fontSize: \"0.875rem\", color: \"#334155\" }}>\n {item.value}\n </dd>\n </div>\n </div>\n ))}\n </dl>\n </section>\n )}\n\n {settlement && (\n <section\n style={sectionStyle}\n aria-label=\"정산 정보\"\n role=\"region\"\n >\n <div\n style={{\n ...resolveDot(\"mb-4\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div>\n <h3\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n 정산 정보\n </h3>\n\n {settlement.note && (\n <p style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {settlement.note}\n </p>\n )}\n </div>\n {settlement.status && (\n <span\n style={{\n borderRadius: \"9999px\",\n padding: \"0.25rem 0.75rem\",\n fontSize: \"0.75rem\",\n fontWeight: 500,\n ...getSettlementBadgeStyle(settlement.status),\n }}\n aria-label={`정산 상태: ${settlement.status}`}\n >\n {settlement.status}\n </span>\n )}\n </div>\n <dl\n style={{\n display: \"grid\",\n ...resolveDot(\"gap-4\"),\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n }}\n >\n <div>\n <dt\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 정산 금액\n </dt>\n <dd style={{ fontSize: \"0.875rem\", color: \"#334155\" }}>\n {formatAmount(\n settlement.amount,\n settlement.currency ?? defaultCurrency,\n locale,\n )}\n </dd>\n </div>\n <div>\n <dt\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 예정일\n </dt>\n <dd style={{ fontSize: \"0.875rem\", color: \"#334155\" }}>\n {settlement.scheduledDate && (\n <time\n dateTime={\n settlement.scheduledDate instanceof Date\n ? settlement.scheduledDate.toISOString()\n : typeof settlement.scheduledDate === \"string\"\n ? settlement.scheduledDate\n : undefined\n }\n >\n {formatDate(settlement.scheduledDate, locale)}\n </time>\n )}\n </dd>\n </div>\n {settlement.bankAccount && (\n <div>\n <dt\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 계좌\n </dt>\n <dd style={{ fontSize: \"0.875rem\", color: \"#334155\" }}>\n {settlement.bankAccount}\n </dd>\n </div>\n )}\n {settlement.expectedPayout && (\n <div>\n <dt\n style={{\n fontSize: \"0.75rem\",\n textTransform: \"uppercase\",\n color: \"#94a3b8\",\n }}\n >\n 예상 지급\n </dt>\n <dd style={{ fontSize: \"0.875rem\", color: \"#334155\" }}>\n {settlement.expectedPayout}\n </dd>\n </div>\n )}\n </dl>\n </section>\n )}\n\n {fees.length > 0 && (\n <section\n style={sectionStyle}\n aria-label=\"수수료 내역\"\n role=\"region\"\n >\n <h3\n style={{\n ...resolveDot(\"mb-3\"),\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n 수수료\n </h3>\n <dl\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n {fees.map((fee) => (\n <div\n key={fee.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontSize: \"0.875rem\",\n color: \"#334155\",\n }}\n >\n <div>\n <dt style={{ fontWeight: 500 }}>{fee.label}</dt>\n {fee.description && (\n <dd style={{ fontSize: \"0.75rem\", color: \"#94a3b8\" }}>\n {fee.description}\n </dd>\n )}\n </div>\n <dd>\n {formatAmount(\n fee.amount,\n fee.currency ?? defaultCurrency,\n locale,\n )}\n </dd>\n </div>\n ))}\n </dl>\n </section>\n )}\n\n <section\n style={sectionStyle}\n aria-label=\"이벤트 로그\"\n role=\"region\"\n >\n <h3\n style={{\n ...resolveDot(\"mb-4\"),\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n 이벤트 로그\n </h3>\n {events.length === 0 ? (\n (emptyState ?? (\n <DashboardEmptyState\n icon=\"activity\"\n title=\"이벤트가 없습니다\"\n description=\"승인/정산 등 상태 변화가 발생하면 자동으로 표시됩니다.\"\n size=\"sm\"\n />\n ))\n ) : (\n <ol\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n }}\n role=\"list\"\n aria-label=\"이벤트 목록\"\n >\n {events.map((event) => (\n <li\n key={event.id}\n role=\"listitem\"\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n ...resolveDot(\"gap-3 rounded-xl p-3\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n }}\n >\n <div\n style={{\n ...resolveDot(\"rounded-lg p-2\"),\n ...getEventStyle(event.status),\n }}\n aria-hidden=\"true\"\n >\n <Icon name={event.icon ?? \"activity\"} dot=\"w-4 h-4\" />\n </div>\n <div style={{ flex: 1 }}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n <span>{event.title}</span>\n <time\n dateTime={\n event.timestamp instanceof Date\n ? event.timestamp.toISOString()\n : typeof event.timestamp === \"string\"\n ? event.timestamp\n : undefined\n }\n style={{ fontSize: \"0.75rem\", color: \"#94a3b8\" }}\n >\n {formatDate(event.timestamp, locale)}\n </time>\n </div>\n {event.description && (\n <p style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {event.description}\n </p>\n )}\n {event.actor && (\n <p\n style={{\n fontSize: \"0.75rem\",\n color: \"#94a3b8\",\n ...resolveDot(\"mt-1\"),\n }}\n aria-label={`실행자: ${event.actor}`}\n >\n by {event.actor}\n </p>\n )}\n </div>\n </li>\n ))}\n </ol>\n )}\n </section>\n </>\n )}\n </DrawerContent>\n\n {actions && <DrawerFooter>{actions}</DrawerFooter>}\n </Drawer>\n );\n};\n\nTransactionDetailDrawer.displayName = \"TransactionDetailDrawer\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport { DashboardEmptyState } from \"./EmptyState\";\n\nexport type SettlementTimelineStatus =\n | \"pending\"\n | \"processing\"\n | \"completed\"\n | \"failed\";\n\n/**\n * 정산 타임라인 아이템 인터페이스 / SettlementTimelineItem interface\n * @typedef {Object} SettlementTimelineItem\n * @property {string} id - 아이템 고유 ID / Item unique ID\n * @property {string} title - 제목 / Title\n * @property {string} [description] - 설명 / Description\n * @property {SettlementTimelineStatus} status - 상태 / Status\n * @property {number} [amount] - 금액 / Amount\n * @property {string} [currency] - 통화 / Currency\n * @property {string | Date} [date] - 날짜 / Date\n * @property {string} [meta] - 메타 정보 / Meta information\n * @property {IconName} [icon] - 아이콘 / Icon\n */\nexport interface SettlementTimelineItem {\n id: string;\n title: string;\n description?: string;\n status: SettlementTimelineStatus;\n amount?: number;\n currency?: string;\n date?: string | Date;\n meta?: string;\n icon?: IconName;\n}\n\n/**\n * SettlementTimeline 컴포넌트의 props / SettlementTimeline component props\n * @typedef {Object} SettlementTimelineProps\n * @property {SettlementTimelineItem[]} items - 타임라인 아이템 배열 / Timeline items array\n * @property {string} [highlightedId] - 강조할 아이템 ID / Highlighted item ID\n * @property {string} [locale=\"ko-KR\"] - 로케일 / Locale\n * @property {string} [defaultCurrency=\"KRW\"] - 기본 통화 / Default currency\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface SettlementTimelineProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n items: SettlementTimelineItem[];\n highlightedId?: string;\n locale?: string;\n defaultCurrency?: string;\n emptyState?: React.ReactNode;\n dot?: string;\n}\n\nconst STATUS_CONFIG: Record<\n SettlementTimelineStatus,\n {\n dotColor: string;\n borderColor: string;\n textColor: string;\n label: string;\n shadow?: string;\n }\n> = {\n completed: {\n dotColor: \"#10b981\",\n borderColor: \"rgba(167,243,208,1)\",\n textColor: \"#047857\",\n label: \"정산 완료\",\n shadow: \"0 0 8px rgba(16,185,129,0.5)\",\n },\n processing: {\n dotColor: \"#0ea5e9\",\n borderColor: \"rgba(186,230,253,1)\",\n textColor: \"#0369a1\",\n label: \"처리 중\",\n shadow: \"0 0 8px rgba(14,165,233,0.5)\",\n },\n pending: {\n dotColor: \"#fbbf24\",\n borderColor: \"rgba(253,230,138,1)\",\n textColor: \"#b45309\",\n label: \"대기\",\n },\n failed: {\n dotColor: \"#f43f5e\",\n borderColor: \"rgba(253,205,211,1)\",\n textColor: \"#be123c\",\n label: \"실패\",\n },\n};\n\nconst formatAmount = (amount?: number, currency?: string, locale = \"ko-KR\") => {\n if (typeof amount !== \"number\") return undefined;\n const unit = currency ?? \"KRW\";\n try {\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: unit,\n maximumFractionDigits: 2,\n }).format(amount);\n } catch {\n return `${amount.toLocaleString(locale)} ${unit}`;\n }\n};\n\nconst formatDate = (value?: string | Date, locale = \"ko-KR\") => {\n if (!value) return undefined;\n const parsed = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(parsed.getTime())) return undefined;\n return parsed.toLocaleString(locale, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\n/**\n * SettlementTimeline 컴포넌트\n *\n * 정산 처리 단계를 타임라인 형태로 표시하는 컴포넌트입니다.\n * 각 단계의 상태, 금액, 날짜를 시각적으로 표시합니다.\n *\n * Timeline component that displays settlement processing stages.\n * Visually shows status, amount, and date for each stage.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <SettlementTimeline\n * items={[\n * {\n * id: \"1\",\n * title: \"정산 요청\",\n * status: \"completed\",\n * amount: 1000000,\n * currency: \"KRW\",\n * date: new Date(\"2024-01-01\")\n * },\n * {\n * id: \"2\",\n * title: \"처리 중\",\n * status: \"processing\",\n * amount: 1000000,\n * currency: \"KRW\"\n * }\n * ]}\n * />\n *\n * @example\n * // 강조 기능 / Highlight feature\n * <SettlementTimeline\n * items={timelineItems}\n * highlightedId=\"2\"\n * locale=\"en-US\"\n * defaultCurrency=\"USD\"\n * />\n *\n * @param {SettlementTimelineProps} props - SettlementTimeline 컴포넌트의 props / SettlementTimeline component props\n * @returns {JSX.Element} SettlementTimeline 컴포넌트 / SettlementTimeline component\n */\nexport const SettlementTimeline: React.FC<SettlementTimelineProps> = ({\n items,\n highlightedId,\n locale = \"ko-KR\",\n defaultCurrency = \"KRW\",\n emptyState,\n dot,\n style,\n ...props\n}) => {\n const hasItems = items.length > 0;\n\n return (\n <div\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-xl p-4\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, rgba(255,255,255,0.5))\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <div\n style={{\n ...resolveDot(\"mb-4\"),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div>\n <p\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n 정산 타임라인\n </p>\n <p style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n 처리 단계별 상태와 금액을 확인하세요.\n </p>\n </div>\n </div>\n\n {!hasItems ? (\n (emptyState ?? (\n <DashboardEmptyState\n icon=\"calendar-clock\"\n title=\"정산 단계가 없습니다\"\n description=\"정산 요청이 생성되면 자동으로 단계가 채워집니다.\"\n size=\"sm\"\n />\n ))\n ) : (\n <ol\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-4\"),\n }}\n role=\"list\"\n aria-label=\"정산 타임라인\"\n >\n {items.map((item, index) => {\n const statusConfig = STATUS_CONFIG[item.status];\n const amount = formatAmount(\n item.amount,\n item.currency ?? defaultCurrency,\n locale,\n );\n const date = formatDate(item.date, locale);\n const isHighlighted = highlightedId === item.id;\n const showConnector = index !== items.length - 1;\n\n const itemLabel = `${item.title}, 상태: ${statusConfig.label}${amount ? `, 금액: ${amount}` : \"\"}${date ? `, 날짜: ${date}` : \"\"}`;\n\n return (\n <li\n key={item.id}\n role=\"listitem\"\n aria-label={itemLabel}\n style={{\n position: \"relative\",\n display: \"flex\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n }}\n >\n <span\n style={{\n zIndex: 10,\n ...resolveDot(\"h-3.5 w-3.5 rounded-full\"),\n border: \"2px solid\",\n backgroundColor: statusConfig.dotColor,\n borderColor: statusConfig.dotColor,\n boxShadow: statusConfig.shadow,\n transform: isHighlighted ? \"scale(1.1)\" : undefined,\n flexShrink: 0,\n }}\n aria-label={`${statusConfig.label} 상태`}\n />\n {showConnector && (\n <span\n style={{\n ...resolveDot(\"mt-1\"),\n flex: 1,\n width: \"1px\",\n backgroundColor: \"var(--color-border, #e2e8f0)\",\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n <div\n style={{\n flex: 1,\n ...resolveDot(\"rounded-xl p-4 mb-2\"),\n border: isHighlighted ? \"2px solid\" : \"1px solid\",\n borderColor: statusConfig.borderColor,\n boxShadow: isHighlighted\n ? \"0 1px 3px rgba(0,0,0,0.1)\"\n : undefined,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <span\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {item.title}\n </span>\n <span\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 500,\n borderRadius: \"9999px\",\n padding: \"0.125rem 0.5rem\",\n color: statusConfig.textColor,\n }}\n >\n {statusConfig.label}\n </span>\n {item.meta && (\n <span style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {item.meta}\n </span>\n )}\n </div>\n {item.description && (\n <p\n style={{\n ...resolveDot(\"mt-1\"),\n fontSize: \"0.875rem\",\n color: \"#475569\",\n }}\n >\n {item.description}\n </p>\n )}\n <div\n style={{\n ...resolveDot(\"mt-3 gap-4\"),\n display: \"flex\",\n flexWrap: \"wrap\",\n fontSize: \"0.75rem\",\n color: \"#64748b\",\n }}\n >\n {amount && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n fontSize: \"0.875rem\",\n color: \"var(--color-foreground, #334155)\",\n }}\n >\n <Icon\n name=\"wallet\"\n dot=\"w-3.5 h-3.5\"\n style={{ color: \"#94a3b8\" }}\n />\n {amount}\n </div>\n )}\n {date && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n }}\n >\n <Icon\n name=\"clock\"\n dot=\"w-3.5 h-3.5\"\n style={{ color: \"#94a3b8\" }}\n aria-hidden={true}\n />\n <time\n dateTime={\n item.date instanceof Date\n ? item.date.toISOString()\n : typeof item.date === \"string\"\n ? item.date\n : undefined\n }\n >\n {date}\n </time>\n </div>\n )}\n </div>\n </div>\n </li>\n );\n })}\n </ol>\n )}\n </div>\n );\n};\n\nSettlementTimeline.displayName = \"SettlementTimeline\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { DashboardEmptyState } from \"./EmptyState\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\n\ntype RoutingStatus = \"normal\" | \"warning\" | \"critical\";\n\n/**\n * 라우팅 분할 세그먼트 인터페이스 / RoutingBreakdownSegment interface\n * @typedef {Object} RoutingBreakdownSegment\n * @property {string} id - 세그먼트 고유 ID / Segment unique ID\n * @property {string} label - 세그먼트 라벨 / Segment label\n * @property {number} value - 세그먼트 값 / Segment value\n * @property {string} [color] - 커스텀 색상 / Custom color\n * @property {RoutingStatus} [status] - 상태 / Status\n * @property {string} [icon] - 아이콘 이름 / Icon name\n * @property {string} [detail] - 상세 정보 / Detail information\n */\nexport interface RoutingBreakdownSegment {\n id: string;\n label: string;\n value: number;\n color?: string;\n status?: RoutingStatus;\n icon?: string;\n detail?: string;\n}\n\n/**\n * RoutingBreakdownCard 컴포넌트의 props / RoutingBreakdownCard component props\n * @typedef {Object} RoutingBreakdownCardProps\n * @property {string} [title=\"PG / 결제수단 비중\"] - 카드 제목 / Card title\n * @property {string} [description=\"라우팅별 처리 비율과 상태\"] - 카드 설명 / Card description\n * @property {RoutingBreakdownSegment[]} segments - 세그먼트 배열 / Segments array\n * @property {string} [totalLabel=\"총 거래\"] - 총계 라벨 / Total label\n * @property {React.ReactNode} [totalValue] - 총계 값 / Total value\n * @property {string} [highlightId] - 강조할 세그먼트 ID / Highlighted segment ID\n * @property {React.ReactNode} [actions] - 액션 컴포넌트 / Actions component\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {(segment: RoutingBreakdownSegment, percentage: number) => React.ReactNode} [formatter] - 커스텀 포맷터 / Custom formatter\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface RoutingBreakdownCardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n title?: string;\n description?: string;\n segments: RoutingBreakdownSegment[];\n totalLabel?: string;\n totalValue?: React.ReactNode;\n highlightId?: string;\n actions?: React.ReactNode;\n emptyState?: React.ReactNode;\n formatter?: (\n segment: RoutingBreakdownSegment,\n percentage: number,\n ) => React.ReactNode;\n dot?: string;\n}\n\nconst DEFAULT_COLORS = [\n \"#0ea5e9\",\n \"#6366f1\",\n \"#22c55e\",\n \"#f97316\",\n \"#a855f7\",\n \"#ef4444\",\n];\n\nconst STATUS_BADGE_STYLES: Record<RoutingStatus, React.CSSProperties> = {\n normal: { backgroundColor: \"#ecfdf5\", color: \"#047857\" },\n warning: { backgroundColor: \"#fffbeb\", color: \"#b45309\" },\n critical: { backgroundColor: \"#fff1f2\", color: \"#be123c\" },\n};\n\nconst STATUS_LABELS: Record<RoutingStatus, string> = {\n normal: \"정상\",\n warning: \"감시\",\n critical: \"장애\",\n};\n\nconst formatPercentage = (value: number, total: number) => {\n if (total <= 0) return \"0%\";\n return `${Math.round((value / total) * 1000) / 10}%`;\n};\n\n/**\n * RoutingBreakdownCard 컴포넌트\n *\n * PG 라우팅 또는 결제수단별 비중을 표시하는 카드 컴포넌트입니다.\n * 진행 바와 세그먼트별 상세 정보를 제공합니다.\n *\n * Card component that displays PG routing or payment method breakdown.\n * Provides progress bar and detailed information for each segment.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <RoutingBreakdownCard\n * title=\"PG 라우팅 비중\"\n * segments={[\n * { id: \"pg1\", label: \"PG A\", value: 5000, status: \"normal\" },\n * { id: \"pg2\", label: \"PG B\", value: 3000, status: \"warning\" },\n * { id: \"pg3\", label: \"PG C\", value: 2000, status: \"normal\" }\n * ]}\n * totalValue=\"10,000\"\n * />\n *\n * @example\n * // 강조 기능 / Highlight feature\n * <RoutingBreakdownCard\n * segments={segments}\n * highlightId=\"pg1\"\n * formatter={(segment, percentage) => (\n * <div>\n * <span>{segment.value.toLocaleString()}</span>\n * <span>{percentage}%</span>\n * </div>\n * )}\n * />\n *\n * @param {RoutingBreakdownCardProps} props - RoutingBreakdownCard 컴포넌트의 props / RoutingBreakdownCard component props\n * @returns {JSX.Element} RoutingBreakdownCard 컴포넌트 / RoutingBreakdownCard component\n */\nexport const RoutingBreakdownCard: React.FC<RoutingBreakdownCardProps> = ({\n title = \"PG / 결제수단 비중\",\n description = \"라우팅별 처리 비율과 상태\",\n segments,\n totalLabel = \"총 거래\",\n totalValue,\n highlightId,\n actions,\n emptyState,\n formatter,\n dot,\n style,\n ...props\n}) => {\n const hasSegments = segments.length > 0;\n const total = segments.reduce((sum, segment) => sum + segment.value, 0);\n\n return (\n <div\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-xl p-5\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, rgba(255,255,255,0.6))\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n <div>\n <p\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {title}\n </p>\n <p style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>{description}</p>\n </div>\n {actions && (\n <div style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>{actions}</div>\n )}\n </div>\n\n {!hasSegments ? (\n (emptyState ?? (\n <DashboardEmptyState\n icon=\"pie-chart\"\n title=\"라우팅 데이터가 없습니다\"\n description=\"PG 라우팅 혹은 결제수단 정보가 수집되면 자동으로 표시됩니다.\"\n size=\"sm\"\n style={{ ...resolveDot(\"mt-4\") }}\n />\n ))\n ) : (\n <>\n <div style={{ ...resolveDot(\"mt-4\") }}>\n <div\n style={{\n display: \"flex\",\n ...resolveDot(\"h-3\"),\n overflow: \"hidden\",\n borderRadius: \"9999px\",\n backgroundColor: \"var(--color-muted, #f1f5f9)\",\n }}\n >\n {segments.map((segment, index) => {\n const width = total === 0 ? 0 : (segment.value / total) * 100;\n const color =\n segment.color ??\n DEFAULT_COLORS[index % DEFAULT_COLORS.length];\n return (\n <div\n key={segment.id}\n style={{\n height: \"100%\",\n transition: \"all 150ms\",\n width: `${width}%`,\n backgroundColor: color,\n opacity:\n highlightId && highlightId !== segment.id ? 0.4 : 1,\n }}\n aria-label={`${segment.label} ${formatPercentage(segment.value, total)}`}\n />\n );\n })}\n </div>\n <div\n style={{\n ...resolveDot(\"mt-2\"),\n fontSize: \"0.75rem\",\n color: \"#64748b\",\n }}\n >\n {totalLabel}: {totalValue ?? total.toLocaleString()}\n </div>\n </div>\n\n <div\n style={{\n ...resolveDot(\"mt-4 gap-3\"),\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n {segments.map((segment, index) => {\n const color =\n segment.color ?? DEFAULT_COLORS[index % DEFAULT_COLORS.length];\n const percentage =\n total === 0 ? 0 : (segment.value / total) * 100;\n const badgeStyle = segment.status\n ? STATUS_BADGE_STYLES[segment.status]\n : null;\n const statusLabel = segment.status\n ? STATUS_LABELS[segment.status]\n : null;\n const customContent = formatter?.(segment, percentage);\n const isHighlighted = highlightId === segment.id;\n\n return (\n <div\n key={segment.id}\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3 rounded-xl p-3\"),\n border: isHighlighted\n ? \"2px solid var(--color-border, #e2e8f0)\"\n : \"1px solid var(--color-border, #f1f5f9)\",\n transition: \"border-color 150ms\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n minWidth: \"3rem\",\n }}\n >\n {segment.icon && (\n <span\n style={{\n ...resolveDot(\"rounded-lg p-1.5\"),\n backgroundColor: \"var(--color-muted, #f1f5f9)\",\n color: \"#64748b\",\n }}\n >\n <Icon name={segment.icon as IconName} dot=\"w-4 h-4\" />\n </span>\n )}\n <div\n style={{\n ...resolveDot(\"h-2 w-12 rounded-full\"),\n backgroundColor: color,\n }}\n aria-hidden=\"true\"\n />\n </div>\n <div style={{ flex: 1 }}>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <span\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {segment.label}\n </span>\n {badgeStyle && statusLabel && (\n <span\n style={{\n borderRadius: \"9999px\",\n padding: \"0.125rem 0.5rem\",\n fontSize: \"0.6875rem\",\n fontWeight: 500,\n ...badgeStyle,\n }}\n >\n {statusLabel}\n </span>\n )}\n </div>\n <div style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {segment.detail}\n </div>\n </div>\n {customContent ?? (\n <div\n style={{\n textAlign: \"right\",\n fontSize: \"0.875rem\",\n color: \"var(--color-foreground, #334155)\",\n }}\n >\n <div style={{ fontWeight: 600 }}>\n {segment.value.toLocaleString()}\n </div>\n <div style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {formatPercentage(segment.value, total)}\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>\n );\n};\n\nRoutingBreakdownCard.displayName = \"RoutingBreakdownCard\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport { Badge } from \"../Badge\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../../lib/icons\";\nimport { DashboardEmptyState } from \"./EmptyState\";\nimport { Skeleton } from \"../Skeleton\";\n\nexport type MerchantHealth = \"normal\" | \"warning\" | \"critical\";\n\n/**\n * 가맹점 리스트 아이템 인터페이스 / MerchantListItem interface\n * @typedef {Object} MerchantListItem\n * @property {string} id - 가맹점 고유 ID / Merchant unique ID\n * @property {string} name - 가맹점 이름 / Merchant name\n * @property {string} [status] - 상태 / Status\n * @property {MerchantHealth} [health] - 건강 상태 / Health status\n * @property {number} [approvalRate] - 승인률 (0-1) / Approval rate (0-1)\n * @property {number} [volume] - 거래량 / Transaction volume\n * @property {string} [currency] - 통화 / Currency\n * @property {string} [category] - 카테고리 / Category\n * @property {string} [region] - 지역 / Region\n * @property {string | Date} [updatedAt] - 업데이트 시간 / Updated time\n * @property {string} [tag] - 태그 / Tag\n * @property {IconName | React.ReactNode} [icon] - 아이콘 / Icon\n * @property {Array<{ label: string; value: React.ReactNode }>} [metadata] - 메타데이터 / Metadata\n */\nexport interface MerchantListItem {\n id: string;\n name: string;\n status?: string;\n health?: MerchantHealth;\n approvalRate?: number;\n volume?: number;\n currency?: string;\n category?: string;\n region?: string;\n updatedAt?: string | Date;\n tag?: string;\n icon?: IconName | React.ReactNode;\n metadata?: Array<{ label: string; value: React.ReactNode }>;\n}\n\n/**\n * MerchantList 컴포넌트의 props / MerchantList component props\n * @typedef {Object} MerchantListProps\n * @property {MerchantListItem[]} items - 가맹점 아이템 배열 / Merchant items array\n * @property {boolean} [isLoading=false] - 로딩 상태 / Loading state\n * @property {React.ReactNode} [filters] - 필터 컴포넌트 / Filter component\n * @property {React.ReactNode} [emptyState] - 빈 상태 컴포넌트 / Empty state component\n * @property {(merchant: MerchantListItem) => void} [onMerchantSelect] - 가맹점 선택 핸들러 / Merchant selection handler\n * @property {string} [locale=\"ko-KR\"] - 로케일 / Locale\n * @property {string} [defaultCurrency=\"KRW\"] - 기본 통화 / Default currency\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n */\nexport interface MerchantListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"onSelect\" | \"className\"\n> {\n items: MerchantListItem[];\n isLoading?: boolean;\n filters?: React.ReactNode;\n emptyState?: React.ReactNode;\n onMerchantSelect?: (merchant: MerchantListItem) => void;\n locale?: string;\n defaultCurrency?: string;\n dot?: string;\n}\n\nconst HEALTH_BADGE_STYLES: Record<MerchantHealth, React.CSSProperties> = {\n normal: { backgroundColor: \"#ecfdf5\", color: \"#047857\" },\n warning: { backgroundColor: \"#fffbeb\", color: \"#b45309\" },\n critical: { backgroundColor: \"#fff1f2\", color: \"#be123c\" },\n};\n\nconst HEALTH_LABELS: Record<MerchantHealth, string> = {\n normal: \"정상\",\n warning: \"감시\",\n critical: \"위험\",\n};\n\nconst formatPercent = (value?: number) => {\n if (typeof value !== \"number\") return undefined;\n return `${(Math.round(value * 10) / 10).toFixed(1)}%`;\n};\n\nconst formatVolume = (value?: number, currency?: string, locale = \"ko-KR\") => {\n if (typeof value !== \"number\") return undefined;\n const unit = currency ?? \"KRW\";\n try {\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency: unit,\n maximumFractionDigits: 0,\n }).format(value);\n } catch {\n return `${value.toLocaleString(locale)} ${unit}`;\n }\n};\n\n/**\n * MerchantList 컴포넌트\n *\n * 가맹점 목록을 표시하는 컴포넌트입니다.\n * 가맹점 정보, 건강 상태, 승인률, 거래량 등을 카드 형태로 표시합니다.\n *\n * Component that displays a list of merchants.\n * Shows merchant information, health status, approval rate, and transaction volume in card format.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <MerchantList\n * items={[\n * {\n * id: \"1\",\n * name: \"가맹점 A\",\n * health: \"normal\",\n * approvalRate: 0.985,\n * volume: 1000000,\n * currency: \"KRW\"\n * }\n * ]}\n * onMerchantSelect={(merchant) => console.log(merchant)}\n * />\n *\n * @example\n * // 로딩 상태 / Loading state\n * <MerchantList\n * items={merchants}\n * isLoading={true}\n * filters={<FilterComponent />}\n * />\n *\n * @param {MerchantListProps} props - MerchantList 컴포넌트의 props / MerchantList component props\n * @returns {JSX.Element} MerchantList 컴포넌트 / MerchantList component\n */\nexport const MerchantList: React.FC<MerchantListProps> = ({\n items,\n isLoading = false,\n filters,\n emptyState,\n onMerchantSelect,\n locale = \"ko-KR\",\n defaultCurrency = \"KRW\",\n dot,\n style,\n ...props\n}) => {\n const hasItems = items.length > 0;\n\n return (\n <div\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-xl\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, #ffffff)\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {filters && (\n <div\n style={{\n borderBottom: \"1px solid var(--color-border, #f1f5f9)\",\n ...resolveDot(\"py-3 px-6\"),\n }}\n >\n {filters}\n </div>\n )}\n\n <div style={{ ...resolveDot(\"p-4 px-6\") }}>\n {isLoading ? (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n {[...Array(3)].map((_, idx) => (\n <Skeleton key={idx} dot=\"h-20 rounded-2xl\" />\n ))}\n </div>\n ) : !hasItems ? (\n (emptyState ?? (\n <DashboardEmptyState\n icon=\"store\"\n title=\"가맹점이 없습니다\"\n description=\"검색어를 변경하거나 새로운 가맹점을 온보딩하세요.\"\n size=\"sm\"\n style={{ ...resolveDot(\"py-6\") }}\n />\n ))\n ) : (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n }}\n role=\"list\"\n aria-label=\"가맹점 목록\"\n >\n {items.map((merchant) => {\n const approval = formatPercent(merchant.approvalRate);\n const volume = formatVolume(\n merchant.volume,\n merchant.currency ?? defaultCurrency,\n locale,\n );\n const healthBadgeStyle = merchant.health\n ? HEALTH_BADGE_STYLES[merchant.health]\n : undefined;\n const healthLabel = merchant.health\n ? HEALTH_LABELS[merchant.health]\n : undefined;\n\n const merchantLabel = `${merchant.name}${merchant.status ? `, 상태: ${merchant.status}` : \"\"}${merchant.health ? `, 건강 상태: ${healthLabel}` : \"\"}${volume ? `, 거래량: ${volume}` : \"\"}${approval ? `, 승인률: ${approval}` : \"\"}`;\n\n return (\n <button\n key={merchant.id}\n type=\"button\"\n role=\"button\"\n onClick={\n onMerchantSelect\n ? () => onMerchantSelect(merchant)\n : undefined\n }\n disabled={!onMerchantSelect}\n aria-label={\n onMerchantSelect\n ? `${merchantLabel} - 클릭하여 상세 정보 보기`\n : merchantLabel\n }\n style={{\n width: \"100%\",\n ...resolveDot(\"rounded-xl p-4\"),\n border: \"1px solid var(--color-border, #f1f5f9)\",\n backgroundColor: \"var(--color-card, rgba(255,255,255,0.9))\",\n textAlign: \"left\",\n boxShadow: \"0 1px 2px rgba(0,0,0,0.05)\",\n transition: \"border-color 150ms\",\n cursor: onMerchantSelect ? \"pointer\" : \"default\",\n opacity: onMerchantSelect ? 1 : 0.6,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3\"),\n }}\n >\n {merchant.icon && (\n <div\n style={{\n ...resolveDot(\"rounded-xl p-2\"),\n backgroundColor: \"var(--color-muted, #f1f5f9)\",\n color: \"#64748b\",\n }}\n >\n {typeof merchant.icon === \"string\" ? (\n <Icon\n name={merchant.icon as IconName}\n dot=\"w-5 h-5\"\n />\n ) : (\n merchant.icon\n )}\n </div>\n )}\n <div style={{ flex: 1 }}>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <p\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {merchant.name}\n </p>\n {merchant.status && (\n <Badge dot=\"bg-slate-100 text-slate-600 dark:bg-slate-800 dark:text-slate-100\">\n {merchant.status}\n </Badge>\n )}\n {merchant.tag && (\n <span\n style={{\n borderRadius: \"9999px\",\n backgroundColor: \"var(--color-muted, #f8fafc)\",\n padding: \"0.125rem 0.5rem\",\n fontSize: \"0.6875rem\",\n color: \"#64748b\",\n }}\n >\n {merchant.tag}\n </span>\n )}\n {healthBadgeStyle && (\n <span\n style={{\n borderRadius: \"9999px\",\n padding: \"0.125rem 0.5rem\",\n fontSize: \"0.6875rem\",\n fontWeight: 500,\n ...healthBadgeStyle,\n }}\n >\n {healthLabel}\n </span>\n )}\n </div>\n <div style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n {merchant.category ?? \"카테고리 미정\"} ·{\" \"}\n {merchant.region ?? \"지역 정보 없음\"}\n </div>\n </div>\n <div\n style={{\n textAlign: \"right\",\n fontSize: \"0.875rem\",\n color: \"var(--color-foreground, #0f172a)\",\n }}\n >\n {volume && (\n <div style={{ fontWeight: 600 }}>{volume}</div>\n )}\n {approval && (\n <div style={{ fontSize: \"0.75rem\", color: \"#64748b\" }}>\n 승인률 {approval}\n </div>\n )}\n </div>\n </div>\n\n {merchant.metadata && merchant.metadata.length > 0 && (\n <div\n style={{\n ...resolveDot(\"mt-3 gap-3\"),\n display: \"grid\",\n fontSize: \"0.75rem\",\n color: \"#64748b\",\n gridTemplateColumns: \"repeat(2, minmax(0, 1fr))\",\n }}\n >\n {merchant.metadata.map((meta) => (\n <div\n key={meta.label}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <span style={{ color: \"#94a3b8\" }}>{meta.label}</span>\n <span\n style={{\n color: \"var(--color-foreground, #334155)\",\n }}\n >\n {meta.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nMerchantList.displayName = \"MerchantList\";\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\nimport type { Color } from \"../../lib/types/common\";\n\n/**\n * 색상 단계 매핑 — CSS 값 기반\n */\nconst colorSteps: Record<\n Color,\n {\n empty: string;\n s1: string;\n s2: string;\n s3: string;\n todayBorder: string;\n }\n> = {\n primary: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"color-mix(in srgb, var(--color-primary, #22d3ee) 30%, transparent)\",\n s2: \"color-mix(in srgb, var(--color-primary, #22d3ee) 60%, transparent)\",\n s3: \"var(--color-primary, #0891b2)\",\n todayBorder: \"var(--color-primary, #22d3ee)\",\n },\n cyan: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#a5f3fc\",\n s2: \"#22d3ee\",\n s3: \"#0891b2\",\n todayBorder: \"#22d3ee\",\n },\n blue: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#bfdbfe\",\n s2: \"#60a5fa\",\n s3: \"#2563eb\",\n todayBorder: \"#60a5fa\",\n },\n green: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#bbf7d0\",\n s2: \"#4ade80\",\n s3: \"#16a34a\",\n todayBorder: \"#4ade80\",\n },\n purple: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#e9d5ff\",\n s2: \"#c084fc\",\n s3: \"#9333ea\",\n todayBorder: \"#c084fc\",\n },\n orange: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#fed7aa\",\n s2: \"#fb923c\",\n s3: \"#ea580c\",\n todayBorder: \"#fb923c\",\n },\n red: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#fecaca\",\n s2: \"#f87171\",\n s3: \"#dc2626\",\n todayBorder: \"#f87171\",\n },\n indigo: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#c7d2fe\",\n s2: \"#818cf8\",\n s3: \"#4f46e5\",\n todayBorder: \"#818cf8\",\n },\n pink: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#fbcfe8\",\n s2: \"#f472b6\",\n s3: \"#db2777\",\n todayBorder: \"#f472b6\",\n },\n gray: {\n empty: \"rgba(0,0,0,0.1)\",\n s1: \"#e5e7eb\",\n s2: \"#9ca3af\",\n s3: \"#4b5563\",\n todayBorder: \"#9ca3af\",\n },\n};\n\nexport interface YearlyHeatmapLabels {\n /** 제목 */\n title?: string;\n /** 총 일수 텍스트 (예: \"9일 작성\") */\n totalDays?: string;\n /** 범례 왼쪽 (예: \"적음\") */\n less?: string;\n /** 범례 오른쪽 (예: \"많음\") */\n more?: string;\n /** 툴팁 포맷 함수 (날짜, 카운트) => string */\n tooltip?: (dateStr: string, count: number) => string;\n}\n\nexport interface YearlyHeatmapProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n /** 날짜별 데이터 (키: \"YYYY-MM-DD\", 값: count) */\n data: Record<string, number>;\n /** 색상 테마 */\n color?: Color;\n /** locale (요일/월 표시용, 예: \"ko-KR\") */\n locale?: string;\n /** 텍스트 라벨 */\n labels?: YearlyHeatmapLabels;\n /** dot 유틸리티 스트링 */\n dot?: string;\n}\n\n/**\n * GitHub 잔디 스타일 1년 히트맵\n * 가로: 주(52~53주), 세로: 요일(일~토)\n */\nexport function YearlyHeatmap({\n data,\n color = \"cyan\",\n locale = \"en-US\",\n labels = {},\n dot,\n style,\n ...props\n}: YearlyHeatmapProps) {\n const steps = colorSteps[color] || colorSteps.cyan;\n\n // 주 단위 데이터\n const { weeks, monthLabels } = useMemo(() => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const startDate = new Date(today);\n startDate.setFullYear(startDate.getFullYear() - 1);\n startDate.setDate(startDate.getDate() + 1);\n startDate.setDate(startDate.getDate() - startDate.getDay());\n\n const weeks: (Date | null)[][] = [];\n const monthLabels: { label: string; colIndex: number }[] = [];\n const currentDate = new Date(startDate);\n let lastMonth = -1;\n\n while (currentDate <= today || weeks.length < 53) {\n const week: (Date | null)[] = [];\n let weekHasFirstOfMonth = false;\n let firstOfMonthDate: Date | null = null;\n\n for (let d = 0; d < 7; d++) {\n const cellDate = new Date(currentDate);\n cellDate.setDate(cellDate.getDate() + d);\n\n if (cellDate > today) {\n week.push(null);\n } else {\n week.push(cellDate);\n // 이 주에 1일이 포함되어 있으면 월 라벨 표시\n if (cellDate.getDate() === 1 && cellDate.getMonth() !== lastMonth) {\n weekHasFirstOfMonth = true;\n firstOfMonthDate = cellDate;\n }\n }\n }\n\n if (weekHasFirstOfMonth && firstOfMonthDate) {\n lastMonth = firstOfMonthDate.getMonth();\n monthLabels.push({\n label: firstOfMonthDate.toLocaleDateString(locale, {\n month: \"short\",\n }),\n colIndex: weeks.length,\n });\n }\n\n weeks.push(week);\n currentDate.setDate(currentDate.getDate() + 7);\n if (weeks.length >= 53) break;\n }\n\n return { weeks, monthLabels };\n }, [locale]);\n\n const getDateKey = (date: Date) =>\n `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\n\n const getCellStyle = (date: Date | null): React.CSSProperties => {\n if (!date) return { backgroundColor: \"transparent\" };\n const count = data[getDateKey(date)] || 0;\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const isToday = date.getTime() === today.getTime();\n\n let bg = steps.empty;\n if (count === 1) bg = steps.s1;\n else if (count === 2) bg = steps.s2;\n else if (count >= 3) bg = steps.s3;\n\n return {\n backgroundColor: bg,\n ...(isToday && {\n border: `2px solid ${steps.todayBorder}`,\n }),\n };\n };\n\n const getTooltip = (date: Date | null): string => {\n if (!date) return \"\";\n const count = data[getDateKey(date)] || 0;\n const dateStr = date.toLocaleDateString(locale, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n return labels.tooltip\n ? labels.tooltip(dateStr, count)\n : `${dateStr}: ${count}`;\n };\n\n const totalDays = useMemo(\n () => Object.values(data).filter((v) => v > 0).length,\n [data],\n );\n\n return (\n <div\n style={mergeStyles(\n {\n backgroundColor: \"var(--color-card, #ffffff)\",\n borderRadius: \"0.75rem\",\n padding: \"1rem\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {/* 헤더 */}\n {(labels.title || labels.totalDays) && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: \"0.75rem\",\n }}\n >\n {labels.title && (\n <h3\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"var(--color-foreground, #111827)\",\n }}\n >\n {labels.title}\n </h3>\n )}\n {labels.totalDays && (\n <span\n style={{\n fontSize: \"0.75rem\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n {labels.totalDays}\n </span>\n )}\n </div>\n )}\n\n {/* 히트맵 */}\n <div style={{ width: \"100%\", overflowX: \"auto\" }}>\n {/* 월 라벨 */}\n <div style={{ display: \"flex\", marginBottom: \"0.25rem\", gap: \"2px\" }}>\n {weeks.map((_, wi) => {\n const ml = monthLabels.find((m) => m.colIndex === wi);\n return (\n <div key={wi} style={{ flex: 1, minWidth: \"10px\" }}>\n {ml && (\n <span\n style={{\n fontSize: \"9px\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n whiteSpace: \"nowrap\",\n }}\n >\n {ml.label}\n </span>\n )}\n </div>\n );\n })}\n </div>\n\n {/* 셀 그리드 */}\n <div style={{ display: \"flex\", gap: \"2px\" }}>\n {weeks.map((week, wi) => (\n <div\n key={wi}\n style={{\n flex: 1,\n minWidth: \"10px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"2px\",\n }}\n >\n {week.map((date, di) => (\n <div\n key={di}\n style={{\n aspectRatio: \"1 / 1\",\n borderRadius: \"2px\",\n ...getCellStyle(date),\n }}\n title={getTooltip(date)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n\n {/* 범례 */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: \"6px\",\n marginTop: \"0.75rem\",\n fontSize: \"10px\",\n color: \"var(--color-muted-foreground, #6b7280)\",\n }}\n >\n <span>{labels.less || \"Less\"}</span>\n <div\n style={{\n width: \"0.75rem\",\n height: \"0.75rem\",\n borderRadius: \"2px\",\n backgroundColor: steps.empty,\n }}\n />\n <div\n style={{\n width: \"0.75rem\",\n height: \"0.75rem\",\n borderRadius: \"2px\",\n backgroundColor: steps.s1,\n }}\n />\n <div\n style={{\n width: \"0.75rem\",\n height: \"0.75rem\",\n borderRadius: \"2px\",\n backgroundColor: steps.s2,\n }}\n />\n <div\n style={{\n width: \"0.75rem\",\n height: \"0.75rem\",\n borderRadius: \"2px\",\n backgroundColor: steps.s3,\n }}\n />\n <span>{labels.more || \"More\"}</span>\n </div>\n </div>\n );\n}\n"]}