@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,3 @@
1
+ "use client";
2
+ import {m as m$1}from'./chunk-NSDWT2JM.mjs';import {d,e}from'./chunk-OBMOTQEU.mjs';import m,{useState,useMemo}from'react';import {jsx,jsxs}from'react/jsx-runtime';var z=m.forwardRef(({children:n,dot:o,style:i,type:a="single",defaultValue:l,value:s,onValueChange:p,collapsible:v=false,...u},g)=>{let[b,f]=m.useState(s?Array.isArray(s)?s:[s]:l?Array.isArray(l)?l:[l]:[]);m.useEffect(()=>{s!==void 0&&f(Array.isArray(s)?s:[s]);},[s]);let E=e=>{let r;a==="single"?b.includes(e)?r=v?[]:b:r=[e]:b.includes(e)?r=b.filter(d=>d!==e):r=[...b,e],f(r),p==null||p(a==="single"?r[0]||"":r);},R=m.useMemo(()=>{let e=[];return m.Children.forEach(n,r=>{if(m.isValidElement(r)){let d=r.props;d.value&&e.push(d.value);}}),e},[n]),t=e=>{var A;let r=e.target;if(!r.hasAttribute("data-accordion-trigger"))return;let d=r.getAttribute("data-accordion-value");if(!d)return;let S=R.indexOf(d);if(S===-1)return;let C=S;if(e.key==="ArrowDown"?(e.preventDefault(),C=S<R.length-1?S+1:0):e.key==="ArrowUp"?(e.preventDefault(),C=S>0?S-1:R.length-1):e.key==="Home"?(e.preventDefault(),C=0):e.key==="End"&&(e.preventDefault(),C=R.length-1),C!==S&&R[C]){let L=(A=r.closest("[data-accordion-item]"))==null?void 0:A.querySelector(`[data-accordion-value="${R[C]}"]`);L==null||L.focus();}};return jsx("div",{ref:g,style:d(e("space-y-2"),e(o),i),onKeyDown:t,...u,children:m.Children.map(n,e=>m.isValidElement(e)?m.cloneElement(e,{openItems:b,onToggle:E}):e)})});z.displayName="Accordion";var U=m.forwardRef(({value:n,children:o,style:i,disabled:a=false,openItems:l=[],onToggle:s,...p},v)=>{let u=l.includes(n);return jsx("div",{ref:v,"data-accordion-item":true,style:d(e("border border-border/50 rounded-lg overflow-hidden"),a?e("opacity-50 pointer-events-none"):void 0,i),...p,children:m.Children.map(o,g=>m.isValidElement(g)?m.cloneElement(g,{value:n,isOpen:u,disabled:a,onToggle:()=>s==null?void 0:s(n),"data-accordion-value":n}):g)})});U.displayName="AccordionItem";var F=m.forwardRef(({children:n,style:o,icon:i,iconPosition:a="right",value:l,isOpen:s=false,disabled:p=false,onToggle:v,...u},g)=>{let b=jsx(m$1,{name:"chevronDown",size:20,dot:`transition-transform duration-300 ease-out text-muted-foreground${s?" rotate-180":""}`}),f=`accordion-content-${l}`,E=`accordion-trigger-${l}`;return jsxs("button",{ref:g,id:E,"data-accordion-trigger":true,"data-accordion-value":l,"aria-expanded":s,"aria-controls":f,onClick:v,disabled:p,style:d(e("flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"),o),...u,children:[jsxs("div",{style:e("flex items-center gap-3 flex-1"),children:[a==="left"&&(i||b),jsx("span",{style:e("flex-1"),children:n})]}),a==="right"&&(i||b)]})});F.displayName="AccordionTrigger";var K=m.forwardRef(({children:n,style:o,isOpen:i=false,value:a,"data-accordion-value":l,...s},p)=>{let[v,u]=m.useState(0),g=m.useRef(null),b=a||l||"unknown";m.useEffect(()=>{g.current&&u(i?g.current.scrollHeight:0);},[i,n]);let f=`accordion-trigger-${b}`,E=`accordion-content-${b}`;return jsx("div",{ref:p,id:E,role:"region","aria-labelledby":f,hidden:!i,style:d(e("overflow-hidden transition-all duration-300 ease-out"),{height:`${v}px`}),...s,children:jsx("div",{ref:g,style:d(e("px-6 pt-2 pb-4"),o),children:n})})});K.displayName="AccordionContent";var V={display:"flex",alignItems:"center",justifyContent:"center"},M={default:{backgroundColor:"var(--color-muted)",...e("p-3 rounded-xl"),border:"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)"},pills:{backgroundColor:"var(--color-muted)",...e("p-3 rounded-xl"),border:"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)"},underline:{borderBottom:"1px solid var(--color-border)",padding:"0",borderRadius:"0",backgroundColor:"transparent"},cards:{backgroundColor:"color-mix(in srgb, var(--color-muted) 80%, transparent)",...e("p-3 rounded-xl"),border:"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)"}},k={sm:{height:"3rem"},md:{height:"3.5rem"},lg:{height:"4rem"}},q={display:"inline-flex",alignItems:"center",justifyContent:"center",whiteSpace:"nowrap",fontWeight:500,transition:"all 200ms ease-in-out",cursor:"pointer",border:"none",background:"none",outline:"none"},G={sm:{height:"2.5rem",...e("py-2 px-4"),fontSize:"0.75rem"},md:{height:"3rem",paddingTop:"0.625rem",paddingBottom:"0.625rem",...e("px-5"),fontSize:"0.875rem"},lg:{height:"3.5rem",...e("py-3 px-6"),fontSize:"1rem"}},Z={backgroundColor:"var(--color-background)",color:"var(--color-foreground)",boxShadow:"0 1px 3px rgba(0,0,0,0.1)"},j={color:"var(--color-muted-foreground)"},W={borderBottom:"2px solid var(--color-primary)",color:"var(--color-primary)",borderRadius:"0",backgroundColor:"transparent",boxShadow:"none",marginBottom:"-1px"},J={borderBottom:"2px solid transparent",color:"var(--color-muted-foreground)",borderRadius:"0",backgroundColor:"transparent",boxShadow:"none",marginBottom:"-1px"},B={default:{...e("rounded-lg px-4"),paddingTop:"0.625rem",paddingBottom:"0.625rem"},pills:{...e("rounded-lg px-4"),paddingTop:"0.625rem",paddingBottom:"0.625rem"},underline:{borderRadius:"0"},cards:{...e("rounded-lg px-4"),paddingTop:"0.625rem",paddingBottom:"0.625rem"}},Q={color:"var(--color-foreground)",backgroundColor:"var(--color-muted)"},X={color:"var(--color-foreground)",backgroundColor:"transparent"},Y={boxShadow:"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)"},ee={opacity:.5,pointerEvents:"none"},te={...e("mt-2")},O=m.forwardRef(({dot:n,value:o,active:i,children:a,style:l,...s},p)=>{let[v,u]=useState(false),g=useMemo(()=>d(te,v?Y:void 0,e(n),l),[n,v,l]);return i===false?null:jsx("div",{ref:p,role:"tabpanel",id:`tabpanel-${o}`,"aria-labelledby":`tab-${o}`,hidden:!i,style:g,onFocus:()=>u(true),onBlur:()=>u(false),...s,children:a})});O.displayName="TabsContent";var h=m.forwardRef(({dot:n,value:o,defaultValue:i,onValueChange:a,orientation:l="horizontal",variant:s="default",size:p="md",children:v,style:u,...g},b)=>{let[f,E]=m.useState(o||i||""),R=o!==void 0,t=R?o:f,e$1=d=>{R||E(d),a==null||a(d);};m.useEffect(()=>{o!==void 0&&E(o);},[o]);let r=useMemo(()=>d({width:"100%"},l==="vertical"?{display:"flex"}:void 0,e(n),u),[l,n,u]);return jsx("div",{ref:b,style:r,...g,children:m.Children.map(v,d=>{if(m.isValidElement(d)){if(d.type===O){let S=d.props;return m.cloneElement(d,{active:S.value===t})}if(d.type===$)return m.cloneElement(d,{value:t,onValueChange:e$1,orientation:l,variant:s,size:p});if(typeof d.type!="string")return m.cloneElement(d,{value:t,onValueChange:e$1,orientation:l,variant:s,size:p})}return d})})});h.displayName="Tabs";var $=m.forwardRef(({dot:n,value:o,onValueChange:i,orientation:a="horizontal",variant:l="default",size:s="md",children:p,style:v,...u},g)=>{let b=m.useRef(null);m.useImperativeHandle(g,()=>b.current);let f=useMemo(()=>{let t=[];return m.Children.forEach(p,e=>{if(m.isValidElement(e)){let r=e.props;r.value&&t.push(r.value);}}),t},[p]),E=t=>{var d;if(!o||f.length===0)return;let e=f.indexOf(o);if(e===-1)return;let r=e;if(a==="horizontal"?t.key==="ArrowLeft"?(t.preventDefault(),r=e>0?e-1:f.length-1):t.key==="ArrowRight"?(t.preventDefault(),r=e<f.length-1?e+1:0):t.key==="Home"?(t.preventDefault(),r=0):t.key==="End"&&(t.preventDefault(),r=f.length-1):t.key==="ArrowUp"?(t.preventDefault(),r=e>0?e-1:f.length-1):t.key==="ArrowDown"?(t.preventDefault(),r=e<f.length-1?e+1:0):t.key==="Home"?(t.preventDefault(),r=0):t.key==="End"&&(t.preventDefault(),r=f.length-1),r!==e&&f[r]){i==null||i(f[r]);let S=(d=b.current)==null?void 0:d.querySelector(`[data-tab-value="${f[r]}"]`);S==null||S.focus();}},R=useMemo(()=>{var t,e$1;return d(V,a==="vertical"?{flexDirection:"column"}:void 0,(t=M[l])!=null?t:M.default,(e$1=k[s])!=null?e$1:k.md,e(n),v)},[a,l,s,n,v]);return jsx("div",{ref:b,role:"tablist","aria-orientation":a,onKeyDown:E,style:R,...u,children:m.Children.map(p,t=>{if(m.isValidElement(t)){if(typeof t.type=="string")return t;let e=t.props;return m.cloneElement(t,{onValueChange:i,orientation:a,variant:l,size:s,active:e.value===o})}return t})})});$.displayName="TabsList";var re=m.forwardRef(({dot:n,value:o,onValueChange:i,orientation:a="horizontal",variant:l="default",size:s="md",active:p=false,children:v,disabled:u,style:g,...b},f)=>{let[E,R]=useState(false),[t,e$1]=useState(false),r=useMemo(()=>{var w,H;let S=l==="underline",C=S?W:Z,A=S?J:j,L=S?X:Q;return d(q,(w=B[l])!=null?w:B.default,(H=G[s])!=null?H:G.md,p?C:A,!p&&E&&!u?L:void 0,t?Y:void 0,u?ee:void 0,e(n),g)},[l,s,p,E,t,u,n,g]),d$1=()=>{i&&i(o);};return jsx("button",{ref:f,role:"tab","aria-selected":p,"aria-controls":`tabpanel-${o}`,id:`tab-${o}`,"data-tab-value":o,tabIndex:p?0:-1,style:r,onClick:d$1,type:"button",disabled:u,onMouseEnter:()=>R(true),onMouseLeave:()=>R(false),onFocus:()=>e$1(true),onBlur:()=>e$1(false),...b,children:v})});re.displayName="TabsTrigger";var oe=m.forwardRef(({dot:n,style:o,...i},a)=>jsx(h,{ref:a,variant:"pills",dot:n,style:o,...i}));oe.displayName="TabsPills";var ne=m.forwardRef(({dot:n,style:o,...i},a)=>jsx(h,{ref:a,variant:"underline",dot:n,style:o,...i}));ne.displayName="TabsUnderline";var se=m.forwardRef(({dot:n,style:o,...i},a)=>jsx(h,{ref:a,variant:"cards",dot:n,style:o,...i}));se.displayName="TabsCards";export{z as a,U as b,F as c,K as d,O as e,h as f,$ as g,re as h,oe as i,ne as j,se as k};//# sourceMappingURL=chunk-BOX4TONF.mjs.map
3
+ //# sourceMappingURL=chunk-BOX4TONF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Accordion.tsx","../src/components/Tabs.tsx"],"names":["Accordion","React","children","dotProp","style","type","defaultValue","value","onValueChange","collapsible","props","ref","openItems","setOpenItems","handleItemToggle","itemValue","newOpenItems","item","itemValues","values","child","childProps","handleKeyDown","_a","target","currentValue","currentIndex","newIndex","triggerElement","jsx","mergeStyles","resolveDot","AccordionItem","disabled","onToggle","isOpen","AccordionTrigger","icon","iconPosition","defaultIcon","Icon","contentId","triggerId","jsxs","AccordionContent","dataValue","height","setHeight","contentRef","BASE_LIST_STYLE","VARIANT_LIST_STYLES","SIZE_LIST_STYLES","BASE_TRIGGER_STYLE","SIZE_TRIGGER_STYLES","ACTIVE_TRIGGER_STYLE","INACTIVE_TRIGGER_STYLE","ACTIVE_UNDERLINE_TRIGGER_STYLE","INACTIVE_UNDERLINE_TRIGGER_STYLE","VARIANT_TRIGGER_BASE_STYLES","HOVER_TRIGGER_STYLE","HOVER_UNDERLINE_TRIGGER_STYLE","FOCUS_RING_STYLE","DISABLED_TRIGGER_STYLE","CONTENT_BASE_STYLE","TabsContent","active","isFocused","setIsFocused","useState","computedStyle","useMemo","Tabs","orientation","variant","size","activeTab","setActiveTab","isControlled","handleTabChange","newValue","TabsList","listRef","tabValues","e","_b","TabsTrigger","_orientation","isHovered","setIsHovered","isUnderline","activeStyle","inactiveStyle","hoverStyle","handleClick","TabsPills","dot","TabsUnderline","TabsCards"],"mappings":"mKA6EA,IAAMA,CAAAA,CAAYC,CAAAA,CAAM,UAAA,CACtB,CAAC,CACC,QAAA,CAAAC,CAAAA,CACA,GAAA,CAAKC,CAAAA,CACL,KAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CAAO,QAAA,CACP,YAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,aAAA,CAAAC,EACA,WAAA,CAAAC,CAAAA,CAAc,KAAA,CACd,GAAGC,CACL,CAAA,CAAGC,IAAQ,CACT,GAAM,CAACC,CAAAA,CAAWC,CAAY,CAAA,CAAIZ,EAAM,QAAA,CACtCM,CAAAA,CAAS,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CAAIA,CAAAA,CAAQ,CAACA,CAAK,CAAA,CAC9CD,CAAAA,CAAgB,KAAA,CAAM,OAAA,CAAQA,CAAY,EAAIA,CAAAA,CAAe,CAACA,CAAY,CAAA,CAAK,EACjF,EAEAL,CAAAA,CAAM,SAAA,CAAU,IAAM,CAChBM,CAAAA,GAAU,MAAA,EACZM,EAAa,KAAA,CAAM,OAAA,CAAQN,CAAK,CAAA,CAAIA,CAAAA,CAAQ,CAACA,CAAK,CAAC,EAEvD,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAMO,CAAAA,CAAoBC,CAAAA,EAAsB,CAC9C,IAAIC,CAAAA,CAEAX,CAAAA,GAAS,SACPO,CAAAA,CAAU,QAAA,CAASG,CAAS,CAAA,CAC9BC,CAAAA,CAAeP,CAAAA,CAAc,EAAC,CAAIG,CAAAA,CAElCI,CAAAA,CAAe,CAACD,CAAS,CAAA,CAGvBH,CAAAA,CAAU,QAAA,CAASG,CAAS,CAAA,CAC9BC,CAAAA,CAAeJ,CAAAA,CAAU,MAAA,CAAOK,CAAAA,EAAQA,IAASF,CAAS,CAAA,CAE1DC,CAAAA,CAAe,CAAC,GAAGJ,CAAAA,CAAWG,CAAS,CAAA,CAI3CF,CAAAA,CAAaG,CAAY,CAAA,CACzBR,CAAAA,EAAA,IAAA,EAAAA,EAAgBH,CAAAA,GAAS,QAAA,CAAWW,CAAAA,CAAa,CAAC,CAAA,EAAK,EAAA,CAAKA,CAAAA,EAC9D,CAAA,CAGME,CAAAA,CAAajB,CAAAA,CAAM,OAAA,CAAQ,IAAM,CACrC,IAAMkB,EAAmB,EAAC,CAC1B,OAAAlB,CAAAA,CAAM,QAAA,CAAS,OAAA,CAAQC,EAAWkB,CAAAA,EAAU,CAC1C,GAAInB,CAAAA,CAAM,cAAA,CAAemB,CAAK,EAAG,CAC/B,IAAMC,CAAAA,CAAaD,CAAAA,CAAM,KAAA,CACrBC,CAAAA,CAAW,KAAA,EACbF,CAAAA,CAAO,IAAA,CAAKE,CAAAA,CAAW,KAAK,EAEhC,CACF,CAAC,EACMF,CACT,CAAA,CAAG,CAACjB,CAAQ,CAAC,CAAA,CAEPoB,EAAiB,CAAA,EAA2C,CAvItE,IAAAC,CAAAA,CAwIM,IAAMC,CAAAA,CAAS,EAAE,MAAA,CACjB,GAAI,CAACA,CAAAA,CAAO,YAAA,CAAa,wBAAwB,CAAA,CAAG,OAEpD,IAAMC,CAAAA,CAAeD,CAAAA,CAAO,YAAA,CAAa,sBAAsB,CAAA,CAC/D,GAAI,CAACC,CAAAA,CAAc,OAEnB,IAAMC,CAAAA,CAAeR,CAAAA,CAAW,QAAQO,CAAY,CAAA,CACpD,GAAIC,CAAAA,GAAiB,EAAA,CAAI,OAEzB,IAAIC,CAAAA,CAAWD,CAAAA,CAgBf,GAdI,CAAA,CAAE,GAAA,GAAQ,WAAA,EACZ,CAAA,CAAE,cAAA,EAAe,CACjBC,CAAAA,CAAWD,CAAAA,CAAeR,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAIQ,EAAe,CAAA,CAAI,CAAA,EAC5D,CAAA,CAAE,GAAA,GAAQ,SAAA,EACnB,CAAA,CAAE,gBAAe,CACjBC,CAAAA,CAAWD,CAAAA,CAAe,CAAA,CAAIA,CAAAA,CAAe,CAAA,CAAIR,EAAW,MAAA,CAAS,CAAA,EAC5D,CAAA,CAAE,GAAA,GAAQ,MAAA,EACnB,CAAA,CAAE,cAAA,EAAe,CACjBS,CAAAA,CAAW,CAAA,EACF,CAAA,CAAE,GAAA,GAAQ,KAAA,GACnB,CAAA,CAAE,gBAAe,CACjBA,CAAAA,CAAWT,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAA,CAG7BS,CAAAA,GAAaD,GAAgBR,CAAAA,CAAWS,CAAQ,CAAA,CAAG,CACrD,IAAMC,CAAAA,CAAAA,CAAiBL,EAAAC,CAAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,GAAtC,IAAA,CAAA,MAAA,CAAAD,CAAAA,CAAyC,aAAA,CAC9D,CAAA,uBAAA,EAA0BL,CAAAA,CAAWS,CAAQ,CAAC,CAAA,EAAA,CAAA,CAAA,CAEhDC,CAAAA,EAAA,IAAA,EAAAA,EAAgB,KAAA,GAClB,CACF,CAAA,CAEA,OACEC,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKlB,CAAAA,CACL,KAAA,CAAOmB,CAAAA,CAAYC,CAAAA,CAAW,WAAW,CAAA,CAAGA,EAAW5B,CAAO,CAAA,CAAGC,CAAK,CAAA,CACtE,SAAA,CAAWkB,CAAAA,CACV,GAAGZ,CAAAA,CAEH,QAAA,CAAAT,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIC,CAAAA,CAAWkB,CAAAA,EACzBnB,EAAM,cAAA,CAAemB,CAAK,CAAA,CACrBnB,CAAAA,CAAM,YAAA,CAAamB,CAAAA,CAAO,CAC/B,SAAA,CAAAR,CAAAA,CACA,QAAA,CAAUE,CACZ,CAAgC,CAAA,CAE3BM,CACR,CAAA,CACH,CAEJ,CACF,EACApB,CAAAA,CAAU,WAAA,CAAc,WAAA,CAgCxB,IAAMgC,CAAAA,CAAgB/B,CAAAA,CAAM,UAAA,CAC1B,CAAC,CACC,KAAA,CAAAM,EACA,QAAA,CAAAL,CAAAA,CACA,KAAA,CAAAE,CAAAA,CACA,QAAA,CAAA6B,CAAAA,CAAW,MACX,SAAA,CAAArB,CAAAA,CAAY,EAAC,CACb,QAAA,CAAAsB,CAAAA,CACA,GAAGxB,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAMwB,CAAAA,CAASvB,CAAAA,CAAU,QAAA,CAASL,CAAK,CAAA,CAEvC,OACEsB,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKlB,EACL,qBAAA,CAAmB,IAAA,CACnB,KAAA,CAAOmB,CAAAA,CACLC,CAAAA,CAAW,oDAAoD,EAC/DE,CAAAA,CAAWF,CAAAA,CAAW,gCAAgC,CAAA,CAAI,MAAA,CAC1D3B,CACF,EACC,GAAGM,CAAAA,CAEH,QAAA,CAAAT,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIC,CAAAA,CAAWkB,CAAAA,EACzBnB,CAAAA,CAAM,cAAA,CAAemB,CAAK,CAAA,CACrBnB,CAAAA,CAAM,YAAA,CAAamB,EAAO,CAC/B,KAAA,CAAAb,CAAAA,CACA,MAAA,CAAA4B,CAAAA,CACA,QAAA,CAAAF,EACA,QAAA,CAAU,IAAMC,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAW3B,CAAAA,CAAAA,CAC3B,uBAAwBA,CAC1B,CAA2D,CAAA,CAEtDa,CACR,CAAA,CACH,CAEJ,CACF,EACAY,CAAAA,CAAc,WAAA,CAAc,eAAA,CAc5B,IAAMI,CAAAA,CAAmBnC,CAAAA,CAAM,WAC7B,CAAC,CACC,QAAA,CAAAC,CAAAA,CACA,KAAA,CAAAE,CAAAA,CACA,IAAA,CAAAiC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CAAe,OAAA,CACf,KAAA,CAAA/B,CAAAA,CACA,MAAA,CAAA4B,EAAS,KAAA,CACT,QAAA,CAAAF,CAAAA,CAAW,KAAA,CACX,QAAA,CAAAC,CAAAA,CACA,GAAGxB,CACL,CAAA,CAAGC,CAAAA,GAAQ,CACT,IAAM4B,CAAAA,CACJV,GAAAA,CAACW,IAAA,CACC,IAAA,CAAK,aAAA,CACL,IAAA,CAAM,EAAA,CACN,GAAA,CAAK,mEAAmEL,CAAAA,CAAS,aAAA,CAAgB,EAAE,CAAA,CAAA,CACrG,CAAA,CAGIM,CAAAA,CAAY,qBAAqBlC,CAAK,CAAA,CAAA,CACtCmC,CAAAA,CAAY,CAAA,kBAAA,EAAqBnC,CAAK,CAAA,CAAA,CAE5C,OACEoC,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKhC,CAAAA,CACL,EAAA,CAAI+B,CAAAA,CACJ,wBAAA,CAAsB,KACtB,sBAAA,CAAsBnC,CAAAA,CACtB,eAAA,CAAe4B,CAAAA,CACf,eAAA,CAAeM,CAAAA,CACf,QAASP,CAAAA,CACT,QAAA,CAAUD,CAAAA,CACV,KAAA,CAAOH,CAAAA,CACLC,CAAAA,CAAW,mQAAmQ,CAAA,CAC9Q3B,CACF,CAAA,CACC,GAAGM,CAAAA,CAEJ,QAAA,CAAA,CAAAiC,IAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOZ,CAAAA,CAAW,gCAAgC,CAAA,CACpD,QAAA,CAAA,CAAAO,CAAAA,GAAiB,SAAWD,CAAAA,EAAQE,CAAAA,CAAAA,CACrCV,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAOE,CAAAA,CAAW,QAAQ,CAAA,CAAI,QAAA,CAAA7B,CAAAA,CAAS,CAAA,CAAA,CAC/C,CAAA,CACCoC,CAAAA,GAAiB,UAAYD,CAAAA,EAAQE,CAAAA,CAAAA,CAAAA,CACxC,CAEJ,CACF,EACAH,CAAAA,CAAiB,WAAA,CAAc,kBAAA,CAyC/B,IAAMQ,CAAAA,CAAmB3C,CAAAA,CAAM,UAAA,CAC7B,CAAC,CAAE,SAAAC,CAAAA,CAAU,KAAA,CAAAE,CAAAA,CAAO,MAAA,CAAA+B,CAAAA,CAAS,KAAA,CAAO,MAAA5B,CAAAA,CAAO,sBAAA,CAAwBsC,CAAAA,CAAW,GAAGnC,CAAM,CAAA,CAAGC,IAAQ,CAChG,GAAM,CAACmC,CAAAA,CAAQC,CAAS,CAAA,CAAI9C,CAAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CACtC+C,CAAAA,CAAa/C,CAAAA,CAAM,MAAA,CAAuB,IAAI,EAC9Cc,CAAAA,CAAYR,CAAAA,EAASsC,CAAAA,EAAa,SAAA,CAExC5C,CAAAA,CAAM,SAAA,CAAU,IAAM,CAChB+C,CAAAA,CAAW,OAAA,EAEXD,CAAAA,CADEZ,CAAAA,CACQa,CAAAA,CAAW,QAAQ,YAAA,CAEnB,CAF+B,EAK/C,CAAA,CAAG,CAACb,CAAAA,CAAQjC,CAAQ,CAAC,CAAA,CAErB,IAAMwC,CAAAA,CAAY,CAAA,kBAAA,EAAqB3B,CAAS,CAAA,CAAA,CAC1C0B,EAAY,CAAA,kBAAA,EAAqB1B,CAAS,CAAA,CAAA,CAEhD,OACEc,GAAAA,CAAC,KAAA,CAAA,CACC,IAAKlB,CAAAA,CACL,EAAA,CAAI8B,CAAAA,CACJ,IAAA,CAAK,QAAA,CACL,iBAAA,CAAiBC,EACjB,MAAA,CAAQ,CAACP,CAAAA,CACT,KAAA,CAAOL,CAAAA,CAAYC,CAAAA,CAAW,sDAAsD,CAAA,CAAG,CAAE,MAAA,CAAQ,CAAA,EAAGe,CAAM,CAAA,EAAA,CAAK,CAAC,EAC/G,GAAGpC,CAAAA,CAEJ,QAAA,CAAAmB,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKmB,EACL,KAAA,CAAOlB,CAAAA,CAAYC,CAAAA,CAAW,gBAAgB,CAAA,CAAG3B,CAAK,EAErD,QAAA,CAAAF,CAAAA,CACH,CAAA,CACF,CAEJ,CACF,EACA0C,CAAAA,CAAiB,WAAA,CAAc,kBAAA,CC3Y/B,IAAMK,CAAAA,CAAuC,CAC3C,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAClB,EAEMC,CAAAA,CAA2D,CAC/D,OAAA,CAAS,CACP,eAAA,CAAiB,oBAAA,CACjB,GAAGnB,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,MAAA,CACE,oEACJ,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,oBAAA,CACjB,GAAGA,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,OACE,oEACJ,CAAA,CACA,SAAA,CAAW,CACT,YAAA,CAAc,+BAAA,CACd,QAAS,GAAA,CACT,YAAA,CAAc,GAAA,CACd,eAAA,CAAiB,aACnB,CAAA,CACA,KAAA,CAAO,CACL,eAAA,CAAiB,yDAAA,CACjB,GAAGA,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,OACE,oEACJ,CACF,CAAA,CAEMoB,CAAAA,CAAwD,CAC5D,EAAA,CAAI,CAAE,MAAA,CAAQ,MAAO,CAAA,CACrB,EAAA,CAAI,CAAE,MAAA,CAAQ,QAAS,CAAA,CACvB,EAAA,CAAI,CAAE,MAAA,CAAQ,MAAO,CACvB,CAAA,CAEMC,CAAAA,CAA0C,CAC9C,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,UAAA,CAAY,QAAA,CACZ,UAAA,CAAY,GAAA,CACZ,UAAA,CAAY,uBAAA,CACZ,OAAQ,SAAA,CACR,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,MAAA,CACZ,OAAA,CAAS,MACX,CAAA,CAEMC,CAAAA,CAA2D,CAC/D,EAAA,CAAI,CAAE,MAAA,CAAQ,QAAA,CAAU,GAAGtB,CAAAA,CAAW,WAAW,CAAA,CAAG,QAAA,CAAU,SAAU,CAAA,CACxE,GAAI,CACF,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,UAAA,CACZ,aAAA,CAAe,WACf,GAAGA,CAAAA,CAAW,MAAM,CAAA,CACpB,QAAA,CAAU,UACZ,EACA,EAAA,CAAI,CAAE,MAAA,CAAQ,QAAA,CAAU,GAAGA,CAAAA,CAAW,WAAW,CAAA,CAAG,QAAA,CAAU,MAAO,CACvE,CAAA,CAEMuB,CAAAA,CAA4C,CAChD,gBAAiB,yBAAA,CACjB,KAAA,CAAO,yBAAA,CACP,SAAA,CAAW,2BACb,CAAA,CAEMC,EAA8C,CAClD,KAAA,CAAO,+BACT,CAAA,CAEMC,CAAAA,CAAsD,CAC1D,aAAc,gCAAA,CACd,KAAA,CAAO,sBAAA,CACP,YAAA,CAAc,GAAA,CACd,eAAA,CAAiB,aAAA,CACjB,SAAA,CAAW,MAAA,CACX,YAAA,CAAc,MAChB,CAAA,CAEMC,CAAAA,CAAwD,CAC5D,aAAc,uBAAA,CACd,KAAA,CAAO,+BAAA,CACP,YAAA,CAAc,GAAA,CACd,eAAA,CAAiB,cACjB,SAAA,CAAW,MAAA,CACX,YAAA,CAAc,MAChB,CAAA,CAEMC,CAAAA,CAAmE,CACvE,OAAA,CAAS,CACP,GAAG3B,CAAAA,CAAW,iBAAiB,CAAA,CAC/B,UAAA,CAAY,UAAA,CACZ,aAAA,CAAe,UACjB,CAAA,CACA,KAAA,CAAO,CACL,GAAGA,EAAW,iBAAiB,CAAA,CAC/B,UAAA,CAAY,UAAA,CACZ,aAAA,CAAe,UACjB,EACA,SAAA,CAAW,CAAE,YAAA,CAAc,GAAI,CAAA,CAC/B,KAAA,CAAO,CACL,GAAGA,CAAAA,CAAW,iBAAiB,CAAA,CAC/B,UAAA,CAAY,UAAA,CACZ,aAAA,CAAe,UACjB,CACF,CAAA,CAEM4B,CAAAA,CAA2C,CAC/C,KAAA,CAAO,yBAAA,CACP,gBAAiB,oBACnB,CAAA,CAEMC,CAAAA,CAAqD,CACzD,KAAA,CAAO,yBAAA,CACP,eAAA,CAAiB,aACnB,CAAA,CAEMC,CAAAA,CAAwC,CAC5C,SAAA,CAAW,0DACb,CAAA,CAEMC,GAA8C,CAClD,OAAA,CAAS,EAAA,CACT,aAAA,CAAe,MACjB,CAAA,CAEMC,EAAAA,CAA0C,CAC9C,GAAGhC,CAAAA,CAAW,MAAM,CACtB,CAAA,CAuBMiC,CAAAA,CAAc/D,EAAM,UAAA,CACxB,CAAC,CAAE,GAAA,CAAKE,CAAAA,CAAS,KAAA,CAAAI,EAAO,MAAA,CAAA0D,CAAAA,CAAQ,QAAA,CAAA/D,CAAAA,CAAU,KAAA,CAAAE,CAAAA,CAAO,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CACnE,GAAM,CAACuD,CAAAA,CAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAE1CC,CAAAA,CAAgBC,OAAAA,CACpB,IACExC,CAAAA,CACEiC,EAAAA,CACAG,CAAAA,CAAYL,CAAAA,CAAmB,MAAA,CAC/B9B,CAAAA,CAAW5B,CAAO,CAAA,CAClBC,CACF,CAAA,CACF,CAACD,CAAAA,CAAS+D,CAAAA,CAAW9D,CAAK,CAC5B,CAAA,CAEA,OAAI6D,CAAAA,GAAW,KAAA,CAAc,IAAA,CAG3BpC,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKlB,CAAAA,CACL,IAAA,CAAK,UAAA,CACL,EAAA,CAAI,CAAA,SAAA,EAAYJ,CAAK,CAAA,CAAA,CACrB,iBAAA,CAAiB,CAAA,IAAA,EAAOA,CAAK,CAAA,CAAA,CAC7B,MAAA,CAAQ,CAAC0D,CAAAA,CACT,KAAA,CAAOI,CAAAA,CACP,OAAA,CAAS,IAAMF,CAAAA,CAAa,IAAI,CAAA,CAChC,MAAA,CAAQ,IAAMA,CAAAA,CAAa,KAAK,CAAA,CAC/B,GAAGzD,CAAAA,CAEH,QAAA,CAAAR,CAAAA,CACH,CAEJ,CACF,EACA8D,CAAAA,CAAY,YAAc,aAAA,CA6D1B,IAAMO,CAAAA,CAAOtE,CAAAA,CAAM,UAAA,CACjB,CACE,CACE,GAAA,CAAKE,CAAAA,CACL,KAAA,CAAAI,CAAAA,CACA,YAAA,CAAAD,CAAAA,CACA,cAAAE,CAAAA,CACA,WAAA,CAAAgE,CAAAA,CAAc,YAAA,CACd,OAAA,CAAAC,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,QAAA,CAAAxE,CAAAA,CACA,KAAA,CAAAE,CAAAA,CACA,GAAGM,CACL,CAAA,CACAC,CAAAA,GACG,CACH,GAAM,CAACgE,EAAWC,CAAY,CAAA,CAAI3E,CAAAA,CAAM,QAAA,CACtCM,CAAAA,EAASD,CAAAA,EAAgB,EAC3B,CAAA,CACMuE,CAAAA,CAAetE,CAAAA,GAAU,MAAA,CACzBkB,CAAAA,CAAeoD,CAAAA,CAAetE,CAAAA,CAAQoE,CAAAA,CAEtCG,GAAAA,CAAmBC,CAAAA,EAAqB,CACvCF,CAAAA,EACHD,CAAAA,CAAaG,CAAQ,EAEvBvE,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAgBuE,CAAAA,EAClB,CAAA,CAEA9E,CAAAA,CAAM,UAAU,IAAM,CAChBM,CAAAA,GAAU,MAAA,EACZqE,CAAAA,CAAarE,CAAK,EAEtB,CAAA,CAAG,CAACA,CAAK,CAAC,CAAA,CAEV,IAAM8D,CAAAA,CAAgBC,OAAAA,CACpB,IACExC,CAAAA,CACE,CAAE,KAAA,CAAO,MAAO,CAAA,CAChB0C,IAAgB,UAAA,CACX,CAAE,OAAA,CAAS,MAAO,CAAA,CACnB,MAAA,CACJzC,EAAW5B,CAAO,CAAA,CAClBC,CACF,CAAA,CACF,CAACoE,CAAAA,CAAarE,EAASC,CAAK,CAC9B,CAAA,CAEA,OACEyB,GAAAA,CAAC,KAAA,CAAA,CAAI,GAAA,CAAKlB,CAAAA,CAAK,KAAA,CAAO0D,CAAAA,CAAgB,GAAG3D,CAAAA,CACtC,QAAA,CAAAT,CAAAA,CAAM,SAAS,GAAA,CAAIC,CAAAA,CAAWkB,CAAAA,EAAU,CACvC,GAAInB,CAAAA,CAAM,eAAemB,CAAK,CAAA,CAAG,CAC/B,GAAIA,CAAAA,CAAM,IAAA,GAAS4C,EAAa,CAC9B,IAAM3C,CAAAA,CAAaD,CAAAA,CAAM,KAAA,CACzB,OAAOnB,CAAAA,CAAM,YAAA,CAAamB,CAAAA,CAAO,CAC/B,MAAA,CAAQC,CAAAA,CAAW,KAAA,GAAUI,CAC/B,CAA8B,CAChC,CACA,GAAIL,CAAAA,CAAM,IAAA,GAAS4D,CAAAA,CACjB,OAAO/E,CAAAA,CAAM,YAAA,CAAamB,CAAAA,CAAO,CAC/B,KAAA,CAAOK,CAAAA,CACP,cAAeqD,GAAAA,CACf,WAAA,CAAAN,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CACF,CAA2B,CAAA,CAE7B,GAAI,OAAOtD,CAAAA,CAAM,IAAA,EAAS,QAAA,CACxB,OAAOnB,CAAAA,CAAM,YAAA,CAAamB,CAAAA,CAAO,CAC/B,KAAA,CAAOK,CAAAA,CACP,cAAeqD,GAAAA,CACf,WAAA,CAAAN,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CACF,CAA4B,CAEhC,CACA,OAAOtD,CACT,CAAC,CAAA,CACH,CAEJ,CACF,EACAmD,CAAAA,CAAK,WAAA,CAAc,MAAA,CA6BnB,IAAMS,EAAW/E,CAAAA,CAAM,UAAA,CACrB,CACE,CACE,GAAA,CAAKE,CAAAA,CACL,MAAAI,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,WAAA,CAAAgE,CAAAA,CAAc,YAAA,CACd,QAAAC,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,QAAA,CAAAxE,CAAAA,CACA,KAAA,CAAAE,CAAAA,CACA,GAAGM,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMsE,CAAAA,CAAUhF,CAAAA,CAAM,MAAA,CAAuB,IAAI,CAAA,CACjDA,CAAAA,CAAM,oBAAoBU,CAAAA,CAAK,IAAMsE,CAAAA,CAAQ,OAAyB,CAAA,CAEtE,IAAMC,EAAYZ,OAAAA,CAAQ,IAAM,CAC9B,IAAMnD,CAAAA,CAAmB,EAAC,CAC1B,OAAAlB,CAAAA,CAAM,QAAA,CAAS,OAAA,CAAQC,CAAAA,CAAWkB,CAAAA,EAAU,CAC1C,GAAInB,CAAAA,CAAM,cAAA,CAAemB,CAAK,CAAA,CAAG,CAC/B,IAAMC,EAAaD,CAAAA,CAAM,KAAA,CACrBC,CAAAA,CAAW,KAAA,EACbF,CAAAA,CAAO,IAAA,CAAKE,EAAW,KAAK,EAEhC,CACF,CAAC,CAAA,CACMF,CACT,CAAA,CAAG,CAACjB,CAAQ,CAAC,CAAA,CAEPoB,CAAAA,CAAiB6D,CAAAA,EAA2C,CAhZtE,IAAA5D,CAAAA,CAiZM,GAAI,CAAChB,CAAAA,EAAS2E,CAAAA,CAAU,MAAA,GAAW,EAAG,OAEtC,IAAMxD,CAAAA,CAAewD,CAAAA,CAAU,OAAA,CAAQ3E,CAAK,EAC5C,GAAImB,CAAAA,GAAiB,EAAA,CAAI,OAEzB,IAAIC,CAAAA,CAAWD,CAAAA,CAgCf,GA9BI8C,CAAAA,GAAgB,YAAA,CACdW,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACZA,CAAAA,CAAE,gBAAe,CACjBxD,CAAAA,CAAWD,CAAAA,CAAe,CAAA,CAAIA,CAAAA,CAAe,CAAA,CAAIwD,EAAU,MAAA,CAAS,CAAA,EAC3DC,CAAAA,CAAE,GAAA,GAAQ,YAAA,EACnBA,CAAAA,CAAE,gBAAe,CACjBxD,CAAAA,CAAWD,CAAAA,CAAewD,CAAAA,CAAU,MAAA,CAAS,CAAA,CAAIxD,CAAAA,CAAe,CAAA,CAAI,CAAA,EAC3DyD,CAAAA,CAAE,GAAA,GAAQ,MAAA,EACnBA,CAAAA,CAAE,cAAA,GACFxD,CAAAA,CAAW,CAAA,EACFwD,CAAAA,CAAE,GAAA,GAAQ,KAAA,GACnBA,CAAAA,CAAE,cAAA,EAAe,CACjBxD,CAAAA,CAAWuD,CAAAA,CAAU,MAAA,CAAS,CAAA,CAAA,CAG5BC,CAAAA,CAAE,GAAA,GAAQ,WACZA,CAAAA,CAAE,cAAA,EAAe,CACjBxD,CAAAA,CAAWD,CAAAA,CAAe,CAAA,CAAIA,CAAAA,CAAe,CAAA,CAAIwD,CAAAA,CAAU,MAAA,CAAS,CAAA,EAC3DC,CAAAA,CAAE,GAAA,GAAQ,WAAA,EACnBA,EAAE,cAAA,EAAe,CACjBxD,CAAAA,CAAWD,CAAAA,CAAewD,CAAAA,CAAU,MAAA,CAAS,EAAIxD,CAAAA,CAAe,CAAA,CAAI,CAAA,EAC3DyD,CAAAA,CAAE,GAAA,GAAQ,MAAA,EACnBA,EAAE,cAAA,EAAe,CACjBxD,CAAAA,CAAW,CAAA,EACFwD,CAAAA,CAAE,GAAA,GAAQ,KAAA,GACnBA,CAAAA,CAAE,cAAA,EAAe,CACjBxD,CAAAA,CAAWuD,CAAAA,CAAU,MAAA,CAAS,CAAA,CAAA,CAI9BvD,IAAaD,CAAAA,EAAgBwD,CAAAA,CAAUvD,CAAQ,CAAA,CAAG,CACpDnB,CAAAA,EAAA,MAAAA,CAAAA,CAAgB0E,CAAAA,CAAUvD,CAAQ,CAAA,CAAA,CAClC,IAAMC,CAAAA,CAAAA,CAAiBL,EAAA0D,CAAAA,CAAQ,OAAA,GAAR,IAAA,CAAA,MAAA,CAAA1D,CAAAA,CAAiB,aAAA,CACtC,CAAA,iBAAA,EAAoB2D,CAAAA,CAAUvD,CAAQ,CAAC,CAAA,EAAA,CAAA,CAAA,CAEzCC,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAgB,KAAA,GAClB,CACF,CAAA,CAEMyC,CAAAA,CAAgBC,OAAAA,CACpB,IAAG,CAhcT,IAAA/C,EAAA6D,GAAAA,CAicQ,OAAAtD,CAAAA,CACEmB,CAAAA,CACAuB,CAAAA,GAAgB,UAAA,CACX,CAAE,aAAA,CAAe,QAAS,CAAA,CAC3B,MAAA,CAAA,CACJjD,CAAAA,CAAA2B,CAAAA,CAAoBuB,CAAO,CAAA,GAA3B,IAAA,CAAAlD,CAAAA,CAAgC2B,CAAAA,CAAoB,OAAA,CAAA,CACpDkC,GAAAA,CAAAjC,CAAAA,CAAiBuB,CAAI,CAAA,GAArB,IAAA,CAAAU,GAAAA,CAA0BjC,CAAAA,CAAiB,EAAA,CAC3CpB,CAAAA,CAAW5B,CAAO,CAAA,CAClBC,CACF,CAAA,CAAA,CACF,CAACoE,CAAAA,CAAaC,CAAAA,CAASC,EAAMvE,CAAAA,CAASC,CAAK,CAC7C,CAAA,CAEA,OACEyB,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKoD,CAAAA,CACL,IAAA,CAAK,SAAA,CACL,kBAAA,CAAkBT,CAAAA,CAClB,SAAA,CAAWlD,EACX,KAAA,CAAO+C,CAAAA,CACN,GAAG3D,CAAAA,CAEH,QAAA,CAAAT,CAAAA,CAAM,SAAS,GAAA,CAAIC,CAAAA,CAAWkB,CAAAA,EAAU,CACvC,GAAInB,CAAAA,CAAM,eAAemB,CAAK,CAAA,CAAG,CAC/B,GAAI,OAAOA,CAAAA,CAAM,IAAA,EAAS,QAAA,CACxB,OAAOA,CAAAA,CAET,IAAMC,CAAAA,CAAaD,CAAAA,CAAM,KAAA,CACzB,OAAOnB,CAAAA,CAAM,YAAA,CAAamB,CAAAA,CAAO,CAC/B,aAAA,CAAAZ,CAAAA,CACA,YAAAgE,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,MAAA,CAAQrD,EAAW,KAAA,GAAUd,CAC/B,CAA8B,CAChC,CACA,OAAOa,CACT,CAAC,CAAA,CACH,CAEJ,CACF,EACA4D,CAAAA,CAAS,WAAA,CAAc,WA+BvB,IAAMK,EAAAA,CAAcpF,CAAAA,CAAM,UAAA,CACxB,CACE,CACE,IAAKE,CAAAA,CACL,KAAA,CAAAI,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,WAAA,CAAa8E,EAAe,YAAA,CAC5B,OAAA,CAAAb,CAAAA,CAAU,SAAA,CACV,IAAA,CAAAC,CAAAA,CAAO,IAAA,CACP,MAAA,CAAAT,CAAAA,CAAS,KAAA,CACT,QAAA,CAAA/D,CAAAA,CACA,QAAA,CAAA+B,CAAAA,CACA,MAAA7B,CAAAA,CACA,GAAGM,CACL,CAAA,CACAC,CAAAA,GACG,CACH,GAAM,CAAC4E,CAAAA,CAAWC,CAAY,CAAA,CAAIpB,QAAAA,CAAS,KAAK,EAC1C,CAACF,CAAAA,CAAWC,GAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAE1CC,CAAAA,CAAgBC,OAAAA,CAAQ,IAAM,CA9hBxC,IAAA/C,CAAAA,CAAA6D,CAAAA,CA+hBM,IAAMK,CAAAA,CAAchB,CAAAA,GAAY,WAAA,CAE1BiB,CAAAA,CAAcD,CAAAA,CAChBjC,CAAAA,CACAF,EACEqC,CAAAA,CAAgBF,CAAAA,CAClBhC,CAAAA,CACAF,CAAAA,CACEqC,CAAAA,CAAaH,CAAAA,CACf7B,EACAD,CAAAA,CAEJ,OAAO7B,CAAAA,CACLsB,CAAAA,CAAAA,CACA7B,CAAAA,CAAAmC,CAAAA,CAA4Be,CAAO,CAAA,GAAnC,IAAA,CAAAlD,CAAAA,CACEmC,CAAAA,CAA4B,OAAA,CAAA,CAC9B0B,CAAAA,CAAA/B,CAAAA,CAAoBqB,CAAI,CAAA,GAAxB,IAAA,CAAAU,CAAAA,CAA6B/B,CAAAA,CAAoB,EAAA,CACjDY,CAAAA,CAASyB,EAAcC,CAAAA,CACvB,CAAC1B,CAAAA,EAAUsB,CAAAA,EAAa,CAACtD,CAAAA,CAAW2D,EAAa,MAAA,CACjD1B,CAAAA,CAAYL,CAAAA,CAAmB,MAAA,CAC/B5B,CAAAA,CAAW6B,EAAAA,CAAyB,MAAA,CACpC/B,CAAAA,CAAW5B,CAAO,CAAA,CAClBC,CACF,CACF,CAAA,CAAG,CAACqE,EAASC,CAAAA,CAAMT,CAAAA,CAAQsB,CAAAA,CAAWrB,CAAAA,CAAWjC,CAAAA,CAAU9B,CAAAA,CAASC,CAAK,CAAC,CAAA,CAEpEyF,GAAAA,CAAc,IAAM,CACpBrF,CAAAA,EACFA,EAAcD,CAAK,EAEvB,CAAA,CAEA,OACEsB,GAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKlB,CAAAA,CACL,IAAA,CAAK,KAAA,CACL,eAAA,CAAesD,CAAAA,CACf,eAAA,CAAe,CAAA,SAAA,EAAY1D,CAAK,CAAA,CAAA,CAChC,EAAA,CAAI,CAAA,IAAA,EAAOA,CAAK,CAAA,CAAA,CAChB,gBAAA,CAAgBA,EAChB,QAAA,CAAU0D,CAAAA,CAAS,CAAA,CAAI,EAAA,CACvB,KAAA,CAAOI,CAAAA,CACP,QAASwB,GAAAA,CACT,IAAA,CAAK,QAAA,CACL,QAAA,CAAU5D,CAAAA,CACV,YAAA,CAAc,IAAMuD,CAAAA,CAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAMA,CAAAA,CAAa,KAAK,EACtC,OAAA,CAAS,IAAMrB,GAAAA,CAAa,IAAI,CAAA,CAChC,MAAA,CAAQ,IAAMA,GAAAA,CAAa,KAAK,CAAA,CAC/B,GAAGzD,CAAAA,CAEH,QAAA,CAAAR,EACH,CAEJ,CACF,EACAmF,EAAAA,CAAY,WAAA,CAAc,aAAA,CAI1B,IAAMS,EAAAA,CAAY7F,CAAAA,CAAM,UAAA,CACtB,CAAC,CAAE,GAAA,CAAA8F,CAAAA,CAAK,MAAA3F,CAAAA,CAAO,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACzBkB,GAAAA,CAAC0C,EAAA,CAAK,GAAA,CAAK5D,CAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAKoF,EAAK,KAAA,CAAO3F,CAAAA,CAAQ,GAAGM,CAAAA,CAAO,CAEvE,EACAoF,EAAAA,CAAU,WAAA,CAAc,WAAA,CAExB,IAAME,EAAAA,CAAgB/F,CAAAA,CAAM,UAAA,CAC1B,CAAC,CAAE,GAAA,CAAA8F,CAAAA,CAAK,KAAA,CAAA3F,CAAAA,CAAO,GAAGM,CAAM,EAAGC,CAAAA,GACzBkB,GAAAA,CAAC0C,CAAAA,CAAA,CAAK,GAAA,CAAK5D,CAAAA,CAAK,QAAQ,WAAA,CAAY,GAAA,CAAKoF,CAAAA,CAAK,KAAA,CAAO3F,CAAAA,CAAQ,GAAGM,CAAAA,CAAO,CAE3E,EACAsF,EAAAA,CAAc,WAAA,CAAc,eAAA,CAE5B,IAAMC,EAAAA,CAAYhG,EAAM,UAAA,CACtB,CAAC,CAAE,GAAA,CAAA8F,CAAAA,CAAK,KAAA,CAAA3F,CAAAA,CAAO,GAAGM,CAAM,CAAA,CAAGC,CAAAA,GACzBkB,GAAAA,CAAC0C,CAAAA,CAAA,CAAK,IAAK5D,CAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAKoF,CAAAA,CAAK,KAAA,CAAO3F,CAAAA,CAAQ,GAAGM,CAAAA,CAAO,CAEvE,EACAuF,EAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BOX4TONF.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { Icon } from \"./Icon\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\n\n/**\n * Accordion 컴포넌트의 props / Accordion component props\n * @typedef {Object} AccordionProps\n * @property {React.ReactNode} children - AccordionItem 컴포넌트들 / AccordionItem components\n * @property {string} [dot] - dot 유틸리티 스트링 / dot utility string\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @property {\"single\" | \"multiple\"} [type=\"single\"] - 단일 또는 다중 아이템 열기 허용 / Allow single or multiple items to be open\n * @property {string | string[]} [defaultValue] - 초기 열린 아이템 값 (비제어 컴포넌트) / Initial open item value (uncontrolled component)\n * @property {string | string[]} [value] - 현재 열린 아이템 값 (제어 컴포넌트) / Current open item value (controlled component)\n * @property {(value: string | string[]) => void} [onValueChange] - 아이템 열림/닫힘 콜백 / Item open/close callback\n * @property {boolean} [collapsible=false] - 단일 모드에서 열린 아이템을 닫을 수 있는지 여부 / Whether open item can be closed in single mode\n */\ninterface AccordionProps {\n children: React.ReactNode\n /** dot 유틸리티 스트링 (인라인 스타일로 변환) / dot utility string (converted to inline style) */\n dot?: string\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n type?: \"single\" | \"multiple\"\n defaultValue?: string | string[]\n value?: string | string[]\n onValueChange?: (value: string | string[]) => void\n collapsible?: boolean\n}\n\n/**\n * Accordion 컴포넌트 / Accordion component\n *\n * 접을 수 있는 콘텐츠 섹션을 제공하는 컴포넌트입니다.\n * 키보드 네비게이션(Arrow keys, Home/End)을 지원하며, ARIA 속성을 자동으로 설정합니다.\n *\n * Component that provides collapsible content sections.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n *\n * @component\n * @example\n * // 기본 사용 (단일 열기) / Basic usage (single open)\n * <Accordion type=\"single\">\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item2\">\n * <AccordionTrigger>제목 2</AccordionTrigger>\n * <AccordionContent>내용 2</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // 다중 열기 / Multiple open\n * <Accordion type=\"multiple\" defaultValue={[\"item1\", \"item2\"]}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목 1</AccordionTrigger>\n * <AccordionContent>내용 1</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // 제어 컴포넌트 / Controlled component\n * const [openItems, setOpenItems] = useState<string[]>([])\n * <Accordion type=\"multiple\" value={openItems} onValueChange={setOpenItems}>\n * <AccordionItem value=\"item1\">\n * <AccordionTrigger>제목</AccordionTrigger>\n * <AccordionContent>내용</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @param {AccordionProps} props - Accordion 컴포넌트의 props / Accordion component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Accordion 컴포넌트 / Accordion component\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({\n children,\n dot: dotProp,\n style,\n type = \"single\",\n defaultValue,\n value,\n onValueChange,\n collapsible = false,\n ...props\n }, ref) => {\n const [openItems, setOpenItems] = React.useState<string[]>(\n value ? (Array.isArray(value) ? value : [value]) :\n defaultValue ? (Array.isArray(defaultValue) ? defaultValue : [defaultValue]) : []\n )\n\n React.useEffect(() => {\n if (value !== undefined) {\n setOpenItems(Array.isArray(value) ? value : [value])\n }\n }, [value])\n\n const handleItemToggle = (itemValue: string) => {\n let newOpenItems: string[]\n\n if (type === \"single\") {\n if (openItems.includes(itemValue)) {\n newOpenItems = collapsible ? [] : openItems\n } else {\n newOpenItems = [itemValue]\n }\n } else {\n if (openItems.includes(itemValue)) {\n newOpenItems = openItems.filter(item => item !== itemValue)\n } else {\n newOpenItems = [...openItems, itemValue]\n }\n }\n\n setOpenItems(newOpenItems)\n onValueChange?.(type === \"single\" ? newOpenItems[0] || \"\" : newOpenItems)\n }\n\n // 모든 아이템의 value를 수집\n const itemValues = React.useMemo(() => {\n const values: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string }\n if (childProps.value) {\n values.push(childProps.value)\n }\n }\n })\n return values\n }, [children])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement\n if (!target.hasAttribute('data-accordion-trigger')) return\n\n const currentValue = target.getAttribute('data-accordion-value')\n if (!currentValue) return\n\n const currentIndex = itemValues.indexOf(currentValue)\n if (currentIndex === -1) return\n\n let newIndex = currentIndex\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault()\n newIndex = currentIndex < itemValues.length - 1 ? currentIndex + 1 : 0\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault()\n newIndex = currentIndex > 0 ? currentIndex - 1 : itemValues.length - 1\n } else if (e.key === \"Home\") {\n e.preventDefault()\n newIndex = 0\n } else if (e.key === \"End\") {\n e.preventDefault()\n newIndex = itemValues.length - 1\n }\n\n if (newIndex !== currentIndex && itemValues[newIndex]) {\n const triggerElement = target.closest('[data-accordion-item]')?.querySelector(\n `[data-accordion-value=\"${itemValues[newIndex]}\"]`\n ) as HTMLElement\n triggerElement?.focus()\n }\n }\n\n return (\n <div\n ref={ref}\n style={mergeStyles(resolveDot('space-y-2'), resolveDot(dotProp), style)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n openItems,\n onToggle: handleItemToggle\n } as Partial<AccordionItemProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordion.displayName = \"Accordion\"\n\n/**\n * AccordionItem 컴포넌트의 props / AccordionItem component props\n * @typedef {Object} AccordionItemProps\n * @property {string} value - 아이템의 고유 값 / Item unique value\n * @property {React.ReactNode} children - AccordionTrigger와 AccordionContent / AccordionTrigger and AccordionContent\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @property {boolean} [disabled=false] - 아이템 비활성화 여부 / Item disabled state\n * @property {string[]} [openItems] - 열린 아이템 목록 (Accordion에서 자동 전달) / Open items list (auto-passed from Accordion)\n * @property {(value: string) => void} [onToggle] - 토글 콜백 (Accordion에서 자동 전달) / Toggle callback (auto-passed from Accordion)\n */\ninterface AccordionItemProps {\n value: string\n children: React.ReactNode\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n disabled?: boolean\n openItems?: string[]\n onToggle?: (value: string) => void\n}\n\n/**\n * AccordionItem 컴포넌트 / AccordionItem component\n * 아코디언의 개별 아이템을 감싸는 컨테이너입니다.\n * Container that wraps an individual accordion item.\n *\n * @component\n * @param {AccordionItemProps} props - AccordionItem 컴포넌트의 props / AccordionItem component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionItem 컴포넌트 / AccordionItem component\n */\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({\n value,\n children,\n style,\n disabled = false,\n openItems = [],\n onToggle,\n ...props\n }, ref) => {\n const isOpen = openItems.includes(value)\n\n return (\n <div\n ref={ref}\n data-accordion-item\n style={mergeStyles(\n resolveDot('border border-border/50 rounded-lg overflow-hidden'),\n disabled ? resolveDot('opacity-50 pointer-events-none') : undefined,\n style\n )}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n isOpen,\n disabled,\n onToggle: () => onToggle?.(value),\n 'data-accordion-value': value\n } as Partial<AccordionTriggerProps | AccordionContentProps>)\n }\n return child\n })}\n </div>\n )\n }\n)\nAccordionItem.displayName = \"AccordionItem\"\n\ninterface AccordionTriggerProps {\n children: React.ReactNode\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n icon?: React.ReactNode\n iconPosition?: \"left\" | \"right\"\n value?: string // Optional: AccordionItem에서 자동으로 전달됨 / Optional: Auto-passed from AccordionItem\n isOpen?: boolean\n disabled?: boolean\n onToggle?: () => void\n}\n\nconst AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({\n children,\n style,\n icon,\n iconPosition = \"right\",\n value,\n isOpen = false,\n disabled = false,\n onToggle,\n ...props\n }, ref) => {\n const defaultIcon = (\n <Icon\n name=\"chevronDown\"\n size={20}\n dot={`transition-transform duration-300 ease-out text-muted-foreground${isOpen ? ' rotate-180' : ''}`}\n />\n )\n\n const contentId = `accordion-content-${value}`\n const triggerId = `accordion-trigger-${value}`\n\n return (\n <button\n ref={ref}\n id={triggerId}\n data-accordion-trigger\n data-accordion-value={value}\n aria-expanded={isOpen}\n aria-controls={contentId}\n onClick={onToggle}\n disabled={disabled}\n style={mergeStyles(\n resolveDot('flex w-full items-center justify-between px-6 py-4 text-left font-medium transition-all hover:bg-muted/80 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50'),\n style\n )}\n {...props}\n >\n <div style={resolveDot('flex items-center gap-3 flex-1')}>\n {iconPosition === \"left\" && (icon || defaultIcon)}\n <span style={resolveDot('flex-1')}>{children}</span>\n </div>\n {iconPosition === \"right\" && (icon || defaultIcon)}\n </button>\n )\n }\n)\nAccordionTrigger.displayName = \"AccordionTrigger\"\n\n/**\n * AccordionTrigger 컴포넌트 / AccordionTrigger component\n * 아코디언 아이템을 열고 닫는 트리거 버튼입니다.\n * Button that opens and closes an accordion item.\n *\n * @component\n * @param {AccordionTriggerProps} props - AccordionTrigger 컴포넌트의 props / AccordionTrigger component props\n * @param {React.Ref<HTMLButtonElement>} ref - button 요소 ref / button element ref\n * @returns {JSX.Element} AccordionTrigger 컴포넌트 / AccordionTrigger component\n */\n\n/**\n * AccordionContent 컴포넌트의 props\n * @typedef {Object} AccordionContentProps\n * @property {React.ReactNode} children - 콘텐츠\n * @property {React.CSSProperties} [style] - 인라인 스타일\n * @property {boolean} [isOpen] - 열림 상태 (AccordionItem에서 자동 전달)\n * @property {string} [value] - 아이템 값 (AccordionItem에서 자동 전달)\n * @property {string} ['data-accordion-value'] - 아이템 값 (내부 사용)\n */\ninterface AccordionContentProps {\n children: React.ReactNode\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n isOpen?: boolean\n value?: string\n 'data-accordion-value'?: string\n}\n\n/**\n * AccordionContent 컴포넌트 / AccordionContent component\n * 아코디언 아이템의 콘텐츠를 표시합니다.\n * Displays the content of an accordion item.\n *\n * @component\n * @param {AccordionContentProps} props - AccordionContent 컴포넌트의 props / AccordionContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} AccordionContent 컴포넌트 / AccordionContent component\n */\nconst AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({ children, style, isOpen = false, value, 'data-accordion-value': dataValue, ...props }, ref) => {\n const [height, setHeight] = React.useState(0)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemValue = value || dataValue || 'unknown'\n\n React.useEffect(() => {\n if (contentRef.current) {\n if (isOpen) {\n setHeight(contentRef.current.scrollHeight)\n } else {\n setHeight(0)\n }\n }\n }, [isOpen, children])\n\n const triggerId = `accordion-trigger-${itemValue}`\n const contentId = `accordion-content-${itemValue}`\n\n return (\n <div\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!isOpen}\n style={mergeStyles(resolveDot('overflow-hidden transition-all duration-300 ease-out'), { height: `${height}px` })}\n {...props}\n >\n <div\n ref={contentRef}\n style={mergeStyles(resolveDot('px-6 pt-2 pb-4'), style)}\n >\n {children}\n </div>\n </div>\n )\n }\n)\nAccordionContent.displayName = \"AccordionContent\"\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ── Style constants ───────────────────────────────────────────────\n\nconst BASE_LIST_STYLE: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n};\n\nconst VARIANT_LIST_STYLES: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"var(--color-muted)\",\n ...resolveDot(\"p-3 rounded-xl\"),\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)\",\n },\n pills: {\n backgroundColor: \"var(--color-muted)\",\n ...resolveDot(\"p-3 rounded-xl\"),\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)\",\n },\n underline: {\n borderBottom: \"1px solid var(--color-border)\",\n padding: \"0\",\n borderRadius: \"0\",\n backgroundColor: \"transparent\",\n },\n cards: {\n backgroundColor: \"color-mix(in srgb, var(--color-muted) 80%, transparent)\",\n ...resolveDot(\"p-3 rounded-xl\"),\n border:\n \"1px solid color-mix(in srgb, var(--color-border) 50%, transparent)\",\n },\n};\n\nconst SIZE_LIST_STYLES: Record<string, React.CSSProperties> = {\n sm: { height: \"3rem\" },\n md: { height: \"3.5rem\" },\n lg: { height: \"4rem\" },\n};\n\nconst BASE_TRIGGER_STYLE: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n whiteSpace: \"nowrap\",\n fontWeight: 500,\n transition: \"all 200ms ease-in-out\",\n cursor: \"pointer\",\n border: \"none\",\n background: \"none\",\n outline: \"none\",\n};\n\nconst SIZE_TRIGGER_STYLES: Record<string, React.CSSProperties> = {\n sm: { height: \"2.5rem\", ...resolveDot(\"py-2 px-4\"), fontSize: \"0.75rem\" },\n md: {\n height: \"3rem\",\n paddingTop: \"0.625rem\",\n paddingBottom: \"0.625rem\",\n ...resolveDot(\"px-5\"),\n fontSize: \"0.875rem\",\n },\n lg: { height: \"3.5rem\", ...resolveDot(\"py-3 px-6\"), fontSize: \"1rem\" },\n};\n\nconst ACTIVE_TRIGGER_STYLE: React.CSSProperties = {\n backgroundColor: \"var(--color-background)\",\n color: \"var(--color-foreground)\",\n boxShadow: \"0 1px 3px rgba(0,0,0,0.1)\",\n};\n\nconst INACTIVE_TRIGGER_STYLE: React.CSSProperties = {\n color: \"var(--color-muted-foreground)\",\n};\n\nconst ACTIVE_UNDERLINE_TRIGGER_STYLE: React.CSSProperties = {\n borderBottom: \"2px solid var(--color-primary)\",\n color: \"var(--color-primary)\",\n borderRadius: \"0\",\n backgroundColor: \"transparent\",\n boxShadow: \"none\",\n marginBottom: \"-1px\",\n};\n\nconst INACTIVE_UNDERLINE_TRIGGER_STYLE: React.CSSProperties = {\n borderBottom: \"2px solid transparent\",\n color: \"var(--color-muted-foreground)\",\n borderRadius: \"0\",\n backgroundColor: \"transparent\",\n boxShadow: \"none\",\n marginBottom: \"-1px\",\n};\n\nconst VARIANT_TRIGGER_BASE_STYLES: Record<string, React.CSSProperties> = {\n default: {\n ...resolveDot(\"rounded-lg px-4\"),\n paddingTop: \"0.625rem\",\n paddingBottom: \"0.625rem\",\n },\n pills: {\n ...resolveDot(\"rounded-lg px-4\"),\n paddingTop: \"0.625rem\",\n paddingBottom: \"0.625rem\",\n },\n underline: { borderRadius: \"0\" },\n cards: {\n ...resolveDot(\"rounded-lg px-4\"),\n paddingTop: \"0.625rem\",\n paddingBottom: \"0.625rem\",\n },\n};\n\nconst HOVER_TRIGGER_STYLE: React.CSSProperties = {\n color: \"var(--color-foreground)\",\n backgroundColor: \"var(--color-muted)\",\n};\n\nconst HOVER_UNDERLINE_TRIGGER_STYLE: React.CSSProperties = {\n color: \"var(--color-foreground)\",\n backgroundColor: \"transparent\",\n};\n\nconst FOCUS_RING_STYLE: React.CSSProperties = {\n boxShadow: \"0 0 0 1px var(--color-ring), 0 0 0 3px var(--color-ring)\",\n};\n\nconst DISABLED_TRIGGER_STYLE: React.CSSProperties = {\n opacity: 0.5,\n pointerEvents: \"none\",\n};\n\nconst CONTENT_BASE_STYLE: React.CSSProperties = {\n ...resolveDot(\"mt-2\"),\n};\n\n// ── TabsContent ───────────────────────────────────────────────────\n\n/**\n * TabsContent component props\n * @property {string} value - Unique value for tab panel (must match TabsTrigger value)\n * @property {boolean} [active] - Tab panel active state (auto-set)\n */\nexport interface TabsContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n value: string;\n active?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TabsContent component\n * Displays the tab content panel. Used inside Tabs component.\n */\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ dot: dotProp, value, active, children, style, ...props }, ref) => {\n const [isFocused, setIsFocused] = useState(false);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n CONTENT_BASE_STYLE,\n isFocused ? FOCUS_RING_STYLE : undefined,\n resolveDot(dotProp),\n style,\n ),\n [dotProp, isFocused, style],\n );\n\n if (active === false) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n hidden={!active}\n style={computedStyle}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nTabsContent.displayName = \"TabsContent\";\n\n// ── Tabs ─────────────────────────────────────────────────────────\n\n/**\n * Tabs component props\n * @property {string} [value] - Currently active tab value (controlled component)\n * @property {string} [defaultValue] - Initial active tab value (uncontrolled component)\n * @property {(value: string) => void} [onValueChange] - Callback when tab changes\n * @property {\"horizontal\" | \"vertical\"} [orientation=\"horizontal\"] - Tab orientation\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant=\"default\"] - Tab style variant\n * @property {\"sm\" | \"md\" | \"lg\"} [size=\"md\"] - Tab size\n */\nexport interface TabsProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n size?: \"sm\" | \"md\" | \"lg\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Tabs component\n *\n * Component that provides tab navigation.\n * Supports keyboard navigation (Arrow keys, Home/End) and automatically sets ARIA attributes.\n *\n * @example\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n *\n * @example\n * // Controlled component\n * const [activeTab, setActiveTab] = useState(\"tab1\")\n * <Tabs value={activeTab} onValueChange={setActiveTab}>\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content</TabsContent>\n * </Tabs>\n *\n * @example\n * // Various variants\n * <Tabs variant=\"pills\" size=\"lg\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Pills style</TabsTrigger>\n * </TabsList>\n * </Tabs>\n */\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n dot: dotProp,\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n style,\n ...props\n },\n ref,\n ) => {\n const [activeTab, setActiveTab] = React.useState(\n value || defaultValue || \"\",\n );\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : activeTab;\n\n const handleTabChange = (newValue: string) => {\n if (!isControlled) {\n setActiveTab(newValue);\n }\n onValueChange?.(newValue);\n };\n\n React.useEffect(() => {\n if (value !== undefined) {\n setActiveTab(value);\n }\n }, [value]);\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n { width: \"100%\" } as React.CSSProperties,\n orientation === \"vertical\"\n ? ({ display: \"flex\" } as React.CSSProperties)\n : undefined,\n resolveDot(dotProp),\n style,\n ),\n [orientation, dotProp, style],\n );\n\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n if (child.type === TabsContent) {\n const childProps = child.props as TabsContentProps;\n return React.cloneElement(child, {\n active: childProps.value === currentValue,\n } as Partial<TabsContentProps>);\n }\n if (child.type === TabsList) {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size,\n } as Partial<TabsListProps>);\n }\n if (typeof child.type !== \"string\") {\n return React.cloneElement(child, {\n value: currentValue,\n onValueChange: handleTabChange,\n orientation,\n variant,\n size,\n } as Record<string, unknown>);\n }\n }\n return child;\n })}\n </div>\n );\n },\n);\nTabs.displayName = \"Tabs\";\n\n// ── TabsList ──────────────────────────────────────────────────────\n\n/**\n * TabsList component props\n * @property {string} [value] - Currently active tab value (auto-passed from Tabs)\n * @property {(value: string) => void} [onValueChange] - Tab change callback (auto-passed from Tabs)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - Tab orientation (auto-passed from Tabs)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - Tab style (auto-passed from Tabs)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - Tab size (auto-passed from Tabs)\n */\nexport interface TabsListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n value?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n size?: \"sm\" | \"md\" | \"lg\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TabsList component\n * Displays the list of tab triggers. Used inside Tabs component.\n */\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n (\n {\n dot: dotProp,\n value,\n onValueChange,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n children,\n style,\n ...props\n },\n ref,\n ) => {\n const listRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref, () => listRef.current as HTMLDivElement);\n\n const tabValues = useMemo(() => {\n const values: string[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as { value?: string };\n if (childProps.value) {\n values.push(childProps.value);\n }\n }\n });\n return values;\n }, [children]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!value || tabValues.length === 0) return;\n\n const currentIndex = tabValues.indexOf(value);\n if (currentIndex === -1) return;\n\n let newIndex = currentIndex;\n\n if (orientation === \"horizontal\") {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1;\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0;\n } else if (e.key === \"Home\") {\n e.preventDefault();\n newIndex = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n newIndex = tabValues.length - 1;\n }\n } else {\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabValues.length - 1;\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n newIndex = currentIndex < tabValues.length - 1 ? currentIndex + 1 : 0;\n } else if (e.key === \"Home\") {\n e.preventDefault();\n newIndex = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n newIndex = tabValues.length - 1;\n }\n }\n\n if (newIndex !== currentIndex && tabValues[newIndex]) {\n onValueChange?.(tabValues[newIndex]);\n const triggerElement = listRef.current?.querySelector(\n `[data-tab-value=\"${tabValues[newIndex]}\"]`,\n ) as HTMLElement;\n triggerElement?.focus();\n }\n };\n\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n BASE_LIST_STYLE,\n orientation === \"vertical\"\n ? ({ flexDirection: \"column\" } as React.CSSProperties)\n : undefined,\n VARIANT_LIST_STYLES[variant] ?? VARIANT_LIST_STYLES.default,\n SIZE_LIST_STYLES[size] ?? SIZE_LIST_STYLES.md,\n resolveDot(dotProp),\n style,\n ),\n [orientation, variant, size, dotProp, style],\n );\n\n return (\n <div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n onKeyDown={handleKeyDown}\n style={computedStyle}\n {...props}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n if (typeof child.type === \"string\") {\n return child;\n }\n const childProps = child.props as { value?: string };\n return React.cloneElement(child, {\n onValueChange,\n orientation,\n variant,\n size,\n active: childProps.value === value,\n } as Partial<TabsTriggerProps>);\n }\n return child;\n })}\n </div>\n );\n },\n);\nTabsList.displayName = \"TabsList\";\n\n// ── TabsTrigger ───────────────────────────────────────────────────\n\n/**\n * TabsTrigger component props\n * @property {string} value - Unique trigger value (must match TabsContent value)\n * @property {(value: string) => void} [onValueChange] - Tab change callback (auto-passed from TabsList)\n * @property {\"horizontal\" | \"vertical\"} [orientation] - Tab orientation (auto-passed from TabsList)\n * @property {\"default\" | \"pills\" | \"underline\" | \"cards\"} [variant] - Tab style (auto-passed from TabsList)\n * @property {\"sm\" | \"md\" | \"lg\"} [size] - Tab size (auto-passed from TabsList)\n * @property {boolean} [active] - Active state (auto-set)\n */\nexport interface TabsTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n value: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n variant?: \"default\" | \"pills\" | \"underline\" | \"cards\";\n size?: \"sm\" | \"md\" | \"lg\";\n active?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * TabsTrigger component\n * Button that activates a tab. Used inside TabsList component.\n */\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n dot: dotProp,\n value,\n onValueChange,\n orientation: _orientation = \"horizontal\",\n variant = \"default\",\n size = \"md\",\n active = false,\n children,\n disabled,\n style,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const computedStyle = useMemo(() => {\n const isUnderline = variant === \"underline\";\n\n const activeStyle = isUnderline\n ? ACTIVE_UNDERLINE_TRIGGER_STYLE\n : ACTIVE_TRIGGER_STYLE;\n const inactiveStyle = isUnderline\n ? INACTIVE_UNDERLINE_TRIGGER_STYLE\n : INACTIVE_TRIGGER_STYLE;\n const hoverStyle = isUnderline\n ? HOVER_UNDERLINE_TRIGGER_STYLE\n : HOVER_TRIGGER_STYLE;\n\n return mergeStyles(\n BASE_TRIGGER_STYLE,\n VARIANT_TRIGGER_BASE_STYLES[variant] ??\n VARIANT_TRIGGER_BASE_STYLES.default,\n SIZE_TRIGGER_STYLES[size] ?? SIZE_TRIGGER_STYLES.md,\n active ? activeStyle : inactiveStyle,\n !active && isHovered && !disabled ? hoverStyle : undefined,\n isFocused ? FOCUS_RING_STYLE : undefined,\n disabled ? DISABLED_TRIGGER_STYLE : undefined,\n resolveDot(dotProp),\n style,\n );\n }, [variant, size, active, isHovered, isFocused, disabled, dotProp, style]);\n\n const handleClick = () => {\n if (onValueChange) {\n onValueChange(value);\n }\n };\n\n return (\n <button\n ref={ref}\n role=\"tab\"\n aria-selected={active}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n data-tab-value={value}\n tabIndex={active ? 0 : -1}\n style={computedStyle}\n onClick={handleClick}\n type=\"button\"\n disabled={disabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\nTabsTrigger.displayName = \"TabsTrigger\";\n\n// ── Convenience components ────────────────────────────────────────\n\nconst TabsPills = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ dot, style, ...props }, ref) => (\n <Tabs ref={ref} variant=\"pills\" dot={dot} style={style} {...props} />\n ),\n);\nTabsPills.displayName = \"TabsPills\";\n\nconst TabsUnderline = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ dot, style, ...props }, ref) => (\n <Tabs ref={ref} variant=\"underline\" dot={dot} style={style} {...props} />\n ),\n);\nTabsUnderline.displayName = \"TabsUnderline\";\n\nconst TabsCards = React.forwardRef<HTMLDivElement, TabsProps>(\n ({ dot, style, ...props }, ref) => (\n <Tabs ref={ref} variant=\"cards\" dot={dot} style={style} {...props} />\n ),\n);\nTabsCards.displayName = \"TabsCards\";\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsPills,\n TabsUnderline,\n TabsCards,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-7CGJQSJO.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import o from'react';import {createPortal}from'react-dom';import {jsxs,jsx}from'react/jsx-runtime';var z={...e("p-2 rounded-full z-20"),color:"var(--color-muted-foreground)",transition:"all 200ms ease-in-out",outline:"none",border:"none",background:"transparent",cursor:"pointer"},D={backgroundColor:"var(--color-muted)",color:"var(--color-foreground)"},F={outline:"none",boxShadow:"0 0 0 1px var(--color-ring)"};function R({onClick:l,style:i}){let[t,r]=o.useState(false),[f,u]=o.useState(false);return jsx("button",{onClick:l,onMouseEnter:()=>r(true),onMouseLeave:()=>r(false),onFocus:()=>u(true),onBlur:()=>u(false),style:d(z,t?D:void 0,f?F:void 0,i),"aria-label":"\uB2EB\uAE30",children:jsx("svg",{style:e("w-5 h-5"),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})}function H(...l){return o.useCallback(i=>{l.forEach(t=>{t&&(typeof t=="function"?t(i):t.current=i);});},l)}var j=o.forwardRef(({dot:l,style:i,isOpen:t,onClose:r,children:f,size:u="md",closable:b,closeOnOverlayClick:k=true,title:s,description:p,showBackdrop:C=true,backdropDot:E,centered:w=true,rounded:c="lg",shadow:y="2xl"},M)=>{let g=b!=null?b:true,T=o.useRef(null),I=H(M,T);o.useEffect(()=>{let a=v=>{v.key==="Escape"&&r();};if(t){document.addEventListener("keydown",a);let v=window.innerWidth-document.documentElement.clientWidth;document.body.style.overflow="hidden",document.body.style.paddingRight=`${v}px`;}return ()=>{document.removeEventListener("keydown",a),document.body.style.overflow="unset",document.body.style.paddingRight="unset";}},[t,r]);let L=a=>{k&&a.target===a.currentTarget&&r();},W={sm:{maxWidth:"20rem"},md:{maxWidth:"24rem"},lg:{maxWidth:"28rem"},xl:{maxWidth:"32rem"},"2xl":{maxWidth:"36rem"},"3xl":{maxWidth:"42rem"}},O=o.useId(),P=o.useId(),x=s?`modal-title-${O}`:void 0,h=p?`modal-description-${P}`:void 0,[B,N]=o.useState(false);if(o.useEffect(()=>{N(true);},[]),!t)return null;let _=jsxs("div",{style:d(e("fixed inset-0 z-50 overflow-y-auto"),e(l),i),onClick:L,role:"dialog","aria-modal":"true","aria-labelledby":x,"aria-describedby":h,children:[C&&jsx("div",{style:d(e("fixed inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300 pointer-events-none"),e(E))}),jsx("div",{style:d(e("flex h-full justify-center p-4"),w?e("items-center"):e("items-start pt-16")),children:jsxs("div",{ref:I,style:d(e(`relative bg-[var(--modal-bg)] ${c==="none"?"rounded-none":c==="sm"?"rounded":c==="full"?"rounded-full":`rounded-${c}`} ${y==="none"?"shadow-none":`shadow-${y}`} border border-[var(--modal-border)] transform transition-all duration-300 ease-out`),W[u],{animation:`modalSlideIn 0.3s ${a.springy}`}),children:[s&&jsxs("div",{style:d(e("relative z-10 px-6 pt-6 pb-4 border-b border-border/50")),children:[jsxs("div",{style:e("flex items-center justify-between gap-4 mb-2"),children:[jsx("h2",{id:x,style:e("text-xl font-semibold text-foreground flex-1 min-w-0"),children:s}),g&&jsx(R,{onClick:r,style:{flexShrink:0}})]}),p&&jsx("p",{id:h,style:e("text-sm text-muted-foreground"),children:p})]}),!s&&g&&jsx(R,{onClick:r,style:{position:"absolute",top:"1rem",right:"1rem"}}),jsx("div",{style:d(e("relative z-10"),s?e("px-6 mb-6"):e("p-6")),children:f})]})})]});return B&&typeof document!="undefined"?createPortal(_,document.body):null});j.displayName="Modal";export{j as a};//# sourceMappingURL=chunk-C2DOXNBK.mjs.map
3
+ //# sourceMappingURL=chunk-C2DOXNBK.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Modal.tsx"],"names":["CLOSE_BTN_BASE","resolveDot","CLOSE_BTN_HOVER","CLOSE_BTN_FOCUS","ModalCloseButton","onClick","style","isHovered","setIsHovered","React","isFocused","setIsFocused","jsx","mergeStyles","useCombinedRefs","refs","node","ref","Modal","dotProp","isOpen","onClose","children","size","closable","closeOnOverlayClick","title","description","showBackdrop","backdropDot","centered","rounded","shadow","_closable","modalRef","combinedRef","handleEscape","e","scrollbarWidth","handleOverlayClick","sizeStyles","generatedTitleId","generatedDescId","titleId","descriptionId","mounted","setMounted","modalContent","jsxs","EASING_FUNCTIONS","createPortal"],"mappings":"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","file":"chunk-C2DOXNBK.mjs","sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { EASING_FUNCTIONS } from \"../lib/motion/presets\";\n\n/**\n * Modal 컴포넌트의 props / Modal component props\n * @typedef {Object} ModalProps\n * @property {boolean} isOpen - 모달 열림/닫힘 상태 / Modal open/close state\n * @property {() => void} onClose - 모달 닫기 콜백 함수 / Modal close callback function\n * @property {React.ReactNode} children - 모달 내용 / Modal content\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\"} [size=\"md\"] - 모달 크기 / Modal size\n * @property {boolean} [closable=true] - 닫기 버튼 표시 여부 / Show close button\n * @property {boolean} [closeOnOverlayClick=true] - 오버레이 클릭 시 닫기 여부 / Close on overlay click\n * @property {string} [title] - 모달 제목 / Modal title\n * @property {string} [description] - 모달 설명 / Modal description\n * @property {boolean} [showBackdrop=true] - 배경 오버레이 표시 여부 / Show backdrop overlay\n * @property {string} [backdropDot] - 배경 오버레이 추가 dot 스트링 / Additional dot string for backdrop\n * @property {boolean} [centered=true] - 모달을 화면 중앙에 배치할지 여부 / Center modal on screen\n * @property {React.CSSProperties} [style] - 모달 컨테이너 인라인 스타일 / Inline style for modal container\n */\nexport interface ModalProps {\n /** 모달 열림/닫힘 상태 / Modal open/close state */\n isOpen: boolean;\n /** 모달 닫기 콜백 함수 / Modal close callback function */\n onClose: () => void;\n /** 모달 내용 / Modal content */\n children: React.ReactNode;\n /** 모달 크기 / Modal size */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\";\n /** 닫기 버튼 표시 여부 / Show close button */\n closable?: boolean;\n /** 오버레이 클릭 시 닫기 여부 / Close on overlay click */\n closeOnOverlayClick?: boolean;\n /** 모달 제목 / Modal title */\n title?: string;\n /** 모달 설명 / Modal description */\n description?: string;\n /** 배경 오버레이 표시 여부 / Show backdrop overlay */\n showBackdrop?: boolean;\n /** 배경 오버레이 추가 dot 스트링 / Additional dot string for backdrop */\n backdropDot?: string;\n /** 모달을 화면 중앙에 배치할지 여부 / Center modal on screen */\n centered?: boolean;\n /** 모달 컨테이너 둥글기 / Modal container border-radius */\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n /** 모달 그림자 / Modal shadow */\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n /** dot 유틸리티 스트링 (인라인 스타일로 변환) / dot utility string (converted to inline style) */\n dot?: string;\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties;\n}\n\n// Close button static styles\nconst CLOSE_BTN_BASE: React.CSSProperties = {\n ...resolveDot(\"p-2 rounded-full z-20\"),\n color: \"var(--color-muted-foreground)\",\n transition: \"all 200ms ease-in-out\",\n outline: \"none\",\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n};\n\nconst CLOSE_BTN_HOVER: React.CSSProperties = {\n backgroundColor: \"var(--color-muted)\",\n color: \"var(--color-foreground)\",\n};\n\nconst CLOSE_BTN_FOCUS: React.CSSProperties = {\n outline: \"none\",\n boxShadow: \"0 0 0 1px var(--color-ring)\",\n};\n\n// 모달 닫기 버튼 컴포넌트 (title 유무에 따라 위치만 다름)\nfunction ModalCloseButton({\n onClick,\n style,\n}: {\n onClick: () => void;\n style?: React.CSSProperties;\n}) {\n const [isHovered, setIsHovered] = React.useState(false);\n const [isFocused, setIsFocused] = React.useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n style={mergeStyles(\n CLOSE_BTN_BASE,\n isHovered ? CLOSE_BTN_HOVER : undefined,\n isFocused ? CLOSE_BTN_FOCUS : undefined,\n style,\n )}\n aria-label=\"닫기\"\n >\n <svg\n style={resolveDot(\"w-5 h-5\")}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n );\n}\n\n// Ref 병합 유틸리티\nfunction useCombinedRefs<T>(\n ...refs: (React.Ref<T> | undefined)[]\n): React.RefCallback<T> {\n return React.useCallback(\n (node: T) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(node);\n } else {\n (ref as React.MutableRefObject<T | null>).current = node;\n }\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs,\n );\n}\n\n/**\n * Modal 컴포넌트 / Modal component\n *\n * 오버레이와 함께 표시되는 모달 다이얼로그 컴포넌트입니다.\n * ESC 키로 닫기, 오버레이 클릭으로 닫기, 접근성 속성(ARIA)을 지원합니다.\n *\n * Modal dialog component displayed with overlay.\n * Supports closing with ESC key, overlay click, and ARIA accessibility attributes.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [isOpen, setIsOpen] = useState(false)\n *\n * <Modal isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <p>모달 내용</p>\n * </Modal>\n *\n * @example\n * // 제목과 설명 포함 / With title and description\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"확인\"\n * description=\"이 작업을 계속하시겠습니까?\"\n * >\n * <Button onClick={handleConfirm}>확인</Button>\n * </Modal>\n *\n * @example\n * // 큰 크기 모달 / Large size modal\n * <Modal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * size=\"xl\"\n * closeOnOverlayClick={false}\n * >\n * <div>큰 모달 내용</div>\n * </Modal>\n *\n * @param {ModalProps} props - Modal 컴포넌트의 props / Modal component props\n * @param {React.Ref<HTMLDivElement>} ref - 모달 컨테이너 ref / Modal container ref\n * @returns {JSX.Element} Modal 컴포넌트 / Modal component\n */\nexport const Modal = React.forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n dot: dotProp,\n style,\n isOpen,\n onClose,\n children,\n size = \"md\",\n closable,\n closeOnOverlayClick = true,\n title,\n description,\n showBackdrop = true,\n backdropDot,\n centered = true,\n rounded = \"lg\",\n shadow = \"2xl\",\n },\n ref,\n ) => {\n const _closable = closable ?? true;\n const modalRef = React.useRef<HTMLDivElement>(null);\n const combinedRef = useCombinedRefs(ref, modalRef);\n\n // ESC 키로 모달 닫기 및 스크롤 잠금 (화면 흔들림 방지)\n React.useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"keydown\", handleEscape);\n // 스크롤바 너비 계산하여 padding 추가 (화면 흔들림 방지)\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n document.body.style.overflow = \"hidden\";\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n document.body.style.overflow = \"unset\";\n document.body.style.paddingRight = \"unset\";\n };\n }, [isOpen, onClose]);\n\n // 모달 외부 클릭으로 닫기\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // 모달 크기 스타일 (max-w 기반, 콘텐츠에 맞게 자연스럽게 축소)\n const sizeStyles: Record<string, React.CSSProperties> = {\n sm: { maxWidth: \"20rem\" }, // 320px\n md: { maxWidth: \"24rem\" }, // 384px\n lg: { maxWidth: \"28rem\" }, // 448px\n xl: { maxWidth: \"32rem\" }, // 512px\n \"2xl\": { maxWidth: \"36rem\" }, // 576px\n \"3xl\": { maxWidth: \"42rem\" }, // 672px\n };\n\n // 접근성을 위한 ID 생성\n const generatedTitleId = React.useId();\n const generatedDescId = React.useId();\n const titleId = title ? `modal-title-${generatedTitleId}` : undefined;\n const descriptionId = description\n ? `modal-description-${generatedDescId}`\n : undefined;\n\n // SSR에서는 document가 없으므로 체크\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!isOpen) return null;\n\n const modalContent = (\n <div\n style={mergeStyles(\n resolveDot(\"fixed inset-0 z-50 overflow-y-auto\"),\n resolveDot(dotProp),\n style,\n )}\n onClick={handleOverlayClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n >\n {/* 배경 오버레이 - pointer-events-none으로 클릭이 뒤로 전달됨 */}\n {showBackdrop && (\n <div\n style={mergeStyles(\n resolveDot(\n \"fixed inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300 pointer-events-none\",\n ),\n resolveDot(backdropDot),\n )}\n />\n )}\n\n {/* 센터링 컨테이너 */}\n <div\n style={mergeStyles(\n resolveDot(\"flex h-full justify-center p-4\"),\n centered\n ? resolveDot(\"items-center\")\n : resolveDot(\"items-start pt-16\"),\n )}\n >\n {/* 모달 컨테이너 */}\n {/* CSS 변수 기반 배경색 (Tailwind v4 dark: + bg-* 충돌 우회) */}\n <div\n ref={combinedRef}\n style={mergeStyles(\n resolveDot(\n `relative bg-[var(--modal-bg)] ${rounded === \"none\" ? \"rounded-none\" : rounded === \"sm\" ? \"rounded\" : rounded === \"full\" ? \"rounded-full\" : `rounded-${rounded}`} ${shadow === \"none\" ? \"shadow-none\" : `shadow-${shadow}`} border border-[var(--modal-border)] transform transition-all duration-300 ease-out`,\n ),\n sizeStyles[size],\n {\n animation: `modalSlideIn 0.3s ${EASING_FUNCTIONS.springy}`,\n },\n )}\n >\n {/* 헤더 */}\n {title && (\n <div\n style={mergeStyles(\n resolveDot(\n \"relative z-10 px-6 pt-6 pb-4 border-b border-border/50\",\n ),\n )}\n >\n {/* 타이틀과 닫기 버튼 - 같은 줄, 양쪽 끝 */}\n <div\n style={resolveDot(\n \"flex items-center justify-between gap-4 mb-2\",\n )}\n >\n <h2\n id={titleId}\n style={resolveDot(\n \"text-xl font-semibold text-foreground flex-1 min-w-0\",\n )}\n >\n {title}\n </h2>\n {/* 닫기 버튼 - 타이틀과 같은 계층의 오른쪽 끝 */}\n {_closable && (\n <ModalCloseButton\n onClick={onClose}\n style={{ flexShrink: 0 }}\n />\n )}\n </div>\n {/* 설명 - 아래 줄 */}\n {description && (\n <p\n id={descriptionId}\n style={resolveDot(\"text-sm text-muted-foreground\")}\n >\n {description}\n </p>\n )}\n </div>\n )}\n\n {/* 타이틀이 없을 때만 별도 닫기 버튼 */}\n {!title && _closable && (\n <ModalCloseButton\n onClick={onClose}\n style={{ position: \"absolute\", top: \"1rem\", right: \"1rem\" }}\n />\n )}\n\n {/* 모달 내용 */}\n <div\n style={mergeStyles(\n resolveDot(\"relative z-10\"),\n title ? resolveDot(\"px-6 mb-6\") : resolveDot(\"p-6\"),\n )}\n >\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n\n // 브라우저에서만 createPortal 사용 (SSR 호환)\n if (mounted && typeof document !== \"undefined\") {\n return createPortal(modalContent, document.body);\n }\n\n // SSR fallback - 그냥 렌더링 (첫 렌더링에는 보이지 않음)\n return null;\n },\n);\n\nModal.displayName = \"Modal\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {m}from'./chunk-NSDWT2JM.mjs';import {d,e}from'./chunk-OBMOTQEU.mjs';import o from'react';import {jsxs,jsx}from'react/jsx-runtime';var q=o.forwardRef(({isOpen:n,onClose:r,children:i,dot:l,style:m,height:d$1="md",showBackdrop:C=true,backdropDot:H,closeOnBackdropClick:Y=true,closeOnEscape:y=true,showDragHandle:P=true,closable:J=true,snapPoints:h=[25,50,75,100],defaultSnap:D=50,...I},M)=>{let s=n!=null?n:false,b=()=>{r==null||r();},[N,v]=o.useState(false),[S,u]=o.useState(false),[x,L]=o.useState(D),[p,R]=o.useState(false),[T,z]=o.useState(0),[B,k]=o.useState(0),A={sm:{height:"16rem"},md:{height:"24rem"},lg:{height:"32rem"},xl:{height:"40rem"},full:{}};o.useEffect(()=>{if(s){v(true),u(true);let e=setTimeout(()=>u(false),50);return ()=>clearTimeout(e)}else {u(true);let e=setTimeout(()=>{v(false),u(false);},300);return ()=>clearTimeout(e)}},[s]),o.useEffect(()=>{if(!y)return;let e=f=>{f.key==="Escape"&&s&&b();};return s&&(document.addEventListener("keydown",e),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",e),document.body.style.overflow="";}},[s,y]);let K=e=>{R(true),z(e.touches[0].clientY),k(e.touches[0].clientY);},V=e=>{p&&k(e.touches[0].clientY);},$=()=>{if(!p)return;R(false);let e=B-T,f=100;if(e>f)b();else if(e<-f){let O=h.indexOf(x),_=Math.min(O+1,h.length-1);L(h[_]);}};if(!N)return null;let w=S?s?1:0:void 0,j=S?s?"translateY(0)":"translateY(100%)":void 0;return jsxs("div",{style:e("fixed inset-0 z-50"),children:[C&&jsx("div",{style:d(e("absolute inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300"),e(H),w!==void 0?{opacity:w}:void 0),onClick:Y?b:void 0}),jsxs("div",{ref:M,style:d(e("absolute bottom-0 left-0 right-0 bg-background/95 backdrop-blur-xl border-t border-border/50 shadow-2xl rounded-t-lg transition-transform duration-300 ease-out pb-safe"),A[d$1],{height:d$1==="full"?`${x}%`:void 0,maxHeight:d$1!=="full"?void 0:"100%",transform:p?`translateY(${B-T}px)`:j},e(l),m),onTouchStart:K,onTouchMove:V,onTouchEnd:$,...I,children:[P&&jsx("div",{style:e("flex justify-center pt-3 pb-2"),children:jsx("div",{style:e("w-12 h-1.5 bg-muted-foreground/30 rounded-full")})}),i]})]})});q.displayName="BottomSheet";var F=o.forwardRef(({children:n,style:r,showCloseButton:i=true,onClose:l,...m$1},d$1)=>jsxs("div",{ref:d$1,style:d(e("flex items-center justify-between px-6 py-4"),r),...m$1,children:[jsx("div",{style:e("flex-1"),children:n}),i&&jsx("button",{onClick:l,style:e("p-2 rounded-lg hover:bg-muted transition-colors"),children:jsx(m,{name:"close",size:20})})]}));F.displayName="BottomSheetHeader";var G=o.forwardRef(({children:n,style:r,...i},l)=>jsx("div",{ref:l,style:d(e("flex-1 px-6 pb-6 overflow-y-auto"),r),...i,children:n}));G.displayName="BottomSheetContent";export{q as a,F as b,G as c};//# sourceMappingURL=chunk-CQBMR7VU.mjs.map
3
+ //# sourceMappingURL=chunk-CQBMR7VU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/BottomSheet.tsx"],"names":["BottomSheet","React","isOpen","onClose","children","dotProp","style","height","showBackdrop","backdropDot","closeOnBackdropClick","closeOnEscape","showDragHandle","closable","snapPoints","defaultSnap","props","ref","_isOpen","handleClose","isVisible","setIsVisible","isAnimating","setIsAnimating","currentHeight","setCurrentHeight","isDragging","setIsDragging","startY","setStartY","currentY","setCurrentY","heightStyles","timer","handleEscapeKey","e","handleTouchStart","handleTouchMove","handleTouchEnd","deltaY","threshold","currentIndex","nextIndex","backdropOpacity","sheetTransform","jsxs","resolveDot","jsx","mergeStyles","BottomSheetHeader","showCloseButton","Icon","BottomSheetContent"],"mappings":"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","file":"chunk-CQBMR7VU.mjs","sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { Icon } from \"./Icon\"\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\"\n\n/**\n * BottomSheet 컴포넌트의 props / BottomSheet component props\n * @typedef {Object} BottomSheetProps\n * @property {boolean} open - BottomSheet 열림/닫힘 상태 / BottomSheet open/close state\n * @property {(open: boolean) => void} onOpenChange - 상태 변경 콜백 / State change callback\n * @property {React.ReactNode} children - BottomSheet 내용 / BottomSheet content\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @property {\"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"} [height=\"md\"] - BottomSheet 높이 / BottomSheet height\n * @property {boolean} [showBackdrop=true] - 배경 오버레이 표시 여부 / Show backdrop overlay\n * @property {string} [backdropClassName] - 배경 오버레이 추가 CSS 클래스 / Backdrop overlay additional CSS class\n * @property {boolean} [closeOnBackdropClick=true] - 배경 클릭 시 닫기 여부 / Close on backdrop click\n * @property {boolean} [closeOnEscape=true] - ESC 키로 닫기 여부 / Close on ESC key\n * @property {boolean} [showDragHandle=true] - 드래그 핸들 표시 여부 / Show drag handle\n * @property {number[]} [snapPoints=[25, 50, 75, 100]] - 스냅 포인트 (퍼센트) / Snap points (percentage)\n * @property {number} [defaultSnap=50] - 기본 스냅 포인트 (퍼센트) / Default snap point (percentage)\n */\ninterface BottomSheetProps {\n /** BottomSheet 열림/닫힘 상태 / BottomSheet open/close state */\n isOpen?: boolean\n /** BottomSheet 닫기 콜백 / BottomSheet close callback */\n onClose?: () => void\n /** BottomSheet 내용 / BottomSheet content */\n children: React.ReactNode\n /** dot 유틸리티 스트링 (인라인 스타일로 변환) / dot utility string (converted to inline style) */\n dot?: string\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n /** BottomSheet 높이 / BottomSheet height */\n height?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\"\n /** 배경 오버레이 표시 여부 / Show backdrop overlay */\n showBackdrop?: boolean\n /** 배경 오버레이 추가 dot 스트링 / Backdrop overlay additional dot string */\n backdropDot?: string\n /** 배경 클릭 시 닫기 여부 / Close on backdrop click */\n closeOnBackdropClick?: boolean\n /** ESC 키로 닫기 여부 / Close on ESC key */\n closeOnEscape?: boolean\n /** 드래그 핸들 표시 여부 / Show drag handle */\n showDragHandle?: boolean\n /** 닫기 버튼 표시 여부 / Show close button */\n closable?: boolean\n /** 스냅 포인트 (퍼센트) / Snap points (percentage) */\n snapPoints?: number[]\n /** 기본 스냅 포인트 (퍼센트) / Default snap point (percentage) */\n defaultSnap?: number\n}\n\n/**\n * BottomSheet 컴포넌트 / BottomSheet component\n *\n * 화면 하단에서 올라오는 시트 컴포넌트입니다.\n * 모바일 친화적인 UI를 제공하며, 드래그로 높이를 조절할 수 있습니다.\n * 스냅 포인트를 지원하여 특정 높이에서 멈출 수 있습니다.\n *\n * Sheet component that slides up from the bottom of the screen.\n * Provides mobile-friendly UI and allows height adjustment by dragging.\n * Supports snap points to stop at specific heights.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * const [open, setOpen] = useState(false)\n *\n * <BottomSheet open={open} onOpenChange={setOpen}>\n * <BottomSheetHeader>제목</BottomSheetHeader>\n * <BottomSheetContent>내용</BottomSheetContent>\n * </BottomSheet>\n *\n * @example\n * // 커스텀 스냅 포인트 / Custom snap points\n * <BottomSheet\n * open={open}\n * onOpenChange={setOpen}\n * snapPoints={[30, 60, 90]}\n * defaultSnap={30}\n * >\n * <BottomSheetContent>내용</BottomSheetContent>\n * </BottomSheet>\n *\n * @param {BottomSheetProps} props - BottomSheet 컴포넌트의 props / BottomSheet component props\n * @param {React.Ref<HTMLDivElement>} ref - BottomSheet 컨테이너 ref / BottomSheet container ref\n * @returns {JSX.Element} BottomSheet 컴포넌트 / BottomSheet component\n *\n * @todo 접근성 개선: role=\"dialog\", aria-modal=\"true\" 추가 필요 / Accessibility: Add role=\"dialog\", aria-modal=\"true\"\n * @todo 접근성 개선: aria-labelledby, aria-describedby 연결 필요 / Accessibility: Connect aria-labelledby, aria-describedby\n */\nconst BottomSheet = React.forwardRef<HTMLDivElement, BottomSheetProps>(\n ({\n isOpen,\n onClose,\n children,\n dot: dotProp,\n style,\n height = \"md\",\n showBackdrop = true,\n backdropDot,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n showDragHandle = true,\n closable = true,\n snapPoints = [25, 50, 75, 100],\n defaultSnap = 50,\n ...props\n }, ref) => {\n const _isOpen = isOpen ?? false\n const handleClose = () => {\n onClose?.()\n }\n\n const [isVisible, setIsVisible] = React.useState(false)\n const [isAnimating, setIsAnimating] = React.useState(false)\n const [currentHeight, setCurrentHeight] = React.useState(defaultSnap)\n const [isDragging, setIsDragging] = React.useState(false)\n const [startY, setStartY] = React.useState(0)\n const [currentY, setCurrentY] = React.useState(0)\n\n const heightStyles: Record<string, React.CSSProperties> = {\n sm: { height: '16rem' },\n md: { height: '24rem' },\n lg: { height: '32rem' },\n xl: { height: '40rem' },\n full: {}\n }\n\n React.useEffect(() => {\n if (_isOpen) {\n setIsVisible(true)\n setIsAnimating(true)\n const timer = setTimeout(() => setIsAnimating(false), 50)\n return () => clearTimeout(timer)\n } else {\n setIsAnimating(true)\n const timer = setTimeout(() => {\n setIsVisible(false)\n setIsAnimating(false)\n }, 300)\n return () => clearTimeout(timer)\n }\n }, [_isOpen])\n\n React.useEffect(() => {\n if (!closeOnEscape) return\n\n const handleEscapeKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && _isOpen) {\n handleClose()\n }\n }\n\n if (_isOpen) {\n document.addEventListener(\"keydown\", handleEscapeKey)\n document.body.style.overflow = \"hidden\"\n }\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscapeKey)\n document.body.style.overflow = \"\"\n }\n }, [_isOpen, closeOnEscape])\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setIsDragging(true)\n setStartY(e.touches[0].clientY)\n setCurrentY(e.touches[0].clientY)\n }\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return\n setCurrentY(e.touches[0].clientY)\n }\n\n const handleTouchEnd = () => {\n if (!isDragging) return\n setIsDragging(false)\n\n const deltaY = currentY - startY\n const threshold = 100\n\n if (deltaY > threshold) {\n // 아래로 드래그 - 닫기\n handleClose()\n } else if (deltaY < -threshold) {\n // 위로 드래그 - 다음 스냅 포인트\n const currentIndex = snapPoints.indexOf(currentHeight)\n const nextIndex = Math.min(currentIndex + 1, snapPoints.length - 1)\n setCurrentHeight(snapPoints[nextIndex])\n }\n }\n\n if (!isVisible) return null\n\n // Backdrop opacity animation\n const backdropOpacity = isAnimating\n ? (_isOpen ? 1 : 0)\n : undefined\n\n // Sheet transform animation\n const sheetTransform = isAnimating\n ? (_isOpen ? 'translateY(0)' : 'translateY(100%)')\n : undefined\n\n return (\n <div style={resolveDot('fixed inset-0 z-50')}>\n {/* Backdrop */}\n {showBackdrop && (\n <div\n style={mergeStyles(\n resolveDot('absolute inset-0 bg-black/85 backdrop-blur-md transition-opacity duration-300'),\n resolveDot(backdropDot),\n backdropOpacity !== undefined ? { opacity: backdropOpacity } : undefined\n )}\n onClick={closeOnBackdropClick ? handleClose : undefined}\n />\n )}\n\n {/* Bottom Sheet */}\n <div\n ref={ref}\n style={mergeStyles(\n resolveDot('absolute bottom-0 left-0 right-0 bg-background/95 backdrop-blur-xl border-t border-border/50 shadow-2xl rounded-t-lg transition-transform duration-300 ease-out pb-safe'),\n heightStyles[height],\n {\n // height prop이 \"full\"일 때만 퍼센트 높이 사용 (스냅 포인트)\n // 그 외에는 heightStyles의 고정 높이 사용\n height: height === \"full\" ? `${currentHeight}%` : undefined,\n maxHeight: height !== \"full\" ? undefined : \"100%\",\n transform: isDragging\n ? `translateY(${currentY - startY}px)`\n : sheetTransform,\n },\n resolveDot(dotProp),\n style\n )}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n {...props}\n >\n {/* Drag Handle */}\n {showDragHandle && (\n <div style={resolveDot('flex justify-center pt-3 pb-2')}>\n <div style={resolveDot('w-12 h-1.5 bg-muted-foreground/30 rounded-full')} />\n </div>\n )}\n\n {children}\n </div>\n </div>\n )\n }\n)\nBottomSheet.displayName = \"BottomSheet\"\n\n/**\n * BottomSheetHeader 컴포넌트의 props / BottomSheetHeader component props\n * @typedef {Object} BottomSheetHeaderProps\n * @property {React.ReactNode} children - 헤더 내용 / Header content\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n * @property {boolean} [showCloseButton=true] - 닫기 버튼 표시 여부 / Show close button\n * @property {() => void} [onClose] - 닫기 버튼 클릭 콜백 / Close button click callback\n */\ninterface BottomSheetHeaderProps {\n children: React.ReactNode\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n showCloseButton?: boolean\n onClose?: () => void\n}\n\n/**\n * BottomSheetHeader 컴포넌트 / BottomSheetHeader component\n * BottomSheet의 헤더 영역을 표시합니다.\n * Displays the header area of a BottomSheet.\n *\n * @component\n * @param {BottomSheetHeaderProps} props - BottomSheetHeader 컴포넌트의 props / BottomSheetHeader component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} BottomSheetHeader 컴포넌트 / BottomSheetHeader component\n */\nconst BottomSheetHeader = React.forwardRef<HTMLDivElement, BottomSheetHeaderProps>(\n ({ children, style, showCloseButton = true, onClose, ...props }, ref) => {\n return (\n <div\n ref={ref}\n style={mergeStyles(resolveDot('flex items-center justify-between px-6 py-4'), style)}\n {...props}\n >\n <div style={resolveDot('flex-1')}>{children}</div>\n {showCloseButton && (\n <button\n onClick={onClose}\n style={resolveDot('p-2 rounded-lg hover:bg-muted transition-colors')}\n >\n <Icon name=\"close\" size={20} />\n </button>\n )}\n </div>\n )\n }\n)\nBottomSheetHeader.displayName = \"BottomSheetHeader\"\n\n/**\n * BottomSheetContent 컴포넌트의 props / BottomSheetContent component props\n * @typedef {Object} BottomSheetContentProps\n * @property {React.ReactNode} children - 콘텐츠 / Content\n * @property {React.CSSProperties} [style] - 인라인 스타일 / Inline style\n */\ninterface BottomSheetContentProps {\n children: React.ReactNode\n /** 인라인 스타일 / Inline style */\n style?: React.CSSProperties\n}\n\n/**\n * BottomSheetContent 컴포넌트 / BottomSheetContent component\n * BottomSheet의 메인 콘텐츠 영역을 표시합니다.\n * Displays the main content area of a BottomSheet.\n *\n * @component\n * @param {BottomSheetContentProps} props - BottomSheetContent 컴포넌트의 props / BottomSheetContent component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} BottomSheetContent 컴포넌트 / BottomSheetContent component\n */\nconst BottomSheetContent = React.forwardRef<HTMLDivElement, BottomSheetContentProps>(\n ({ children, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n style={mergeStyles(resolveDot('flex-1 px-6 pb-6 overflow-y-auto'), style)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nBottomSheetContent.displayName = \"BottomSheetContent\"\n\nexport { BottomSheet, BottomSheetHeader, BottomSheetContent }\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {a}from'./chunk-LPHUWTQ2.mjs';import {b,a as a$2}from'./chunk-7CGJQSJO.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import a$1,{useMemo,useState}from'react';import {offset,flip,shift,arrow,useFloating,autoUpdate,useClick,useDismiss,useRole,useInteractions,FloatingPortal,FloatingArrow}from'@floating-ui/react';import {jsxs,jsx}from'react/jsx-runtime';var Re={display:"inline-block",cursor:"pointer"},ge={zIndex:50,minWidth:"8rem",width:"max-content",...e("py-1"),border:"1px solid var(--color-border)",backgroundColor:"var(--color-popover, var(--dropdown-bg, #fff))",color:"var(--color-popover-foreground)"},k,G,Y,B,U,W,ve={none:(k=e("rounded-none"))!=null?k:{},sm:(G=e("rounded"))!=null?G:{},md:(Y=e("rounded-md"))!=null?Y:{},lg:(B=e("rounded-lg"))!=null?B:{},xl:(U=e("rounded-xl"))!=null?U:{},full:(W=e("rounded-full"))!=null?W:{}},V,$,z,Z,q,we={none:{},sm:(V=e("shadow-sm"))!=null?V:{},md:($=e("shadow-md"))!=null?$:{},lg:(z=e("shadow-lg"))!=null?z:{},xl:(Z=e("shadow-xl"))!=null?Z:{},"2xl":(q=e("shadow-2xl"))!=null?q:{}},Ee={width:"100%",display:"flex",alignItems:"center",...e("gap-2 px-3 py-2"),fontSize:"0.875rem",fontWeight:500,transition:a.colors,background:"none",border:"none",textAlign:"left",cursor:"pointer",outline:"none",color:"var(--color-foreground)"},H={default:{color:"var(--color-foreground)"},destructive:{color:"var(--color-destructive)"},disabled:{color:"var(--color-muted-foreground)",cursor:"not-allowed"}},O={default:{backgroundColor:"var(--color-muted)"},destructive:{backgroundColor:"color-mix(in srgb, var(--color-destructive) 10%, transparent)"},disabled:{}},Te={backgroundColor:"var(--color-muted)",outline:"none"},be={flexShrink:0,width:"1rem",height:"1rem"},De={flex:1,textAlign:"left"},ye={height:"1px",backgroundColor:"var(--color-border)",...e("my-2")},Le={...e("px-4 py-2"),fontSize:"0.75rem",fontWeight:600,color:"var(--color-muted-foreground)",textTransform:"uppercase",letterSpacing:"0.05em"},Pe={...e("py-1")},xe={display:"flex",flexDirection:"column",...e("gap-1")};function Me(o,r){return r==="center"?o:`${o}-${r}`}var F=8,Ce=a$1.forwardRef(({dot:o,trigger:r,children:t,open:s,onOpenChange:n,placement:l="bottom",align:w="start",offset:E=8,disabled:f=false,showArrow:m=false,rounded:S="lg",shadow:R="md",style:c,...T},b$1)=>{let[D,P]=a$1.useState(false),g=a$1.useRef(null),u=s!==void 0,x=u?s:D,J=a$1.useCallback(y=>{f&&y||(u||P(y),n==null||n(y));},[f,u,n]),K=Me(l,w),M=[offset(E),flip(),shift({padding:8})];m&&M.push(arrow({element:g,padding:8}));let{refs:C,floatingStyles:N,context:v}=useFloating({open:x,onOpenChange:J,placement:K,middleware:M,whileElementsMounted:autoUpdate}),Q=useClick(v),X=useDismiss(v),j=useRole(v,{role:"menu"}),{getReferenceProps:ee,getFloatingProps:oe}=useInteractions([Q,X,j]),te=useMemo(()=>d({position:"relative",display:"inline-block"},e(o),c),[o,c]),re=useMemo(()=>d(ge,ve[S],we[R],{animation:`dropdownEnter ${b.soft}ms ${a$2.soft}`,transformOrigin:"top"},N),[S,R,N]);return jsxs("div",{ref:b$1,style:te,...T,children:[jsx("div",{ref:C.setReference,style:Re,...ee(),children:r}),x&&jsx(FloatingPortal,{children:jsxs("div",{ref:C.setFloating,style:re,...oe(),children:[m&&jsx(FloatingArrow,{ref:g,context:v,width:F*2,height:F,style:{fill:"var(--color-popover, var(--dropdown-bg, #fff))"}}),t]})})]})});Ce.displayName="Dropdown";var Ne=a$1.forwardRef(({dot:o,icon:r,variant:t="default",children:s,disabled:n,style:l,...w},E)=>{let[f,m]=useState(false),[S,R]=useState(false),c=n||t==="disabled",T=useMemo(()=>{var g,u;let b=(g=H[t])!=null?g:H.default,D=f&&!c?(u=O[t])!=null?u:O.default:void 0;return d(Ee,b,D,S&&!c?Te:void 0,e(o),l)},[t,f,S,c,o,l]);return jsxs("button",{ref:E,style:T,disabled:c,onMouseEnter:()=>m(true),onMouseLeave:()=>m(false),onFocus:()=>R(true),onBlur:()=>R(false),...w,children:[r&&jsx("div",{style:be,children:r}),jsx("span",{style:De,children:s})]})});Ne.displayName="DropdownItem";var Ie=a$1.forwardRef(({dot:o,style:r,...t},s)=>{let n=useMemo(()=>d(ye,e(o),r),[o,r]);return jsx("div",{ref:s,style:n,...t})});Ie.displayName="DropdownSeparator";var he=a$1.forwardRef(({dot:o,children:r,style:t,...s},n)=>{let l=useMemo(()=>d(Le,e(o),t),[o,t]);return jsx("div",{ref:n,style:l,...s,children:r})});he.displayName="DropdownLabel";var Ae=a$1.forwardRef(({dot:o,children:r,style:t,...s},n)=>{let l=useMemo(()=>d(Pe,e(o),t),[o,t]);return jsx("div",{ref:n,style:l,...s,children:r})});Ae.displayName="DropdownMenu";var _e=a$1.forwardRef(({dot:o,children:r,style:t,...s},n)=>{let l=useMemo(()=>d(xe,e(o),t),[o,t]);return jsx("div",{ref:n,style:l,...s,children:r})});_e.displayName="DropdownGroup";export{Ce as a,Ne as b,Ie as c,he as d,Ae as e,_e as f};//# sourceMappingURL=chunk-CYAAAEPJ.mjs.map
3
+ //# sourceMappingURL=chunk-CYAAAEPJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Dropdown.tsx"],"names":["TRIGGER_WRAPPER_STYLE","FLOATING_PANEL_BASE","resolveDot","_a","_b","_c","_d","_e","_f","ROUNDED_CSS","SHADOW_CSS","ITEM_BASE_STYLE","TRANSITIONS","ITEM_VARIANT_STYLE","ITEM_HOVER_STYLE","ITEM_FOCUS_STYLE","ITEM_ICON_STYLE","ITEM_LABEL_STYLE","SEPARATOR_STYLE","LABEL_STYLE","MENU_STYLE","GROUP_STYLE","resolveFloatingPlacement","placement","align","ARROW_SIZE","Dropdown","React","dotProp","trigger","children","controlledOpen","onOpenChange","offset","disabled","showArrow","rounded","shadow","style","props","ref","internalOpen","setInternalOpen","arrowRef","isControlled","isOpen","handleOpenChange","newOpen","floatingPlacement","middleware","offsetMiddleware","flip","shift","arrowMiddleware","refs","floatingStyles","context","useFloating","autoUpdate","click","useClick","dismiss","useDismiss","role","useRole","getReferenceProps","getFloatingProps","useInteractions","rootStyle","useMemo","mergeStyles","panelStyle","DURATIONS","EASING_FUNCTIONS","jsxs","jsx","FloatingPortal","FloatingArrow","DropdownItem","icon","variant","isHovered","setIsHovered","useState","isFocused","setIsFocused","isDisabled","computedStyle","variantStyle","hoverStyle","DropdownSeparator","DropdownLabel","DropdownMenu","DropdownGroup"],"mappings":"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","file":"chunk-CYAAAEPJ.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset as offsetMiddleware,\n flip,\n shift,\n arrow as arrowMiddleware,\n useClick,\n useDismiss,\n useRole,\n useInteractions,\n FloatingPortal,\n FloatingArrow,\n type Placement,\n} from \"@floating-ui/react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { EASING_FUNCTIONS, DURATIONS } from \"../lib/motion/presets\";\nimport { TRANSITIONS } from \"../lib/styles/transition\";\n\n// ---------------------------------------------------------------------------\n// Static style objects\n// ---------------------------------------------------------------------------\n\nconst TRIGGER_WRAPPER_STYLE: React.CSSProperties = {\n display: \"inline-block\",\n cursor: \"pointer\",\n};\n\nconst FLOATING_PANEL_BASE: React.CSSProperties = {\n zIndex: 50,\n minWidth: \"8rem\",\n width: \"max-content\",\n ...resolveDot(\"py-1\"),\n border: \"1px solid var(--color-border)\",\n backgroundColor: \"var(--color-popover, var(--dropdown-bg, #fff))\",\n color: \"var(--color-popover-foreground)\",\n};\n\nconst ROUNDED_CSS: Record<string, React.CSSProperties> = {\n none: resolveDot(\"rounded-none\") ?? {},\n sm: resolveDot(\"rounded\") ?? {},\n md: resolveDot(\"rounded-md\") ?? {},\n lg: resolveDot(\"rounded-lg\") ?? {},\n xl: resolveDot(\"rounded-xl\") ?? {},\n full: resolveDot(\"rounded-full\") ?? {},\n};\n\nconst SHADOW_CSS: Record<string, React.CSSProperties> = {\n none: {},\n sm: resolveDot(\"shadow-sm\") ?? {},\n md: resolveDot(\"shadow-md\") ?? {},\n lg: resolveDot(\"shadow-lg\") ?? {},\n xl: resolveDot(\"shadow-xl\") ?? {},\n \"2xl\": resolveDot(\"shadow-2xl\") ?? {},\n};\n\n// DropdownItem variants\nconst ITEM_BASE_STYLE: React.CSSProperties = {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2 px-3 py-2\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n transition: TRANSITIONS.colors,\n background: \"none\",\n border: \"none\",\n textAlign: \"left\" as const,\n cursor: \"pointer\",\n outline: \"none\",\n color: \"var(--color-foreground)\",\n};\n\nconst ITEM_VARIANT_STYLE: Record<string, React.CSSProperties> = {\n default: {\n color: \"var(--color-foreground)\",\n },\n destructive: {\n color: \"var(--color-destructive)\",\n },\n disabled: {\n color: \"var(--color-muted-foreground)\",\n cursor: \"not-allowed\",\n },\n};\n\nconst ITEM_HOVER_STYLE: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"var(--color-muted)\",\n },\n destructive: {\n backgroundColor:\n \"color-mix(in srgb, var(--color-destructive) 10%, transparent)\",\n },\n disabled: {},\n};\n\nconst ITEM_FOCUS_STYLE: React.CSSProperties = {\n backgroundColor: \"var(--color-muted)\",\n outline: \"none\",\n};\n\nconst ITEM_ICON_STYLE: React.CSSProperties = {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n};\n\nconst ITEM_LABEL_STYLE: React.CSSProperties = {\n flex: 1,\n textAlign: \"left\",\n};\n\n// DropdownSeparator\nconst SEPARATOR_STYLE: React.CSSProperties = {\n height: \"1px\",\n backgroundColor: \"var(--color-border)\",\n ...resolveDot(\"my-2\"),\n};\n\n// DropdownLabel\nconst LABEL_STYLE: React.CSSProperties = {\n ...resolveDot(\"px-4 py-2\"),\n fontSize: \"0.75rem\",\n fontWeight: 600,\n color: \"var(--color-muted-foreground)\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n};\n\n// DropdownMenu\nconst MENU_STYLE: React.CSSProperties = {\n ...resolveDot(\"py-1\"),\n};\n\n// DropdownGroup\nconst GROUP_STYLE: React.CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-1\"),\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveFloatingPlacement(\n placement: \"top\" | \"bottom\" | \"left\" | \"right\",\n align: \"start\" | \"center\" | \"end\",\n): Placement {\n if (align === \"center\") return placement;\n return `${placement}-${align}`;\n}\n\nconst ARROW_SIZE = 8;\n\n// ---------------------------------------------------------------------------\n// Dropdown (root)\n// ---------------------------------------------------------------------------\n\nexport interface DropdownProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n trigger: React.ReactNode;\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n offset?: number;\n disabled?: boolean;\n showArrow?: boolean;\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst Dropdown = React.forwardRef<HTMLDivElement, DropdownProps>(\n (\n {\n dot: dotProp,\n trigger,\n children,\n open: controlledOpen,\n onOpenChange,\n placement = \"bottom\",\n align = \"start\",\n offset = 8,\n disabled = false,\n showArrow = false,\n rounded = \"lg\",\n shadow = \"md\",\n style,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = React.useState(false);\n const arrowRef = React.useRef<SVGSVGElement>(null);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = React.useCallback(\n (newOpen: boolean) => {\n if (disabled && newOpen) return;\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n },\n [disabled, isControlled, onOpenChange],\n );\n\n const floatingPlacement = resolveFloatingPlacement(placement, align);\n\n const middleware = [\n offsetMiddleware(offset),\n flip(),\n shift({ padding: 8 }),\n ];\n if (showArrow) {\n middleware.push(arrowMiddleware({ element: arrowRef, padding: 8 }));\n }\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: handleOpenChange,\n placement: floatingPlacement,\n middleware,\n whileElementsMounted: autoUpdate,\n });\n\n const click = useClick(context);\n const dismiss = useDismiss(context);\n const role = useRole(context, { role: \"menu\" });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n click,\n dismiss,\n role,\n ]);\n\n const rootStyle = useMemo(\n () =>\n mergeStyles(\n { position: \"relative\", display: \"inline-block\" },\n resolveDot(dotProp),\n style,\n ),\n [dotProp, style],\n );\n\n const panelStyle = useMemo(\n () =>\n mergeStyles(\n FLOATING_PANEL_BASE,\n ROUNDED_CSS[rounded],\n SHADOW_CSS[shadow],\n {\n animation: `dropdownEnter ${DURATIONS.soft}ms ${EASING_FUNCTIONS.soft}`,\n transformOrigin: \"top\",\n },\n floatingStyles,\n ),\n [rounded, shadow, floatingStyles],\n );\n\n return (\n <div ref={ref} style={rootStyle} {...props}>\n {/* Trigger */}\n <div\n ref={refs.setReference}\n style={TRIGGER_WRAPPER_STYLE}\n {...getReferenceProps()}\n >\n {trigger}\n </div>\n\n {/* Dropdown via Portal */}\n {isOpen && (\n <FloatingPortal>\n <div\n ref={refs.setFloating}\n style={panelStyle}\n {...getFloatingProps()}\n >\n {showArrow && (\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={ARROW_SIZE * 2}\n height={ARROW_SIZE}\n style={{\n fill: \"var(--color-popover, var(--dropdown-bg, #fff))\",\n }}\n />\n )}\n {children}\n </div>\n </FloatingPortal>\n )}\n </div>\n );\n },\n);\nDropdown.displayName = \"Dropdown\";\n\n// ---------------------------------------------------------------------------\n// DropdownItem\n// ---------------------------------------------------------------------------\n\nexport interface DropdownItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"className\"\n> {\n icon?: React.ReactNode;\n variant?: \"default\" | \"destructive\" | \"disabled\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst DropdownItem = React.forwardRef<HTMLButtonElement, DropdownItemProps>(\n (\n {\n dot: dotProp,\n icon,\n variant = \"default\",\n children,\n disabled,\n style,\n ...props\n },\n ref,\n ) => {\n const [isHovered, setIsHovered] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const isDisabled = disabled || variant === \"disabled\";\n\n const computedStyle = useMemo(() => {\n const variantStyle =\n ITEM_VARIANT_STYLE[variant] ?? ITEM_VARIANT_STYLE.default;\n const hoverStyle =\n isHovered && !isDisabled\n ? (ITEM_HOVER_STYLE[variant] ?? ITEM_HOVER_STYLE.default)\n : undefined;\n const focusStyle =\n isFocused && !isDisabled ? ITEM_FOCUS_STYLE : undefined;\n return mergeStyles(\n ITEM_BASE_STYLE,\n variantStyle,\n hoverStyle,\n focusStyle,\n resolveDot(dotProp),\n style,\n );\n }, [variant, isHovered, isFocused, isDisabled, dotProp, style]);\n\n return (\n <button\n ref={ref}\n style={computedStyle}\n disabled={isDisabled}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n {...props}\n >\n {icon && <div style={ITEM_ICON_STYLE}>{icon}</div>}\n <span style={ITEM_LABEL_STYLE}>{children}</span>\n </button>\n );\n },\n);\nDropdownItem.displayName = \"DropdownItem\";\n\n// ---------------------------------------------------------------------------\n// DropdownSeparator\n// ---------------------------------------------------------------------------\n\nexport interface DropdownSeparatorProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst DropdownSeparator = React.forwardRef<\n HTMLDivElement,\n DropdownSeparatorProps\n>(({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(SEPARATOR_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n return <div ref={ref} style={computedStyle} {...props} />;\n});\nDropdownSeparator.displayName = \"DropdownSeparator\";\n\n// ---------------------------------------------------------------------------\n// DropdownLabel\n// ---------------------------------------------------------------------------\n\nexport interface DropdownLabelProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst DropdownLabel = React.forwardRef<HTMLDivElement, DropdownLabelProps>(\n ({ dot: dotProp, children, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(LABEL_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n },\n);\nDropdownLabel.displayName = \"DropdownLabel\";\n\n// ---------------------------------------------------------------------------\n// DropdownMenu\n// ---------------------------------------------------------------------------\n\nexport interface DropdownMenuProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n ({ dot: dotProp, children, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(MENU_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n },\n);\nDropdownMenu.displayName = \"DropdownMenu\";\n\n// ---------------------------------------------------------------------------\n// DropdownGroup\n// ---------------------------------------------------------------------------\n\nexport interface DropdownGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n style?: React.CSSProperties;\n}\n\nconst DropdownGroup = React.forwardRef<HTMLDivElement, DropdownGroupProps>(\n ({ dot: dotProp, children, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(GROUP_STYLE, resolveDot(dotProp), style),\n [dotProp, style],\n );\n return (\n <div ref={ref} style={computedStyle} {...props}>\n {children}\n </div>\n );\n },\n);\nDropdownGroup.displayName = \"DropdownGroup\";\n\nexport {\n Dropdown,\n DropdownItem,\n DropdownSeparator,\n DropdownLabel,\n DropdownMenu,\n DropdownGroup,\n};\n"]}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import {d as d$1,e}from'./chunk-OBMOTQEU.mjs';import d,{useMemo}from'react';import {dotVariants,dot}from'@hua-labs/dot';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var k=i=>dot(i),R=dotVariants({base:"block",variants:{variant:{text:"rounded w-full h-4",circular:"rounded-full w-10 h-10",rounded:"rounded-lg w-full h-[200px]",rectangular:"rounded-none w-full h-[200px]"},animation:{pulse:"",wave:"",shimmer:""}},defaultVariants:{variant:"text",animation:"pulse"}}),T={backgroundColor:"var(--color-muted)",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"},D={background:"linear-gradient(90deg, var(--color-muted) 0%, color-mix(in srgb, var(--color-muted-foreground) 20%, transparent) 50%, var(--color-muted) 100%)",backgroundSize:"200% 100%",animation:"shimmer 1.5s ease-in-out infinite"},m=d.forwardRef(({variant:i="text",width:t,height:l,animation:n="pulse",dot:o,style:x,...y},g)=>{let u=useMemo(()=>{let v=R({variant:i,animation:n});return d$1(v,n==="pulse"?T:D,t!=null?{width:typeof t=="number"?`${t}px`:t}:void 0,l!=null?{height:typeof l=="number"?`${l}px`:l}:void 0,e(o),x)},[i,n,t,l,o,x]);return jsxs(Fragment,{children:[(n==="wave"||n==="shimmer")&&jsx("style",{children:`
3
+ @keyframes shimmer {
4
+ 0% { background-position: 200% 0; }
5
+ 100% { background-position: -200% 0; }
6
+ }
7
+ `}),jsx("div",{ref:g,style:u,...y})]})});m.displayName="Skeleton";var r=d.forwardRef(({dot:i,...t},l)=>jsx(m,{ref:l,variant:"text",dot:i,...t}));r.displayName="SkeletonText";var h=d.forwardRef(({dot:i,...t},l)=>jsx(m,{ref:l,variant:"circular",dot:i,...t}));h.displayName="SkeletonCircle";var L=d.forwardRef(({dot:i,...t},l)=>jsx(m,{ref:l,variant:"rectangular",dot:i,...t}));L.displayName="SkeletonRectangle";var f=d.forwardRef(({dot:i,...t},l)=>jsx(m,{ref:l,variant:"rounded",dot:i,...t}));f.displayName="SkeletonRounded";var M=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1(k("p-6"),{display:"flex",flexDirection:"column",...e("gap-4")},e(i),t),[i,t]);return jsxs("div",{ref:n,style:o,...l,children:[jsxs("div",{style:{display:"flex",alignItems:"center",...e("gap-4")},children:[jsx(h,{style:{width:"48px",height:"48px"}}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2"),flex:1},children:[jsx(r,{style:{height:"16px",width:"75%"}}),jsx(r,{style:{height:"12px",width:"50%"}})]})]}),jsx(f,{style:{width:"100%",height:"128px"}}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2")},children:[jsx(r,{style:{height:"16px",width:"100%"}}),jsx(r,{style:{height:"16px",width:"83.333%"}}),jsx(r,{style:{height:"16px",width:"66.667%"}})]})]})});M.displayName="SkeletonCard";var H=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1({display:"flex",alignItems:"center",...e("gap-4")},e(i),t),[i,t]);return jsxs("div",{ref:n,style:o,...l,children:[jsx(h,{style:{width:"48px",height:"48px"}}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2"),flex:1},children:[jsx(r,{style:{height:"16px",width:"75%"}}),jsx(r,{style:{height:"12px",width:"50%"}})]})]})});H.displayName="SkeletonAvatar";var b=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1({display:"flex",flexDirection:"column",...e("gap-2")},e(i),t),[i,t]);return jsxs("div",{ref:n,style:o,...l,children:[jsx(f,{style:{width:"100%",height:"192px"}}),jsx(r,{style:{height:"16px",width:"50%"}})]})});b.displayName="SkeletonImage";var E=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1({display:"flex",flexDirection:"column",...e("gap-4")},e(i),t),[i,t]);return jsxs("div",{ref:n,style:o,...l,children:[jsxs("div",{style:{display:"flex",alignItems:"center",...e("gap-4")},children:[jsx(h,{style:{width:"64px",height:"64px"}}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2"),flex:1},children:[jsx(r,{style:{height:"20px",width:"50%"}}),jsx(r,{style:{height:"12px",width:"33.333%"}})]})]}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2")},children:[jsx(r,{style:{height:"16px",width:"100%"}}),jsx(r,{style:{height:"16px",width:"83.333%"}})]})]})});E.displayName="SkeletonUserProfile";var N=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1({display:"flex",flexDirection:"column",...e("gap-4")},e(i),t),[i,t]);return jsx("div",{ref:n,style:o,...l,children:Array.from({length:3}).map((x,y)=>jsxs("div",{style:{display:"flex",alignItems:"center",...e("gap-4")},children:[jsx(h,{style:{width:"40px",height:"40px"}}),jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-2"),flex:1},children:[jsx(r,{style:{height:"16px",width:"75%"}}),jsx(r,{style:{height:"12px",width:"50%"}})]})]},y))})});N.displayName="SkeletonList";var C=d.forwardRef(({dot:i,style:t,...l},n)=>{let o=useMemo(()=>d$1({display:"flex",flexDirection:"column",...e("gap-4")},e(i),t),[i,t]);return jsxs("div",{ref:n,style:o,...l,children:[jsxs("div",{style:{display:"flex",...e("gap-4")},children:[jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}})]}),Array.from({length:5}).map((x,y)=>jsxs("div",{style:{display:"flex",...e("gap-4")},children:[jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}}),jsx(r,{style:{height:"16px",width:"25%"}})]},y))]})});C.displayName="SkeletonTable";export{m as a,r as b,h as c,L as d,f as e,M as f,H as g,b as h,E as i,N as j,C as k};//# sourceMappingURL=chunk-D7MTTTQY.mjs.map
8
+ //# sourceMappingURL=chunk-D7MTTTQY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Skeleton.tsx"],"names":["s","input","dotFn","skeletonVariantStyles","dotVariants","PULSE_STYLE","SHIMMER_STYLE","Skeleton","React","variant","width","height","animation","dotProp","style","props","ref","computedStyle","useMemo","base","mergeStyles","resolveDot","jsxs","Fragment","jsx","SkeletonText","SkeletonCircle","SkeletonRectangle","SkeletonRounded","SkeletonCard","styleProp","containerStyle","SkeletonAvatar","SkeletonImage","SkeletonUserProfile","SkeletonList","_","index","SkeletonTable"],"mappings":"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","file":"chunk-D7MTTTQY.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties;\n\nexport const skeletonVariantStyles = dotVariants({\n base: \"block\",\n variants: {\n variant: {\n text: \"rounded w-full h-4\",\n circular: \"rounded-full w-10 h-10\",\n rounded: \"rounded-lg w-full h-[200px]\",\n rectangular: \"rounded-none w-full h-[200px]\",\n },\n animation: {\n pulse: \"\",\n wave: \"\",\n shimmer: \"\",\n },\n },\n defaultVariants: {\n variant: \"text\",\n animation: \"pulse\",\n },\n});\n\n/** Pulse animation style (uses CSS animation) */\nconst PULSE_STYLE: React.CSSProperties = {\n backgroundColor: \"var(--color-muted)\",\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n};\n\n/** Wave/shimmer gradient animation style */\nconst SHIMMER_STYLE: React.CSSProperties = {\n background:\n \"linear-gradient(90deg, var(--color-muted) 0%, color-mix(in srgb, var(--color-muted-foreground) 20%, transparent) 50%, var(--color-muted) 100%)\",\n backgroundSize: \"200% 100%\",\n animation: \"shimmer 1.5s ease-in-out infinite\",\n};\n\n/**\n * Skeleton component props\n */\nexport interface SkeletonProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n variant?: \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\n width?: string | number;\n height?: string | number;\n animation?: \"pulse\" | \"wave\" | \"shimmer\";\n dot?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Skeleton component\n *\n * A skeleton component for displaying loading placeholders.\n *\n * @example\n * <Skeleton />\n * <Skeleton variant=\"circular\" width={40} height={40} />\n * <Skeleton variant=\"rounded\" width=\"100%\" height={200} animation=\"wave\" />\n */\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n width,\n height,\n animation = \"pulse\",\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const computedStyle = useMemo(() => {\n const base = skeletonVariantStyles({\n variant,\n animation,\n }) as React.CSSProperties;\n const animStyle = animation === \"pulse\" ? PULSE_STYLE : SHIMMER_STYLE;\n return mergeStyles(\n base,\n animStyle,\n width != null\n ? { width: typeof width === \"number\" ? `${width}px` : width }\n : undefined,\n height != null\n ? { height: typeof height === \"number\" ? `${height}px` : height }\n : undefined,\n resolveDot(dotProp),\n style,\n );\n }, [variant, animation, width, height, dotProp, style]);\n\n return (\n <>\n {(animation === \"wave\" || animation === \"shimmer\") && (\n <style>{`\n @keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n }\n `}</style>\n )}\n <div ref={ref} style={computedStyle} {...props} />\n </>\n );\n },\n);\nSkeleton.displayName = \"Skeleton\";\n\n// Convenience components\nexport const SkeletonText = React.forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"text\" dot={dotProp} {...props} />\n));\nSkeletonText.displayName = \"SkeletonText\";\n\nexport const SkeletonCircle = React.forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"circular\" dot={dotProp} {...props} />\n));\nSkeletonCircle.displayName = \"SkeletonCircle\";\n\nexport const SkeletonRectangle = React.forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rectangular\" dot={dotProp} {...props} />\n));\nSkeletonRectangle.displayName = \"SkeletonRectangle\";\n\nexport const SkeletonRounded = React.forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(({ dot: dotProp, ...props }, ref) => (\n <Skeleton ref={ref} variant=\"rounded\" dot={dotProp} {...props} />\n));\nSkeletonRounded.displayName = \"SkeletonRounded\";\n\n// Composite skeleton components\nexport const SkeletonCard = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n s(\"p-6\"),\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-4\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <SkeletonCircle style={{ width: \"48px\", height: \"48px\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n flex: 1,\n }}\n >\n <SkeletonText style={{ height: \"16px\", width: \"75%\" }} />\n <SkeletonText style={{ height: \"12px\", width: \"50%\" }} />\n </div>\n </div>\n <SkeletonRounded style={{ width: \"100%\", height: \"128px\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <SkeletonText style={{ height: \"16px\", width: \"100%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"83.333%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"66.667%\" }} />\n </div>\n </div>\n );\n});\nSkeletonCard.displayName = \"SkeletonCard\";\n\nexport const SkeletonAvatar = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n { display: \"flex\", alignItems: \"center\", ...resolveDot(\"gap-4\") },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <SkeletonCircle style={{ width: \"48px\", height: \"48px\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n flex: 1,\n }}\n >\n <SkeletonText style={{ height: \"16px\", width: \"75%\" }} />\n <SkeletonText style={{ height: \"12px\", width: \"50%\" }} />\n </div>\n </div>\n );\n});\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\nexport const SkeletonImage = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-2\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <SkeletonRounded style={{ width: \"100%\", height: \"192px\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"50%\" }} />\n </div>\n );\n});\nSkeletonImage.displayName = \"SkeletonImage\";\n\nexport const SkeletonUserProfile = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-4\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <SkeletonCircle style={{ width: \"64px\", height: \"64px\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n flex: 1,\n }}\n >\n <SkeletonText style={{ height: \"20px\", width: \"50%\" }} />\n <SkeletonText style={{ height: \"12px\", width: \"33.333%\" }} />\n </div>\n </div>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n <SkeletonText style={{ height: \"16px\", width: \"100%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"83.333%\" }} />\n </div>\n </div>\n );\n});\nSkeletonUserProfile.displayName = \"SkeletonUserProfile\";\n\nexport const SkeletonList = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-4\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n {Array.from({ length: 3 }).map((_, index) => (\n <div\n key={index}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-4\"),\n }}\n >\n <SkeletonCircle style={{ width: \"40px\", height: \"40px\" }} />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n flex: 1,\n }}\n >\n <SkeletonText style={{ height: \"16px\", width: \"75%\" }} />\n <SkeletonText style={{ height: \"12px\", width: \"50%\" }} />\n </div>\n </div>\n ))}\n </div>\n );\n});\nSkeletonList.displayName = \"SkeletonList\";\n\nexport const SkeletonTable = React.forwardRef<\n HTMLDivElement,\n Omit<React.HTMLAttributes<HTMLDivElement>, \"className\"> & {\n dot?: string;\n style?: React.CSSProperties;\n }\n>(({ dot: dotProp, style: styleProp, ...props }, ref) => {\n const containerStyle = useMemo(\n () =>\n mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\" as const,\n ...resolveDot(\"gap-4\"),\n },\n resolveDot(dotProp),\n styleProp,\n ),\n [dotProp, styleProp],\n );\n\n return (\n <div ref={ref} style={containerStyle} {...props}>\n {/* Header */}\n <div style={{ display: \"flex\", ...resolveDot(\"gap-4\") }}>\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n </div>\n {/* Rows */}\n {Array.from({ length: 5 }).map((_, index) => (\n <div key={index} style={{ display: \"flex\", ...resolveDot(\"gap-4\") }}>\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n <SkeletonText style={{ height: \"16px\", width: \"25%\" }} />\n </div>\n ))}\n </div>\n );\n});\nSkeletonTable.displayName = \"SkeletonTable\";\n\nexport { Skeleton };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {d,e}from'./chunk-OBMOTQEU.mjs';import i,{useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var D={default:{backgroundColor:"rgba(31, 41, 55, 0.95)",color:"#ffffff",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.3), 0 2px 4px -1px rgba(0,0,0,0.2)"},dark:{backgroundColor:"rgba(17, 24, 39, 0.97)",color:"#ffffff",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.4), 0 2px 4px -1px rgba(0,0,0,0.3)"},light:{backgroundColor:"var(--color-popover, #ffffff)",color:"var(--color-popover-foreground, #0f172a)",border:"1px solid var(--color-border, rgba(226,232,240,1))",boxShadow:"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)"}},H={default:"rgba(31, 41, 55, 0.95)",dark:"rgba(17, 24, 39, 0.97)",light:"var(--color-popover, #ffffff)"};function N(r,s="default"){let l=H[s!=null?s:"default"],e="transparent",t=5,a={position:"absolute",width:0,height:0};switch(r){case "top":return {...a,top:"100%",left:"50%",transform:"translateX(-50%)",borderLeft:`${t}px solid ${e}`,borderRight:`${t}px solid ${e}`,borderTop:`${t}px solid ${l}`};case "bottom":return {...a,bottom:"100%",left:"50%",transform:"translateX(-50%)",borderLeft:`${t}px solid ${e}`,borderRight:`${t}px solid ${e}`,borderBottom:`${t}px solid ${l}`};case "left":return {...a,left:"100%",top:"50%",transform:"translateY(-50%)",borderTop:`${t}px solid ${e}`,borderBottom:`${t}px solid ${e}`,borderLeft:`${t}px solid ${l}`};case "right":return {...a,right:"100%",top:"50%",transform:"translateY(-50%)",borderTop:`${t}px solid ${e}`,borderBottom:`${t}px solid ${e}`,borderRight:`${t}px solid ${l}`};default:return {...a,top:"100%",left:"50%",transform:"translateX(-50%)",borderLeft:`${t}px solid ${e}`,borderRight:`${t}px solid ${e}`,borderTop:`${t}px solid ${l}`}}}function O(r){switch(r){case "top":return "translate(-50%, -100%)";case "bottom":return "translate(-50%, 0%)";case "left":return "translate(-100%, -50%)";case "right":return "translate(0%, -50%)";default:return "translate(-50%, -100%)"}}var x=i.forwardRef(({dot:r,style:s,content:l,children:e$1,position:t="top",variant:a="default",delay:T=300,disabled:$=false,...R},S)=>{let[v,m]=i.useState(false),[f,w]=i.useState({x:0,y:0}),p=i.useRef(void 0),y=i.useRef(null),L=M=>{if($)return;let o=M.currentTarget.getBoundingClientRect(),n=0,d=0;switch(t){case "top":n=o.left+o.width/2,d=o.top-8;break;case "bottom":n=o.left+o.width/2,d=o.bottom+8;break;case "left":n=o.left-8,d=o.top+o.height/2;break;case "right":n=o.right+8,d=o.top+o.height/2;break}w({x:n,y:d}),p.current=window.setTimeout(()=>{m(true);},T);},k=()=>{p.current&&clearTimeout(p.current),m(false);};i.useEffect(()=>()=>{p.current&&clearTimeout(p.current);},[]);let P=useMemo(()=>d({position:"relative",display:"inline-block"},e(r),s),[r,s]),C=useMemo(()=>d({position:"fixed",zIndex:50,...e("py-2 px-3 rounded-lg"),fontSize:"0.875rem",whiteSpace:"nowrap",pointerEvents:"none"},D[a],{left:`${f.x}px`,top:`${f.y}px`,transform:O(t)}),[a,f,t]),E=useMemo(()=>N(t,a),[t,a]);return jsxs("div",{ref:S,style:P,onMouseEnter:L,onMouseLeave:k,...R,children:[e$1,v&&jsxs("div",{ref:y,style:C,children:[l,jsx("div",{style:E})]})]})});x.displayName="Tooltip";var A=i.forwardRef((r,s)=>jsx(x,{ref:s,variant:"light",...r}));A.displayName="TooltipLight";var B=i.forwardRef((r,s)=>jsx(x,{ref:s,variant:"dark",...r}));B.displayName="TooltipDark";export{x as a,A as b,B as c};//# sourceMappingURL=chunk-DABVKUJN.mjs.map
3
+ //# sourceMappingURL=chunk-DABVKUJN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Tooltip.tsx"],"names":["VARIANT_STYLES","ARROW_COLOR","getArrowStyle","position","variant","color","transparent","size","base","getPopupTransform","Tooltip","React","dotProp","style","content","children","delay","disabled","props","ref","isVisible","setIsVisible","coords","setCoords","timeoutRef","tooltipRef","showTooltip","e","rect","x","y","hideTooltip","wrapperStyle","useMemo","mergeStyles","resolveDot","popupStyle","arrowStyle","jsxs","jsx","TooltipLight","TooltipDark"],"mappings":"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","file":"chunk-DABVKUJN.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\n\n// ---------------------------------------------------------------------------\n// Variant style maps\n// ---------------------------------------------------------------------------\n\nconst VARIANT_STYLES: Record<string, React.CSSProperties> = {\n default: {\n backgroundColor: \"rgba(31, 41, 55, 0.95)\", // gray-800\n color: \"#ffffff\",\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.3), 0 2px 4px -1px rgba(0,0,0,0.2)\",\n },\n dark: {\n backgroundColor: \"rgba(17, 24, 39, 0.97)\", // gray-900\n color: \"#ffffff\",\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.4), 0 2px 4px -1px rgba(0,0,0,0.3)\",\n },\n light: {\n backgroundColor: \"var(--color-popover, #ffffff)\",\n color: \"var(--color-popover-foreground, #0f172a)\",\n border: \"1px solid var(--color-border, rgba(226,232,240,1))\",\n boxShadow:\n \"0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)\",\n },\n};\n\n// Arrow color per variant+position (the \"colored\" side of the border trick)\nconst ARROW_COLOR: Record<string, string> = {\n default: \"rgba(31, 41, 55, 0.95)\",\n dark: \"rgba(17, 24, 39, 0.97)\",\n light: \"var(--color-popover, #ffffff)\",\n};\n\n// ---------------------------------------------------------------------------\n// Arrow CSSProperties by position\n// ---------------------------------------------------------------------------\n\nfunction getArrowStyle(\n position: TooltipProps[\"position\"],\n variant: TooltipProps[\"variant\"] = \"default\",\n): React.CSSProperties {\n const color = ARROW_COLOR[variant ?? \"default\"];\n const transparent = \"transparent\";\n const size = 5;\n\n const base: React.CSSProperties = {\n position: \"absolute\",\n width: 0,\n height: 0,\n };\n\n switch (position) {\n case \"top\":\n return {\n ...base,\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${size}px solid ${transparent}`,\n borderRight: `${size}px solid ${transparent}`,\n borderTop: `${size}px solid ${color}`,\n };\n case \"bottom\":\n return {\n ...base,\n bottom: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${size}px solid ${transparent}`,\n borderRight: `${size}px solid ${transparent}`,\n borderBottom: `${size}px solid ${color}`,\n };\n case \"left\":\n return {\n ...base,\n left: \"100%\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${size}px solid ${transparent}`,\n borderBottom: `${size}px solid ${transparent}`,\n borderLeft: `${size}px solid ${color}`,\n };\n case \"right\":\n return {\n ...base,\n right: \"100%\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${size}px solid ${transparent}`,\n borderBottom: `${size}px solid ${transparent}`,\n borderRight: `${size}px solid ${color}`,\n };\n default:\n return {\n ...base,\n top: \"100%\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${size}px solid ${transparent}`,\n borderRight: `${size}px solid ${transparent}`,\n borderTop: `${size}px solid ${color}`,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip popup transform per position\n// ---------------------------------------------------------------------------\n\nfunction getPopupTransform(position: TooltipProps[\"position\"]): string {\n switch (position) {\n case \"top\":\n return \"translate(-50%, -100%)\";\n case \"bottom\":\n return \"translate(-50%, 0%)\";\n case \"left\":\n return \"translate(-100%, -50%)\";\n case \"right\":\n return \"translate(0%, -50%)\";\n default:\n return \"translate(-50%, -100%)\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// TooltipProps\n// ---------------------------------------------------------------------------\n\n/**\n * Tooltip 컴포넌트의 props / Tooltip component props\n * @typedef {Object} TooltipProps\n * @property {string} content - Tooltip 내용 / Tooltip content\n * @property {React.ReactNode} children - Tooltip이 연결될 요소 / Element to attach tooltip to\n * @property {\"top\" | \"bottom\" | \"left\" | \"right\"} [position=\"top\"] - Tooltip 표시 위치 / Tooltip display position\n * @property {\"default\" | \"light\" | \"dark\"} [variant=\"default\"] - Tooltip 스타일 변형 / Tooltip style variant\n * @property {number} [delay=300] - Tooltip 표시 지연 시간(ms) / Tooltip display delay (ms)\n * @property {boolean} [disabled=false] - Tooltip 비활성화 여부 / Disable tooltip\n * @property {string} [dot] - dot utility string for wrapper element\n * @property {React.CSSProperties} [style] - inline style for wrapper element\n */\nexport interface TooltipProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n content: string;\n children: React.ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n variant?: \"default\" | \"light\" | \"dark\";\n delay?: number;\n disabled?: boolean;\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ---------------------------------------------------------------------------\n// Tooltip\n// ---------------------------------------------------------------------------\n\n/**\n * Tooltip 컴포넌트 / Tooltip component\n *\n * 호버 시 추가 정보를 표시하는 툴팁 컴포넌트입니다.\n * 마우스 호버 시 지연 시간 후 표시됩니다.\n *\n * Tooltip component that displays additional information on hover.\n * Appears after a delay when the mouse hovers over the element.\n *\n * @component\n * @example\n * // 기본 사용 / Basic usage\n * <Tooltip content=\"이것은 도움말입니다\">\n * <Button>호버하세요</Button>\n * </Tooltip>\n *\n * @example\n * // 다양한 위치 / Different positions\n * <Tooltip content=\"위치 변경\" position=\"bottom\">\n * <Icon name=\"info\" />\n * </Tooltip>\n *\n * @example\n * // 커스텀 스타일 / Custom styles\n * <Tooltip content=\"라이트 스타일\" variant=\"light\" delay={500}>\n * <span>호버</span>\n * </Tooltip>\n *\n * @param {TooltipProps} props - Tooltip 컴포넌트의 props / Tooltip component props\n * @param {React.Ref<HTMLDivElement>} ref - div 요소 ref / div element ref\n * @returns {JSX.Element} Tooltip 컴포넌트 / Tooltip component\n *\n * @todo 접근성 개선: role=\"tooltip\" 추가 필요 / Accessibility: Add role=\"tooltip\"\n * @todo 접근성 개선: aria-describedby 연결 필요 / Accessibility: Connect aria-describedby\n * @todo 접근성 개선: 키보드 포커스 시 Tooltip 표시 필요 / Accessibility: Show tooltip on keyboard focus\n */\nconst Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n dot: dotProp,\n style,\n content,\n children,\n position = \"top\",\n variant = \"default\",\n delay = 300,\n disabled = false,\n ...props\n },\n ref,\n ) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const [coords, setCoords] = React.useState({ x: 0, y: 0 });\n const timeoutRef = React.useRef<number | undefined>(undefined);\n const tooltipRef = React.useRef<HTMLDivElement>(null);\n\n const showTooltip = (e: React.MouseEvent) => {\n if (disabled) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n\n let x = 0;\n let y = 0;\n\n switch (position) {\n case \"top\":\n x = rect.left + rect.width / 2;\n y = rect.top - 8;\n break;\n case \"bottom\":\n x = rect.left + rect.width / 2;\n y = rect.bottom + 8;\n break;\n case \"left\":\n x = rect.left - 8;\n y = rect.top + rect.height / 2;\n break;\n case \"right\":\n x = rect.right + 8;\n y = rect.top + rect.height / 2;\n break;\n }\n\n setCoords({ x, y });\n\n timeoutRef.current = window.setTimeout(() => {\n setIsVisible(true);\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const wrapperStyle = useMemo(\n (): React.CSSProperties =>\n mergeStyles(\n { position: \"relative\", display: \"inline-block\" },\n resolveDot(dotProp),\n style,\n ),\n [dotProp, style],\n );\n\n const popupStyle = useMemo(\n (): React.CSSProperties =>\n mergeStyles(\n {\n position: \"fixed\",\n zIndex: 50,\n ...resolveDot(\"py-2 px-3 rounded-lg\"),\n fontSize: \"0.875rem\",\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n },\n VARIANT_STYLES[variant],\n {\n left: `${coords.x}px`,\n top: `${coords.y}px`,\n transform: getPopupTransform(position),\n },\n ),\n [variant, coords, position],\n );\n\n const arrowStyle = useMemo(\n () => getArrowStyle(position, variant),\n [position, variant],\n );\n\n return (\n <div\n ref={ref}\n style={wrapperStyle}\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n {...props}\n >\n {children}\n\n {isVisible && (\n <div ref={tooltipRef} style={popupStyle}>\n {content}\n {/* Arrow */}\n <div style={arrowStyle} />\n </div>\n )}\n </div>\n );\n },\n);\nTooltip.displayName = \"Tooltip\";\n\n// ---------------------------------------------------------------------------\n// Convenience components\n// ---------------------------------------------------------------------------\n\nexport const TooltipLight = React.forwardRef<\n HTMLDivElement,\n Omit<TooltipProps, \"variant\">\n>((props, ref) => <Tooltip ref={ref} variant=\"light\" {...props} />);\nTooltipLight.displayName = \"TooltipLight\";\n\nexport const TooltipDark = React.forwardRef<\n HTMLDivElement,\n Omit<TooltipProps, \"variant\">\n>((props, ref) => <Tooltip ref={ref} variant=\"dark\" {...props} />);\nTooltipDark.displayName = \"TooltipDark\";\n\nexport { Tooltip };\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ var d=(a=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(a,{get:(b,c)=>(typeof require!="undefined"?require:b)[c]}):a)(function(a){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});export{d as a};//# sourceMappingURL=chunk-EAZEI74V.mjs.map
3
+ //# sourceMappingURL=chunk-EAZEI74V.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-EAZEI74V.mjs"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {e,d}from'./chunk-OBMOTQEU.mjs';import R,{useState,useMemo,useCallback,useEffect}from'react';import {jsx}from'react/jsx-runtime';var _={position:"fixed",top:"50%",transform:"translateY(-50%)",zIndex:40,display:"flex",flexDirection:"column",...e("gap-3")},w={left:{...e("left-4")},right:{...e("right-4")}},E={position:"relative",...e("w-3 h-3"),borderRadius:"9999px",border:"none",cursor:"pointer",padding:0,transition:"transform 300ms ease, background-color 300ms ease, opacity 300ms ease"},A={backgroundColor:"var(--color-primary, #06b6d4)",transform:"scale(1.25)"},k={backgroundColor:"var(--color-muted-foreground, #94a3b8)",opacity:.3},B={transform:"scale(1.1)",opacity:.6},O={position:"absolute",top:"50%",transform:"translateY(-50%)",whiteSpace:"nowrap",...e("px-2 py-1"),fontSize:"12px",...e("rounded"),backgroundColor:"var(--color-popover, #ffffff)",color:"var(--color-popover-foreground, #0f172a)",boxShadow:"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)",pointerEvents:"none",transition:"opacity 200ms ease"},P=R.memo(({item:e$1,isActive:o,position:l,activeDotStyle:p,inactiveDotStyle:i,onClick:S})=>{let[n,d$1]=useState(false),u=useMemo(()=>o?d(E,A,p):d(E,k,n?B:void 0,i),[o,n,p,i]),v=useMemo(()=>{let a=l==="right"?{right:"100%",...e("mr-2")}:{left:"100%",...e("ml-2")};return d(O,a,{opacity:n?1:0})},[l,n]);return jsx("button",{style:u,onClick:()=>S(e$1.id),onMouseEnter:()=>d$1(true),onMouseLeave:()=>d$1(false),"aria-label":e$1.label||e$1.id,"aria-current":o?"true":void 0,children:e$1.label&&jsx("span",{style:v,children:e$1.label})})});P.displayName="DotButton";var Y=R.forwardRef(({items:e$1,position:o="right",activeDotStyle:l,inactiveDotStyle:p,dot:i,style:S,...n},d$1)=>{let[u,v]=useState(0),a=useCallback(()=>{let s=window.innerHeight,r=0,g=1/0;e$1.forEach((I,T)=>{let C=document.getElementById(I.id);if(!C)return;let N=C.getBoundingClientRect(),b=Math.abs(N.top-s*.3);b<g&&(g=b,r=T);}),v(r);},[e$1]);useEffect(()=>(a(),window.addEventListener("scroll",a,{passive:true}),()=>window.removeEventListener("scroll",a)),[a]);let x=useCallback(s=>{let r=document.getElementById(s);r&&r.scrollIntoView({behavior:"smooth",block:"start"});},[]),h=useMemo(()=>d(_,w[o],e(i),S),[o,i,S]);return jsx("nav",{ref:d$1,style:h,"aria-label":"Section navigation",...n,children:e$1.map((s,r)=>jsx(P,{item:s,isActive:r===u,position:o,activeDotStyle:l,inactiveDotStyle:p,onClick:x},s.id))})});Y.displayName="DotNav";export{Y as a};//# sourceMappingURL=chunk-EK6BLFVQ.mjs.map
3
+ //# sourceMappingURL=chunk-EK6BLFVQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/advanced/DotNav.tsx"],"names":["NAV_BASE_STYLE","resolveDot","NAV_POSITION","DOT_BASE_STYLE","DOT_ACTIVE_STYLE","DOT_INACTIVE_STYLE","DOT_INACTIVE_HOVER_STYLE","LABEL_BASE_STYLE","DotButton","React","item","isActive","position","activeDotStyle","inactiveDotStyle","onClick","isHovered","setIsHovered","useState","dotStyle","useMemo","mergeStyles","labelStyle","positionOffset","jsx","DotNav","items","dotProp","style","props","ref","activeIndex","setActiveIndex","updateActive","useCallback","vh","closest","closestDist","i","el","rect","dist","useEffect","handleClick","id","navStyle"],"mappings":"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","file":"chunk-EK6BLFVQ.mjs","sourcesContent":["\"use client\";\n\nimport React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../hooks/useDotMap\";\n\nexport interface DotNavItem {\n /** 섹션 ID (scroll target) */\n id: string;\n /** 라벨 (호버 시 표시) */\n label?: string;\n}\n\nexport interface DotNavProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n \"className\"\n> {\n /** 섹션 목록 */\n items: DotNavItem[];\n /** 위치 @default 'right' */\n position?: \"left\" | \"right\";\n /** 활성 도트 스타일 오버라이드 */\n activeDotStyle?: React.CSSProperties;\n /** 비활성 도트 스타일 오버라이드 */\n inactiveDotStyle?: React.CSSProperties;\n /** dot 유틸리티 스트링 (컨테이너) */\n dot?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Static style constants ───────────────────────────────────────────────────\n\nconst NAV_BASE_STYLE: React.CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n zIndex: 40,\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-3\"),\n};\n\nconst NAV_POSITION: Record<\"left\" | \"right\", React.CSSProperties> = {\n left: { ...resolveDot(\"left-4\") },\n right: { ...resolveDot(\"right-4\") },\n};\n\nconst DOT_BASE_STYLE: React.CSSProperties = {\n position: \"relative\",\n ...resolveDot(\"w-3 h-3\"),\n borderRadius: \"9999px\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 0,\n transition:\n \"transform 300ms ease, background-color 300ms ease, opacity 300ms ease\",\n};\n\nconst DOT_ACTIVE_STYLE: React.CSSProperties = {\n backgroundColor: \"var(--color-primary, #06b6d4)\",\n transform: \"scale(1.25)\",\n};\n\nconst DOT_INACTIVE_STYLE: React.CSSProperties = {\n backgroundColor: \"var(--color-muted-foreground, #94a3b8)\",\n opacity: 0.3,\n};\n\nconst DOT_INACTIVE_HOVER_STYLE: React.CSSProperties = {\n transform: \"scale(1.1)\",\n opacity: 0.6,\n};\n\nconst LABEL_BASE_STYLE: React.CSSProperties = {\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n whiteSpace: \"nowrap\",\n ...resolveDot(\"px-2 py-1\"),\n fontSize: \"12px\",\n ...resolveDot(\"rounded\"),\n backgroundColor: \"var(--color-popover, #ffffff)\",\n color: \"var(--color-popover-foreground, #0f172a)\",\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n pointerEvents: \"none\",\n transition: \"opacity 200ms ease\",\n};\n\n// ─── DotButton ────────────────────────────────────────────────────────────────\n\ninterface DotButtonProps {\n item: DotNavItem;\n isActive: boolean;\n position: \"left\" | \"right\";\n activeDotStyle?: React.CSSProperties;\n inactiveDotStyle?: React.CSSProperties;\n onClick: (id: string) => void;\n}\n\nconst DotButton = React.memo<DotButtonProps>(\n ({ item, isActive, position, activeDotStyle, inactiveDotStyle, onClick }) => {\n const [isHovered, setIsHovered] = useState(false);\n\n const dotStyle = useMemo<React.CSSProperties>(() => {\n if (isActive) {\n return mergeStyles(DOT_BASE_STYLE, DOT_ACTIVE_STYLE, activeDotStyle);\n }\n return mergeStyles(\n DOT_BASE_STYLE,\n DOT_INACTIVE_STYLE,\n isHovered ? DOT_INACTIVE_HOVER_STYLE : undefined,\n inactiveDotStyle,\n );\n }, [isActive, isHovered, activeDotStyle, inactiveDotStyle]);\n\n const labelStyle = useMemo<React.CSSProperties>(() => {\n const positionOffset: React.CSSProperties =\n position === \"right\"\n ? { right: \"100%\", ...resolveDot(\"mr-2\") }\n : { left: \"100%\", ...resolveDot(\"ml-2\") };\n return mergeStyles(LABEL_BASE_STYLE, positionOffset, {\n opacity: isHovered ? 1 : 0,\n });\n }, [position, isHovered]);\n\n return (\n <button\n style={dotStyle}\n onClick={() => onClick(item.id)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-label={item.label || item.id}\n aria-current={isActive ? \"true\" : undefined}\n >\n {item.label && <span style={labelStyle}>{item.label}</span>}\n </button>\n );\n },\n);\nDotButton.displayName = \"DotButton\";\n\n// ─── DotNav ───────────────────────────────────────────────────────────────────\n\n/**\n * DotNav - 섹션 도트 네비게이터\n *\n * 포트폴리오/immersive 테마용 고정 위치 네비게이션.\n * 스크롤 위치에 따라 활성 섹션 자동 추적.\n *\n * @example\n * <DotNav items={[{ id: 'hero', label: 'Hero' }, { id: 'about', label: 'About' }]} />\n * <DotNav items={sections} position=\"left\" />\n */\nconst DotNav = React.forwardRef<HTMLElement, DotNavProps>(\n (\n {\n items,\n position = \"right\",\n activeDotStyle,\n inactiveDotStyle,\n dot: dotProp,\n style,\n ...props\n },\n ref,\n ) => {\n const [activeIndex, setActiveIndex] = useState(0);\n\n const updateActive = useCallback(() => {\n const vh = window.innerHeight;\n let closest = 0;\n let closestDist = Infinity;\n\n items.forEach((item, i) => {\n const el = document.getElementById(item.id);\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const dist = Math.abs(rect.top - vh * 0.3);\n if (dist < closestDist) {\n closestDist = dist;\n closest = i;\n }\n });\n\n setActiveIndex(closest);\n }, [items]);\n\n useEffect(() => {\n updateActive();\n window.addEventListener(\"scroll\", updateActive, { passive: true });\n return () => window.removeEventListener(\"scroll\", updateActive);\n }, [updateActive]);\n\n const handleClick = useCallback((id: string) => {\n const el = document.getElementById(id);\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }, []);\n\n const navStyle = useMemo<React.CSSProperties>(\n () =>\n mergeStyles(\n NAV_BASE_STYLE,\n NAV_POSITION[position],\n resolveDot(dotProp),\n style,\n ),\n [position, dotProp, style],\n );\n\n return (\n <nav\n ref={ref}\n style={navStyle}\n aria-label=\"Section navigation\"\n {...props}\n >\n {items.map((item, i) => (\n <DotButton\n key={item.id}\n item={item}\n isActive={i === activeIndex}\n position={position}\n activeDotStyle={activeDotStyle}\n inactiveDotStyle={inactiveDotStyle}\n onClick={handleClick}\n />\n ))}\n </nav>\n );\n },\n);\n\nDotNav.displayName = \"DotNav\";\n\nexport { DotNav };\n"]}