@jheavenknows/bluerouter 5.3.27 → 5.3.29

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 (551) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +10 -10
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/ai-power-index/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/model-profiles/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cluster/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/local-ai-report/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page.js +54 -52
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/resource-monitor/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/routing-topology/page_client-reference-manifest.js +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  46. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  47. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  48. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  50. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  51. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  52. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  53. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  54. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  55. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  56. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  57. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  58. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  59. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +6 -6
  60. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  61. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  62. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  63. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/auth/view-mode/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/cli-model-profiles/cloud-models/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/cli-model-profiles/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/cluster/config/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/cluster/heartbeat/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/command/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/cluster/peers/[id]/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/cluster/peers/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/cluster/snapshot/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/cluster/sync/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/cluster/test/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/dashboard/ai-power-index/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/dashboard/analytics/ai-models/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/dashboard/analytics/analyze/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/dashboard/local-ai-report/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/config/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/live/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/dashboard/routing-topology/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  126. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/oauth/grok-cli/device-code/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/oauth/grok-cli/poll/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/move/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/personal-cloud-providers/shares/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/personal-cloud-providers/visibility/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/pricing/catalog/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  163. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/resource-monitor/[id]/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/resource-monitor/ai-models/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/resource-monitor/analyze/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/resource-monitor/history/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/resource-monitor/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  182. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  217. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  218. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  222. package/app/.next-cli-build/server/app/callback.html +1 -1
  223. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  224. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  225. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  226. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +6 -6
  227. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  228. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  229. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/ai-power-index.html +1 -1
  231. package/app/.next-cli-build/server/app/dashboard/ai-power-index.rsc +8 -8
  232. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index/__PAGE__.segment.rsc +1 -1
  233. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard/ai-power-index.segment.rsc +1 -1
  234. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  235. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  236. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_full.segment.rsc +8 -8
  237. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_head.segment.rsc +1 -1
  238. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_index.segment.rsc +6 -6
  239. package/app/.next-cli-build/server/app/dashboard/ai-power-index.segments/_tree.segment.rsc +3 -3
  240. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +8 -8
  242. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  243. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  245. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  246. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +8 -8
  247. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  248. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +6 -6
  249. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +3 -3
  250. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +11 -11
  252. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +4 -4
  253. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  254. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  255. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  256. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +11 -11
  257. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  258. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +6 -6
  259. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +3 -3
  260. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +9 -9
  262. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  263. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  264. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  266. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +9 -9
  267. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  268. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +6 -6
  269. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +3 -3
  270. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.html +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.rsc +9 -9
  272. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles/__PAGE__.segment.rsc +2 -2
  273. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/model-profiles.segment.rsc +1 -1
  274. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  276. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  277. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_full.segment.rsc +9 -9
  278. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_head.segment.rsc +1 -1
  279. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_index.segment.rsc +6 -6
  280. package/app/.next-cli-build/server/app/dashboard/cli-tools/model-profiles.segments/_tree.segment.rsc +3 -3
  281. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  282. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +9 -9
  283. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  284. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  286. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  287. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
  288. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  289. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +6 -6
  290. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +3 -3
  291. package/app/.next-cli-build/server/app/dashboard/cluster.html +1 -1
  292. package/app/.next-cli-build/server/app/dashboard/cluster.rsc +8 -8
  293. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster/__PAGE__.segment.rsc +1 -1
  294. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard/cluster.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  296. package/app/.next-cli-build/server/app/dashboard/cluster.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  297. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_full.segment.rsc +8 -8
  298. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_head.segment.rsc +1 -1
  299. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_index.segment.rsc +6 -6
  300. package/app/.next-cli-build/server/app/dashboard/cluster.segments/_tree.segment.rsc +3 -3
  301. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/combos.rsc +9 -9
  303. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  304. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  306. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  307. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +9 -9
  308. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +6 -6
  310. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +3 -3
  311. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +9 -9
  313. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  314. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  317. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  318. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +6 -6
  320. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +3 -3
  321. package/app/.next-cli-build/server/app/dashboard/local-ai-report.html +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/local-ai-report.rsc +8 -8
  323. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report/__PAGE__.segment.rsc +1 -1
  324. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard/local-ai-report.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  327. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_full.segment.rsc +8 -8
  328. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_head.segment.rsc +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_index.segment.rsc +6 -6
  330. package/app/.next-cli-build/server/app/dashboard/local-ai-report.segments/_tree.segment.rsc +3 -3
  331. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +9 -9
  333. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  337. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  338. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +9 -9
  339. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  340. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +6 -6
  341. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +3 -3
  342. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +9 -9
  344. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  345. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  347. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  348. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +9 -9
  349. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +6 -6
  351. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +3 -3
  352. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/profile.rsc +9 -9
  354. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +2 -2
  355. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  357. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  358. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +9 -9
  359. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +6 -6
  361. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +3 -3
  362. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +8 -8
  364. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  368. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +8 -8
  369. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +6 -6
  371. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +3 -3
  372. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +8 -8
  374. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  378. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +8 -8
  379. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +6 -6
  381. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +3 -3
  382. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +9 -9
  384. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  388. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  389. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +9 -9
  390. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  391. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +6 -6
  392. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +3 -3
  393. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/providers.rsc +9 -9
  395. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  396. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  397. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  398. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  399. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +9 -9
  400. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  401. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +6 -6
  402. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +3 -3
  403. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  404. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +9 -9
  405. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  406. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  407. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  408. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  409. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +9 -9
  410. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +6 -6
  412. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +3 -3
  413. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  414. package/app/.next-cli-build/server/app/dashboard/quota.rsc +10 -10
  415. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  416. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  417. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  418. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  419. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +10 -10
  420. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  421. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +6 -6
  422. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +3 -3
  423. package/app/.next-cli-build/server/app/dashboard/resource-monitor.html +1 -1
  424. package/app/.next-cli-build/server/app/dashboard/resource-monitor.rsc +10 -10
  425. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor/__PAGE__.segment.rsc +2 -2
  426. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard/resource-monitor.segment.rsc +2 -2
  427. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  428. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  429. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_full.segment.rsc +10 -10
  430. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_head.segment.rsc +1 -1
  431. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_index.segment.rsc +6 -6
  432. package/app/.next-cli-build/server/app/dashboard/resource-monitor.segments/_tree.segment.rsc +3 -3
  433. package/app/.next-cli-build/server/app/dashboard/routing-topology.html +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/routing-topology.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard/routing-topology/__PAGE__.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard/routing-topology.segment.rsc +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  438. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  439. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_full.segment.rsc +8 -8
  440. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_head.segment.rsc +1 -1
  441. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_index.segment.rsc +6 -6
  442. package/app/.next-cli-build/server/app/dashboard/routing-topology.segments/_tree.segment.rsc +3 -3
  443. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +8 -8
  445. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings/pricing.segment.rsc +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard/settings.segment.rsc +1 -1
  448. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  450. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +8 -8
  451. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  452. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +6 -6
  453. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +3 -3
  454. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/skills.rsc +9 -9
  456. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  457. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  459. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  460. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +9 -9
  461. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +6 -6
  463. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +3 -3
  464. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  465. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +8 -8
  466. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +1 -1
  467. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  468. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  470. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  471. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +6 -6
  473. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +3 -3
  474. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  475. package/app/.next-cli-build/server/app/dashboard/translator.rsc +9 -9
  476. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  477. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  478. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  480. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +9 -9
  481. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  482. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +6 -6
  483. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +3 -3
  484. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  485. package/app/.next-cli-build/server/app/dashboard/usage.rsc +9 -9
  486. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  487. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  488. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  489. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  490. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +9 -9
  491. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  492. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +6 -6
  493. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +3 -3
  494. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  495. package/app/.next-cli-build/server/app/dashboard.rsc +9 -9
  496. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  497. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  498. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +3 -3
  499. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +9 -9
  500. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  501. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +6 -6
  502. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +3 -3
  503. package/app/.next-cli-build/server/app/index.html +1 -1
  504. package/app/.next-cli-build/server/app/index.rsc +6 -6
  505. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  506. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  507. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  508. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +6 -6
  509. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  510. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  511. package/app/.next-cli-build/server/app/landing.html +1 -1
  512. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  513. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  514. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  515. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +6 -6
  516. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  517. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  518. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  519. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  520. package/app/.next-cli-build/server/app/login.html +1 -1
  521. package/app/.next-cli-build/server/app/login.rsc +7 -7
  522. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  523. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  524. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +6 -6
  525. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  526. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  527. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  528. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  529. package/app/.next-cli-build/server/app-paths-manifest.json +10 -10
  530. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  531. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  532. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  533. package/app/.next-cli-build/server/chunks/6811.js +1 -1
  534. package/app/.next-cli-build/server/chunks/7639.js +1 -1
  535. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  536. package/app/.next-cli-build/server/pages/404.html +1 -1
  537. package/app/.next-cli-build/server/pages/500.html +1 -1
  538. package/app/.next-cli-build/static/chunks/{5263-9747c56f713b116a.js → 5263-9287fa98e7848959.js} +1 -1
  539. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/resource-monitor/{page-51e7c0ded4453f6f.js → page-d75f2e5c5698c084.js} +1 -1
  540. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/resource-monitor/{template-ad7c5f7bdb0dfe45.js → template-c3b64e3bfd0387ca.js} +53 -51
  541. package/app/.next-cli-build/static/css/e4ad73a263b53984.css +1 -0
  542. package/app/.next-cli-build/static/css/{639d4a48b2d6e62f.css → e8800f71ff503308.css} +1 -1
  543. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  544. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  545. package/app/package.json +1 -1
  546. package/package.json +1 -1
  547. package/app/.next-cli-build/static/css/bed5b5f55f67bdb5.css +0 -1
  548. /package/app/.next-cli-build/static/{l6yKjnNavsdcaWaXkgVRO → _832Bw70ENJcL2X58LprJ}/_buildManifest.js +0 -0
  549. /package/app/.next-cli-build/static/{l6yKjnNavsdcaWaXkgVRO → _832Bw70ENJcL2X58LprJ}/_ssgManifest.js +0 -0
  550. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.2.77-to-5.2.78-5.2.78-20260814-161855 → upgrade-5.3.22-to-5.3.27-5.3.27-20260819-113252}/data.sqlite +0 -0
  551. /package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.2.78-to-5.3.20-5.3.20-20260818-084726 → upgrade-5.3.27-to-5.3.28-5.3.28-20260819-131144}/data.sqlite +0 -0
@@ -69,17 +69,17 @@
69
69
  transition: none;
70
70
  }
71
71
  }
72
- `,h="";return h=b?.type==="error"?"border-red-500/30 bg-red-500/95 text-white":b?.type==="success"?"border-emerald-500/30 bg-emerald-600/95 text-white":"border-border bg-surface/95 text-text-main",e().createElement(e().Fragment,null,e().createElement("style",null,g),a,b?e().createElement("div",{className:`fixed bottom-5 right-5 z-[80] flex items-center gap-2 rounded-xl border px-3.5 py-2.5 text-xs font-semibold shadow-lg backdrop-blur ${h}`,role:"error"===b.type?"alert":"status"},"saving"===b.type?e().createElement("span",{className:"material-symbols-outlined animate-spin text-[17px]"},"progress_activity"):e().createElement("span",{className:"material-symbols-outlined text-[17px]"},"error"===b.type?"error":"check_circle"),e().createElement("span",null,b.text)):null)}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11674:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>b2});var d,e,f,g,h,i=c(48249),j=c(67484),k=c(80322),l=c(21621),m=c(28946),n=c(22393),o=c(54206),p=c(63691),q=c(53707),r=c(53935),s=c(75556),t=["axis"],u=(0,j.forwardRef)((a,b)=>j.createElement(s.P,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:t,tooltipPayloadSearcher:r.uN,categoricalChartProps:a,ref:b})),v=c(74429),w=c(73919),x=c(99314),y=c(54702);let z=Math.cos,A=Math.sin,B=Math.sqrt,C=Math.PI,D=2*C,E={draw(a,b){let c=B(b/C);a.moveTo(c,0),a.arc(0,0,c,0,D)}},F=B(1/3),G=2*F,H=A(C/10)/A(7*C/10),I=A(D/10)*H,J=-z(D/10)*H,K=B(3),L=B(3)/2,M=1/B(12),N=(M/2+1)*3;var O=c(99608),P=c(85922);B(3),B(3);var Q=c(1791),R=c(50149),S=["type","size","sizeType"];function T(){return(T=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function U(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function V(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?U(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):U(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var W={symbolCircle:E,symbolCross:{draw(a,b){let c=B(b/5)/2;a.moveTo(-3*c,-c),a.lineTo(-c,-c),a.lineTo(-c,-3*c),a.lineTo(c,-3*c),a.lineTo(c,-c),a.lineTo(3*c,-c),a.lineTo(3*c,c),a.lineTo(c,c),a.lineTo(c,3*c),a.lineTo(-c,3*c),a.lineTo(-c,c),a.lineTo(-3*c,c),a.closePath()}},symbolDiamond:{draw(a,b){let c=B(b/G),d=c*F;a.moveTo(0,-c),a.lineTo(d,0),a.lineTo(0,c),a.lineTo(-d,0),a.closePath()}},symbolSquare:{draw(a,b){let c=B(b),d=-c/2;a.rect(d,d,c,c)}},symbolStar:{draw(a,b){let c=B(.8908130915292852*b),d=I*c,e=J*c;a.moveTo(0,-c),a.lineTo(d,e);for(let b=1;b<5;++b){let f=D*b/5,g=z(f),h=A(f);a.lineTo(h*c,-g*c),a.lineTo(g*d-h*e,h*d+g*e)}a.closePath()}},symbolTriangle:{draw(a,b){let c=-B(b/(3*K));a.moveTo(0,2*c),a.lineTo(-K*c,-c),a.lineTo(K*c,-c),a.closePath()}},symbolWye:{draw(a,b){let c=B(b/N),d=c/2,e=c*M,f=c*M+c,g=-d;a.moveTo(d,e),a.lineTo(d,f),a.lineTo(g,f),a.lineTo(-.5*d-L*e,L*d+-.5*e),a.lineTo(-.5*d-L*f,L*d+-.5*f),a.lineTo(-.5*g-L*f,L*g+-.5*f),a.lineTo(-.5*d+L*e,-.5*e-L*d),a.lineTo(-.5*d+L*f,-.5*f-L*d),a.lineTo(-.5*g+L*f,-.5*f-L*g),a.closePath()}}},X=Math.PI/180,Y=a=>{var{type:b="circle",size:c=64,sizeType:d="area"}=a,e=V(V({},function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,S)),{},{type:b,size:c,sizeType:d}),f="circle";"string"==typeof b&&(f=b);var{className:g,cx:h,cy:i}=e,k=(0,R.a)(e);return(0,Q.Et)(h)&&(0,Q.Et)(i)&&(0,Q.Et)(c)?j.createElement("path",T({},k,{className:(0,x.$)("recharts-symbols",g),transform:"translate(".concat(h,", ").concat(i,")"),d:(()=>{var a,b=(a=f,W["symbol".concat((0,Q.Zb)(a))]||E),e=(function(a,b){let c=null,d=(0,P.i)(e);function e(){let e;if(c||(c=e=d()),a.apply(this,arguments).draw(c,+b.apply(this,arguments)),e)return c=null,e+""||null}return a="function"==typeof a?a:(0,O.A)(a||E),b="function"==typeof b?b:(0,O.A)(void 0===b?64:+b),e.type=function(b){return arguments.length?(a="function"==typeof b?b:(0,O.A)(b),e):a},e.size=function(a){return arguments.length?(b="function"==typeof a?a:(0,O.A)(+a),e):b},e.context=function(a){return arguments.length?(c=null==a?null:a,e):c},e})().type(b).size(((a,b,c)=>{if("area"===b)return a;switch(c){case"cross":return 5*a*a/9;case"diamond":return .5*a*a/Math.sqrt(3);case"square":return a*a;case"star":var d=18*X;return 1.25*a*a*(Math.tan(d)-Math.tan(2*d)*Math.tan(d)**2);case"triangle":return Math.sqrt(3)*a*a/4;case"wye":return(21-10*Math.sqrt(3))*a*a/8;default:return Math.PI*a*a/4}})(c,d,f))();if(null!==e)return e})()})):null};Y.registerSymbol=(a,b)=>{W["symbol".concat((0,Q.Zb)(a))]=b};var Z=c(64635),$=c(69599);function _(){return(_=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function aa(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ab(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?aa(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):aa(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var ac={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function ad(a){var{data:b,iconType:c,inactiveColor:d}=a,e=32/6,f=32/3,g=b.inactive?d:b.color,h=null!=c?c:b.type;if("none"===h)return null;if("plainline"===h)return j.createElement("line",{strokeWidth:4,fill:"none",stroke:g,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===h)return j.createElement("path",{strokeWidth:4,fill:"none",stroke:g,d:"M0,".concat(16,"h").concat(f,"\n A").concat(e,",").concat(e,",0,1,1,").concat(2*f,",").concat(16,"\n H").concat(32,"M").concat(2*f,",").concat(16,"\n A").concat(e,",").concat(e,",0,1,1,").concat(f,",").concat(16),className:"recharts-legend-icon"});if("rect"===h)return j.createElement("path",{stroke:"none",fill:g,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(j.isValidElement(b.legendIcon)){var i=ab({},b);return delete i.legendIcon,j.cloneElement(b.legendIcon,i)}return j.createElement(Y,{fill:g,cx:16,cy:16,size:32,sizeType:"diameter",type:h})}function ae(a){var{payload:b,iconSize:c,layout:d,formatter:e,inactiveColor:f,iconType:g,labelStyle:h}=a,i={x:0,y:0,width:32,height:32},k={display:"horizontal"===d?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,d)=>{var m=b.formatter||e,n=(0,x.$)({"recharts-legend-item":!0,["legend-item-".concat(d)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof h?ab({},h):{};o.color=b.inactive?f:o.color||b.color;var p=m?m(b.value,b,d):b.value;return j.createElement("li",_({className:n,style:k,key:"legend-item-".concat(d)},(0,Z.XC)(a,b,d)),j.createElement(y.u,{width:c,height:c,viewBox:i,style:l,"aria-label":"".concat(b.value," legend icon")},j.createElement(ad,{data:b,iconType:g,inactiveColor:f})),j.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var af=a=>{var b=(0,$.e)(a,ac),{payload:c,layout:d,align:e}=b;return c&&c.length?j.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===d?e:"left"}},j.createElement(ae,_({},b,{payload:c}))):null},ag=c(60226),ah=c(32671),ai=c(7795),aj=c(12450),ak=c(55644);c(46154);var al=c(66762),am=["contextPayload"];function an(){return(an=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function ao(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ap(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ao(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ao(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function aq(a){return a.value}function ar(a){var{contextPayload:b}=a,c=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,am),d=(0,ag.s)(b,a.payloadUniqBy,aq),e=ap(ap({},c),{},{payload:d});return j.isValidElement(a.content)?j.cloneElement(a.content,e):"function"==typeof a.content?j.createElement(a.content,e):j.createElement(af,e)}function as(a){return(0,ah.j)(),null}function at(a){return(0,ah.j)(),null}var au={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",layout:"horizontal",verticalAlign:"bottom"},av=j.memo(function(a){var b,c=(0,$.e)(a,au),d=(0,ah.G)(ai.g0),e=(0,w.M)(),f=(0,ak.Kp)(),{width:g,height:h,wrapperStyle:i,portal:k}=c,[l,m]=(0,aj.V)([d]),n=(0,ak.yi)(),o=(0,ak.rY)();if(null==n||null==o)return null;var p=n-((null==f?void 0:f.left)||0)-((null==f?void 0:f.right)||0),q=(b=c.layout,"vertical"===b&&null!=h?{height:h}:"horizontal"===b?{width:g||p}:null),r=k?i:ap(ap({position:"absolute",width:(null==q?void 0:q.width)||g||"auto",height:(null==q?void 0:q.height)||h||"auto"},function(a,b,c,d,e,f){var g,h,{layout:i,align:j,verticalAlign:k}=b;return a&&(void 0!==a.left&&null!==a.left||void 0!==a.right&&null!==a.right)||(g="center"===j&&"vertical"===i?{left:((d||0)-f.width)/2}:"right"===j?{right:c&&c.right||0}:{left:c&&c.left||0}),a&&(void 0!==a.top&&null!==a.top||void 0!==a.bottom&&null!==a.bottom)||(h="middle"===k?{top:((e||0)-f.height)/2}:"bottom"===k?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),ap(ap({},g),h)}(i,c,f,n,o,l)),i),s=null!=k?k:e;if(null==s||null==d)return null;var t=j.createElement("div",{className:"recharts-legend-wrapper",style:r,ref:m},j.createElement(as,{layout:c.layout,align:c.align,verticalAlign:c.verticalAlign,itemSorter:c.itemSorter}),!k&&j.createElement(at,{width:l.width,height:l.height}),j.createElement(ar,an({},c,q,{margin:f,chartWidth:n,chartHeight:o,contextPayload:d})));return(0,v.createPortal)(t,s)},al.P);av.displayName="Legend";var aw=c(40948),ax=c(47459),ay=c(83521),az=c(21480),aA=c(16216),aB=c(36136),aC=c(443),aD=["children"],aE=(0,j.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function aF(a){var{children:b}=a,c=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,aD);return j.createElement(aE.Provider,{value:c},b)}var aG=c(10059),aH=c(70383),aI=c(32362),aJ=c(25644),aK=c(44417),aL=(a,b,c,d)=>(0,aK.Gx)(a,"xAxis",b,d),aM=(a,b,c,d)=>(0,aK.CR)(a,"xAxis",b,d),aN=(a,b,c,d)=>(0,aK.Gx)(a,"yAxis",c,d),aO=(a,b,c,d)=>(0,aK.CR)(a,"yAxis",c,d),aP=(0,aI.Mz)([ak.fz,aL,aN,aM,aO],(a,b,c,d,e)=>(0,aA._L)(a,"xAxis")?(0,aA.Hj)(b,d,!1):(0,aA.Hj)(c,e,!1));function aQ(a){return"line"===a.type}var aR=(0,aI.Mz)([aK.ld,(a,b,c,d,e)=>e],(a,b)=>a.filter(aQ).find(a=>a.id===b)),aS=(0,aI.Mz)([ak.fz,aL,aN,aM,aO,aR,aP,aJ.k$],(a,b,c,d,e,f,g,h)=>{var i,{chartData:j,dataStartIndex:k,dataEndIndex:l}=h;if(null!=f&&null!=b&&null!=c&&null!=d&&null!=e&&0!==d.length&&0!==e.length&&null!=g&&("horizontal"===a||"vertical"===a)){var{dataKey:m,data:n}=f;if(null!=(i=null!=n&&n.length>0?n:null==j?void 0:j.slice(k,l+1)))return function(a){var{layout:b,xAxis:c,yAxis:d,xAxisTicks:e,yAxisTicks:f,dataKey:g,bandSize:h,displayedData:i}=a;return i.map((a,i)=>{var j=(0,aA.kr)(a,g);if("horizontal"===b){var k=(0,aA.nb)({axis:c,ticks:e,bandSize:h,entry:a,index:i}),l=(0,Q.uy)(j)?null:d.scale.map(j);return{x:k,y:null!=l?l:null,value:j,payload:a}}var m=(0,Q.uy)(j)?null:c.scale.map(j),n=(0,aA.nb)({axis:d,ticks:f,bandSize:h,entry:a,index:i});return null==m||null==n?null:{x:m,y:n,value:j,payload:a}}).filter(Boolean)}({layout:a,xAxis:b,yAxis:c,xAxisTicks:d,yAxisTicks:e,dataKey:m,bandSize:g,displayedData:i})}}),aT=c(82118),aU=c(8418),aV=c(30069),aW=c(34183),aX=c(93021),aY=c(70719),aZ=c(81298),a$=c(1432),a_=c(7725),a0=c.n(a_),a1=c(12306),a2=c(18334),a3=c(59798);function a4(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function a5(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?a4(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):a4(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function a6(){return(a6=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function a7(a,b){return b||(b=a.slice(0)),Object.freeze(Object.defineProperties(a,{raw:{value:Object.freeze(b)}}))}var a8=(a,b,c,i,j)=>{var k=c-i;return(0,a3.Y)(d||(d=a7(["M ",",",""])),a,b)+(0,a3.Y)(e||(e=a7(["L ",",",""])),a+c,b)+(0,a3.Y)(f||(f=a7(["L ",",",""])),a+c-k/2,b+j)+(0,a3.Y)(g||(g=a7(["L ",",",""])),a+c-k/2-i,b+j)+(0,a3.Y)(h||(h=a7(["L ",","," Z"])),a,b)},a9={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},ba=a=>{var b=(0,$.e)(a,a9),{x:c,y:d,upperWidth:e,lowerWidth:f,height:g,className:h}=b,{animationEasing:i,animationDuration:k,animationBegin:l,isUpdateAnimationActive:m}=b,n=(0,j.useRef)(null),[o,p]=(0,j.useState)(-1),q=(0,j.useRef)(e),r=(0,j.useRef)(f),s=(0,j.useRef)(g),t=(0,j.useRef)(c),u=(0,j.useRef)(d),v=(0,aU.n)(a,"trapezoid-");if((0,j.useEffect)(()=>{if(n.current&&n.current.getTotalLength)try{var a=n.current.getTotalLength();a&&p(a)}catch(a){}},[]),c!==+c||d!==+d||e!==+e||f!==+f||g!==+g||0===e&&0===f||0===g)return null;var w=(0,x.$)("recharts-trapezoid",h);if(!m)return j.createElement("g",null,j.createElement("path",a6({},(0,R.a)(b),{className:w,d:a8(c,d,e,f,g)})));var y=q.current,z=r.current,A=s.current,B=t.current,C=u.current,D="0px ".concat(-1===o?1:o,"px"),E="".concat(o,"px ").concat(o,"px"),F=(0,a2.dl)(["strokeDasharray"],k,i);return j.createElement(aZ.J,{animationId:v,key:v,canBegin:o>0,duration:k,easing:i,isActive:m,begin:l},a=>{var h=(0,Q.GW)(y,e,a),i=(0,Q.GW)(z,f,a),k=(0,Q.GW)(A,g,a),l=(0,Q.GW)(B,c,a),m=(0,Q.GW)(C,d,a);n.current&&(q.current=h,r.current=i,s.current=k,t.current=l,u.current=m);var o=a>0?{transition:F,strokeDasharray:E}:{strokeDasharray:D};return j.createElement("path",a6({},(0,R.a)(b),{className:w,d:a8(l,m,h,i,k),ref:n,style:a5(a5({},o),b.style)}))})},bb=c(82317),bc=c(7548),bd=["option","shapeType","activeClassName","inActiveClassName"];function be(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function bf(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?be(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):be(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function bg(a){var{shapeType:b,elementProps:c}=a;switch(b){case"rectangle":return j.createElement(a1.M,c);case"trapezoid":return j.createElement(ba,c);case"sector":return j.createElement(bb.h,c);case"symbols":if("symbols"===b)return j.createElement(Y,c);break;case"curve":return j.createElement(bc.Ip,c);default:return null}}function bh(a){var b,{option:c,shapeType:d,activeClassName:e="recharts-active-shape",inActiveClassName:f="recharts-shape"}=a,g=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,bd);if((0,j.isValidElement)(c))b=(0,j.cloneElement)(c,bf(bf({},g),(0,j.isValidElement)(c)?c.props:c));else if("function"==typeof c)b=c(g,g.index);else if(a0()(c)&&"boolean"!=typeof c){var h=bf(bf({},g),c);b=j.createElement(bg,{shapeType:d,elementProps:h})}else b=j.createElement(bg,{shapeType:d,elementProps:g});return g.isActive?j.createElement(aw.W,{className:e},b):j.createElement(aw.W,{className:f},b)}var bi=c(17947),bj=c(6859),bk=["id"],bl=["type","layout","connectNulls","needClip","shape"],bm=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function bn(){return(bn=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function bo(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function bp(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?bo(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):bo(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function bq(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}var br=j.memo(a=>{var{dataKey:b,data:c,stroke:d,strokeWidth:e,fill:f,name:g,hide:h,unit:i,tooltipType:k,id:l}=a,m={dataDefinedOnItem:c,getPosition:Q.lQ,settings:{stroke:d,strokeWidth:e,fill:f,dataKey:b,nameKey:void 0,name:(0,aA.uM)(g,b),hide:h,type:k,color:d,unit:i,graphicalItemId:l}};return j.createElement(aC.r,{tooltipEntrySettings:m})}),bs=(a,b)=>"".concat(b,"px ").concat(a,"px");function bt(a){var{clipPathId:b,points:c,props:d}=a,{dot:e,dataKey:f,needClip:g}=d,{id:h}=d,i=bq(d,bk),k=(0,aY.uZ)(i);return j.createElement(ay.n,{points:c,dot:e,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:f,baseProps:k,needClip:g,clipPathId:b})}function bu(a){var{showLabels:b,children:c,points:d}=a,e=(0,j.useMemo)(()=>null==d?void 0:d.map(a=>{var b,c,d={x:null!=(b=a.x)?b:0,y:null!=(c=a.y)?c:0,width:0,lowerWidth:0,upperWidth:0,height:0};return bp(bp({},d),{},{value:a.value,payload:a.payload,viewBox:d,parentViewBox:void 0,fill:void 0})}),[d]);return j.createElement(ax.h8,{value:b?e:void 0},c)}function bv(a){var{clipPathId:b,pathRef:c,points:d,strokeDasharray:e,props:f}=a,{type:g,layout:h,connectNulls:i,needClip:k,shape:l}=f,m=bq(f,bl),n=bp(bp({},(0,R.a)(m)),{},{fill:"none",className:"recharts-line-curve",clipPath:k?"url(#clipPath-".concat(b,")"):void 0,points:d,type:g,layout:h,connectNulls:i,strokeDasharray:null!=e?e:f.strokeDasharray});return j.createElement(j.Fragment,null,(null==d?void 0:d.length)>1&&j.createElement(bh,bn({shapeType:"curve",option:l},n,{pathRef:c})),j.createElement(bt,{points:d,clipPathId:b,props:f}))}function bw(a){var{clipPathId:b,props:c,pathRef:d,previousPointsRef:e,longestAnimatedLengthRef:f}=a,{points:g,strokeDasharray:h,isAnimationActive:i,animationBegin:k,animationDuration:l,animationEasing:m,animateNewValues:n,width:o,height:p,onAnimationEnd:q,onAnimationStart:r}=c,s=e.current,t=(0,aU.n)(g,"recharts-line-"),u=(0,j.useRef)(t),[v,w]=(0,j.useState)(!1),x=(0,j.useCallback)(()=>{"function"==typeof q&&q(),w(!1)},[q]),y=(0,j.useCallback)(()=>{"function"==typeof r&&r(),w(!0)},[r]),z=function(a){try{return a&&a.getTotalLength&&a.getTotalLength()||0}catch(a){return 0}}(d.current),A=(0,j.useRef)(0);u.current!==t&&(A.current=f.current,u.current=t);var B=A.current;return j.createElement(bu,{points:g,showLabels:!v},c.children,j.createElement(aZ.J,{animationId:t,begin:k,duration:l,isActive:i,easing:m,onAnimationEnd:x,onAnimationStart:y,key:t},a=>{var k,l=Math.min((0,Q.GW)(B,z+B,a),z);if(k=i?h?((a,b,c)=>{var d=c.reduce((a,b)=>a+b,0);if(!d)return bs(b,a);for(var e=Math.floor(a/d),f=a%d,g=[],h=0,i=0;h<c.length;i+=null!=(j=c[h])?j:0,++h){var j,k=c[h];if(null!=k&&i+k>f){g=[...c.slice(0,h),f-i];break}}var l=g.length%2==0?[0,b]:[b];return[...function(a,b){for(var c=a.length%2!=0?[...a,0]:a,d=[],e=0;e<b;++e)d.push(...c);return d}(c,e),...g,...l].map(a=>"".concat(a,"px")).join(", ")})(l,z,"".concat(h).split(/[,\s]+/gim).map(a=>parseFloat(a))):bs(z,l):null==h?void 0:String(h),a>0&&z>0&&(e.current=g,f.current=Math.max(f.current,l)),s){var m=s.length/g.length,q=1===a?g:g.map((b,c)=>{var d=Math.floor(c*m);if(s[d]){var e=s[d];return bp(bp({},b),{},{x:(0,Q.GW)(e.x,b.x,a),y:(0,Q.GW)(e.y,b.y,a)})}return n?bp(bp({},b),{},{x:(0,Q.GW)(2*o,b.x,a),y:(0,Q.GW)(p/2,b.y,a)}):bp(bp({},b),{},{x:b.x,y:b.y})});return e.current=q,j.createElement(bv,{props:c,points:q,clipPathId:b,pathRef:d,strokeDasharray:k})}return j.createElement(bv,{props:c,points:g,clipPathId:b,pathRef:d,strokeDasharray:k})}),j.createElement(ax.qY,{label:c.label}))}function bx(a){var{clipPathId:b,props:c}=a,d=(0,j.useRef)(null),e=(0,j.useRef)(0),f=(0,j.useRef)(null);return j.createElement(bw,{props:c,clipPathId:b,previousPointsRef:d,longestAnimatedLengthRef:e,pathRef:f})}var by=(a,b)=>{var c,d;return{x:null!=(c=a.x)?c:void 0,y:null!=(d=a.y)?d:void 0,value:a.value,errorVal:(0,aA.kr)(a.payload,b)}};class bz extends j.Component{render(){var{hide:a,dot:b,points:c,className:d,xAxisId:e,yAxisId:f,top:g,left:h,width:i,height:k,id:l,needClip:m,zIndex:n}=this.props;if(a)return null;var o=(0,x.$)("recharts-line",d),{r:p,strokeWidth:q}=(0,a$.x)(b),r=(0,az.y$)(b),s=2*p+q,t=m?"url(#clipPath-".concat(r?"":"dots-").concat(l,")"):void 0;return j.createElement(bi.g,{zIndex:n},j.createElement(aw.W,{className:o},m&&j.createElement("defs",null,j.createElement(aG.Q,{clipPathId:l,xAxisId:e,yAxisId:f}),!r&&j.createElement("clipPath",{id:"clipPath-dots-".concat(l)},j.createElement("rect",{x:h-s/2,y:g-s/2,width:i+s,height:k+s}))),j.createElement(aF,{xAxisId:e,yAxisId:f,data:c,dataPointFormatter:by,errorBarOffset:0},j.createElement(bx,{props:this.props,clipPathId:l}))),j.createElement(aB.W,{activeDot:this.props.activeDot,points:c,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:t}))}}var bA={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:"auto",label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:bj.I.line,type:"linear"};function bB(a){var b=(0,$.e)(a,bA),{activeDot:c,animateNewValues:d,animationBegin:e,animationDuration:f,animationEasing:g,connectNulls:h,dot:i,hide:k,isAnimationActive:l,label:m,legendType:n,xAxisId:o,yAxisId:p,id:q}=b,r=bq(b,bm),{needClip:s}=(0,aG.l)(o,p),t=(0,aV.oM)(),u=(0,ak.WX)(),v=(0,aH.r)(),w=(0,ah.G)(a=>aS(a,o,p,v,q));if("horizontal"!==u&&"vertical"!==u||null==w||null==t)return null;var{height:x,width:y,x:z,y:A}=t;return j.createElement(bz,bn({},r,{id:q,connectNulls:h,dot:i,activeDot:c,animateNewValues:d,animationBegin:e,animationDuration:f,animationEasing:g,isAnimationActive:l,hide:k,label:m,legendType:n,xAxisId:o,yAxisId:p,points:w,layout:u,height:x,width:y,left:z,top:A,needClip:s}))}var bC=j.memo(function(a){var b=(0,$.e)(a,bA),c=(0,aH.r)();return j.createElement(aW.x,{id:b.id,type:"line"},a=>j.createElement(j.Fragment,null,j.createElement(aT.A,{legendPayload:(a=>{var{dataKey:b,name:c,stroke:d,legendType:e,hide:f}=a;return[{inactive:f,dataKey:b,type:e,color:d,value:(0,aA.uM)(c,b),payload:a}]})(b)}),j.createElement(br,{dataKey:b.dataKey,data:b.data,stroke:b.stroke,strokeWidth:b.strokeWidth,fill:b.fill,name:b.name,hide:b.hide,unit:b.unit,tooltipType:b.tooltipType,id:a}),j.createElement(aX.p,{type:"line",id:a,data:b.data,xAxisId:b.xAxisId,yAxisId:b.yAxisId,zAxisId:0,dataKey:b.dataKey,hide:b.hide,isPanorama:c}),j.createElement(bB,bn({},b,{id:a}))))},al.P);bC.displayName="Line";var bD=c(75171),bE=c(99070),bF=c(83552),bG=c(95145),bH=c(4770);let bI={name:"",host:"",sshPort:"22",sshUser:"",sshPassword:"",useSudo:!0,sudoPassword:"",agentPort:"19998",installAgent:!0};function bJ(a){var b;let c;return!!a?.lastStatus&&(!a.lastError||Date.now()-(Number.isFinite(c=(b=a?.lastStatusAt)?new Date(b).getTime():0)?c:0)<=3e4)}function bK(a){return Math.max(0,Math.min(100,Number(a)||0))}function bL(a,b=1){let c=Number(a)||0;if(!c)return"0 B";let d=["B","KB","MB","GB","TB","PB"],e=Math.min(d.length-1,Math.floor(Math.log(c)/Math.log(1024)));return`${(c/1024**e).toFixed(e>2?b:0)} ${d[e]}`}function bM(a){return a?new Date(a).toLocaleTimeString("vi-VN",{hour12:!1}):"--:--:--"}function bN({value:a,label:b,detail:c,color:d="var(--color-brand-500)",icon:e}){let f=bK(a),g=2*Math.PI*49;return(0,i.jsxs)("div",{className:"flex min-w-0 flex-col items-center",children:[(0,i.jsxs)("div",{className:"relative h-36 w-36",children:[(0,i.jsxs)("svg",{className:"h-full w-full -rotate-90",viewBox:"0 0 120 120","aria-hidden":"true",children:[(0,i.jsx)("circle",{cx:"60",cy:"60",r:49,fill:"none",stroke:"var(--color-surface-2)",strokeWidth:"8"}),(0,i.jsx)("circle",{cx:"60",cy:"60",r:49,fill:"none",stroke:d,strokeWidth:"8",strokeLinecap:"round",strokeDasharray:g,strokeDashoffset:g*(1-f/100),className:"transition-all duration-700"})]}),(0,i.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[e?(0,i.jsx)("span",{className:"material-symbols-outlined mb-0.5 text-[19px] text-text-muted",children:e}):null,(0,i.jsxs)("strong",{className:"text-2xl font-semibold tracking-tight text-text-main",children:[f.toFixed(+(f<10)),"%"]}),(0,i.jsx)("span",{className:"mt-0.5 text-xs font-medium text-text-muted",children:b})]})]}),(0,i.jsx)("div",{className:"mt-2 max-w-full truncate text-center text-xs text-text-subtle",title:c,children:c})]})}function bO({online:a}){return(0,i.jsx)("span",{className:`h-2.5 w-2.5 shrink-0 rounded-full ${a?"bg-emerald-500 shadow-[0_0_0_4px_rgba(16,185,129,.12)]":"bg-red-400 shadow-[0_0_0_4px_rgba(248,113,113,.12)]"}`})}function bP({servers:a,selectedId:b,onSelect:c}){return(0,i.jsx)("div",{className:"flex gap-3 overflow-x-auto pb-1 scroll-thin-x",children:a.map(a=>{let d=a.id===b,e=bJ(a);return(0,i.jsxs)("button",{type:"button",onClick:()=>c(a.id),className:`min-w-[280px] rounded-2xl border p-5 text-left transition ${d?"border-primary bg-primary/5 shadow-[var(--shadow-warm)]":"border-border bg-surface hover:border-primary/40"}`,children:[(0,i.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)(bO,{online:e}),(0,i.jsx)("div",{className:"truncate text-base font-semibold text-text-main",children:a.name})]}),(0,i.jsxs)("div",{className:"mt-1.5 truncate font-mono text-sm text-text-muted",children:[a.host,":",a.agentPort]})]}),(0,i.jsx)("span",{className:"material-symbols-outlined text-[22px] text-text-subtle",children:"dns"})]}),(0,i.jsxs)("div",{className:"mt-3 flex items-center justify-between text-sm text-text-muted",children:[(0,i.jsx)("span",{children:e?"Đang hoạt động":"Mất kết nối"}),(0,i.jsx)("span",{children:bM(a.lastStatusAt)})]})]},a.id)})})}function bQ({icon:a,label:b,value:c,sublabel:d,colorClass:e="text-primary",children:f}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)("div",{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-surface-2 ${e}`,children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:a})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsx)("div",{className:"text-xs font-medium uppercase tracking-wider text-text-muted",children:b}),(0,i.jsx)("div",{className:"mt-0.5 truncate text-lg font-semibold text-text-main",children:c})]})]}),d?(0,i.jsx)("div",{className:"mt-3 truncate text-xs text-text-subtle",children:d}):null,f]})}function bR({data:a,dataKey:b,label:c,color:d,unit:e="%"}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,i.jsx)("h3",{className:"font-semibold text-text-main",children:c}),(0,i.jsx)("span",{className:"text-xs text-text-muted",children:"60 mẫu gần nhất"})]}),(0,i.jsx)("div",{className:"h-44",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(l.Q,{data:a,margin:{top:6,right:4,left:-22,bottom:0},children:[(0,i.jsx)("defs",{children:(0,i.jsxs)("linearGradient",{id:`fill-${b}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,i.jsx)("stop",{offset:"0%",stopColor:d,stopOpacity:.3}),(0,i.jsx)("stop",{offset:"100%",stopColor:d,stopOpacity:.02})]})}),(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",hide:!0}),(0,i.jsx)(o.h,{domain:[0,"auto"],tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},formatter:a=>[`${Number(a).toFixed(1)}${e}`,c]}),(0,i.jsx)(q.Gk,{type:"monotone",dataKey:b,stroke:d,fill:`url(#fill-${b})`,strokeWidth:2.2,dot:!1,isAnimationActive:!1})]})})})]})}let bS=["#10b981","#06b6d4","#8b5cf6","#f59e0b","#ef4444","#3b82f6","#ec4899","#84cc16"];function bT(a){return a?.uuid||`index-${a?.index??0}`}function bU({data:a,gpus:b}){let c=(b||[]).map((a,b)=>({id:bT(a),dataKey:`gpu${b}`,name:`GPU ${a.index} \xb7 ${a.name}`,color:bS[b%bS.length]})),d=a.map(a=>{let b={time:a.time};return c.forEach(c=>{let d=a.gpus?.find(a=>a.id===c.id);b[c.dataKey]=d?.usagePercent??null}),b});return(0,i.jsxs)("div",{className:"mb-5 rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4 flex flex-wrap items-start justify-between gap-2",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:"GPU usage history"}),(0,i.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Mỗi đường biểu diễn mức tải realtime của một NVIDIA GPU."})]}),(0,i.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-1 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:"60 mẫu gần nhất"})]}),(0,i.jsx)("div",{className:"h-64",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(u,{data:d,margin:{top:8,right:12,left:-16,bottom:2},children:[(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",tickFormatter:bM,minTickGap:36,tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(o.h,{domain:[0,100],ticks:[0,25,50,75,100],tickFormatter:a=>`${a}%`,tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},labelFormatter:a=>`Thời gian ${bM(a)}`,formatter:(a,b)=>[`${Number(a).toFixed(1)}%`,b]}),(0,i.jsx)(av,{iconType:"circle",iconSize:8,wrapperStyle:{fontSize:12,paddingTop:12},formatter:a=>(0,i.jsx)("span",{className:"text-text-muted",children:a})}),c.map(a=>(0,i.jsx)(bC,{type:"monotone",dataKey:a.dataKey,name:a.name,stroke:a.color,strokeWidth:2.4,dot:!1,connectNulls:!1,isAnimationActive:!1},a.id))]})})})]})}let bV=[{value:"1h",label:"1 giờ"},{value:"6h",label:"6 giờ"},{value:"24h",label:"24 giờ"},{value:"7d",label:"7 ng\xe0y"},{value:"30d",label:"30 ng\xe0y"}];function bW(a){return a?new Date(a).toLocaleString("vi-VN",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}):"—"}function bX({title:a,description:b,data:c,series:d,domain:e=[0,100],valueFormatter:f=a=>`${Number(a).toFixed(1)}%`,axisFormatter:g=a=>`${a}%`}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4",children:[(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:a}),b?(0,i.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:b}):null]}),(0,i.jsx)("div",{className:"h-64",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(u,{data:c,margin:{top:8,right:12,left:-8,bottom:2},children:[(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",tickFormatter:bW,minTickGap:48,tick:{fill:"var(--color-text-subtle)",fontSize:10},axisLine:!1,tickLine:!1}),(0,i.jsx)(o.h,{domain:e,tickFormatter:g,width:58,tick:{fill:"var(--color-text-subtle)",fontSize:10},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},labelFormatter:a=>bW(a),formatter:(a,b)=>[f(a),b]}),(0,i.jsx)(av,{iconType:"circle",iconSize:8,wrapperStyle:{fontSize:12,paddingTop:12},formatter:a=>(0,i.jsx)("span",{className:"text-text-muted",children:a})}),d.map(a=>(0,i.jsx)(bC,{type:"monotone",dataKey:a.key,name:a.name,stroke:a.color,strokeWidth:2.2,dot:!1,connectNulls:!1,isAnimationActive:!1},a.key))]})})})]})}function bY({server:a,data:b,meta:c,period:d,onPeriodChange:e,loading:f,error:g}){let h=(0,j.useMemo)(()=>{let a=new Map;return b.forEach(b=>{(b.gpus||[]).forEach(b=>{a.has(b.id)||a.set(b.id,b)})}),[...a.values()].map((a,b)=>({id:a.id,key:`gpu${b}`,name:`GPU ${a.index} \xb7 ${a.name}`,color:bS[b%bS.length]}))},[b]),k=(0,j.useCallback)(a=>b.map(b=>{let c={time:b.time};return h.forEach(d=>{let e=b.gpus?.find(a=>a.id===d.id);c[d.key]=e?.[a]??null}),c}),[b,h]);return(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-violet-500/10 text-violet-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"monitoring"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("h3",{className:"truncate text-lg font-semibold text-text-main",children:["Lịch sử \xb7 ",a.name]}),(0,i.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Sample mỗi ph\xfat \xb7 lưu tối đa ",c?.retentionDays||30," ng\xe0y"]})]})]}),(0,i.jsx)("div",{className:"flex flex-wrap gap-1 rounded-xl bg-surface-2 p-1",children:bV.map(a=>(0,i.jsx)("button",{type:"button",onClick:()=>e(a.value),className:`rounded-lg px-3 py-2 text-xs font-semibold transition ${d===a.value?"bg-surface text-primary shadow-sm":"text-text-muted hover:text-text-main"}`,children:a.label},a.value))})]}),f?(0,i.jsxs)("div",{className:"flex min-h-[420px] items-center justify-center text-sm text-text-muted",children:[(0,i.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Đang tải dữ liệu lịch sử..."]}):g?(0,i.jsx)("div",{className:"m-6 rounded-2xl border border-red-500/20 bg-red-500/10 p-5 text-sm text-red-600 dark:text-red-300",children:g}):b.length?(0,i.jsxs)("div",{className:"space-y-5 p-6",children:[(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-3",children:[(0,i.jsx)(bQ,{icon:"database",label:"Số điểm hiển thị",value:b.length.toLocaleString("vi-VN"),sublabel:`Bucket ${c?.bucketMinutes||1} ph\xfat`,colorClass:"text-violet-500"}),(0,i.jsx)(bQ,{icon:"date_range",label:"Từ thời điểm",value:bW(b[0]?.time),sublabel:"Điểm đầu ti\xean trong khoảng đ\xe3 chọn",colorClass:"text-cyan-500"}),(0,i.jsx)(bQ,{icon:"memory",label:"NVIDIA GPU",value:`${h.length} card`,sublabel:"Theo d\xf5i ri\xeang bằng GPU UUID",colorClass:"text-emerald-500"})]}),(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bX,{title:"CPU, RAM & Disk usage",description:"Tỷ lệ sử dụng t\xe0i nguy\xean hệ thống theo thời gian.",data:b,series:[{key:"cpu",name:"CPU",color:"#3b9dec"},{key:"memory",name:"RAM",color:"#8b5cf6"},{key:"disk",name:"Disk",color:"#f59e0b"}]}),(0,i.jsx)(bX,{title:"Network throughput",description:"Tốc độ nhận v\xe0 gửi trung b\xecnh trong mỗi bucket.",data:b,domain:[0,"auto"],series:[{key:"networkRxBps",name:"Download",color:"#06b6d4"},{key:"networkTxBps",name:"Upload",color:"#ec4899"}],valueFormatter:a=>`${bL(a)}/s`,axisFormatter:a=>bL(a)})]}),h.length?(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bX,{title:"NVIDIA GPU usage",description:"Mức tải của từng GPU, ph\xe2n biệt theo UUID.",data:k("usagePercent"),series:h}),(0,i.jsx)(bX,{title:"GPU VRAM usage",description:"Phần trăm VRAM đ\xe3 sử dụng tr\xean từng card.",data:k("memoryUsagePercent"),series:h}),(0,i.jsx)(bX,{title:"GPU temperature",description:"Nhiệt độ trung b\xecnh của từng card trong mỗi bucket.",data:k("temperatureC"),domain:[0,"auto"],series:h,valueFormatter:a=>`${Number(a).toFixed(1)}\xb0C`,axisFormatter:a=>`${a}\xb0`}),(0,i.jsx)(bX,{title:"GPU power draw",description:"C\xf4ng suất ti\xeau thụ trung b\xecnh của từng card.",data:k("powerDrawW"),domain:[0,"auto"],series:h,valueFormatter:a=>`${Number(a).toFixed(1)} W`,axisFormatter:a=>`${a}W`})]}):null]}):(0,i.jsxs)("div",{className:"flex min-h-[420px] flex-col items-center justify-center px-6 text-center",children:[(0,i.jsx)("div",{className:"flex h-16 w-16 items-center justify-center rounded-2xl bg-violet-500/10 text-violet-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[34px]",children:"hourglass_empty"})}),(0,i.jsx)("h4",{className:"mt-5 font-semibold text-text-main",children:"Chưa c\xf3 dữ liệu lịch sử"}),(0,i.jsx)("p",{className:"mt-2 max-w-md text-sm leading-6 text-text-muted",children:"Collector đ\xe3 được bật v\xe0 sẽ ghi mẫu đầu ti\xean trong v\xf2ng một ph\xfat. Dữ liệu vẫn tiếp tục được thu thập khi kh\xf4ng mở dashboard."})]})]})}function bZ({gpu:a}){let b=bK(a.memoryUsagePercent);return(0,i.jsxs)("div",{className:"overflow-hidden rounded-2xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle bg-gradient-to-r from-emerald-500/8 to-cyan-500/5 px-5 py-4",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,i.jsx)("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-emerald-500/10 text-emerald-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined",children:"memory"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"truncate font-semibold text-text-main",children:["GPU ",a.index," \xb7 ",a.name]}),(0,i.jsxs)("div",{className:"mt-0.5 text-xs text-text-muted",children:["NVIDIA Driver ",a.driverVersion||"—"]})]})]}),(0,i.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-1 text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:"NVIDIA"})]}),(0,i.jsxs)("div",{className:"grid gap-5 p-5 sm:grid-cols-[150px_1fr]",children:[(0,i.jsx)(bN,{value:a.usagePercent,label:"GPU Load",detail:`${a.temperatureC??"—"}\xb0C`,color:"#10b981"}),(0,i.jsxs)("div",{className:"space-y-5",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-2 flex items-center justify-between text-sm",children:[(0,i.jsx)("span",{className:"text-text-muted",children:"VRAM"}),(0,i.jsxs)("span",{className:"font-semibold text-text-main",children:[bL(1048576*(a.memoryUsedMb||0))," /"," ",bL(1048576*(a.memoryTotalMb||0))]})]}),(0,i.jsx)("div",{className:"h-2.5 overflow-hidden rounded-full bg-surface-2",children:(0,i.jsx)("div",{className:"h-full rounded-full bg-emerald-500 transition-all duration-700",style:{width:`${b}%`}})}),(0,i.jsxs)("div",{className:"mt-1.5 text-right text-xs text-text-subtle",children:[b.toFixed(1),"% đ\xe3 d\xf9ng"]})]}),(0,i.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,i.jsxs)("div",{className:"rounded-xl bg-surface-2 p-3",children:[(0,i.jsx)("div",{className:"text-xs text-text-muted",children:"Nhiệt độ"}),(0,i.jsxs)("div",{className:"mt-1 text-lg font-semibold text-text-main",children:[a.temperatureC??"—","\xb0C"]})]}),(0,i.jsxs)("div",{className:"rounded-xl bg-surface-2 p-3",children:[(0,i.jsx)("div",{className:"text-xs text-text-muted",children:"C\xf4ng suất"}),(0,i.jsxs)("div",{className:"mt-1 text-lg font-semibold text-text-main",children:[a.powerDrawW??"—",(0,i.jsxs)("span",{className:"text-xs font-normal text-text-muted",children:[" ","/ ",a.powerLimitW??"—"," W"]})]})]})]})]})]})]})}function b$({open:a,onClose:b,onCreated:c}){let[d,e]=(0,j.useState)(bI),[f,g]=(0,j.useState)(!1),[h,k]=(0,j.useState)(""),l=(a,b)=>e(c=>({...c,[a]:b})),m=async a=>{a.preventDefault(),g(!0),k("");try{let a=await fetch("/api/resource-monitor",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}),e=await a.json().catch(()=>({}));if(!a.ok)throw Error(e.error||"Kh\xf4ng thể th\xeam server");await c(e.server,e.install),b()}catch(a){k(a?.message||"Kh\xf4ng thể th\xeam server")}finally{g(!1)}};return(0,i.jsx)(bG.default,{isOpen:a,onClose:b,title:"Th\xeam Linux server",size:"xl",busy:f,footer:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bE.default,{variant:"ghost",onClick:b,disabled:f,children:"Hủy"}),(0,i.jsx)(bE.default,{onClick:m,loading:f,icon:"rocket_launch",children:"C\xe0i agent & th\xeam server"})]}),children:(0,i.jsxs)("form",{onSubmit:m,className:"space-y-5",children:[(0,i.jsx)("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-4 text-sm text-text-muted",children:(0,i.jsxs)("div",{className:"flex gap-3",children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-primary",children:"auto_fix_high"}),(0,i.jsx)("p",{children:"BlueRouter sẽ SSH v\xe0o m\xe1y, d\xf9ng quyền sudo để c\xe0i Python agent dưới dạng systemd service. Sau lần n\xe0y bạn kh\xf4ng cần thao t\xe1c th\xeam tr\xean Linux."})]})}),(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,i.jsx)(bF.default,{label:"T\xean hiển thị",value:d.name,onChange:a=>l("name",a.target.value),placeholder:"GPU Worker 01",icon:"dns"}),(0,i.jsx)(bF.default,{required:!0,label:"Hostname / IP",value:d.host,onChange:a=>l("host",a.target.value),placeholder:"192.168.1.50",icon:"lan"}),(0,i.jsx)(bF.default,{required:!0,label:"SSH user",value:d.sshUser,onChange:a=>l("sshUser",a.target.value),placeholder:"ubuntu",icon:"person"}),(0,i.jsx)(bF.default,{label:"SSH port",type:"number",value:d.sshPort,onChange:a=>l("sshPort",a.target.value)}),(0,i.jsx)(bF.default,{label:"SSH password",type:"password",value:d.sshPassword,onChange:a=>l("sshPassword",a.target.value),placeholder:"Để trống nếu d\xf9ng SSH key",hint:"Chỉ d\xf9ng trong l\xfac c\xe0i, kh\xf4ng lưu v\xe0o database."}),(0,i.jsx)(bF.default,{label:"Agent port",type:"number",value:d.agentPort,onChange:a=>l("agentPort",a.target.value),hint:"Mặc định 19998; dashboard server phải truy cập được port n\xe0y."})]}),(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:d.useSudo,onChange:a=>l("useSudo",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"User cần sudo để c\xe0i service"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Tắt nếu đăng nhập trực tiếp bằng root."})]})]}),d.useSudo?(0,i.jsx)(bF.default,{label:"Sudo password",type:"password",value:d.sudoPassword,onChange:a=>l("sudoPassword",a.target.value),placeholder:"Mặc định d\xf9ng c\xf9ng SSH password"}):null,h?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:h}):null]})})}function b_({open:a,server:b,onClose:c,onUpdated:d}){let[e,f]=(0,j.useState)({name:b?.name||"",host:b?.host||"",sshPort:String(b?.sshPort||22),sshUser:b?.sshUser||"",sshPassword:"",useSudo:b?.useSudo!==!1,sudoPassword:"",agentPort:String(b?.agentPort||19998),installAgent:!0}),[g,h]=(0,j.useState)(!1),[k,l]=(0,j.useState)(""),m=(a,b)=>f(c=>({...c,[a]:b})),n=async a=>{if(a.preventDefault(),b?.id){h(!0),l("");try{let a=await fetch(`/api/resource-monitor/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,host:e.host,sshPort:e.sshPort,sshUser:e.sshUser,useSudo:e.useSudo,agentPort:e.agentPort})}),f=await a.json().catch(()=>({}));if(!a.ok)throw Error(f.error||"Kh\xf4ng thể lưu server");let g=null;if(e.installAgent){let a=await fetch(`/api/resource-monitor/${b.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sshPassword:e.sshPassword,sudoPassword:e.sudoPassword})}),c=await a.json().catch(()=>({}));g={ok:a.ok&&!1!==c.ok,log:c.log,error:c.error}}await d(f.server,g),c()}catch(a){l(a?.message||"Kh\xf4ng thể cập nhật server")}finally{h(!1)}}};return(0,i.jsx)(bG.default,{isOpen:a,onClose:c,title:"Sửa Linux server",size:"xl",busy:g,footer:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bE.default,{variant:"ghost",onClick:c,disabled:g,children:"Hủy"}),(0,i.jsx)(bE.default,{onClick:n,loading:g,icon:"save",children:"Lưu & c\xe0i lại agent"})]}),children:(0,i.jsxs)("form",{onSubmit:n,className:"space-y-5",children:[(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,i.jsx)(bF.default,{label:"T\xean hiển thị",value:e.name,onChange:a=>m("name",a.target.value),placeholder:"GPU Worker 01",icon:"dns"}),(0,i.jsx)(bF.default,{required:!0,label:"Hostname / IP",value:e.host,onChange:a=>m("host",a.target.value),placeholder:"192.168.1.50",icon:"lan"}),(0,i.jsx)(bF.default,{required:!0,label:"SSH user",value:e.sshUser,onChange:a=>m("sshUser",a.target.value),placeholder:"ubuntu",icon:"person"}),(0,i.jsx)(bF.default,{label:"SSH port",type:"number",value:e.sshPort,onChange:a=>m("sshPort",a.target.value)}),(0,i.jsx)(bF.default,{label:"SSH password",type:"password",value:e.sshPassword,onChange:a=>m("sshPassword",a.target.value),placeholder:"Nhập lại nếu trước đ\xf3 sai",hint:"Chỉ d\xf9ng để c\xe0i lại agent, kh\xf4ng lưu v\xe0o database."}),(0,i.jsx)(bF.default,{label:"Agent port",type:"number",value:e.agentPort,onChange:a=>m("agentPort",a.target.value)})]}),(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:e.useSudo,onChange:a=>m("useSudo",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"User cần sudo để c\xe0i service"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Tắt nếu đăng nhập trực tiếp bằng root."})]})]}),e.useSudo?(0,i.jsx)(bF.default,{label:"Sudo password",type:"password",value:e.sudoPassword,onChange:a=>m("sudoPassword",a.target.value),placeholder:"Mặc định d\xf9ng c\xf9ng SSH password"}):null,(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:e.installAgent,onChange:a=>m("installAgent",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"C\xe0i lại agent sau khi lưu"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Bật mục n\xe0y khi cần nhập lại account/password SSH hoặc đổi port."})]})]}),k?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:k}):null]})})}let b0={normal:{variant:"success",label:"B\xecnh thường"},warning:{variant:"warning",label:"Cảnh b\xe1o"},critical:{variant:"error",label:"Qu\xe1 tải"},unknown:{variant:"default",label:"Kh\xf4ng r\xf5"}};function b1({modelOptions:a,selectedModel:b,onSelectModel:c,analysis:d,loading:e,error:f,onAnalyze:g,standby:h}){return(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsx)("div",{className:"flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5",children:(0,i.jsxs)("div",{className:"flex items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"neurology"})}),(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:"Đ\xe1nh gi\xe1 AI t\xecnh trạng server"}),(0,i.jsx)("p",{className:"mt-0.5 text-xs text-text-muted",children:"Ph\xe2n t\xedch giờ l\xe0m việc h\xf4m nay (8:00 - 18:00) tr\xean to\xe0n bộ Linux server."})]})]})}),(0,i.jsxs)("div",{className:"space-y-5 p-6",children:[h?(0,i.jsx)("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-4 py-3 text-sm text-amber-700 dark:text-amber-300",children:"Standby mode: kết quả ph\xe2n t\xedch được đồng bộ tự động từ Master. Node n\xe0y kh\xf4ng tự chạy ph\xe2n t\xedch AI."}):null,(0,i.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,i.jsx)(bH.default,{className:"min-w-[280px] flex-1",label:"AI model d\xf9ng để ph\xe2n t\xedch",options:a,value:b,onChange:a=>c(a.target.value),placeholder:a.length?"Chọn model":"Chưa c\xf3 kết nối AI n\xe0o đang hoạt động",disabled:!a.length||h}),(0,i.jsx)(bE.default,{icon:"auto_awesome",onClick:g,loading:e,disabled:!b||h,children:"Ph\xe2n t\xedch lại"})]}),f?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:f}):null,d?(0,i.jsxs)("div",{className:"space-y-5",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2 text-xs text-text-muted",children:[(0,i.jsxs)("span",{children:["Model: ",(0,i.jsx)("span",{className:"font-semibold",children:d.modelLabel})]}),(0,i.jsxs)("span",{children:["Cập nhật l\xfac ",bM(d.generatedAt)]})]}),(0,i.jsx)("div",{className:"whitespace-pre-wrap rounded-2xl border border-border bg-surface-2/40 p-5 text-sm leading-6 text-text-main",children:d.summary}),d.servers?.length?(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-3 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-primary"}),(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:"Trạng th\xe1i từng server"})]}),(0,i.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:d.servers.map(a=>{let b=b0[a.status]||b0.unknown;return(0,i.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface px-4 py-3",children:[(0,i.jsx)("span",{className:"truncate text-sm font-medium text-text-main",children:a.name}),(0,i.jsx)(bD.default,{variant:b.variant,dot:!0,children:b.label})]},a.serverId)})})]}):null]}):e?null:(0,i.jsx)("div",{className:"rounded-2xl border border-dashed border-border bg-surface-2/40 py-10 text-center text-sm text-text-muted",children:'Chưa c\xf3 ph\xe2n t\xedch n\xe0o — bấm "Ph\xe2n t\xedch lại" để bắt đầu.'})]})]})}function b2(){let a,b,c,d,[e,f]=(0,j.useState)("realtime"),[g,h]=(0,j.useState)([]),[k,l]=(0,j.useState)(""),[m,n]=(0,j.useState)({}),[o,p]=(0,j.useState)(!0),[q,r]=(0,j.useState)(!1),[s,t]=(0,j.useState)(!1),[u,v]=(0,j.useState)(!1),[w,x]=(0,j.useState)(null),[y,z]=(0,j.useState)(!1),[A,B]=(0,j.useState)(null),[C,D]=(0,j.useState)("24h"),[E,F]=(0,j.useState)([]),[G,H]=(0,j.useState)(null),[I,J]=(0,j.useState)(!1),[K,L]=(0,j.useState)(""),[M,N]=(0,j.useState)(!1),[O,P]=(0,j.useState)([]),[Q,R]=(0,j.useState)(""),[S,T]=(0,j.useState)(null),[U,V]=(0,j.useState)(!1),[W,X]=(0,j.useState)(""),Y=(0,j.useRef)(0),Z=(0,j.useCallback)(async({quiet:a=!1}={})=>{a||r(!0);try{let a=await fetch("/api/resource-monitor",{cache:"no-store"}),b=await a.json().catch(()=>({}));if(!a.ok)throw Error(b.error||"Kh\xf4ng tải được server");let c=b.servers||[];N(!0===b.standby),h(c),l(a=>a&&c.some(b=>b.id===a)?a:c[0]?.id||""),n(a=>{let b={...a};return c.forEach(a=>{if(!bJ(a))return;let c=a.lastStatus,d={time:c.updatedAt||new Date().toISOString(),cpu:c.cpu?.usagePercent||0,memory:c.memory?.usagePercent||0,disk:c.disks?.[0]?.usagePercent||0,gpu:c.gpus?.length?Math.max(...c.gpus.map(a=>a.usagePercent||0)):0,gpus:(c.gpus||[]).map(a=>({id:bT(a),usagePercent:bK(a.usagePercent)}))},e=b[a.id]||[];b[a.id]=e.at(-1)?.time===d.time?e:[...e,d].slice(-60)}),b})}catch(b){a||B({type:"error",text:b?.message||"Kh\xf4ng tải được server"})}finally{p(!1),a||r(!1)}},[]),$=(0,j.useCallback)(async()=>{if(!k)return;let a=++Y.current;J(!0),L("");try{let b=await fetch(`/api/resource-monitor/history?serverId=${encodeURIComponent(k)}&period=${encodeURIComponent(C)}`,{cache:"no-store"}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"Kh\xf4ng tải được lịch sử t\xe0i nguy\xean");if(Y.current!==a)return;F(c.points||[]),H(c)}catch(b){if(Y.current!==a)return;L(b?.message||"Kh\xf4ng tải được lịch sử t\xe0i nguy\xean"),F([])}finally{Y.current===a&&J(!1)}},[C,k]),_=(0,j.useCallback)(a=>{R(a),fetch("/api/resource-monitor/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a})}).catch(()=>{})},[]),aa=(0,j.useCallback)(async()=>{if(!Q)return;let a=Q.indexOf("::"),b=Q.slice(0,a),c=Q.slice(a+2);V(!0),X("");try{let a=await fetch("/api/resource-monitor/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:b,model:c})}),d=await a.json().catch(()=>({}));if(!a.ok)throw Error(d.error||"Kh\xf4ng thể ph\xe2n t\xedch t\xe0i nguy\xean");T(d.analysis)}catch(a){X(a?.message||"Kh\xf4ng thể ph\xe2n t\xedch t\xe0i nguy\xean")}finally{V(!1)}},[Q]),ab=(0,j.useMemo)(()=>g.find(a=>a.id===k)||null,[g,k]),ac=ab?.lastStatus,ad=bJ(ab),ae=ac?.disks?.[0],af=m[k]||[],ag=async()=>{if(w){z(!0);try{if(!(await fetch(`/api/resource-monitor/${w.id}`,{method:"DELETE"})).ok)throw Error("Kh\xf4ng thể x\xf3a server");x(null),await Z()}catch(a){B({type:"error",text:a.message})}finally{z(!1)}}};return o?(0,i.jsxs)("div",{className:"flex min-h-[50vh] items-center justify-center text-text-muted",children:[(0,i.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Đang tải t\xe0i nguy\xean server..."]}):(0,i.jsxs)("div",{className:"space-y-6",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Linux Resource Monitor"}),(0,i.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Theo d\xf5i realtime CPU, RAM, disk, network v\xe0 to\xe0n bộ NVIDIA GPU."})]}),(0,i.jsxs)("div",{className:"flex gap-2",children:[(0,i.jsx)(bE.default,{variant:"secondary",icon:"refresh",onClick:()=>"history"===e?$():Z(),loading:"history"===e?I:q,children:"L\xe0m mới"}),(0,i.jsx)(bE.default,{icon:"add",onClick:()=>t(!0),disabled:M,children:"Th\xeam server"})]})]}),M?(0,i.jsx)("div",{className:"rounded-xl border border-blue-500/30 bg-blue-500/10 px-4 py-3 text-sm text-blue-700 dark:text-blue-300",children:"Standby mode: Resource Monitor chỉ hiển thị snapshot từ Master. Node n\xe0y kh\xf4ng polling agent v\xe0 kh\xf4ng cho sửa danh s\xe1ch server."}):null,(0,i.jsxs)("div",{className:"flex w-fit rounded-xl border border-border bg-surface p-1 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("button",{type:"button",onClick:()=>f("realtime"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"realtime"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"monitor_heart"}),"Realtime Monitor"]}),(0,i.jsxs)("button",{type:"button",onClick:()=>f("history"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"history"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"query_stats"}),"History"]}),(0,i.jsxs)("button",{type:"button",onClick:()=>f("ai"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"ai"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"neurology"}),"Đ\xe1nh gi\xe1 AI"]})]}),A?(0,i.jsxs)("div",{className:`flex items-center justify-between rounded-xl border px-4 py-3 text-sm ${"error"===A.type?"border-red-500/20 bg-red-500/10 text-red-600 dark:text-red-300":"border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300"}`,children:[(0,i.jsx)("span",{children:A.text}),(0,i.jsx)("button",{onClick:()=>B(null),children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}):null,g.length?(0,i.jsxs)(i.Fragment,{children:["ai"!==e?(0,i.jsx)(bP,{servers:g,selectedId:k,onSelect:l}):null,"ai"===e?(0,i.jsx)(b1,{modelOptions:O,selectedModel:Q,onSelectModel:_,analysis:S,loading:U,error:W,onAnalyze:aa,standby:M}):ab?"realtime"===e?(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-4 border-b border-border px-6 py-5",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"dns"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)(bO,{online:ad}),(0,i.jsx)("h3",{className:"truncate text-lg font-semibold text-text-main",children:ab.name})]}),(0,i.jsxs)("div",{className:"mt-1 flex flex-wrap gap-x-3 text-xs text-text-muted",children:[(0,i.jsx)("span",{className:"font-mono",children:ab.host}),ac?.os?(0,i.jsx)("span",{children:ac.os}):null,ac?.uptimeSeconds?(0,i.jsxs)("span",{children:["Uptime ",(b=Math.floor((a=Number(ac.uptimeSeconds)||0)/86400),c=Math.floor(a%86400/3600),d=Math.floor(a%3600/60),b?`${b} ng\xe0y ${c} giờ`:c?`${c} giờ ${d} ph\xfat`:`${d} ph\xfat`)]}):null]})]})]}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)("span",{className:`rounded-full px-3 py-1.5 text-xs font-semibold ${ad?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-red-500/10 text-red-600 dark:text-red-300"}`,children:ad?"Online":"Offline"}),M?null:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("button",{type:"button",onClick:()=>v(!0),className:"rounded-xl p-2 text-text-muted hover:bg-primary/10 hover:text-primary",title:"Sửa server v\xe0 c\xe0i lại agent",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"edit"})}),(0,i.jsx)("button",{type:"button",onClick:()=>x(ab),className:"rounded-xl p-2 text-text-muted hover:bg-red-500/10 hover:text-red-500",title:"X\xf3a khỏi dashboard",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"delete"})})]})]})]}),ad?null:(0,i.jsx)("div",{className:"m-6 rounded-2xl border border-amber-500/20 bg-amber-500/8 p-5",children:(0,i.jsxs)("div",{className:"flex gap-3",children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-amber-500",children:"cloud_off"}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"font-semibold text-text-main",children:"Kh\xf4ng kết nối được agent"}),(0,i.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:ab.lastError||"Agent chưa gửi dữ liệu. Kiểm tra firewall v\xe0 agent port."}),ab.lastInstallLog?(0,i.jsxs)("details",{className:"mt-3",children:[(0,i.jsx)("summary",{className:"cursor-pointer text-xs font-semibold text-amber-600",children:"Xem log c\xe0i đặt"}),(0,i.jsx)("pre",{className:"mt-2 max-h-48 overflow-auto whitespace-pre-wrap rounded-xl bg-black/80 p-3 text-xs text-white",children:ab.lastInstallLog})]}):null]})]})}),ac?(0,i.jsxs)("div",{className:"space-y-7 p-6",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-5 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-primary"}),(0,i.jsx)("h3",{className:"font-semibold text-text-main",children:"Tổng quan t\xe0i nguy\xean"}),(0,i.jsxs)("span",{className:"ml-auto text-xs text-text-muted",children:["Cập nhật ",bM(ab.lastStatusAt)]})]}),(0,i.jsxs)("div",{className:"grid gap-5 sm:grid-cols-2 xl:grid-cols-4",children:[(0,i.jsx)(bN,{value:ac.cpu?.usagePercent,label:"CPU",detail:`${ac.cpu?.cores||0} cores \xb7 Load ${ac.cpu?.load1??0}`,icon:"developer_board"}),(0,i.jsx)(bN,{value:ac.memory?.usagePercent,label:"RAM",detail:`${bL(ac.memory?.usedBytes)} / ${bL(ac.memory?.totalBytes)}`,icon:"memory_alt"}),(0,i.jsx)(bN,{value:ae?.usagePercent,label:"Disk /",detail:`${bL(ae?.usedBytes)} / ${bL(ae?.totalBytes)}`,icon:"hard_drive"}),(0,i.jsx)(bN,{value:ac.gpus?.length?Math.max(...ac.gpus.map(a=>a.usagePercent||0)):0,label:ac.gpus?.length?`${ac.gpus.length} NVIDIA GPU`:"GPU",detail:ac.gpus?.length?`${ac.gpus.length} card được ph\xe1t hiện`:"Kh\xf4ng c\xf3 NVIDIA GPU",color:"#10b981",icon:"memory"})]})]}),(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:[(0,i.jsx)(bQ,{icon:"developer_board",label:"CPU",value:ac.cpu?.model||`${ac.cpu?.cores||0} cores`,sublabel:`Load average ${ac.cpu?.load1??0} / ${ac.cpu?.load5??0} / ${ac.cpu?.load15??0}`}),(0,i.jsx)(bQ,{icon:"swap_vert",label:"Network realtime",value:`↓ ${bL(ac.network?.rxBytesPerSecond)}/s`,sublabel:`↑ ${bL(ac.network?.txBytesPerSecond)}/s`,colorClass:"text-cyan-500"}),(0,i.jsx)(bQ,{icon:"hard_drive",label:"Disk root",value:`${bL(ae?.freeBytes)} trống`,sublabel:`${ae?.device||"root"} \xb7 ${ae?.filesystem||"filesystem"}`,colorClass:"text-violet-500"}),(0,i.jsx)(bQ,{icon:"memory",label:"Swap",value:bL(ac.memory?.swapUsedBytes),sublabel:`Tổng ${bL(ac.memory?.swapTotalBytes)}`,colorClass:"text-amber-500"})]}),(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bR,{data:af,dataKey:"cpu",label:"CPU usage",color:"#3b9dec"}),(0,i.jsx)(bR,{data:af,dataKey:"memory",label:"RAM usage",color:"#8b5cf6"})]}),(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-4 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-emerald-500"}),(0,i.jsxs)("h3",{className:"font-semibold text-text-main",children:["NVIDIA GPU (",ac.gpus?.length||0,")"]})]}),ac.gpus?.length?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bU,{data:af,gpus:ac.gpus}),(0,i.jsx)("div",{className:"grid gap-5 xl:grid-cols-2",children:ac.gpus.map(a=>(0,i.jsx)(bZ,{gpu:a},a.uuid||a.index))})]}):(0,i.jsxs)("div",{className:"rounded-2xl border border-dashed border-border bg-surface-2/40 py-10 text-center text-sm text-text-muted",children:["Kh\xf4ng ph\xe1t hiện NVIDIA GPU hoặc"," ",(0,i.jsx)("span",{className:"font-mono",children:"nvidia-smi"})," chưa sẵn s\xe0ng."]})]})]}):null]}):(0,i.jsx)(bY,{server:ab,data:E,meta:G,period:C,onPeriodChange:D,loading:I,error:K}):null]}):(0,i.jsxs)("div",{className:"flex min-h-[460px] flex-col items-center justify-center rounded-3xl border border-dashed border-border bg-surface px-6 text-center",children:[(0,i.jsx)("div",{className:"flex h-20 w-20 items-center justify-center rounded-3xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[42px]",children:"monitor_heart"})}),(0,i.jsx)("h3",{className:"mt-6 text-xl font-semibold text-text-main",children:"Chưa c\xf3 Linux server"}),(0,i.jsx)("p",{className:"mt-2 max-w-lg text-sm leading-6 text-text-muted",children:"Th\xeam server bằng t\xe0i khoản SSH c\xf3 quyền sudo. BlueRouter sẽ tự c\xe0i agent systemd v\xe0 bắt đầu hiển thị t\xe0i nguy\xean ngay tại đ\xe2y."}),M?null:(0,i.jsx)(bE.default,{className:"mt-6",icon:"add",onClick:()=>t(!0),children:"Th\xeam server đầu ti\xean"})]}),(0,i.jsx)(b$,{open:s&&!M,onClose:()=>t(!1),onCreated:async(a,b)=>{b&&!b.ok&&B({type:"warning",text:"Đ\xe3 lưu server nhưng c\xe0i agent chưa th\xe0nh c\xf4ng. Mở server để xem log."}),await Z()}}),(0,i.jsx)(b_,{open:u&&!M,server:ab,onClose:()=>v(!1),onUpdated:async(a,b)=>{b&&!b.ok&&B({type:"warning",text:"Đ\xe3 lưu server nhưng c\xe0i lại agent chưa th\xe0nh c\xf4ng. Mở server để xem log."}),await Z()}}),(0,i.jsx)(bG.ConfirmModal,{isOpen:!!w,onClose:()=>x(null),onConfirm:ag,loading:y,variant:"danger",title:"X\xf3a server khỏi dashboard?",confirmText:"X\xf3a server",cancelText:"Hủy",message:"Server sẽ ngừng được theo d\xf5i. Agent systemd tr\xean Linux kh\xf4ng bị gỡ tự động."})]})}},11793:(a,b,c)=>{Promise.resolve().then(c.bind(c,18548))},17891:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/get-segment-param")},18548:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(67484);function f({children:a}){return(0,e.useRef)([]),(0,e.useRef)(new Map),(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("style",{children:`
72
+ `,h="";return h=b?.type==="error"?"border-red-500/30 bg-red-500/95 text-white":b?.type==="success"?"border-emerald-500/30 bg-emerald-600/95 text-white":"border-border bg-surface/95 text-text-main",e().createElement(e().Fragment,null,e().createElement("style",null,g),a,b?e().createElement("div",{className:`fixed bottom-5 right-5 z-[80] flex items-center gap-2 rounded-xl border px-3.5 py-2.5 text-xs font-semibold shadow-lg backdrop-blur ${h}`,role:"error"===b.type?"alert":"status"},"saving"===b.type?e().createElement("span",{className:"material-symbols-outlined animate-spin text-[17px]"},"progress_activity"):e().createElement("span",{className:"material-symbols-outlined text-[17px]"},"error"===b.type?"error":"check_circle"),e().createElement("span",null,b.text)):null)}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11674:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>b2});var d,e,f,g,h,i=c(48249),j=c(67484),k=c(80322),l=c(21621),m=c(28946),n=c(22393),o=c(54206),p=c(63691),q=c(53707),r=c(53935),s=c(75556),t=["axis"],u=(0,j.forwardRef)((a,b)=>j.createElement(s.P,{chartName:"LineChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:t,tooltipPayloadSearcher:r.uN,categoricalChartProps:a,ref:b})),v=c(74429),w=c(73919),x=c(99314),y=c(54702);let z=Math.cos,A=Math.sin,B=Math.sqrt,C=Math.PI,D=2*C,E={draw(a,b){let c=B(b/C);a.moveTo(c,0),a.arc(0,0,c,0,D)}},F=B(1/3),G=2*F,H=A(C/10)/A(7*C/10),I=A(D/10)*H,J=-z(D/10)*H,K=B(3),L=B(3)/2,M=1/B(12),N=(M/2+1)*3;var O=c(99608),P=c(85922);B(3),B(3);var Q=c(1791),R=c(50149),S=["type","size","sizeType"];function T(){return(T=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function U(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function V(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?U(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):U(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var W={symbolCircle:E,symbolCross:{draw(a,b){let c=B(b/5)/2;a.moveTo(-3*c,-c),a.lineTo(-c,-c),a.lineTo(-c,-3*c),a.lineTo(c,-3*c),a.lineTo(c,-c),a.lineTo(3*c,-c),a.lineTo(3*c,c),a.lineTo(c,c),a.lineTo(c,3*c),a.lineTo(-c,3*c),a.lineTo(-c,c),a.lineTo(-3*c,c),a.closePath()}},symbolDiamond:{draw(a,b){let c=B(b/G),d=c*F;a.moveTo(0,-c),a.lineTo(d,0),a.lineTo(0,c),a.lineTo(-d,0),a.closePath()}},symbolSquare:{draw(a,b){let c=B(b),d=-c/2;a.rect(d,d,c,c)}},symbolStar:{draw(a,b){let c=B(.8908130915292852*b),d=I*c,e=J*c;a.moveTo(0,-c),a.lineTo(d,e);for(let b=1;b<5;++b){let f=D*b/5,g=z(f),h=A(f);a.lineTo(h*c,-g*c),a.lineTo(g*d-h*e,h*d+g*e)}a.closePath()}},symbolTriangle:{draw(a,b){let c=-B(b/(3*K));a.moveTo(0,2*c),a.lineTo(-K*c,-c),a.lineTo(K*c,-c),a.closePath()}},symbolWye:{draw(a,b){let c=B(b/N),d=c/2,e=c*M,f=c*M+c,g=-d;a.moveTo(d,e),a.lineTo(d,f),a.lineTo(g,f),a.lineTo(-.5*d-L*e,L*d+-.5*e),a.lineTo(-.5*d-L*f,L*d+-.5*f),a.lineTo(-.5*g-L*f,L*g+-.5*f),a.lineTo(-.5*d+L*e,-.5*e-L*d),a.lineTo(-.5*d+L*f,-.5*f-L*d),a.lineTo(-.5*g+L*f,-.5*f-L*g),a.closePath()}}},X=Math.PI/180,Y=a=>{var{type:b="circle",size:c=64,sizeType:d="area"}=a,e=V(V({},function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,S)),{},{type:b,size:c,sizeType:d}),f="circle";"string"==typeof b&&(f=b);var{className:g,cx:h,cy:i}=e,k=(0,R.a)(e);return(0,Q.Et)(h)&&(0,Q.Et)(i)&&(0,Q.Et)(c)?j.createElement("path",T({},k,{className:(0,x.$)("recharts-symbols",g),transform:"translate(".concat(h,", ").concat(i,")"),d:(()=>{var a,b=(a=f,W["symbol".concat((0,Q.Zb)(a))]||E),e=(function(a,b){let c=null,d=(0,P.i)(e);function e(){let e;if(c||(c=e=d()),a.apply(this,arguments).draw(c,+b.apply(this,arguments)),e)return c=null,e+""||null}return a="function"==typeof a?a:(0,O.A)(a||E),b="function"==typeof b?b:(0,O.A)(void 0===b?64:+b),e.type=function(b){return arguments.length?(a="function"==typeof b?b:(0,O.A)(b),e):a},e.size=function(a){return arguments.length?(b="function"==typeof a?a:(0,O.A)(+a),e):b},e.context=function(a){return arguments.length?(c=null==a?null:a,e):c},e})().type(b).size(((a,b,c)=>{if("area"===b)return a;switch(c){case"cross":return 5*a*a/9;case"diamond":return .5*a*a/Math.sqrt(3);case"square":return a*a;case"star":var d=18*X;return 1.25*a*a*(Math.tan(d)-Math.tan(2*d)*Math.tan(d)**2);case"triangle":return Math.sqrt(3)*a*a/4;case"wye":return(21-10*Math.sqrt(3))*a*a/8;default:return Math.PI*a*a/4}})(c,d,f))();if(null!==e)return e})()})):null};Y.registerSymbol=(a,b)=>{W["symbol".concat((0,Q.Zb)(a))]=b};var Z=c(64635),$=c(69599);function _(){return(_=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function aa(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ab(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?aa(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):aa(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}var ac={align:"center",iconSize:14,inactiveColor:"#ccc",layout:"horizontal",verticalAlign:"middle",labelStyle:{}};function ad(a){var{data:b,iconType:c,inactiveColor:d}=a,e=32/6,f=32/3,g=b.inactive?d:b.color,h=null!=c?c:b.type;if("none"===h)return null;if("plainline"===h)return j.createElement("line",{strokeWidth:4,fill:"none",stroke:g,strokeDasharray:function(a){if("object"==typeof a&&null!==a&&"strokeDasharray"in a)return String(a.strokeDasharray)}(b.payload),x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===h)return j.createElement("path",{strokeWidth:4,fill:"none",stroke:g,d:"M0,".concat(16,"h").concat(f,"\n A").concat(e,",").concat(e,",0,1,1,").concat(2*f,",").concat(16,"\n H").concat(32,"M").concat(2*f,",").concat(16,"\n A").concat(e,",").concat(e,",0,1,1,").concat(f,",").concat(16),className:"recharts-legend-icon"});if("rect"===h)return j.createElement("path",{stroke:"none",fill:g,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(j.isValidElement(b.legendIcon)){var i=ab({},b);return delete i.legendIcon,j.cloneElement(b.legendIcon,i)}return j.createElement(Y,{fill:g,cx:16,cy:16,size:32,sizeType:"diameter",type:h})}function ae(a){var{payload:b,iconSize:c,layout:d,formatter:e,inactiveColor:f,iconType:g,labelStyle:h}=a,i={x:0,y:0,width:32,height:32},k={display:"horizontal"===d?"inline-block":"block",marginRight:10},l={display:"inline-block",verticalAlign:"middle",marginRight:4};return b.map((b,d)=>{var m=b.formatter||e,n=(0,x.$)({"recharts-legend-item":!0,["legend-item-".concat(d)]:!0,inactive:b.inactive});if("none"===b.type)return null;var o="object"==typeof h?ab({},h):{};o.color=b.inactive?f:o.color||b.color;var p=m?m(b.value,b,d):b.value;return j.createElement("li",_({className:n,style:k,key:"legend-item-".concat(d)},(0,Z.XC)(a,b,d)),j.createElement(y.u,{width:c,height:c,viewBox:i,style:l,"aria-label":"".concat(b.value," legend icon")},j.createElement(ad,{data:b,iconType:g,inactiveColor:f})),j.createElement("span",{className:"recharts-legend-item-text",style:o},p))})}var af=a=>{var b=(0,$.e)(a,ac),{payload:c,layout:d,align:e}=b;return c&&c.length?j.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===d?e:"left"}},j.createElement(ae,_({},b,{payload:c}))):null},ag=c(60226),ah=c(32671),ai=c(7795),aj=c(12450),ak=c(55644);c(46154);var al=c(66762),am=["contextPayload"];function an(){return(an=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function ao(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function ap(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?ao(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):ao(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function aq(a){return a.value}function ar(a){var{contextPayload:b}=a,c=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,am),d=(0,ag.s)(b,a.payloadUniqBy,aq),e=ap(ap({},c),{},{payload:d});return j.isValidElement(a.content)?j.cloneElement(a.content,e):"function"==typeof a.content?j.createElement(a.content,e):j.createElement(af,e)}function as(a){return(0,ah.j)(),null}function at(a){return(0,ah.j)(),null}var au={align:"center",iconSize:14,inactiveColor:"#ccc",itemSorter:"value",layout:"horizontal",verticalAlign:"bottom"},av=j.memo(function(a){var b,c=(0,$.e)(a,au),d=(0,ah.G)(ai.g0),e=(0,w.M)(),f=(0,ak.Kp)(),{width:g,height:h,wrapperStyle:i,portal:k}=c,[l,m]=(0,aj.V)([d]),n=(0,ak.yi)(),o=(0,ak.rY)();if(null==n||null==o)return null;var p=n-((null==f?void 0:f.left)||0)-((null==f?void 0:f.right)||0),q=(b=c.layout,"vertical"===b&&null!=h?{height:h}:"horizontal"===b?{width:g||p}:null),r=k?i:ap(ap({position:"absolute",width:(null==q?void 0:q.width)||g||"auto",height:(null==q?void 0:q.height)||h||"auto"},function(a,b,c,d,e,f){var g,h,{layout:i,align:j,verticalAlign:k}=b;return a&&(void 0!==a.left&&null!==a.left||void 0!==a.right&&null!==a.right)||(g="center"===j&&"vertical"===i?{left:((d||0)-f.width)/2}:"right"===j?{right:c&&c.right||0}:{left:c&&c.left||0}),a&&(void 0!==a.top&&null!==a.top||void 0!==a.bottom&&null!==a.bottom)||(h="middle"===k?{top:((e||0)-f.height)/2}:"bottom"===k?{bottom:c&&c.bottom||0}:{top:c&&c.top||0}),ap(ap({},g),h)}(i,c,f,n,o,l)),i),s=null!=k?k:e;if(null==s||null==d)return null;var t=j.createElement("div",{className:"recharts-legend-wrapper",style:r,ref:m},j.createElement(as,{layout:c.layout,align:c.align,verticalAlign:c.verticalAlign,itemSorter:c.itemSorter}),!k&&j.createElement(at,{width:l.width,height:l.height}),j.createElement(ar,an({},c,q,{margin:f,chartWidth:n,chartHeight:o,contextPayload:d})));return(0,v.createPortal)(t,s)},al.P);av.displayName="Legend";var aw=c(40948),ax=c(47459),ay=c(83521),az=c(21480),aA=c(16216),aB=c(36136),aC=c(443),aD=["children"],aE=(0,j.createContext)({data:[],xAxisId:"xAxis-0",yAxisId:"yAxis-0",dataPointFormatter:()=>({x:0,y:0,value:0}),errorBarOffset:0});function aF(a){var{children:b}=a,c=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,aD);return j.createElement(aE.Provider,{value:c},b)}var aG=c(10059),aH=c(70383),aI=c(32362),aJ=c(25644),aK=c(44417),aL=(a,b,c,d)=>(0,aK.Gx)(a,"xAxis",b,d),aM=(a,b,c,d)=>(0,aK.CR)(a,"xAxis",b,d),aN=(a,b,c,d)=>(0,aK.Gx)(a,"yAxis",c,d),aO=(a,b,c,d)=>(0,aK.CR)(a,"yAxis",c,d),aP=(0,aI.Mz)([ak.fz,aL,aN,aM,aO],(a,b,c,d,e)=>(0,aA._L)(a,"xAxis")?(0,aA.Hj)(b,d,!1):(0,aA.Hj)(c,e,!1));function aQ(a){return"line"===a.type}var aR=(0,aI.Mz)([aK.ld,(a,b,c,d,e)=>e],(a,b)=>a.filter(aQ).find(a=>a.id===b)),aS=(0,aI.Mz)([ak.fz,aL,aN,aM,aO,aR,aP,aJ.k$],(a,b,c,d,e,f,g,h)=>{var i,{chartData:j,dataStartIndex:k,dataEndIndex:l}=h;if(null!=f&&null!=b&&null!=c&&null!=d&&null!=e&&0!==d.length&&0!==e.length&&null!=g&&("horizontal"===a||"vertical"===a)){var{dataKey:m,data:n}=f;if(null!=(i=null!=n&&n.length>0?n:null==j?void 0:j.slice(k,l+1)))return function(a){var{layout:b,xAxis:c,yAxis:d,xAxisTicks:e,yAxisTicks:f,dataKey:g,bandSize:h,displayedData:i}=a;return i.map((a,i)=>{var j=(0,aA.kr)(a,g);if("horizontal"===b){var k=(0,aA.nb)({axis:c,ticks:e,bandSize:h,entry:a,index:i}),l=(0,Q.uy)(j)?null:d.scale.map(j);return{x:k,y:null!=l?l:null,value:j,payload:a}}var m=(0,Q.uy)(j)?null:c.scale.map(j),n=(0,aA.nb)({axis:d,ticks:f,bandSize:h,entry:a,index:i});return null==m||null==n?null:{x:m,y:n,value:j,payload:a}}).filter(Boolean)}({layout:a,xAxis:b,yAxis:c,xAxisTicks:d,yAxisTicks:e,dataKey:m,bandSize:g,displayedData:i})}}),aT=c(82118),aU=c(8418),aV=c(30069),aW=c(34183),aX=c(93021),aY=c(70719),aZ=c(81298),a$=c(1432),a_=c(7725),a0=c.n(a_),a1=c(12306),a2=c(18334),a3=c(59798);function a4(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function a5(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?a4(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):a4(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function a6(){return(a6=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function a7(a,b){return b||(b=a.slice(0)),Object.freeze(Object.defineProperties(a,{raw:{value:Object.freeze(b)}}))}var a8=(a,b,c,i,j)=>{var k=c-i;return(0,a3.Y)(d||(d=a7(["M ",",",""])),a,b)+(0,a3.Y)(e||(e=a7(["L ",",",""])),a+c,b)+(0,a3.Y)(f||(f=a7(["L ",",",""])),a+c-k/2,b+j)+(0,a3.Y)(g||(g=a7(["L ",",",""])),a+c-k/2-i,b+j)+(0,a3.Y)(h||(h=a7(["L ",","," Z"])),a,b)},a9={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},ba=a=>{var b=(0,$.e)(a,a9),{x:c,y:d,upperWidth:e,lowerWidth:f,height:g,className:h}=b,{animationEasing:i,animationDuration:k,animationBegin:l,isUpdateAnimationActive:m}=b,n=(0,j.useRef)(null),[o,p]=(0,j.useState)(-1),q=(0,j.useRef)(e),r=(0,j.useRef)(f),s=(0,j.useRef)(g),t=(0,j.useRef)(c),u=(0,j.useRef)(d),v=(0,aU.n)(a,"trapezoid-");if((0,j.useEffect)(()=>{if(n.current&&n.current.getTotalLength)try{var a=n.current.getTotalLength();a&&p(a)}catch(a){}},[]),c!==+c||d!==+d||e!==+e||f!==+f||g!==+g||0===e&&0===f||0===g)return null;var w=(0,x.$)("recharts-trapezoid",h);if(!m)return j.createElement("g",null,j.createElement("path",a6({},(0,R.a)(b),{className:w,d:a8(c,d,e,f,g)})));var y=q.current,z=r.current,A=s.current,B=t.current,C=u.current,D="0px ".concat(-1===o?1:o,"px"),E="".concat(o,"px ").concat(o,"px"),F=(0,a2.dl)(["strokeDasharray"],k,i);return j.createElement(aZ.J,{animationId:v,key:v,canBegin:o>0,duration:k,easing:i,isActive:m,begin:l},a=>{var h=(0,Q.GW)(y,e,a),i=(0,Q.GW)(z,f,a),k=(0,Q.GW)(A,g,a),l=(0,Q.GW)(B,c,a),m=(0,Q.GW)(C,d,a);n.current&&(q.current=h,r.current=i,s.current=k,t.current=l,u.current=m);var o=a>0?{transition:F,strokeDasharray:E}:{strokeDasharray:D};return j.createElement("path",a6({},(0,R.a)(b),{className:w,d:a8(l,m,h,i,k),ref:n,style:a5(a5({},o),b.style)}))})},bb=c(82317),bc=c(7548),bd=["option","shapeType","activeClassName","inActiveClassName"];function be(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function bf(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?be(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):be(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function bg(a){var{shapeType:b,elementProps:c}=a;switch(b){case"rectangle":return j.createElement(a1.M,c);case"trapezoid":return j.createElement(ba,c);case"sector":return j.createElement(bb.h,c);case"symbols":if("symbols"===b)return j.createElement(Y,c);break;case"curve":return j.createElement(bc.Ip,c);default:return null}}function bh(a){var b,{option:c,shapeType:d,activeClassName:e="recharts-active-shape",inActiveClassName:f="recharts-shape"}=a,g=function(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}(a,bd);if((0,j.isValidElement)(c))b=(0,j.cloneElement)(c,bf(bf({},g),(0,j.isValidElement)(c)?c.props:c));else if("function"==typeof c)b=c(g,g.index);else if(a0()(c)&&"boolean"!=typeof c){var h=bf(bf({},g),c);b=j.createElement(bg,{shapeType:d,elementProps:h})}else b=j.createElement(bg,{shapeType:d,elementProps:g});return g.isActive?j.createElement(aw.W,{className:e},b):j.createElement(aw.W,{className:f},b)}var bi=c(17947),bj=c(6859),bk=["id"],bl=["type","layout","connectNulls","needClip","shape"],bm=["activeDot","animateNewValues","animationBegin","animationDuration","animationEasing","connectNulls","dot","hide","isAnimationActive","label","legendType","xAxisId","yAxisId","id"];function bn(){return(bn=Object.assign?Object.assign.bind():function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)({}).hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a}).apply(null,arguments)}function bo(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function bp(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?bo(Object(c),!0).forEach(function(b){var d,e,f;d=a,e=b,f=c[b],(e=function(a){var b=function(a,b){if("object"!=typeof a||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}(a,"string");return"symbol"==typeof b?b:b+""}(e))in d?Object.defineProperty(d,e,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[e]=f}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):bo(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function bq(a,b){if(null==a)return{};var c,d,e=function(a,b){if(null==a)return{};var c={};for(var d in a)if(({}).hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&({}).propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}var br=j.memo(a=>{var{dataKey:b,data:c,stroke:d,strokeWidth:e,fill:f,name:g,hide:h,unit:i,tooltipType:k,id:l}=a,m={dataDefinedOnItem:c,getPosition:Q.lQ,settings:{stroke:d,strokeWidth:e,fill:f,dataKey:b,nameKey:void 0,name:(0,aA.uM)(g,b),hide:h,type:k,color:d,unit:i,graphicalItemId:l}};return j.createElement(aC.r,{tooltipEntrySettings:m})}),bs=(a,b)=>"".concat(b,"px ").concat(a,"px");function bt(a){var{clipPathId:b,points:c,props:d}=a,{dot:e,dataKey:f,needClip:g}=d,{id:h}=d,i=bq(d,bk),k=(0,aY.uZ)(i);return j.createElement(ay.n,{points:c,dot:e,className:"recharts-line-dots",dotClassName:"recharts-line-dot",dataKey:f,baseProps:k,needClip:g,clipPathId:b})}function bu(a){var{showLabels:b,children:c,points:d}=a,e=(0,j.useMemo)(()=>null==d?void 0:d.map(a=>{var b,c,d={x:null!=(b=a.x)?b:0,y:null!=(c=a.y)?c:0,width:0,lowerWidth:0,upperWidth:0,height:0};return bp(bp({},d),{},{value:a.value,payload:a.payload,viewBox:d,parentViewBox:void 0,fill:void 0})}),[d]);return j.createElement(ax.h8,{value:b?e:void 0},c)}function bv(a){var{clipPathId:b,pathRef:c,points:d,strokeDasharray:e,props:f}=a,{type:g,layout:h,connectNulls:i,needClip:k,shape:l}=f,m=bq(f,bl),n=bp(bp({},(0,R.a)(m)),{},{fill:"none",className:"recharts-line-curve",clipPath:k?"url(#clipPath-".concat(b,")"):void 0,points:d,type:g,layout:h,connectNulls:i,strokeDasharray:null!=e?e:f.strokeDasharray});return j.createElement(j.Fragment,null,(null==d?void 0:d.length)>1&&j.createElement(bh,bn({shapeType:"curve",option:l},n,{pathRef:c})),j.createElement(bt,{points:d,clipPathId:b,props:f}))}function bw(a){var{clipPathId:b,props:c,pathRef:d,previousPointsRef:e,longestAnimatedLengthRef:f}=a,{points:g,strokeDasharray:h,isAnimationActive:i,animationBegin:k,animationDuration:l,animationEasing:m,animateNewValues:n,width:o,height:p,onAnimationEnd:q,onAnimationStart:r}=c,s=e.current,t=(0,aU.n)(g,"recharts-line-"),u=(0,j.useRef)(t),[v,w]=(0,j.useState)(!1),x=(0,j.useCallback)(()=>{"function"==typeof q&&q(),w(!1)},[q]),y=(0,j.useCallback)(()=>{"function"==typeof r&&r(),w(!0)},[r]),z=function(a){try{return a&&a.getTotalLength&&a.getTotalLength()||0}catch(a){return 0}}(d.current),A=(0,j.useRef)(0);u.current!==t&&(A.current=f.current,u.current=t);var B=A.current;return j.createElement(bu,{points:g,showLabels:!v},c.children,j.createElement(aZ.J,{animationId:t,begin:k,duration:l,isActive:i,easing:m,onAnimationEnd:x,onAnimationStart:y,key:t},a=>{var k,l=Math.min((0,Q.GW)(B,z+B,a),z);if(k=i?h?((a,b,c)=>{var d=c.reduce((a,b)=>a+b,0);if(!d)return bs(b,a);for(var e=Math.floor(a/d),f=a%d,g=[],h=0,i=0;h<c.length;i+=null!=(j=c[h])?j:0,++h){var j,k=c[h];if(null!=k&&i+k>f){g=[...c.slice(0,h),f-i];break}}var l=g.length%2==0?[0,b]:[b];return[...function(a,b){for(var c=a.length%2!=0?[...a,0]:a,d=[],e=0;e<b;++e)d.push(...c);return d}(c,e),...g,...l].map(a=>"".concat(a,"px")).join(", ")})(l,z,"".concat(h).split(/[,\s]+/gim).map(a=>parseFloat(a))):bs(z,l):null==h?void 0:String(h),a>0&&z>0&&(e.current=g,f.current=Math.max(f.current,l)),s){var m=s.length/g.length,q=1===a?g:g.map((b,c)=>{var d=Math.floor(c*m);if(s[d]){var e=s[d];return bp(bp({},b),{},{x:(0,Q.GW)(e.x,b.x,a),y:(0,Q.GW)(e.y,b.y,a)})}return n?bp(bp({},b),{},{x:(0,Q.GW)(2*o,b.x,a),y:(0,Q.GW)(p/2,b.y,a)}):bp(bp({},b),{},{x:b.x,y:b.y})});return e.current=q,j.createElement(bv,{props:c,points:q,clipPathId:b,pathRef:d,strokeDasharray:k})}return j.createElement(bv,{props:c,points:g,clipPathId:b,pathRef:d,strokeDasharray:k})}),j.createElement(ax.qY,{label:c.label}))}function bx(a){var{clipPathId:b,props:c}=a,d=(0,j.useRef)(null),e=(0,j.useRef)(0),f=(0,j.useRef)(null);return j.createElement(bw,{props:c,clipPathId:b,previousPointsRef:d,longestAnimatedLengthRef:e,pathRef:f})}var by=(a,b)=>{var c,d;return{x:null!=(c=a.x)?c:void 0,y:null!=(d=a.y)?d:void 0,value:a.value,errorVal:(0,aA.kr)(a.payload,b)}};class bz extends j.Component{render(){var{hide:a,dot:b,points:c,className:d,xAxisId:e,yAxisId:f,top:g,left:h,width:i,height:k,id:l,needClip:m,zIndex:n}=this.props;if(a)return null;var o=(0,x.$)("recharts-line",d),{r:p,strokeWidth:q}=(0,a$.x)(b),r=(0,az.y$)(b),s=2*p+q,t=m?"url(#clipPath-".concat(r?"":"dots-").concat(l,")"):void 0;return j.createElement(bi.g,{zIndex:n},j.createElement(aw.W,{className:o},m&&j.createElement("defs",null,j.createElement(aG.Q,{clipPathId:l,xAxisId:e,yAxisId:f}),!r&&j.createElement("clipPath",{id:"clipPath-dots-".concat(l)},j.createElement("rect",{x:h-s/2,y:g-s/2,width:i+s,height:k+s}))),j.createElement(aF,{xAxisId:e,yAxisId:f,data:c,dataPointFormatter:by,errorBarOffset:0},j.createElement(bx,{props:this.props,clipPathId:l}))),j.createElement(aB.W,{activeDot:this.props.activeDot,points:c,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:t}))}}var bA={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!0,fill:"#fff",hide:!1,isAnimationActive:"auto",label:!1,legendType:"line",stroke:"#3182bd",strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:bj.I.line,type:"linear"};function bB(a){var b=(0,$.e)(a,bA),{activeDot:c,animateNewValues:d,animationBegin:e,animationDuration:f,animationEasing:g,connectNulls:h,dot:i,hide:k,isAnimationActive:l,label:m,legendType:n,xAxisId:o,yAxisId:p,id:q}=b,r=bq(b,bm),{needClip:s}=(0,aG.l)(o,p),t=(0,aV.oM)(),u=(0,ak.WX)(),v=(0,aH.r)(),w=(0,ah.G)(a=>aS(a,o,p,v,q));if("horizontal"!==u&&"vertical"!==u||null==w||null==t)return null;var{height:x,width:y,x:z,y:A}=t;return j.createElement(bz,bn({},r,{id:q,connectNulls:h,dot:i,activeDot:c,animateNewValues:d,animationBegin:e,animationDuration:f,animationEasing:g,isAnimationActive:l,hide:k,label:m,legendType:n,xAxisId:o,yAxisId:p,points:w,layout:u,height:x,width:y,left:z,top:A,needClip:s}))}var bC=j.memo(function(a){var b=(0,$.e)(a,bA),c=(0,aH.r)();return j.createElement(aW.x,{id:b.id,type:"line"},a=>j.createElement(j.Fragment,null,j.createElement(aT.A,{legendPayload:(a=>{var{dataKey:b,name:c,stroke:d,legendType:e,hide:f}=a;return[{inactive:f,dataKey:b,type:e,color:d,value:(0,aA.uM)(c,b),payload:a}]})(b)}),j.createElement(br,{dataKey:b.dataKey,data:b.data,stroke:b.stroke,strokeWidth:b.strokeWidth,fill:b.fill,name:b.name,hide:b.hide,unit:b.unit,tooltipType:b.tooltipType,id:a}),j.createElement(aX.p,{type:"line",id:a,data:b.data,xAxisId:b.xAxisId,yAxisId:b.yAxisId,zAxisId:0,dataKey:b.dataKey,hide:b.hide,isPanorama:c}),j.createElement(bB,bn({},b,{id:a}))))},al.P);bC.displayName="Line";var bD=c(75171),bE=c(99070),bF=c(83552),bG=c(95145),bH=c(4770);let bI={name:"",host:"",sshPort:"22",sshUser:"",sshPassword:"",useSudo:!0,sudoPassword:"",agentPort:"19998",installAgent:!0};function bJ(a){var b;let c;return!!a?.lastStatus&&(!a.lastError||Date.now()-(Number.isFinite(c=(b=a?.lastStatusAt)?new Date(b).getTime():0)?c:0)<=3e4)}function bK(a){return Math.max(0,Math.min(100,Number(a)||0))}function bL(a,b=1){let c=Number(a)||0;if(!c)return"0 B";let d=["B","KB","MB","GB","TB","PB"],e=Math.min(d.length-1,Math.floor(Math.log(c)/Math.log(1024)));return`${(c/1024**e).toFixed(e>2?b:0)} ${d[e]}`}function bM(a){return a?new Date(a).toLocaleTimeString("vi-VN",{hour12:!1}):"--:--:--"}function bN({value:a,label:b,detail:c,color:d="var(--color-brand-500)",icon:e}){let f=bK(a),g=2*Math.PI*49;return(0,i.jsxs)("div",{className:"flex min-w-0 flex-col items-center",children:[(0,i.jsxs)("div",{className:"relative h-36 w-36",children:[(0,i.jsxs)("svg",{className:"h-full w-full -rotate-90",viewBox:"0 0 120 120","aria-hidden":"true",children:[(0,i.jsx)("circle",{cx:"60",cy:"60",r:49,fill:"none",stroke:"var(--color-surface-2)",strokeWidth:"8"}),(0,i.jsx)("circle",{cx:"60",cy:"60",r:49,fill:"none",stroke:d,strokeWidth:"8",strokeLinecap:"round",strokeDasharray:g,strokeDashoffset:g*(1-f/100),className:"transition-all duration-700"})]}),(0,i.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-center",children:[e?(0,i.jsx)("span",{className:"material-symbols-outlined mb-0.5 text-[19px] text-text-muted",children:e}):null,(0,i.jsxs)("strong",{className:"text-2xl font-semibold tracking-tight text-text-main",children:[f.toFixed(+(f<10)),"%"]}),(0,i.jsx)("span",{className:"mt-0.5 text-xs font-medium text-text-muted",children:b})]})]}),(0,i.jsx)("div",{className:"mt-2 max-w-full truncate text-center text-xs text-text-subtle",title:c,children:c})]})}function bO({online:a}){return(0,i.jsx)("span",{className:`h-2.5 w-2.5 shrink-0 rounded-full ${a?"bg-emerald-500 shadow-[0_0_0_4px_rgba(16,185,129,.12)]":"bg-red-400 shadow-[0_0_0_4px_rgba(248,113,113,.12)]"}`})}function bP({servers:a,selectedId:b,onSelect:c}){return(0,i.jsx)("div",{className:"flex gap-3 overflow-x-auto pb-1 scroll-thin-x",children:a.map(a=>{let d=a.id===b,e=bJ(a);return(0,i.jsxs)("button",{type:"button",onClick:()=>c(a.id),className:`min-w-[420px] rounded-2xl border p-5 text-left transition ${d?"border-primary bg-primary/5 shadow-[var(--shadow-warm)]":"border-border bg-surface hover:border-primary/40"}`,children:[(0,i.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)(bO,{online:e}),(0,i.jsx)("div",{className:"truncate text-base font-semibold text-text-main",children:a.name})]}),(0,i.jsxs)("div",{className:"mt-1.5 truncate font-mono text-sm text-text-muted",children:[a.host,":",a.agentPort]})]}),(0,i.jsx)("span",{className:"material-symbols-outlined text-[22px] text-text-subtle",children:"dns"})]}),(0,i.jsxs)("div",{className:"mt-3 flex items-center justify-between text-sm text-text-muted",children:[(0,i.jsx)("span",{children:e?"Đang hoạt động":"Mất kết nối"}),(0,i.jsx)("span",{children:bM(a.lastStatusAt)})]})]},a.id)})})}function bQ({icon:a,label:b,value:c,sublabel:d,colorClass:e="text-primary",children:f}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex items-center gap-3",children:[(0,i.jsx)("div",{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-surface-2 ${e}`,children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:a})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsx)("div",{className:"text-xs font-medium uppercase tracking-wider text-text-muted",children:b}),(0,i.jsx)("div",{className:"mt-0.5 truncate text-lg font-semibold text-text-main",children:c})]})]}),d?(0,i.jsx)("div",{className:"mt-3 truncate text-xs text-text-subtle",children:d}):null,f]})}function bR({data:a,dataKey:b,label:c,color:d,unit:e="%"}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,i.jsx)("h3",{className:"font-semibold text-text-main",children:c}),(0,i.jsx)("span",{className:"text-xs text-text-muted",children:"60 mẫu gần nhất"})]}),(0,i.jsx)("div",{className:"h-44",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(l.Q,{data:a,margin:{top:6,right:4,left:-22,bottom:0},children:[(0,i.jsx)("defs",{children:(0,i.jsxs)("linearGradient",{id:`fill-${b}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,i.jsx)("stop",{offset:"0%",stopColor:d,stopOpacity:.3}),(0,i.jsx)("stop",{offset:"100%",stopColor:d,stopOpacity:.02})]})}),(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",hide:!0}),(0,i.jsx)(o.h,{domain:[0,"auto"],tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},formatter:a=>[`${Number(a).toFixed(1)}${e}`,c]}),(0,i.jsx)(q.Gk,{type:"monotone",dataKey:b,stroke:d,fill:`url(#fill-${b})`,strokeWidth:2.2,dot:!1,isAnimationActive:!1})]})})})]})}let bS=["#10b981","#06b6d4","#8b5cf6","#f59e0b","#ef4444","#3b82f6","#ec4899","#84cc16"];function bT(a){return a?.uuid||`index-${a?.index??0}`}function bU({data:a,gpus:b}){let c=(b||[]).map((a,b)=>({id:bT(a),dataKey:`gpu${b}`,name:`GPU ${a.index} \xb7 ${a.name}`,color:bS[b%bS.length]})),d=a.map(a=>{let b={time:a.time};return c.forEach(c=>{let d=a.gpus?.find(a=>a.id===c.id);b[c.dataKey]=d?.usagePercent??null}),b});return(0,i.jsxs)("div",{className:"mb-5 rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4 flex flex-wrap items-start justify-between gap-2",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:"GPU usage history"}),(0,i.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:"Mỗi đường biểu diễn mức tải realtime của một NVIDIA GPU."})]}),(0,i.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-1 text-xs font-medium text-emerald-600 dark:text-emerald-400",children:"60 mẫu gần nhất"})]}),(0,i.jsx)("div",{className:"h-64",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(u,{data:d,margin:{top:8,right:12,left:-16,bottom:2},children:[(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",tickFormatter:bM,minTickGap:36,tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(o.h,{domain:[0,100],ticks:[0,25,50,75,100],tickFormatter:a=>`${a}%`,tick:{fill:"var(--color-text-subtle)",fontSize:11},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},labelFormatter:a=>`Thời gian ${bM(a)}`,formatter:(a,b)=>[`${Number(a).toFixed(1)}%`,b]}),(0,i.jsx)(av,{iconType:"circle",iconSize:8,wrapperStyle:{fontSize:12,paddingTop:12},formatter:a=>(0,i.jsx)("span",{className:"text-text-muted",children:a})}),c.map(a=>(0,i.jsx)(bC,{type:"monotone",dataKey:a.dataKey,name:a.name,stroke:a.color,strokeWidth:2.4,dot:!1,connectNulls:!1,isAnimationActive:!1},a.id))]})})})]})}let bV=[{value:"1h",label:"1 giờ"},{value:"6h",label:"6 giờ"},{value:"24h",label:"24 giờ"},{value:"7d",label:"7 ng\xe0y"},{value:"30d",label:"30 ng\xe0y"}];function bW(a){return a?new Date(a).toLocaleString("vi-VN",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}):"—"}function bX({title:a,description:b,data:c,series:d,domain:e=[0,100],valueFormatter:f=a=>`${Number(a).toFixed(1)}%`,axisFormatter:g=a=>`${a}%`}){return(0,i.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-5 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"mb-4",children:[(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:a}),b?(0,i.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:b}):null]}),(0,i.jsx)("div",{className:"h-64",children:(0,i.jsx)(k.u,{width:"100%",height:"100%",children:(0,i.jsxs)(u,{data:c,margin:{top:8,right:12,left:-8,bottom:2},children:[(0,i.jsx)(m.d,{stroke:"var(--color-border-subtle)",strokeDasharray:"4 4",vertical:!1}),(0,i.jsx)(n.W,{dataKey:"time",tickFormatter:bW,minTickGap:48,tick:{fill:"var(--color-text-subtle)",fontSize:10},axisLine:!1,tickLine:!1}),(0,i.jsx)(o.h,{domain:e,tickFormatter:g,width:58,tick:{fill:"var(--color-text-subtle)",fontSize:10},axisLine:!1,tickLine:!1}),(0,i.jsx)(p.m,{contentStyle:{background:"var(--color-surface)",border:"1px solid var(--color-border)",borderRadius:12,fontSize:12},labelFormatter:a=>bW(a),formatter:(a,b)=>[f(a),b]}),(0,i.jsx)(av,{iconType:"circle",iconSize:8,wrapperStyle:{fontSize:12,paddingTop:12},formatter:a=>(0,i.jsx)("span",{className:"text-text-muted",children:a})}),d.map(a=>(0,i.jsx)(bC,{type:"monotone",dataKey:a.key,name:a.name,stroke:a.color,strokeWidth:2.2,dot:!1,connectNulls:!1,isAnimationActive:!1},a.key))]})})})]})}function bY({server:a,data:b,meta:c,period:d,onPeriodChange:e,loading:f,error:g}){let h=(0,j.useMemo)(()=>{let a=new Map;return b.forEach(b=>{(b.gpus||[]).forEach(b=>{a.has(b.id)||a.set(b.id,b)})}),[...a.values()].map((a,b)=>({id:a.id,key:`gpu${b}`,name:`GPU ${a.index} \xb7 ${a.name}`,color:bS[b%bS.length]}))},[b]),k=(0,j.useCallback)(a=>b.map(b=>{let c={time:b.time};return h.forEach(d=>{let e=b.gpus?.find(a=>a.id===d.id);c[d.key]=e?.[a]??null}),c}),[b,h]);return(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-violet-500/10 text-violet-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"monitoring"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("h3",{className:"truncate text-lg font-semibold text-text-main",children:["Lịch sử \xb7 ",a.name]}),(0,i.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Sample mỗi ph\xfat \xb7 lưu tối đa ",c?.retentionDays||30," ng\xe0y"]})]})]}),(0,i.jsx)("div",{className:"flex flex-wrap gap-1 rounded-xl bg-surface-2 p-1",children:bV.map(a=>(0,i.jsx)("button",{type:"button",onClick:()=>e(a.value),className:`rounded-lg px-3 py-2 text-xs font-semibold transition ${d===a.value?"bg-surface text-primary shadow-sm":"text-text-muted hover:text-text-main"}`,children:a.label},a.value))})]}),f?(0,i.jsxs)("div",{className:"flex min-h-[420px] items-center justify-center text-sm text-text-muted",children:[(0,i.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Đang tải dữ liệu lịch sử..."]}):g?(0,i.jsx)("div",{className:"m-6 rounded-2xl border border-red-500/20 bg-red-500/10 p-5 text-sm text-red-600 dark:text-red-300",children:g}):b.length?(0,i.jsxs)("div",{className:"space-y-5 p-6",children:[(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-3",children:[(0,i.jsx)(bQ,{icon:"database",label:"Số điểm hiển thị",value:b.length.toLocaleString("vi-VN"),sublabel:`Bucket ${c?.bucketMinutes||1} ph\xfat`,colorClass:"text-violet-500"}),(0,i.jsx)(bQ,{icon:"date_range",label:"Từ thời điểm",value:bW(b[0]?.time),sublabel:"Điểm đầu ti\xean trong khoảng đ\xe3 chọn",colorClass:"text-cyan-500"}),(0,i.jsx)(bQ,{icon:"memory",label:"NVIDIA GPU",value:`${h.length} card`,sublabel:"Theo d\xf5i ri\xeang bằng GPU UUID",colorClass:"text-emerald-500"})]}),(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bX,{title:"CPU, RAM & Disk usage",description:"Tỷ lệ sử dụng t\xe0i nguy\xean hệ thống theo thời gian.",data:b,series:[{key:"cpu",name:"CPU",color:"#3b9dec"},{key:"memory",name:"RAM",color:"#8b5cf6"},{key:"disk",name:"Disk",color:"#f59e0b"}]}),(0,i.jsx)(bX,{title:"Network throughput",description:"Tốc độ nhận v\xe0 gửi trung b\xecnh trong mỗi bucket.",data:b,domain:[0,"auto"],series:[{key:"networkRxBps",name:"Download",color:"#06b6d4"},{key:"networkTxBps",name:"Upload",color:"#ec4899"}],valueFormatter:a=>`${bL(a)}/s`,axisFormatter:a=>bL(a)})]}),h.length?(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bX,{title:"NVIDIA GPU usage",description:"Mức tải của từng GPU, ph\xe2n biệt theo UUID.",data:k("usagePercent"),series:h}),(0,i.jsx)(bX,{title:"GPU VRAM usage",description:"Phần trăm VRAM đ\xe3 sử dụng tr\xean từng card.",data:k("memoryUsagePercent"),series:h}),(0,i.jsx)(bX,{title:"GPU temperature",description:"Nhiệt độ trung b\xecnh của từng card trong mỗi bucket.",data:k("temperatureC"),domain:[0,"auto"],series:h,valueFormatter:a=>`${Number(a).toFixed(1)}\xb0C`,axisFormatter:a=>`${a}\xb0`}),(0,i.jsx)(bX,{title:"GPU power draw",description:"C\xf4ng suất ti\xeau thụ trung b\xecnh của từng card.",data:k("powerDrawW"),domain:[0,"auto"],series:h,valueFormatter:a=>`${Number(a).toFixed(1)} W`,axisFormatter:a=>`${a}W`})]}):null]}):(0,i.jsxs)("div",{className:"flex min-h-[420px] flex-col items-center justify-center px-6 text-center",children:[(0,i.jsx)("div",{className:"flex h-16 w-16 items-center justify-center rounded-2xl bg-violet-500/10 text-violet-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[34px]",children:"hourglass_empty"})}),(0,i.jsx)("h4",{className:"mt-5 font-semibold text-text-main",children:"Chưa c\xf3 dữ liệu lịch sử"}),(0,i.jsx)("p",{className:"mt-2 max-w-md text-sm leading-6 text-text-muted",children:"Collector đ\xe3 được bật v\xe0 sẽ ghi mẫu đầu ti\xean trong v\xf2ng một ph\xfat. Dữ liệu vẫn tiếp tục được thu thập khi kh\xf4ng mở dashboard."})]})]})}function bZ({gpu:a}){let b=bK(a.memoryUsagePercent);return(0,i.jsxs)("div",{className:"overflow-hidden rounded-2xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex items-center justify-between border-b border-border-subtle bg-gradient-to-r from-emerald-500/8 to-cyan-500/5 px-5 py-4",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,i.jsx)("div",{className:"flex h-10 w-10 items-center justify-center rounded-xl bg-emerald-500/10 text-emerald-500",children:(0,i.jsx)("span",{className:"material-symbols-outlined",children:"memory"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"truncate font-semibold text-text-main",children:["GPU ",a.index," \xb7 ",a.name]}),(0,i.jsxs)("div",{className:"mt-0.5 text-xs text-text-muted",children:["NVIDIA Driver ",a.driverVersion||"—"]})]})]}),(0,i.jsx)("span",{className:"rounded-full bg-emerald-500/10 px-2.5 py-1 text-xs font-semibold text-emerald-600 dark:text-emerald-400",children:"NVIDIA"})]}),(0,i.jsxs)("div",{className:"grid gap-5 p-5 sm:grid-cols-[150px_1fr]",children:[(0,i.jsx)(bN,{value:a.usagePercent,label:"GPU Load",detail:`${a.temperatureC??"—"}\xb0C`,color:"#10b981"}),(0,i.jsxs)("div",{className:"space-y-5",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-2 flex items-center justify-between text-sm",children:[(0,i.jsx)("span",{className:"text-text-muted",children:"VRAM"}),(0,i.jsxs)("span",{className:"font-semibold text-text-main",children:[bL(1048576*(a.memoryUsedMb||0))," /"," ",bL(1048576*(a.memoryTotalMb||0))]})]}),(0,i.jsx)("div",{className:"h-2.5 overflow-hidden rounded-full bg-surface-2",children:(0,i.jsx)("div",{className:"h-full rounded-full bg-emerald-500 transition-all duration-700",style:{width:`${b}%`}})}),(0,i.jsxs)("div",{className:"mt-1.5 text-right text-xs text-text-subtle",children:[b.toFixed(1),"% đ\xe3 d\xf9ng"]})]}),(0,i.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,i.jsxs)("div",{className:"rounded-xl bg-surface-2 p-3",children:[(0,i.jsx)("div",{className:"text-xs text-text-muted",children:"Nhiệt độ"}),(0,i.jsxs)("div",{className:"mt-1 text-lg font-semibold text-text-main",children:[a.temperatureC??"—","\xb0C"]})]}),(0,i.jsxs)("div",{className:"rounded-xl bg-surface-2 p-3",children:[(0,i.jsx)("div",{className:"text-xs text-text-muted",children:"C\xf4ng suất"}),(0,i.jsxs)("div",{className:"mt-1 text-lg font-semibold text-text-main",children:[a.powerDrawW??"—",(0,i.jsxs)("span",{className:"text-xs font-normal text-text-muted",children:[" ","/ ",a.powerLimitW??"—"," W"]})]})]})]})]})]})]})}function b$({open:a,onClose:b,onCreated:c}){let[d,e]=(0,j.useState)(bI),[f,g]=(0,j.useState)(!1),[h,k]=(0,j.useState)(""),l=(a,b)=>e(c=>({...c,[a]:b})),m=async a=>{a.preventDefault(),g(!0),k("");try{let a=await fetch("/api/resource-monitor",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}),e=await a.json().catch(()=>({}));if(!a.ok)throw Error(e.error||"Kh\xf4ng thể th\xeam server");await c(e.server,e.install),b()}catch(a){k(a?.message||"Kh\xf4ng thể th\xeam server")}finally{g(!1)}};return(0,i.jsx)(bG.default,{isOpen:a,onClose:b,title:"Th\xeam Linux server",size:"xl",busy:f,footer:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bE.default,{variant:"ghost",onClick:b,disabled:f,children:"Hủy"}),(0,i.jsx)(bE.default,{onClick:m,loading:f,icon:"rocket_launch",children:"C\xe0i agent & th\xeam server"})]}),children:(0,i.jsxs)("form",{onSubmit:m,className:"space-y-5",children:[(0,i.jsx)("div",{className:"rounded-xl border border-primary/20 bg-primary/5 p-4 text-sm text-text-muted",children:(0,i.jsxs)("div",{className:"flex gap-3",children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-primary",children:"auto_fix_high"}),(0,i.jsx)("p",{children:"BlueRouter sẽ SSH v\xe0o m\xe1y, d\xf9ng quyền sudo để c\xe0i Python agent dưới dạng systemd service. Sau lần n\xe0y bạn kh\xf4ng cần thao t\xe1c th\xeam tr\xean Linux."})]})}),(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,i.jsx)(bF.default,{label:"T\xean hiển thị",value:d.name,onChange:a=>l("name",a.target.value),placeholder:"GPU Worker 01",icon:"dns"}),(0,i.jsx)(bF.default,{required:!0,label:"Hostname / IP",value:d.host,onChange:a=>l("host",a.target.value),placeholder:"192.168.1.50",icon:"lan"}),(0,i.jsx)(bF.default,{required:!0,label:"SSH user",value:d.sshUser,onChange:a=>l("sshUser",a.target.value),placeholder:"ubuntu",icon:"person"}),(0,i.jsx)(bF.default,{label:"SSH port",type:"number",value:d.sshPort,onChange:a=>l("sshPort",a.target.value)}),(0,i.jsx)(bF.default,{label:"SSH password",type:"password",value:d.sshPassword,onChange:a=>l("sshPassword",a.target.value),placeholder:"Để trống nếu d\xf9ng SSH key",hint:"Chỉ d\xf9ng trong l\xfac c\xe0i, kh\xf4ng lưu v\xe0o database."}),(0,i.jsx)(bF.default,{label:"Agent port",type:"number",value:d.agentPort,onChange:a=>l("agentPort",a.target.value),hint:"Mặc định 19998; dashboard server phải truy cập được port n\xe0y."})]}),(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:d.useSudo,onChange:a=>l("useSudo",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"User cần sudo để c\xe0i service"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Tắt nếu đăng nhập trực tiếp bằng root."})]})]}),d.useSudo?(0,i.jsx)(bF.default,{label:"Sudo password",type:"password",value:d.sudoPassword,onChange:a=>l("sudoPassword",a.target.value),placeholder:"Mặc định d\xf9ng c\xf9ng SSH password"}):null,h?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:h}):null]})})}function b_({open:a,server:b,onClose:c,onUpdated:d}){let[e,f]=(0,j.useState)({name:b?.name||"",host:b?.host||"",sshPort:String(b?.sshPort||22),sshUser:b?.sshUser||"",sshPassword:"",useSudo:b?.useSudo!==!1,sudoPassword:"",agentPort:String(b?.agentPort||19998),installAgent:!0}),[g,h]=(0,j.useState)(!1),[k,l]=(0,j.useState)(""),m=(a,b)=>f(c=>({...c,[a]:b})),n=async a=>{if(a.preventDefault(),b?.id){h(!0),l("");try{let a=await fetch(`/api/resource-monitor/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,host:e.host,sshPort:e.sshPort,sshUser:e.sshUser,useSudo:e.useSudo,agentPort:e.agentPort})}),f=await a.json().catch(()=>({}));if(!a.ok)throw Error(f.error||"Kh\xf4ng thể lưu server");let g=null;if(e.installAgent){let a=await fetch(`/api/resource-monitor/${b.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sshPassword:e.sshPassword,sudoPassword:e.sudoPassword})}),c=await a.json().catch(()=>({}));g={ok:a.ok&&!1!==c.ok,log:c.log,error:c.error}}await d(f.server,g),c()}catch(a){l(a?.message||"Kh\xf4ng thể cập nhật server")}finally{h(!1)}}};return(0,i.jsx)(bG.default,{isOpen:a,onClose:c,title:"Sửa Linux server",size:"xl",busy:g,footer:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bE.default,{variant:"ghost",onClick:c,disabled:g,children:"Hủy"}),(0,i.jsx)(bE.default,{onClick:n,loading:g,icon:"save",children:"Lưu & c\xe0i lại agent"})]}),children:(0,i.jsxs)("form",{onSubmit:n,className:"space-y-5",children:[(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,i.jsx)(bF.default,{label:"T\xean hiển thị",value:e.name,onChange:a=>m("name",a.target.value),placeholder:"GPU Worker 01",icon:"dns"}),(0,i.jsx)(bF.default,{required:!0,label:"Hostname / IP",value:e.host,onChange:a=>m("host",a.target.value),placeholder:"192.168.1.50",icon:"lan"}),(0,i.jsx)(bF.default,{required:!0,label:"SSH user",value:e.sshUser,onChange:a=>m("sshUser",a.target.value),placeholder:"ubuntu",icon:"person"}),(0,i.jsx)(bF.default,{label:"SSH port",type:"number",value:e.sshPort,onChange:a=>m("sshPort",a.target.value)}),(0,i.jsx)(bF.default,{label:"SSH password",type:"password",value:e.sshPassword,onChange:a=>m("sshPassword",a.target.value),placeholder:"Nhập lại nếu trước đ\xf3 sai",hint:"Chỉ d\xf9ng để c\xe0i lại agent, kh\xf4ng lưu v\xe0o database."}),(0,i.jsx)(bF.default,{label:"Agent port",type:"number",value:e.agentPort,onChange:a=>m("agentPort",a.target.value)})]}),(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:e.useSudo,onChange:a=>m("useSudo",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"User cần sudo để c\xe0i service"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Tắt nếu đăng nhập trực tiếp bằng root."})]})]}),e.useSudo?(0,i.jsx)(bF.default,{label:"Sudo password",type:"password",value:e.sudoPassword,onChange:a=>m("sudoPassword",a.target.value),placeholder:"Mặc định d\xf9ng c\xf9ng SSH password"}):null,(0,i.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface-2/60 p-4",children:[(0,i.jsx)("input",{type:"checkbox",checked:e.installAgent,onChange:a=>m("installAgent",a.target.checked),className:"mt-1 h-4 w-4"}),(0,i.jsxs)("span",{children:[(0,i.jsx)("span",{className:"block text-sm font-semibold text-text-main",children:"C\xe0i lại agent sau khi lưu"}),(0,i.jsx)("span",{className:"mt-1 block text-xs text-text-muted",children:"Bật mục n\xe0y khi cần nhập lại account/password SSH hoặc đổi port."})]})]}),k?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:k}):null]})})}let b0={normal:{variant:"success",label:"B\xecnh thường"},warning:{variant:"warning",label:"Cảnh b\xe1o"},critical:{variant:"error",label:"Qu\xe1 tải"},unknown:{variant:"default",label:"Kh\xf4ng r\xf5"}};function b1({modelOptions:a,selectedModel:b,onSelectModel:c,analysis:d,loading:e,error:f,onAnalyze:g,standby:h}){return(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsx)("div",{className:"flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5",children:(0,i.jsxs)("div",{className:"flex items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"neurology"})}),(0,i.jsxs)("div",{children:[(0,i.jsx)("h3",{className:"text-lg font-semibold text-text-main",children:"Đ\xe1nh gi\xe1 AI t\xecnh trạng server"}),(0,i.jsx)("p",{className:"mt-0.5 text-xs text-text-muted",children:"Ph\xe2n t\xedch giờ l\xe0m việc h\xf4m nay (8:00 - 18:00) tr\xean to\xe0n bộ Linux server."})]})]})}),(0,i.jsxs)("div",{className:"space-y-5 p-6",children:[h?(0,i.jsx)("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-4 py-3 text-sm text-amber-700 dark:text-amber-300",children:"Standby mode: kết quả ph\xe2n t\xedch được đồng bộ tự động từ Master. Node n\xe0y kh\xf4ng tự chạy ph\xe2n t\xedch AI."}):null,(0,i.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,i.jsx)(bH.default,{className:"min-w-[280px] flex-1",label:"AI model d\xf9ng để ph\xe2n t\xedch",options:a,value:b,onChange:a=>c(a.target.value),placeholder:a.length?"Chọn model":"Chưa c\xf3 kết nối AI n\xe0o đang hoạt động",disabled:!a.length||h}),(0,i.jsx)(bE.default,{icon:"auto_awesome",onClick:g,loading:e,disabled:!b||h,children:"Ph\xe2n t\xedch lại"})]}),f?(0,i.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-600 dark:text-red-300",children:f}):null,d?(0,i.jsxs)("div",{className:"space-y-5",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2 text-xs text-text-muted",children:[(0,i.jsxs)("span",{children:["Model: ",(0,i.jsx)("span",{className:"font-semibold",children:d.modelLabel})]}),(0,i.jsxs)("span",{children:["Cập nhật l\xfac ",bM(d.generatedAt)]})]}),(0,i.jsx)("div",{className:"whitespace-pre-wrap rounded-2xl border border-border bg-surface-2/40 p-5 text-sm leading-6 text-text-main",children:d.summary}),d.servers?.length?(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-3 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-primary"}),(0,i.jsx)("h4",{className:"font-semibold text-text-main",children:"Trạng th\xe1i từng server"})]}),(0,i.jsx)("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-3",children:d.servers.map(a=>{let b=b0[a.status]||b0.unknown;return(0,i.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface px-4 py-3",children:[(0,i.jsx)("span",{className:"truncate text-sm font-medium text-text-main",children:a.name}),(0,i.jsx)(bD.default,{variant:b.variant,dot:!0,children:b.label})]},a.serverId)})})]}):null]}):e?null:(0,i.jsx)("div",{className:"rounded-2xl border border-dashed border-border bg-surface-2/40 py-10 text-center text-sm text-text-muted",children:'Chưa c\xf3 ph\xe2n t\xedch n\xe0o — bấm "Ph\xe2n t\xedch lại" để bắt đầu.'})]})]})}function b2(){let a,b,c,d,[e,f]=(0,j.useState)("realtime"),[g,h]=(0,j.useState)([]),[k,l]=(0,j.useState)(""),[m,n]=(0,j.useState)({}),[o,p]=(0,j.useState)(!0),[q,r]=(0,j.useState)(!1),[s,t]=(0,j.useState)(!1),[u,v]=(0,j.useState)(!1),[w,x]=(0,j.useState)(null),[y,z]=(0,j.useState)(!1),[A,B]=(0,j.useState)(null),[C,D]=(0,j.useState)("24h"),[E,F]=(0,j.useState)([]),[G,H]=(0,j.useState)(null),[I,J]=(0,j.useState)(!1),[K,L]=(0,j.useState)(""),[M,N]=(0,j.useState)(!1),[O,P]=(0,j.useState)([]),[Q,R]=(0,j.useState)(""),[S,T]=(0,j.useState)(null),[U,V]=(0,j.useState)(!1),[W,X]=(0,j.useState)(""),Y=(0,j.useRef)(0),Z=(0,j.useCallback)(async({quiet:a=!1}={})=>{a||r(!0);try{let a=await fetch("/api/resource-monitor",{cache:"no-store"}),b=await a.json().catch(()=>({}));if(!a.ok)throw Error(b.error||"Kh\xf4ng tải được server");let c=b.servers||[];N(!0===b.standby),h(c),l(a=>a&&c.some(b=>b.id===a)?a:c[0]?.id||""),n(a=>{let b={...a};return c.forEach(a=>{if(!bJ(a))return;let c=a.lastStatus,d={time:c.updatedAt||new Date().toISOString(),cpu:c.cpu?.usagePercent||0,memory:c.memory?.usagePercent||0,disk:c.disks?.[0]?.usagePercent||0,gpu:c.gpus?.length?Math.max(...c.gpus.map(a=>a.usagePercent||0)):0,gpus:(c.gpus||[]).map(a=>({id:bT(a),usagePercent:bK(a.usagePercent)}))},e=b[a.id]||[];b[a.id]=e.at(-1)?.time===d.time?e:[...e,d].slice(-60)}),b})}catch(b){a||B({type:"error",text:b?.message||"Kh\xf4ng tải được server"})}finally{p(!1),a||r(!1)}},[]),$=(0,j.useCallback)(async()=>{if(!k)return;let a=++Y.current;J(!0),L("");try{let b=await fetch(`/api/resource-monitor/history?serverId=${encodeURIComponent(k)}&period=${encodeURIComponent(C)}`,{cache:"no-store"}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"Kh\xf4ng tải được lịch sử t\xe0i nguy\xean");if(Y.current!==a)return;F(c.points||[]),H(c)}catch(b){if(Y.current!==a)return;L(b?.message||"Kh\xf4ng tải được lịch sử t\xe0i nguy\xean"),F([])}finally{Y.current===a&&J(!1)}},[C,k]),_=(0,j.useCallback)(a=>{R(a),fetch("/api/resource-monitor/analyze",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a})}).catch(()=>{})},[]),aa=(0,j.useCallback)(async()=>{if(!Q)return;let a=Q.indexOf("::"),b=Q.slice(0,a),c=Q.slice(a+2);V(!0),X("");try{let a=await fetch("/api/resource-monitor/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({connectionId:b,model:c})}),d=await a.json().catch(()=>({}));if(!a.ok)throw Error(d.error||"Kh\xf4ng thể ph\xe2n t\xedch t\xe0i nguy\xean");T(d.analysis)}catch(a){X(a?.message||"Kh\xf4ng thể ph\xe2n t\xedch t\xe0i nguy\xean")}finally{V(!1)}},[Q]),ab=(0,j.useMemo)(()=>g.find(a=>a.id===k)||null,[g,k]),ac=ab?.lastStatus,ad=bJ(ab),ae=ac?.disks?.[0],af=m[k]||[],ag=async()=>{if(w){z(!0);try{if(!(await fetch(`/api/resource-monitor/${w.id}`,{method:"DELETE"})).ok)throw Error("Kh\xf4ng thể x\xf3a server");x(null),await Z()}catch(a){B({type:"error",text:a.message})}finally{z(!1)}}};return o?(0,i.jsxs)("div",{className:"flex min-h-[50vh] items-center justify-center text-text-muted",children:[(0,i.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Đang tải t\xe0i nguy\xean server..."]}):(0,i.jsxs)("div",{className:"space-y-6",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Linux Resource Monitor"}),(0,i.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Theo d\xf5i realtime CPU, RAM, disk, network v\xe0 to\xe0n bộ NVIDIA GPU."})]}),(0,i.jsxs)("div",{className:"flex gap-2",children:[(0,i.jsx)(bE.default,{variant:"secondary",icon:"refresh",onClick:()=>"history"===e?$():Z(),loading:"history"===e?I:q,children:"L\xe0m mới"}),(0,i.jsx)(bE.default,{icon:"add",onClick:()=>t(!0),disabled:M,children:"Th\xeam server"})]})]}),M?(0,i.jsx)("div",{className:"rounded-xl border border-blue-500/30 bg-blue-500/10 px-4 py-3 text-sm text-blue-700 dark:text-blue-300",children:"Standby mode: Resource Monitor chỉ hiển thị snapshot từ Master. Node n\xe0y kh\xf4ng polling agent v\xe0 kh\xf4ng cho sửa danh s\xe1ch server."}):null,(0,i.jsxs)("div",{className:"flex w-fit rounded-xl border border-border bg-surface p-1 shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("button",{type:"button",onClick:()=>f("realtime"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"realtime"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"monitor_heart"}),"Realtime Monitor"]}),(0,i.jsxs)("button",{type:"button",onClick:()=>f("history"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"history"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"query_stats"}),"History"]}),(0,i.jsxs)("button",{type:"button",onClick:()=>f("ai"),className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-sm font-semibold transition ${"ai"===e?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-surface-2 hover:text-text-main"}`,children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-[19px]",children:"neurology"}),"Đ\xe1nh gi\xe1 AI"]})]}),A?(0,i.jsxs)("div",{className:`flex items-center justify-between rounded-xl border px-4 py-3 text-sm ${"error"===A.type?"border-red-500/20 bg-red-500/10 text-red-600 dark:text-red-300":"border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300"}`,children:[(0,i.jsx)("span",{children:A.text}),(0,i.jsx)("button",{onClick:()=>B(null),children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}):null,g.length?(0,i.jsxs)(i.Fragment,{children:["ai"!==e?(0,i.jsx)(bP,{servers:g,selectedId:k,onSelect:l}):null,"ai"===e?(0,i.jsx)(b1,{modelOptions:O,selectedModel:Q,onSelectModel:_,analysis:S,loading:U,error:W,onAnalyze:aa,standby:M}):ab?"realtime"===e?(0,i.jsxs)("section",{className:"overflow-hidden rounded-3xl border border-border bg-surface shadow-[var(--shadow-soft)]",children:[(0,i.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-4 border-b border-border px-6 py-5",children:[(0,i.jsxs)("div",{className:"flex min-w-0 items-center gap-4",children:[(0,i.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[27px]",children:"dns"})}),(0,i.jsxs)("div",{className:"min-w-0",children:[(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)(bO,{online:ad}),(0,i.jsx)("h3",{className:"truncate text-lg font-semibold text-text-main",children:ab.name})]}),(0,i.jsxs)("div",{className:"mt-1 flex flex-wrap gap-x-3 text-xs text-text-muted",children:[(0,i.jsx)("span",{className:"font-mono",children:ab.host}),ac?.os?(0,i.jsx)("span",{children:ac.os}):null,ac?.uptimeSeconds?(0,i.jsxs)("span",{children:["Uptime ",(b=Math.floor((a=Number(ac.uptimeSeconds)||0)/86400),c=Math.floor(a%86400/3600),d=Math.floor(a%3600/60),b?`${b} ng\xe0y ${c} giờ`:c?`${c} giờ ${d} ph\xfat`:`${d} ph\xfat`)]}):null]})]})]}),(0,i.jsxs)("div",{className:"flex items-center gap-2",children:[(0,i.jsx)("span",{className:`rounded-full px-3 py-1.5 text-xs font-semibold ${ad?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-400":"bg-red-500/10 text-red-600 dark:text-red-300"}`,children:ad?"Online":"Offline"}),M?null:(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("button",{type:"button",onClick:()=>v(!0),className:"rounded-xl p-2 text-text-muted hover:bg-primary/10 hover:text-primary",title:"Sửa server v\xe0 c\xe0i lại agent",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"edit"})}),(0,i.jsx)("button",{type:"button",onClick:()=>x(ab),className:"rounded-xl p-2 text-text-muted hover:bg-red-500/10 hover:text-red-500",title:"X\xf3a khỏi dashboard",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"delete"})})]})]})]}),ad?null:(0,i.jsx)("div",{className:"m-6 rounded-2xl border border-amber-500/20 bg-amber-500/8 p-5",children:(0,i.jsxs)("div",{className:"flex gap-3",children:[(0,i.jsx)("span",{className:"material-symbols-outlined text-amber-500",children:"cloud_off"}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:"font-semibold text-text-main",children:"Kh\xf4ng kết nối được agent"}),(0,i.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:ab.lastError||"Agent chưa gửi dữ liệu. Kiểm tra firewall v\xe0 agent port."}),ab.lastInstallLog?(0,i.jsxs)("details",{className:"mt-3",children:[(0,i.jsx)("summary",{className:"cursor-pointer text-xs font-semibold text-amber-600",children:"Xem log c\xe0i đặt"}),(0,i.jsx)("pre",{className:"mt-2 max-h-48 overflow-auto whitespace-pre-wrap rounded-xl bg-black/80 p-3 text-xs text-white",children:ab.lastInstallLog})]}):null]})]})}),ac?(0,i.jsxs)("div",{className:"space-y-7 p-6",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-5 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-primary"}),(0,i.jsx)("h3",{className:"font-semibold text-text-main",children:"Tổng quan t\xe0i nguy\xean"}),(0,i.jsxs)("span",{className:"ml-auto text-xs text-text-muted",children:["Cập nhật ",bM(ab.lastStatusAt)]})]}),(0,i.jsxs)("div",{className:"grid gap-5 sm:grid-cols-2 xl:grid-cols-4",children:[(0,i.jsx)(bN,{value:ac.cpu?.usagePercent,label:"CPU",detail:`${ac.cpu?.cores||0} cores \xb7 Load ${ac.cpu?.load1??0}`,icon:"developer_board"}),(0,i.jsx)(bN,{value:ac.memory?.usagePercent,label:"RAM",detail:`${bL(ac.memory?.usedBytes)} / ${bL(ac.memory?.totalBytes)}`,icon:"memory_alt"}),(0,i.jsx)(bN,{value:ae?.usagePercent,label:"Disk /",detail:`${bL(ae?.usedBytes)} / ${bL(ae?.totalBytes)}`,icon:"hard_drive"}),(0,i.jsx)(bN,{value:ac.gpus?.length?Math.max(...ac.gpus.map(a=>a.usagePercent||0)):0,label:ac.gpus?.length?`${ac.gpus.length} NVIDIA GPU`:"GPU",detail:ac.gpus?.length?`${ac.gpus.length} card được ph\xe1t hiện`:"Kh\xf4ng c\xf3 NVIDIA GPU",color:"#10b981",icon:"memory"})]})]}),(0,i.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-4",children:[(0,i.jsx)(bQ,{icon:"developer_board",label:"CPU",value:ac.cpu?.model||`${ac.cpu?.cores||0} cores`,sublabel:`Load average ${ac.cpu?.load1??0} / ${ac.cpu?.load5??0} / ${ac.cpu?.load15??0}`}),(0,i.jsx)(bQ,{icon:"swap_vert",label:"Network realtime",value:`↓ ${bL(ac.network?.rxBytesPerSecond)}/s`,sublabel:`↑ ${bL(ac.network?.txBytesPerSecond)}/s`,colorClass:"text-cyan-500"}),(0,i.jsx)(bQ,{icon:"hard_drive",label:"Disk root",value:`${bL(ae?.freeBytes)} trống`,sublabel:`${ae?.device||"root"} \xb7 ${ae?.filesystem||"filesystem"}`,colorClass:"text-violet-500"}),(0,i.jsx)(bQ,{icon:"memory",label:"Swap",value:bL(ac.memory?.swapUsedBytes),sublabel:`Tổng ${bL(ac.memory?.swapTotalBytes)}`,colorClass:"text-amber-500"})]}),(0,i.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,i.jsx)(bR,{data:af,dataKey:"cpu",label:"CPU usage",color:"#3b9dec"}),(0,i.jsx)(bR,{data:af,dataKey:"memory",label:"RAM usage",color:"#8b5cf6"})]}),(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{className:"mb-4 flex items-center gap-2",children:[(0,i.jsx)("span",{className:"h-5 w-1 rounded-full bg-emerald-500"}),(0,i.jsxs)("h3",{className:"font-semibold text-text-main",children:["NVIDIA GPU (",ac.gpus?.length||0,")"]})]}),ac.gpus?.length?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(bU,{data:af,gpus:ac.gpus}),(0,i.jsx)("div",{className:"grid gap-5 xl:grid-cols-2",children:ac.gpus.map(a=>(0,i.jsx)(bZ,{gpu:a},a.uuid||a.index))})]}):(0,i.jsxs)("div",{className:"rounded-2xl border border-dashed border-border bg-surface-2/40 py-10 text-center text-sm text-text-muted",children:["Kh\xf4ng ph\xe1t hiện NVIDIA GPU hoặc"," ",(0,i.jsx)("span",{className:"font-mono",children:"nvidia-smi"})," chưa sẵn s\xe0ng."]})]})]}):null]}):(0,i.jsx)(bY,{server:ab,data:E,meta:G,period:C,onPeriodChange:D,loading:I,error:K}):null]}):(0,i.jsxs)("div",{className:"flex min-h-[460px] flex-col items-center justify-center rounded-3xl border border-dashed border-border bg-surface px-6 text-center",children:[(0,i.jsx)("div",{className:"flex h-20 w-20 items-center justify-center rounded-3xl bg-primary/10 text-primary",children:(0,i.jsx)("span",{className:"material-symbols-outlined text-[42px]",children:"monitor_heart"})}),(0,i.jsx)("h3",{className:"mt-6 text-xl font-semibold text-text-main",children:"Chưa c\xf3 Linux server"}),(0,i.jsx)("p",{className:"mt-2 max-w-lg text-sm leading-6 text-text-muted",children:"Th\xeam server bằng t\xe0i khoản SSH c\xf3 quyền sudo. BlueRouter sẽ tự c\xe0i agent systemd v\xe0 bắt đầu hiển thị t\xe0i nguy\xean ngay tại đ\xe2y."}),M?null:(0,i.jsx)(bE.default,{className:"mt-6",icon:"add",onClick:()=>t(!0),children:"Th\xeam server đầu ti\xean"})]}),(0,i.jsx)(b$,{open:s&&!M,onClose:()=>t(!1),onCreated:async(a,b)=>{b&&!b.ok&&B({type:"warning",text:"Đ\xe3 lưu server nhưng c\xe0i agent chưa th\xe0nh c\xf4ng. Mở server để xem log."}),await Z()}}),(0,i.jsx)(b_,{open:u&&!M,server:ab,onClose:()=>v(!1),onUpdated:async(a,b)=>{b&&!b.ok&&B({type:"warning",text:"Đ\xe3 lưu server nhưng c\xe0i lại agent chưa th\xe0nh c\xf4ng. Mở server để xem log."}),await Z()}}),(0,i.jsx)(bG.ConfirmModal,{isOpen:!!w,onClose:()=>x(null),onConfirm:ag,loading:y,variant:"danger",title:"X\xf3a server khỏi dashboard?",confirmText:"X\xf3a server",cancelText:"Hủy",message:"Server sẽ ngừng được theo d\xf5i. Agent systemd tr\xean Linux kh\xf4ng bị gỡ tự động."})]})}},11793:(a,b,c)=>{Promise.resolve().then(c.bind(c,18548))},17891:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/get-segment-param")},18548:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(48249),e=c(67484);function f({children:a}){return(0,e.useRef)([]),(0,e.useRef)(new Map),(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("style",{children:`
73
73
  .resource-monitor-sortable-host {
74
- min-width: 360px !important;
74
+ min-width: 420px !important;
75
75
  overflow: hidden;
76
76
  }
77
77
  .resource-monitor-live-metrics {
78
78
  display: grid;
79
- gap: 10px;
80
- margin-top: 12px;
79
+ gap: 12px;
80
+ margin-top: 14px;
81
81
  border-top: 1px solid var(--color-border-subtle);
82
- padding-top: 10px;
82
+ padding-top: 12px;
83
83
  padding-right: 2px;
84
84
  pointer-events: none;
85
85
  text-align: left;
@@ -87,9 +87,9 @@
87
87
  .resource-live-section {
88
88
  min-width: 0;
89
89
  border: 1px solid var(--color-border-subtle);
90
- border-radius: 12px;
90
+ border-radius: 14px;
91
91
  background: color-mix(in srgb, var(--color-surface-2) 62%, var(--color-surface));
92
- padding: 10px 11px;
92
+ padding: 13px 14px;
93
93
  }
94
94
  .resource-live-section-head {
95
95
  display: flex;
@@ -97,25 +97,25 @@
97
97
  align-items: center;
98
98
  justify-content: space-between;
99
99
  gap: 8px;
100
- margin-bottom: 8px;
100
+ margin-bottom: 10px;
101
101
  }
102
102
  .resource-live-section-title {
103
103
  display: inline-flex;
104
104
  min-width: 0;
105
105
  align-items: center;
106
- gap: 6px;
106
+ gap: 7px;
107
107
  color: var(--color-text-main);
108
- font-size: 12px;
108
+ font-size: 14px;
109
109
  font-weight: 750;
110
110
  letter-spacing: .01em;
111
111
  }
112
112
  .resource-live-section-icon {
113
113
  color: #10b981;
114
- font-size: 16px;
114
+ font-size: 18px;
115
115
  }
116
116
  .resource-live-state-dot {
117
- width: 7px;
118
- height: 7px;
117
+ width: 8px;
118
+ height: 8px;
119
119
  flex: 0 0 auto;
120
120
  border-radius: 999px;
121
121
  background: #10b981;
@@ -140,28 +140,28 @@
140
140
  flex: 0 0 auto;
141
141
  border-radius: 999px;
142
142
  background: var(--color-surface);
143
- padding: 2px 7px;
143
+ padding: 3px 9px;
144
144
  color: var(--color-text-muted);
145
- font-size: 10.5px;
145
+ font-size: 12px;
146
146
  font-weight: 700;
147
147
  }
148
148
  .resource-live-muted {
149
149
  min-width: 0;
150
150
  overflow: hidden;
151
151
  color: var(--color-text-subtle);
152
- font-size: 10.5px;
152
+ font-size: 12px;
153
153
  text-overflow: ellipsis;
154
154
  white-space: nowrap;
155
155
  }
156
156
  .resource-vllm-summary-grid {
157
157
  display: flex;
158
158
  flex-wrap: wrap;
159
- gap: 5px 8px;
160
- margin-bottom: 8px;
159
+ gap: 6px 10px;
160
+ margin-bottom: 10px;
161
161
  color: var(--color-text-muted);
162
162
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
163
- font-size: 10.5px;
164
- line-height: 1.4;
163
+ font-size: 12.5px;
164
+ line-height: 1.45;
165
165
  }
166
166
  .resource-vllm-summary-grid span {
167
167
  white-space: nowrap;
@@ -182,20 +182,20 @@
182
182
  color: #c4b5fd !important;
183
183
  }
184
184
  .resource-live-caption {
185
- margin-top: 7px;
185
+ margin-top: 9px;
186
186
  color: var(--color-text-subtle);
187
- font-size: 10px;
188
- line-height: 1.4;
187
+ font-size: 11.5px;
188
+ line-height: 1.45;
189
189
  }
190
190
  .resource-vllm-instances {
191
191
  display: grid;
192
- gap: 6px;
193
- margin-top: 8px;
192
+ gap: 8px;
193
+ margin-top: 10px;
194
194
  }
195
195
  .resource-vllm-instance {
196
196
  min-width: 0;
197
197
  border-top: 1px dashed var(--color-border-subtle);
198
- padding-top: 7px;
198
+ padding-top: 9px;
199
199
  }
200
200
  .resource-vllm-instance:first-child {
201
201
  border-top: 0;
@@ -206,14 +206,14 @@
206
206
  min-width: 0;
207
207
  align-items: center;
208
208
  justify-content: space-between;
209
- gap: 7px;
209
+ gap: 8px;
210
210
  }
211
211
  .resource-vllm-instance-title {
212
212
  min-width: 0;
213
213
  overflow: hidden;
214
214
  color: var(--color-text-main);
215
215
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
216
- font-size: 10.5px;
216
+ font-size: 12.5px;
217
217
  font-weight: 700;
218
218
  text-overflow: ellipsis;
219
219
  white-space: nowrap;
@@ -223,39 +223,41 @@
223
223
  overflow: hidden;
224
224
  border-radius: 999px;
225
225
  background: color-mix(in srgb, var(--color-brand-500) 8%, transparent);
226
- padding: 2px 6px;
226
+ padding: 3px 8px;
227
227
  color: var(--color-primary);
228
- font-size: 9.5px;
228
+ font-size: 11px;
229
229
  font-weight: 650;
230
230
  text-overflow: ellipsis;
231
231
  white-space: nowrap;
232
232
  }
233
233
  .resource-vllm-instance-sub {
234
- margin-top: 3px;
234
+ margin-top: 4px;
235
235
  overflow: hidden;
236
236
  color: var(--color-text-subtle);
237
237
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
238
- font-size: 9.5px;
238
+ font-size: 11.5px;
239
239
  text-overflow: ellipsis;
240
240
  white-space: nowrap;
241
241
  }
242
242
  .resource-vllm-instance-stats {
243
243
  display: flex;
244
244
  min-width: 0;
245
- flex-wrap: nowrap;
245
+ flex-wrap: wrap;
246
246
  align-items: center;
247
- justify-content: space-between;
248
- gap: 5px;
249
- margin-top: 5px;
250
- overflow: hidden;
247
+ gap: 5px 10px;
248
+ margin-top: 6px;
251
249
  color: var(--color-text-muted);
252
250
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
253
- font-size: 9.5px;
251
+ font-size: 11.5px;
254
252
  white-space: nowrap;
255
253
  }
256
254
  .resource-vllm-instance-stats span {
257
255
  flex: 0 0 auto;
258
256
  }
257
+ .resource-vllm-instance-stats .resource-vllm-throughput {
258
+ flex-basis: 100%;
259
+ margin-top: 3px;
260
+ }
259
261
  .resource-vllm-instance-stats b {
260
262
  color: var(--color-text-main);
261
263
  font-weight: 750;
@@ -264,7 +266,7 @@
264
266
  color: var(--color-text-subtle);
265
267
  }
266
268
  .resource-live-bar + .resource-live-bar {
267
- margin-top: 7px;
269
+ margin-top: 9px;
268
270
  }
269
271
  .resource-live-bar-head,
270
272
  .resource-live-value-row {
@@ -272,10 +274,10 @@
272
274
  align-items: center;
273
275
  justify-content: space-between;
274
276
  gap: 8px;
275
- margin-bottom: 4px;
277
+ margin-bottom: 5px;
276
278
  color: var(--color-text-muted);
277
- font-size: 10px;
278
- line-height: 1.25;
279
+ font-size: 12px;
280
+ line-height: 1.3;
279
281
  }
280
282
  .resource-live-bar-head strong,
281
283
  .resource-live-value-row strong {
@@ -284,7 +286,7 @@
284
286
  white-space: nowrap;
285
287
  }
286
288
  .resource-live-bar-track {
287
- height: 4px;
289
+ height: 5px;
288
290
  overflow: hidden;
289
291
  border-radius: 999px;
290
292
  background: color-mix(in srgb, var(--color-border) 58%, transparent);
@@ -304,40 +306,40 @@
304
306
  .resource-live-bar-warning { --resource-bar-color: #f59e0b; }
305
307
  .resource-gpu-list {
306
308
  display: grid;
307
- gap: 9px;
309
+ gap: 11px;
308
310
  }
309
311
  .resource-gpu-row {
310
312
  min-width: 0;
311
313
  }
312
314
  .resource-gpu-row + .resource-gpu-row {
313
315
  border-top: 1px dashed var(--color-border-subtle);
314
- padding-top: 9px;
316
+ padding-top: 11px;
315
317
  }
316
318
  .resource-gpu-head {
317
319
  display: flex;
318
320
  align-items: center;
319
321
  justify-content: space-between;
320
322
  gap: 8px;
321
- margin-bottom: 7px;
323
+ margin-bottom: 8px;
322
324
  }
323
325
  .resource-gpu-name {
324
326
  color: var(--color-text-main);
325
- font-size: 10.5px;
327
+ font-size: 13px;
326
328
  font-weight: 750;
327
329
  }
328
330
  .resource-gpu-temp {
329
331
  display: inline-flex;
330
332
  align-items: center;
331
- gap: 2px;
333
+ gap: 3px;
332
334
  border-radius: 999px;
333
335
  background: color-mix(in srgb, #f59e0b 8%, transparent);
334
- padding: 2px 6px;
336
+ padding: 3px 8px;
335
337
  color: #b45309;
336
- font-size: 10px;
338
+ font-size: 12px;
337
339
  font-weight: 700;
338
340
  }
339
341
  .resource-gpu-temp .material-symbols-outlined {
340
- font-size: 13px;
342
+ font-size: 15px;
341
343
  }
342
344
  .resource-vllm-metric-guide {
343
345
  margin-top: 10px;
@@ -437,7 +439,7 @@
437
439
  }
438
440
  @media (max-width: 760px) {
439
441
  .resource-monitor-sortable-host {
440
- min-width: min(340px, calc(100vw - 48px)) !important;
442
+ min-width: min(380px, calc(100vw - 48px)) !important;
441
443
  }
442
444
  .resource-vllm-guide-grid {
443
445
  grid-template-columns: repeat(2, minmax(0, 1fr));