@microcosmmoney/portal-react 3.12.8 → 3.13.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 (397) 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 +135 -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/useMarketData.d.ts +9 -0
  266. package/dist/main-portal/hooks/useMarketData.js +32 -0
  267. package/dist/main-portal/hooks/useMultiWalletBalance.d.ts +31 -0
  268. package/dist/main-portal/hooks/useMultiWalletBalance.js +65 -0
  269. package/dist/main-portal/hooks/usePriceHistory.d.ts +9 -0
  270. package/dist/main-portal/hooks/usePriceHistory.js +36 -0
  271. package/dist/main-portal/hooks/useSolanaBalance.d.ts +21 -0
  272. package/dist/main-portal/hooks/useSolanaBalance.js +58 -0
  273. package/dist/main-portal/hooks/useSpeechRecognition.d.ts +6 -0
  274. package/dist/main-portal/hooks/useSpeechRecognition.js +82 -0
  275. package/dist/main-portal/hooks/useStats.d.ts +131 -0
  276. package/dist/main-portal/hooks/useStats.js +161 -0
  277. package/dist/main-portal/hooks/useStrategies.d.ts +134 -0
  278. package/dist/main-portal/hooks/useStrategies.js +28 -0
  279. package/dist/main-portal/hooks/useUserRank.d.ts +16 -0
  280. package/dist/main-portal/hooks/useUserRank.js +61 -0
  281. package/dist/main-portal/hooks/useWalletTokenBalances.d.ts +29 -0
  282. package/dist/main-portal/hooks/useWalletTokenBalances.js +106 -0
  283. package/dist/main-portal/i18n/navigation.d.ts +341 -0
  284. package/dist/main-portal/i18n/navigation.js +7 -0
  285. package/dist/main-portal/i18n/request.d.ts +2 -0
  286. package/dist/main-portal/i18n/request.js +47 -0
  287. package/dist/main-portal/i18n/routing.d.ts +18 -0
  288. package/dist/main-portal/i18n/routing.js +10 -0
  289. package/dist/main-portal/lib/ai-chat-config.d.ts +8 -0
  290. package/dist/main-portal/lib/ai-chat-config.js +144 -0
  291. package/dist/main-portal/lib/analytics/hooks.d.ts +139 -0
  292. package/dist/main-portal/lib/analytics/hooks.js +277 -0
  293. package/dist/main-portal/lib/analytics/index.d.ts +2 -0
  294. package/dist/main-portal/lib/analytics/index.js +19 -0
  295. package/dist/main-portal/lib/analytics/types.d.ts +611 -0
  296. package/dist/main-portal/lib/analytics/types.js +2 -0
  297. package/dist/main-portal/lib/api/account.d.ts +39 -0
  298. package/dist/main-portal/lib/api/account.js +86 -0
  299. package/dist/main-portal/lib/api/admin.d.ts +78 -0
  300. package/dist/main-portal/lib/api/admin.js +195 -0
  301. package/dist/main-portal/lib/api/analytics.d.ts +217 -0
  302. package/dist/main-portal/lib/api/analytics.js +55 -0
  303. package/dist/main-portal/lib/api/blockchain.d.ts +178 -0
  304. package/dist/main-portal/lib/api/blockchain.js +302 -0
  305. package/dist/main-portal/lib/api/core.d.ts +3 -0
  306. package/dist/main-portal/lib/api/core.js +47 -0
  307. package/dist/main-portal/lib/api/dexscreener.d.ts +126 -0
  308. package/dist/main-portal/lib/api/dexscreener.js +139 -0
  309. package/dist/main-portal/lib/api/geckoterminal.d.ts +10 -0
  310. package/dist/main-portal/lib/api/geckoterminal.js +43 -0
  311. package/dist/main-portal/lib/api/index.d.ts +16 -0
  312. package/dist/main-portal/lib/api/index.js +230 -0
  313. package/dist/main-portal/lib/api/mcc-holders.d.ts +130 -0
  314. package/dist/main-portal/lib/api/mcc-holders.js +47 -0
  315. package/dist/main-portal/lib/api/org-service-proxy.d.ts +7 -0
  316. package/dist/main-portal/lib/api/org-service-proxy.js +55 -0
  317. package/dist/main-portal/lib/api/services/ai.d.ts +139 -0
  318. package/dist/main-portal/lib/api/services/ai.js +214 -0
  319. package/dist/main-portal/lib/api/services/finance.d.ts +37 -0
  320. package/dist/main-portal/lib/api/services/finance.js +144 -0
  321. package/dist/main-portal/lib/api/services/index.d.ts +5 -0
  322. package/dist/main-portal/lib/api/services/index.js +21 -0
  323. package/dist/main-portal/lib/api/services/mining.d.ts +68 -0
  324. package/dist/main-portal/lib/api/services/mining.js +76 -0
  325. package/dist/main-portal/lib/api/services/organization.d.ts +161 -0
  326. package/dist/main-portal/lib/api/services/organization.js +139 -0
  327. package/dist/main-portal/lib/api/services/user.d.ts +90 -0
  328. package/dist/main-portal/lib/api/services/user.js +78 -0
  329. package/dist/main-portal/lib/api/services.d.ts +1 -0
  330. package/dist/main-portal/lib/api/services.js +17 -0
  331. package/dist/main-portal/lib/api/strategies.d.ts +101 -0
  332. package/dist/main-portal/lib/api/strategies.js +87 -0
  333. package/dist/main-portal/lib/api-service.d.ts +1 -0
  334. package/dist/main-portal/lib/api-service.js +18 -0
  335. package/dist/main-portal/lib/auth-service.d.ts +65 -0
  336. package/dist/main-portal/lib/auth-service.js +382 -0
  337. package/dist/main-portal/lib/config/mainstream-tokens.d.ts +13 -0
  338. package/dist/main-portal/lib/config/mainstream-tokens.js +88 -0
  339. package/dist/main-portal/lib/docs-data.d.ts +36 -0
  340. package/dist/main-portal/lib/docs-data.js +108 -0
  341. package/dist/main-portal/lib/exchanges/config.d.ts +34 -0
  342. package/dist/main-portal/lib/exchanges/config.js +185 -0
  343. package/dist/main-portal/lib/exchanges/hooks/index.d.ts +5 -0
  344. package/dist/main-portal/lib/exchanges/hooks/index.js +10 -0
  345. package/dist/main-portal/lib/exchanges/hooks/useBinanceData.d.ts +15 -0
  346. package/dist/main-portal/lib/exchanges/hooks/useBinanceData.js +216 -0
  347. package/dist/main-portal/lib/exchanges/hooks/useBinanceDialogs.d.ts +32 -0
  348. package/dist/main-portal/lib/exchanges/hooks/useBinanceDialogs.js +395 -0
  349. package/dist/main-portal/lib/exchanges/hooks/useUserExchanges.d.ts +15 -0
  350. package/dist/main-portal/lib/exchanges/hooks/useUserExchanges.js +51 -0
  351. package/dist/main-portal/lib/exchanges/index.d.ts +4 -0
  352. package/dist/main-portal/lib/exchanges/index.js +21 -0
  353. package/dist/main-portal/lib/exchanges/types.d.ts +102 -0
  354. package/dist/main-portal/lib/exchanges/types.js +2 -0
  355. package/dist/main-portal/lib/exchanges/utils.d.ts +1 -0
  356. package/dist/main-portal/lib/exchanges/utils.js +10 -0
  357. package/dist/main-portal/lib/gcp-secrets.d.ts +7 -0
  358. package/dist/main-portal/lib/gcp-secrets.js +45 -0
  359. package/dist/main-portal/lib/mockWallet.d.ts +130 -0
  360. package/dist/main-portal/lib/mockWallet.js +284 -0
  361. package/dist/main-portal/lib/oauth-config.d.ts +12 -0
  362. package/dist/main-portal/lib/oauth-config.js +48 -0
  363. package/dist/main-portal/lib/order-id-generator.d.ts +19 -0
  364. package/dist/main-portal/lib/order-id-generator.js +97 -0
  365. package/dist/main-portal/lib/solana/reincarnation-client.d.ts +28 -0
  366. package/dist/main-portal/lib/solana/reincarnation-client.js +39 -0
  367. package/dist/main-portal/lib/solana/solana-pay.d.ts +31 -0
  368. package/dist/main-portal/lib/solana/solana-pay.js +85 -0
  369. package/dist/main-portal/lib/strategy/defaults.d.ts +2 -0
  370. package/dist/main-portal/lib/strategy/defaults.js +58 -0
  371. package/dist/main-portal/lib/strategy/index.d.ts +3 -0
  372. package/dist/main-portal/lib/strategy/index.js +20 -0
  373. package/dist/main-portal/lib/strategy/tooltips.d.ts +1 -0
  374. package/dist/main-portal/lib/strategy/tooltips.js +50 -0
  375. package/dist/main-portal/lib/strategy/types.d.ts +74 -0
  376. package/dist/main-portal/lib/strategy/types.js +2 -0
  377. package/dist/main-portal/lib/types/ai.types.d.ts +111 -0
  378. package/dist/main-portal/lib/types/ai.types.js +2 -0
  379. package/dist/main-portal/lib/types/api.d.ts +5 -0
  380. package/dist/main-portal/lib/types/api.js +21 -0
  381. package/dist/main-portal/lib/types/common.types.d.ts +168 -0
  382. package/dist/main-portal/lib/types/common.types.js +24 -0
  383. package/dist/main-portal/lib/types/finance.types.d.ts +267 -0
  384. package/dist/main-portal/lib/types/finance.types.js +2 -0
  385. package/dist/main-portal/lib/types/protocol.types.d.ts +216 -0
  386. package/dist/main-portal/lib/types/protocol.types.js +2 -0
  387. package/dist/main-portal/lib/types/user.types.d.ts +243 -0
  388. package/dist/main-portal/lib/types/user.types.js +12 -0
  389. package/dist/main-portal/lib/utils/territoryId.d.ts +75 -0
  390. package/dist/main-portal/lib/utils/territoryId.js +241 -0
  391. package/dist/main-portal/lib/utils.d.ts +4 -0
  392. package/dist/main-portal/lib/utils.js +24 -0
  393. package/dist/main-portal/lib/wallet-auth/api.d.ts +13 -0
  394. package/dist/main-portal/lib/wallet-auth/api.js +132 -0
  395. package/dist/main-portal/lib/wallet-auth/types.d.ts +87 -0
  396. package/dist/main-portal/lib/wallet-auth/types.js +58 -0
  397. 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
+ }