@microcosmmoney/portal-react 3.12.8 → 3.13.1

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 (351) hide show
  1. package/dist/index.d.ts +22 -0
  2. package/dist/index.js +48 -1
  3. package/dist/main-portal/components/auctions/AuctionsPage.d.ts +1 -0
  4. package/dist/main-portal/components/auctions/AuctionsPage.js +218 -0
  5. package/dist/main-portal/components/data/asset-stats.d.ts +1 -0
  6. package/dist/main-portal/components/data/asset-stats.js +33 -0
  7. package/dist/main-portal/components/data/charts/MCCSupplyChart.d.ts +7 -0
  8. package/dist/main-portal/components/data/charts/MCCSupplyChart.js +27 -0
  9. package/dist/main-portal/components/data/charts/MiningTrendChart.d.ts +7 -0
  10. package/dist/main-portal/components/data/charts/MiningTrendChart.js +39 -0
  11. package/dist/main-portal/components/data/charts/PriceChart.d.ts +5 -0
  12. package/dist/main-portal/components/data/charts/PriceChart.js +99 -0
  13. package/dist/main-portal/components/data/charts/TeamWalletChart.d.ts +7 -0
  14. package/dist/main-portal/components/data/charts/TeamWalletChart.js +33 -0
  15. package/dist/main-portal/components/data/charts/TerritoryProgressChart.d.ts +7 -0
  16. package/dist/main-portal/components/data/charts/TerritoryProgressChart.js +35 -0
  17. package/dist/main-portal/components/data/charts/UserLevelPieChart.d.ts +7 -0
  18. package/dist/main-portal/components/data/charts/UserLevelPieChart.js +34 -0
  19. package/dist/main-portal/components/data/charts/index.d.ts +5 -0
  20. package/dist/main-portal/components/data/charts/index.js +14 -0
  21. package/dist/main-portal/components/data/data-hero.d.ts +1 -0
  22. package/dist/main-portal/components/data/data-hero.js +81 -0
  23. package/dist/main-portal/components/data/mining-history-stats.d.ts +1 -0
  24. package/dist/main-portal/components/data/mining-history-stats.js +44 -0
  25. package/dist/main-portal/components/data/team-wallet-stats.d.ts +1 -0
  26. package/dist/main-portal/components/data/team-wallet-stats.js +34 -0
  27. package/dist/main-portal/components/data/territory-stats.d.ts +1 -0
  28. package/dist/main-portal/components/data/territory-stats.js +48 -0
  29. package/dist/main-portal/components/data/user-level-stats.d.ts +1 -0
  30. package/dist/main-portal/components/data/user-level-stats.js +36 -0
  31. package/dist/main-portal/components/fragment/FragmentPage.d.ts +1 -0
  32. package/dist/main-portal/components/fragment/FragmentPage.js +13 -0
  33. package/dist/main-portal/components/income/ManagerIncomePage.d.ts +1 -0
  34. package/dist/main-portal/components/income/ManagerIncomePage.js +147 -0
  35. package/dist/main-portal/components/layout/AppSidebar.d.ts +3 -0
  36. package/dist/main-portal/components/layout/AppSidebar.js +88 -0
  37. package/dist/main-portal/components/layout/DashboardHeader.d.ts +1 -0
  38. package/dist/main-portal/components/layout/DashboardHeader.js +121 -0
  39. package/dist/main-portal/components/layout/LocaleSwitcher.d.ts +1 -0
  40. package/dist/main-portal/components/layout/LocaleSwitcher.js +30 -0
  41. package/dist/main-portal/components/layout/MainFooter.d.ts +2 -0
  42. package/dist/main-portal/components/layout/MainFooter.js +50 -0
  43. package/dist/main-portal/components/layout/ShadcnNavbar.d.ts +1 -0
  44. package/dist/main-portal/components/layout/ShadcnNavbar.js +155 -0
  45. package/dist/main-portal/components/layout/TerminalSidebar.d.ts +1 -0
  46. package/dist/main-portal/components/layout/TerminalSidebar.js +110 -0
  47. package/dist/main-portal/components/lending/LendingPage.d.ts +1 -0
  48. package/dist/main-portal/components/lending/LendingPage.js +20 -0
  49. package/dist/main-portal/components/mcd/MCDPage.d.ts +1 -0
  50. package/dist/main-portal/components/mcd/MCDPage.js +125 -0
  51. package/dist/main-portal/components/messages/MessagesPage.d.ts +1 -0
  52. package/dist/main-portal/components/messages/MessagesPage.js +13 -0
  53. package/dist/main-portal/components/mining/MiningDistributionHistory.d.ts +11 -0
  54. package/dist/main-portal/components/mining/MiningDistributionHistory.js +84 -0
  55. package/dist/main-portal/components/mining/MiningModal.d.ts +12 -0
  56. package/dist/main-portal/components/mining/MiningModal.js +302 -0
  57. package/dist/main-portal/components/mining/MiningPage.d.ts +1 -0
  58. package/dist/main-portal/components/mining/MiningPage.js +237 -0
  59. package/dist/main-portal/components/mining/index.d.ts +1 -0
  60. package/dist/main-portal/components/mining/index.js +6 -0
  61. package/dist/main-portal/components/notifications/NotificationsPage.d.ts +1 -0
  62. package/dist/main-portal/components/notifications/NotificationsPage.js +13 -0
  63. package/dist/main-portal/components/organization/OrganizationPage.d.ts +1 -0
  64. package/dist/main-portal/components/organization/OrganizationPage.js +235 -0
  65. package/dist/main-portal/components/organization/connection-line.d.ts +12 -0
  66. package/dist/main-portal/components/organization/connection-line.js +38 -0
  67. package/dist/main-portal/components/organization/diagram-node.d.ts +17 -0
  68. package/dist/main-portal/components/organization/diagram-node.js +105 -0
  69. package/dist/main-portal/components/organization/system-panel.d.ts +11 -0
  70. package/dist/main-portal/components/organization/system-panel.js +72 -0
  71. package/dist/main-portal/components/profile/EmailChangeCard.d.ts +1 -0
  72. package/dist/main-portal/components/profile/EmailChangeCard.js +58 -0
  73. package/dist/main-portal/components/profile/ProfilePage.d.ts +1 -0
  74. package/dist/main-portal/components/profile/ProfilePage.js +263 -0
  75. package/dist/main-portal/components/profile/TwoFactorSettings.d.ts +1 -0
  76. package/dist/main-portal/components/profile/TwoFactorSettings.js +99 -0
  77. package/dist/main-portal/components/providers/ClientProviders.d.ts +6 -0
  78. package/dist/main-portal/components/providers/ClientProviders.js +17 -0
  79. package/dist/main-portal/components/providers/SolanaWalletProvider.d.ts +7 -0
  80. package/dist/main-portal/components/providers/SolanaWalletProvider.js +17 -0
  81. package/dist/main-portal/components/providers/theme-provider.d.ts +5 -0
  82. package/dist/main-portal/components/providers/theme-provider.js +10 -0
  83. package/dist/main-portal/components/queue/QueueStatusPage.d.ts +1 -0
  84. package/dist/main-portal/components/queue/QueueStatusPage.js +245 -0
  85. package/dist/main-portal/components/reincarnation/ReincarnationPage.d.ts +1 -0
  86. package/dist/main-portal/components/reincarnation/ReincarnationPage.js +87 -0
  87. package/dist/main-portal/components/resources/mcc-stats-section.d.ts +1 -0
  88. package/dist/main-portal/components/resources/mcc-stats-section.js +199 -0
  89. package/dist/main-portal/components/resources/mcd-stats-section.d.ts +1 -0
  90. package/dist/main-portal/components/resources/mcd-stats-section.js +76 -0
  91. package/dist/main-portal/components/resources/minting-entry-section.d.ts +1 -0
  92. package/dist/main-portal/components/resources/minting-entry-section.js +70 -0
  93. package/dist/main-portal/components/resources/public-mining-modal.d.ts +7 -0
  94. package/dist/main-portal/components/resources/public-mining-modal.js +239 -0
  95. package/dist/main-portal/components/resources/recycle-pool-section.d.ts +1 -0
  96. package/dist/main-portal/components/resources/recycle-pool-section.js +82 -0
  97. package/dist/main-portal/components/resources/registration-prompt.d.ts +8 -0
  98. package/dist/main-portal/components/resources/registration-prompt.js +13 -0
  99. package/dist/main-portal/components/rewards/RewardsPage.d.ts +1 -0
  100. package/dist/main-portal/components/rewards/RewardsPage.js +149 -0
  101. package/dist/main-portal/components/security/domain-verification-bar.d.ts +1 -0
  102. package/dist/main-portal/components/security/domain-verification-bar.js +32 -0
  103. package/dist/main-portal/components/stations/StationDetailPage.d.ts +5 -0
  104. package/dist/main-portal/components/stations/StationDetailPage.js +232 -0
  105. package/dist/main-portal/components/stations/StationIncomeChart.d.ts +11 -0
  106. package/dist/main-portal/components/stations/StationIncomeChart.js +57 -0
  107. package/dist/main-portal/components/stations/StationKPIHistory.d.ts +1 -0
  108. package/dist/main-portal/components/stations/StationKPIHistory.js +7 -0
  109. package/dist/main-portal/components/stations/StationListPage.d.ts +1 -0
  110. package/dist/main-portal/components/stations/StationListPage.js +341 -0
  111. package/dist/main-portal/components/stations/StationMemberRanking.d.ts +13 -0
  112. package/dist/main-portal/components/stations/StationMemberRanking.js +64 -0
  113. package/dist/main-portal/components/stations/StationSummaryCards.d.ts +13 -0
  114. package/dist/main-portal/components/stations/StationSummaryCards.js +30 -0
  115. package/dist/main-portal/components/stations/StationsPage.d.ts +1 -0
  116. package/dist/main-portal/components/stations/StationsPage.js +239 -0
  117. package/dist/main-portal/components/territory/TerritoryNFTBrowser.d.ts +1 -0
  118. package/dist/main-portal/components/territory/TerritoryNFTBrowser.js +147 -0
  119. package/dist/main-portal/components/ui/accordion.d.ts +7 -0
  120. package/dist/main-portal/components/ui/accordion.js +57 -0
  121. package/dist/main-portal/components/ui/alert-dialog.d.ts +14 -0
  122. package/dist/main-portal/components/ui/alert-dialog.js +85 -0
  123. package/dist/main-portal/components/ui/alert.d.ts +9 -0
  124. package/dist/main-portal/components/ui/alert.js +28 -0
  125. package/dist/main-portal/components/ui/aspect-ratio.d.ts +3 -0
  126. package/dist/main-portal/components/ui/aspect-ratio.js +43 -0
  127. package/dist/main-portal/components/ui/avatar.d.ts +6 -0
  128. package/dist/main-portal/components/ui/avatar.js +52 -0
  129. package/dist/main-portal/components/ui/badge.d.ts +9 -0
  130. package/dist/main-portal/components/ui/badge.js +26 -0
  131. package/dist/main-portal/components/ui/breadcrumb.d.ts +11 -0
  132. package/dist/main-portal/components/ui/breadcrumb.js +35 -0
  133. package/dist/main-portal/components/ui/button-group.d.ts +11 -0
  134. package/dist/main-portal/components/ui/button-group.js +34 -0
  135. package/dist/main-portal/components/ui/button.d.ts +10 -0
  136. package/dist/main-portal/components/ui/button.js +35 -0
  137. package/dist/main-portal/components/ui/calendar.d.ts +8 -0
  138. package/dist/main-portal/components/ui/calendar.js +111 -0
  139. package/dist/main-portal/components/ui/card.d.ts +17 -0
  140. package/dist/main-portal/components/ui/card.js +41 -0
  141. package/dist/main-portal/components/ui/carousel.d.ts +19 -0
  142. package/dist/main-portal/components/ui/carousel.js +134 -0
  143. package/dist/main-portal/components/ui/chart.d.ts +40 -0
  144. package/dist/main-portal/components/ui/chart.js +168 -0
  145. package/dist/main-portal/components/ui/checkbox.d.ts +4 -0
  146. package/dist/main-portal/components/ui/checkbox.js +45 -0
  147. package/dist/main-portal/components/ui/collapsible.d.ts +5 -0
  148. package/dist/main-portal/components/ui/collapsible.js +51 -0
  149. package/dist/main-portal/components/ui/command.d.ts +18 -0
  150. package/dist/main-portal/components/ui/command.js +45 -0
  151. package/dist/main-portal/components/ui/context-menu.d.ts +25 -0
  152. package/dist/main-portal/components/ui/context-menu.js +101 -0
  153. package/dist/main-portal/components/ui/dialog.d.ts +15 -0
  154. package/dist/main-portal/components/ui/dialog.js +81 -0
  155. package/dist/main-portal/components/ui/drawer.d.ts +13 -0
  156. package/dist/main-portal/components/ui/drawer.js +47 -0
  157. package/dist/main-portal/components/ui/dropdown-menu.d.ts +25 -0
  158. package/dist/main-portal/components/ui/dropdown-menu.js +101 -0
  159. package/dist/main-portal/components/ui/empty.d.ts +11 -0
  160. package/dist/main-portal/components/ui/empty.js +41 -0
  161. package/dist/main-portal/components/ui/field.d.ts +24 -0
  162. package/dist/main-portal/components/ui/field.js +85 -0
  163. package/dist/main-portal/components/ui/form.d.ts +24 -0
  164. package/dist/main-portal/components/ui/form.js +103 -0
  165. package/dist/main-portal/components/ui/hover-avatar.d.ts +10 -0
  166. package/dist/main-portal/components/ui/hover-avatar.js +70 -0
  167. package/dist/main-portal/components/ui/hover-card.d.ts +6 -0
  168. package/dist/main-portal/components/ui/hover-card.js +52 -0
  169. package/dist/main-portal/components/ui/input-group.d.ts +15 -0
  170. package/dist/main-portal/components/ui/input-group.js +65 -0
  171. package/dist/main-portal/components/ui/input-otp.d.ts +11 -0
  172. package/dist/main-portal/components/ui/input-otp.js +60 -0
  173. package/dist/main-portal/components/ui/input.d.ts +3 -0
  174. package/dist/main-portal/components/ui/input.js +8 -0
  175. package/dist/main-portal/components/ui/item.d.ts +23 -0
  176. package/dist/main-portal/components/ui/item.js +77 -0
  177. package/dist/main-portal/components/ui/kbd.d.ts +3 -0
  178. package/dist/main-portal/components/ui/kbd.js +13 -0
  179. package/dist/main-portal/components/ui/label.d.ts +4 -0
  180. package/dist/main-portal/components/ui/label.js +44 -0
  181. package/dist/main-portal/components/ui/menubar.d.ts +26 -0
  182. package/dist/main-portal/components/ui/menubar.js +105 -0
  183. package/dist/main-portal/components/ui/navigation-menu.d.ts +14 -0
  184. package/dist/main-portal/components/ui/navigation-menu.js +75 -0
  185. package/dist/main-portal/components/ui/pagination.d.ts +13 -0
  186. package/dist/main-portal/components/ui/pagination.js +37 -0
  187. package/dist/main-portal/components/ui/popover.d.ts +7 -0
  188. package/dist/main-portal/components/ui/popover.js +56 -0
  189. package/dist/main-portal/components/ui/progress.d.ts +4 -0
  190. package/dist/main-portal/components/ui/progress.js +44 -0
  191. package/dist/main-portal/components/ui/radio-group.d.ts +5 -0
  192. package/dist/main-portal/components/ui/radio-group.js +49 -0
  193. package/dist/main-portal/components/ui/resizable.d.ts +8 -0
  194. package/dist/main-portal/components/ui/resizable.js +53 -0
  195. package/dist/main-portal/components/ui/scroll-area.d.ts +5 -0
  196. package/dist/main-portal/components/ui/scroll-area.js +50 -0
  197. package/dist/main-portal/components/ui/select.d.ts +15 -0
  198. package/dist/main-portal/components/ui/select.js +83 -0
  199. package/dist/main-portal/components/ui/separator.d.ts +4 -0
  200. package/dist/main-portal/components/ui/separator.js +44 -0
  201. package/dist/main-portal/components/ui/sheet.d.ts +13 -0
  202. package/dist/main-portal/components/ui/sheet.js +83 -0
  203. package/dist/main-portal/components/ui/sidebar.d.ts +69 -0
  204. package/dist/main-portal/components/ui/sidebar.js +258 -0
  205. package/dist/main-portal/components/ui/skeleton.d.ts +2 -0
  206. package/dist/main-portal/components/ui/skeleton.js +9 -0
  207. package/dist/main-portal/components/ui/slider.d.ts +4 -0
  208. package/dist/main-portal/components/ui/slider.js +50 -0
  209. package/dist/main-portal/components/ui/sonner.d.ts +3 -0
  210. package/dist/main-portal/components/ui/sonner.js +17 -0
  211. package/dist/main-portal/components/ui/spinner.d.ts +2 -0
  212. package/dist/main-portal/components/ui/spinner.js +10 -0
  213. package/dist/main-portal/components/ui/switch.d.ts +4 -0
  214. package/dist/main-portal/components/ui/switch.js +44 -0
  215. package/dist/main-portal/components/ui/table.d.ts +10 -0
  216. package/dist/main-portal/components/ui/table.js +38 -0
  217. package/dist/main-portal/components/ui/tabs.d.ts +7 -0
  218. package/dist/main-portal/components/ui/tabs.js +53 -0
  219. package/dist/main-portal/components/ui/terminal.d.ts +49 -0
  220. package/dist/main-portal/components/ui/terminal.js +56 -0
  221. package/dist/main-portal/components/ui/textarea.d.ts +3 -0
  222. package/dist/main-portal/components/ui/textarea.js +8 -0
  223. package/dist/main-portal/components/ui/time-remaining.d.ts +54 -0
  224. package/dist/main-portal/components/ui/time-remaining.js +223 -0
  225. package/dist/main-portal/components/ui/toast.d.ts +15 -0
  226. package/dist/main-portal/components/ui/toast.js +77 -0
  227. package/dist/main-portal/components/ui/toaster.d.ts +1 -0
  228. package/dist/main-portal/components/ui/toaster.js +14 -0
  229. package/dist/main-portal/components/ui/toggle-group.d.ts +7 -0
  230. package/dist/main-portal/components/ui/toggle-group.js +58 -0
  231. package/dist/main-portal/components/ui/toggle.d.ts +9 -0
  232. package/dist/main-portal/components/ui/toggle.js +64 -0
  233. package/dist/main-portal/components/ui/tooltip.d.ts +7 -0
  234. package/dist/main-portal/components/ui/tooltip.js +56 -0
  235. package/dist/main-portal/components/ui/use-mobile.d.ts +1 -0
  236. package/dist/main-portal/components/ui/use-mobile.js +53 -0
  237. package/dist/main-portal/components/voting/VotingPage.d.ts +1 -0
  238. package/dist/main-portal/components/voting/VotingPage.js +14 -0
  239. package/dist/main-portal/components/wallet/MCCHistory.d.ts +9 -0
  240. package/dist/main-portal/components/wallet/MCCHistory.js +100 -0
  241. package/dist/main-portal/components/wallet/WalletManagement.d.ts +5 -0
  242. package/dist/main-portal/components/wallet/WalletManagement.js +144 -0
  243. package/dist/main-portal/components/wallet/WalletPage.d.ts +1 -0
  244. package/dist/main-portal/components/wallet/WalletPage.js +130 -0
  245. package/dist/main-portal/config/menu-config.d.ts +22 -0
  246. package/dist/main-portal/config/menu-config.js +167 -0
  247. package/dist/main-portal/contexts/MCCPriceContext.d.ts +38 -0
  248. package/dist/main-portal/contexts/MCCPriceContext.js +70 -0
  249. package/dist/main-portal/contexts/WalletContext.d.ts +48 -0
  250. package/dist/main-portal/contexts/WalletContext.js +94 -0
  251. package/dist/main-portal/hooks/index.d.ts +4 -0
  252. package/dist/main-portal/hooks/index.js +11 -0
  253. package/dist/main-portal/hooks/use-breakpoint.d.ts +45 -0
  254. package/dist/main-portal/hooks/use-breakpoint.js +91 -0
  255. package/dist/main-portal/hooks/use-mobile.d.ts +1 -0
  256. package/dist/main-portal/hooks/use-mobile.js +55 -0
  257. package/dist/main-portal/hooks/use-toast.d.ts +44 -0
  258. package/dist/main-portal/hooks/use-toast.js +164 -0
  259. package/dist/main-portal/hooks/useAuth.d.ts +30 -0
  260. package/dist/main-portal/hooks/useAuth.js +136 -0
  261. package/dist/main-portal/hooks/useMCC.d.ts +26 -0
  262. package/dist/main-portal/hooks/useMCC.js +148 -0
  263. package/dist/main-portal/hooks/useMCD.d.ts +17 -0
  264. package/dist/main-portal/hooks/useMCD.js +114 -0
  265. package/dist/main-portal/hooks/useMultiWalletBalance.d.ts +31 -0
  266. package/dist/main-portal/hooks/useMultiWalletBalance.js +65 -0
  267. package/dist/main-portal/hooks/useSolanaBalance.d.ts +21 -0
  268. package/dist/main-portal/hooks/useSolanaBalance.js +58 -0
  269. package/dist/main-portal/hooks/useSpeechRecognition.d.ts +6 -0
  270. package/dist/main-portal/hooks/useSpeechRecognition.js +82 -0
  271. package/dist/main-portal/hooks/useStats.d.ts +131 -0
  272. package/dist/main-portal/hooks/useStats.js +161 -0
  273. package/dist/main-portal/hooks/useStrategies.d.ts +134 -0
  274. package/dist/main-portal/hooks/useStrategies.js +28 -0
  275. package/dist/main-portal/hooks/useUserRank.d.ts +16 -0
  276. package/dist/main-portal/hooks/useUserRank.js +61 -0
  277. package/dist/main-portal/hooks/useWalletTokenBalances.d.ts +29 -0
  278. package/dist/main-portal/hooks/useWalletTokenBalances.js +106 -0
  279. package/dist/main-portal/i18n/navigation.d.ts +341 -0
  280. package/dist/main-portal/i18n/navigation.js +7 -0
  281. package/dist/main-portal/i18n/request.d.ts +2 -0
  282. package/dist/main-portal/i18n/request.js +47 -0
  283. package/dist/main-portal/i18n/routing.d.ts +18 -0
  284. package/dist/main-portal/i18n/routing.js +10 -0
  285. package/dist/main-portal/lib/ai-chat-config.d.ts +8 -0
  286. package/dist/main-portal/lib/ai-chat-config.js +144 -0
  287. package/dist/main-portal/lib/api/blockchain.d.ts +178 -0
  288. package/dist/main-portal/lib/api/blockchain.js +302 -0
  289. package/dist/main-portal/lib/api/core.d.ts +3 -0
  290. package/dist/main-portal/lib/api/core.js +47 -0
  291. package/dist/main-portal/lib/api/index.d.ts +9 -0
  292. package/dist/main-portal/lib/api/index.js +37 -0
  293. package/dist/main-portal/lib/api/services/ai.d.ts +139 -0
  294. package/dist/main-portal/lib/api/services/ai.js +214 -0
  295. package/dist/main-portal/lib/api/services/finance.d.ts +37 -0
  296. package/dist/main-portal/lib/api/services/finance.js +144 -0
  297. package/dist/main-portal/lib/api/services/index.d.ts +5 -0
  298. package/dist/main-portal/lib/api/services/index.js +21 -0
  299. package/dist/main-portal/lib/api/services/mining.d.ts +68 -0
  300. package/dist/main-portal/lib/api/services/mining.js +76 -0
  301. package/dist/main-portal/lib/api/services/organization.d.ts +161 -0
  302. package/dist/main-portal/lib/api/services/organization.js +139 -0
  303. package/dist/main-portal/lib/api/services/user.d.ts +90 -0
  304. package/dist/main-portal/lib/api/services/user.js +78 -0
  305. package/dist/main-portal/lib/api/services.d.ts +1 -0
  306. package/dist/main-portal/lib/api/services.js +17 -0
  307. package/dist/main-portal/lib/api-service.d.ts +1 -0
  308. package/dist/main-portal/lib/api-service.js +18 -0
  309. package/dist/main-portal/lib/auth-service.d.ts +65 -0
  310. package/dist/main-portal/lib/auth-service.js +382 -0
  311. package/dist/main-portal/lib/config/mainstream-tokens.d.ts +13 -0
  312. package/dist/main-portal/lib/config/mainstream-tokens.js +88 -0
  313. package/dist/main-portal/lib/docs-data.d.ts +36 -0
  314. package/dist/main-portal/lib/docs-data.js +108 -0
  315. package/dist/main-portal/lib/oauth-config.d.ts +12 -0
  316. package/dist/main-portal/lib/oauth-config.js +48 -0
  317. package/dist/main-portal/lib/order-id-generator.d.ts +19 -0
  318. package/dist/main-portal/lib/order-id-generator.js +97 -0
  319. package/dist/main-portal/lib/solana/reincarnation-client.d.ts +28 -0
  320. package/dist/main-portal/lib/solana/reincarnation-client.js +39 -0
  321. package/dist/main-portal/lib/solana/solana-pay.d.ts +31 -0
  322. package/dist/main-portal/lib/solana/solana-pay.js +85 -0
  323. package/dist/main-portal/lib/strategy/defaults.d.ts +2 -0
  324. package/dist/main-portal/lib/strategy/defaults.js +58 -0
  325. package/dist/main-portal/lib/strategy/index.d.ts +3 -0
  326. package/dist/main-portal/lib/strategy/index.js +20 -0
  327. package/dist/main-portal/lib/strategy/tooltips.d.ts +1 -0
  328. package/dist/main-portal/lib/strategy/tooltips.js +50 -0
  329. package/dist/main-portal/lib/strategy/types.d.ts +74 -0
  330. package/dist/main-portal/lib/strategy/types.js +2 -0
  331. package/dist/main-portal/lib/types/ai.types.d.ts +111 -0
  332. package/dist/main-portal/lib/types/ai.types.js +2 -0
  333. package/dist/main-portal/lib/types/api.d.ts +5 -0
  334. package/dist/main-portal/lib/types/api.js +21 -0
  335. package/dist/main-portal/lib/types/common.types.d.ts +168 -0
  336. package/dist/main-portal/lib/types/common.types.js +24 -0
  337. package/dist/main-portal/lib/types/finance.types.d.ts +267 -0
  338. package/dist/main-portal/lib/types/finance.types.js +2 -0
  339. package/dist/main-portal/lib/types/protocol.types.d.ts +216 -0
  340. package/dist/main-portal/lib/types/protocol.types.js +2 -0
  341. package/dist/main-portal/lib/types/user.types.d.ts +243 -0
  342. package/dist/main-portal/lib/types/user.types.js +12 -0
  343. package/dist/main-portal/lib/utils/territoryId.d.ts +75 -0
  344. package/dist/main-portal/lib/utils/territoryId.js +241 -0
  345. package/dist/main-portal/lib/utils.d.ts +4 -0
  346. package/dist/main-portal/lib/utils.js +24 -0
  347. package/dist/main-portal/lib/wallet-auth/api.d.ts +13 -0
  348. package/dist/main-portal/lib/wallet-auth/api.js +132 -0
  349. package/dist/main-portal/lib/wallet-auth/types.d.ts +87 -0
  350. package/dist/main-portal/lib/wallet-auth/types.js +58 -0
  351. package/package.json +55 -5
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PriceChart = PriceChart;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = require("react");
7
+ const button_1 = require("../../ui/button");
8
+ const recharts_1 = require("recharts");
9
+ const THEMES = {
10
+ blue: {
11
+ bg: "bg-neutral-900 border-neutral-700",
12
+ title: "text-white",
13
+ btnActive: "bg-cyan-700 hover:bg-cyan-600 text-white",
14
+ btnInactive: "hover:bg-neutral-700 text-neutral-500",
15
+ btnBg: "bg-neutral-800",
16
+ grid: "#333",
17
+ cursor: "#06B6D4",
18
+ tooltip: { bg: "#0E0E0E", border: "#333" },
19
+ market: "#67e8f9",
20
+ base: "#f59e0b",
21
+ mining: "#4ade80",
22
+ },
23
+ orange: {
24
+ bg: "bg-[#1B1B1B] border-[#2A2A2A]",
25
+ title: "text-[#EDEDED]",
26
+ btnActive: "bg-[#FF6B00] hover:bg-[#E55A00] text-black",
27
+ btnInactive: "hover:bg-[#2A2A2A] text-[#9A9A9A]",
28
+ btnBg: "bg-[#0E0E0E]",
29
+ grid: "#2A2A2A",
30
+ cursor: "#FF6B00",
31
+ tooltip: { bg: "#0E0E0E", border: "#2A2A2A" },
32
+ market: "#FF6B00",
33
+ base: "#f59e0b",
34
+ mining: "#4ade80",
35
+ },
36
+ };
37
+ function PriceChart({ theme = "blue" }) {
38
+ const t = THEMES[theme];
39
+ const [timeRange, setTimeRange] = (0, react_1.useState)("30D");
40
+ const [allHistory, setAllHistory] = (0, react_1.useState)([]);
41
+ const [loading, setLoading] = (0, react_1.useState)(true);
42
+ (0, react_1.useEffect)(() => {
43
+ const load = async () => {
44
+ setLoading(true);
45
+ try {
46
+ const res = await fetch("/api/stats/price-history?range=1Y");
47
+ const json = await res.json();
48
+ if (json.success && Array.isArray(json.data)) {
49
+ setAllHistory(json.data);
50
+ }
51
+ }
52
+ catch { }
53
+ setLoading(false);
54
+ };
55
+ load();
56
+ const interval = setInterval(load, 900000);
57
+ return () => clearInterval(interval);
58
+ }, []);
59
+ const visibleHistory = (0, react_1.useMemo)(() => {
60
+ if (allHistory.length === 0)
61
+ return [];
62
+ const now = Date.now() / 1000;
63
+ const cutoffs = {
64
+ "30D": now - 30 * 86400,
65
+ "180D": now - 180 * 86400,
66
+ "1Y": 0,
67
+ };
68
+ const cutoff = cutoffs[timeRange];
69
+ return cutoff > 0 ? allHistory.filter((p) => p.timestamp >= cutoff) : allHistory;
70
+ }, [allHistory, timeRange]);
71
+ const chartData = (0, react_1.useMemo)(() => {
72
+ return visibleHistory.map((p) => {
73
+ const d = new Date(p.timestamp * 1000);
74
+ let label;
75
+ if (timeRange === "30D") {
76
+ label = `${(d.getUTCMonth() + 1).toString().padStart(2, "0")}/${d.getUTCDate().toString().padStart(2, "0")} ${d.getUTCHours().toString().padStart(2, "0")}h`;
77
+ }
78
+ else {
79
+ label = `${(d.getUTCMonth() + 1).toString().padStart(2, "0")}/${d.getUTCDate().toString().padStart(2, "0")}`;
80
+ }
81
+ return {
82
+ time: label,
83
+ market: p.market_price,
84
+ base: p.base_price,
85
+ mining: p.base_price != null ? p.base_price * 4 : null,
86
+ };
87
+ });
88
+ }, [visibleHistory, timeRange]);
89
+ if (loading) {
90
+ return (0, jsx_runtime_1.jsx)("div", { className: `h-[240px] sm:h-[380px] ${t.bg} rounded-lg animate-pulse border` });
91
+ }
92
+ if (chartData.length === 0) {
93
+ return null;
94
+ }
95
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `${t.bg} rounded-lg p-3 sm:p-4 border`, children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-2 sm:mb-3", children: [(0, jsx_runtime_1.jsx)("span", { className: `text-xs sm:text-sm font-medium ${t.title}`, children: "MCC Pricing Overview" }), (0, jsx_runtime_1.jsx)("div", { className: `flex items-center gap-1 ${t.btnBg} p-0.5 rounded`, children: ["30D", "180D", "1Y"].map((range) => ((0, jsx_runtime_1.jsx)(button_1.Button, { size: "sm", variant: timeRange === range ? "default" : "ghost", onClick: () => setTimeRange(range), className: `${timeRange === range ? t.btnActive : t.btnInactive} px-2.5 py-0.5 h-6 text-xs`, children: range }, range))) })] }), (0, jsx_runtime_1.jsx)("div", { className: "h-[200px] sm:h-[320px]", children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: "100%", children: (0, jsx_runtime_1.jsxs)(recharts_1.LineChart, { data: chartData, margin: { top: 5, right: 10, left: -15, bottom: 0 }, children: [(0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { vertical: false, strokeDasharray: "3 3", stroke: t.grid }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis, { dataKey: "time", tick: { fill: "#9A9A9A", fontSize: 9 }, tickLine: false, axisLine: false, interval: Math.max(1, Math.floor(chartData.length / 10)) }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis, { tick: { fill: "#9A9A9A", fontSize: 10 }, tickLine: false, axisLine: false, tickFormatter: (value) => `$${value.toFixed(2)}`, domain: ["dataMin - 0.1", "dataMax + 0.1"] }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { cursor: { stroke: t.cursor, strokeWidth: 1, strokeDasharray: "4 4" }, contentStyle: { backgroundColor: t.tooltip.bg, border: `1px solid ${t.tooltip.border}`, borderRadius: "0.5rem", fontSize: "12px" }, labelStyle: { color: "#9A9A9A" }, formatter: (value, name) => {
96
+ const labels = { market: "Market Price", base: "Base Price", mining: "Mining Price" };
97
+ return value != null ? [`$${value.toFixed(4)}`, labels[name] || name] : ["--", name];
98
+ } }), (0, jsx_runtime_1.jsx)(recharts_1.Line, { type: "monotone", dataKey: "mining", name: "mining", stroke: t.mining, strokeWidth: 2, dot: false, connectNulls: true, activeDot: { r: 3, fill: t.mining, stroke: t.tooltip.bg, strokeWidth: 2 } }), (0, jsx_runtime_1.jsx)(recharts_1.Line, { type: "monotone", dataKey: "market", name: "market", stroke: t.market, strokeWidth: 2, dot: false, connectNulls: true, activeDot: { r: 3, fill: t.market, stroke: t.tooltip.bg, strokeWidth: 2 } }), (0, jsx_runtime_1.jsx)(recharts_1.Line, { type: "monotone", dataKey: "base", name: "base", stroke: t.base, strokeWidth: 2, dot: false, connectNulls: true, strokeDasharray: "6 3", activeDot: { r: 3, fill: t.base, stroke: t.tooltip.bg, strokeWidth: 2 } })] }) }) })] }));
99
+ }
@@ -0,0 +1,7 @@
1
+ import type { TeamWalletItem } from "../../../hooks/useStats";
2
+ interface TeamWalletChartProps {
3
+ data: TeamWalletItem[];
4
+ className?: string;
5
+ }
6
+ export declare function TeamWalletChart({ data, className }: TeamWalletChartProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.TeamWalletChart = TeamWalletChart;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const GREEN_COLORS = [
8
+ "#5EEAD4",
9
+ "#2DD4BF",
10
+ "#99F6E4",
11
+ "#14B8A6",
12
+ "#0D9488",
13
+ ];
14
+ function formatValue(value) {
15
+ if (value >= 1000000000)
16
+ return `${(value / 1000000000).toFixed(2)}B`;
17
+ if (value >= 1000000)
18
+ return `${(value / 1000000).toFixed(2)}M`;
19
+ if (value >= 1000)
20
+ return `${(value / 1000).toFixed(1)}K`;
21
+ return value.toLocaleString();
22
+ }
23
+ function TeamWalletChart({ data, className }) {
24
+ const maxValue = Math.max(...data.map(d => d.mcc_balance), 1);
25
+ return ((0, jsx_runtime_1.jsx)("div", { className: className, children: (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col justify-center h-full gap-3 sm:gap-4", children: data.map((wallet, index) => {
26
+ const ratio = wallet.mcc_balance / maxValue;
27
+ const widthPercent = Math.max(ratio * 93, 2);
28
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 sm:gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-20 sm:w-24 flex-shrink-0 text-right", children: (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs sm:text-sm text-foreground/50 truncate block", children: wallet.label }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex-1 h-7 sm:h-8 bg-border/10 rounded-r overflow-hidden", children: (0, jsx_runtime_1.jsx)("div", { className: "h-full rounded-r transition-all duration-500 ease-out", style: {
29
+ width: `${widthPercent}%`,
30
+ backgroundColor: GREEN_COLORS[index % GREEN_COLORS.length],
31
+ } }) }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs sm:text-sm text-foreground/60 tabular-nums flex-shrink-0 w-12 sm:w-16 text-left", children: formatValue(wallet.mcc_balance) })] })] }, wallet.key));
32
+ }) }) }));
33
+ }
@@ -0,0 +1,7 @@
1
+ import type { TerritoryItem } from "../../../hooks/useStats";
2
+ interface TerritoryProgressChartProps {
3
+ data: TerritoryItem[];
4
+ className?: string;
5
+ }
6
+ export declare function TerritoryProgressChart({ data, className }: TerritoryProgressChartProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.TerritoryProgressChart = TerritoryProgressChart;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const recharts_1 = require("recharts");
8
+ const chart_1 = require("../../ui/chart");
9
+ const chartConfig = {
10
+ active: {
11
+ label: "活跃",
12
+ color: "#10b981"
13
+ },
14
+ inactive: {
15
+ label: "未活跃",
16
+ color: "#374151"
17
+ }
18
+ };
19
+ const TERRITORY_COLORS = {
20
+ System: "#047857",
21
+ Sector: "#059669",
22
+ Matrix: "#10b981",
23
+ Station: "#34d399"
24
+ };
25
+ function TerritoryProgressChart({ data, className }) {
26
+ const chartData = data.map(item => ({
27
+ name: `${item.type} (${item.name})`,
28
+ type: item.type,
29
+ active: item.active,
30
+ total: item.total,
31
+ rate: item.total > 0 ? Math.round((item.active / item.total) * 100) : 0,
32
+ fill: TERRITORY_COLORS[item.type] || "#10b981"
33
+ }));
34
+ return ((0, jsx_runtime_1.jsx)(chart_1.ChartContainer, { config: chartConfig, className: className, children: (0, jsx_runtime_1.jsxs)(recharts_1.BarChart, { data: chartData, layout: "vertical", margin: { left: 120, right: 60 }, accessibilityLayer: true, children: [(0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { horizontal: false, strokeDasharray: "3 3", stroke: "#374151" }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis, { type: "number", tickLine: false, axisLine: false, domain: [0, 100], tick: { fill: "#9ca3af" }, tickFormatter: (value) => `${value}%` }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis, { type: "category", dataKey: "name", tickLine: false, axisLine: false, width: 120, tick: { fill: "#9ca3af" } }), (0, jsx_runtime_1.jsx)(chart_1.ChartTooltip, { cursor: false, content: (0, jsx_runtime_1.jsx)(chart_1.ChartTooltipContent, { formatter: (value, name, item) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-1", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-medium", children: item.payload.type }), (0, jsx_runtime_1.jsxs)("span", { children: ["\u6D3B\u8DC3: ", item.payload.active, " / ", item.payload.total] }), (0, jsx_runtime_1.jsxs)("span", { children: ["\u6D3B\u8DC3\u7387: ", item.payload.rate, "%"] })] })) }) }), (0, jsx_runtime_1.jsx)(recharts_1.Bar, { dataKey: "rate", radius: [0, 4, 4, 0], children: chartData.map((entry, index) => ((0, jsx_runtime_1.jsx)(recharts_1.Cell, { fill: entry.fill }, `cell-${index}`))) })] }) }));
35
+ }
@@ -0,0 +1,7 @@
1
+ import type { UserLevelItem } from "../../../hooks/useStats";
2
+ interface UserLevelPieChartProps {
3
+ data: UserLevelItem[];
4
+ className?: string;
5
+ }
6
+ export declare function UserLevelPieChart({ data, className }: UserLevelPieChartProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.UserLevelPieChart = UserLevelPieChart;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const recharts_1 = require("recharts");
8
+ const chart_1 = require("../../ui/chart");
9
+ const LEVEL_COLORS = [
10
+ "#10b981",
11
+ "#34d399",
12
+ "#6ee7b7",
13
+ "#059669",
14
+ "#047857",
15
+ "#065f46",
16
+ "#064e3b"
17
+ ];
18
+ function UserLevelPieChart({ data, className }) {
19
+ const chartConfig = {};
20
+ data.forEach((item, index) => {
21
+ chartConfig[item.name.toLowerCase()] = {
22
+ label: `${item.name} (${item.chinese})`,
23
+ color: LEVEL_COLORS[index] || LEVEL_COLORS[0]
24
+ };
25
+ });
26
+ const chartData = data.map((item, index) => ({
27
+ name: item.name,
28
+ chinese: item.chinese,
29
+ value: item.count,
30
+ percentage: item.percentage,
31
+ fill: LEVEL_COLORS[index] || LEVEL_COLORS[0]
32
+ }));
33
+ return ((0, jsx_runtime_1.jsx)(chart_1.ChartContainer, { config: chartConfig, className: className, children: (0, jsx_runtime_1.jsxs)(recharts_1.PieChart, { children: [(0, jsx_runtime_1.jsx)(recharts_1.Pie, { data: chartData, dataKey: "value", nameKey: "name", cx: "50%", cy: "50%", innerRadius: 60, outerRadius: 100, paddingAngle: 2, label: ({ name, percentage }) => `${name} ${percentage}%`, labelLine: { stroke: "#6ee7b7" }, children: chartData.map((entry, index) => ((0, jsx_runtime_1.jsx)(recharts_1.Cell, { fill: entry.fill }, `cell-${index}`))) }), (0, jsx_runtime_1.jsx)(chart_1.ChartTooltip, { content: (0, jsx_runtime_1.jsx)(chart_1.ChartTooltipContent, { formatter: (value, name, item) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-1", children: [(0, jsx_runtime_1.jsxs)("span", { className: "font-medium", children: [item.payload.name, " (", item.payload.chinese, ")"] }), (0, jsx_runtime_1.jsxs)("span", { children: ["\u4EBA\u6570: ", Number(value).toLocaleString()] }), (0, jsx_runtime_1.jsxs)("span", { className: "text-muted-foreground text-xs", children: ["\u5360\u6BD4: ", item.payload.percentage, "%"] })] })) }) })] }) }));
34
+ }
@@ -0,0 +1,5 @@
1
+ export { MiningTrendChart } from './MiningTrendChart';
2
+ export { UserLevelPieChart } from './UserLevelPieChart';
3
+ export { TeamWalletChart } from './TeamWalletChart';
4
+ export { MCCSupplyChart } from './MCCSupplyChart';
5
+ export { TerritoryProgressChart } from './TerritoryProgressChart';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TerritoryProgressChart = exports.MCCSupplyChart = exports.TeamWalletChart = exports.UserLevelPieChart = exports.MiningTrendChart = void 0;
4
+ // AI-generated · AI-managed · AI-maintained
5
+ var MiningTrendChart_1 = require("./MiningTrendChart");
6
+ Object.defineProperty(exports, "MiningTrendChart", { enumerable: true, get: function () { return MiningTrendChart_1.MiningTrendChart; } });
7
+ var UserLevelPieChart_1 = require("./UserLevelPieChart");
8
+ Object.defineProperty(exports, "UserLevelPieChart", { enumerable: true, get: function () { return UserLevelPieChart_1.UserLevelPieChart; } });
9
+ var TeamWalletChart_1 = require("./TeamWalletChart");
10
+ Object.defineProperty(exports, "TeamWalletChart", { enumerable: true, get: function () { return TeamWalletChart_1.TeamWalletChart; } });
11
+ var MCCSupplyChart_1 = require("./MCCSupplyChart");
12
+ Object.defineProperty(exports, "MCCSupplyChart", { enumerable: true, get: function () { return MCCSupplyChart_1.MCCSupplyChart; } });
13
+ var TerritoryProgressChart_1 = require("./TerritoryProgressChart");
14
+ Object.defineProperty(exports, "TerritoryProgressChart", { enumerable: true, get: function () { return TerritoryProgressChart_1.TerritoryProgressChart; } });
@@ -0,0 +1 @@
1
+ export declare function DataHero(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.DataHero = DataHero;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const useStats_1 = require("../../hooks/useStats");
9
+ const next_intl_1 = require("next-intl");
10
+ function DataHero() {
11
+ const [svgContent, setSvgContent] = (0, react_1.useState)("");
12
+ const [mounted, setMounted] = (0, react_1.useState)(false);
13
+ const { data: stats, loading, error } = (0, useStats_1.useOverviewStats)();
14
+ const t = (0, next_intl_1.useTranslations)("data");
15
+ (0, react_1.useEffect)(() => {
16
+ setMounted(true);
17
+ }, []);
18
+ (0, react_1.useEffect)(() => {
19
+ const loadSVG = async () => {
20
+ try {
21
+ const response = await fetch("/map-dark.svg");
22
+ const svgText = await response.text();
23
+ setSvgContent(svgText);
24
+ }
25
+ catch (error) {
26
+ console.error("Failed to load SVG:", error);
27
+ }
28
+ };
29
+ if (mounted) {
30
+ loadSVG();
31
+ }
32
+ }, [mounted]);
33
+ (0, react_1.useEffect)(() => {
34
+ if (svgContent) {
35
+ const timer = setTimeout(() => {
36
+ const rects = document.querySelectorAll("#zion-map rect");
37
+ rects.forEach((rect) => {
38
+ const duration = Math.random() * 1.5 + 0.5;
39
+ const delay = Math.random() * 1;
40
+ rect.setAttribute("style", `animation: glimmer ${duration}s ease-in-out ${delay}s infinite alternate;`);
41
+ });
42
+ if (!document.getElementById("glimmer-style")) {
43
+ const style = document.createElement("style");
44
+ style.id = "glimmer-style";
45
+ style.textContent = `
46
+ @keyframes glimmer {
47
+ 0% { opacity: 1; }
48
+ 100% { opacity: 0.1; }
49
+ }
50
+ `;
51
+ document.head.appendChild(style);
52
+ }
53
+ }, 100);
54
+ return () => clearTimeout(timer);
55
+ }
56
+ }, [svgContent]);
57
+ const formatNumber = (num) => {
58
+ if (num >= 1000000000)
59
+ return `${(num / 1000000000).toFixed(1)}B`;
60
+ if (num >= 1000000)
61
+ return `${(num / 1000000).toFixed(1)}M`;
62
+ if (num >= 1000)
63
+ return `${(num / 1000).toFixed(1)}K`;
64
+ return num.toLocaleString();
65
+ };
66
+ const formatCurrency = (num) => {
67
+ if (num >= 1000000)
68
+ return `$${(num / 1000000).toFixed(1)}M`;
69
+ if (num >= 1000)
70
+ return `$${(num / 1000).toFixed(1)}K`;
71
+ return `$${num.toLocaleString()}`;
72
+ };
73
+ return ((0, jsx_runtime_1.jsxs)("section", { className: "relative min-h-[80vh] flex items-center justify-center overflow-hidden", children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 bg-gradient-to-b from-background via-background to-primary/5" }), (0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 flex items-center justify-center opacity-50", style: { transform: 'translateY(140px) scale(1.2)' }, children: svgContent ? ((0, jsx_runtime_1.jsx)("div", { id: "zion-map", className: "w-full h-full max-w-[1400px] flex items-center justify-center", dangerouslySetInnerHTML: { __html: svgContent } })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-[800px] h-[500px] bg-muted/20 animate-pulse rounded-lg" })) }), (0, jsx_runtime_1.jsxs)("div", { className: "relative z-10 text-center px-4 sm:px-6 max-w-4xl mx-auto", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs uppercase tracking-[0.3em] text-primary mb-4", children: "MICROCOSM NETWORK STATUS" }), (0, jsx_runtime_1.jsx)("h1", { className: "text-4xl sm:text-5xl md:text-6xl font-bold text-foreground mb-6 leading-tight", children: t('heroTitle') }), (0, jsx_runtime_1.jsx)("p", { className: "text-lg sm:text-xl text-muted-foreground max-w-2xl mx-auto mb-8", children: t('heroSubtitle') }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-4 sm:gap-6 mt-12", children: loading ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(QuickStatSkeleton, {}), (0, jsx_runtime_1.jsx)(QuickStatSkeleton, {}), (0, jsx_runtime_1.jsx)(QuickStatSkeleton, {}), (0, jsx_runtime_1.jsx)(QuickStatSkeleton, {})] })) : error ? ((0, jsx_runtime_1.jsxs)("div", { className: "col-span-4 text-center text-red-400", children: [t('loadFailed'), ": ", error] })) : stats ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(QuickStat, { label: t('activeUsers'), value: formatNumber(stats.total_users), change: `+${stats.new_users_today} ${t('today')}` }), (0, jsx_runtime_1.jsx)(QuickStat, { label: t('totalTerritories'), value: formatNumber(stats.total_territories), change: `${t('active')} ${stats.active_users_24h}` }), (0, jsx_runtime_1.jsx)(QuickStat, { label: t('mccCirculating'), value: formatNumber(stats.mcc_circulating), change: t('onchainVerified') }), (0, jsx_runtime_1.jsx)(QuickStat, { label: "MCD", value: formatNumber(stats.mcd_locked), change: "Vault Total" })] })) : null }), stats?.updated_at && ((0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-muted-foreground mt-6", children: [t('dataUpdatedAt'), " ", new Date(stats.updated_at).toLocaleString()] }))] }), (0, jsx_runtime_1.jsx)("div", { className: "absolute bottom-0 left-0 right-0 h-32 bg-gradient-to-t from-background to-transparent" })] }));
74
+ }
75
+ function QuickStat({ label, value, change }) {
76
+ const isPositive = change.startsWith("+") || change.includes("today") || change.includes("active") || change.includes("今日") || change.includes("活跃");
77
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "bg-card/50 backdrop-blur-sm border border-border/50 rounded-xl p-4 sm:p-5", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-xs text-muted-foreground uppercase tracking-wider mb-1", children: label }), (0, jsx_runtime_1.jsx)("p", { className: "text-2xl sm:text-3xl font-bold text-foreground", children: value }), (0, jsx_runtime_1.jsx)("p", { className: `text-xs mt-1 ${isPositive ? "text-primary" : "text-muted-foreground"}`, children: change })] }));
78
+ }
79
+ function QuickStatSkeleton() {
80
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "bg-card/50 backdrop-blur-sm border border-border/50 rounded-xl p-4 sm:p-5", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-3 w-16 bg-muted animate-pulse rounded mb-2" }), (0, jsx_runtime_1.jsx)("div", { className: "h-8 w-24 bg-muted animate-pulse rounded mb-2" }), (0, jsx_runtime_1.jsx)("div", { className: "h-3 w-12 bg-muted animate-pulse rounded" })] }));
81
+ }
@@ -0,0 +1 @@
1
+ export declare function MiningHistoryStats(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.MiningHistoryStats = MiningHistoryStats;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const useStats_1 = require("../../hooks/useStats");
9
+ const charts_1 = require("./charts");
10
+ const next_intl_1 = require("next-intl");
11
+ function MiningHistoryStats() {
12
+ const [days, setDays] = (0, react_1.useState)(7);
13
+ const { data: stats, loading, error } = (0, useStats_1.useMiningHistory)(days);
14
+ const t = (0, next_intl_1.useTranslations)("data");
15
+ const formatLargeNumber = (num) => {
16
+ if (num >= 1000000000)
17
+ return `${(num / 1000000000).toFixed(2)}B`;
18
+ if (num >= 1000000)
19
+ return `${(num / 1000000).toFixed(2)}M`;
20
+ if (num >= 1000)
21
+ return `${(num / 1000).toFixed(2)}K`;
22
+ return num.toLocaleString();
23
+ };
24
+ const formatAmount = (num) => {
25
+ if (num >= 1000000)
26
+ return `${(num / 1000000).toFixed(2)}M`;
27
+ if (num >= 1000)
28
+ return `${(num / 1000).toFixed(2)}K`;
29
+ return num.toLocaleString();
30
+ };
31
+ return ((0, jsx_runtime_1.jsx)("section", { className: "py-20 md:py-24 px-4 sm:px-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-[1400px] mx-auto", children: [(0, jsx_runtime_1.jsxs)("header", { className: "text-center mb-12 md:mb-16", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-[#5EEAD4] mb-3 md:mb-4", children: "MINTING HISTORY" }), (0, jsx_runtime_1.jsx)("h2", { className: "font-sans font-bold text-3xl sm:text-4xl md:text-5xl text-foreground mb-4 md:mb-5 text-balance", children: t('miningHistory') }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-sm sm:text-base text-foreground/60 max-w-3xl mx-auto text-balance", children: t('miningHistoryDesc') })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex justify-center mb-8", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex bg-background/50 border border-border/30 rounded-lg p-1", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => setDays(7), className: `px-4 py-2 rounded-md font-mono text-sm font-medium transition-colors ${days === 7
32
+ ? "bg-[#5EEAD4]/15 text-[#5EEAD4] border border-[#5EEAD4]/25"
33
+ : "text-foreground/50 hover:text-foreground"}`, children: t('days7') }), (0, jsx_runtime_1.jsx)("button", { onClick: () => setDays(30), className: `px-4 py-2 rounded-md font-mono text-sm font-medium transition-colors ${days === 30
34
+ ? "bg-[#5EEAD4]/15 text-[#5EEAD4] border border-[#5EEAD4]/25"
35
+ : "text-foreground/50 hover:text-foreground"}`, children: t('days30') })] }) }), loading ? ((0, jsx_runtime_1.jsxs)("div", { className: "space-y-6", children: [(0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 md:gap-4", children: [...Array(6)].map((_, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/50 rounded-lg p-4 blockchain-card", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-3 w-16 bg-muted animate-pulse rounded mb-2" }), (0, jsx_runtime_1.jsx)("div", { className: "h-7 w-24 bg-muted animate-pulse rounded mb-1" }), (0, jsx_runtime_1.jsx)("div", { className: "h-3 w-12 bg-muted animate-pulse rounded" })] }, i))) }), (0, jsx_runtime_1.jsx)("div", { className: "border border-border/30 bg-background/50 rounded-lg p-6 blockchain-card", children: (0, jsx_runtime_1.jsx)("div", { className: "h-[350px] bg-muted animate-pulse rounded" }) })] })) : error ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-center text-red-400 py-12 font-mono text-sm", children: [t('loadFailed'), ": ", error] })) : stats ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 md:gap-4 mb-8", children: [(0, jsx_runtime_1.jsx)(SummaryCard, { label: t('usdcInput'), value: formatAmount(stats.summary.total_usdc), sub: t('stablecoin'), highlight: true }), (0, jsx_runtime_1.jsx)(SummaryCard, { label: t('usdtInput'), value: formatAmount(stats.summary.total_usdt), sub: t('stablecoin'), highlightColor: "blue" }), (0, jsx_runtime_1.jsx)(SummaryCard, { label: t('mccMinted'), value: formatLargeNumber(stats.summary.total_mcc), sub: t('tokenOutput'), highlight: true }), (0, jsx_runtime_1.jsx)(SummaryCard, { label: t('mcdMinted'), value: formatLargeNumber(stats.summary.total_mcd), sub: t('creditsOutput'), highlightColor: "blue" }), (0, jsx_runtime_1.jsx)(SummaryCard, { label: t('dailyAvgInput'), value: formatAmount(stats.summary.avg_daily), sub: "USDC+USDT" }), (0, jsx_runtime_1.jsx)(SummaryCard, { label: t('totalTx'), value: stats.summary.total_tx.toLocaleString(), sub: t('onchainRecords') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6 blockchain-card", children: [(0, jsx_runtime_1.jsxs)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground mb-6", children: [days, t('daysMintTrend')] }), (0, jsx_runtime_1.jsx)(charts_1.MiningTrendChart, { data: stats.history, className: "h-[350px] w-full" })] })] })) : null] }) }));
36
+ }
37
+ function SummaryCard({ label, value, sub, highlight = false, highlightColor, }) {
38
+ const colorClass = highlightColor === "blue"
39
+ ? "text-[#5EBCD4]"
40
+ : highlight
41
+ ? "text-[#5EEAD4]"
42
+ : "text-foreground";
43
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/50 rounded-lg p-4 blockchain-card", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-[10px] sm:text-xs uppercase tracking-widest text-foreground/50 mb-1", children: label }), (0, jsx_runtime_1.jsx)("p", { className: `font-sans font-bold text-xl sm:text-2xl tabular-nums ${colorClass}`, children: value }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-[10px] sm:text-xs text-foreground/40 mt-0.5 tabular-nums", children: sub })] }));
44
+ }
@@ -0,0 +1 @@
1
+ export declare function TeamWalletStats(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.TeamWalletStats = TeamWalletStats;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const useStats_1 = require("../../hooks/useStats");
8
+ const charts_1 = require("./charts");
9
+ const lucide_react_1 = require("lucide-react");
10
+ const react_1 = require("react");
11
+ const next_intl_1 = require("next-intl");
12
+ function TeamWalletStats() {
13
+ const { data: stats, loading, error } = (0, useStats_1.useTeamWalletStats)();
14
+ const [copiedAddress, setCopiedAddress] = (0, react_1.useState)(null);
15
+ const t = (0, next_intl_1.useTranslations)("data");
16
+ const formatLargeNumber = (num) => {
17
+ if (num >= 1000000000)
18
+ return `${(num / 1000000000).toFixed(2)}B`;
19
+ if (num >= 1000000)
20
+ return `${(num / 1000000).toFixed(2)}M`;
21
+ if (num >= 1000)
22
+ return `${(num / 1000).toFixed(2)}K`;
23
+ return num.toLocaleString();
24
+ };
25
+ const shortenAddress = (address) => {
26
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
27
+ };
28
+ const copyAddress = async (address) => {
29
+ await navigator.clipboard.writeText(address);
30
+ setCopiedAddress(address);
31
+ setTimeout(() => setCopiedAddress(null), 2000);
32
+ };
33
+ return ((0, jsx_runtime_1.jsx)("section", { className: "py-20 md:py-24 px-4 sm:px-6", "aria-labelledby": "foundation-wallet-title", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto", children: [(0, jsx_runtime_1.jsxs)("header", { className: "text-center mb-12 md:mb-16", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-[#5EEAD4] mb-3 md:mb-4", children: "FOUNDATION WALLETS" }), (0, jsx_runtime_1.jsx)("h2", { id: "foundation-wallet-title", className: "font-sans font-bold text-3xl sm:text-4xl md:text-5xl text-foreground mb-4 md:mb-5 text-balance", children: t('foundationTitle') }), (0, jsx_runtime_1.jsxs)("div", { className: "max-w-3xl mx-auto space-y-2", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-sm sm:text-base text-foreground/60 text-balance", children: t('foundationDesc') }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm text-foreground/40 text-balance", children: t('foundationSubDesc') })] })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "space-y-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-6", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-8 w-48 bg-muted animate-pulse rounded mb-6" }), (0, jsx_runtime_1.jsx)("div", { className: "h-[300px] bg-muted animate-pulse rounded" })] }) })) : error ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-center text-red-400 py-12 font-mono text-sm", children: [t('loadFailed'), ": ", error] })) : stats ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6 mb-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground", children: t('mccBalanceDist') }), (0, jsx_runtime_1.jsxs)("div", { className: "font-mono text-sm text-foreground/50", children: [t('totalLabel'), ": ", (0, jsx_runtime_1.jsxs)("span", { className: "text-[#5EEAD4] font-medium", children: [formatLargeNumber(stats.total_mcc), " MCC"] })] })] }), (0, jsx_runtime_1.jsx)(charts_1.TeamWalletChart, { data: stats.wallets, className: "h-[300px]" })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3 md:gap-4", children: stats.wallets.map((wallet) => ((0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 transition-colors duration-200 hover:bg-background/70 hover:border-border/50", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-sans font-medium text-base text-foreground", children: wallet.label }), (0, jsx_runtime_1.jsxs)("span", { className: "font-mono text-xs text-foreground/40 tabular-nums", children: [wallet.percentage, "%"] })] }), (0, jsx_runtime_1.jsxs)("p", { className: "font-sans font-bold text-3xl text-[#5EEAD4] tabular-nums mb-3", children: [formatLargeNumber(wallet.mcc_balance), (0, jsx_runtime_1.jsx)("span", { className: "text-base text-foreground/40 ml-1 font-normal", children: "MCC" })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 bg-muted/50 rounded-lg px-3 py-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50 flex-1 tabular-nums", children: shortenAddress(wallet.address) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => copyAddress(wallet.address), className: "p-1 hover:bg-background/50 rounded transition-colors", title: t('copyAddress'), children: (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { className: `w-3.5 h-3.5 ${copiedAddress === wallet.address ? 'text-[#5EEAD4]' : 'text-foreground/40'}` }) }), (0, jsx_runtime_1.jsx)("a", { href: `https://solscan.io/account/${wallet.address}`, target: "_blank", rel: "noopener noreferrer", className: "p-1 hover:bg-background/50 rounded transition-colors", title: t('viewOnSolscan'), children: (0, jsx_runtime_1.jsx)(lucide_react_1.ExternalLink, { className: "w-3.5 h-3.5 text-foreground/40 hover:text-[#5EEAD4]" }) })] })] }, wallet.key))) }), (0, jsx_runtime_1.jsx)("div", { className: "mt-8 p-4 bg-[#5EEAD4]/5 border border-[#5EEAD4]/15 rounded-lg", children: (0, jsx_runtime_1.jsxs)("p", { className: "font-mono text-xs sm:text-sm text-foreground/50 leading-relaxed", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-[#5EEAD4] font-medium", children: t('legalDisclaimer') }), t('legalDisclaimerText')] }) }), stats.updated_at && ((0, jsx_runtime_1.jsxs)("p", { className: "font-mono text-xs text-foreground/30 text-center mt-4 tabular-nums", children: [t('dataUpdatedAt'), " ", new Date(stats.updated_at).toLocaleString()] }))] })) : null] }) }));
34
+ }
@@ -0,0 +1 @@
1
+ export declare function TerritoryStats(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.TerritoryStats = TerritoryStats;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const useStats_1 = require("../../hooks/useStats");
8
+ const next_intl_1 = require("next-intl");
9
+ const recharts_1 = require("recharts");
10
+ const TerritoryIcons = {
11
+ System: ((0, jsx_runtime_1.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", className: "text-[#5EEAD4]", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "6", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "2", fill: "currentColor" })] })),
12
+ Sector: ((0, jsx_runtime_1.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", className: "text-[#5EEAD4]", children: [(0, jsx_runtime_1.jsx)("path", { d: "M12 2L22 8.5V15.5L12 22L2 15.5V8.5L12 2Z", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 8L17 11V17L12 20L7 17V11L12 8Z", stroke: "currentColor", strokeWidth: "1.5" })] })),
13
+ Matrix: ((0, jsx_runtime_1.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", className: "text-[#5EBCD4]", children: [(0, jsx_runtime_1.jsx)("rect", { x: "3", y: "3", width: "7", height: "7", stroke: "currentColor", strokeWidth: "1.5", rx: "1" }), (0, jsx_runtime_1.jsx)("rect", { x: "14", y: "3", width: "7", height: "7", stroke: "currentColor", strokeWidth: "1.5", rx: "1" }), (0, jsx_runtime_1.jsx)("rect", { x: "3", y: "14", width: "7", height: "7", stroke: "currentColor", strokeWidth: "1.5", rx: "1" }), (0, jsx_runtime_1.jsx)("rect", { x: "14", y: "14", width: "7", height: "7", stroke: "currentColor", strokeWidth: "1.5", rx: "1" })] })),
14
+ Station: ((0, jsx_runtime_1.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", className: "text-[#5EBCD4]", children: [(0, jsx_runtime_1.jsx)("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2", stroke: "currentColor", strokeWidth: "1.5" }), (0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "3", stroke: "currentColor", strokeWidth: "1.5" })] }))
15
+ };
16
+ const compactFormatter = new Intl.NumberFormat("zh-CN", {
17
+ notation: "compact",
18
+ compactDisplay: "short",
19
+ maximumFractionDigits: 2,
20
+ });
21
+ function TerritoryStats() {
22
+ const { data: stats, loading, error } = (0, useStats_1.useTerritoryStats)();
23
+ const { data: mccData } = (0, useStats_1.useMCCStats)();
24
+ const { data: mcdData } = (0, useStats_1.useMCDStats)();
25
+ const { data: growthData } = (0, useStats_1.useUserGrowth)(30);
26
+ const t = (0, next_intl_1.useTranslations)("data");
27
+ const getIcon = (type) => {
28
+ return TerritoryIcons[type] || TerritoryIcons.Station;
29
+ };
30
+ return ((0, jsx_runtime_1.jsx)("section", { className: "py-20 md:py-24 px-4 sm:px-6", "aria-labelledby": "territory-title", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto", children: [(0, jsx_runtime_1.jsxs)("header", { className: "text-center mb-12 md:mb-16", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-[#5EEAD4] mb-3 md:mb-4", children: "TERRITORY HIERARCHY" }), (0, jsx_runtime_1.jsx)("h2", { id: "territory-title", className: "font-sans font-bold text-3xl sm:text-4xl md:text-5xl text-foreground mb-4 md:mb-5 text-balance", children: t('territoryHierarchy') }), (0, jsx_runtime_1.jsxs)("div", { className: "max-w-3xl mx-auto space-y-2", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-sm sm:text-base text-foreground/60 text-balance", children: t('territoryHierarchyDesc') }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm text-foreground/40 text-balance", children: t('territoryHierarchySubDesc') })] })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "space-y-6", children: (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3 md:gap-4", children: [...Array(6)].map((_, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-3 w-16 bg-muted animate-pulse rounded mb-2" }), (0, jsx_runtime_1.jsx)("div", { className: "h-7 w-24 bg-muted animate-pulse rounded mb-1" }), (0, jsx_runtime_1.jsx)("div", { className: "h-3 w-12 bg-muted animate-pulse rounded" })] }, i))) }) })) : error ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-center text-red-400 py-12 font-mono text-sm", children: [t('loadFailed'), ": ", error] })) : stats ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3 md:gap-4 mb-8", role: "list", "aria-label": t('territoryHierarchy'), children: [(0, jsx_runtime_1.jsx)(StatCard, { label: t('currentUsers'), value: stats.total_users_in_territories.toLocaleString(), sub: t('onchainRegistered'), highlight: true }), (0, jsx_runtime_1.jsx)(StatCard, { label: t('inTerritory'), value: stats.territories.reduce((a, tr) => a + (tr.population ?? 0), 0).toLocaleString(), sub: t('assignedTerritory'), highlight: true }), (0, jsx_runtime_1.jsx)(StatCard, { label: t('totalMinted'), value: compactFormatter.format(mccData?.circulating_supply ?? 0), sub: "MCC", highlightColor: "blue" }), (0, jsx_runtime_1.jsx)(StatCard, { label: t('mintCount'), value: (mccData?.total_mining_count ?? 0).toLocaleString(), sub: t('onchainRecords') }), (0, jsx_runtime_1.jsx)(StatCard, { label: t('vaultBalance'), value: compactFormatter.format(mcdData?.total_vault_balance ?? 0), sub: "MCD", highlightColor: "blue" }), (0, jsx_runtime_1.jsx)(StatCard, { label: t('territoryTotal'), value: stats.territories.reduce((a, tr) => a + tr.total, 0).toString(), sub: t('activeTerritory') })] }), (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 md:gap-5 mb-8", children: stats.territories.map((territory) => ((0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-5 transition-colors duration-200 hover:bg-background/70 hover:border-border/50", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-4", children: [getIcon(territory.type), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base text-foreground", children: territory.type }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs text-foreground/40", children: territory.name })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('totalCount') }), (0, jsx_runtime_1.jsx)("span", { className: "font-sans font-bold text-xl text-foreground tabular-nums", children: territory.total })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('activeCount') }), (0, jsx_runtime_1.jsx)("span", { className: "font-sans font-bold text-xl text-[#5EEAD4] tabular-nums", children: territory.active })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('population') }), (0, jsx_runtime_1.jsx)("span", { className: "font-sans font-medium text-base text-foreground tabular-nums", children: territory.population?.toLocaleString() || 0 })] })] })] }, territory.type))) }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-6 mb-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6 flex flex-col", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-baseline mb-4", children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground", children: t('userGrowthTrend') }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-[#5EEAD4] font-bold tabular-nums", children: (growthData?.total_users ?? stats.total_users_in_territories).toLocaleString() })] }), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 min-h-[260px]", children: growthData && growthData.history.length > 0 ? ((0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: 260, children: (0, jsx_runtime_1.jsxs)(recharts_1.AreaChart, { data: growthData.history, margin: { top: 10, right: 10, bottom: 0, left: 0 }, children: [(0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsxs)("linearGradient", { id: "fillGrowth", x1: "0", y1: "0", x2: "0", y2: "1", children: [(0, jsx_runtime_1.jsx)("stop", { offset: "5%", stopColor: "#5EEAD4", stopOpacity: 0.6 }), (0, jsx_runtime_1.jsx)("stop", { offset: "95%", stopColor: "#5EEAD4", stopOpacity: 0.05 })] }) }), (0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { strokeDasharray: "3 3", stroke: "rgba(255,255,255,0.05)", vertical: false }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis, { dataKey: "date", tick: { fontSize: 10, fill: "rgba(255,255,255,0.4)" }, tickLine: false, axisLine: false, minTickGap: 24, tickFormatter: (v) => {
31
+ const d = new Date(v);
32
+ return `${d.getMonth() + 1}/${d.getDate()}`;
33
+ } }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis, { tick: { fontSize: 10, fill: "rgba(255,255,255,0.4)" }, tickLine: false, axisLine: false, width: 32 }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { contentStyle: {
34
+ backgroundColor: "rgba(23,23,23,0.95)",
35
+ border: "1px solid rgba(94,234,212,0.2)",
36
+ borderRadius: "6px",
37
+ fontSize: "12px",
38
+ fontFamily: "monospace",
39
+ }, labelFormatter: (v) => `${v}`, formatter: (value) => [value.toLocaleString(), t('currentOnchainUsers')] }), (0, jsx_runtime_1.jsx)(recharts_1.Area, { type: "monotone", dataKey: "total_users", stroke: "#5EEAD4", strokeWidth: 2, fill: "url(#fillGrowth)" })] }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "h-full flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-3xl text-[#5EEAD4] font-bold tabular-nums", children: (stats.total_users_in_territories ?? 0).toLocaleString() }) })) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground mb-6", children: t('mcdEcoData') }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/30 rounded-lg p-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('mcdUsage') }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs text-foreground/30", children: t('userToWhitelist') })] }), (0, jsx_runtime_1.jsx)("p", { className: "font-sans font-bold text-2xl text-[#5EBCD4] tabular-nums", children: compactFormatter.format(mcdData?.total_spent ?? 0) }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs text-foreground/40 mt-1", children: t('spentToDeveloper') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/30 rounded-lg p-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('mcdAllocation') }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs text-foreground/30", children: t('vaultToUser') })] }), (0, jsx_runtime_1.jsx)("p", { className: "font-sans font-bold text-2xl text-[#5EEAD4] tabular-nums", children: compactFormatter.format(mcdData?.user_balance ?? 0) }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs text-foreground/40 mt-1", children: t('dailyAutoAllocation') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "border border-border/30 bg-background/30 rounded-lg p-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-1", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm text-foreground/50", children: t('vaultMcdBalance') }), (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-xs text-foreground/30", children: t('allStationVaults') })] }), (0, jsx_runtime_1.jsx)("p", { className: "font-sans font-bold text-2xl text-foreground tabular-nums", children: compactFormatter.format(mcdData?.total_vault_balance ?? 0) }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs text-foreground/40 mt-1", children: t('companionYieldInjection') })] })] })] })] })] })) : null] }) }));
40
+ }
41
+ function StatCard({ label, value, sub, highlight = false, highlightColor, }) {
42
+ const colorClass = highlightColor === "blue"
43
+ ? "text-[#5EBCD4]"
44
+ : highlight
45
+ ? "text-[#5EEAD4]"
46
+ : "text-foreground";
47
+ return ((0, jsx_runtime_1.jsxs)("div", { role: "listitem", className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 transition-colors duration-200 hover:bg-background/70 hover:border-border/50", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-foreground/50 mb-1", children: label }), (0, jsx_runtime_1.jsx)("p", { className: `font-sans font-bold text-2xl sm:text-3xl tabular-nums ${colorClass}`, children: value }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm text-foreground/40 mt-0.5 tabular-nums", children: sub })] }));
48
+ }
@@ -0,0 +1 @@
1
+ export declare function UserLevelStats(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ "use client";
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.UserLevelStats = UserLevelStats;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const useStats_1 = require("../../hooks/useStats");
8
+ const charts_1 = require("./charts");
9
+ const next_intl_1 = require("next-intl");
10
+ const LEVEL_COLORS = {
11
+ 1: "#2DD4BF",
12
+ 2: "#14B8A6",
13
+ 3: "#0D9488",
14
+ 4: "#0F766E",
15
+ 5: "#115E59",
16
+ };
17
+ function UserLevelStats() {
18
+ const { data: stats, loading, error } = (0, useStats_1.useUserLevelStats)();
19
+ const t = (0, next_intl_1.useTranslations)("data");
20
+ const getLevelDescription = (level) => {
21
+ const key = `levelDesc${level}`;
22
+ return t(key);
23
+ };
24
+ return ((0, jsx_runtime_1.jsx)("section", { className: "bg-muted/30 py-20 md:py-24 px-4 sm:px-6", "aria-labelledby": "user-level-title", children: (0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto", children: [(0, jsx_runtime_1.jsxs)("header", { className: "text-center mb-12 md:mb-16", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-[#5EEAD4] mb-3 md:mb-4", children: "USER DISTRIBUTION" }), (0, jsx_runtime_1.jsx)("h2", { id: "user-level-title", className: "font-sans font-bold text-3xl sm:text-4xl md:text-5xl text-foreground mb-4 md:mb-5 text-balance", children: t('userLevelDist') }), (0, jsx_runtime_1.jsxs)("div", { className: "max-w-3xl mx-auto space-y-2", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-sm sm:text-base text-foreground/60 text-balance", children: t('userLevelDesc') }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm text-foreground/40 text-balance", children: t('userLevelSubDesc') })] })] }), loading ? ((0, jsx_runtime_1.jsx)("div", { className: "space-y-4", children: (0, jsx_runtime_1.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 gap-3 md:gap-4 mb-8", children: [...Array(4)].map((_, i) => ((0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-3 w-16 bg-muted animate-pulse rounded mb-2" }), (0, jsx_runtime_1.jsx)("div", { className: "h-7 w-24 bg-muted animate-pulse rounded" })] }, i))) }) })) : error ? ((0, jsx_runtime_1.jsxs)("div", { className: "text-center text-red-400 py-12 font-mono text-sm", children: [t('loadFailed'), ": ", error] })) : stats ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-3 md:gap-4 mb-8", children: [(0, jsx_runtime_1.jsx)(OverviewCard, { label: t('totalUsers'), value: stats.total_users.toLocaleString(), highlight: true }), (0, jsx_runtime_1.jsx)(OverviewCard, { label: t('minerAndAbove'), value: stats.miners_and_above.toLocaleString(), highlightColor: "blue" }), (0, jsx_runtime_1.jsx)(OverviewCard, { label: t('newToday'), value: `+${stats.new_users_today}`, highlight: true }), (0, jsx_runtime_1.jsx)(OverviewCard, { label: t('monthlyActiveRate'), value: `${stats.monthly_active_rate}%` })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4 md:gap-6 mb-8", children: [(0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground mb-4 text-center", children: t('userLevelDistChart') }), (0, jsx_runtime_1.jsx)("div", { className: "flex items-center justify-center h-[280px]", children: (0, jsx_runtime_1.jsx)(charts_1.UserLevelPieChart, { data: stats.levels, className: "w-full h-full" }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 sm:p-6", children: [(0, jsx_runtime_1.jsx)("h3", { className: "font-sans font-medium text-base sm:text-lg text-foreground mb-4", children: t('upgradeSystem') }), (0, jsx_runtime_1.jsx)("div", { className: "space-y-1", children: stats.levels.map((level) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 px-3 py-2.5 rounded-lg hover:bg-background/70 transition-colors", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-8 h-8 rounded-md flex items-center justify-center flex-shrink-0", style: { backgroundColor: `${LEVEL_COLORS[level.level] || '#5EEAD4'}15`, border: `1px solid ${LEVEL_COLORS[level.level] || '#5EEAD4'}25` }, children: (0, jsx_runtime_1.jsx)("span", { className: "font-mono text-sm font-bold", style: { color: LEVEL_COLORS[level.level] || '#5EEAD4' }, children: level.level }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 min-w-0", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-1.5", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-sans font-medium text-base text-foreground", children: level.name }), (0, jsx_runtime_1.jsxs)("span", { className: "font-mono text-xs text-foreground/40", children: ["(", level.chinese, ")"] })] }), (0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs text-foreground/40 truncate", children: getLevelDescription(level.level) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 flex-shrink-0", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-16 h-1.5 bg-border/30 rounded-full overflow-hidden hidden sm:block", children: (0, jsx_runtime_1.jsx)("div", { className: "h-full rounded-full", style: {
25
+ width: `${Math.max(level.percentage, 2)}%`,
26
+ backgroundColor: LEVEL_COLORS[level.level] || '#5EEAD4'
27
+ } }) }), (0, jsx_runtime_1.jsx)("span", { className: "font-sans font-bold text-base text-foreground tabular-nums w-14 text-right", children: level.count.toLocaleString() }), (0, jsx_runtime_1.jsxs)("span", { className: "font-mono text-xs text-foreground/40 w-12 text-right tabular-nums", children: [level.percentage, "%"] })] })] }, level.level))) }), (0, jsx_runtime_1.jsx)("div", { className: "mt-4 p-3 bg-[#5EEAD4]/5 border border-[#5EEAD4]/15 rounded-lg", children: (0, jsx_runtime_1.jsxs)("p", { className: "font-mono text-xs sm:text-sm text-foreground/50", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-[#5EEAD4] font-medium", children: t('onchainVerification') }), t('onchainVerificationDesc')] }) })] })] })] })) : null] }) }));
28
+ }
29
+ function OverviewCard({ label, value, highlight = false, highlightColor, }) {
30
+ const colorClass = highlightColor === "blue"
31
+ ? "text-[#5EBCD4]"
32
+ : highlight
33
+ ? "text-[#5EEAD4]"
34
+ : "text-foreground";
35
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "blockchain-card border border-border/30 bg-background/50 rounded-lg p-4 transition-colors duration-200 hover:bg-background/70 hover:border-border/50", children: [(0, jsx_runtime_1.jsx)("p", { className: "font-mono text-xs sm:text-sm uppercase tracking-widest text-foreground/50 mb-1", children: label }), (0, jsx_runtime_1.jsx)("p", { className: `font-sans font-bold text-2xl sm:text-3xl tabular-nums ${colorClass}`, children: value })] }));
36
+ }
@@ -0,0 +1 @@
1
+ export default function FragmentPage(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.default = FragmentPage;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const lucide_react_1 = require("lucide-react");
8
+ const card_1 = require("../ui/card");
9
+ const next_intl_1 = require("next-intl");
10
+ function FragmentPage() {
11
+ const t = (0, next_intl_1.useTranslations)('fragmentDash');
12
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "max-w-7xl mx-auto px-3 py-4 space-y-3 xs:px-4 xs:space-y-4 sm:px-6 sm:py-6 sm:space-y-6 font-mono", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-lg sm:text-2xl font-bold text-white", children: t('title') }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs sm:text-sm text-neutral-400 mt-1", children: t('subtitle') })] }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "p-3 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400 text-sm mb-4", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsx)("span", { children: t('myHoldings') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-center py-8 text-neutral-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Puzzle, { className: "w-12 h-12 mx-auto mb-2 opacity-50" }), (0, jsx_runtime_1.jsx)("p", { children: t('noHoldings') }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm mt-1", children: t('noHoldingsHint') })] })] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "p-3 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400 text-sm mb-4", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ImageIcon, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsx)("span", { children: t('fragmentVaults') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "text-center py-8 text-neutral-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ImageIcon, { className: "w-12 h-12 mx-auto mb-2 opacity-50" }), (0, jsx_runtime_1.jsx)("p", { children: t('noVaults') }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm mt-1", children: t('noVaultsHint') })] })] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "p-3 sm:p-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400 text-sm mb-4", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Info, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsx)("span", { children: t('protocolInfo') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4 text-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-medium text-white mb-2", children: t('whatIsFragmentation') }), (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-400", children: t('fragmentationDesc') })] }), (0, jsx_runtime_1.jsxs)("div", { className: "p-4 bg-neutral-800 rounded border border-neutral-700", children: [(0, jsx_runtime_1.jsx)("div", { className: "font-medium text-white mb-2", children: t('fragmentRights') }), (0, jsx_runtime_1.jsxs)("ul", { className: "list-disc list-inside space-y-1 text-neutral-400", children: [(0, jsx_runtime_1.jsx)("li", { children: t('fragmentRight1') }), (0, jsx_runtime_1.jsx)("li", { children: t('fragmentRight2') }), (0, jsx_runtime_1.jsx)("li", { children: t('fragmentRight3') })] })] })] })] }) })] }));
13
+ }