@hua-labs/ui 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -43
  3. package/dist/{ComponentLayout-DrZpz0yv.d.mts → ComponentLayout-Clf6C2jV.d.mts} +38 -4
  4. package/dist/DashboardSidebar-ZulecqKs.d.mts +54 -0
  5. package/dist/DashboardToolbar-BRZayZNz.d.mts +122 -0
  6. package/dist/EmptyState-SQ3Z6Vf2.d.mts +64 -0
  7. package/dist/{Modal-CrXmb3Ll.d.mts → Modal-DKKtBtbh.d.mts} +12 -6
  8. package/dist/{Section-BWzyshgX.d.mts → Section-DKdIG1sg.d.mts} +11 -12
  9. package/dist/SectionHeader-DHwQ_xh8.d.mts +1653 -0
  10. package/dist/{Switch-Dzm5TLR3.d.mts → Switch-D0l7SJrz.d.mts} +31 -15
  11. package/dist/Tooltip-Cv7nYhPW.d.mts +304 -0
  12. package/dist/advanced/Logo.d.ts +8 -4
  13. package/dist/advanced/Logo.d.ts.map +1 -1
  14. package/dist/advanced/dashboard.d.ts +28 -6
  15. package/dist/advanced/dashboard.d.ts.map +1 -1
  16. package/dist/advanced-dashboard.d.mts +9 -2278
  17. package/dist/advanced-dashboard.mjs +1 -33
  18. package/dist/advanced-dashboard.mjs.map +1 -1
  19. package/dist/advanced-emotion.d.mts +13 -5
  20. package/dist/advanced-emotion.mjs +1 -1
  21. package/dist/advanced-motion.d.mts +144 -61
  22. package/dist/advanced-motion.mjs +1 -1
  23. package/dist/advanced.d.mts +70 -37
  24. package/dist/advanced.mjs +14 -3
  25. package/dist/advanced.mjs.map +1 -1
  26. package/dist/chunk-32OZGTPV.mjs +41 -0
  27. package/dist/chunk-32OZGTPV.mjs.map +1 -0
  28. package/dist/chunk-6WBFZ2KV.mjs +3 -0
  29. package/dist/chunk-6WBFZ2KV.mjs.map +1 -0
  30. package/dist/chunk-7CGJQSJO.mjs +3 -0
  31. package/dist/chunk-7CGJQSJO.mjs.map +1 -0
  32. package/dist/chunk-7T3IUG3G.mjs +3 -0
  33. package/dist/chunk-7T3IUG3G.mjs.map +1 -0
  34. package/dist/chunk-A5YOVVM5.mjs +3 -0
  35. package/dist/chunk-A5YOVVM5.mjs.map +1 -0
  36. package/dist/chunk-AJOGTUWS.mjs +3 -0
  37. package/dist/chunk-AJOGTUWS.mjs.map +1 -0
  38. package/dist/chunk-AQTSQYH2.mjs +3 -0
  39. package/dist/chunk-AQTSQYH2.mjs.map +1 -0
  40. package/dist/chunk-B2MRZJQA.mjs +3 -0
  41. package/dist/chunk-B2MRZJQA.mjs.map +1 -0
  42. package/dist/chunk-BOX4TONF.mjs +3 -0
  43. package/dist/chunk-BOX4TONF.mjs.map +1 -0
  44. package/dist/chunk-C2DOXNBK.mjs +3 -0
  45. package/dist/chunk-C2DOXNBK.mjs.map +1 -0
  46. package/dist/chunk-CQBMR7VU.mjs +3 -0
  47. package/dist/chunk-CQBMR7VU.mjs.map +1 -0
  48. package/dist/chunk-CYAAAEPJ.mjs +3 -0
  49. package/dist/chunk-CYAAAEPJ.mjs.map +1 -0
  50. package/dist/chunk-D7MTTTQY.mjs +8 -0
  51. package/dist/chunk-D7MTTTQY.mjs.map +1 -0
  52. package/dist/chunk-DABVKUJN.mjs +3 -0
  53. package/dist/chunk-DABVKUJN.mjs.map +1 -0
  54. package/dist/chunk-EAZEI74V.mjs +3 -0
  55. package/dist/chunk-EAZEI74V.mjs.map +1 -0
  56. package/dist/chunk-EK6BLFVQ.mjs +3 -0
  57. package/dist/chunk-EK6BLFVQ.mjs.map +1 -0
  58. package/dist/chunk-FVUAVGP5.mjs +3 -0
  59. package/dist/chunk-FVUAVGP5.mjs.map +1 -0
  60. package/dist/chunk-GAIUZVNC.mjs +3 -0
  61. package/dist/chunk-GAIUZVNC.mjs.map +1 -0
  62. package/dist/chunk-HLBIIF4I.mjs +3 -0
  63. package/dist/chunk-HLBIIF4I.mjs.map +1 -0
  64. package/dist/chunk-I6NCGF6E.mjs +3 -0
  65. package/dist/chunk-I6NCGF6E.mjs.map +1 -0
  66. package/dist/chunk-J46VEBVF.mjs +3 -0
  67. package/dist/chunk-J46VEBVF.mjs.map +1 -0
  68. package/dist/chunk-JNW3CLCA.mjs +3 -0
  69. package/dist/chunk-JNW3CLCA.mjs.map +1 -0
  70. package/dist/chunk-JY3QVUGW.mjs +3 -0
  71. package/dist/chunk-JY3QVUGW.mjs.map +1 -0
  72. package/dist/chunk-KHBZOGUU.mjs +3 -0
  73. package/dist/chunk-KHBZOGUU.mjs.map +1 -0
  74. package/dist/chunk-KPNNAQLI.mjs +3 -0
  75. package/dist/chunk-KPNNAQLI.mjs.map +1 -0
  76. package/dist/chunk-L2LGSILS.mjs +13 -0
  77. package/dist/chunk-L2LGSILS.mjs.map +1 -0
  78. package/dist/chunk-LPHUWTQ2.mjs +3 -0
  79. package/dist/chunk-LPHUWTQ2.mjs.map +1 -0
  80. package/dist/chunk-M4JE7TQL.mjs +3 -0
  81. package/dist/chunk-M4JE7TQL.mjs.map +1 -0
  82. package/dist/chunk-MEDKGNLV.mjs +3 -0
  83. package/dist/chunk-MEDKGNLV.mjs.map +1 -0
  84. package/dist/chunk-MR46CSMC.mjs +3 -0
  85. package/dist/chunk-MR46CSMC.mjs.map +1 -0
  86. package/dist/chunk-NSDWT2JM.mjs +3 -0
  87. package/dist/chunk-NSDWT2JM.mjs.map +1 -0
  88. package/dist/chunk-OBMOTQEU.mjs +3 -0
  89. package/dist/chunk-OBMOTQEU.mjs.map +1 -0
  90. package/dist/chunk-QEMPERUK.mjs +3 -0
  91. package/dist/chunk-QEMPERUK.mjs.map +1 -0
  92. package/dist/chunk-RICRFXFP.mjs +3 -0
  93. package/dist/chunk-RICRFXFP.mjs.map +1 -0
  94. package/dist/chunk-SOK7VBSM.mjs +13 -0
  95. package/dist/chunk-SOK7VBSM.mjs.map +1 -0
  96. package/dist/chunk-SPZ7SZH4.mjs +3 -0
  97. package/dist/chunk-SPZ7SZH4.mjs.map +1 -0
  98. package/dist/chunk-TB3DARQO.mjs +3 -0
  99. package/dist/chunk-TB3DARQO.mjs.map +1 -0
  100. package/dist/chunk-TND4HPKW.mjs +51 -0
  101. package/dist/chunk-TND4HPKW.mjs.map +1 -0
  102. package/dist/chunk-TSAXVD2H.mjs +35 -0
  103. package/dist/chunk-TSAXVD2H.mjs.map +1 -0
  104. package/dist/chunk-UR3TIWBS.mjs +3 -0
  105. package/dist/chunk-UR3TIWBS.mjs.map +1 -0
  106. package/dist/chunk-XU2XBAEW.mjs +3 -0
  107. package/dist/chunk-XU2XBAEW.mjs.map +1 -0
  108. package/dist/chunk-XXHDNZTG.mjs +3 -0
  109. package/dist/chunk-XXHDNZTG.mjs.map +1 -0
  110. package/dist/chunk-YW5DA7Q6.mjs +3 -0
  111. package/dist/chunk-YW5DA7Q6.mjs.map +1 -0
  112. package/dist/chunk-ZTHUGQZL.mjs +3 -0
  113. package/dist/chunk-ZTHUGQZL.mjs.map +1 -0
  114. package/dist/chunk-ZVCGC6EV.mjs +3 -0
  115. package/dist/chunk-ZVCGC6EV.mjs.map +1 -0
  116. package/dist/chunk-ZZ67E3M5.mjs +3 -0
  117. package/dist/chunk-ZZ67E3M5.mjs.map +1 -0
  118. package/dist/{common-YLvZxA_K.d.mts → common-Bej8Okcg.d.mts} +1 -1
  119. package/dist/components/Accordion.d.ts +14 -7
  120. package/dist/components/Accordion.d.ts.map +1 -1
  121. package/dist/components/Action.d.ts.map +1 -1
  122. package/dist/components/ActionToolbar.d.ts +10 -6
  123. package/dist/components/ActionToolbar.d.ts.map +1 -1
  124. package/dist/components/Alert.d.ts +16 -2
  125. package/dist/components/Alert.d.ts.map +1 -1
  126. package/dist/components/Autocomplete.d.ts +6 -4
  127. package/dist/components/Autocomplete.d.ts.map +1 -1
  128. package/dist/components/Avatar.d.ts +20 -7
  129. package/dist/components/Avatar.d.ts.map +1 -1
  130. package/dist/components/Badge.d.ts +27 -9
  131. package/dist/components/Badge.d.ts.map +1 -1
  132. package/dist/components/Bookmark.d.ts +4 -2
  133. package/dist/components/Bookmark.d.ts.map +1 -1
  134. package/dist/components/BottomSheet.d.ts +13 -9
  135. package/dist/components/BottomSheet.d.ts.map +1 -1
  136. package/dist/components/Box.d.ts +9 -0
  137. package/dist/components/Box.d.ts.map +1 -0
  138. package/dist/components/Breadcrumb.d.ts +9 -4
  139. package/dist/components/Breadcrumb.d.ts.map +1 -1
  140. package/dist/components/Button.d.ts +3 -29
  141. package/dist/components/Button.d.ts.map +1 -1
  142. package/dist/components/Button.variants.d.ts +54 -10
  143. package/dist/components/Button.variants.d.ts.map +1 -1
  144. package/dist/components/Card.d.ts +49 -14
  145. package/dist/components/Card.d.ts.map +1 -1
  146. package/dist/components/ChatMessage.d.ts +3 -2
  147. package/dist/components/ChatMessage.d.ts.map +1 -1
  148. package/dist/components/Checkbox.d.ts +5 -2
  149. package/dist/components/Checkbox.d.ts.map +1 -1
  150. package/dist/components/CodeBlock.d.ts +8 -5
  151. package/dist/components/CodeBlock.d.ts.map +1 -1
  152. package/dist/components/ColorPicker.d.ts +4 -2
  153. package/dist/components/ColorPicker.d.ts.map +1 -1
  154. package/dist/components/Command.d.ts +28 -14
  155. package/dist/components/Command.d.ts.map +1 -1
  156. package/dist/components/ComponentLayout.d.ts +5 -2
  157. package/dist/components/ComponentLayout.d.ts.map +1 -1
  158. package/dist/components/ConfirmModal.d.ts +4 -0
  159. package/dist/components/ConfirmModal.d.ts.map +1 -1
  160. package/dist/components/Container.d.ts +18 -5
  161. package/dist/components/Container.d.ts.map +1 -1
  162. package/dist/components/ContextMenu.d.ts +36 -36
  163. package/dist/components/ContextMenu.d.ts.map +1 -1
  164. package/dist/components/DatePicker.d.ts +12 -5
  165. package/dist/components/DatePicker.d.ts.map +1 -1
  166. package/dist/components/Divider.d.ts +2 -1
  167. package/dist/components/Divider.d.ts.map +1 -1
  168. package/dist/components/Drawer.d.ts +17 -12
  169. package/dist/components/Drawer.d.ts.map +1 -1
  170. package/dist/components/Dropdown.d.ts +25 -57
  171. package/dist/components/Dropdown.d.ts.map +1 -1
  172. package/dist/components/EmotionAnalysis.d.ts +3 -1
  173. package/dist/components/EmotionAnalysis.d.ts.map +1 -1
  174. package/dist/components/EmotionButton.d.ts +3 -1
  175. package/dist/components/EmotionButton.d.ts.map +1 -1
  176. package/dist/components/EmotionMeter.d.ts +3 -1
  177. package/dist/components/EmotionMeter.d.ts.map +1 -1
  178. package/dist/components/EmotionSelector.d.ts +3 -1
  179. package/dist/components/EmotionSelector.d.ts.map +1 -1
  180. package/dist/components/FeatureCard.d.ts +9 -3
  181. package/dist/components/FeatureCard.d.ts.map +1 -1
  182. package/dist/components/Form.d.ts +20 -54
  183. package/dist/components/Form.d.ts.map +1 -1
  184. package/dist/components/FormControl.d.ts +3 -2
  185. package/dist/components/FormControl.d.ts.map +1 -1
  186. package/dist/components/Grid.d.ts +11 -4
  187. package/dist/components/Grid.d.ts.map +1 -1
  188. package/dist/components/HeroSection.d.ts +4 -2
  189. package/dist/components/HeroSection.d.ts.map +1 -1
  190. package/dist/components/Icon/Icon.d.ts +12 -8
  191. package/dist/components/Icon/Icon.d.ts.map +1 -1
  192. package/dist/components/IconsaxGallery/index.d.ts +8 -5
  193. package/dist/components/IconsaxGallery/index.d.ts.map +1 -1
  194. package/dist/components/InfoCard.d.ts +5 -2
  195. package/dist/components/InfoCard.d.ts.map +1 -1
  196. package/dist/components/Input.d.ts +29 -4
  197. package/dist/components/Input.d.ts.map +1 -1
  198. package/dist/components/Label.d.ts +15 -10
  199. package/dist/components/Label.d.ts.map +1 -1
  200. package/dist/components/LanguageToggle.d.ts +5 -3
  201. package/dist/components/LanguageToggle.d.ts.map +1 -1
  202. package/dist/components/Link.d.ts +17 -6
  203. package/dist/components/Link.d.ts.map +1 -1
  204. package/dist/components/LoadingSpinner.d.ts +7 -3
  205. package/dist/components/LoadingSpinner.d.ts.map +1 -1
  206. package/dist/components/Menu.d.ts +59 -60
  207. package/dist/components/Menu.d.ts.map +1 -1
  208. package/dist/components/Modal.d.ts +12 -6
  209. package/dist/components/Modal.d.ts.map +1 -1
  210. package/dist/components/Navigation.d.ts +26 -11
  211. package/dist/components/Navigation.d.ts.map +1 -1
  212. package/dist/components/NumberInput.d.ts +5 -2
  213. package/dist/components/NumberInput.d.ts.map +1 -1
  214. package/dist/components/PageNavigation.d.ts +6 -3
  215. package/dist/components/PageNavigation.d.ts.map +1 -1
  216. package/dist/components/PageTransition.d.ts +2 -2
  217. package/dist/components/PageTransition.d.ts.map +1 -1
  218. package/dist/components/Pagination.d.ts +5 -2
  219. package/dist/components/Pagination.d.ts.map +1 -1
  220. package/dist/components/Panel.d.ts +1 -7
  221. package/dist/components/Panel.d.ts.map +1 -1
  222. package/dist/components/Popover.d.ts +25 -9
  223. package/dist/components/Popover.d.ts.map +1 -1
  224. package/dist/components/Pressable.d.ts +14 -0
  225. package/dist/components/Pressable.d.ts.map +1 -0
  226. package/dist/components/Progress.d.ts +36 -13
  227. package/dist/components/Progress.d.ts.map +1 -1
  228. package/dist/components/Prose.d.ts +51 -0
  229. package/dist/components/Prose.d.ts.map +1 -0
  230. package/dist/components/Radio.d.ts +29 -33
  231. package/dist/components/Radio.d.ts.map +1 -1
  232. package/dist/components/ScrollArea.d.ts +8 -9
  233. package/dist/components/ScrollArea.d.ts.map +1 -1
  234. package/dist/components/ScrollIndicator.d.ts +9 -8
  235. package/dist/components/ScrollIndicator.d.ts.map +1 -1
  236. package/dist/components/ScrollProgress.d.ts +3 -2
  237. package/dist/components/ScrollProgress.d.ts.map +1 -1
  238. package/dist/components/ScrollToTop.d.ts +5 -5
  239. package/dist/components/ScrollToTop.d.ts.map +1 -1
  240. package/dist/components/Section.d.ts +12 -9
  241. package/dist/components/Section.d.ts.map +1 -1
  242. package/dist/components/SectionHeader.d.ts +3 -2
  243. package/dist/components/SectionHeader.d.ts.map +1 -1
  244. package/dist/components/Select.d.ts +18 -5
  245. package/dist/components/Select.d.ts.map +1 -1
  246. package/dist/components/Skeleton.d.ts +43 -15
  247. package/dist/components/Skeleton.d.ts.map +1 -1
  248. package/dist/components/Slider.d.ts +7 -5
  249. package/dist/components/Slider.d.ts.map +1 -1
  250. package/dist/components/Stack.d.ts +22 -6
  251. package/dist/components/Stack.d.ts.map +1 -1
  252. package/dist/components/StatsPanel.d.ts +4 -2
  253. package/dist/components/StatsPanel.d.ts.map +1 -1
  254. package/dist/components/Switch.d.ts +9 -4
  255. package/dist/components/Switch.d.ts.map +1 -1
  256. package/dist/components/Table.d.ts +43 -18
  257. package/dist/components/Table.d.ts.map +1 -1
  258. package/dist/components/Tabs.d.ts +50 -77
  259. package/dist/components/Tabs.d.ts.map +1 -1
  260. package/dist/components/Text.d.ts +11 -0
  261. package/dist/components/Text.d.ts.map +1 -0
  262. package/dist/components/Textarea.d.ts +24 -6
  263. package/dist/components/Textarea.d.ts.map +1 -1
  264. package/dist/components/ThemeToggle.d.ts +18 -27
  265. package/dist/components/ThemeToggle.d.ts.map +1 -1
  266. package/dist/components/Timeline.d.ts +4 -2
  267. package/dist/components/Timeline.d.ts.map +1 -1
  268. package/dist/components/Toast.d.ts +1 -1
  269. package/dist/components/Toast.d.ts.map +1 -1
  270. package/dist/components/Toggle.d.ts +11 -2
  271. package/dist/components/Toggle.d.ts.map +1 -1
  272. package/dist/components/Tooltip.d.ts +5 -2
  273. package/dist/components/Tooltip.d.ts.map +1 -1
  274. package/dist/components/Upload.d.ts +5 -3
  275. package/dist/components/Upload.d.ts.map +1 -1
  276. package/dist/components/advanced/AdvancedPageTransition.d.ts +7 -5
  277. package/dist/components/advanced/AdvancedPageTransition.d.ts.map +1 -1
  278. package/dist/components/advanced/AnimatedGradient.d.ts +6 -2
  279. package/dist/components/advanced/AnimatedGradient.d.ts.map +1 -1
  280. package/dist/components/advanced/Carousel.d.ts +3 -1
  281. package/dist/components/advanced/Carousel.d.ts.map +1 -1
  282. package/dist/components/advanced/DotNav.d.ts +12 -5
  283. package/dist/components/advanced/DotNav.d.ts.map +1 -1
  284. package/dist/components/advanced/GlowCard.d.ts +4 -1
  285. package/dist/components/advanced/GlowCard.d.ts.map +1 -1
  286. package/dist/components/advanced/HorizontalScroll.d.ts +4 -1
  287. package/dist/components/advanced/HorizontalScroll.d.ts.map +1 -1
  288. package/dist/components/advanced/ImageReveal.d.ts +23 -1
  289. package/dist/components/advanced/ImageReveal.d.ts.map +1 -1
  290. package/dist/components/advanced/Marquee.d.ts +4 -2
  291. package/dist/components/advanced/Marquee.d.ts.map +1 -1
  292. package/dist/components/advanced/Parallax.d.ts +12 -7
  293. package/dist/components/advanced/Parallax.d.ts.map +1 -1
  294. package/dist/components/advanced/SpotlightCard.d.ts +13 -12
  295. package/dist/components/advanced/SpotlightCard.d.ts.map +1 -1
  296. package/dist/components/advanced/TextReveal.d.ts +5 -1
  297. package/dist/components/advanced/TextReveal.d.ts.map +1 -1
  298. package/dist/components/advanced/TiltCard.d.ts +6 -2
  299. package/dist/components/advanced/TiltCard.d.ts.map +1 -1
  300. package/dist/components/advanced/VideoBackground.d.ts +4 -1
  301. package/dist/components/advanced/VideoBackground.d.ts.map +1 -1
  302. package/dist/components/advanced/blog-editor/BlogEditor.d.ts +4 -2
  303. package/dist/components/advanced/blog-editor/BlogEditor.d.ts.map +1 -1
  304. package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts +4 -2
  305. package/dist/components/advanced/blog-editor/BlogEditorActions.d.ts.map +1 -1
  306. package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts +4 -2
  307. package/dist/components/advanced/blog-editor/BlogEditorContent.d.ts.map +1 -1
  308. package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts +4 -2
  309. package/dist/components/advanced/blog-editor/BlogEditorHeader.d.ts.map +1 -1
  310. package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts +4 -2
  311. package/dist/components/advanced/blog-editor/BlogEditorLanguageTabs.d.ts.map +1 -1
  312. package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts +5 -3
  313. package/dist/components/advanced/blog-editor/BlogEditorMetadata.d.ts.map +1 -1
  314. package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts +5 -3
  315. package/dist/components/advanced/blog-editor/BlogEditorPreview.d.ts.map +1 -1
  316. package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts +4 -2
  317. package/dist/components/advanced/blog-editor/BlogEditorToolbar.d.ts.map +1 -1
  318. package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts +4 -2
  319. package/dist/components/advanced/blog-editor/BlogEditorTranslate.d.ts.map +1 -1
  320. package/dist/components/advanced/blog-editor/types.d.ts +5 -2
  321. package/dist/components/advanced/blog-editor/types.d.ts.map +1 -1
  322. package/dist/components/advanced/emotion/EmotionAnalysis.d.ts +3 -1
  323. package/dist/components/advanced/emotion/EmotionAnalysis.d.ts.map +1 -1
  324. package/dist/components/advanced/emotion/EmotionButton.d.ts +3 -1
  325. package/dist/components/advanced/emotion/EmotionButton.d.ts.map +1 -1
  326. package/dist/components/advanced/emotion/EmotionMeter.d.ts +4 -2
  327. package/dist/components/advanced/emotion/EmotionMeter.d.ts.map +1 -1
  328. package/dist/components/advanced/emotion/EmotionSelector.d.ts +3 -1
  329. package/dist/components/advanced/emotion/EmotionSelector.d.ts.map +1 -1
  330. package/dist/components/dashboard/ActivityFeed.d.ts +5 -2
  331. package/dist/components/dashboard/ActivityFeed.d.ts.map +1 -1
  332. package/dist/components/dashboard/BarChart.d.ts +3 -2
  333. package/dist/components/dashboard/BarChart.d.ts.map +1 -1
  334. package/dist/components/dashboard/DashboardGrid.d.ts +13 -3
  335. package/dist/components/dashboard/DashboardGrid.d.ts.map +1 -1
  336. package/dist/components/dashboard/DashboardSidebar.d.ts +15 -82
  337. package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -1
  338. package/dist/components/dashboard/DashboardToolbar.d.ts +3 -2
  339. package/dist/components/dashboard/DashboardToolbar.d.ts.map +1 -1
  340. package/dist/components/dashboard/EmptyState.d.ts +3 -2
  341. package/dist/components/dashboard/EmptyState.d.ts.map +1 -1
  342. package/dist/components/dashboard/MembershipBadge.d.ts +3 -2
  343. package/dist/components/dashboard/MembershipBadge.d.ts.map +1 -1
  344. package/dist/components/dashboard/MerchantList.d.ts +3 -2
  345. package/dist/components/dashboard/MerchantList.d.ts.map +1 -1
  346. package/dist/components/dashboard/MetricCard.d.ts +3 -2
  347. package/dist/components/dashboard/MetricCard.d.ts.map +1 -1
  348. package/dist/components/dashboard/MiniBarChart.d.ts +3 -2
  349. package/dist/components/dashboard/MiniBarChart.d.ts.map +1 -1
  350. package/dist/components/dashboard/NotificationCard.d.ts +5 -2
  351. package/dist/components/dashboard/NotificationCard.d.ts.map +1 -1
  352. package/dist/components/dashboard/ProfileCard.d.ts +5 -2
  353. package/dist/components/dashboard/ProfileCard.d.ts.map +1 -1
  354. package/dist/components/dashboard/ProgressCard.d.ts +6 -3
  355. package/dist/components/dashboard/ProgressCard.d.ts.map +1 -1
  356. package/dist/components/dashboard/QuickActionCard.d.ts +22 -27
  357. package/dist/components/dashboard/QuickActionCard.d.ts.map +1 -1
  358. package/dist/components/dashboard/RoutingBreakdownCard.d.ts +3 -2
  359. package/dist/components/dashboard/RoutingBreakdownCard.d.ts.map +1 -1
  360. package/dist/components/dashboard/SettlementTimeline.d.ts +3 -2
  361. package/dist/components/dashboard/SettlementTimeline.d.ts.map +1 -1
  362. package/dist/components/dashboard/StatCard.d.ts +7 -4
  363. package/dist/components/dashboard/StatCard.d.ts.map +1 -1
  364. package/dist/components/dashboard/SummaryCard.d.ts +6 -3
  365. package/dist/components/dashboard/SummaryCard.d.ts.map +1 -1
  366. package/dist/components/dashboard/TransactionDetailDrawer.d.ts +2 -2
  367. package/dist/components/dashboard/TransactionDetailDrawer.d.ts.map +1 -1
  368. package/dist/components/dashboard/TransactionsTable.d.ts +3 -2
  369. package/dist/components/dashboard/TransactionsTable.d.ts.map +1 -1
  370. package/dist/components/dashboard/TrendChart.d.ts +3 -2
  371. package/dist/components/dashboard/TrendChart.d.ts.map +1 -1
  372. package/dist/components/dashboard/YearlyHeatmap.d.ts +4 -2
  373. package/dist/components/dashboard/YearlyHeatmap.d.ts.map +1 -1
  374. package/dist/components/dashboard/kanban/KanbanAddCard.d.ts.map +1 -1
  375. package/dist/components/dashboard/kanban/KanbanAddColumn.d.ts.map +1 -1
  376. package/dist/components/dashboard/kanban/KanbanBoard.d.ts.map +1 -1
  377. package/dist/components/dashboard/kanban/KanbanCard.d.ts.map +1 -1
  378. package/dist/components/dashboard/kanban/KanbanColumn.d.ts.map +1 -1
  379. package/dist/components/dashboard/kanban/KanbanColumnHeader.d.ts.map +1 -1
  380. package/dist/components/dashboard/kanban/KanbanDropIndicator.d.ts.map +1 -1
  381. package/dist/components/dashboard/kanban/index.d.ts +1 -1
  382. package/dist/components/dashboard/kanban/types.d.ts +24 -12
  383. package/dist/components/dashboard/kanban/types.d.ts.map +1 -1
  384. package/dist/components/scrollbar/scrollbar.d.ts +2 -1
  385. package/dist/components/scrollbar/scrollbar.d.ts.map +1 -1
  386. package/dist/context/MotionConfigContext.d.ts +41 -0
  387. package/dist/context/MotionConfigContext.d.ts.map +1 -0
  388. package/dist/data.d.mts +55 -23
  389. package/dist/data.d.ts +45 -3
  390. package/dist/data.d.ts.map +1 -1
  391. package/dist/data.mjs +2 -2
  392. package/dist/data.mjs.map +1 -1
  393. package/dist/feedback.d.mts +6 -293
  394. package/dist/feedback.d.ts +7 -5
  395. package/dist/feedback.d.ts.map +1 -1
  396. package/dist/feedback.mjs +1 -1
  397. package/dist/form.d.mts +99 -114
  398. package/dist/form.mjs +9 -4
  399. package/dist/form.mjs.map +1 -1
  400. package/dist/hooks/index.d.ts +6 -0
  401. package/dist/hooks/index.d.ts.map +1 -1
  402. package/dist/hooks/useAnimatedEntrance.d.ts +24 -0
  403. package/dist/hooks/useAnimatedEntrance.d.ts.map +1 -0
  404. package/dist/hooks/useBreakpoint.d.ts +22 -0
  405. package/dist/hooks/useBreakpoint.d.ts.map +1 -0
  406. package/dist/hooks/useDotEnv.d.ts +12 -0
  407. package/dist/hooks/useDotEnv.d.ts.map +1 -0
  408. package/dist/hooks/useDotMap.d.ts +38 -0
  409. package/dist/hooks/useDotMap.d.ts.map +1 -0
  410. package/dist/{icons-DmhQEH_E.d.mts → icons-DcOBy9Hf.d.mts} +4 -0
  411. package/dist/iconsax-extended.mjs +2 -2
  412. package/dist/iconsax-extended.mjs.map +1 -1
  413. package/dist/iconsax.mjs +2 -2
  414. package/dist/iconsax.mjs.map +1 -1
  415. package/dist/index.d.mts +360 -210
  416. package/dist/index.d.ts +74 -64
  417. package/dist/index.d.ts.map +1 -1
  418. package/dist/index.mjs +15 -15
  419. package/dist/index.mjs.map +1 -1
  420. package/dist/interactive/kanban.d.ts +12 -0
  421. package/dist/interactive/kanban.d.ts.map +1 -0
  422. package/dist/interactive-kanban.d.mts +378 -0
  423. package/dist/interactive-kanban.mjs +3 -0
  424. package/dist/interactive-kanban.mjs.map +1 -0
  425. package/dist/interactive.d.mts +193 -197
  426. package/dist/interactive.d.ts +7 -5
  427. package/dist/interactive.d.ts.map +1 -1
  428. package/dist/interactive.mjs +1 -1
  429. package/dist/interactive.mjs.map +1 -1
  430. package/dist/landing/LandingAbout.d.ts +2 -2
  431. package/dist/landing/LandingAbout.d.ts.map +1 -1
  432. package/dist/landing/LandingCTA.d.ts +2 -2
  433. package/dist/landing/LandingCTA.d.ts.map +1 -1
  434. package/dist/landing/LandingContact.d.ts +2 -2
  435. package/dist/landing/LandingContact.d.ts.map +1 -1
  436. package/dist/landing/LandingExperience.d.ts +1 -1
  437. package/dist/landing/LandingExperience.d.ts.map +1 -1
  438. package/dist/landing/LandingFeatures.d.ts +1 -1
  439. package/dist/landing/LandingFeatures.d.ts.map +1 -1
  440. package/dist/landing/LandingHero.d.ts +2 -2
  441. package/dist/landing/LandingHero.d.ts.map +1 -1
  442. package/dist/landing/LandingLogoCloud.d.ts +2 -2
  443. package/dist/landing/LandingLogoCloud.d.ts.map +1 -1
  444. package/dist/landing/LandingMetrics.d.ts +1 -1
  445. package/dist/landing/LandingMetrics.d.ts.map +1 -1
  446. package/dist/landing/LandingProjects.d.ts +1 -1
  447. package/dist/landing/LandingProjects.d.ts.map +1 -1
  448. package/dist/landing/LandingShowcase.d.ts +2 -2
  449. package/dist/landing/LandingShowcase.d.ts.map +1 -1
  450. package/dist/landing/LandingSkills.d.ts +1 -1
  451. package/dist/landing/LandingSkills.d.ts.map +1 -1
  452. package/dist/landing/LandingStats.d.ts +1 -1
  453. package/dist/landing/LandingStats.d.ts.map +1 -1
  454. package/dist/landing/LandingTestimonials.d.ts +1 -1
  455. package/dist/landing/LandingTestimonials.d.ts.map +1 -1
  456. package/dist/landing/types.d.ts +42 -30
  457. package/dist/landing/types.d.ts.map +1 -1
  458. package/dist/landing.d.mts +47 -37
  459. package/dist/landing.mjs +4 -20
  460. package/dist/landing.mjs.map +1 -1
  461. package/dist/lib/Slot.d.ts.map +1 -1
  462. package/dist/lib/icon-providers.d.ts +25 -27
  463. package/dist/lib/icon-providers.d.ts.map +1 -1
  464. package/dist/lib/icons.d.ts +4 -0
  465. package/dist/lib/icons.d.ts.map +1 -1
  466. package/dist/lib/styles/animation.d.ts +35 -0
  467. package/dist/lib/styles/animation.d.ts.map +1 -0
  468. package/dist/lib/styles/disabled.d.ts +15 -0
  469. package/dist/lib/styles/disabled.d.ts.map +1 -0
  470. package/dist/lib/styles/focus.d.ts +34 -0
  471. package/dist/lib/styles/focus.d.ts.map +1 -0
  472. package/dist/lib/styles/glass.d.ts +18 -0
  473. package/dist/lib/styles/glass.d.ts.map +1 -0
  474. package/dist/lib/styles/hover.d.ts +9 -0
  475. package/dist/lib/styles/hover.d.ts.map +1 -0
  476. package/dist/lib/styles/index.d.ts +6 -0
  477. package/dist/lib/styles/index.d.ts.map +1 -1
  478. package/dist/lib/styles/transition.d.ts +42 -0
  479. package/dist/lib/styles/transition.d.ts.map +1 -0
  480. package/dist/lib/types/common.d.ts +3 -3
  481. package/dist/lib/types/common.d.ts.map +1 -1
  482. package/dist/lib/utils.d.ts.map +1 -1
  483. package/dist/native/Box.d.ts +11 -0
  484. package/dist/native/Box.d.ts.map +1 -0
  485. package/dist/native/Pressable.d.ts +10 -0
  486. package/dist/native/Pressable.d.ts.map +1 -0
  487. package/dist/native/Text.d.ts +11 -0
  488. package/dist/native/Text.d.ts.map +1 -0
  489. package/dist/native/index.d.ts +9 -0
  490. package/dist/native/index.d.ts.map +1 -0
  491. package/dist/native/useDotMap.d.ts +51 -0
  492. package/dist/native/useDotMap.d.ts.map +1 -0
  493. package/dist/native.mjs +2 -0
  494. package/dist/native.mjs.map +1 -0
  495. package/dist/navigation.d.mts +49 -22
  496. package/dist/navigation.d.ts +10 -8
  497. package/dist/navigation.d.ts.map +1 -1
  498. package/dist/navigation.mjs +1 -1
  499. package/dist/navigation.mjs.map +1 -1
  500. package/dist/overlay.d.mts +84 -87
  501. package/dist/overlay.mjs +2 -2
  502. package/dist/overlay.mjs.map +1 -1
  503. package/dist/sdui/SDUIRenderer.d.ts.map +1 -1
  504. package/dist/sdui/core.d.ts +50 -0
  505. package/dist/sdui/core.d.ts.map +1 -0
  506. package/dist/sdui/index.d.ts +3 -1
  507. package/dist/sdui/index.d.ts.map +1 -1
  508. package/dist/sdui/registry.d.ts.map +1 -1
  509. package/dist/sdui/types.d.ts +38 -0
  510. package/dist/sdui/types.d.ts.map +1 -1
  511. package/dist/sdui.d.mts +89 -1
  512. package/dist/sdui.mjs +2 -2
  513. package/dist/sdui.mjs.map +1 -1
  514. package/dist/theme.d.mts +85 -0
  515. package/dist/theme.d.ts +14 -0
  516. package/dist/theme.d.ts.map +1 -0
  517. package/dist/theme.mjs +3 -0
  518. package/dist/theme.mjs.map +1 -0
  519. package/package.json +50 -22
  520. package/src/styles/component-vars.css +503 -69
  521. package/src/styles/landing.css +12 -12
  522. package/src/styles/prose.css +284 -0
  523. package/src/styles/recommended-theme.css +123 -141
  524. package/src/styles/utilities.css +3 -3
  525. package/dist/advanced-dashboard.js +0 -39
  526. package/dist/advanced-dashboard.js.map +0 -1
  527. package/dist/advanced-emotion.js +0 -2
  528. package/dist/advanced-emotion.js.map +0 -1
  529. package/dist/advanced-motion.js +0 -82
  530. package/dist/advanced-motion.js.map +0 -1
  531. package/dist/advanced.js +0 -112
  532. package/dist/advanced.js.map +0 -1
  533. package/dist/chunk-3CCF7U3P.mjs +0 -3
  534. package/dist/chunk-3CCF7U3P.mjs.map +0 -1
  535. package/dist/chunk-3GAUTZXQ.mjs +0 -3
  536. package/dist/chunk-3GAUTZXQ.mjs.map +0 -1
  537. package/dist/chunk-42RGFEL2.mjs +0 -3
  538. package/dist/chunk-42RGFEL2.mjs.map +0 -1
  539. package/dist/chunk-4NJE7D6X.mjs +0 -3
  540. package/dist/chunk-4NJE7D6X.mjs.map +0 -1
  541. package/dist/chunk-6HVJFEDA.mjs +0 -3
  542. package/dist/chunk-6HVJFEDA.mjs.map +0 -1
  543. package/dist/chunk-7OYT3QSY.mjs +0 -3
  544. package/dist/chunk-7OYT3QSY.mjs.map +0 -1
  545. package/dist/chunk-ANYZ56VB.mjs +0 -3
  546. package/dist/chunk-ANYZ56VB.mjs.map +0 -1
  547. package/dist/chunk-AOSXB5JJ.mjs +0 -4
  548. package/dist/chunk-AOSXB5JJ.mjs.map +0 -1
  549. package/dist/chunk-B544MRF7.mjs +0 -3
  550. package/dist/chunk-B544MRF7.mjs.map +0 -1
  551. package/dist/chunk-CVWWS25A.mjs +0 -3
  552. package/dist/chunk-CVWWS25A.mjs.map +0 -1
  553. package/dist/chunk-DYNBM24D.mjs +0 -3
  554. package/dist/chunk-DYNBM24D.mjs.map +0 -1
  555. package/dist/chunk-FX57OSYG.mjs +0 -3
  556. package/dist/chunk-FX57OSYG.mjs.map +0 -1
  557. package/dist/chunk-IJSYSNM5.mjs +0 -3
  558. package/dist/chunk-IJSYSNM5.mjs.map +0 -1
  559. package/dist/chunk-KJZGOL2Z.mjs +0 -3
  560. package/dist/chunk-KJZGOL2Z.mjs.map +0 -1
  561. package/dist/chunk-KYRIUUQP.mjs +0 -3
  562. package/dist/chunk-KYRIUUQP.mjs.map +0 -1
  563. package/dist/chunk-LSA7DU3N.mjs +0 -73
  564. package/dist/chunk-LSA7DU3N.mjs.map +0 -1
  565. package/dist/chunk-MDLCJASB.mjs +0 -3
  566. package/dist/chunk-MDLCJASB.mjs.map +0 -1
  567. package/dist/chunk-N56BUOCD.mjs +0 -3
  568. package/dist/chunk-N56BUOCD.mjs.map +0 -1
  569. package/dist/chunk-OFYITQXI.mjs +0 -13
  570. package/dist/chunk-OFYITQXI.mjs.map +0 -1
  571. package/dist/chunk-OZNST3EZ.mjs +0 -3
  572. package/dist/chunk-OZNST3EZ.mjs.map +0 -1
  573. package/dist/chunk-RS6RKW5U.mjs +0 -13
  574. package/dist/chunk-RS6RKW5U.mjs.map +0 -1
  575. package/dist/chunk-TXBZZJNR.mjs +0 -3
  576. package/dist/chunk-TXBZZJNR.mjs.map +0 -1
  577. package/dist/chunk-TZ4YSHMC.mjs +0 -3
  578. package/dist/chunk-TZ4YSHMC.mjs.map +0 -1
  579. package/dist/chunk-U6CTBZ2U.mjs +0 -3
  580. package/dist/chunk-U6CTBZ2U.mjs.map +0 -1
  581. package/dist/chunk-WP7VFE77.mjs +0 -3
  582. package/dist/chunk-WP7VFE77.mjs.map +0 -1
  583. package/dist/chunk-XCZMLKPK.mjs +0 -3
  584. package/dist/chunk-XCZMLKPK.mjs.map +0 -1
  585. package/dist/chunk-XGHT7WMO.mjs +0 -3
  586. package/dist/chunk-XGHT7WMO.mjs.map +0 -1
  587. package/dist/chunk-XL4KTJ4L.mjs +0 -3
  588. package/dist/chunk-XL4KTJ4L.mjs.map +0 -1
  589. package/dist/chunk-Z74YUUVT.mjs +0 -3
  590. package/dist/chunk-Z74YUUVT.mjs.map +0 -1
  591. package/dist/chunk-ZXZIHU7J.mjs +0 -8
  592. package/dist/chunk-ZXZIHU7J.mjs.map +0 -1
  593. package/dist/components/EmptyState.d.ts +0 -62
  594. package/dist/components/EmptyState.d.ts.map +0 -1
  595. package/dist/data.js +0 -3
  596. package/dist/data.js.map +0 -1
  597. package/dist/feedback.js +0 -12
  598. package/dist/feedback.js.map +0 -1
  599. package/dist/form.js +0 -8
  600. package/dist/form.js.map +0 -1
  601. package/dist/iconsax-extended.js +0 -3
  602. package/dist/iconsax-extended.js.map +0 -1
  603. package/dist/iconsax.js +0 -3
  604. package/dist/iconsax.js.map +0 -1
  605. package/dist/index.js +0 -51
  606. package/dist/index.js.map +0 -1
  607. package/dist/interactive.js +0 -2
  608. package/dist/interactive.js.map +0 -1
  609. package/dist/landing.js +0 -100
  610. package/dist/landing.js.map +0 -1
  611. package/dist/lib/phosphor-icons.d.ts +0 -6
  612. package/dist/lib/phosphor-icons.d.ts.map +0 -1
  613. package/dist/navigation.js +0 -12
  614. package/dist/navigation.js.map +0 -1
  615. package/dist/overlay.js +0 -3
  616. package/dist/overlay.js.map +0 -1
  617. package/dist/sdui.js +0 -9
  618. package/dist/sdui.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/dashboard/kanban/KanbanContext.tsx","../src/components/dashboard/kanban/KanbanColumnHeader.tsx","../src/components/dashboard/kanban/KanbanCard.tsx","../src/components/dashboard/kanban/KanbanAddCard.tsx","../src/components/dashboard/kanban/KanbanColumn.tsx","../src/components/dashboard/kanban/KanbanAddColumn.tsx","../src/components/dashboard/kanban/KanbanBoard.tsx","../src/components/dashboard/kanban/KanbanDropIndicator.tsx"],"names":["KanbanContext","createContext","useKanban","context","useContext","KanbanProvider","children","columns","cards","onColumnsChange","onCardsChange","onCardMove","onColumnMove","onCardAdd","onCardDelete","onCardUpdate","onColumnAdd","onColumnDelete","onColumnUpdate","onCardClick","variant","color","allowCardDrag","allowColumnDrag","allowAddCard","allowAddColumn","readOnly","dragData","setDragData","React","dropTargetId","setDropTargetId","dropIndex","setDropIndex","startDrag","useCallback","data","updateDropTarget","targetId","index","endDrag","getCardsByColumn","columnId","card","a","b","_a","_b","canDropCard","column","currentCount","moveCard","cardId","toColumnId","toIndex","cardToMove","c","fromColumnId","cardsByColumn","col","colCards","targetColumnCards","clampedIndex","movedCard","updatedCards","addCard","newCard","newCards","updateCard","updates","deleteCard","moveColumn","columnIndex","newColumns","removed","addColumn","newColumn","updateColumn","deleteColumn","value","useMemo","jsx","colorDotStyleMap","colorBadgeStyleMap","KanbanColumnHeader","cardCount","onTitleChange","onDelete","onToggleCollapse","dragHandleProps","dot","style","props","ref","isEditing","setIsEditing","useState","editTitle","setEditTitle","inputRef","useRef","dotStyle","badgeStyle","wipBadgeStyle","useEffect","handleTitleClick","handleTitleSubmit","handleTitleKeyDown","e","mergeStyles","resolveDot","jsxs","Icon","icon","KEYFRAMES_ID","useCardKeyframes","priorityLabels","priorityBadgeStyles","cardVariantStyles","KanbanCard","isDraggingProp","isOver","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","sortableStyle","CSS","handleClick","isDeleting","setIsDeleting","handleDelete","dueText","date","d","now","diff","days","isOverdue","variantStyle","animationStyle","cardStyle","tag","KanbanAddCard","onAdd","onCancel","placeholder","isAdding","setIsAdding","title","setTitle","handleStartAdding","handleCancel","handleSubmit","trimmedTitle","handleKeyDown","useColumnKeyframes","columnVariantStyles","KanbanColumn","dotProp","isAtLimit","cardIds","handleTitleChange","handleToggleCollapse","columnStyle","SortableContext","verticalListSortingStrategy","cardIndex","KanbanAddColumn","variantBaseStyle","KanbanBoard","controlledColumns","controlledCards","defaultColumns","defaultCards","onKanbanDragStart","onKanbanDragEnd","columnMinWidth","columnMaxWidth","showDragOverlay","dragOverlayStyle","dragRotation","dragScale","isMounted","setIsMounted","internalColumns","setInternalColumns","internalCards","setInternalCards","activeId","setActiveId","activeType","setActiveType","isControlled","isDraggingColumn","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleColumnsChange","handleCardsChange","getColumnCards","findColumnByCardId","isColumn","id","handleDragStart","event","active","type","handleDragOver","over","overId","activeColumnId","overColumnId","activeCards","overCards","overIndex","overColumn","reorderedCards","currentOrder","handleDragEnd","draggedId","draggedType","activeIdStr","oldIndex","newIndex","arrayMove","columnCards","reorderedColumnCards","newOrder","activeCard","activeColumnData","boardBaseStyle","base","columnIds","cardOverlayStyle","DndContext","closestCenter","horizontalListSortingStrategy","DragOverlay","Skeleton","KanbanDropIndicator","visible","orientation"],"mappings":"ghBA0DA,IAAMA,EAAAA,CAAgBC,aAAAA,CAAyC,IAAI,EAK5D,SAASC,IAAgC,CAC9C,IAAMC,CAAAA,CAAUC,UAAAA,CAAWJ,EAAa,CAAA,CACxC,GAAI,CAACG,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,gDAAgD,EAElE,OAAOA,CACT,CAgCO,SAASE,EAAAA,CAAe,CAC7B,SAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,cAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CAAU,UAAA,CACV,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,aAAA,CAAAC,EAAgB,IAAA,CAChB,eAAA,CAAAC,CAAAA,CAAkB,IAAA,CAClB,YAAA,CAAAC,CAAAA,CAAe,KACf,cAAA,CAAAC,CAAAA,CAAiB,KAAA,CACjB,QAAA,CAAAC,CAAAA,CAAW,KACb,EAAwB,CAEtB,GAAM,CAACC,CAAAA,CAAUC,CAAW,CAAA,CAAIC,GAAM,QAAA,CAAgC,IAAI,CAAA,CACpE,CAACC,CAAAA,CAAcC,EAAe,EAAIF,EAAAA,CAAM,QAAA,CAAwB,IAAI,CAAA,CACpE,CAACG,CAAAA,CAAWC,EAAY,CAAA,CAAIJ,EAAAA,CAAM,QAAA,CAAwB,IAAI,CAAA,CAG9DK,EAAAA,CAAYC,YAAaC,CAAAA,EAAyB,CACtDR,CAAAA,CAAYQ,CAAI,EAClB,CAAA,CAAG,EAAE,CAAA,CAGCC,EAAAA,CAAmBF,WAAAA,CAAY,CAACG,CAAAA,CAAyBC,IAAyB,CACtFR,EAAAA,CAAgBO,CAAQ,CAAA,CACxBL,EAAAA,CAAaM,CAAK,EACpB,CAAA,CAAG,EAAE,CAAA,CAGCC,CAAAA,CAAUL,WAAAA,CAAY,IAAM,CAChCP,CAAAA,CAAY,IAAI,CAAA,CAChBG,EAAAA,CAAgB,IAAI,EACpBE,EAAAA,CAAa,IAAI,EACnB,CAAA,CAAG,EAAE,EAGCQ,CAAAA,CAAmBN,WAAAA,CACtBO,CAAAA,EACQlC,CAAAA,CACJ,MAAA,CAAQmC,CAAAA,EAASA,EAAK,QAAA,GAAaD,CAAQ,CAAA,CAC3C,IAAA,CAAK,CAACE,CAAAA,CAAGC,IAAG,CAxJrB,IAAAC,CAAAA,CAAAC,CAAAA,CAwJyB,OAAA,CAAA,CAAAD,CAAAA,CAAAF,EAAE,KAAA,GAAF,IAAA,CAAAE,CAAAA,CAAW,CAAA,GAAA,CAAMC,CAAAA,CAAAF,CAAAA,CAAE,QAAF,IAAA,CAAAE,CAAAA,CAAW,CAAA,CAAA,CAAE,CAAA,CAEnD,CAACvC,CAAK,CACR,CAAA,CAGMwC,CAAAA,CAAcb,WAAAA,CACjBO,CAAAA,EAA8B,CAC7B,IAAMO,EAAS1C,CAAAA,CAAQ,IAAA,CAAM,CAAA,EAAM,CAAA,CAAE,EAAA,GAAOmC,CAAQ,EACpD,GAAI,CAACO,CAAAA,EAAUA,CAAAA,CAAO,KAAA,GAAU,MAAA,CAAW,OAAO,KAAA,CAElD,IAAMC,CAAAA,CAAeT,CAAAA,CAAiBC,CAAQ,CAAA,CAAE,MAAA,CAGhD,QAAIf,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAU,IAAA,IAAS,MAAA,EAAUA,CAAAA,CAAS,WAAae,CAAAA,CAC9C,IAAA,CAGFQ,CAAAA,CAAeD,CAAAA,CAAO,KAC/B,CAAA,CACA,CAAC1C,CAAAA,CAASkC,CAAAA,CAAkBd,CAAQ,CACtC,CAAA,CAGMwB,EAAAA,CAAWhB,YACf,CAACiB,CAAAA,CAAgBC,CAAAA,CAAoBC,CAAAA,GAAoB,CACvD,GAAI5B,EAAU,OAEd,IAAM6B,CAAAA,CAAa/C,CAAAA,CAAM,IAAA,CAAMgD,CAAAA,EAAMA,EAAE,EAAA,GAAOJ,CAAM,CAAA,CACpD,GAAI,CAACG,CAAAA,CAAY,OAEjB,IAAME,CAAAA,CAAeF,CAAAA,CAAW,QAAA,CAGhC,GAAIE,CAAAA,GAAiBJ,GAAc,CAACL,CAAAA,CAAYK,CAAU,CAAA,CACxD,OAIF,IAAMK,EAAgB,IAAI,GAAA,CAC1BnD,CAAAA,CAAQ,OAAA,CAASoD,CAAAA,EAAQ,CACvBD,EAAc,GAAA,CAAIC,CAAAA,CAAI,EAAA,CAAI,EAAE,EAC9B,CAAC,CAAA,CACDnD,CAAAA,CAAM,OAAA,CAASmC,CAAAA,EAAS,CACtB,GAAIA,EAAK,EAAA,GAAOS,CAAAA,CAAQ,CACtB,IAAMQ,CAAAA,CAAWF,CAAAA,CAAc,IAAIf,CAAAA,CAAK,QAAQ,CAAA,CAC5CiB,CAAAA,EAAUA,CAAAA,CAAS,IAAA,CAAKjB,CAAI,EAClC,CACF,CAAC,CAAA,CAGDe,CAAAA,CAAc,OAAA,CAASE,GAAa,CAClCA,CAAAA,CAAS,IAAA,CAAK,CAAChB,CAAAA,CAAGC,EAAAA,GAAG,CA5M7B,IAAAC,CAAAA,CAAAC,EAAAA,CA4MiC,OAAA,CAAA,CAAAD,CAAAA,CAAAF,CAAAA,CAAE,KAAA,GAAF,KAAAE,CAAAA,CAAW,CAAA,GAAA,CAAMC,EAAAA,CAAAF,EAAAA,CAAE,KAAA,GAAF,IAAA,CAAAE,GAAW,CAAA,CAAA,CAAE,EACzD,CAAC,CAAA,CAGD,IAAMc,EAAAA,CAAoBH,EAAc,GAAA,CAAIL,CAAU,CAAA,EAAK,EAAC,CACtDS,EAAAA,CAAe,KAAK,GAAA,CAAIR,CAAAA,CAASO,EAAAA,CAAkB,MAAM,CAAA,CAGzDE,EAAAA,CAAwB,CAAE,GAAGR,CAAAA,CAAY,QAAA,CAAUF,CAAW,CAAA,CACpEQ,EAAAA,CAAkB,OAAOC,EAAAA,CAAc,CAAA,CAAGC,EAAS,CAAA,CACnDL,CAAAA,CAAc,GAAA,CAAIL,EAAYQ,EAAiB,CAAA,CAG/C,IAAMG,EAAAA,CAA6B,EAAC,CACpCN,EAAc,OAAA,CAASE,CAAAA,EAAa,CAClCA,CAAAA,CAAS,OAAA,CAAQ,CAACjB,EAAMJ,EAAAA,GAAU,CAChCyB,EAAAA,CAAa,IAAA,CAAK,CAAE,GAAGrB,EAAM,KAAA,CAAOJ,EAAM,CAAC,EAC7C,CAAC,EACH,CAAC,CAAA,CAED7B,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAgBsD,EAAAA,CAAAA,CAChBrD,CAAAA,EAAA,MAAAA,CAAAA,CAAa,CAAE,MAAA,CAAAyC,CAAAA,CAAQ,YAAA,CAAAK,CAAAA,CAAc,WAAAJ,CAAAA,CAAY,OAAA,CAASS,EAAa,CAAA,EACzE,CAAA,CACA,CAACtD,EAAOD,CAAAA,CAASmB,CAAAA,CAAUsB,CAAAA,CAAatC,CAAAA,CAAeC,CAAU,CACnE,EAGMsD,EAAAA,CAAU9B,WAAAA,CACd,CAACO,CAAAA,CAAkBC,CAAAA,GAA8B,CAI/C,GAHIjB,CAAAA,EAGA,CAACsB,CAAAA,CAAYN,CAAQ,CAAA,CAAG,OAE5B,IAAMwB,EAAsB,CAC1B,EAAA,CAAIvB,CAAAA,CAAK,EAAA,EAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAA,CACjC,QAAA,CAAAD,CAAAA,CACA,KAAA,CAAOC,CAAAA,CAAK,OAAS,qBAAA,CACrB,WAAA,CAAaA,CAAAA,CAAK,WAAA,CAClB,QAAA,CAAUA,CAAAA,CAAK,SACf,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,QAAA,CAAUA,CAAAA,CAAK,QAAA,CACf,QAASA,CAAAA,CAAK,OAAA,CACd,QAAA,CAAUA,CAAAA,CAAK,QACjB,CAAA,CAEMwB,EAAW,CAAC,GAAG3D,CAAAA,CAAO0D,CAAO,CAAA,CACnCxD,CAAAA,EAAA,MAAAA,CAAAA,CAAgByD,CAAAA,CAAAA,CAChBtD,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAY6B,CAAAA,CAAUwB,GACxB,CAAA,CACA,CAAC1D,CAAAA,CAAOkB,CAAAA,CAAUsB,CAAAA,CAAatC,CAAAA,CAAeG,CAAS,CACzD,CAAA,CAGMuD,EAAAA,CAAajC,WAAAA,CACjB,CAACiB,CAAAA,CAAgBiB,IAAiC,CAChD,GAAI3C,CAAAA,CAAU,OAEd,IAAMyC,CAAAA,CAAW3D,EAAM,GAAA,CAAKmC,CAAAA,EAC1BA,CAAAA,CAAK,EAAA,GAAOS,CAAAA,CAAS,CAAE,GAAGT,CAAAA,CAAM,GAAG0B,CAAQ,CAAA,CAAI1B,CACjD,CAAA,CAEAjC,GAAA,IAAA,EAAAA,CAAAA,CAAgByD,CAAAA,CAAAA,CAChBpD,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAeqC,EAAQiB,CAAAA,EACzB,CAAA,CACA,CAAC7D,CAAAA,CAAOkB,CAAAA,CAAUhB,CAAAA,CAAeK,CAAY,CAC/C,CAAA,CAGMuD,EAAAA,CAAanC,WAAAA,CAChBiB,CAAAA,EAAmB,CAClB,GAAI1B,CAAAA,CAAU,OAEd,IAAMyC,CAAAA,CAAW3D,CAAAA,CAAM,MAAA,CAAQmC,GAASA,CAAAA,CAAK,EAAA,GAAOS,CAAM,CAAA,CAC1D1C,CAAAA,EAAA,IAAA,EAAAA,EAAgByD,CAAAA,CAAAA,CAChBrD,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAesC,CAAAA,EACjB,CAAA,CACA,CAAC5C,CAAAA,CAAOkB,CAAAA,CAAUhB,CAAAA,CAAeI,CAAY,CAC/C,CAAA,CAGMyD,GAAapC,WAAAA,CACjB,CAACO,CAAAA,CAAkBY,CAAAA,GAAoB,CACrC,GAAI5B,EAAU,OAEd,IAAM8C,CAAAA,CAAcjE,CAAAA,CAAQ,SAAA,CAAWiD,CAAAA,EAAMA,EAAE,EAAA,GAAOd,CAAQ,CAAA,CAC9D,GAAI8B,CAAAA,GAAgB,EAAA,CAAI,OAExB,IAAMC,CAAAA,CAAa,CAAC,GAAGlE,CAAO,CAAA,CACxB,CAACmE,CAAO,CAAA,CAAID,CAAAA,CAAW,MAAA,CAAOD,CAAAA,CAAa,CAAC,EAClDC,CAAAA,CAAW,MAAA,CAAOnB,CAAAA,CAAS,CAAA,CAAGoB,CAAO,CAAA,CAErCjE,GAAA,IAAA,EAAAA,CAAAA,CAAkBgE,CAAAA,CAAAA,CAClB7D,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAe,CAAE,QAAA,CAAA8B,CAAAA,CAAU,OAAA,CAAAY,CAAQ,CAAA,EACrC,CAAA,CACA,CAAC/C,CAAAA,CAASmB,CAAAA,CAAUjB,CAAAA,CAAiBG,CAAY,CACnD,CAAA,CAGM+D,GAAYxC,WAAAA,CACfc,CAAAA,EAAkC,CACjC,GAAIvB,CAAAA,CAAU,OAEd,IAAMkD,CAAAA,CAA0B,CAC9B,EAAA,CAAI3B,CAAAA,CAAO,EAAA,EAAM,CAAA,OAAA,EAAU,KAAK,GAAA,EAAK,CAAA,CAAA,CACrC,KAAA,CAAOA,CAAAA,CAAO,KAAA,EAAS,qBAAA,CACvB,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,SAAA,CAAWA,EAAO,SACpB,CAAA,CAEMwB,CAAAA,CAAa,CAAC,GAAGlE,CAAAA,CAASqE,CAAS,CAAA,CACzCnE,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAkBgE,CAAAA,CAAAA,CAClBzD,CAAAA,EAAA,MAAAA,CAAAA,CAAc4D,CAAAA,EAChB,CAAA,CACA,CAACrE,CAAAA,CAASmB,CAAAA,CAAUjB,EAAiBO,CAAW,CAClD,CAAA,CAGM6D,EAAAA,CAAe1C,WAAAA,CACnB,CAACO,EAAkB2B,CAAAA,GAAmC,CACpD,GAAI3C,CAAAA,CAAU,OAEd,IAAM+C,EAAalE,CAAAA,CAAQ,GAAA,CAAK0C,CAAAA,EAC9BA,CAAAA,CAAO,EAAA,GAAOP,CAAAA,CAAW,CAAE,GAAGO,CAAAA,CAAQ,GAAGoB,CAAQ,CAAA,CAAIpB,CACvD,EAEAxC,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAkBgE,CAAAA,CAAAA,CAClBvD,CAAAA,EAAA,IAAA,EAAAA,EAAiBwB,CAAAA,CAAU2B,CAAAA,EAC7B,CAAA,CACA,CAAC9D,CAAAA,CAASmB,CAAAA,CAAUjB,EAAiBS,CAAc,CACrD,CAAA,CAGM4D,EAAAA,CAAe3C,WAAAA,CAClBO,CAAAA,EAAqB,CACpB,GAAIhB,CAAAA,CAAU,OAGd,IAAM+C,CAAAA,CAAalE,CAAAA,CAAQ,OAAQ0C,CAAAA,EAAWA,CAAAA,CAAO,EAAA,GAAOP,CAAQ,CAAA,CAC9DyB,CAAAA,CAAW3D,EAAM,MAAA,CAAQmC,CAAAA,EAASA,CAAAA,CAAK,QAAA,GAAaD,CAAQ,CAAA,CAElEjC,GAAA,IAAA,EAAAA,CAAAA,CAAkBgE,CAAAA,CAAAA,CAClB/D,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAgByD,GAChBlD,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAiByB,CAAAA,EACnB,CAAA,CACA,CAACnC,CAAAA,CAASC,CAAAA,CAAOkB,CAAAA,CAAUjB,CAAAA,CAAiBC,CAAAA,CAAeO,CAAc,CAC3E,CAAA,CAGM8D,EAAQC,OAAAA,CACZ,KAAO,CACL,OAAA,CAAAzE,CAAAA,CACA,KAAA,CAAAC,EACA,QAAA,CAAAmB,CAAAA,CACA,YAAA,CAAAG,CAAAA,CACA,SAAA,CAAAE,CAAAA,CACA,UAAAE,EAAAA,CACA,gBAAA,CAAAG,EAAAA,CACA,OAAA,CAAAG,CAAAA,CACA,QAAA,CAAAW,GACA,OAAA,CAAAc,EAAAA,CACA,UAAA,CAAAG,EAAAA,CACA,UAAA,CAAAE,EAAAA,CACA,WAAAC,EAAAA,CACA,SAAA,CAAAI,EAAAA,CACA,YAAA,CAAAE,EAAAA,CACA,YAAA,CAAAC,GACA,gBAAA,CAAArC,CAAAA,CACA,WAAA,CAAAO,CAAAA,CACA,OAAA,CAAA5B,CAAAA,CACA,MAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,cAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,WAAA,CAAAP,CACF,GACA,CACEZ,CAAAA,CACAC,CAAAA,CACAmB,CAAAA,CACAG,CAAAA,CACAE,CAAAA,CACAE,GACAG,EAAAA,CACAG,CAAAA,CACAW,EAAAA,CACAc,EAAAA,CACAG,EAAAA,CACAE,EAAAA,CACAC,GACAI,EAAAA,CACAE,EAAAA,CACAC,EAAAA,CACArC,CAAAA,CACAO,CAAAA,CACA5B,CAAAA,CACAC,EACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAP,CACF,CACF,CAAA,CAEA,OAAO8D,GAAAA,CAACjF,EAAAA,CAAc,QAAA,CAAd,CAAuB,MAAO+E,CAAAA,CAAQ,QAAA,CAAAzE,CAAAA,CAAS,CACzD,CCnZA,IAAM4E,GAAuD,CAC3D,IAAA,CAAM,CAAE,eAAA,CAAiB,SAAU,CAAA,CACnC,OAAQ,CAAE,eAAA,CAAiB,SAAU,CAAA,CACrC,KAAA,CAAO,CAAE,gBAAiB,SAAU,CAAA,CACpC,MAAA,CAAQ,CAAE,eAAA,CAAiB,SAAU,EACrC,GAAA,CAAK,CAAE,eAAA,CAAiB,SAAU,CAAA,CAClC,MAAA,CAAQ,CAAE,eAAA,CAAiB,SAAU,CAAA,CACrC,IAAA,CAAM,CAAE,eAAA,CAAiB,SAAU,CAAA,CACnC,IAAA,CAAM,CAAE,eAAA,CAAiB,SAAU,CAAA,CACnC,KAAM,CAAE,eAAA,CAAiB,SAAU,CAAA,CACnC,OAAA,CAAS,CAAE,gBAAiB,+BAAgC,CAC9D,CAAA,CAKMC,EAAAA,CAAyD,CAC7D,IAAA,CAAM,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACnE,MAAA,CAAQ,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACrE,KAAA,CAAO,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACpE,MAAA,CAAQ,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACrE,GAAA,CAAK,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CAClE,MAAA,CAAQ,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACrE,IAAA,CAAM,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACnE,IAAA,CAAM,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACnE,IAAA,CAAM,CAAE,eAAA,CAAiB,uBAAA,CAAyB,KAAA,CAAO,SAAU,CAAA,CACnE,OAAA,CAAS,CACP,eAAA,CAAiB,+CAAA,CACjB,KAAA,CAAO,+BACT,CACF,CAAA,CAQaC,GAAqBvD,EAAAA,CAAM,UAAA,CAItC,CACE,CACE,MAAA,CAAAoB,GAAAA,CACA,UAAAoC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,eAAA,CAAAC,CAAAA,CACA,GAAA,CAAAC,GAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,GAAM,CAACC,EAAWC,CAAY,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CAC1C,CAACC,EAAWC,CAAY,CAAA,CAAIF,QAAAA,CAAS/C,GAAAA,CAAO,KAAK,CAAA,CACjDkD,EAAWC,MAAAA,CAAyB,IAAI,CAAA,CAExC/E,CAAAA,CAAe4B,GAAAA,CAAO,KAAA,EAAS,OAC/BoD,CAAAA,CAAWnB,EAAAA,CAAiB7D,CAAK,CAAA,CACjCiF,CAAAA,CAAanB,EAAAA,CAAmB9D,CAAK,CAAA,CACrCkF,CAAAA,CAAqC,CACzC,eAAA,CAAiB,SAAA,CACjB,KAAA,CAAO,SACT,CAAA,CAGAC,SAAAA,CAAU,IAAM,CACVV,CAAAA,EAAaK,CAAAA,CAAS,UACxBA,CAAAA,CAAS,OAAA,CAAQ,KAAA,EAAM,CACvBA,CAAAA,CAAS,OAAA,CAAQ,QAAO,EAE5B,CAAA,CAAG,CAACL,CAAS,CAAC,CAAA,CAEd,IAAMW,CAAAA,CAAmB,IAAM,CACzBnB,CAAAA,GACFS,CAAAA,CAAa,IAAI,CAAA,CACjBG,CAAAA,CAAajD,GAAAA,CAAO,KAAK,CAAA,EAE7B,CAAA,CAEMyD,GAAAA,CAAoB,IAAM,CAC1BT,CAAAA,CAAU,IAAA,EAAK,EAAKA,CAAAA,GAAchD,GAAAA,CAAO,KAAA,CAC3CqC,GAAA,IAAA,EAAAA,CAAAA,CAAgBW,CAAAA,CAAU,IAAA,EAAK,CAAA,CAE/BC,CAAAA,CAAajD,IAAO,KAAK,CAAA,CAE3B8C,CAAAA,CAAa,KAAK,EACpB,CAAA,CAEMY,EAAsBC,CAAAA,EAA6C,CACnEA,CAAAA,CAAE,GAAA,GAAQ,OAAA,CACZF,GAAAA,GACSE,CAAAA,CAAE,GAAA,GAAQ,QAAA,GACnBV,CAAAA,CAAajD,GAAAA,CAAO,KAAK,EACzB8C,CAAAA,CAAa,KAAK,CAAA,EAEtB,CAAA,CAGA,OAAI9C,GAAAA,CAAO,UAEPgC,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKY,CAAAA,CACL,KAAA,CAAOgB,CAAAA,CACL,CACE,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,MAAA,CAAQ,MAAA,CACR,SAAA,CAAW,OAAA,CACX,GAAGC,EAAW,sBAAsB,CACtC,CAAA,CACAA,CAAAA,CAAWpB,GAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAGC,CAAAA,CAGJ,QAAA,CAAAmB,IAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAAUH,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,GACFpB,CAAAA,EAAA,IAAA,EAAAA,CAAAA,GACF,CAAA,CACA,aAAA,CAAgBoB,CAAAA,EAAMA,EAAE,eAAA,EAAgB,CACxC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,cAAe,QAAA,CACf,UAAA,CAAY,QAAA,CACZ,GAAGE,CAAAA,CAAW,sBAAsB,CAAA,CACpC,KAAA,CAAO,MAAA,CACP,MAAA,CAAQ,MAAA,CACR,cAAA,CAAgB,QAAA,CAChB,MAAA,CAAQ,UACR,UAAA,CAAY,MAAA,CACZ,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,wBACd,EACA,YAAA,CAAeF,CAAAA,EAAM,CAClBA,CAAAA,CAAE,aAAA,CAAoC,KAAA,CAAM,gBAC3C,wBACJ,CAAA,CACA,YAAA,CAAeA,CAAAA,EAAM,CAClBA,CAAAA,CAAE,cAAoC,KAAA,CAAM,eAAA,CAC3C,cACJ,CAAA,CAEA,QAAA,CAAA,CAAA3B,GAAAA,CAAC+B,EAAA,CAAK,IAAA,CAAK,cAAA,CAAe,IAAA,CAAM,EAAA,CAAI,KAAA,CAAO,CAAE,KAAA,CAAO,SAAU,CAAA,CAAG,CAAA,CACjE/B,GAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,UACP,aAAA,CAAe,QAAA,CACf,WAAA,CAAa,aAAA,CACb,eAAA,CAAiB,OACnB,EAEC,QAAA,CAAAhC,GAAAA,CAAO,KAAA,CACV,CAAA,CACAgC,GAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,SAAA,CACV,GAAG6B,CAAAA,CAAW,wBAAwB,EACtC,UAAA,CAAY,GAAA,CACZ,GAAGR,CACL,CAAA,CAEC,QAAA,CAAAjB,EACH,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAKF0B,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKlB,EACL,KAAA,CAAOgB,CAAAA,CACL,CACE,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgB,eAAA,CAChB,GAAGC,CAAAA,CAAW,WAAW,CAAA,CACzB,aAAc,mBAChB,CAAA,CACAA,CAAAA,CAAWpB,GAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAGC,CAAAA,CAGJ,QAAA,CAAA,CAAAmB,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGD,CAAAA,CAAW,OAAO,EACrB,IAAA,CAAM,CAAA,CACN,QAAA,CAAU,CACZ,CAAA,CAGC,QAAA,CAAA,CAAArB,GACCR,GAAAA,CAAC,KAAA,CAAA,CACE,GAAGQ,CAAAA,CACJ,KAAA,CAAO,CACL,WAAY,CAAA,CACZ,GAAGqB,CAAAA,CAAW,eAAe,CAAA,CAC7B,UAAA,CAAY,WACZ,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,wBACd,CAAA,CACA,KAAA,CAAM,2DACN,YAAA,CAAeF,CAAAA,EAAM,CAClBA,CAAAA,CAAE,aAAA,CAAiC,KAAA,CAAM,gBACxC,UACJ,CAAA,CACA,YAAA,CAAeA,CAAAA,EAAM,CAClBA,CAAAA,CAAE,cAAiC,KAAA,CAAM,eAAA,CACxC,cACJ,CAAA,CAEA,QAAA,CAAA3B,GAAAA,CAAC+B,EAAA,CACC,IAAA,CAAK,cAAA,CACL,IAAA,CAAM,EAAA,CACN,KAAA,CAAO,CAAE,KAAA,CAAO,SAAU,CAAA,CAC5B,CAAA,CACF,CAAA,CAIF/B,GAAAA,CAAC,OACC,KAAA,CAAO,CACL,GAAG6B,CAAAA,CAAW,sBAAsB,CAAA,CACpC,WAAY,CAAA,CACZ,GAAGT,CACL,CAAA,CACF,CAAA,CAGCP,CAAAA,CACCb,IAAC,OAAA,CAAA,CACC,GAAA,CAAKkB,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,KAAA,CAAOF,EACP,QAAA,CAAWW,CAAAA,EAAMV,CAAAA,CAAaU,CAAAA,CAAE,MAAA,CAAO,KAAK,EAC5C,MAAA,CAAQF,GAAAA,CACR,SAAA,CAAWC,CAAAA,CACX,KAAA,CAAO,CACL,IAAA,CAAM,CAAA,CACN,QAAA,CAAU,CAAA,CACV,GAAGG,CAAAA,CAAW,mBAAmB,CAAA,CACjC,SAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,eAAA,CAAiB,aAAA,CACjB,MAAA,CAAQ,oBACR,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,SACT,CAAA,CACF,CAAA,CAEA7B,IAAC,IAAA,CAAA,CACC,KAAA,CAAO,CACL,IAAA,CAAM,CAAA,CACN,QAAA,CAAU,EACV,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,SAAA,CACP,SAAU,QAAA,CACV,YAAA,CAAc,UAAA,CACd,UAAA,CAAY,QAAA,CACZ,MAAA,CAAQK,EAAgB,SAAA,CAAY,SAAA,CACpC,UAAA,CAAY,aACd,CAAA,CACA,OAAA,CAASmB,EACT,YAAA,CAAeG,CAAAA,EAAM,CACftB,CAAAA,GACDsB,CAAAA,CAAE,aAAA,CAAqC,MAAM,KAAA,CAC5C,SAAA,EAEN,CAAA,CACA,YAAA,CAAeA,CAAAA,EAAM,CAClBA,EAAE,aAAA,CAAqC,KAAA,CAAM,KAAA,CAAQ,UACxD,CAAA,CAEC,QAAA,CAAA3D,IAAO,KAAA,CACV,CAAA,CAIF8D,IAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,SAAU,SAAA,CACV,GAAGD,CAAAA,CAAW,0BAA0B,CAAA,CACxC,UAAA,CAAY,EACZ,GAAI7D,GAAAA,CAAO,KAAA,EAASoC,CAAAA,EAAapC,GAAAA,CAAO,KAAA,CACpCsD,EACAD,CACN,CAAA,CAEC,QAAA,CAAA,CAAAjB,CAAAA,CACApC,GAAAA,CAAO,KAAA,EAAS,IAAIA,GAAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CACnC,CAAA,CAAA,CACF,CAAA,CAGA8D,IAAAA,CAAC,OACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGD,CAAAA,CAAW,OAAO,CAAA,CACrB,UAAA,CAAY,CACd,CAAA,CAGC,QAAA,CAAA,CAAAtB,GACCP,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAU2B,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClBA,CAAAA,CAAE,cAAA,EAAe,CACjBpB,IACF,CAAA,CACA,aAAA,CAAgBoB,CAAAA,EAAMA,CAAAA,CAAE,eAAA,GACxB,KAAA,CAAO,CACL,GAAGE,CAAAA,CAAW,aAAa,CAAA,CAC3B,WAAY,MAAA,CACZ,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,wBACd,CAAA,CACA,YAAA,CAAW,2BAAA,CACX,YAAA,CAAeF,CAAAA,EAAM,CAClBA,EAAE,aAAA,CAAoC,KAAA,CAAM,eAAA,CAC3C,UACJ,CAAA,CACA,YAAA,CAAeA,GAAM,CAClBA,CAAAA,CAAE,aAAA,CAAoC,KAAA,CAAM,eAAA,CAC3C,cACJ,EAEA,QAAA,CAAA3B,GAAAA,CAAC+B,CAAAA,CAAA,CAAK,IAAA,CAAK,aAAA,CAAc,KAAM,EAAA,CAAI,KAAA,CAAO,CAAE,KAAA,CAAO,SAAU,CAAA,CAAG,EAClE,CAAA,CAIDzB,CAAAA,EACCN,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAU2B,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,EAAgB,CAClBA,CAAAA,CAAE,gBAAe,CACjBrB,CAAAA,GACF,CAAA,CACA,aAAA,CAAgBqB,CAAAA,EAAMA,EAAE,eAAA,EAAgB,CACxC,KAAA,CAAO,CACL,GAAGE,CAAAA,CAAW,aAAa,CAAA,CAC3B,UAAA,CAAY,MAAA,CACZ,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,wBACd,CAAA,CACA,YAAA,CAAW,2BAAA,CACX,YAAA,CAAeF,CAAAA,EAAM,CAClBA,CAAAA,CAAE,aAAA,CAAoC,KAAA,CAAM,eAAA,CAC3C,SAAA,CACF,IAAMK,EACJL,CAAAA,CAAE,aAAA,CACF,aAAA,CAAc,aAAa,CAAA,CACzBK,CAAAA,GAAOA,EAAqB,KAAA,CAAM,KAAA,CAAQ,SAAA,EAChD,CAAA,CACA,YAAA,CAAeL,CAAAA,EAAM,CAClBA,CAAAA,CAAE,aAAA,CAAoC,KAAA,CAAM,eAAA,CAC3C,aAAA,CACF,IAAMK,EACJL,CAAAA,CAAE,aAAA,CACF,aAAA,CAAc,aAAa,CAAA,CACzBK,CAAAA,GAAOA,EAAqB,KAAA,CAAM,KAAA,CAAQ,SAAA,EAChD,CAAA,CAEA,QAAA,CAAAhC,GAAAA,CAAC+B,EAAA,CACC,IAAA,CAAK,QAAA,CACL,IAAA,CAAM,EAAA,CACN,KAAA,CAAO,CAAE,KAAA,CAAO,SAAA,CAAW,UAAA,CAAY,aAAc,CAAA,CACvD,CAAA,CACF,GAEJ,CAAA,CAAA,CACF,CAEJ,CACF,EAEA5B,EAAAA,CAAmB,WAAA,CAAc,qBC7YjC,IAAM8B,EAAAA,CAAe,uBAAA,CAKrB,SAASC,EAAAA,EAAmB,CAC1BX,SAAAA,CAAU,IAAM,CACd,GAAI,QAAA,CAAS,cAAA,CAAeU,EAAY,CAAA,CAAG,OAE3C,IAAMvB,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,EAAA,CAAKuB,EAAAA,CACXvB,CAAAA,CAAM,WAAA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA,CAsBpB,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYA,CAAK,EACjC,CAAA,CAAG,EAAE,EACP,CAKA,IAAMyB,EAAAA,CAAiD,CACrD,GAAA,CAAK,eACL,MAAA,CAAQ,cAAA,CACR,IAAA,CAAM,cAAA,CACN,MAAA,CAAQ,cACV,CAAA,CAKMC,EAAAA,CAAmE,CACvE,MAAA,CAAQ,CAAE,eAAA,CAAiB,SAAA,CAAW,MAAO,SAAU,CAAA,CACvD,IAAA,CAAM,CAAE,gBAAiB,SAAA,CAAW,KAAA,CAAO,SAAU,CAAA,CACrD,MAAA,CAAQ,CAAE,eAAA,CAAiB,SAAA,CAAW,MAAO,SAAU,CAAA,CACvD,GAAA,CAAK,CAAE,gBAAiB,SAAA,CAAW,KAAA,CAAO,SAAU,CACtD,EAMMC,EAAAA,CAAyD,CAC7D,OAAA,CAAS,CAAE,gBAAiB,SAAU,CAAA,CACtC,QAAA,CAAU,CAAE,WAAY,2CAA4C,CAAA,CACpE,OAAA,CAAS,CAAE,gBAAiB,aAAA,CAAe,MAAA,CAAQ,mBAAoB,CAAA,CACvE,SAAU,CACR,eAAA,CAAiB,SAAA,CACjB,SAAA,CAAW,8BACb,CACF,CAAA,CAQaC,EAAAA,CAAa1F,GAAM,UAAA,CAC9B,CACE,CACE,IAAA,CAAAc,IACA,KAAA,CAAAJ,CAAAA,CACA,UAAA,CAAYiF,CAAAA,CAAiB,MAC7B,MAAA,CAAAC,CAAAA,CAAS,KAAA,CACT,GAAA,CAAA/B,EACA,KAAA,CAAAC,CAAAA,CACA,GAAGC,GACL,EACAC,CAAAA,GACG,CApGP,IAAA/C,CAAAA,CAsGIqE,IAAiB,CAEjB,GAAM,CAAE,UAAA,CAAA7C,EAAY,OAAA,CAAAlD,CAAAA,CAAS,aAAA,CAAAE,CAAAA,CAAe,QAAA,CAAAI,CAAAA,CAAU,WAAA,CAAAP,CAAY,EAChEjB,EAAAA,EAAU,CAGN,CACJ,UAAA,CAAAwH,EACA,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAIC,WAAAA,CAAY,CACd,EAAA,CAAIrF,IAAK,EAAA,CACT,QAAA,CAAU,CAACrB,CAAAA,EAAiBI,EAC5B,IAAA,CAAM,CACJ,IAAA,CAAM,MAAA,CACN,KAAAiB,GAAAA,CACA,QAAA,CAAUA,GAAAA,CAAK,QACjB,CACF,CAAC,CAAA,CAGKsF,CAAAA,CAAqC,CACzC,SAAA,CAAWC,GAAAA,CAAI,SAAA,CAAU,QAAA,CAASL,CAAS,CAAA,CAC3C,UAAA,CAAAC,CACF,CAAA,CAEMK,IAAchG,WAAAA,CAAY,IAAM,CAC/B4F,CAAAA,EACH5G,GAAA,IAAA,EAAAA,CAAAA,CAAcwB,GAAAA,EAElB,CAAA,CAAG,CAACA,GAAAA,CAAMxB,CAAAA,CAAa4G,CAAU,CAAC,EAG5B,CAACK,CAAAA,CAAYC,CAAa,CAAA,CAAIrC,SAAS,KAAK,CAAA,CAE5CsC,CAAAA,CAAenG,WAAAA,CAClByE,CAAAA,EAAwB,CACvBA,CAAAA,CAAE,eAAA,GACFyB,CAAAA,CAAc,IAAI,CAAA,CAGlB,UAAA,CAAW,IAAM,CACf/D,CAAAA,CAAW3B,GAAAA,CAAK,EAAE,EACpB,CAAA,CAAG,GAAG,EACR,CAAA,CACA,CAACA,GAAAA,CAAK,EAAA,CAAI2B,CAAU,CACtB,EAgBMiE,CAAAA,CAAAA,CAbiBC,CAAAA,EAAmD,CACxE,GAAI,CAACA,CAAAA,CAAM,OAAO,IAAA,CAClB,IAAMC,GAAI,OAAOD,CAAAA,EAAS,QAAA,CAAW,IAAI,IAAA,CAAKA,CAAI,CAAA,CAAIA,CAAAA,CAChDE,GAAM,IAAI,IAAA,CACVC,EAAAA,CAAOF,EAAAA,CAAE,SAAQ,CAAIC,EAAAA,CAAI,OAAA,EAAQ,CACjCE,GAAO,IAAA,CAAK,IAAA,CAAKD,EAAAA,EAAQ,GAAA,CAAO,GAAK,EAAA,CAAK,EAAA,CAAG,CAAA,CAEnD,OAAIC,GAAO,CAAA,CAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAIA,EAAI,CAAC,CAAA,mBAAA,CAAA,CAClCA,EAAAA,GAAS,CAAA,CAAU,eACnBA,EAAAA,GAAS,CAAA,CAAU,cAAA,CAChB,CAAA,EAAGA,EAAI,CAAA,mBAAA,CAChB,CAAA,EAE8BjG,GAAAA,CAAK,OAAO,CAAA,CACpCkG,EAAAA,CAAYlG,GAAAA,CAAK,OAAA,EAAW,IAAI,IAAA,CAAKA,GAAAA,CAAK,OAAO,CAAA,CAAI,IAAI,IAAA,CAGzDmG,EAAAA,CAAAA,CACJhG,CAAAA,CAAAwE,EAAAA,CAAkBlG,CAAO,CAAA,GAAzB,IAAA,CAAA0B,CAAAA,CAA8BwE,EAAAA,CAAkB,SAG5CyB,EAAAA,CAAsC,CAC1C,SAAA,CAAWX,CAAAA,CACP,0CACA,sCAAA,CACJ,cAAA,CAAgBA,CAAAA,CAAa,KAAA,CAAQ,GAAG,IAAA,CAAK,GAAA,CAAI7F,CAAAA,CAAQ,EAAA,CAAI,GAAG,CAAC,CAAA,EAAA,CACnE,CAAA,CAEMyG,EAAiCnC,CAAAA,CACrC,CACE,QAAA,CAAU,UAAA,CACV,GAAGC,CAAAA,CAAW,qBAAqB,CAAA,CACnC,MAAA,CAAQxF,EAAgB,MAAA,CAAS,SAAA,CACjC,UAAA,CAAY,WAAA,CACZ,WAAA,CAAa,MAAA,CACb,OAAA,CAASmG,CAAAA,CAAS,oBAAsB,MAC1C,CAAA,CACAqB,EAAAA,CACAf,CAAAA,CACI,CACE,OAAA,CAAS,EAAA,CACT,SAAA,CAAW,aAAA,CACX,UAAW,oCAAA,CACX,MAAA,CAAQ,EACV,CAAA,CACA,MAAA,CACJK,CAAAA,CAAa,CAAE,aAAA,CAAe,MAAO,CAAA,CAAI,MAAA,CACzCH,CAAAA,CACAc,EAAAA,CACAjC,EAAWpB,CAAG,CAAA,CACdC,CACF,CAAA,CAEA,OACEoB,IAAAA,CAAC,KAAA,CAAA,CACE,GAAGW,CAAAA,CACH,GAAGC,CAAAA,CACJ,GAAA,CAAKC,CAAAA,CACL,cAAA,CAAcjF,IAAK,EAAA,CACnB,IAAA,CAAK,UAAA,CACL,YAAA,CAAYA,IAAK,KAAA,CACjB,QAAA,CAAU,CAAA,CACV,KAAA,CAAOqG,EACP,OAAA,CAASb,GAAAA,CACT,SAAA,CAAYvB,CAAAA,EAAM,CAAA,CACZA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EAAWA,EAAE,GAAA,GAAQ,GAAA,IACjCA,CAAAA,CAAE,cAAA,GACFuB,GAAAA,EAAY,EAEhB,CAAA,CACC,GAAGvC,IAGH,QAAA,CAAA,CAAA,CAAClE,CAAAA,EACAuD,GAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAASqD,CAAAA,CACT,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,GAAGxB,CAAAA,CAAW,2BAA2B,CAAA,CACzC,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,OACR,UAAA,CAAY,MAAA,CACZ,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,uCACd,CAAA,CACA,YAAA,CAAW,4BACX,YAAA,CAAeF,CAAAA,EAAM,CAClBA,CAAAA,CAAE,cAAoC,KAAA,CAAM,OAAA,CAAU,GAAA,CACtDA,CAAAA,CAAE,cAAoC,KAAA,CAAM,eAAA,CAC3C,UACJ,CAAA,CACA,aAAeA,CAAAA,EAAM,CAClBA,CAAAA,CAAE,aAAA,CAAoC,MAAM,OAAA,CAAU,GAAA,CACtDA,CAAAA,CAAE,aAAA,CAAoC,MAAM,eAAA,CAC3C,cACJ,CAAA,CAEA,QAAA,CAAA3B,IAAC+B,CAAAA,CAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,KAAA,CAAO,CAAE,MAAO,SAAU,CAAA,CAAG,CAAA,CAC5D,CAAA,CAIF/B,IAAC,IAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,WACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,SAAA,CACP,GAAG6B,CAAAA,CAAW,WAAW,CAC3B,CAAA,CAEC,SAAAnE,GAAAA,CAAK,KAAA,CACR,CAAA,CAGCA,GAAAA,CAAK,aACJsC,GAAAA,CAAC,GAAA,CAAA,CACC,KAAA,CACE,CACE,SAAU,SAAA,CACV,KAAA,CAAO,SAAA,CACP,GAAG6B,CAAAA,CAAW,MAAM,CAAA,CACpB,QAAA,CAAU,SACV,OAAA,CAAS,aAAA,CACT,eAAA,CAAiB,CAAA,CACjB,gBAAiB,UACnB,CAAA,CAGD,QAAA,CAAAnE,GAAAA,CAAK,YACR,CAAA,CAIDA,GAAAA,CAAK,IAAA,EAAQA,GAAAA,CAAK,KAAK,MAAA,CAAS,CAAA,EAC/BoE,IAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,OAAA,CAAS,MAAA,CACT,QAAA,CAAU,OACV,GAAGD,CAAAA,CAAW,YAAY,CAC5B,EAEC,QAAA,CAAA,CAAAnE,GAAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAKsG,GAC1BhE,GAAAA,CAAC,MAAA,CAAA,CAEC,KAAA,CAAO,CACL,SAAU,SAAA,CACV,GAAG6B,CAAAA,CAAW,uBAAuB,EACrC,eAAA,CAAiB,SAAA,CACjB,KAAA,CAAO,SACT,EAEC,QAAA,CAAAmC,CAAAA,CAAAA,CARIA,CASP,CACD,EACAtG,GAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,EAClBoE,KAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,UAAW,KAAA,CAAO,SAAU,CAAA,CAAG,QAAA,CAAA,CAAA,GAAA,CACpDpE,GAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAAA,CACvB,GAEJ,CAAA,CAIFoE,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,eAAgB,eAAA,CAChB,GAAGD,CAAAA,CAAW,MAAM,CACtB,CAAA,CAGA,QAAA,CAAA,CAAA7B,GAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,SACZ,GAAG6B,CAAAA,CAAW,OAAO,CACvB,EAEC,QAAA,CAAAnE,GAAAA,CAAK,QAAA,EACJoE,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,GAAGD,CAAAA,CAAW,SAAS,CACzB,CAAA,CAEC,QAAA,CAAA,CAAAnE,GAAAA,CAAK,SAAS,MAAA,CACbsC,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKtC,GAAAA,CAAK,QAAA,CAAS,MAAA,CACnB,GAAA,CAAKA,IAAK,QAAA,CAAS,IAAA,CACnB,KAAA,CAAO,CAAE,GAAGmE,CAAAA,CAAW,sBAAsB,CAAE,CAAA,CACjD,EAEA7B,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAG6B,CAAAA,CAAW,sBAAsB,CAAA,CACpC,gBAAiB,SAAA,CACjB,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgB,QAClB,CAAA,CAEA,QAAA,CAAA7B,IAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,WACV,UAAA,CAAY,GAAA,CACZ,KAAA,CAAO,SACT,EAEC,QAAA,CAAAtC,GAAAA,CAAK,QAAA,CAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,WAAA,EAAY,CAC5C,EACF,CAAA,CAEFsC,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,SAAA,CAAW,KAAA,CAAO,SAAU,CAAA,CAClD,QAAA,CAAAtC,GAAAA,CAAK,QAAA,CAAS,KACjB,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAGAoE,IAAAA,CAAC,OACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,GAAGD,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEC,QAAA,CAAA,CAAAyB,CAAAA,EACCxB,IAAAA,CAAC,QACC,KAAA,CAAO,CACL,QAAA,CAAU,SAAA,CACV,QAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGD,CAAAA,CAAW,SAAS,CAAA,CACvB,KAAA,CAAO+B,GAAY,SAAA,CAAY,SACjC,CAAA,CAEA,QAAA,CAAA,CAAA5D,IAAC+B,CAAAA,CAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAM,EAAA,CAAI,CAAA,CAC5BuB,CAAAA,CAAAA,CACH,CAAA,CAED5F,IAAK,QAAA,EACJsC,GAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,GAAG6B,CAAAA,CAAW,uBAAuB,CAAA,CACrC,GAAGO,EAAAA,CAAoB1E,GAAAA,CAAK,QAAQ,CACtC,CAAA,CAEC,QAAA,CAAAyE,EAAAA,CAAezE,GAAAA,CAAK,QAAQ,CAAA,CAC/B,CAAA,CAAA,CAEJ,GACF,CAAA,CAAA,CACF,CAEJ,CACF,EAEA4E,GAAW,WAAA,CAAc,YAAA,CClZlB,IAAM2B,EAAAA,CAAgBrH,EAAAA,CAAM,WAIjC,CACE,CACE,QAAA,CAAAa,GAAAA,CACA,MAAAyG,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,2CAAA,CACd,GAAA,CAAA3D,CAAAA,CACA,MAAAC,CAAAA,CACA,GAAGC,GACL,CAAA,CACAC,IACG,CACH,GAAM,CAAE,OAAA,CAAA5B,CAAQ,CAAA,CAAI/D,EAAAA,EAAU,CACxB,CAACoJ,EAAUC,CAAW,CAAA,CAAIvD,QAAAA,CAAS,KAAK,EACxC,CAACwD,CAAAA,CAAOC,CAAQ,CAAA,CAAIzD,SAAS,EAAE,CAAA,CAC/BG,CAAAA,CAAWC,MAAAA,CAAyB,IAAI,CAAA,CAG9CI,SAAAA,CAAU,IAAM,CACV8C,CAAAA,EAAYnD,CAAAA,CAAS,OAAA,EACvBA,CAAAA,CAAS,QAAQ,KAAA,GAErB,CAAA,CAAG,CAACmD,CAAQ,CAAC,CAAA,CAEb,IAAMI,CAAAA,CAAoB,IAAM,CAC9BH,CAAAA,CAAY,IAAI,CAAA,CAChBE,EAAS,EAAE,EACb,CAAA,CAEME,CAAAA,CAAe,IAAM,CACzBJ,CAAAA,CAAY,KAAK,CAAA,CACjBE,EAAS,EAAE,CAAA,CACXL,CAAAA,EAAA,IAAA,EAAAA,IACF,CAAA,CAEMQ,CAAAA,CAAe,IAAM,CArD/B,IAAA9G,CAAAA,CAsDM,IAAM+G,CAAAA,CAAeL,EAAM,IAAA,EAAK,CAChC,GAAI,CAACK,EAAc,CACjBF,CAAAA,EAAa,CACb,MACF,CAEA,IAAMzF,CAAAA,CAAU,CAAE,KAAA,CAAO2F,CAAa,CAAA,CAElCV,CAAAA,CACFA,CAAAA,CAAMjF,CAAO,EAEbD,CAAAA,CAAQvB,GAAAA,CAAUwB,CAAO,CAAA,CAG3BuF,EAAS,EAAE,CAAA,CAAA,CAEX3G,CAAAA,CAAAqD,CAAAA,CAAS,UAAT,IAAA,EAAArD,CAAAA,CAAkB,KAAA,GACpB,CAAA,CAEMgH,CAAAA,CAAiBlD,CAAAA,EAA6C,CAC9DA,CAAAA,CAAE,MAAQ,OAAA,EACZA,CAAAA,CAAE,cAAA,EAAe,CACjBgD,GAAa,EACJhD,CAAAA,CAAE,GAAA,GAAQ,QAAA,EACnB+C,IAEJ,CAAA,CAGA,OAAIL,CAAAA,CAEAvC,KAAC,KAAA,CAAA,CACC,GAAA,CAAKlB,CAAAA,CACL,KAAA,CAAOgB,EACL,CACE,GAAGC,CAAAA,CAAW,gBAAgB,EAC9B,eAAA,CAAiB,SAAA,CACjB,SAAA,CAAW,8BAAA,CACX,OAAQ,mBACV,CAAA,CACAA,CAAAA,CAAWpB,CAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAGC,IAEJ,QAAA,CAAA,CAAAX,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKkB,EACL,IAAA,CAAK,MAAA,CACL,KAAA,CAAOqD,CAAAA,CACP,SAAW5C,CAAAA,EAAM6C,CAAAA,CAAS7C,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,SAAA,CAAWkD,CAAAA,CACX,MAAA,CAAQ,IAAM,CAEZ,UAAA,CAAW,IAAM,CACVN,EAAM,IAAA,EAAK,EACdG,CAAAA,GAEJ,EAAG,GAAG,EACR,CAAA,CACA,WAAA,CAAaN,CAAAA,CACb,KAAA,CAAO,CACL,KAAA,CAAO,OACP,GAAGvC,CAAAA,CAAW,aAAa,CAAA,CAC3B,SAAU,UAAA,CACV,eAAA,CAAiB,aAAA,CACjB,MAAA,CAAQ,OACR,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,SACT,EACF,CAAA,CACAC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,eAAgB,UAAA,CAChB,GAAGD,CAAAA,CAAW,YAAY,CAC5B,CAAA,CAEA,QAAA,CAAA,CAAA7B,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS0E,CAAAA,CACT,MAAO,CACL,GAAG7C,CAAAA,CAAW,WAAW,EACzB,QAAA,CAAU,SAAA,CACV,KAAA,CAAO,SAAA,CACP,WAAY,MAAA,CACZ,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SACV,CAAA,CACD,QAAA,CAAA,cAAA,CAED,CAAA,CACA7B,GAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS2E,CAAAA,CACT,SAAU,CAACJ,CAAAA,CAAM,IAAA,EAAK,CACtB,MACEA,CAAAA,CAAM,IAAA,EAAK,CACP,CACE,GAAG1C,CAAAA,CAAW,mBAAmB,CAAA,CACjC,SAAU,SAAA,CACV,UAAA,CAAY,GAAA,CACZ,eAAA,CAAiB,UACjB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,MAAA,CACR,OAAQ,SAAA,CACR,UAAA,CAAY,wBACd,CAAA,CACA,CACE,GAAGA,CAAAA,CAAW,mBAAmB,CAAA,CACjC,SAAU,SAAA,CACV,UAAA,CAAY,GAAA,CACZ,eAAA,CAAiB,UACjB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,MAAA,CACR,OAAQ,aACV,CAAA,CAEP,QAAA,CAAA,cAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAMFC,IAAAA,CAAC,QAAA,CAAA,CACC,IAAKlB,CAAAA,CACL,IAAA,CAAK,QAAA,CACL,OAAA,CAAS6D,EACT,KAAA,CAAO7C,CAAAA,CACL,CACE,KAAA,CAAO,OACP,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAGC,CAAAA,CAAW,4BAA4B,CAAA,CAC1C,QAAA,CAAU,WACV,KAAA,CAAO,SAAA,CACP,UAAA,CAAY,MAAA,CACZ,OAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,qCACd,CAAA,CACAA,CAAAA,CAAWpB,CAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAIC,GAAAA,CAEL,UAAAX,GAAAA,CAAC+B,CAAAA,CAAA,CAAK,IAAA,CAAK,MAAM,IAAA,CAAM,EAAA,CAAI,CAAA,CAC3B/B,GAAAA,CAAC,QAAK,QAAA,CAAA,2BAAA,CAAK,CAAA,CAAA,CACb,CAEJ,CACF,EAEAiE,EAAAA,CAAc,WAAA,CAAc,eAAA,CClM5B,IAAMhC,EAAAA,CAAe,yBAAA,CAKrB,SAAS6C,IAAqB,CAC5BvD,SAAAA,CAAU,IAAM,CACd,GAAI,QAAA,CAAS,cAAA,CAAeU,EAAY,CAAA,CAAG,OAE3C,IAAMvB,CAAAA,CAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CAC5CA,CAAAA,CAAM,EAAA,CAAKuB,EAAAA,CACXvB,EAAM,WAAA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA,CAYpB,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYA,CAAK,EACjC,CAAA,CAAG,EAAE,EACP,CAKA,IAAMqE,EAAAA,CAA2D,CAC/D,OAAA,CAAS,CAAE,eAAA,CAAiB,uBAAwB,CAAA,CACpD,QAAA,CAAU,CAAE,UAAA,CAAY,8CAA+C,CAAA,CACvE,OAAA,CAAS,CAAE,eAAA,CAAiB,aAAA,CAAe,MAAA,CAAQ,mBAAoB,EACvE,QAAA,CAAU,CACR,eAAA,CAAiB,SAAA,CACjB,SAAA,CAAW,gEACb,CACF,CAAA,CAQaC,EAAAA,CAAepI,EAAAA,CAAM,UAAA,CAChC,CAAC,CAAE,MAAA,CAAAoB,GAAAA,CAAQ,KAAA,CAAAzC,EAAO,KAAA,CAAA+B,CAAAA,CAAO,KAAA,CAAAoD,CAAAA,CAAO,GAAA,CAAKuE,CAAAA,CAAS,GAAGtE,CAAM,CAAA,CAAGC,CAAAA,GAAQ,CAhEpE,IAAA/C,EAAAA,CAkEIiH,EAAAA,EAAmB,CAEnB,GAAM,CACJ,YAAA,CAAAlF,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,OAAA,CAAA1D,CAAAA,CACA,eAAA,CAAAG,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,QAAA,CAAAE,CACF,CAAA,CAAIxB,EAAAA,EAAU,CAGR,CACJ,WAAAwH,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAIC,WAAAA,CAAY,CACd,EAAA,CAAI/E,GAAAA,CAAO,GACX,QAAA,CAAU,CAAC1B,CAAAA,EAAmBG,CAChC,CAAC,CAAA,CAGK2E,CAAAA,CAAW6D,CAAAA,CAAUpD,CAAAA,CAAWoD,CAAO,CAAA,CAAI,MAAA,CAC3CjC,GAAAA,CAAqCpB,CAAAA,CACzC,CACE,SAAA,CAAWqB,IAAI,SAAA,CAAU,QAAA,CAASL,CAAS,CAAA,CAC3C,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAWC,CAAAA,CACP,MAAA,CACA,yCAAA,CACJ,cAAA,CAAgBA,CAAAA,CAAa,KAAA,CAAQ,CAAA,EAAGxF,CAAAA,CAAQ,EAAE,IACpD,CAAA,CACAoD,CAAAA,CACAU,CACF,CAAA,CAGM8D,CAAAA,CACJlH,GAAAA,CAAO,KAAA,GAAU,MAAA,EAAazC,CAAAA,CAAM,MAAA,EAAUyC,GAAAA,CAAO,KAAA,CAGjDmH,CAAAA,CAAUpF,OAAAA,CAAQ,IAAMxE,CAAAA,CAAM,IAAKgD,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAAG,CAAChD,CAAK,CAAC,CAAA,CAGvD6J,CAAAA,CAAqBb,CAAAA,EAAkB,CAC3C3E,CAAAA,CAAa5B,GAAAA,CAAO,EAAA,CAAI,CAAE,KAAA,CAAAuG,CAAM,CAAC,EACnC,CAAA,CAEMlB,EAAAA,CAAe,IAAM,CACzBxD,CAAAA,CAAa7B,GAAAA,CAAO,EAAE,EACxB,CAAA,CAEMqH,CAAAA,CAAuB,IAAM,CACjCzF,CAAAA,CAAa5B,GAAAA,CAAO,GAAI,CAAE,SAAA,CAAW,CAACA,GAAAA,CAAO,SAAU,CAAC,EAC1D,CAAA,CAGM6F,EAAAA,CAAAA,CACJhG,EAAAA,CAAAkH,EAAAA,CAAoB5I,CAAO,CAAA,GAA3B,IAAA,CAAA0B,EAAAA,CAAgCkH,EAAAA,CAAoB,SAEhDO,EAAAA,CAAmC1D,CAAAA,CACvC,CACE,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAGC,CAAAA,CAAW,YAAY,CAAA,CAC1B,UAAA,CAAY,oBAAA,CACZ,OAAA,CAASiB,CAAAA,CAAa,EAAA,CAAM,EAC5B,GAAI9E,GAAAA,CAAO,SAAA,CACP,CAAE,KAAA,CAAO,MAAA,CAAQ,QAAA,CAAU,MAAA,CAAQ,QAAA,CAAU,MAAO,CAAA,CACpD,CAAE,UAAA,CAAY,CAAE,CACtB,CAAA,CACA6F,GACAb,GACF,CAAA,CAEA,OACElB,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKa,CAAAA,CACL,IAAA,CAAK,OAAA,CACL,YAAA,CAAY,CAAA,EAAG3E,GAAAA,CAAO,KAAK,CAAA,aAAA,CAAA,CAC3B,KAAA,CAAOsH,EAAAA,CACN,GAAG3E,CAAAA,CAGJ,QAAA,CAAA,CAAAX,GAAAA,CAACG,EAAAA,CAAA,CACC,MAAA,CAAQnC,GAAAA,CACR,SAAA,CAAWzC,CAAAA,CAAM,MAAA,CACjB,aAAA,CAAgBkB,CAAAA,CAA+B,MAAA,CAApB2I,CAAAA,CAC3B,QAAA,CAAW3I,CAAAA,CAA0B,OAAf4G,EAAAA,CACtB,gBAAA,CAAkBgC,CAAAA,CAClB,eAAA,CAAiB,CACf,GAAG5C,CAAAA,CACH,GAAGC,CAAAA,CACH,KAAA,CAAO,CACL,MAAA,CAAQpG,CAAAA,CAAkB,MAAA,CAAS,SACrC,CACF,EACF,CAAA,CAGC,CAAC0B,GAAAA,CAAO,SAAA,EACP8D,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,IAAA,CAAM,CAAA,CACN,GAAGD,CAAAA,CAAW,WAAW,CAAA,CACzB,SAAA,CAAW,MAAA,CACX,UAAW,QAAA,CACX,SAAA,CAAW,OACb,CAAA,CACA,IAAA,CAAK,MAAA,CACL,YAAA,CAAY,CAAA,EAAG7D,GAAAA,CAAO,KAAK,CAAA,0BAAA,CAAA,CAE3B,QAAA,CAAA,CAAAgC,GAAAA,CAACuF,eAAAA,CAAA,CACC,KAAA,CAAOJ,EACP,QAAA,CAAUK,2BAAAA,CAET,QAAA,CAAAjK,CAAAA,CAAM,GAAA,CAAI,CAACmC,CAAAA,CAAM+H,CAAAA,GAChBzF,GAAAA,CAACsC,EAAAA,CAAA,CAAyB,IAAA,CAAM5E,CAAAA,CAAM,KAAA,CAAO+H,CAAAA,CAAAA,CAA5B/H,CAAAA,CAAK,EAAkC,CACzD,CAAA,CACH,CAAA,CAGCnC,CAAAA,CAAM,MAAA,GAAW,CAAA,EAChByE,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,OAAQ,MAAA,CACR,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,SACT,CAAA,CACD,QAAA,CAAA,yDAAA,CAED,CAAA,CAAA,CAEJ,CAAA,CAID,CAAChC,GAAAA,CAAO,SAAA,EAAazB,CAAAA,EAAgB,CAACE,CAAAA,EAAY,CAACyI,GAClDlF,GAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAG6B,CAAAA,CAAW,WAAW,CAAE,CAAA,CACvC,QAAA,CAAA7B,GAAAA,CAACiE,EAAAA,CAAA,CAAc,QAAA,CAAUjG,GAAAA,CAAO,EAAA,CAAI,EACtC,CAAA,CAID,CAACA,GAAAA,CAAO,SAAA,EAAakH,CAAAA,EACpBpD,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAGD,CAAAA,CAAW,WAAW,CAAA,CACzB,QAAA,CAAU,SAAA,CACV,SAAA,CAAW,SACX,KAAA,CAAO,SACT,CAAA,CACD,QAAA,CAAA,CAAA,iCAAA,CACa7D,GAAAA,CAAO,KAAA,CAAM,SAAA,CAAA,CAC3B,CAAA,CAAA,CAEJ,CAEJ,CACF,EAEAgH,EAAAA,CAAa,WAAA,CAAc,cAAA,CC3NpB,IAAMU,EAAAA,CAAkB9I,EAAAA,CAAM,UAAA,CAInC,CACE,CACE,KAAA,CAAAsH,GAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,2CAAA,CACd,GAAA,CAAA3D,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,GAAAA,GACG,CACH,GAAM,CAAE,SAAA,CAAAlB,CAAAA,CAAW,OAAA,CAAAvD,CAAQ,CAAA,CAAIlB,EAAAA,EAAU,CACnC,CAACoJ,CAAAA,CAAUC,CAAW,CAAA,CAAIvD,QAAAA,CAAS,KAAK,CAAA,CACxC,CAACwD,EAAOC,CAAQ,CAAA,CAAIzD,QAAAA,CAAS,EAAE,CAAA,CAC/BG,CAAAA,CAAWC,MAAAA,CAAyB,IAAI,CAAA,CAG9CI,SAAAA,CAAU,IAAM,CACV8C,CAAAA,EAAYnD,CAAAA,CAAS,OAAA,EACvBA,CAAAA,CAAS,QAAQ,KAAA,GAErB,CAAA,CAAG,CAACmD,CAAQ,CAAC,CAAA,CAEb,IAAMI,CAAAA,CAAoB,IAAM,CAC9BH,CAAAA,CAAY,IAAI,CAAA,CAChBE,CAAAA,CAAS,EAAE,EACb,CAAA,CAEME,CAAAA,CAAe,IAAM,CACzBJ,CAAAA,CAAY,KAAK,CAAA,CACjBE,CAAAA,CAAS,EAAE,CAAA,CACXL,CAAAA,EAAA,IAAA,EAAAA,CAAAA,GACF,CAAA,CAEMQ,CAAAA,CAAe,IAAM,CACzB,IAAMC,CAAAA,CAAeL,CAAAA,CAAM,IAAA,EAAK,CAChC,GAAI,CAACK,CAAAA,CAAc,CACjBF,CAAAA,EAAa,CACb,MACF,CAEA,IAAM/E,CAAAA,CAAY,CAAE,KAAA,CAAOiF,CAAa,CAAA,CAEpCV,GAAAA,CACFA,GAAAA,CAAMvE,CAAS,CAAA,CAEfD,CAAAA,CAAUC,CAAS,CAAA,CAGrB2E,CAAAA,CAAY,KAAK,CAAA,CACjBE,CAAAA,CAAS,EAAE,EACb,CAAA,CAEMK,CAAAA,CAAiBlD,GAA6C,CAC9DA,CAAAA,CAAE,GAAA,GAAQ,OAAA,EACZA,CAAAA,CAAE,cAAA,EAAe,CACjBgD,CAAAA,EAAa,EACJhD,CAAAA,CAAE,GAAA,GAAQ,QAAA,EACnB+C,CAAAA,GAEJ,CAAA,CAGMiB,CAAAA,CAAAA,CAAyC,IAAM,CACnD,OAAQxJ,CAAAA,EACN,KAAK,UAAA,CACH,OAAO,CACL,UAAA,CACE,0EACJ,CAAA,CACF,KAAK,SAAA,CACH,OAAO,CAAE,MAAA,CAAQ,qBAAsB,UAAA,CAAY,aAAc,CAAA,CAGnE,QACE,OAAO,CAAE,eAAA,CAAiB,uBAAwB,CACtD,CACF,CAAA,GAAG,CAGH,OAAIkI,CAAAA,CAEAvC,IAAAA,CAAC,KAAA,CAAA,CACC,IAAKlB,GAAAA,CACL,KAAA,CAAOgB,CAAAA,CACL,CAAE,UAAA,CAAY,CAAA,CAAG,GAAGC,CAAAA,CAAW,gBAAgB,CAAE,CAAA,CACjD8D,CAAAA,CACA9D,CAAAA,CAAWpB,CAAG,CAAA,CACdC,CACF,EACC,GAAGC,CAAAA,CAEJ,QAAA,CAAA,CAAAX,GAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKkB,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,KAAA,CAAOqD,CAAAA,CACP,QAAA,CAAW5C,CAAAA,EAAM6C,CAAAA,CAAS7C,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CACxC,SAAA,CAAWkD,CAAAA,CACX,WAAA,CAAaT,CAAAA,CACb,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,GAAGvC,CAAAA,CAAW,sBAAsB,CAAA,CACpC,QAAA,CAAU,UAAA,CACV,eAAA,CAAiB,UACjB,MAAA,CAAQ,mBAAA,CACR,OAAA,CAAS,MAAA,CACT,KAAA,CAAO,SAAA,CACP,SAAA,CAAW,YACb,CAAA,CACF,CAAA,CACAC,IAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,UAAA,CAChB,GAAGD,CAAAA,CAAW,YAAY,CAC5B,CAAA,CAEA,QAAA,CAAA,CAAA7B,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS0E,CAAAA,CACT,KAAA,CAAO,CACL,GAAG7C,CAAAA,CAAW,aAAa,CAAA,CAC3B,QAAA,CAAU,UAAA,CACV,KAAA,CAAO,SAAA,CACP,UAAA,CAAY,MAAA,CACZ,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SACV,CAAA,CACD,QAAA,CAAA,cAAA,CAED,EACA7B,GAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS2E,CAAAA,CACT,QAAA,CAAU,CAACJ,CAAAA,CAAM,IAAA,EAAK,CACtB,KAAA,CACEA,CAAAA,CAAM,IAAA,EAAK,CACP,CACE,GAAG1C,CAAAA,CAAW,wBAAwB,CAAA,CACtC,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,eAAA,CAAiB,SAAA,CACjB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,wBACd,CAAA,CACA,CACE,GAAGA,CAAAA,CAAW,wBAAwB,CAAA,CACtC,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,GAAA,CACZ,eAAA,CAAiB,SAAA,CACjB,KAAA,CAAO,SAAA,CACP,MAAA,CAAQ,MAAA,CACR,OAAQ,aACV,CAAA,CAEP,QAAA,CAAA,cAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAMFC,IAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKlB,GAAAA,CACL,IAAA,CAAK,QAAA,CACL,OAAA,CAAS6D,CAAAA,CACT,KAAA,CAAO7C,CAAAA,CACL,CACE,UAAA,CAAY,CAAA,CACZ,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAGC,CAAAA,CAAW,kBAAkB,CAAA,CAChC,MAAA,CAAQ,oBAAA,CACR,MAAO,SAAA,CACP,UAAA,CAAY,MAAA,CACZ,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,WAAA,CACZ,SAAA,CAAW,GACb,CAAA,CACAA,CAAAA,CAAWpB,CAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAIC,EAEL,QAAA,CAAA,CAAAX,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAG6B,CAAAA,CAAW,wBAAwB,CAAA,CACtC,MAAA,CAAQ,yBAAA,CACR,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,UAAA,CAAY,WACd,CAAA,CAEA,QAAA,CAAA7B,GAAAA,CAAC+B,CAAAA,CAAA,CAAK,IAAA,CAAK,KAAA,CAAM,IAAA,CAAM,EAAA,CAAI,CAAA,CAC7B,CAAA,CACA/B,GAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,kCAAA,CAExD,CAAA,CAAA,CACF,CAEJ,CACF,EAEA0F,EAAAA,CAAgB,WAAA,CAAc,iBAAA,CChMvB,IAAME,EAAAA,CAAchJ,EAAAA,CAAM,UAAA,CAC/B,CACE,CAEE,OAAA,CAASiJ,GAAAA,CACT,KAAA,CAAOC,CAAAA,CAEP,cAAA,CAAAC,CAAAA,CAAiB,GACjB,YAAA,CAAAC,CAAAA,CAAe,EAAC,CAEhB,eAAA,CAAAxK,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,iBAAA,CAAA+J,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAEA,OAAA,CAAA/J,CAAAA,CAAU,UAAA,CACV,MAAAC,CAAAA,CAAQ,MAAA,CAER,cAAA,CAAAI,CAAAA,CAAiB,KAAA,CACjB,YAAA,CAAAD,GAAAA,CAAe,IAAA,CACf,eAAA,CAAAD,CAAAA,CAAkB,IAAA,CAClB,aAAA,CAAAD,CAAAA,CAAgB,IAAA,CAChB,QAAA,CAAAI,CAAAA,CAAW,MAEX,cAAA,CAAA0J,EAAAA,CAAiB,GAAA,CACjB,cAAA,CAAAC,CAAAA,CAAiB,GAAA,CAEjB,eAAA,CAAAC,EAAAA,CAAkB,IAAA,CAClB,gBAAA,CAAAC,EAAAA,CACA,YAAA,CAAAC,EAAAA,CAAe,CAAA,CACf,SAAA,CAAAC,CAAAA,CAAY,KAEZ,GAAA,CAAA/F,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAGC,EACL,CAAA,CACAC,EAAAA,GACG,CAEH,GAAM,CAAC6F,EAAAA,CAAWC,EAAY,CAAA,CAAI3F,QAAAA,CAAS,KAAK,EAChDQ,SAAAA,CAAU,IAAM,CACdmF,EAAAA,CAAa,IAAI,EACnB,CAAA,CAAG,EAAE,CAAA,CAGL,GAAM,CAACC,EAAAA,CAAiBC,EAAkB,CAAA,CACxC7F,QAAAA,CAA6BgF,CAAc,CAAA,CACvC,CAACc,EAAAA,CAAeC,EAAgB,CAAA,CACpC/F,QAAAA,CAA2BiF,CAAY,CAAA,CAGnC,CAACe,CAAAA,CAAUC,GAAW,CAAA,CAAIjG,QAAAA,CAAwB,IAAI,CAAA,CACtD,CAACkG,EAAYC,CAAa,CAAA,CAAInG,QAAAA,CAClC,IACF,CAAA,CAGMoG,CAAAA,CAAetB,GAAAA,GAAsB,MAAA,CACrCvK,CAAAA,CAAU6L,CAAAA,CAAetB,GAAAA,CAAoBc,EAAAA,CAC7CpL,CAAAA,CAAQ4L,CAAAA,CAAgBrB,CAAAA,EAAA,IAAA,CAAAA,EAAmB,EAAC,CAAKe,EAAAA,CAGjD/D,EAAAA,CAAaiE,CAAAA,GAAa,IAAA,CAC1BK,EAAAA,CAAmBH,CAAAA,GAAe,QAAA,CAGlCI,EAAAA,CAAUC,UAAAA,CACdC,SAAAA,CAAUC,aAAAA,CAAe,CACvB,oBAAA,CAAsB,CAAE,SAAU,CAAE,CACtC,CAAC,CAAA,CACDD,SAAAA,CAAUE,cAAc,CAC1B,CAAA,CAGMC,GAAsBxK,WAAAA,CACzBsC,CAAAA,EAAmC,CAC7B2H,CAAAA,EACHP,EAAAA,CAAmBpH,CAAU,CAAA,CAE/BhE,CAAAA,EAAA,MAAAA,CAAAA,CAAkBgE,CAAAA,EACpB,CAAA,CACA,CAAC2H,CAAAA,CAAc3L,CAAe,CAChC,CAAA,CAGMmM,CAAAA,CAAoBzK,WAAAA,CACvBgC,CAAAA,EAA+B,CACzBiI,CAAAA,EACHL,EAAAA,CAAiB5H,CAAQ,CAAA,CAE3BzD,GAAA,IAAA,EAAAA,CAAAA,CAAgByD,CAAAA,EAClB,CAAA,CACA,CAACiI,CAAAA,CAAc1L,CAAa,CAC9B,CAAA,CAGMmM,CAAAA,CAAiB1K,WAAAA,CACpBO,CAAAA,EACQlC,CAAAA,CACJ,MAAA,CAAQmC,CAAAA,EAASA,CAAAA,CAAK,WAAaD,CAAQ,CAAA,CAC3C,IAAA,CAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAG,CAnJvB,IAAAC,CAAAA,CAAAC,CAAAA,CAmJ2B,OAAA,CAAA,CAAAD,CAAAA,CAAAF,CAAAA,CAAE,KAAA,GAAF,IAAA,CAAAE,CAAAA,CAAW,KAAMC,CAAAA,CAAAF,CAAAA,CAAE,KAAA,GAAF,IAAA,CAAAE,CAAAA,CAAW,CAAA,CAAA,CAAE,CAAA,CAEnD,CAACvC,CAAK,CACR,CAAA,CAGMsM,EAAAA,CAAqB3K,WAAAA,CACxBiB,CAAAA,EAAkC,CA1JzC,IAAAN,EA2JQ,IAAMH,CAAAA,CAAOnC,CAAAA,CAAM,IAAA,CAAMgD,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOJ,CAAM,CAAA,CAC9C,OAAA,CAAON,CAAAA,CAAAH,CAAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAM,QAAA,GAAN,IAAA,CAAAG,EAAkB,IAC3B,CAAA,CACA,CAACtC,CAAK,CACR,CAAA,CAGMuM,CAAAA,CAAW5K,WAAAA,CACd6K,CAAAA,EACQzM,CAAAA,CAAQ,IAAA,CAAMoD,CAAAA,EAAQA,CAAAA,CAAI,EAAA,GAAOqJ,CAAE,CAAA,CAE5C,CAACzM,CAAO,CACV,CAAA,CAGM0M,EAAAA,CAAkB9K,WAAAA,CACrB+K,CAAAA,EAA0B,CACzB,GAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAID,CAAAA,CACbF,CAAAA,CAAKG,CAAAA,CAAO,EAAA,CACZC,EAAOL,CAAAA,CAASC,CAAE,CAAA,CAAI,QAAA,CAAW,MAAA,CAEvCf,GAAAA,CAAYe,CAAE,CAAA,CACdb,CAAAA,CAAciB,CAAI,CAAA,CAClBlC,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAoBkC,CAAAA,CAAMJ,CAAAA,EAC5B,EACA,CAACD,CAAAA,CAAU7B,CAAiB,CAC9B,CAAA,CAGMmC,EAAAA,CAAiBlL,WAAAA,CACpB+K,CAAAA,EAAyB,CACxB,GAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,IAAA,CAAAG,CAAK,CAAA,CAAIJ,EACzB,GAAI,CAACI,CAAAA,CAAM,OAEX,IAAMtB,CAAAA,CAAWmB,CAAAA,CAAO,EAAA,CAClBI,CAAAA,CAASD,CAAAA,CAAK,EAAA,CAGpB,GAAIP,CAAAA,CAASf,CAAQ,CAAA,CAAG,OAExB,IAAMwB,CAAAA,CAAiBV,EAAAA,CAAmBd,CAAQ,CAAA,CAC5CyB,CAAAA,CAAeV,CAAAA,CAASQ,CAAM,CAAA,CAChCA,CAAAA,CACAT,EAAAA,CAAmBS,CAAM,CAAA,CAE7B,GAAI,EAAA,CAACC,CAAAA,EAAkB,CAACC,IAGpBD,CAAAA,GAAmBC,CAAAA,CAAc,CACnC,IAAMC,EAAAA,CAAcb,CAAAA,CAAeW,CAAc,CAAA,CAC3CG,EAAAA,CAAYd,CAAAA,CAAeY,CAAY,CAAA,CAEzBC,EAAAA,CAAY,SAAA,CAAWlK,CAAAA,EAAMA,EAAE,EAAA,GAAOwI,CAAQ,CAAA,KAC5D4B,EAAAA,CAAYb,CAAAA,CAASQ,CAAM,CAAA,CAC7BI,EAAAA,CAAU,MAAA,CACVA,EAAAA,CAAU,SAAA,CAAWnK,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAO+J,CAAM,CAAA,CAGxCM,EAAatN,CAAAA,CAAQ,IAAA,CAAMiD,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOiK,CAAY,EAC5D,GAAII,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAY,KAAA,EAASF,EAAAA,CAAU,MAAA,EAAUE,CAAAA,CAAW,KAAA,CACtD,OAYF,IAAMC,EAAAA,CARWtN,CAAAA,CAAM,GAAA,CAAKmC,CAAAA,EACtBA,CAAAA,CAAK,EAAA,GAAOqJ,CAAAA,CACP,CAAE,GAAGrJ,CAAAA,CAAM,QAAA,CAAU8K,CAAAA,CAAc,KAAA,CAAOG,EAAU,CAAA,CAEtDjL,CACR,CAAA,CAG+B,GAAA,CAAKA,CAAAA,EAAS,CAnOxD,IAAAG,EAAAA,CAoOY,GAAIH,CAAAA,CAAK,QAAA,GAAa8K,CAAAA,EAAgB9K,CAAAA,CAAK,EAAA,GAAOqJ,CAAAA,CAAU,CAC1D,IAAM+B,EAAAA,CAAAA,CAAejL,GAAAH,CAAAA,CAAK,KAAA,GAAL,IAAA,CAAAG,EAAAA,CAAc,CAAA,CACnC,GAAIiL,EAAAA,EAAgBH,EAAAA,CAClB,OAAO,CAAE,GAAGjL,CAAAA,CAAM,KAAA,CAAOoL,EAAAA,CAAe,CAAE,CAE9C,CACA,OAAOpL,CACT,CAAC,CAAA,CAEDiK,CAAAA,CAAkBkB,EAAc,EAClC,CACF,CAAA,CACA,CACEtN,CAAAA,CACAD,CAAAA,CACAuM,EAAAA,CACAD,CAAAA,CACAD,CAAAA,CACAG,CACF,CACF,CAAA,CAGMiB,EAAAA,CAAgB7L,WAAAA,CACnB+K,CAAAA,EAAwB,CACvB,GAAM,CAAE,MAAA,CAAAC,CAAAA,CAAQ,IAAA,CAAAG,CAAK,CAAA,CAAIJ,CAAAA,CACnBe,CAAAA,CAAYjC,CAAAA,CACZkC,CAAAA,CAAchC,EASpB,GAPAD,GAAAA,CAAY,IAAI,CAAA,CAChBE,CAAAA,CAAc,IAAI,CAAA,CAEd8B,CAAAA,EAAaC,CAAAA,GACf/C,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAkB+C,CAAAA,CAAaD,CAAAA,CAAAA,CAAAA,CAG7B,CAACX,CAAAA,CAAM,OAEX,IAAMa,CAAAA,CAAchB,CAAAA,CAAO,EAAA,CACrBI,CAAAA,CAASD,CAAAA,CAAK,EAAA,CAEpB,GAAIa,CAAAA,GAAgBZ,CAAAA,CAAQ,OAG5B,GAAIR,CAAAA,CAASoB,CAAW,CAAA,EAAKpB,CAAAA,CAASQ,CAAM,CAAA,CAAG,CAC7C,IAAMa,EAAAA,CAAW7N,CAAAA,CAAQ,SAAA,CAAWiD,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAO2K,CAAW,CAAA,CACxDE,EAAAA,CAAW9N,CAAAA,CAAQ,SAAA,CAAWiD,CAAAA,EAAMA,CAAAA,CAAE,KAAO+J,CAAM,CAAA,CAEzD,GAAIa,EAAAA,GAAaC,EAAAA,CAAU,CACzB,IAAM5J,CAAAA,CAAa6J,SAAAA,CAAU/N,CAAAA,CAAS6N,EAAAA,CAAUC,EAAQ,CAAA,CACxD1B,EAAAA,CAAoBlI,CAAU,CAAA,CAC9B7D,GAAA,IAAA,EAAAA,CAAAA,CAAe,CAAE,QAAA,CAAUuN,CAAAA,CAAa,OAAA,CAASE,EAAS,CAAA,EAC5D,CACA,MACF,CAGA,IAAMb,EAAAA,CAAiBV,EAAAA,CAAmBqB,CAAW,CAAA,CAC/CV,GAAeV,CAAAA,CAASQ,CAAM,CAAA,CAChCA,CAAAA,CACAT,EAAAA,CAAmBS,CAAM,CAAA,CAE7B,GAAI,EAAA,CAACC,EAAAA,EAAkB,CAACC,EAAAA,CAAAA,CAExB,GAAID,EAAAA,GAAmBC,EAAAA,CAAc,CACnC,IAAMc,EAAAA,CAAc1B,CAAAA,CAAeW,EAAc,CAAA,CAC3CY,EAAAA,CAAWG,EAAAA,CAAY,SAAA,CAAW/K,EAAAA,EAAMA,EAAAA,CAAE,EAAA,GAAO2K,CAAW,CAAA,CAC5DE,CAAAA,CAAWtB,CAAAA,CAASQ,CAAM,CAAA,CAC5BgB,GAAY,MAAA,CAAS,CAAA,CACrBA,EAAAA,CAAY,SAAA,CAAW/K,EAAAA,EAAMA,EAAAA,CAAE,EAAA,GAAO+J,CAAM,CAAA,CAEhD,GAAIa,EAAAA,GAAaC,CAAAA,EAAYD,EAAAA,GAAa,EAAA,EAAMC,CAAAA,GAAa,EAAA,CAAI,CAC/D,IAAMG,EAAAA,CAAuBF,SAAAA,CAC3BC,EAAAA,CACAH,EAAAA,CACAC,CACF,CAAA,CAGMlK,EAAAA,CAAW3D,CAAAA,CAAM,GAAA,CAAKmC,CAAAA,EAAS,CACnC,GAAIA,CAAAA,CAAK,QAAA,GAAa6K,EAAAA,CAAgB,CACpC,IAAMiB,EAAAA,CAAWD,EAAAA,CAAqB,SAAA,CACnChL,EAAAA,EAAMA,EAAAA,CAAE,EAAA,GAAOb,CAAAA,CAAK,EACvB,CAAA,CACA,OAAO,CAAE,GAAGA,CAAAA,CAAM,KAAA,CAAO8L,EAAS,CACpC,CACA,OAAO9L,CACT,CAAC,CAAA,CAEDiK,CAAAA,CAAkBzI,EAAQ,CAAA,CAC1BxD,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAa,CACX,MAAA,CAAQwN,CAAAA,CACR,YAAA,CAAcX,EAAAA,CACd,WAAYC,EAAAA,CACZ,OAAA,CAASY,CACX,CAAA,EACF,CACF,CAAA,KAEE1N,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAa,CACX,MAAA,CAAQwN,CAAAA,CACR,YAAA,CAAcX,EAAAA,CACd,UAAA,CAAYC,EAAAA,CACZ,QAAS,CACX,CAAA,EAEJ,CAAA,CACA,CACEzB,CAAAA,CACAE,CAAAA,CACA3L,CAAAA,CACAC,CAAAA,CACAsM,GACAD,CAAAA,CACAF,EAAAA,CACAC,CAAAA,CACAG,CAAAA,CACApM,CAAAA,CACAC,CAAAA,CACAuK,CACF,CACF,EAGMuD,EAAAA,CAAa1J,OAAAA,CAAQ,IACrB,CAACgH,CAAAA,EAAYE,CAAAA,GAAe,MAAA,CAAe,IAAA,CACxC1L,CAAAA,CAAM,IAAA,CAAMgD,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOwI,CAAQ,CAAA,CACzC,CAACA,EAAUE,CAAAA,CAAY1L,CAAK,CAAC,CAAA,CAE1BmO,EAAAA,CAAmB3J,OAAAA,CAAQ,IAC3B,CAACgH,CAAAA,EAAYE,CAAAA,GAAe,QAAA,CAAiB,IAAA,CAC1C3L,CAAAA,CAAQ,IAAA,CAAMiD,CAAAA,EAAMA,CAAAA,CAAE,KAAOwI,CAAQ,CAAA,CAC3C,CAACA,CAAAA,CAAUE,CAAAA,CAAY3L,CAAO,CAAC,CAAA,CAG5BqO,EAAAA,CAAiB5J,OAAAA,CAAQ,IAA2B,CACxD,IAAM6J,CAAAA,CAA4B,CAChC,OAAA,CAAS,OACT,GAAG/H,CAAAA,CAAW,YAAY,CAAA,CAC1B,SAAA,CAAW,MAAA,CACX,SAAA,CAAW,OACb,CAAA,CAEA,OAAQ1F,CAAAA,EACN,KAAK,UAAA,CACH,OAAO,CACL,GAAGyN,CAAAA,CACH,GAAG/H,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,UAAA,CAAY,2CACd,CAAA,CACF,KAAK,SAAA,CACH,OAAO,CACL,GAAG+H,CAAAA,CACH,GAAG/H,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,MAAA,CAAQ,oBACV,CAAA,CACF,KAAK,UAAA,CACH,OAAO,CACL,GAAG+H,CAAAA,CACH,GAAG/H,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,eAAA,CAAiB,uBACnB,EACF,QACE,OAAO+H,CACX,CACF,CAAA,CAAG,CAACzN,CAAO,CAAC,CAAA,CAGN0N,EAAAA,CAAY9J,OAAAA,CAAQ,IAAMzE,CAAAA,CAAQ,GAAA,CAAKiD,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CAAG,CAACjD,CAAO,CAAC,CAAA,CAG7DwO,EAAAA,CAAmB/J,OAAAA,CACvB,KAAO,CACL,SAAA,CAAW,CAAA,OAAA,EAAUwG,EAAY,CAAA,WAAA,EAAcC,CAAS,CAAA,CAAA,CAC1D,CAAA,CAAA,CACA,CAACD,EAAAA,CAAcC,CAAS,CAC1B,CAAA,CAGA,OAAKC,EAAAA,CAyCHzG,GAAAA,CAAC5E,EAAAA,CAAA,CACC,OAAA,CAASE,CAAAA,CACT,KAAA,CAAOC,CAAAA,CACP,eAAA,CAAiBmM,EAAAA,CACjB,aAAA,CAAeC,EACf,UAAA,CAAYjM,CAAAA,CACZ,YAAA,CAAcC,CAAAA,CACd,SAAA,CAAWC,CAAAA,CACX,YAAA,CAAcC,CAAAA,CACd,YAAA,CAAcC,CAAAA,CACd,WAAA,CAAaC,CAAAA,CACb,cAAA,CAAgBC,CAAAA,CAChB,cAAA,CAAgBC,CAAAA,CAChB,YAAaC,CAAAA,CACb,OAAA,CAASC,CAAAA,CACT,KAAA,CAAOC,CAAAA,CACP,aAAA,CAAeC,CAAAA,EAAiB,CAACI,CAAAA,CACjC,eAAA,CAAiBH,CAAAA,EAAmB,CAACG,CAAAA,CACrC,YAAA,CAAcF,GAAAA,EAAgB,CAACE,EAC/B,cAAA,CAAgBD,CAAAA,EAAkB,CAACC,CAAAA,CACnC,QAAA,CAAUA,CAAAA,CAEV,QAAA,CAAAqF,IAAAA,CAACiI,UAAAA,CAAA,CACC,OAAA,CAAS1C,EAAAA,CACT,kBAAA,CAAoB2C,aAAAA,CACpB,WAAA,CAAahC,EAAAA,CACb,WAAYI,EAAAA,CACZ,SAAA,CAAWW,EAAAA,CAGV,QAAA,CAAA,CAAA1C,EAAAA,EAAmBvD,EAAAA,EAAcsE,EAAAA,EAChCpH,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO4B,CAAAA,CACL,CACE,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAA,CACP,gBAAiB,iBAAA,CACjB,MAAA,CAAQ,EAAA,CACR,UAAA,CAAY,eACd,CAAA,CACA0E,EACF,CAAA,CACA,aAAA,CAAY,MAAA,CACd,CAAA,CAGFxE,IAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKlB,EAAAA,CACL,IAAA,CAAK,SACL,YAAA,CAAW,2BAAA,CACX,KAAA,CAAOgB,CAAAA,CACL+H,EAAAA,CACA7G,EAAAA,CAAa,CAAE,QAAA,CAAU,UAAA,CAAY,MAAA,CAAQ,EAAG,CAAA,CAAI,MAAA,CACpDjB,CAAAA,CAAWpB,CAAG,CAAA,CACdC,CACF,CAAA,CACC,GAAGC,EAAAA,CAEJ,QAAA,CAAA,CAAAX,GAAAA,CAACuF,eAAAA,CAAA,CACC,KAAA,CAAOsE,GACP,QAAA,CAAUI,6BAAAA,CAET,QAAA,CAAA3O,CAAAA,CAAQ,GAAA,CAAI,CAAC0C,CAAAA,CAAQV,CAAAA,GACpB0C,IAACgF,EAAAA,CAAA,CAEC,MAAA,CAAQhH,CAAAA,CACR,KAAA,CAAO4J,CAAAA,CAAe5J,CAAAA,CAAO,EAAE,CAAA,CAC/B,KAAA,CAAOV,CAAAA,CACP,KAAA,CACEU,CAAAA,CAAO,SAAA,CACH,MAAA,CACA,CACE,SAAUmI,EAAAA,CACV,QAAA,CAAUC,CACZ,CAAA,CAAA,CAVDpI,CAAAA,CAAO,EAYd,CACD,CAAA,CACH,CAAA,CAGCxB,CAAAA,EAAkB,CAACC,CAAAA,EAClBuD,GAAAA,CAAC0F,EAAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAUS,EAAAA,CACV,QAAA,CAAUC,CACZ,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGAtE,IAAAA,CAACoI,WAAAA,CAAA,CACC,aAAA,CAAe,CACb,QAAA,CAAU,GAAA,CACV,MAAA,CAAQ,qCACV,EAEC,QAAA,CAAA,CAAAT,EAAAA,EACCzJ,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,GAAG8J,EAAAA,CACH,SAAA,CAAW,oCACb,CAAA,CAEA,QAAA,CAAA9J,GAAAA,CAACsC,EAAAA,CAAA,CAAW,IAAA,CAAMmH,GAAY,KAAA,CAAO,CAAA,CAAG,UAAA,CAAU,IAAA,CAAC,CAAA,CACrD,CAAA,CAEDC,EAAAA,EACC1J,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,EAAA,CACT,SAAA,CAAW,oCAAA,CACX,SAAA,CAAW,eACX,QAAA,CAAUmG,EAAAA,CACV,QAAA,CAAUC,CACZ,CAAA,CAEA,QAAA,CAAApG,GAAAA,CAACgF,EAAAA,CAAA,CACC,MAAA,CAAQ0E,EAAAA,CACR,KAAA,CAAO9B,CAAAA,CAAe8B,EAAAA,CAAiB,EAAE,CAAA,CACzC,MAAO,CAAA,CACT,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CACF,CAAA,CAtKE1J,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKY,EAAAA,CACL,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,2BAAA,CACX,KAAA,CAAOgB,CAAAA,CAAY+H,GAAgB9H,CAAAA,CAAWpB,CAAG,CAAA,CAAGC,CAAK,CAAA,CACxD,GAAGC,EAAAA,CAEH,QAAA,CAAArF,CAAAA,CAAQ,GAAA,CAAK0C,CAAAA,EACZ8D,IAAAA,CAAC,KAAA,CAAA,CAEC,KAAA,CAAO,CACL,UAAA,CAAY,EACZ,eAAA,CAAiB,SAAA,CACjB,GAAGD,CAAAA,CAAW,gBAAgB,CAAA,CAC9B,QAAA,CAAUsE,EAAAA,CACV,QAAA,CAAUC,CACZ,CAAA,CAEA,QAAA,CAAA,CAAApG,GAAAA,CAACmK,CAAAA,CAAA,CAAS,OAAA,CAAQ,OAAO,GAAA,CAAI,UAAA,CAAW,CAAA,CACxCnK,GAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAG6B,CAAAA,CAAW,OAAO,CACvB,CAAA,CAEC,SAAA+F,CAAAA,CAAe5J,CAAAA,CAAO,EAAE,CAAA,CACtB,KAAA,CAAM,CAAA,CAAG,CAAC,CAAA,CACV,GAAA,CAAKN,CAAAA,EACJsC,GAAAA,CAACmK,CAAAA,CAAA,CAAuB,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,QAA/BzM,CAAAA,CAAK,EAAiC,CACtD,CAAA,CACL,CAAA,CAAA,CAAA,CAtBKM,CAAAA,CAAO,EAuBd,CACD,CAAA,CACH,CAsIN,CACF,EAEA4H,EAAAA,CAAY,WAAA,CAAc,aAAA,CCzjBnB,IAAMwE,EAAAA,CAAsBxN,EAAAA,CAAM,UAAA,CACvC,CAAC,CAAE,OAAA,CAAAyN,GAAAA,CAAS,WAAA,CAAAC,CAAAA,CAAc,YAAA,CAAc,GAAA,CAAA7J,EAAK,KAAA,CAAAC,CAAAA,CAAO,GAAGC,CAAM,CAAA,CAAGC,CAAAA,GACzDyJ,GAAAA,CAcHrK,GAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKY,CAAAA,CACL,KAAA,CAAOgB,CAAAA,CAd4B,CACrC,UAAA,CAAY,WAAA,CACZ,aAAc,QAAA,CACd,eAAA,CAAiB,SACnB,CAAA,CAGE0I,CAAAA,GAAgB,YAAA,CACZ,CAAE,MAAA,CAAQ,KAAA,CAAO,SAAA,CAAW,KAAA,CAAO,YAAA,CAAc,KAAM,CAAA,CACvD,CAAE,KAAA,CAAO,MAAO,UAAA,CAAY,KAAA,CAAO,WAAA,CAAa,KAAA,CAAO,SAAA,CAAW,SAAU,CAAA,CAK9BzI,CAAAA,CAAWpB,CAAG,CAAA,CAAGC,CAAK,CAAA,CACrE,GAAGC,CAAAA,CACN,CAAA,CAlBmB,IAqBzB,EAEAyJ,GAAoB,WAAA,CAAc,qBAAA","file":"chunk-TSAXVD2H.mjs","sourcesContent":["\"use client\";\n\nimport React, { createContext, useContext, useCallback, useMemo } from \"react\";\nimport type {\n KanbanColumn,\n KanbanCard,\n KanbanDragData,\n KanbanCardMoveEvent,\n KanbanColumnMoveEvent,\n ExtendedVariant,\n} from \"./types\";\nimport type { Color } from \"../../../lib/types/common\";\n\n/**\n * Kanban Context Value 인터페이스\n */\ninterface KanbanContextValue {\n // 상태\n columns: KanbanColumn[];\n cards: KanbanCard[];\n dragData: KanbanDragData | null;\n dropTargetId: string | null;\n dropIndex: number | null;\n\n // 드래그 액션\n startDrag: (data: KanbanDragData) => void;\n updateDropTarget: (targetId: string | null, index: number | null) => void;\n endDrag: () => void;\n\n // 카드 액션\n moveCard: (cardId: string, toColumnId: string, toIndex: number) => void;\n addCard: (columnId: string, card: Partial<KanbanCard>) => void;\n updateCard: (cardId: string, updates: Partial<KanbanCard>) => void;\n deleteCard: (cardId: string) => void;\n\n // 컬럼 액션\n moveColumn: (columnId: string, toIndex: number) => void;\n addColumn: (column: Partial<KanbanColumn>) => void;\n updateColumn: (columnId: string, updates: Partial<KanbanColumn>) => void;\n deleteColumn: (columnId: string) => void;\n\n // 유틸리티\n getCardsByColumn: (columnId: string) => KanbanCard[];\n canDropCard: (columnId: string) => boolean;\n\n // 설정\n variant: ExtendedVariant;\n color: Color;\n allowCardDrag: boolean;\n allowColumnDrag: boolean;\n allowAddCard: boolean;\n allowAddColumn: boolean;\n readOnly: boolean;\n\n // 콜백\n onCardClick?: (card: KanbanCard) => void;\n}\n\nconst KanbanContext = createContext<KanbanContextValue | null>(null);\n\n/**\n * Kanban Context를 사용하는 훅\n */\nexport function useKanban(): KanbanContextValue {\n const context = useContext(KanbanContext);\n if (!context) {\n throw new Error(\"useKanban must be used within a KanbanProvider\");\n }\n return context;\n}\n\n/**\n * Kanban Provider Props\n */\ninterface KanbanProviderProps {\n children: React.ReactNode;\n columns: KanbanColumn[];\n cards: KanbanCard[];\n onColumnsChange?: (columns: KanbanColumn[]) => void;\n onCardsChange?: (cards: KanbanCard[]) => void;\n onCardMove?: (event: KanbanCardMoveEvent) => void;\n onColumnMove?: (event: KanbanColumnMoveEvent) => void;\n onCardAdd?: (columnId: string, card: Partial<KanbanCard>) => void;\n onCardDelete?: (cardId: string) => void;\n onCardUpdate?: (cardId: string, updates: Partial<KanbanCard>) => void;\n onColumnAdd?: (column: Partial<KanbanColumn>) => void;\n onColumnDelete?: (columnId: string) => void;\n onColumnUpdate?: (columnId: string, updates: Partial<KanbanColumn>) => void;\n onCardClick?: (card: KanbanCard) => void;\n variant?: ExtendedVariant;\n color?: Color;\n allowCardDrag?: boolean;\n allowColumnDrag?: boolean;\n allowAddCard?: boolean;\n allowAddColumn?: boolean;\n readOnly?: boolean;\n}\n\n/**\n * Kanban Provider 컴포넌트\n */\nexport function KanbanProvider({\n children,\n columns,\n cards,\n onColumnsChange,\n onCardsChange,\n onCardMove,\n onColumnMove,\n onCardAdd,\n onCardDelete,\n onCardUpdate,\n onColumnAdd,\n onColumnDelete,\n onColumnUpdate,\n onCardClick,\n variant = \"elevated\",\n color = \"blue\",\n allowCardDrag = true,\n allowColumnDrag = true,\n allowAddCard = true,\n allowAddColumn = false,\n readOnly = false,\n}: KanbanProviderProps) {\n // 드래그 상태\n const [dragData, setDragData] = React.useState<KanbanDragData | null>(null);\n const [dropTargetId, setDropTargetId] = React.useState<string | null>(null);\n const [dropIndex, setDropIndex] = React.useState<number | null>(null);\n\n // 드래그 시작\n const startDrag = useCallback((data: KanbanDragData) => {\n setDragData(data);\n }, []);\n\n // 드롭 타겟 업데이트\n const updateDropTarget = useCallback((targetId: string | null, index: number | null) => {\n setDropTargetId(targetId);\n setDropIndex(index);\n }, []);\n\n // 드래그 종료\n const endDrag = useCallback(() => {\n setDragData(null);\n setDropTargetId(null);\n setDropIndex(null);\n }, []);\n\n // 컬럼별 카드 가져오기 (order 기준 정렬)\n const getCardsByColumn = useCallback(\n (columnId: string): KanbanCard[] => {\n return cards\n .filter((card) => card.columnId === columnId)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n },\n [cards]\n );\n\n // 카드 드롭 가능 여부 (WIP limit 체크)\n const canDropCard = useCallback(\n (columnId: string): boolean => {\n const column = columns.find((c) => c.id === columnId);\n if (!column || column.limit === undefined) return true;\n\n const currentCount = getCardsByColumn(columnId).length;\n\n // 같은 컬럼 내 이동은 항상 허용\n if (dragData?.type === \"card\" && dragData.columnId === columnId) {\n return true;\n }\n\n return currentCount < column.limit;\n },\n [columns, getCardsByColumn, dragData]\n );\n\n // 카드 이동\n const moveCard = useCallback(\n (cardId: string, toColumnId: string, toIndex: number) => {\n if (readOnly) return;\n\n const cardToMove = cards.find((c) => c.id === cardId);\n if (!cardToMove) return;\n\n const fromColumnId = cardToMove.columnId;\n\n // WIP limit 체크\n if (fromColumnId !== toColumnId && !canDropCard(toColumnId)) {\n return;\n }\n\n // 컬럼별로 카드 그룹화 (order 기준 정렬)\n const cardsByColumn = new Map<string, KanbanCard[]>();\n columns.forEach((col) => {\n cardsByColumn.set(col.id, []);\n });\n cards.forEach((card) => {\n if (card.id !== cardId) {\n const colCards = cardsByColumn.get(card.columnId);\n if (colCards) colCards.push(card);\n }\n });\n\n // 각 컬럼의 카드를 order로 정렬\n cardsByColumn.forEach((colCards) => {\n colCards.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n });\n\n // 목적지 컬럼에 새 위치로 삽입\n const targetColumnCards = cardsByColumn.get(toColumnId) || [];\n const clampedIndex = Math.min(toIndex, targetColumnCards.length);\n\n // 이동할 카드 (columnId 변경)\n const movedCard: KanbanCard = { ...cardToMove, columnId: toColumnId };\n targetColumnCards.splice(clampedIndex, 0, movedCard);\n cardsByColumn.set(toColumnId, targetColumnCards);\n\n // 모든 카드의 order 재계산 (컬럼별로)\n const updatedCards: KanbanCard[] = [];\n cardsByColumn.forEach((colCards) => {\n colCards.forEach((card, index) => {\n updatedCards.push({ ...card, order: index });\n });\n });\n\n onCardsChange?.(updatedCards);\n onCardMove?.({ cardId, fromColumnId, toColumnId, toIndex: clampedIndex });\n },\n [cards, columns, readOnly, canDropCard, onCardsChange, onCardMove]\n );\n\n // 카드 추가\n const addCard = useCallback(\n (columnId: string, card: Partial<KanbanCard>) => {\n if (readOnly) return;\n\n // WIP limit 체크\n if (!canDropCard(columnId)) return;\n\n const newCard: KanbanCard = {\n id: card.id || `card-${Date.now()}`,\n columnId,\n title: card.title || \"새 카드\",\n description: card.description,\n priority: card.priority,\n tags: card.tags,\n assignee: card.assignee,\n dueDate: card.dueDate,\n metadata: card.metadata,\n };\n\n const newCards = [...cards, newCard];\n onCardsChange?.(newCards);\n onCardAdd?.(columnId, newCard);\n },\n [cards, readOnly, canDropCard, onCardsChange, onCardAdd]\n );\n\n // 카드 수정\n const updateCard = useCallback(\n (cardId: string, updates: Partial<KanbanCard>) => {\n if (readOnly) return;\n\n const newCards = cards.map((card) =>\n card.id === cardId ? { ...card, ...updates } : card\n );\n\n onCardsChange?.(newCards);\n onCardUpdate?.(cardId, updates);\n },\n [cards, readOnly, onCardsChange, onCardUpdate]\n );\n\n // 카드 삭제\n const deleteCard = useCallback(\n (cardId: string) => {\n if (readOnly) return;\n\n const newCards = cards.filter((card) => card.id !== cardId);\n onCardsChange?.(newCards);\n onCardDelete?.(cardId);\n },\n [cards, readOnly, onCardsChange, onCardDelete]\n );\n\n // 컬럼 이동\n const moveColumn = useCallback(\n (columnId: string, toIndex: number) => {\n if (readOnly) return;\n\n const columnIndex = columns.findIndex((c) => c.id === columnId);\n if (columnIndex === -1) return;\n\n const newColumns = [...columns];\n const [removed] = newColumns.splice(columnIndex, 1);\n newColumns.splice(toIndex, 0, removed);\n\n onColumnsChange?.(newColumns);\n onColumnMove?.({ columnId, toIndex });\n },\n [columns, readOnly, onColumnsChange, onColumnMove]\n );\n\n // 컬럼 추가\n const addColumn = useCallback(\n (column: Partial<KanbanColumn>) => {\n if (readOnly) return;\n\n const newColumn: KanbanColumn = {\n id: column.id || `column-${Date.now()}`,\n title: column.title || \"새 컬럼\",\n color: column.color,\n limit: column.limit,\n collapsed: column.collapsed,\n };\n\n const newColumns = [...columns, newColumn];\n onColumnsChange?.(newColumns);\n onColumnAdd?.(newColumn);\n },\n [columns, readOnly, onColumnsChange, onColumnAdd]\n );\n\n // 컬럼 수정\n const updateColumn = useCallback(\n (columnId: string, updates: Partial<KanbanColumn>) => {\n if (readOnly) return;\n\n const newColumns = columns.map((column) =>\n column.id === columnId ? { ...column, ...updates } : column\n );\n\n onColumnsChange?.(newColumns);\n onColumnUpdate?.(columnId, updates);\n },\n [columns, readOnly, onColumnsChange, onColumnUpdate]\n );\n\n // 컬럼 삭제\n const deleteColumn = useCallback(\n (columnId: string) => {\n if (readOnly) return;\n\n // 해당 컬럼의 카드도 함께 삭제\n const newColumns = columns.filter((column) => column.id !== columnId);\n const newCards = cards.filter((card) => card.columnId !== columnId);\n\n onColumnsChange?.(newColumns);\n onCardsChange?.(newCards);\n onColumnDelete?.(columnId);\n },\n [columns, cards, readOnly, onColumnsChange, onCardsChange, onColumnDelete]\n );\n\n // Context 값 메모이제이션\n const value = useMemo<KanbanContextValue>(\n () => ({\n columns,\n cards,\n dragData,\n dropTargetId,\n dropIndex,\n startDrag,\n updateDropTarget,\n endDrag,\n moveCard,\n addCard,\n updateCard,\n deleteCard,\n moveColumn,\n addColumn,\n updateColumn,\n deleteColumn,\n getCardsByColumn,\n canDropCard,\n variant,\n color,\n allowCardDrag,\n allowColumnDrag,\n allowAddCard,\n allowAddColumn,\n readOnly,\n onCardClick,\n }),\n [\n columns,\n cards,\n dragData,\n dropTargetId,\n dropIndex,\n startDrag,\n updateDropTarget,\n endDrag,\n moveCard,\n addCard,\n updateCard,\n deleteCard,\n moveColumn,\n addColumn,\n updateColumn,\n deleteColumn,\n getCardsByColumn,\n canDropCard,\n variant,\n color,\n allowCardDrag,\n allowColumnDrag,\n allowAddCard,\n allowAddColumn,\n readOnly,\n onCardClick,\n ]\n );\n\n return <KanbanContext.Provider value={value}>{children}</KanbanContext.Provider>;\n}\n\nexport { KanbanContext };\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { Icon } from \"../../Icon\";\nimport type { Color } from \"../../../lib/types/common\";\nimport type { KanbanColumnHeaderProps } from \"./types\";\n\n/**\n * Color dot indicator styles (inline, no Tailwind)\n */\nconst colorDotStyleMap: Record<Color, React.CSSProperties> = {\n blue: { backgroundColor: \"#6366f1\" },\n purple: { backgroundColor: \"#a855f7\" },\n green: { backgroundColor: \"#22c55e\" },\n orange: { backgroundColor: \"#f97316\" },\n red: { backgroundColor: \"#ef4444\" },\n indigo: { backgroundColor: \"#6366f1\" },\n pink: { backgroundColor: \"#ec4899\" },\n gray: { backgroundColor: \"#6b7280\" },\n cyan: { backgroundColor: \"#06b6d4\" },\n primary: { backgroundColor: \"var(--color-primary, #06b6d4)\" },\n};\n\n/**\n * Badge styles per color (light mode)\n */\nconst colorBadgeStyleMap: Record<Color, React.CSSProperties> = {\n blue: { backgroundColor: \"rgba(239,246,255,0.3)\", color: \"#1d4ed8\" },\n purple: { backgroundColor: \"rgba(250,245,255,0.3)\", color: \"#7e22ce\" },\n green: { backgroundColor: \"rgba(240,253,244,0.3)\", color: \"#15803d\" },\n orange: { backgroundColor: \"rgba(255,247,237,0.3)\", color: \"#c2410c\" },\n red: { backgroundColor: \"rgba(254,242,242,0.3)\", color: \"#b91c1c\" },\n indigo: { backgroundColor: \"rgba(238,242,255,0.3)\", color: \"#4338ca\" },\n pink: { backgroundColor: \"rgba(253,242,248,0.3)\", color: \"#be185d\" },\n gray: { backgroundColor: \"rgba(249,250,251,0.3)\", color: \"#374151\" },\n cyan: { backgroundColor: \"rgba(236,254,255,0.3)\", color: \"#0e7490\" },\n primary: {\n backgroundColor: \"rgba(var(--color-primary-rgb, 6,182,212),0.1)\",\n color: \"var(--color-primary, #0e7490)\",\n },\n};\n\n/**\n * KanbanColumnHeader 컴포넌트\n *\n * 칸반 컬럼의 헤더를 렌더링합니다.\n * 제목 편집, 삭제, 접기/펼치기 기능을 제공합니다.\n */\nexport const KanbanColumnHeader = React.forwardRef<\n HTMLDivElement,\n KanbanColumnHeaderProps\n>(\n (\n {\n column,\n cardCount,\n onTitleChange,\n onDelete,\n onToggleCollapse,\n dragHandleProps,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editTitle, setEditTitle] = useState(column.title);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const color: Color = column.color || \"gray\";\n const dotStyle = colorDotStyleMap[color];\n const badgeStyle = colorBadgeStyleMap[color];\n const wipBadgeStyle: React.CSSProperties = {\n backgroundColor: \"#fef3c7\",\n color: \"#b45309\",\n };\n\n // Focus input when editing starts\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n const handleTitleClick = () => {\n if (onTitleChange) {\n setIsEditing(true);\n setEditTitle(column.title);\n }\n };\n\n const handleTitleSubmit = () => {\n if (editTitle.trim() && editTitle !== column.title) {\n onTitleChange?.(editTitle.trim());\n } else {\n setEditTitle(column.title);\n }\n setIsEditing(false);\n };\n\n const handleTitleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleTitleSubmit();\n } else if (e.key === \"Escape\") {\n setEditTitle(column.title);\n setIsEditing(false);\n }\n };\n\n // Collapsed state - only show title vertically centered\n if (column.collapsed) {\n return (\n <div\n ref={ref}\n style={mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n minHeight: \"300px\",\n ...resolveDot(\"py-4 px-2 rounded-xl\"),\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {/* Expand button */}\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleCollapse?.();\n }}\n onPointerDown={(e) => e.stopPropagation()}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n ...resolveDot(\"gap-3 rounded-lg p-2\"),\n width: \"100%\",\n height: \"100%\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n background: \"none\",\n border: \"none\",\n transition: \"background-color 150ms\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"rgba(229,231,235,0.5)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"transparent\";\n }}\n >\n <Icon name=\"chevronRight\" size={16} style={{ color: \"#9ca3af\" }} />\n <span\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"#374151\",\n letterSpacing: \"0.05em\",\n writingMode: \"vertical-rl\",\n textOrientation: \"mixed\",\n }}\n >\n {column.title}\n </span>\n <span\n style={{\n fontSize: \"0.75rem\",\n ...resolveDot(\"px-2 py-1 rounded-full\"),\n fontWeight: 500,\n ...badgeStyle,\n }}\n >\n {cardCount}\n </span>\n </button>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n style={mergeStyles(\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"gap-2 p-3\"),\n borderBottom: \"1px solid #e5e7eb\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n {/* Left: Drag handle + Color indicator + Title */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n flex: 1,\n minWidth: 0,\n }}\n >\n {/* Drag handle */}\n {dragHandleProps && (\n <div\n {...dragHandleProps}\n style={{\n flexShrink: 0,\n ...resolveDot(\"p-0.5 rounded\"),\n marginLeft: \"-0.25rem\",\n cursor: \"grab\",\n transition: \"background-color 150ms\",\n }}\n title=\"드래그하여 컬럼 이동\"\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLDivElement).style.backgroundColor =\n \"#e5e7eb\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLDivElement).style.backgroundColor =\n \"transparent\";\n }}\n >\n <Icon\n name=\"moreVertical\"\n size={16}\n style={{ color: \"#9ca3af\" }}\n />\n </div>\n )}\n\n {/* Color dot */}\n <div\n style={{\n ...resolveDot(\"w-3 h-3 rounded-full\"),\n flexShrink: 0,\n ...dotStyle,\n }}\n />\n\n {/* Title */}\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={editTitle}\n onChange={(e) => setEditTitle(e.target.value)}\n onBlur={handleTitleSubmit}\n onKeyDown={handleTitleKeyDown}\n style={{\n flex: 1,\n minWidth: 0,\n ...resolveDot(\"px-2 py-1 rounded\"),\n fontSize: \"0.875rem\",\n fontWeight: 600,\n backgroundColor: \"transparent\",\n border: \"1px solid #6366f1\",\n outline: \"none\",\n color: \"#1f2937\",\n }}\n />\n ) : (\n <h3\n style={{\n flex: 1,\n minWidth: 0,\n fontSize: \"0.875rem\",\n fontWeight: 600,\n color: \"#1f2937\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n cursor: onTitleChange ? \"pointer\" : \"default\",\n transition: \"color 150ms\",\n }}\n onClick={handleTitleClick}\n onMouseEnter={(e) => {\n if (onTitleChange) {\n (e.currentTarget as HTMLHeadingElement).style.color =\n \"#4f46e5\";\n }\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLHeadingElement).style.color = \"#1f2937\";\n }}\n >\n {column.title}\n </h3>\n )}\n\n {/* Card count badge */}\n <span\n style={{\n fontSize: \"0.75rem\",\n ...resolveDot(\"px-2 py-0.5 rounded-full\"),\n flexShrink: 0,\n ...(column.limit && cardCount >= column.limit\n ? wipBadgeStyle\n : badgeStyle),\n }}\n >\n {cardCount}\n {column.limit && `/${column.limit}`}\n </span>\n </div>\n\n {/* Right: Actions */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n flexShrink: 0,\n }}\n >\n {/* Collapse button */}\n {onToggleCollapse && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onToggleCollapse();\n }}\n onPointerDown={(e) => e.stopPropagation()}\n style={{\n ...resolveDot(\"p-1 rounded\"),\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n }}\n aria-label=\"컬럼 접기\"\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"#e5e7eb\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"transparent\";\n }}\n >\n <Icon name=\"chevronLeft\" size={14} style={{ color: \"#9ca3af\" }} />\n </button>\n )}\n\n {/* Delete button */}\n {onDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onDelete();\n }}\n onPointerDown={(e) => e.stopPropagation()}\n style={{\n ...resolveDot(\"p-1 rounded\"),\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n }}\n aria-label=\"컬럼 삭제\"\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"#fee2e2\";\n const icon = (\n e.currentTarget as HTMLButtonElement\n ).querySelector(\"[data-icon]\");\n if (icon) (icon as HTMLElement).style.color = \"#ef4444\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"transparent\";\n const icon = (\n e.currentTarget as HTMLButtonElement\n ).querySelector(\"[data-icon]\");\n if (icon) (icon as HTMLElement).style.color = \"#9ca3af\";\n }}\n >\n <Icon\n name=\"delete\"\n size={14}\n style={{ color: \"#9ca3af\", transition: \"color 150ms\" }}\n />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\n\nKanbanColumnHeader.displayName = \"KanbanColumnHeader\";\n","\"use client\";\n\nimport React, { useCallback, useState, useEffect } from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { Icon } from \"../../Icon\";\nimport { useKanban } from \"./KanbanContext\";\nimport type { KanbanCardProps, KanbanPriority } from \"./types\";\n\n// Keyframes ID for animation\nconst KEYFRAMES_ID = \"kanban-card-keyframes\";\n\n/**\n * Hook to inject keyframes once\n */\nfunction useCardKeyframes() {\n useEffect(() => {\n if (document.getElementById(KEYFRAMES_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = KEYFRAMES_ID;\n style.textContent = `\n @keyframes kanban-card-enter {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n @keyframes kanban-card-exit {\n from {\n opacity: 1;\n transform: translateX(0) scale(1);\n }\n to {\n opacity: 0;\n transform: translateX(20px) scale(0.95);\n }\n }\n `;\n document.head.appendChild(style);\n }, []);\n}\n\n/**\n * Priority 라벨 매핑\n */\nconst priorityLabels: Record<KanbanPriority, string> = {\n low: \"낮음\",\n medium: \"중간\",\n high: \"높음\",\n urgent: \"긴급\",\n};\n\n/**\n * Priority badge inline styles\n */\nconst priorityBadgeStyles: Record<KanbanPriority, React.CSSProperties> = {\n urgent: { backgroundColor: \"#fee2e2\", color: \"#b91c1c\" },\n high: { backgroundColor: \"#ffedd5\", color: \"#c2410c\" },\n medium: { backgroundColor: \"#e0e7ff\", color: \"#0e7490\" },\n low: { backgroundColor: \"#f3f4f6\", color: \"#374151\" },\n};\n\n/**\n * Variant base card styles (light mode; dark mode handled via JS theme detection is not done here,\n * so we use a neutral approach)\n */\nconst cardVariantStyles: Record<string, React.CSSProperties> = {\n default: { backgroundColor: \"#ffffff\" },\n gradient: { background: \"linear-gradient(135deg, #ffffff, #f9fafb)\" },\n outline: { backgroundColor: \"transparent\", border: \"1px solid #e5e7eb\" },\n elevated: {\n backgroundColor: \"#ffffff\",\n boxShadow: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n },\n};\n\n/**\n * KanbanCard 컴포넌트\n *\n * @dnd-kit의 useSortable을 사용하여 드래그앤드롭을 지원합니다.\n * 우선순위 표시, 담당자, 마감일 등을 지원합니다.\n */\nexport const KanbanCard = React.forwardRef<HTMLDivElement, KanbanCardProps>(\n (\n {\n card,\n index,\n isDragging: isDraggingProp = false,\n isOver = false,\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n // Inject keyframes\n useCardKeyframes();\n\n const { deleteCard, variant, allowCardDrag, readOnly, onCardClick } =\n useKanban();\n\n // Sortable setup\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: card.id,\n disabled: !allowCardDrag || readOnly,\n data: {\n type: \"card\",\n card,\n columnId: card.columnId,\n },\n });\n\n // Sortable styles\n const sortableStyle: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n const handleClick = useCallback(() => {\n if (!isDragging) {\n onCardClick?.(card);\n }\n }, [card, onCardClick, isDragging]);\n\n // Delete animation state\n const [isDeleting, setIsDeleting] = useState(false);\n\n const handleDelete = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsDeleting(true);\n\n // Wait for animation then delete\n setTimeout(() => {\n deleteCard(card.id);\n }, 200);\n },\n [card.id, deleteCard],\n );\n\n // Format due date\n const formatDueDate = (date: Date | string | undefined): string | null => {\n if (!date) return null;\n const d = typeof date === \"string\" ? new Date(date) : date;\n const now = new Date();\n const diff = d.getTime() - now.getTime();\n const days = Math.ceil(diff / (1000 * 60 * 60 * 24));\n\n if (days < 0) return `${Math.abs(days)}일 지남`;\n if (days === 0) return \"오늘\";\n if (days === 1) return \"내일\";\n return `${days}일 남음`;\n };\n\n const dueText = formatDueDate(card.dueDate);\n const isOverdue = card.dueDate && new Date(card.dueDate) < new Date();\n\n // Base card style\n const variantStyle =\n cardVariantStyles[variant] ?? cardVariantStyles.elevated;\n\n // Card animation styles\n const animationStyle: React.CSSProperties = {\n animation: isDeleting\n ? \"kanban-card-exit 0.2s ease-out forwards\"\n : \"kanban-card-enter 0.2s ease-out both\",\n animationDelay: isDeleting ? \"0ms\" : `${Math.min(index * 30, 150)}ms`,\n };\n\n const cardStyle: React.CSSProperties = mergeStyles(\n {\n position: \"relative\",\n ...resolveDot(\"rounded-lg p-3 mb-2\"),\n cursor: allowCardDrag ? \"grab\" : \"default\",\n transition: \"all 200ms\",\n touchAction: \"none\",\n outline: isOver ? \"1px solid #6366f1\" : undefined,\n },\n variantStyle,\n isDragging\n ? {\n opacity: 0.5,\n transform: \"scale(0.95)\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n zIndex: 50,\n }\n : undefined,\n isDeleting ? { pointerEvents: \"none\" } : undefined,\n sortableStyle,\n animationStyle,\n resolveDot(dot),\n style,\n );\n\n return (\n <div\n {...attributes}\n {...listeners}\n ref={setNodeRef}\n data-card-id={card.id}\n role=\"listitem\"\n aria-label={card.title}\n tabIndex={0}\n style={cardStyle}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n {...props}\n >\n {/* Delete button (shown on hover) */}\n {!readOnly && (\n <button\n type=\"button\"\n onClick={handleDelete}\n style={{\n position: \"absolute\",\n ...resolveDot(\"top-2 right-2 p-1 rounded\"),\n opacity: 0,\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n transition: \"opacity 150ms, background-color 150ms\",\n }}\n aria-label=\"카드 삭제\"\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.opacity = \"1\";\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"#fee2e2\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.opacity = \"0\";\n (e.currentTarget as HTMLButtonElement).style.backgroundColor =\n \"transparent\";\n }}\n >\n <Icon name=\"close\" size={12} style={{ color: \"#9ca3af\" }} />\n </button>\n )}\n\n {/* Title */}\n <h4\n style={{\n fontSize: \"0.875rem\",\n fontWeight: 500,\n color: \"#1f2937\",\n ...resolveDot(\"pr-6 mb-1\"),\n }}\n >\n {card.title}\n </h4>\n\n {/* Description */}\n {card.description && (\n <p\n style={\n {\n fontSize: \"0.75rem\",\n color: \"#6b7280\",\n ...resolveDot(\"mb-2\"),\n overflow: \"hidden\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n } as React.CSSProperties\n }\n >\n {card.description}\n </p>\n )}\n\n {/* Tags */}\n {card.tags && card.tags.length > 0 && (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n ...resolveDot(\"gap-1 mb-2\"),\n }}\n >\n {card.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n style={{\n fontSize: \"0.75rem\",\n ...resolveDot(\"px-1.5 py-0.5 rounded\"),\n backgroundColor: \"#f3f4f6\",\n color: \"#4b5563\",\n }}\n >\n {tag}\n </span>\n ))}\n {card.tags.length > 3 && (\n <span style={{ fontSize: \"0.75rem\", color: \"#9ca3af\" }}>\n +{card.tags.length - 3}\n </span>\n )}\n </div>\n )}\n\n {/* Footer: Assignee, Due date, Priority */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...resolveDot(\"mt-2\"),\n }}\n >\n {/* Assignee */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1\"),\n }}\n >\n {card.assignee && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-1.5\"),\n }}\n >\n {card.assignee.avatar ? (\n <img\n src={card.assignee.avatar}\n alt={card.assignee.name}\n style={{ ...resolveDot(\"w-5 h-5 rounded-full\") }}\n />\n ) : (\n <div\n style={{\n ...resolveDot(\"w-5 h-5 rounded-full\"),\n backgroundColor: \"#d1d5db\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <span\n style={{\n fontSize: \"0.625rem\",\n fontWeight: 500,\n color: \"#4b5563\",\n }}\n >\n {card.assignee.name.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <span style={{ fontSize: \"0.75rem\", color: \"#6b7280\" }}>\n {card.assignee.name}\n </span>\n </div>\n )}\n </div>\n\n {/* Due date & Priority */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n {dueText && (\n <span\n style={{\n fontSize: \"0.75rem\",\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-0.5\"),\n color: isOverdue ? \"#ef4444\" : \"#9ca3af\",\n }}\n >\n <Icon name=\"clock\" size={12} />\n {dueText}\n </span>\n )}\n {card.priority && (\n <span\n style={{\n fontSize: \"0.625rem\",\n ...resolveDot(\"px-1.5 py-0.5 rounded\"),\n ...priorityBadgeStyles[card.priority],\n }}\n >\n {priorityLabels[card.priority]}\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nKanbanCard.displayName = \"KanbanCard\";\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { Icon } from \"../../Icon\";\nimport { useKanban } from \"./KanbanContext\";\nimport type { KanbanAddCardProps } from \"./types\";\n\n/**\n * KanbanAddCard 컴포넌트\n *\n * 새 카드를 추가하는 인라인 폼입니다.\n * 버튼 클릭 시 입력 폼이 나타나고, Enter로 추가합니다.\n */\nexport const KanbanAddCard = React.forwardRef<\n HTMLDivElement,\n KanbanAddCardProps\n>(\n (\n {\n columnId,\n onAdd,\n onCancel,\n placeholder = \"카드 제목 입력...\",\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const { addCard } = useKanban();\n const [isAdding, setIsAdding] = useState(false);\n const [title, setTitle] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input when adding starts\n useEffect(() => {\n if (isAdding && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isAdding]);\n\n const handleStartAdding = () => {\n setIsAdding(true);\n setTitle(\"\");\n };\n\n const handleCancel = () => {\n setIsAdding(false);\n setTitle(\"\");\n onCancel?.();\n };\n\n const handleSubmit = () => {\n const trimmedTitle = title.trim();\n if (!trimmedTitle) {\n handleCancel();\n return;\n }\n\n const newCard = { title: trimmedTitle };\n\n if (onAdd) {\n onAdd(newCard);\n } else {\n addCard(columnId, newCard);\n }\n\n setTitle(\"\");\n // Keep form open for multiple additions\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSubmit();\n } else if (e.key === \"Escape\") {\n handleCancel();\n }\n };\n\n // Adding form\n if (isAdding) {\n return (\n <div\n ref={ref}\n style={mergeStyles(\n {\n ...resolveDot(\"rounded-lg p-2\"),\n backgroundColor: \"#ffffff\",\n boxShadow: \"0 1px 2px 0 rgba(0,0,0,0.05)\",\n border: \"1px solid #e5e7eb\",\n },\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n // Delay to allow button click\n setTimeout(() => {\n if (!title.trim()) {\n handleCancel();\n }\n }, 150);\n }}\n placeholder={placeholder}\n style={{\n width: \"100%\",\n ...resolveDot(\"px-2 py-1.5\"),\n fontSize: \"0.875rem\",\n backgroundColor: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"#1f2937\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n ...resolveDot(\"gap-1 mt-2\"),\n }}\n >\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n ...resolveDot(\"px-2 py-1\"),\n fontSize: \"0.75rem\",\n color: \"#6b7280\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n 취소\n </button>\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!title.trim()}\n style={\n title.trim()\n ? {\n ...resolveDot(\"px-3 py-1 rounded\"),\n fontSize: \"0.75rem\",\n fontWeight: 500,\n backgroundColor: \"#6366f1\",\n color: \"#ffffff\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n }\n : {\n ...resolveDot(\"px-3 py-1 rounded\"),\n fontSize: \"0.75rem\",\n fontWeight: 500,\n backgroundColor: \"#e5e7eb\",\n color: \"#9ca3af\",\n border: \"none\",\n cursor: \"not-allowed\",\n }\n }\n >\n 추가\n </button>\n </div>\n </div>\n );\n }\n\n // Add button\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={handleStartAdding}\n style={mergeStyles(\n {\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n ...resolveDot(\"gap-2 px-3 py-2 rounded-lg\"),\n fontSize: \"0.875rem\",\n color: \"#6b7280\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms, color 150ms\",\n },\n resolveDot(dot),\n style,\n )}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n <Icon name=\"add\" size={16} />\n <span>카드 추가</span>\n </button>\n );\n },\n);\n\nKanbanAddCard.displayName = \"KanbanAddCard\";\n","\"use client\";\n\nimport React, { useMemo, useEffect } from \"react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { useKanban } from \"./KanbanContext\";\nimport { KanbanColumnHeader } from \"./KanbanColumnHeader\";\nimport { KanbanCard } from \"./KanbanCard\";\nimport { KanbanAddCard } from \"./KanbanAddCard\";\nimport type { KanbanColumnProps } from \"./types\";\n\n// Keyframes ID for animation\nconst KEYFRAMES_ID = \"kanban-column-keyframes\";\n\n/**\n * Hook to inject keyframes once\n */\nfunction useColumnKeyframes() {\n useEffect(() => {\n if (document.getElementById(KEYFRAMES_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = KEYFRAMES_ID;\n style.textContent = `\n @keyframes kanban-column-enter {\n from {\n opacity: 0;\n transform: translateY(12px) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n `;\n document.head.appendChild(style);\n }, []);\n}\n\n/**\n * Variant base styles for columns (light mode)\n */\nconst columnVariantStyles: Record<string, React.CSSProperties> = {\n default: { backgroundColor: \"rgba(243,244,246,0.5)\" },\n gradient: { background: \"linear-gradient(to bottom, #f3f4f6, #ffffff)\" },\n outline: { backgroundColor: \"transparent\", border: \"2px solid #e5e7eb\" },\n elevated: {\n backgroundColor: \"#ffffff\",\n boxShadow: \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n },\n};\n\n/**\n * KanbanColumn 컴포넌트\n *\n * @dnd-kit의 useSortable을 사용하여 컬럼 재정렬을 지원합니다.\n * 카드는 SortableContext로 감싸서 세로 정렬을 지원합니다.\n */\nexport const KanbanColumn = React.forwardRef<HTMLDivElement, KanbanColumnProps>(\n ({ column, cards, index, style, dot: dotProp, ...props }, ref) => {\n // Inject keyframes\n useColumnKeyframes();\n\n const {\n updateColumn,\n deleteColumn,\n variant,\n allowColumnDrag,\n allowAddCard,\n readOnly,\n } = useKanban();\n\n // Sortable setup for column\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: column.id,\n disabled: !allowColumnDrag || readOnly,\n });\n\n // Sortable styles with entrance animation\n const dotStyle = dotProp ? resolveDot(dotProp) : undefined;\n const sortableStyle: React.CSSProperties = mergeStyles(\n {\n transform: CSS.Transform.toString(transform),\n transition,\n animation: isDragging\n ? \"none\"\n : \"kanban-column-enter 0.25s ease-out both\",\n animationDelay: isDragging ? \"0ms\" : `${index * 50}ms`,\n },\n style,\n dotStyle,\n );\n\n // WIP limit check\n const isAtLimit =\n column.limit !== undefined && cards.length >= column.limit;\n\n // Card IDs for SortableContext\n const cardIds = useMemo(() => cards.map((c) => c.id), [cards]);\n\n // Column header actions\n const handleTitleChange = (title: string) => {\n updateColumn(column.id, { title });\n };\n\n const handleDelete = () => {\n deleteColumn(column.id);\n };\n\n const handleToggleCollapse = () => {\n updateColumn(column.id, { collapsed: !column.collapsed });\n };\n\n // Variant base style\n const variantStyle =\n columnVariantStyles[variant] ?? columnVariantStyles.elevated;\n\n const columnStyle: React.CSSProperties = mergeStyles(\n {\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"rounded-xl\"),\n transition: \"all 300ms ease-out\",\n opacity: isDragging ? 0.4 : 1,\n ...(column.collapsed\n ? { width: \"4rem\", minWidth: \"4rem\", maxWidth: \"4rem\" }\n : { flexShrink: 0 }),\n },\n variantStyle,\n sortableStyle,\n );\n\n return (\n <div\n ref={setNodeRef}\n role=\"group\"\n aria-label={`${column.title} 컬럼`}\n style={columnStyle}\n {...props}\n >\n {/* Column Header */}\n <KanbanColumnHeader\n column={column}\n cardCount={cards.length}\n onTitleChange={!readOnly ? handleTitleChange : undefined}\n onDelete={!readOnly ? handleDelete : undefined}\n onToggleCollapse={handleToggleCollapse}\n dragHandleProps={{\n ...attributes,\n ...listeners,\n style: {\n cursor: allowColumnDrag ? \"grab\" : \"default\",\n },\n }}\n />\n\n {/* Cards Container */}\n {!column.collapsed && (\n <div\n style={{\n flex: 1,\n ...resolveDot(\"px-2 pb-2\"),\n overflowY: \"auto\",\n overflowX: \"hidden\",\n minHeight: \"100px\",\n }}\n role=\"list\"\n aria-label={`${column.title} 카드 목록`}\n >\n <SortableContext\n items={cardIds}\n strategy={verticalListSortingStrategy}\n >\n {cards.map((card, cardIndex) => (\n <KanbanCard key={card.id} card={card} index={cardIndex} />\n ))}\n </SortableContext>\n\n {/* Empty state */}\n {cards.length === 0 && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"5rem\",\n fontSize: \"0.875rem\",\n color: \"#9ca3af\",\n }}\n >\n 카드를 드래그하세요\n </div>\n )}\n </div>\n )}\n\n {/* Add Card Button */}\n {!column.collapsed && allowAddCard && !readOnly && !isAtLimit && (\n <div style={{ ...resolveDot(\"px-2 pb-2\") }}>\n <KanbanAddCard columnId={column.id} />\n </div>\n )}\n\n {/* WIP Limit Warning */}\n {!column.collapsed && isAtLimit && (\n <div\n style={{\n ...resolveDot(\"px-2 pb-2\"),\n fontSize: \"0.75rem\",\n textAlign: \"center\",\n color: \"#d97706\",\n }}\n >\n WIP 제한 도달 ({column.limit}개)\n </div>\n )}\n </div>\n );\n },\n);\n\nKanbanColumn.displayName = \"KanbanColumn\";\n","\"use client\";\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { Icon } from \"../../Icon\";\nimport { useKanban } from \"./KanbanContext\";\nimport type { KanbanAddColumnProps } from \"./types\";\n\n/**\n * KanbanAddColumn 컴포넌트\n *\n * 새 컬럼을 추가하는 UI입니다.\n * 버튼 클릭 시 입력 폼이 나타나고, Enter로 추가합니다.\n */\nexport const KanbanAddColumn = React.forwardRef<\n HTMLDivElement,\n KanbanAddColumnProps\n>(\n (\n {\n onAdd,\n onCancel,\n placeholder = \"컬럼 제목 입력...\",\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n const { addColumn, variant } = useKanban();\n const [isAdding, setIsAdding] = useState(false);\n const [title, setTitle] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input when adding starts\n useEffect(() => {\n if (isAdding && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isAdding]);\n\n const handleStartAdding = () => {\n setIsAdding(true);\n setTitle(\"\");\n };\n\n const handleCancel = () => {\n setIsAdding(false);\n setTitle(\"\");\n onCancel?.();\n };\n\n const handleSubmit = () => {\n const trimmedTitle = title.trim();\n if (!trimmedTitle) {\n handleCancel();\n return;\n }\n\n const newColumn = { title: trimmedTitle };\n\n if (onAdd) {\n onAdd(newColumn);\n } else {\n addColumn(newColumn);\n }\n\n setIsAdding(false);\n setTitle(\"\");\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSubmit();\n } else if (e.key === \"Escape\") {\n handleCancel();\n }\n };\n\n // Variant base styles\n const variantBaseStyle: React.CSSProperties = (() => {\n switch (variant) {\n case \"gradient\":\n return {\n background:\n \"linear-gradient(to bottom, rgba(243,244,246,0.5), rgba(255,255,255,0.5))\",\n };\n case \"outline\":\n return { border: \"2px dashed #d1d5db\", background: \"transparent\" };\n case \"elevated\":\n case \"default\":\n default:\n return { backgroundColor: \"rgba(243,244,246,0.5)\" };\n }\n })();\n\n // Adding form\n if (isAdding) {\n return (\n <div\n ref={ref}\n style={mergeStyles(\n { flexShrink: 0, ...resolveDot(\"rounded-xl p-3\") },\n variantBaseStyle,\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n style={{\n width: \"100%\",\n ...resolveDot(\"px-3 py-2 rounded-lg\"),\n fontSize: \"0.875rem\",\n backgroundColor: \"#ffffff\",\n border: \"1px solid #e5e7eb\",\n outline: \"none\",\n color: \"#1f2937\",\n boxSizing: \"border-box\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n ...resolveDot(\"gap-2 mt-3\"),\n }}\n >\n <button\n type=\"button\"\n onClick={handleCancel}\n style={{\n ...resolveDot(\"px-3 py-1.5\"),\n fontSize: \"0.875rem\",\n color: \"#6b7280\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n 취소\n </button>\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!title.trim()}\n style={\n title.trim()\n ? {\n ...resolveDot(\"px-4 py-1.5 rounded-lg\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n backgroundColor: \"#6366f1\",\n color: \"#ffffff\",\n border: \"none\",\n cursor: \"pointer\",\n transition: \"background-color 150ms\",\n }\n : {\n ...resolveDot(\"px-4 py-1.5 rounded-lg\"),\n fontSize: \"0.875rem\",\n fontWeight: 500,\n backgroundColor: \"#e5e7eb\",\n color: \"#9ca3af\",\n border: \"none\",\n cursor: \"not-allowed\",\n }\n }\n >\n 추가\n </button>\n </div>\n </div>\n );\n }\n\n // Add button - prominent and inviting\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={handleStartAdding}\n style={mergeStyles(\n {\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n ...resolveDot(\"gap-3 rounded-xl\"),\n border: \"2px dashed #d1d5db\",\n color: \"#9ca3af\",\n background: \"none\",\n cursor: \"pointer\",\n transition: \"all 200ms\",\n minHeight: 300,\n },\n resolveDot(dot),\n style,\n )}\n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n <div\n style={{\n ...resolveDot(\"w-12 h-12 rounded-full\"),\n border: \"2px dashed currentColor\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"all 200ms\",\n }}\n >\n <Icon name=\"add\" size={24} />\n </div>\n <span style={{ fontSize: \"0.875rem\", fontWeight: 500 }}>\n 새 컬럼 추가\n </span>\n </button>\n );\n },\n);\n\nKanbanAddColumn.displayName = \"KanbanAddColumn\";\n","\"use client\";\n\nimport React, { useState, useCallback, useMemo, useEffect } from \"react\";\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragStartEvent,\n type DragEndEvent,\n type DragOverEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n horizontalListSortingStrategy,\n arrayMove,\n} from \"@dnd-kit/sortable\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport { KanbanProvider } from \"./KanbanContext\";\nimport { KanbanColumn } from \"./KanbanColumn\";\nimport { KanbanCard } from \"./KanbanCard\";\nimport { KanbanAddColumn } from \"./KanbanAddColumn\";\nimport { Skeleton } from \"../../Skeleton\";\nimport type {\n KanbanBoardProps,\n KanbanColumn as KanbanColumnType,\n KanbanCard as KanbanCardType,\n} from \"./types\";\n\n/**\n * KanbanBoard 컴포넌트\n *\n * @dnd-kit을 사용한 드래그앤드롭 칸반 보드 컴포넌트입니다.\n * 컬럼 간 카드 이동, 같은 컬럼 내 순서 변경을 지원합니다.\n */\nexport const KanbanBoard = React.forwardRef<HTMLDivElement, KanbanBoardProps>(\n (\n {\n // Controlled props\n columns: controlledColumns,\n cards: controlledCards,\n // Uncontrolled props\n defaultColumns = [],\n defaultCards = [],\n // Callbacks\n onColumnsChange,\n onCardsChange,\n onCardMove,\n onColumnMove,\n onCardAdd,\n onCardDelete,\n onCardUpdate,\n onColumnAdd,\n onColumnDelete,\n onColumnUpdate,\n onCardClick,\n onKanbanDragStart,\n onKanbanDragEnd,\n // Style\n variant = \"elevated\",\n color = \"blue\",\n // Flags\n allowAddColumn = false,\n allowAddCard = true,\n allowColumnDrag = true,\n allowCardDrag = true,\n readOnly = false,\n // Layout\n columnMinWidth = 280,\n columnMaxWidth = 320,\n // Drag effects\n showDragOverlay = true,\n dragOverlayStyle,\n dragRotation = 3,\n dragScale = 1.05,\n // Standard props\n dot,\n style,\n ...props\n },\n ref,\n ) => {\n // SSR hydration fix: only render DndContext after mount\n const [isMounted, setIsMounted] = useState(false);\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Internal state for uncontrolled mode\n const [internalColumns, setInternalColumns] =\n useState<KanbanColumnType[]>(defaultColumns);\n const [internalCards, setInternalCards] =\n useState<KanbanCardType[]>(defaultCards);\n\n // Drag state\n const [activeId, setActiveId] = useState<string | null>(null);\n const [activeType, setActiveType] = useState<\"card\" | \"column\" | null>(\n null,\n );\n\n // Determine controlled vs uncontrolled\n const isControlled = controlledColumns !== undefined;\n const columns = isControlled ? controlledColumns : internalColumns;\n const cards = isControlled ? (controlledCards ?? []) : internalCards;\n\n // Is dragging?\n const isDragging = activeId !== null;\n const isDraggingColumn = activeType === \"column\";\n\n // Sensors\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 8 },\n }),\n useSensor(KeyboardSensor),\n );\n\n // Handle column changes\n const handleColumnsChange = useCallback(\n (newColumns: KanbanColumnType[]) => {\n if (!isControlled) {\n setInternalColumns(newColumns);\n }\n onColumnsChange?.(newColumns);\n },\n [isControlled, onColumnsChange],\n );\n\n // Handle card changes\n const handleCardsChange = useCallback(\n (newCards: KanbanCardType[]) => {\n if (!isControlled) {\n setInternalCards(newCards);\n }\n onCardsChange?.(newCards);\n },\n [isControlled, onCardsChange],\n );\n\n // Get cards for a specific column (sorted by order)\n const getColumnCards = useCallback(\n (columnId: string) => {\n return cards\n .filter((card) => card.columnId === columnId)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n },\n [cards],\n );\n\n // Find which column a card belongs to\n const findColumnByCardId = useCallback(\n (cardId: string): string | null => {\n const card = cards.find((c) => c.id === cardId);\n return card?.columnId ?? null;\n },\n [cards],\n );\n\n // Check if item is a column\n const isColumn = useCallback(\n (id: string): boolean => {\n return columns.some((col) => col.id === id);\n },\n [columns],\n );\n\n // Drag start handler\n const handleDragStart = useCallback(\n (event: DragStartEvent) => {\n const { active } = event;\n const id = active.id as string;\n const type = isColumn(id) ? \"column\" : \"card\";\n\n setActiveId(id);\n setActiveType(type);\n onKanbanDragStart?.(type, id);\n },\n [isColumn, onKanbanDragStart],\n );\n\n // Drag over handler (for moving cards between columns)\n const handleDragOver = useCallback(\n (event: DragOverEvent) => {\n const { active, over } = event;\n if (!over) return;\n\n const activeId = active.id as string;\n const overId = over.id as string;\n\n // Skip if dragging column (handled by dnd-kit sortable)\n if (isColumn(activeId)) return;\n\n const activeColumnId = findColumnByCardId(activeId);\n const overColumnId = isColumn(overId)\n ? overId\n : findColumnByCardId(overId);\n\n if (!activeColumnId || !overColumnId) return;\n\n // Moving to different column\n if (activeColumnId !== overColumnId) {\n const activeCards = getColumnCards(activeColumnId);\n const overCards = getColumnCards(overColumnId);\n\n const activeIndex = activeCards.findIndex((c) => c.id === activeId);\n const overIndex = isColumn(overId)\n ? overCards.length\n : overCards.findIndex((c) => c.id === overId);\n\n // Check WIP limit\n const overColumn = columns.find((c) => c.id === overColumnId);\n if (overColumn?.limit && overCards.length >= overColumn.limit) {\n return;\n }\n\n // Update cards\n const newCards = cards.map((card) => {\n if (card.id === activeId) {\n return { ...card, columnId: overColumnId, order: overIndex };\n }\n return card;\n });\n\n // Reorder cards in target column\n const reorderedCards = newCards.map((card) => {\n if (card.columnId === overColumnId && card.id !== activeId) {\n const currentOrder = card.order ?? 0;\n if (currentOrder >= overIndex) {\n return { ...card, order: currentOrder + 1 };\n }\n }\n return card;\n });\n\n handleCardsChange(reorderedCards);\n }\n },\n [\n cards,\n columns,\n findColumnByCardId,\n getColumnCards,\n handleCardsChange,\n isColumn,\n ],\n );\n\n // Drag end handler\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n const draggedId = activeId;\n const draggedType = activeType;\n\n setActiveId(null);\n setActiveType(null);\n\n if (draggedId && draggedType) {\n onKanbanDragEnd?.(draggedType, draggedId);\n }\n\n if (!over) return;\n\n const activeIdStr = active.id as string;\n const overId = over.id as string;\n\n if (activeIdStr === overId) return;\n\n // Column drag\n if (isColumn(activeIdStr) && isColumn(overId)) {\n const oldIndex = columns.findIndex((c) => c.id === activeIdStr);\n const newIndex = columns.findIndex((c) => c.id === overId);\n\n if (oldIndex !== newIndex) {\n const newColumns = arrayMove(columns, oldIndex, newIndex);\n handleColumnsChange(newColumns);\n onColumnMove?.({ columnId: activeIdStr, toIndex: newIndex });\n }\n return;\n }\n\n // Card drag within same column\n const activeColumnId = findColumnByCardId(activeIdStr);\n const overColumnId = isColumn(overId)\n ? overId\n : findColumnByCardId(overId);\n\n if (!activeColumnId || !overColumnId) return;\n\n if (activeColumnId === overColumnId) {\n const columnCards = getColumnCards(activeColumnId);\n const oldIndex = columnCards.findIndex((c) => c.id === activeIdStr);\n const newIndex = isColumn(overId)\n ? columnCards.length - 1\n : columnCards.findIndex((c) => c.id === overId);\n\n if (oldIndex !== newIndex && oldIndex !== -1 && newIndex !== -1) {\n const reorderedColumnCards = arrayMove(\n columnCards,\n oldIndex,\n newIndex,\n );\n\n // Update order for all cards in this column\n const newCards = cards.map((card) => {\n if (card.columnId === activeColumnId) {\n const newOrder = reorderedColumnCards.findIndex(\n (c) => c.id === card.id,\n );\n return { ...card, order: newOrder };\n }\n return card;\n });\n\n handleCardsChange(newCards);\n onCardMove?.({\n cardId: activeIdStr,\n fromColumnId: activeColumnId,\n toColumnId: overColumnId,\n toIndex: newIndex,\n });\n }\n } else {\n // Card moved to different column (already handled in dragOver)\n onCardMove?.({\n cardId: activeIdStr,\n fromColumnId: activeColumnId,\n toColumnId: overColumnId,\n toIndex: 0,\n });\n }\n },\n [\n activeId,\n activeType,\n columns,\n cards,\n findColumnByCardId,\n getColumnCards,\n handleColumnsChange,\n handleCardsChange,\n isColumn,\n onCardMove,\n onColumnMove,\n onKanbanDragEnd,\n ],\n );\n\n // Active item for overlay\n const activeCard = useMemo(() => {\n if (!activeId || activeType !== \"card\") return null;\n return cards.find((c) => c.id === activeId);\n }, [activeId, activeType, cards]);\n\n const activeColumnData = useMemo(() => {\n if (!activeId || activeType !== \"column\") return null;\n return columns.find((c) => c.id === activeId);\n }, [activeId, activeType, columns]);\n\n // Board styles based on variant\n const boardBaseStyle = useMemo((): React.CSSProperties => {\n const base: React.CSSProperties = {\n display: \"flex\",\n ...resolveDot(\"gap-4 pb-4\"),\n overflowX: \"auto\",\n minHeight: \"400px\",\n };\n\n switch (variant) {\n case \"gradient\":\n return {\n ...base,\n ...resolveDot(\"p-4 rounded-xl\"),\n background: \"linear-gradient(135deg, #f3f4f6, #e5e7eb)\",\n };\n case \"outline\":\n return {\n ...base,\n ...resolveDot(\"p-4 rounded-xl\"),\n border: \"2px dashed #d1d5db\",\n };\n case \"elevated\":\n return {\n ...base,\n ...resolveDot(\"p-4 rounded-xl\"),\n backgroundColor: \"rgba(249,250,251,0.5)\",\n };\n default:\n return base;\n }\n }, [variant]);\n\n // Column IDs for SortableContext\n const columnIds = useMemo(() => columns.map((c) => c.id), [columns]);\n\n // Drag overlay styles\n const cardOverlayStyle = useMemo(\n () => ({\n transform: `rotate(${dragRotation}deg) scale(${dragScale})`,\n }),\n [dragRotation, dragScale],\n );\n\n // SSR placeholder - prevents hydration mismatch from @dnd-kit's aria-describedby\n if (!isMounted) {\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label=\"칸반 보드\"\n style={mergeStyles(boardBaseStyle, resolveDot(dot), style)}\n {...props}\n >\n {columns.map((column) => (\n <div\n key={column.id}\n style={{\n flexShrink: 0,\n backgroundColor: \"#f3f4f6\",\n ...resolveDot(\"rounded-xl p-3\"),\n minWidth: columnMinWidth,\n maxWidth: columnMaxWidth,\n }}\n >\n <Skeleton variant=\"text\" dot=\"h-8 mb-3\" />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n ...resolveDot(\"gap-2\"),\n }}\n >\n {getColumnCards(column.id)\n .slice(0, 3)\n .map((card) => (\n <Skeleton key={card.id} variant=\"rounded\" dot=\"h-20\" />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <KanbanProvider\n columns={columns}\n cards={cards}\n onColumnsChange={handleColumnsChange}\n onCardsChange={handleCardsChange}\n onCardMove={onCardMove}\n onColumnMove={onColumnMove}\n onCardAdd={onCardAdd}\n onCardDelete={onCardDelete}\n onCardUpdate={onCardUpdate}\n onColumnAdd={onColumnAdd}\n onColumnDelete={onColumnDelete}\n onColumnUpdate={onColumnUpdate}\n onCardClick={onCardClick}\n variant={variant}\n color={color}\n allowCardDrag={allowCardDrag && !readOnly}\n allowColumnDrag={allowColumnDrag && !readOnly}\n allowAddCard={allowAddCard && !readOnly}\n allowAddColumn={allowAddColumn && !readOnly}\n readOnly={readOnly}\n >\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n >\n {/* Dimmed overlay when dragging column */}\n {showDragOverlay && isDragging && isDraggingColumn && (\n <div\n style={mergeStyles(\n {\n position: \"fixed\",\n inset: 0,\n backgroundColor: \"rgba(0,0,0,0.2)\",\n zIndex: 40,\n transition: \"opacity 200ms\",\n },\n dragOverlayStyle,\n )}\n aria-hidden=\"true\"\n />\n )}\n\n <div\n ref={ref}\n role=\"region\"\n aria-label=\"칸반 보드\"\n style={mergeStyles(\n boardBaseStyle,\n isDragging ? { position: \"relative\", zIndex: 50 } : undefined,\n resolveDot(dot),\n style,\n )}\n {...props}\n >\n <SortableContext\n items={columnIds}\n strategy={horizontalListSortingStrategy}\n >\n {columns.map((column, index) => (\n <KanbanColumn\n key={column.id}\n column={column}\n cards={getColumnCards(column.id)}\n index={index}\n style={\n column.collapsed\n ? undefined\n : {\n minWidth: columnMinWidth,\n maxWidth: columnMaxWidth,\n }\n }\n />\n ))}\n </SortableContext>\n\n {/* Add Column Button */}\n {allowAddColumn && !readOnly && (\n <KanbanAddColumn\n style={{\n minWidth: columnMinWidth,\n maxWidth: columnMaxWidth,\n }}\n />\n )}\n </div>\n\n {/* Drag Overlay */}\n <DragOverlay\n dropAnimation={{\n duration: 200,\n easing: \"cubic-bezier(0.18, 0.67, 0.6, 1.22)\",\n }}\n >\n {activeCard && (\n <div\n style={{\n ...cardOverlayStyle,\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n }}\n >\n <KanbanCard card={activeCard} index={0} isDragging />\n </div>\n )}\n {activeColumnData && (\n <div\n style={{\n opacity: 0.9,\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n transform: \"rotate(1deg)\",\n minWidth: columnMinWidth,\n maxWidth: columnMaxWidth,\n }}\n >\n <KanbanColumn\n column={activeColumnData}\n cards={getColumnCards(activeColumnData.id)}\n index={0}\n />\n </div>\n )}\n </DragOverlay>\n </DndContext>\n </KanbanProvider>\n );\n },\n);\n\nKanbanBoard.displayName = \"KanbanBoard\";\n","\"use client\";\n\nimport React from \"react\";\nimport { mergeStyles, resolveDot } from \"../../../hooks/useDotMap\";\nimport type { KanbanDropIndicatorProps } from \"./types\";\n\n/**\n * KanbanDropIndicator 컴포넌트\n *\n * 드래그앤드롭 시 드롭 위치를 시각적으로 표시합니다.\n */\nexport const KanbanDropIndicator = React.forwardRef<HTMLDivElement, KanbanDropIndicatorProps>(\n ({ visible, orientation = \"horizontal\", dot, style, ...props }, ref) => {\n if (!visible) return null;\n\n const baseStyle: React.CSSProperties = {\n transition: \"all 150ms\",\n borderRadius: \"9999px\",\n backgroundColor: \"#6366f1\",\n };\n\n const orientationStyle: React.CSSProperties =\n orientation === \"horizontal\"\n ? { height: \"4px\", marginTop: \"4px\", marginBottom: \"4px\" }\n : { width: \"4px\", marginLeft: \"4px\", marginRight: \"4px\", alignSelf: \"stretch\" };\n\n return (\n <div\n ref={ref}\n style={mergeStyles(baseStyle, orientationStyle, resolveDot(dot), style)}\n {...props}\n />\n );\n }\n);\n\nKanbanDropIndicator.displayName = \"KanbanDropIndicator\";\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {d,a as a$1}from'./chunk-7T3IUG3G.mjs';import {b,a}from'./chunk-7CGJQSJO.mjs';import {d as d$1,e}from'./chunk-OBMOTQEU.mjs';import f,{createContext,useState,useMemo,useContext,useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';import {dotVariants,dot}from'@hua-labs/dot';function h(e={}){let{threshold:n=0,rootMargin:t="0px",triggerOnce:r=false,onChange:o}=e,a=useRef(null),[d,s]=useState(false),[x,C]=useState(null),i=useRef(false);return useEffect(()=>{let b=a.current;if(!b||r&&i.current)return;let T=new IntersectionObserver(([c])=>{let R=c.isIntersecting;r&&R&&(i.current=true),s(R),C(c),o==null||o(c);},{threshold:n,rootMargin:t});return T.observe(b),()=>{T.disconnect();}},[n,t,r,o]),{ref:a,inView:d,entry:x}}var U={enableAnimations:true,components:{}},v=createContext(U);function de({value:e,children:n}){return jsx(v.Provider,{value:e,children:n})}function P(){return useContext(v)}function A(e){let{components:n}=useContext(v);return n[e]}function _(e){switch(e){case "slideUp":return "translateY(24px)";case "slideLeft":return "translateX(24px)";case "slideRight":return "translateX(-24px)";case "scaleIn":return "scale(0.95)";case "bounceIn":return "scale(0.9)";default:return "none"}}function N({role:e,enabled:n}){let t=A(e),{enableAnimations:r}=P(),o=d(),{ref:a,inView:d$1}=h({triggerOnce:true,threshold:.1}),s=n===true&&r&&!o,x=useMemo(()=>{if(!s||!t)return {};let C=_(t.entrance);return d$1?{opacity:1,transform:"none",transition:`opacity ${t.duration}ms ease-out ${t.delay}ms, transform ${t.duration}ms ease-out ${t.delay}ms`}:{opacity:0,transform:C,transition:`opacity ${t.duration}ms ease-out ${t.delay}ms, transform ${t.duration}ms ease-out ${t.delay}ms`}},[s,t,d$1]);return {ref:a,style:x,className:s&&!d$1?"will-change-[opacity,transform]":""}}function I(e=["transform","box-shadow","opacity","background-color","color","border-color"],n=180){let t=a.springy;return e.map(r=>`${r} ${n}ms ${t}`).join(", ")}({modal:{transition:`opacity ${b.springy}ms ${a.springy}, transform ${b.springy}ms ${a.springy}`},dropdown:{transition:`opacity ${b.soft}ms ${a.soft}, transform ${b.soft}ms ${a.soft}`}});var E=e=>dot(e),j=dotVariants({base:"",variants:{variant:{default:"bg-[var(--color-card)] text-[var(--color-card-foreground)] border border-[var(--color-border)]",outline:"bg-transparent border-2 border-[var(--color-border)]",elevated:"bg-[var(--color-card)] text-[var(--color-card-foreground)] shadow-lg border border-[var(--color-border)]"},rounded:{none:"rounded-none",sm:"rounded",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl",full:"rounded-full"},shadow:{none:"shadow-none",sm:"shadow-sm",md:"shadow-md",lg:"shadow-lg",xl:"shadow-xl","2xl":"shadow-2xl"},padding:{none:"",sm:"p-3",md:"p-4",lg:"p-6",xl:"p-8"}},defaultVariants:{variant:"default",rounded:"lg",padding:"none"}}),z={boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)",transform:"translateY(-2px)",cursor:"pointer"},W={boxShadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)",cursor:"pointer"},q=I(["transform","box-shadow"],200),B=f.forwardRef(({dot:e$1,variant:n="default",rounded:t="lg",shadow:r,padding:o="none",hoverable:a,animated:d$2,style:s,...x},C)=>{let i=N({role:"card",enabled:d$2}),[b,T]=useState(false),c=d(),R=useMemo(()=>{let O=j({variant:n,rounded:t,shadow:r,padding:o}),V=i.className?{willChange:"opacity, transform"}:void 0;return d$1(O,a?{transition:c?"box-shadow 200ms ease-out":q}:void 0,a&&b?c?W:z:void 0,V,i.style,e(e$1),s)},[n,t,r,o,a,b,c,i.style,i.className,e$1,s]);return jsx("div",{ref:a$1(C,i.ref),style:R,onMouseEnter:a?()=>T(true):void 0,onMouseLeave:a?()=>T(false):void 0,...x})});B.displayName="Card";var J=f.forwardRef(({dot:e$1,style:n,...t},r)=>{let o=useMemo(()=>d$1(E("flex flex-col gap-1"),e(e$1),n),[e$1,n]);return jsx("div",{ref:r,style:o,...t})});J.displayName="CardHeader";var K=f.forwardRef(({dot:e$1,style:n,...t},r)=>{let o=useMemo(()=>d$1(E("text-lg font-semibold leading-tight tracking-tight"),e(e$1),n),[e$1,n]);return jsx("h3",{ref:r,style:o,...t})});K.displayName="CardTitle";var Q=f.forwardRef(({dot:e$1,style:n,...t},r)=>{let o=useMemo(()=>d$1(E("text-sm text-[var(--color-muted-foreground)]"),e(e$1),n),[e$1,n]);return jsx("p",{ref:r,style:o,...t})});Q.displayName="CardDescription";var Z=f.forwardRef(({dot:e$1,style:n,...t},r)=>{let o=useMemo(()=>d$1(E("p-4"),e(e$1),n),[e$1,n]);return jsx("div",{ref:r,style:o,...t})});Z.displayName="CardContent";var ee=f.forwardRef(({dot:e$1,style:n,...t},r)=>{let o=useMemo(()=>d$1(E("flex items-center"),e(e$1),n),[e$1,n]);return jsx("div",{ref:r,style:o,...t})});ee.displayName="CardFooter";export{h as a,de as b,P as c,A as d,N as e,B as f,J as g,K as h,Q as i,Z as j,ee as k};//# sourceMappingURL=chunk-UR3TIWBS.mjs.map
3
+ //# sourceMappingURL=chunk-UR3TIWBS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useInView.ts","../src/context/MotionConfigContext.tsx","../src/hooks/useAnimatedEntrance.ts","../src/lib/styles/animation.ts","../src/components/Card.tsx"],"names":["useInView","options","threshold","rootMargin","triggerOnce","onChange","ref","useRef","inView","setInView","useState","entry","setEntry","frozenRef","useEffect","element","observer","isInView","defaultValue","MotionConfigContext","createContext","MotionConfigProvider","value","children","jsx","useMotionConfig","useContext","useComponentMotion","role","components","getInitialTransform","entrance","useAnimatedEntrance","enabled","config","enableAnimations","prefersReducedMotion","useReducedMotion","shouldAnimate","style","useMemo","initialTransform","createSpringTransition","properties","duration","easing","EASING_FUNCTIONS","prop","DURATIONS","s","input","dotFn","cardVariants","dotVariants","HOVER_STYLE","HOVER_STYLE_REDUCED","SPRING_TRANSITION","Card","React","dotProp","variant","rounded","shadow","padding","hoverable","animated","props","isHovered","setIsHovered","reducedMotion","computedStyle","base","entranceWillChange","mergeStyles","resolveDot","composeRefs","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"mappings":"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","file":"chunk-UR3TIWBS.mjs","sourcesContent":["\"use client\";\n\nimport { useRef, useState, useEffect, useCallback } from \"react\";\n\n/**\n * useInView 훅의 옵션 / useInView hook options\n * @property {number} [threshold=0] - 뷰포트 진입 임계값 (0-1) / Viewport entry threshold\n * @property {string} [rootMargin=\"0px\"] - 루트 마진 / Root margin\n * @property {boolean} [triggerOnce=false] - 한 번만 트리거 / Trigger only once\n * @property {(entry: IntersectionObserverEntry) => void} [onChange] - 상태 변경 콜백 / State change callback\n */\nexport interface UseInViewOptions {\n threshold?: number | number[];\n rootMargin?: string;\n triggerOnce?: boolean;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/**\n * useInView 훅의 반환값 / useInView hook return value\n */\nexport interface UseInViewReturn<T extends HTMLElement = HTMLElement> {\n ref: React.RefObject<T | null>;\n inView: boolean;\n entry: IntersectionObserverEntry | null;\n}\n\n/**\n * useInView 훅 / useInView hook\n *\n * 요소가 뷰포트에 진입했는지 감지하는 훅입니다.\n * 애니메이션 트리거, 레이지 로딩, 무한 스크롤 등에 사용합니다.\n *\n * Hook that detects when an element enters the viewport.\n * Used for animation triggers, lazy loading, infinite scroll, etc.\n *\n * @example\n * // 기본 사용 / Basic usage\n * const { ref, inView } = useInView();\n *\n * return (\n * <div ref={ref} className={inView ? \"animate-in\" : \"opacity-0\"}>\n * Content\n * </div>\n * );\n *\n * @example\n * // 한 번만 트리거 / Trigger once\n * const { ref, inView } = useInView({ triggerOnce: true, threshold: 0.5 });\n */\nexport function useInView<T extends HTMLElement = HTMLElement>(\n options: UseInViewOptions = {}\n): UseInViewReturn<T> {\n const {\n threshold = 0,\n rootMargin = \"0px\",\n triggerOnce = false,\n onChange,\n } = options;\n\n const ref = useRef<T>(null);\n const [inView, setInView] = useState(false);\n const [entry, setEntry] = useState<IntersectionObserverEntry | null>(null);\n const frozenRef = useRef(false);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n // Skip if already triggered once\n if (triggerOnce && frozenRef.current) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n const isInView = entry.isIntersecting;\n\n // Handle triggerOnce\n if (triggerOnce && isInView) {\n frozenRef.current = true;\n }\n\n setInView(isInView);\n setEntry(entry);\n onChange?.(entry);\n },\n { threshold, rootMargin }\n );\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [threshold, rootMargin, triggerOnce, onChange]);\n\n return { ref, inView, entry };\n}\n\nexport default useInView;\n","\"use client\"\n\nimport React, { createContext, useContext } from \"react\"\n\n/**\n * Component-level motion configuration\n * Matches MotionPreset from @hua-labs/motion-core\n */\nexport interface ComponentMotionConfig {\n entrance: string\n delay: number\n duration: number\n hover: boolean\n click: boolean\n}\n\n/**\n * MotionConfig context value\n */\nexport interface MotionConfigContextValue {\n enableAnimations: boolean\n components: Record<string, ComponentMotionConfig>\n}\n\nconst defaultValue: MotionConfigContextValue = {\n enableAnimations: true,\n components: {},\n}\n\nconst MotionConfigContext = createContext<MotionConfigContextValue>(defaultValue)\n\n/**\n * MotionConfigProvider\n *\n * Provides motion configuration to all descendant components.\n * Used by hua framework to inject preset motion data.\n */\nexport function MotionConfigProvider({\n value,\n children,\n}: {\n value: MotionConfigContextValue\n children: React.ReactNode\n}) {\n return (\n <MotionConfigContext.Provider value={value}>\n {children}\n </MotionConfigContext.Provider>\n )\n}\n\n/**\n * useMotionConfig — returns full motion config context\n */\nexport function useMotionConfig(): MotionConfigContextValue {\n return useContext(MotionConfigContext)\n}\n\n/**\n * useComponentMotion — returns motion config for a specific component role\n *\n * @param role - Component role key (e.g. 'card', 'hero', 'button')\n * @returns ComponentMotionConfig or undefined if not configured\n */\nexport function useComponentMotion(\n role: string\n): ComponentMotionConfig | undefined {\n const { components } = useContext(MotionConfigContext)\n return components[role]\n}\n","\"use client\"\n\nimport React, { useMemo } from \"react\"\nimport { useInView } from \"./useInView\"\nimport { useReducedMotion } from \"./useReducedMotion\"\nimport { useComponentMotion, useMotionConfig } from \"../context/MotionConfigContext\"\n\nexport interface UseAnimatedEntranceOptions {\n /** Component role key for preset lookup (e.g. 'card', 'hero') */\n role: string\n /** Explicitly enable/disable animation (overrides preset) */\n enabled?: boolean\n}\n\nexport interface UseAnimatedEntranceReturn<T extends HTMLElement = HTMLElement> {\n ref: React.RefObject<T | null>\n style: React.CSSProperties\n className: string\n}\n\n/** Map entrance type to initial CSS transform */\nfunction getInitialTransform(entrance: string): string {\n switch (entrance) {\n case \"slideUp\":\n return \"translateY(24px)\"\n case \"slideLeft\":\n return \"translateX(24px)\"\n case \"slideRight\":\n return \"translateX(-24px)\"\n case \"scaleIn\":\n return \"scale(0.95)\"\n case \"bounceIn\":\n return \"scale(0.9)\"\n case \"fadeIn\":\n default:\n return \"none\"\n }\n}\n\n/**\n * useAnimatedEntrance — CSS-based entrance animation hook\n *\n * Uses IntersectionObserver (triggerOnce) + CSS transition.\n * Respects prefers-reduced-motion and MotionConfig.enableAnimations.\n *\n * @example\n * const { ref, style, className } = useAnimatedEntrance({ role: 'card', enabled: true })\n * <div ref={ref} style={style} className={className}>...</div>\n */\nexport function useAnimatedEntrance<T extends HTMLElement = HTMLElement>({\n role,\n enabled,\n}: UseAnimatedEntranceOptions): UseAnimatedEntranceReturn<T> {\n const config = useComponentMotion(role)\n const { enableAnimations } = useMotionConfig()\n const prefersReducedMotion = useReducedMotion()\n const { ref, inView } = useInView<T>({ triggerOnce: true, threshold: 0.1 })\n\n const shouldAnimate = enabled === true && enableAnimations && !prefersReducedMotion\n\n const style = useMemo<React.CSSProperties>(() => {\n if (!shouldAnimate || !config) return {}\n\n const initialTransform = getInitialTransform(config.entrance)\n\n if (inView) {\n return {\n opacity: 1,\n transform: \"none\",\n transition: `opacity ${config.duration}ms ease-out ${config.delay}ms, transform ${config.duration}ms ease-out ${config.delay}ms`,\n }\n }\n\n return {\n opacity: 0,\n transform: initialTransform,\n transition: `opacity ${config.duration}ms ease-out ${config.delay}ms, transform ${config.duration}ms ease-out ${config.delay}ms`,\n }\n }, [shouldAnimate, config, inView])\n\n return {\n ref,\n style,\n className: shouldAnimate && !inView ? \"will-change-[opacity,transform]\" : \"\",\n }\n}\n","/**\n * Animation utilities\n * Shared spring transition & entrance animation generators for HUA-UI.\n * Reuses EASING_FUNCTIONS from motion/presets.ts.\n */\n\nimport type { CSSProperties } from \"react\";\nimport { EASING_FUNCTIONS, DURATIONS } from \"../motion/presets\";\n\n/**\n * Creates a spring-based CSS transition string.\n *\n * @param properties - CSS properties to animate (default: transform + common)\n * @param duration - duration in ms (default: 180)\n * @returns CSS transition string\n *\n * @example\n * style={{ transition: createSpringTransition() }}\n */\nexport function createSpringTransition(\n properties: string[] = [\n \"transform\",\n \"box-shadow\",\n \"opacity\",\n \"background-color\",\n \"color\",\n \"border-color\",\n ],\n duration: number = 180,\n): string {\n const easing = EASING_FUNCTIONS.springy;\n return properties.map((prop) => `${prop} ${duration}ms ${easing}`).join(\", \");\n}\n\nexport type EnterPreset = \"modal\" | \"dropdown\";\n\ninterface EnterAnimationConfig {\n from: CSSProperties;\n to: CSSProperties;\n transition: string;\n}\n\nconst ENTER_PRESETS: Record<EnterPreset, EnterAnimationConfig> = {\n modal: {\n from: { opacity: 0, transform: \"scale(0.95) translateY(8px)\" },\n to: { opacity: 1, transform: \"scale(1) translateY(0)\" },\n transition: `opacity ${DURATIONS.springy}ms ${EASING_FUNCTIONS.springy}, transform ${DURATIONS.springy}ms ${EASING_FUNCTIONS.springy}`,\n },\n dropdown: {\n from: { opacity: 0, transform: \"scale(0.95) translateY(-4px)\" },\n to: { opacity: 1, transform: \"scale(1) translateY(0)\" },\n transition: `opacity ${DURATIONS.soft}ms ${EASING_FUNCTIONS.soft}, transform ${DURATIONS.soft}ms ${EASING_FUNCTIONS.soft}`,\n },\n};\n\n/**\n * Returns enter animation config for a given preset.\n *\n * @param preset - \"modal\" | \"dropdown\"\n * @returns { from, to, transition } for use with inline styles or useAnimatedEntrance\n *\n * @example\n * const { from, to, transition } = createEnterAnimation(\"modal\")\n */\nexport function createEnterAnimation(\n preset: EnterPreset,\n): EnterAnimationConfig {\n return ENTER_PRESETS[preset];\n}\n","\"use client\";\n\nimport React, { useState, useMemo } from \"react\";\nimport { dotVariants, dot as dotFn } from \"@hua-labs/dot\";\nimport { mergeStyles, resolveDot } from \"../hooks/useDotMap\";\nimport { composeRefs } from \"../lib/Slot\";\nimport { useAnimatedEntrance } from \"../hooks/useAnimatedEntrance\";\nimport { useReducedMotion } from \"../hooks/useReducedMotion\";\nimport { createSpringTransition } from \"../lib/styles/animation\";\n\nconst s = (input: string) => dotFn(input) as React.CSSProperties;\n\nexport const cardVariants = dotVariants({\n base: \"\",\n variants: {\n variant: {\n default:\n \"bg-[var(--color-card)] text-[var(--color-card-foreground)] border border-[var(--color-border)]\",\n outline: \"bg-transparent border-2 border-[var(--color-border)]\",\n elevated:\n \"bg-[var(--color-card)] text-[var(--color-card-foreground)] shadow-lg border border-[var(--color-border)]\",\n },\n rounded: {\n none: \"rounded-none\",\n sm: \"rounded\",\n md: \"rounded-md\",\n lg: \"rounded-lg\",\n xl: \"rounded-xl\",\n full: \"rounded-full\",\n },\n shadow: {\n none: \"shadow-none\",\n sm: \"shadow-sm\",\n md: \"shadow-md\",\n lg: \"shadow-lg\",\n xl: \"shadow-xl\",\n \"2xl\": \"shadow-2xl\",\n },\n padding: {\n none: \"\",\n sm: \"p-3\",\n md: \"p-4\",\n lg: \"p-6\",\n xl: \"p-8\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n rounded: \"lg\",\n padding: \"none\",\n },\n});\n\nconst HOVER_STYLE: React.CSSProperties = {\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n transform: \"translateY(-2px)\",\n cursor: \"pointer\",\n};\n\nconst HOVER_STYLE_REDUCED: React.CSSProperties = {\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)\",\n cursor: \"pointer\",\n};\n\nconst SPRING_TRANSITION: string = createSpringTransition(\n [\"transform\", \"box-shadow\"],\n 200,\n);\n\n/**\n * Card 컴포넌트의 props / Card component props\n */\nexport interface CardProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n variant?: \"default\" | \"outline\" | \"elevated\";\n rounded?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n shadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n /** @default \"none\" — use `padding=\"md\"` for standard card padding */\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n hoverable?: boolean;\n /** Enable preset entrance animation (reads from MotionConfigContext) */\n animated?: boolean;\n dot?: string;\n}\n\n/**\n * Card 컴포넌트 / Card component\n *\n * 콘텐츠를 카드 형태로 표시하는 컴포넌트입니다.\n *\n * @example\n * <Card>\n * <CardHeader><CardTitle>제목</CardTitle></CardHeader>\n * <CardContent><p>내용</p></CardContent>\n * </Card>\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n dot: dotProp,\n variant = \"default\",\n rounded = \"lg\",\n shadow,\n padding = \"none\",\n hoverable,\n animated,\n style,\n ...props\n },\n ref,\n ) => {\n const entrance = useAnimatedEntrance<HTMLDivElement>({\n role: \"card\",\n enabled: animated,\n });\n const [isHovered, setIsHovered] = useState(false);\n const reducedMotion = useReducedMotion();\n\n const computedStyle = useMemo(() => {\n const base = cardVariants({\n variant,\n rounded,\n shadow,\n padding,\n }) as React.CSSProperties;\n const entranceWillChange = entrance.className\n ? ({ willChange: \"opacity, transform\" } as React.CSSProperties)\n : undefined;\n const hoverTransition = hoverable\n ? {\n transition: reducedMotion\n ? \"box-shadow 200ms ease-out\"\n : SPRING_TRANSITION,\n }\n : undefined;\n const hoverActive =\n hoverable && isHovered\n ? reducedMotion\n ? HOVER_STYLE_REDUCED\n : HOVER_STYLE\n : undefined;\n return mergeStyles(\n base,\n hoverTransition,\n hoverActive,\n entranceWillChange,\n entrance.style,\n resolveDot(dotProp),\n style,\n );\n }, [\n variant,\n rounded,\n shadow,\n padding,\n hoverable,\n isHovered,\n reducedMotion,\n entrance.style,\n entrance.className,\n dotProp,\n style,\n ]);\n\n return (\n <div\n ref={composeRefs(ref, entrance.ref)}\n style={computedStyle}\n onMouseEnter={hoverable ? () => setIsHovered(true) : undefined}\n onMouseLeave={hoverable ? () => setIsHovered(false) : undefined}\n {...props}\n />\n );\n },\n);\n\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(s(\"flex flex-col gap-1\"), resolveDot(dotProp), style),\n [dotProp, style],\n );\n return <div ref={ref} style={computedStyle} {...props} />;\n },\n);\n\nCardHeader.displayName = \"CardHeader\";\n\nexport interface CardTitleProps extends Omit<\n React.HTMLAttributes<HTMLHeadingElement>,\n \"className\"\n> {\n dot?: string;\n}\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, CardTitleProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n s(\"text-lg font-semibold leading-tight tracking-tight\"),\n resolveDot(dotProp),\n style,\n ),\n [dotProp, style],\n );\n return <h3 ref={ref} style={computedStyle} {...props} />;\n },\n);\n\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps extends Omit<\n React.HTMLAttributes<HTMLParagraphElement>,\n \"className\"\n> {\n dot?: string;\n}\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n CardDescriptionProps\n>(({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () =>\n mergeStyles(\n s(\"text-sm text-[var(--color-muted-foreground)]\"),\n resolveDot(dotProp),\n style,\n ),\n [dotProp, style],\n );\n return <p ref={ref} style={computedStyle} {...props} />;\n});\n\nCardDescription.displayName = \"CardDescription\";\n\nexport interface CardContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n}\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(s(\"p-4\"), resolveDot(dotProp), style),\n [dotProp, style],\n );\n return <div ref={ref} style={computedStyle} {...props} />;\n },\n);\n\nCardContent.displayName = \"CardContent\";\n\nexport interface CardFooterProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"className\"\n> {\n dot?: string;\n}\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ dot: dotProp, style, ...props }, ref) => {\n const computedStyle = useMemo(\n () => mergeStyles(s(\"flex items-center\"), resolveDot(dotProp), style),\n [dotProp, style],\n );\n return <div ref={ref} style={computedStyle} {...props} />;\n },\n);\n\nCardFooter.displayName = \"CardFooter\";\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n"]}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import {f,g,h,i,j}from'./chunk-UR3TIWBS.mjs';import {a}from'./chunk-M4JE7TQL.mjs';import {e,d}from'./chunk-OBMOTQEU.mjs';import V,{useState,useMemo}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var w=V.forwardRef(({dot:u,style:p,value:i,max:f=100,size:m="md",color:y="blue",...a},d$1)=>{var g;let v={sm:e("h-2"),md:e("h-3"),lg:e("h-4")},k={blue:{backgroundColor:"rgb(99 102 241)"},green:{backgroundColor:"rgb(34 197 94)"},yellow:{backgroundColor:"rgb(234 179 8)"},red:{backgroundColor:"rgb(239 68 68)"},purple:{backgroundColor:"rgb(168 85 247)"},orange:{backgroundColor:"rgb(249 115 22)"},indigo:{backgroundColor:"rgb(99 102 241)"},pink:{backgroundColor:"rgb(236 72 153)"},gray:{backgroundColor:"rgb(107 114 128)"}},b=Math.min(Math.max(i/f*100,0),100),S=d(e("w-full rounded-full"),v[m],{backgroundColor:"var(--color-muted, rgb(229 231 235))"},e(u),p),x=d({height:"100%",borderRadius:"9999px",transition:"all 300ms ease"},(g=k[y])!=null?g:k.blue,{width:`${b}%`});return jsx("div",{ref:d$1,style:S,...a,children:jsx("div",{style:x})})});w.displayName="EmotionMeter";var N=V.forwardRef(({dot:u,style:p,emotion:i,isSelected:f=false,size:m="md",onMouseEnter:y,onMouseLeave:a,onFocus:d$1,onBlur:v,...k},b)=>{let[S,x]=useState(false),[g,R]=useState(false),E={sm:{width:"2rem",height:"2rem",fontSize:"0.875rem"},md:{width:"3rem",height:"3rem",fontSize:"1.125rem"},lg:{width:"4rem",height:"4rem",fontSize:"1.25rem"}},z=useMemo(()=>{let r={borderRadius:"9999px",borderWidth:"2px",borderStyle:"solid",transition:"all 200ms ease",outline:"none",cursor:"pointer",display:"inline-flex",alignItems:"center",justifyContent:"center"},s=f?{borderColor:"rgb(99 102 241)",backgroundColor:"rgb(238 242 255)"}:{borderColor:"var(--color-border, rgb(209 213 219))",backgroundColor:"var(--color-background, rgb(255 255 255))"},C=S?{transform:"scale(1.05)"}:{},P=g?{boxShadow:"0 0 0 1px var(--color-ring, rgb(99 102 241))"}:{};return d(r,E[m],s,C,P,e(u),p)},[f,S,g,m,u,p]);return jsx("button",{ref:b,style:z,onMouseEnter:r=>{x(true),y==null||y(r);},onMouseLeave:r=>{x(false),a==null||a(r);},onFocus:r=>{R(true),d$1==null||d$1(r);},onBlur:r=>{R(false),v==null||v(r);},...k,children:i})});N.displayName="EmotionButton";var ee=[{key:"joy",label:"\uAE30\uC068",icon:"smile",color:"yellow"},{key:"sadness",label:"\uC2AC\uD514",icon:"frown",color:"blue"},{key:"anger",label:"\uD654\uB0A8",icon:"angry",color:"red"},{key:"calm",label:"\uD3C9\uC628",icon:"heart",color:"green"},{key:"excitement",label:"\uC124\uB818",icon:"star",color:"pink"},{key:"worry",label:"\uAC71\uC815",icon:"meh",color:"gray"},{key:"gratitude",label:"\uAC10\uC0AC",icon:"heart",color:"purple"},{key:"loneliness",label:"\uC678\uB85C\uC6C0",icon:"user",color:"indigo"}],G=V.forwardRef(({dot:u,style:p,selectedEmotion:i,onEmotionSelect:f,layout:m="grid",showIntensity:y=false,intensity:a=50,onIntensityChange:d$1,emotions:v=ee,size:k="md",variant:b="button",...S},x)=>{let g=r=>{f==null||f(r);},R=r=>{let s=i===r.key;if(b==="button")return jsx(N,{emotion:r.key,isSelected:s,size:k,onClick:()=>g(r.key),style:s?{boxShadow:"0 0 0 1px var(--color-primary, rgb(99 102 241))",outlineOffset:"2px"}:void 0,children:r.label},r.key);if(b==="card"){let C=d(e("p-4 rounded-lg cursor-pointer"),{borderWidth:"2px",borderStyle:"solid",transition:"all 200ms ease",borderColor:s?"var(--color-primary, rgb(99 102 241))":"var(--color-border, rgb(229 231 235))",backgroundColor:s?"color-mix(in srgb, var(--color-primary, rgb(99 102 241)) 5%, transparent)":"transparent"}),P=d(e("w-8 h-8 rounded-full"),{display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:s?"var(--color-primary, rgb(99 102 241))":"var(--color-muted, rgb(243 244 246))",color:s?"var(--color-primary-foreground, rgb(255 255 255))":void 0});return jsx("div",{style:C,onClick:()=>g(r.key),children:jsxs("div",{style:d(e("flex items-center gap-3")),children:[jsx("div",{style:P,children:r.icon&&jsxs("span",{style:{fontSize:"1.125rem"},children:[r.icon==="smile"&&"\u{1F60A}",r.icon==="frown"&&"\u{1F622}",r.icon==="angry"&&"\u{1F620}",r.icon==="heart"&&"\u2764\uFE0F",r.icon==="star"&&"\u2B50",r.icon==="meh"&&"\u{1F610}",r.icon==="user"&&"\u{1F464}"]})}),jsx("span",{style:{fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"120px"},children:r.label})]})},r.key)}if(b==="chip"){let C=d(e("rounded-full cursor-pointer text-sm font-medium"),{...e("py-1 px-3"),transition:"all 200ms ease",backgroundColor:s?"var(--color-primary, rgb(99 102 241))":"var(--color-muted, rgb(243 244 246))",color:s?"var(--color-primary-foreground, rgb(255 255 255))":void 0});return jsx("div",{style:C,onClick:()=>g(r.key),children:jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100px",display:"block"},children:r.label})},r.key)}return null},E={grid:{display:"grid",gridTemplateColumns:"repeat(2, minmax(0, 1fr))",...e("gap-2")},list:{display:"flex",flexDirection:"column",...e("gap-2")},compact:{display:"flex",flexWrap:"wrap",...e("gap-1")}},z=d({display:"flex",flexDirection:"column",...e("gap-4")},e(u),p);return jsxs("div",{ref:x,style:z,...S,children:[jsx("div",{style:E[m],children:v.map(R)}),y&&i&&jsxs("div",{style:{display:"flex",flexDirection:"column",...e("gap-3")},children:[jsxs("div",{style:d(e("flex items-center"),{justifyContent:"space-between"}),children:[jsx("span",{style:{fontSize:"0.875rem",fontWeight:500},children:"\uAC10\uC815 \uAC15\uB3C4"}),jsxs("span",{style:{fontSize:"0.875rem",color:"var(--color-muted-foreground, rgb(107 114 128))"},children:[a,"%"]})]}),jsx("input",{type:"range",min:"0",max:"100",value:a,onChange:r=>d$1==null?void 0:d$1(Number(r.target.value)),style:{width:"100%",...e("h-2 rounded-lg"),cursor:"pointer",appearance:"none",backgroundColor:"var(--color-muted, rgb(229 231 235))"}}),jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.75rem",color:"var(--color-muted-foreground, rgb(107 114 128))"},children:[jsx("span",{children:"\uC57D\uD568"}),jsx("span",{children:"\uBCF4\uD1B5"}),jsx("span",{children:"\uAC15\uD568"})]})]}),i&&y&&jsx("div",{style:e("flex justify-center"),children:jsx(w,{value:a,size:"md",color:"blue"})})]})});G.displayName="EmotionSelector";var re=u=>{var i;let p={yellow:"rgb(234 179 8)",green:"rgb(34 197 94)",blue:"rgb(59 130 246)",red:"rgb(239 68 68)",purple:"rgb(168 85 247)",orange:"rgb(249 115 22)",indigo:"rgb(99 102 241)",pink:"rgb(236 72 153)",gray:"rgb(107 114 128)"};return {backgroundColor:(i=p[u])!=null?i:p.gray}},Q=V.forwardRef(({dot:u,style:p,primaryEmotion:i$1,emotionDistribution:f$1=[],keywords:m=[],intensity:y=50,positivity:a$1=70,energy:d$1=60,showMeter:v=true,showDistribution:k=true,showKeywords:b=true,showMetrics:S=true,layout:x="detailed",...g$1},R)=>{let E=n=>n<30?"\uC57D\uD568":n<70?"\uBCF4\uD1B5":"\uAC15\uD568",z=n=>n<30?"\uBD80\uC815\uC801":n<70?"\uC911\uB9BD\uC801":"\uAE0D\uC815\uC801",r=n=>n<30?"\uB0AE\uC74C":n<70?"\uBCF4\uD1B5":"\uB192\uC74C",s={color:"var(--color-muted-foreground, rgb(107 114 128))"},C={display:"flex",flexDirection:"column",...e("gap-3")},P={display:"flex",flexDirection:"column",...e("gap-4")},A={display:"flex",flexDirection:"column",...e("gap-2")},M={display:"flex",alignItems:"center",justifyContent:"space-between"},D={fontSize:"0.875rem"},h$1={fontSize:"0.875rem",fontWeight:500},T={...D,...s},H={width:"100%",backgroundColor:"var(--color-muted, rgb(229 231 235))",borderRadius:"9999px",...e("h-2")},B={...e("h-2"),borderRadius:"9999px",transition:"all 300ms ease"};return x==="compact"?jsxs("div",{ref:R,style:d(C,e(u),p),...g$1,children:[i$1&&jsxs("div",{style:M,children:[jsx("span",{style:h$1,children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("div",{style:{display:"flex",alignItems:"center",...e("gap-2")},children:[jsxs("span",{style:T,children:[i$1.name," (",i$1.intensity,"%)"]}),v&&jsx(w,{value:i$1.intensity,size:"sm",color:"blue"})]})]}),S&&jsxs(Fragment,{children:[jsxs("div",{style:M,children:[jsx("span",{style:h$1,children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{style:T,children:E(y)})]}),jsxs("div",{style:M,children:[jsx("span",{style:h$1,children:"\uAE0D\uC815\uC131:"}),jsx("span",{style:T,children:z(a$1)})]}),jsxs("div",{style:M,children:[jsx("span",{style:h$1,children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{style:T,children:r(d$1)})]})]}),b&&m.length>0&&jsxs("div",{children:[jsx("span",{style:h$1,children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{style:{display:"flex",flexWrap:"wrap",...e("gap-1"),...e("mt-1")},children:m.map(n=>jsx(a,{variant:"secondary",dot:"text-xs",children:n},n))})]})]}):x==="card"?jsxs(f,{ref:R,dot:u,style:p,...g$1,children:[jsxs(g,{children:[jsxs(h,{dot:"flex items-center",children:[jsx("span",{style:{fontSize:"1.5rem",...e("mr-2")},children:"\u2728"}),"AI \uBD84\uC11D"]}),jsx(i,{children:"\uAC10\uC815 \uBD84\uC11D \uACB0\uACFC"})]}),jsxs(j,{dot:"space-y-4",children:[i$1&&jsxs("div",{style:C,children:[jsxs("div",{style:D,children:[jsx("span",{style:{fontWeight:500},children:"\uC8FC\uC694 \uAC10\uC815:"}),jsxs("span",{style:{...e("ml-2"),...s},children:[i$1.name," (",i$1.intensity,"%)"]})]}),v&&jsx("div",{style:e("flex justify-center"),children:jsx(w,{value:i$1.intensity,size:"md",color:"blue"})})]}),S&&jsxs(Fragment,{children:[jsxs("div",{style:D,children:[jsx("span",{style:{fontWeight:500},children:"\uAC10\uC815 \uAC15\uB3C4:"}),jsx("span",{style:{...e("ml-2"),...s},children:E(y)})]}),jsxs("div",{style:D,children:[jsx("span",{style:{fontWeight:500},children:"\uAE0D\uC815\uC131:"}),jsx("span",{style:{...e("ml-2"),...s},children:z(a$1)})]}),jsxs("div",{style:D,children:[jsx("span",{style:{fontWeight:500},children:"\uC5D0\uB108\uC9C0:"}),jsx("span",{style:{...e("ml-2"),...s},children:r(d$1)})]})]}),b&&m.length>0&&jsxs("div",{style:D,children:[jsx("span",{style:{fontWeight:500},children:"\uD0A4\uC6CC\uB4DC:"}),jsx("div",{style:{display:"flex",flexWrap:"wrap",...e("gap-1"),...e("mt-1")},children:m.map(n=>jsx(a,{variant:"secondary",dot:"text-xs",children:n},n))})]})]})]}):jsxs("div",{ref:R,style:d({display:"flex",flexDirection:"column",...e("gap-6")},e(u),p),...g$1,children:[i$1&&jsxs("div",{style:P,children:[jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,margin:0},children:"\uC8FC\uC694 \uAC10\uC815"}),jsxs("div",{style:{display:"flex",alignItems:"center",...e("gap-4")},children:[jsxs("div",{style:{textAlign:"center"},children:[jsx("div",{style:{fontSize:"1.5rem",fontWeight:700,color:"var(--color-primary, rgb(99 102 241))"},children:i$1.name}),jsxs("div",{style:T,children:[i$1.intensity,"% \uAC15\uB3C4"]})]}),v&&jsx(w,{value:i$1.intensity,size:"lg",color:"blue"})]})]}),k&&f$1.length>0&&jsxs("div",{style:P,children:[jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,margin:0},children:"\uAC10\uC815 \uBD84\uD3EC"}),jsx("div",{style:C,children:f$1.map((n,U)=>jsxs("div",{style:A,children:[jsxs("div",{style:M,children:[jsx("span",{style:h$1,children:n.emotion}),jsxs("span",{style:T,children:[n.percentage,"%"]})]}),jsx("div",{style:H,children:jsx("div",{style:d(B,re(n.color),{width:`${n.percentage}%`})})})]},U))})]}),S&&jsxs("div",{style:P,children:[jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,margin:0},children:"\uBD84\uC11D \uC9C0\uD45C"}),jsxs("div",{style:{display:"grid",gridTemplateColumns:"repeat(1, minmax(0, 1fr))",...e("gap-4")},children:[jsxs("div",{style:A,children:[jsx("div",{style:h$1,children:"\uAC10\uC815 \uAC15\uB3C4"}),jsx("div",{style:{fontSize:"1.5rem",fontWeight:700,color:"var(--color-primary, rgb(99 102 241))"},children:E(y)}),jsx("div",{style:H,children:jsx("div",{style:d(B,{backgroundColor:"var(--color-primary, rgb(99 102 241))"},{width:`${y}%`})})})]}),jsxs("div",{style:A,children:[jsx("div",{style:h$1,children:"\uAE0D\uC815\uC131"}),jsx("div",{style:{fontSize:"1.5rem",fontWeight:700,color:"rgb(22 163 74)"},children:z(a$1)}),jsx("div",{style:H,children:jsx("div",{style:d(B,{backgroundColor:"rgb(34 197 94)"},{width:`${a$1}%`})})})]}),jsxs("div",{style:A,children:[jsx("div",{style:h$1,children:"\uC5D0\uB108\uC9C0"}),jsx("div",{style:{fontSize:"1.5rem",fontWeight:700,color:"rgb(234 88 12)"},children:r(d$1)}),jsx("div",{style:H,children:jsx("div",{style:d(B,{backgroundColor:"rgb(249 115 22)"},{width:`${d$1}%`})})})]})]})]}),b&&m.length>0&&jsxs("div",{style:P,children:[jsx("h3",{style:{fontSize:"1.125rem",fontWeight:600,margin:0},children:"\uAC10\uC815 \uD0A4\uC6CC\uB4DC"}),jsx("div",{style:{display:"flex",flexWrap:"wrap",...e("gap-2")},children:m.map(n=>jsx(a,{variant:"outline",dot:"text-sm",children:n},n))})]})]})});Q.displayName="EmotionAnalysis";export{w as a,N as b,G as c,Q as d};//# sourceMappingURL=chunk-XU2XBAEW.mjs.map
3
+ //# sourceMappingURL=chunk-XU2XBAEW.mjs.map