@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,232 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.default = StationDetailPage;
9
+ const jsx_runtime_1 = require("react/jsx-runtime");
10
+ const react_1 = require("react");
11
+ const navigation_1 = require("next/navigation");
12
+ const time_remaining_1 = require("../ui/time-remaining");
13
+ const card_1 = require("../ui/card");
14
+ const button_1 = require("../ui/button");
15
+ const badge_1 = require("../ui/badge");
16
+ const input_1 = require("../ui/input");
17
+ const label_1 = require("../ui/label");
18
+ const dialog_1 = require("../ui/dialog");
19
+ const sonner_1 = require("sonner");
20
+ const useAuth_1 = require("../../hooks/useAuth");
21
+ const api_service_1 = require("../../lib/api-service");
22
+ const services_1 = require("../../lib/api/services");
23
+ const StationIncomeChart_1 = __importDefault(require("./StationIncomeChart"));
24
+ const StationMemberRanking_1 = __importDefault(require("./StationMemberRanking"));
25
+ const StationKPIHistory_1 = __importDefault(require("./StationKPIHistory"));
26
+ const MiningDistributionHistory_1 = require("../mining/MiningDistributionHistory");
27
+ const lucide_react_1 = require("lucide-react");
28
+ const getUnitTypeIcon = (type) => {
29
+ switch (type) {
30
+ case 'station': return (0, jsx_runtime_1.jsx)(lucide_react_1.Building2, { className: "w-6 h-6" });
31
+ case 'matrix': return (0, jsx_runtime_1.jsx)(lucide_react_1.Grid3x3, { className: "w-6 h-6" });
32
+ case 'sector': return (0, jsx_runtime_1.jsx)(lucide_react_1.Map, { className: "w-6 h-6" });
33
+ case 'system': return (0, jsx_runtime_1.jsx)(lucide_react_1.Globe, { className: "w-6 h-6" });
34
+ default: return (0, jsx_runtime_1.jsx)(lucide_react_1.Building2, { className: "w-6 h-6" });
35
+ }
36
+ };
37
+ const getUnitTypeLabel = (type) => {
38
+ switch (type) {
39
+ case 'station': return '空间站';
40
+ case 'matrix': return '矩阵';
41
+ case 'sector': return '星区';
42
+ case 'system': return '星系';
43
+ default: return type;
44
+ }
45
+ };
46
+ const getUnitTypeColor = (type) => {
47
+ switch (type) {
48
+ case 'station': return 'text-white';
49
+ case 'matrix': return 'text-cyan-300';
50
+ case 'sector': return 'text-cyan-200';
51
+ case 'system': return 'text-cyan-400';
52
+ default: return 'text-white';
53
+ }
54
+ };
55
+ const getTechBonusPercentage = (type) => {
56
+ switch (type) {
57
+ case 'station': return 10;
58
+ case 'matrix': return 20;
59
+ case 'sector': return 30;
60
+ case 'system': return 40;
61
+ default: return 0;
62
+ }
63
+ };
64
+ function StationDetailPage({ stationId }) {
65
+ const router = (0, navigation_1.useRouter)();
66
+ const { isAdmin } = (0, useAuth_1.useAuth)();
67
+ const [unit, setUnit] = (0, react_1.useState)(null);
68
+ const [loading, setLoading] = (0, react_1.useState)(true);
69
+ const [metrics, setMetrics] = (0, react_1.useState)(null);
70
+ const [members, setMembers] = (0, react_1.useState)([]);
71
+ const [territoryNft, setTerritoryNft] = (0, react_1.useState)(null);
72
+ const [nftLoading, setNftLoading] = (0, react_1.useState)(false);
73
+ const [isMintDialogOpen, setIsMintDialogOpen] = (0, react_1.useState)(false);
74
+ const [minting, setMinting] = (0, react_1.useState)(false);
75
+ const [isEditDialogOpen, setIsEditDialogOpen] = (0, react_1.useState)(false);
76
+ const [isDeleteDialogOpen, setIsDeleteDialogOpen] = (0, react_1.useState)(false);
77
+ const [formData, setFormData] = (0, react_1.useState)({
78
+ unit_name: '',
79
+ unit_type: 'station',
80
+ location: '',
81
+ capacity: 1000,
82
+ });
83
+ const [submitting, setSubmitting] = (0, react_1.useState)(false);
84
+ (0, react_1.useEffect)(() => {
85
+ loadStationDetails();
86
+ }, [stationId]);
87
+ const loadStationDetails = async () => {
88
+ try {
89
+ setLoading(true);
90
+ const [detailedRes, membersRes, nftRes] = await Promise.all([
91
+ (0, api_service_1.getUnitDetailedStats)(stationId),
92
+ (0, api_service_1.getUnitMembers)(stationId),
93
+ (0, services_1.getUnitTerritoryNft)(stationId),
94
+ ]);
95
+ if (nftRes.success && nftRes.data) {
96
+ setTerritoryNft(nftRes.data);
97
+ }
98
+ else {
99
+ setTerritoryNft(null);
100
+ }
101
+ const detailedData = detailedRes.data;
102
+ if (detailedRes.success && detailedData?.basic_info) {
103
+ setUnit({
104
+ unit_id: detailedData.unit_id,
105
+ unit_name: detailedData.basic_info.unit_name,
106
+ unit_type: detailedData.basic_info.unit_type,
107
+ location: detailedData.basic_info.parent_id || '',
108
+ capacity: detailedData.metrics.max_capacity,
109
+ created_at: detailedData.basic_info.created_at || new Date().toISOString(),
110
+ current_members: detailedData.metrics.member_count,
111
+ vault_balance: detailedData.metrics.vault_balance,
112
+ short_id: detailedData.basic_info.short_id,
113
+ full_path: detailedData.basic_info.full_path,
114
+ });
115
+ setFormData({
116
+ unit_name: detailedData.basic_info.unit_name,
117
+ unit_type: detailedData.basic_info.unit_type,
118
+ location: detailedData.basic_info.parent_id || '',
119
+ capacity: detailedData.metrics.max_capacity,
120
+ });
121
+ setMetrics(detailedData.metrics);
122
+ if (detailedData.member_ranking) {
123
+ setMembers(detailedData.member_ranking.map((m) => ({
124
+ member_id: m.user_id,
125
+ unit_id: stationId,
126
+ user_id: m.user_id,
127
+ name: m.nickname,
128
+ role: 'member',
129
+ email: m.email,
130
+ joined_at: '',
131
+ })));
132
+ }
133
+ }
134
+ else {
135
+ sonner_1.toast.error('加载领地详情失败');
136
+ router.push('/user-system/territory');
137
+ return;
138
+ }
139
+ if (membersRes.success && membersRes.data) {
140
+ setMembers(membersRes.data);
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error('加载领地 ' + stationId + ' 数据失败:', error);
145
+ sonner_1.toast.error(error instanceof Error ? error.message : '加载详情失败');
146
+ router.push('/user-system/territory');
147
+ }
148
+ finally {
149
+ setLoading(false);
150
+ }
151
+ };
152
+ const handleEdit = async () => {
153
+ if (!formData.unit_name.trim()) {
154
+ sonner_1.toast.error('请输入领地名称');
155
+ return;
156
+ }
157
+ try {
158
+ setSubmitting(true);
159
+ const response = await (0, api_service_1.updateUnit)(stationId, { unit_name: formData.unit_name });
160
+ if (response.success) {
161
+ sonner_1.toast.success('更新成功');
162
+ setIsEditDialogOpen(false);
163
+ loadStationDetails();
164
+ }
165
+ else {
166
+ sonner_1.toast.error(response.error || '更新失败');
167
+ }
168
+ }
169
+ catch (error) {
170
+ sonner_1.toast.error(error instanceof Error ? error.message : '更新失败');
171
+ }
172
+ finally {
173
+ setSubmitting(false);
174
+ }
175
+ };
176
+ const handleDelete = async () => {
177
+ try {
178
+ setSubmitting(true);
179
+ const response = await (0, api_service_1.deleteUnit)(stationId);
180
+ if (response.success) {
181
+ sonner_1.toast.success('删除成功');
182
+ router.push('/user-system/territory');
183
+ }
184
+ else {
185
+ sonner_1.toast.error(response.error || '删除失败');
186
+ }
187
+ }
188
+ catch (error) {
189
+ sonner_1.toast.error(error instanceof Error ? error.message : '删除失败');
190
+ }
191
+ finally {
192
+ setSubmitting(false);
193
+ }
194
+ };
195
+ const handleMintNft = async () => {
196
+ if (!unit)
197
+ return;
198
+ try {
199
+ setMinting(true);
200
+ const nftType = unit.unit_type;
201
+ const nftLabel = unit.unit_type.charAt(0).toUpperCase() + unit.unit_type.slice(1);
202
+ const result = await (0, services_1.prepareMintTerritoryNft)({
203
+ unit_id: stationId,
204
+ nft_type: nftType,
205
+ name: `${nftLabel} #${unit.short_id || stationId}`,
206
+ symbol: 'MTRR',
207
+ uri: '',
208
+ });
209
+ if (!result.success) {
210
+ throw new Error(result.error || '准备铸造交易失败');
211
+ }
212
+ sonner_1.toast.info('请在钱包中确认交易...');
213
+ sonner_1.toast.success('NFT 铸造成功!');
214
+ setIsMintDialogOpen(false);
215
+ loadStationDetails();
216
+ }
217
+ catch (error) {
218
+ sonner_1.toast.error(error instanceof Error ? error.message : '铸造失败');
219
+ }
220
+ finally {
221
+ setMinting(false);
222
+ }
223
+ };
224
+ if (loading) {
225
+ 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", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-4", children: (0, jsx_runtime_1.jsxs)(button_1.Button, { variant: "ghost", className: "text-neutral-400 hover:text-cyan-600", onClick: () => router.push('/user-system/territory'), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { className: "w-4 h-4 mr-2" }), "\u8FD4\u56DE"] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsx)(card_1.CardContent, { className: "pt-6 text-center", children: (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-400", children: "\u52A0\u8F7D\u4E2D..." }) }) })] }));
226
+ }
227
+ if (!unit) {
228
+ return null;
229
+ }
230
+ const isQualified = metrics ? (metrics.occupancy_rate >= 90) : false;
231
+ 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", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-center gap-4", children: (0, jsx_runtime_1.jsxs)(button_1.Button, { variant: "ghost", className: "text-neutral-400 hover:text-white hover:bg-transparent", onClick: () => router.push('/user-system/territory'), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { className: "w-4 h-4 mr-2" }), "\u8FD4\u56DE\u5217\u8868"] }) }), isAdmin() && ((0, jsx_runtime_1.jsxs)(button_1.Button, { size: "sm", className: "bg-cyan-700 hover:bg-cyan-600 text-white", onClick: () => setIsEditDialogOpen(true), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Edit, { className: "w-4 h-4 mr-1" }), "\u7F16\u8F91"] }))] }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsx)(card_1.CardContent, { className: "pt-6", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col md:flex-row gap-6", children: [territoryNft ? ((0, jsx_runtime_1.jsx)("div", { className: "w-32 h-32 bg-neutral-800 rounded-lg border border-neutral-700 flex-shrink-0 overflow-hidden", children: (0, jsx_runtime_1.jsx)("img", { src: territoryNft.image || '/placeholder-nft.png', alt: territoryNft.name, className: "w-full h-full object-cover" }) })) : ((0, jsx_runtime_1.jsxs)("div", { className: "w-32 h-32 bg-neutral-800 rounded-lg border border-neutral-700 flex flex-col items-center justify-center flex-shrink-0 cursor-pointer hover:border-cyan-400/50 dash-card", onClick: () => setIsMintDialogOpen(true), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Image, { className: "w-8 h-8 text-neutral-500 mb-2" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400", children: "\u94F8\u9020 NFT" })] })), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1", children: [(0, jsx_runtime_1.jsx)("div", { className: "flex items-start justify-between", children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [(0, jsx_runtime_1.jsx)("div", { className: getUnitTypeColor(unit.unit_type), children: getUnitTypeIcon(unit.unit_type) }), (0, jsx_runtime_1.jsx)("h1", { className: "text-lg sm:text-2xl font-bold text-white tracking-wider", children: unit.unit_name }), unit.short_id && ((0, jsx_runtime_1.jsx)("span", { className: "text-sm font-mono text-neutral-300 bg-neutral-800 px-2 py-0.5 rounded", children: unit.short_id })), (0, jsx_runtime_1.jsx)(badge_1.Badge, { className: isQualified ? "bg-white/20 text-white" : "bg-neutral-500/20 text-neutral-300", children: isQualified ? (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CheckCircle2, { className: "w-3 h-3 mr-1" }), "\u5DF2\u8FBE\u6807"] }) : (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(lucide_react_1.XCircle, { className: "w-3 h-3 mr-1" }), "\u672A\u8FBE\u6807"] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-neutral-400", children: getUnitTypeLabel(unit.unit_type) }), unit.full_path && ((0, jsx_runtime_1.jsx)("span", { className: "text-xs font-mono text-neutral-500", children: unit.full_path }))] })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4 mt-6", children: [unit.location && ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.MapPin, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsx)("span", { className: "text-sm", children: unit.location })] })), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Calendar, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm", children: ["\u521B\u5EFA\u4E8E ", (0, jsx_runtime_1.jsx)(time_remaining_1.FormattedDate, { dateTime: unit.created_at })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2 text-neutral-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Users, { className: "w-4 h-4" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm", children: ["\u5BB9\u91CF: ", (0, jsx_runtime_1.jsx)("span", { className: "font-mono", children: unit.capacity || 1000 })] })] })] })] })] }) }) }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4", children: [(0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 hover:border-cyan-400/50 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "pt-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Users, { className: "w-8 h-8 text-white" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "\u6210\u5458\u6570\u91CF" })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-2xl font-bold text-white font-mono", children: metrics?.member_count ?? 0 }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-neutral-500 mt-1", children: ["\u5BB9\u91CF: ", (0, jsx_runtime_1.jsx)("span", { className: "font-mono", children: metrics?.max_capacity ?? 1000 })] })] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 hover:border-cyan-400/50 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "pt-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Vault, { className: "w-8 h-8 text-white" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "\u91D1\u5E93\u4F59\u989D" })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-2xl font-bold text-white font-mono", children: (metrics?.vault_mcd ?? 0).toLocaleString() }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-neutral-500 mt-1", children: "MCD (\u79EF\u5206)" })] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 hover:border-cyan-400/50 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "pt-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Zap, { className: "w-8 h-8 text-white" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "\u79D1\u6280\u52A0\u6210" })] }), (0, jsx_runtime_1.jsxs)("p", { className: "text-2xl font-bold text-white font-mono", children: ["+", getTechBonusPercentage(unit.unit_type), "%"] }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-neutral-500 mt-1", children: "\u94F8\u9020\u4EA7\u51FA\u52A0\u6210" })] }) }), (0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 hover:border-cyan-400/50 dash-card", children: (0, jsx_runtime_1.jsxs)(card_1.CardContent, { className: "pt-6", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.DollarSign, { className: "w-8 h-8 text-white" }), (0, jsx_runtime_1.jsx)("span", { className: "text-xs text-neutral-400 tracking-wider", children: "\u5165\u9A7B\u7387" })] }), (0, jsx_runtime_1.jsx)("p", { className: "text-2xl font-bold text-white font-mono", children: metrics ? `${metrics.occupancy_rate.toFixed(1)}%` : '0%' }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-neutral-500 mt-1", children: "\u6210\u5458/\u5BB9\u91CF" })] }) })] }), metrics && ((0, jsx_runtime_1.jsxs)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: [(0, jsx_runtime_1.jsxs)(card_1.CardHeader, { children: [(0, jsx_runtime_1.jsx)(card_1.CardTitle, { className: "text-sm font-medium text-neutral-300 tracking-wider", children: "KPI \u8FDB\u5EA6" }), (0, jsx_runtime_1.jsxs)(card_1.CardDescription, { className: "text-neutral-400", children: ["\u5347\u7EA7\u5230 ", unit.unit_type === 'station' ? 'Matrix' : '更高等级', " \u7684\u8981\u6C42"] })] }), (0, jsx_runtime_1.jsx)(card_1.CardContent, { children: (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between text-sm mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400", children: "\u6210\u5458\u6570\u91CF" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-white font-mono", children: [metrics.member_count, " / ", metrics.max_capacity] })] }), (0, jsx_runtime_1.jsx)("div", { className: "w-full bg-neutral-800 rounded-full h-2 overflow-hidden", children: (0, jsx_runtime_1.jsx)("div", { className: "bg-cyan-400 h-2 rounded-full transition-all", style: { width: `${Math.min(metrics.occupancy_rate, 100)}%` } }) }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-neutral-500 mt-1 font-mono", children: [metrics.occupancy_rate.toFixed(1), "% \u5B8C\u6210"] })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between text-sm mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400", children: "\u91D1\u5E93\u4F59\u989D" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-white font-mono", children: [metrics.vault_mcd.toLocaleString(), " MCD"] })] }), (0, jsx_runtime_1.jsx)("div", { className: "w-full bg-neutral-800 rounded-full h-2 overflow-hidden", children: (0, jsx_runtime_1.jsx)("div", { className: "bg-cyan-400 h-2 rounded-full transition-all", style: { width: `${Math.min(100, metrics.vault_mcd / 100)}%` } }) }), (0, jsx_runtime_1.jsx)("p", { className: "text-xs text-neutral-500 mt-1", children: "\u5F53\u524D\u91D1\u5E93\u8D44\u91D1" })] })] }) })] })), (0, jsx_runtime_1.jsxs)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: [(0, jsx_runtime_1.jsx)(card_1.CardHeader, { children: (0, jsx_runtime_1.jsxs)(card_1.CardTitle, { className: "text-sm font-medium text-neutral-300 tracking-wider flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Settings, { className: "w-5 h-5" }), "\u5206\u914D\u673A\u5236"] }) }), (0, jsx_runtime_1.jsx)(card_1.CardContent, { children: (0, jsx_runtime_1.jsxs)("div", { className: "p-3 bg-neutral-800 rounded", children: [(0, jsx_runtime_1.jsx)("h4", { className: "font-semibold text-white mb-2", children: "\u81EA\u52A8\u6309\u52B3\u5206\u914D" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400", children: "\u91D1\u5E93 MCD \u6BCF\u65E5\u81EA\u52A8\u53D1\u653E\u4F59\u989D\u7684 1%\uFF0C\u6309\u5F53\u65E5\u4EA7\u77FF\u91CF\u5360\u6BD4\u5206\u914D\u7ED9\u77FF\u5DE5\u3002" }), (0, jsx_runtime_1.jsx)("div", { className: "mt-3 text-xs text-neutral-500", children: "\u5206\u914D\u6BD4\u4F8B\uFF1A\u77FF\u5DE5 100%\uFF08\u6309\u52B3\u5206\u914D\uFF09" })] }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6", children: [(0, jsx_runtime_1.jsx)(StationIncomeChart_1.default, { stationId: stationId }), (0, jsx_runtime_1.jsx)(StationMemberRanking_1.default, { stationId: stationId })] }), (0, jsx_runtime_1.jsx)(StationKPIHistory_1.default, {}), (0, jsx_runtime_1.jsx)(MiningDistributionHistory_1.MiningDistributionHistory, { territoryId: stationId, title: "\u672C\u9886\u5730\u94F8\u9020\u4EA7\u51FA\u5386\u53F2", description: "\u663E\u793A\u5F52\u5C5E\u672C Station \u7684\u7528\u6237\u94F8\u9020\u4EA7\u51FA\u8BB0\u5F55", showUserColumn: true, limit: 15 }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { open: isEditDialogOpen, onOpenChange: setIsEditDialogOpen, children: (0, jsx_runtime_1.jsxs)(dialog_1.DialogContent, { className: "bg-neutral-900 border-neutral-700", children: [(0, jsx_runtime_1.jsxs)(dialog_1.DialogHeader, { children: [(0, jsx_runtime_1.jsx)(dialog_1.DialogTitle, { className: "text-white tracking-wider", children: "\u7F16\u8F91\u9886\u5730" }), (0, jsx_runtime_1.jsx)(dialog_1.DialogDescription, { className: "text-neutral-400", children: "\u4FEE\u6539\u9886\u5730\u4FE1\u606F" })] }), (0, jsx_runtime_1.jsx)("div", { className: "space-y-4 py-4", children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(label_1.Label, { className: "text-xs text-neutral-400 tracking-wider", children: "\u9886\u5730\u540D\u79F0 *" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: formData.unit_name, onChange: (e) => setFormData({ ...formData, unit_name: e.target.value }), className: "bg-neutral-800 border-neutral-600 text-white placeholder-neutral-400 mt-1" })] }) }), (0, jsx_runtime_1.jsxs)(dialog_1.DialogFooter, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { variant: "outline", onClick: () => setIsEditDialogOpen(false), disabled: submitting, className: "border-neutral-700 text-neutral-400 hover:bg-neutral-800 hover:text-neutral-300 bg-transparent", children: "\u53D6\u6D88" }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: handleEdit, disabled: submitting, className: "bg-cyan-700 hover:bg-cyan-600 text-white", children: submitting ? '更新中...' : '更新' })] })] }) }), (0, jsx_runtime_1.jsx)(dialog_1.Dialog, { open: isMintDialogOpen, onOpenChange: setIsMintDialogOpen, children: (0, jsx_runtime_1.jsxs)(dialog_1.DialogContent, { className: "bg-neutral-900 border-neutral-700", children: [(0, jsx_runtime_1.jsxs)(dialog_1.DialogHeader, { children: [(0, jsx_runtime_1.jsx)(dialog_1.DialogTitle, { className: "text-white tracking-wider", children: "\u94F8\u9020 Territory NFT" }), (0, jsx_runtime_1.jsxs)(dialog_1.DialogDescription, { className: "text-neutral-400", children: ["\u4E3A ", (0, jsx_runtime_1.jsx)("span", { className: "text-white font-semibold", children: unit.unit_name }), " \u94F8\u9020\u94FE\u4E0A NFT\uFF0C\u53EF\u7528\u4E8E\u501F\u8D37\u62B5\u62BC\u6216\u8F6C\u8BA9\u3002"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-4 py-4", children: [(0, jsx_runtime_1.jsxs)("div", { className: "p-3 bg-neutral-800 rounded", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400", children: "\u9886\u5730\u7C7B\u578B" }), (0, jsx_runtime_1.jsx)("span", { className: "text-white font-semibold", children: getUnitTypeLabel(unit.unit_type) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center mb-2", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400", children: "NFT \u7C7B\u578B" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-white font-semibold font-mono", children: [unit.unit_type.charAt(0).toUpperCase() + unit.unit_type.slice(1), " NFT"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between items-center", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-neutral-400", children: "\u62B5\u62BC\u4EF7\u503C" }), (0, jsx_runtime_1.jsxs)("span", { className: "text-white font-semibold font-mono", children: [unit.unit_type === 'station' && '1,000 MCC', unit.unit_type === 'matrix' && '15,000 MCC', unit.unit_type === 'sector' && '200,000 MCC', unit.unit_type === 'system' && '2,500,000 MCC'] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "p-3 bg-neutral-800 rounded border border-neutral-700", children: (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-neutral-400", children: "\u94F8\u9020 NFT \u540E\uFF0C\u60A8\u53EF\u4EE5\u5C06\u5176\u7528\u4E8E MCC \u501F\u8D37\u534F\u8BAE\u7684\u62B5\u62BC\u54C1\uFF0C\u6216\u5728\u5E02\u573A\u4E0A\u8F6C\u8BA9\u3002" }) })] }), (0, jsx_runtime_1.jsxs)(dialog_1.DialogFooter, { children: [(0, jsx_runtime_1.jsx)(button_1.Button, { variant: "outline", onClick: () => setIsMintDialogOpen(false), disabled: minting, className: "border-neutral-700 text-neutral-400 hover:bg-neutral-800 hover:text-neutral-300 bg-transparent", children: "\u53D6\u6D88" }), (0, jsx_runtime_1.jsx)(button_1.Button, { onClick: handleMintNft, disabled: minting, className: "bg-cyan-700 hover:bg-cyan-600 text-white", children: minting ? '铸造中...' : '确认铸造' })] })] }) })] }));
232
+ }
@@ -0,0 +1,11 @@
1
+ interface IncomeChartData {
2
+ date: string;
3
+ income: number;
4
+ cumulative: number;
5
+ }
6
+ interface StationIncomeChartProps {
7
+ stationId: string;
8
+ incomeData?: IncomeChartData[];
9
+ }
10
+ export default function StationIncomeChart({ stationId, incomeData }: StationIncomeChartProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ // AI-generated · AI-managed · AI-maintained
3
+ 'use client';
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.default = StationIncomeChart;
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const card_1 = require("../ui/card");
9
+ const lucide_react_1 = require("lucide-react");
10
+ const recharts_1 = require("recharts");
11
+ const api_service_1 = require("../../lib/api-service");
12
+ function StationIncomeChart({ stationId, incomeData }) {
13
+ const [data, setData] = (0, react_1.useState)([]);
14
+ const [loading, setLoading] = (0, react_1.useState)(true);
15
+ (0, react_1.useEffect)(() => {
16
+ if (incomeData) {
17
+ setData(incomeData);
18
+ setLoading(false);
19
+ }
20
+ else {
21
+ loadIncomeData();
22
+ }
23
+ }, [stationId, incomeData]);
24
+ const loadIncomeData = async () => {
25
+ try {
26
+ setLoading(true);
27
+ const response = await (0, api_service_1.getUnitIncomeChart)(stationId, '30d');
28
+ const chart = response.data;
29
+ if (response.success && chart?.labels && chart?.datasets) {
30
+ const chartData = chart.labels.map((label, index) => ({
31
+ date: label,
32
+ income: chart.datasets.income[index] || 0,
33
+ cumulative: chart.datasets.cumulative[index] || 0,
34
+ }));
35
+ setData(chartData);
36
+ }
37
+ else {
38
+ setData([]);
39
+ }
40
+ }
41
+ catch (error) {
42
+ console.error('加载收入数据失败:', error);
43
+ setData([]);
44
+ }
45
+ finally {
46
+ setLoading(false);
47
+ }
48
+ };
49
+ if (loading) {
50
+ return ((0, jsx_runtime_1.jsx)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 dash-card", children: (0, jsx_runtime_1.jsx)(card_1.CardContent, { className: "pt-6", children: (0, jsx_runtime_1.jsx)("div", { className: "h-64 flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("p", { className: "text-neutral-500", children: "\u52A0\u8F7D\u4E2D..." }) }) }) }));
51
+ }
52
+ return ((0, jsx_runtime_1.jsxs)(card_1.Card, { className: "bg-neutral-900 border-neutral-700 hover:border-cyan-400/50 dash-card", children: [(0, jsx_runtime_1.jsx)(card_1.CardHeader, { className: "pb-2", children: (0, jsx_runtime_1.jsxs)(card_1.CardTitle, { className: "text-sm font-medium text-neutral-300 tracking-wider flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.TrendingUp, { className: "w-5 h-5 text-white" }), "\u6536\u5165\u8D8B\u52BF (\u8FD130\u5929)"] }) }), (0, jsx_runtime_1.jsx)(card_1.CardContent, { children: (0, jsx_runtime_1.jsx)("div", { className: "h-64", children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: "100%", children: (0, jsx_runtime_1.jsxs)(recharts_1.LineChart, { data: data, margin: { top: 5, right: 10, left: 0, bottom: 5 }, children: [(0, jsx_runtime_1.jsx)(recharts_1.CartesianGrid, { strokeDasharray: "3 3", stroke: "#404040" }), (0, jsx_runtime_1.jsx)(recharts_1.XAxis, { dataKey: "date", tick: { fill: '#a3a3a3', fontSize: 12 }, axisLine: { stroke: '#525252' } }), (0, jsx_runtime_1.jsx)(recharts_1.YAxis, { tick: { fill: '#a3a3a3', fontSize: 12 }, axisLine: { stroke: '#525252' } }), (0, jsx_runtime_1.jsx)(recharts_1.Tooltip, { contentStyle: {
53
+ backgroundColor: '#171717',
54
+ border: '1px solid #404040',
55
+ borderRadius: '8px',
56
+ }, labelStyle: { color: '#a3a3a3' }, itemStyle: { color: '#fff' } }), (0, jsx_runtime_1.jsx)(recharts_1.Legend, { wrapperStyle: { color: '#a3a3a3' } }), (0, jsx_runtime_1.jsx)(recharts_1.Line, { type: "monotone", dataKey: "income", name: "\u65E5\u6536\u5165", stroke: "#22d3ee", strokeWidth: 2, dot: false, activeDot: { r: 4 } }), (0, jsx_runtime_1.jsx)(recharts_1.Line, { type: "monotone", dataKey: "cumulative", name: "\u7D2F\u8BA1\u6536\u5165", stroke: "#ffffff", strokeWidth: 2, dot: false, activeDot: { r: 4 } })] }) }) }) })] }));
57
+ }
@@ -0,0 +1 @@
1
+ export default function StationKPIHistory(): null;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = StationKPIHistory;
5
+ function StationKPIHistory() {
6
+ return null;
7
+ }
@@ -0,0 +1 @@
1
+ export default function StationListPage(): import("react/jsx-runtime").JSX.Element;