@jheavenknows/bluerouter 4.0.11 → 4.0.13

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 (1263) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/required-server-files.json +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +2 -2
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +2 -2
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +2 -2
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +2 -2
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +2 -2
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +2 -2
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  81. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  84. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  85. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  86. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  87. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  88. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  89. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  90. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  91. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  92. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  94. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  95. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  96. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  97. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  98. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  99. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  100. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  101. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  102. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  118. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  120. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  129. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  131. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  135. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  137. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  139. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  143. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  147. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +2 -2
  149. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  153. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +2 -2
  155. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js +1 -1
  161. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js +1 -1
  163. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js +1 -1
  165. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js +1 -1
  167. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  177. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  193. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  220. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  221. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  222. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/provider-health/route.js +1 -1
  224. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  226. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  228. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  235. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  237. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  238. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  239. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  240. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  242. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  245. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  247. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  249. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  251. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  252. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  253. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  255. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  257. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  261. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js +1 -1
  263. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  265. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/settings/route.js +1 -1
  267. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  271. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  273. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  277. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  279. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  281. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  283. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  292. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  297. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  299. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  303. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  305. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/usage/stream/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  319. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  320. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  321. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  322. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  323. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +1 -1
  324. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  325. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  331. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  332. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  333. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  334. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  335. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  336. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  337. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  338. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  339. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  340. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  341. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  342. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  343. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  344. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  345. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  346. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  347. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  349. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  351. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  355. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  356. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  357. package/app/.next-cli-build/server/app/callback.html +1 -1
  358. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  359. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  360. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  361. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  362. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  363. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +6 -6
  367. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +2 -2
  368. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  371. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +6 -6
  372. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +4 -4
  374. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +6 -6
  377. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  378. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  379. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  381. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +6 -6
  382. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +4 -4
  384. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  387. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  388. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  389. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  391. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  392. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  394. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  395. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  397. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  398. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  399. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  400. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  401. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  402. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  404. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  405. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  407. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  408. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  409. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  410. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  411. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  412. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  414. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  415. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  416. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  417. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  419. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  421. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  422. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  424. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  427. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  428. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  429. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  431. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  433. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  434. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  435. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  436. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  438. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  439. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  441. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  443. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  444. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  445. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  446. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  448. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  449. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  450. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  451. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  452. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  453. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  454. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  455. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  456. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  457. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +5 -5
  458. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  459. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  460. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  461. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  462. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +5 -5
  463. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  464. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +4 -4
  465. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  466. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  467. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +5 -5
  468. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  470. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  471. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  472. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +5 -5
  473. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  474. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +4 -4
  475. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  476. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  477. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  478. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  479. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  480. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  481. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  482. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  483. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  484. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  485. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  486. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  487. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  488. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  489. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  490. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  491. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  492. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  493. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  494. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  495. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  496. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  497. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  498. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  499. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  500. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  501. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  502. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  503. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  504. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  505. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  506. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  507. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  508. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  509. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  510. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  511. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  512. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  513. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  514. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  515. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  516. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  517. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  518. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  519. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  520. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  521. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  522. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  523. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  524. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  525. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  526. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  527. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  528. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  529. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  530. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  531. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  532. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  533. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  534. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  535. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  536. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  537. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  538. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  539. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  540. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  541. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  542. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  543. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  544. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  545. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  546. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  547. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  548. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  549. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  550. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  551. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  552. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  553. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  554. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  555. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  556. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  557. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  558. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  559. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  560. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  561. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  562. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  563. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  564. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  565. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  566. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  567. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  568. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  569. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  570. package/app/.next-cli-build/server/app/index.html +1 -1
  571. package/app/.next-cli-build/server/app/index.rsc +4 -4
  572. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  573. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  574. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  575. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  576. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  577. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  578. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  579. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  580. package/app/.next-cli-build/server/app/landing.html +1 -1
  581. package/app/.next-cli-build/server/app/landing.rsc +4 -4
  582. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  583. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  584. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  585. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  586. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  587. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  588. package/app/.next-cli-build/server/app/login/page.js +1 -1
  589. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  590. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  591. package/app/.next-cli-build/server/app/login.html +1 -1
  592. package/app/.next-cli-build/server/app/login.rsc +5 -5
  593. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +5 -5
  594. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  595. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  596. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  597. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  598. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  599. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  600. package/app/.next-cli-build/server/app/page.js +1 -1
  601. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  602. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  603. package/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  604. package/app/.next-cli-build/server/chunks/2338.js +3 -3
  605. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  606. package/app/.next-cli-build/server/chunks/3913.js +64 -0
  607. package/app/.next-cli-build/server/chunks/402.js +1 -1
  608. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  609. package/app/.next-cli-build/server/chunks/4803.js +1 -1
  610. package/app/.next-cli-build/server/chunks/5199.js +1 -1
  611. package/app/.next-cli-build/server/chunks/6604.js +1 -1
  612. package/app/.next-cli-build/server/chunks/7130.js +1 -1
  613. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  614. package/app/.next-cli-build/server/chunks/7774.js +2 -2
  615. package/app/.next-cli-build/server/chunks/7965.js +1 -1
  616. package/app/.next-cli-build/server/chunks/8520.js +1 -1
  617. package/app/.next-cli-build/server/chunks/9489.js +1 -1
  618. package/app/.next-cli-build/server/instrumentation.js +1 -1
  619. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  620. package/app/.next-cli-build/server/middleware.js +1 -1
  621. package/app/.next-cli-build/server/pages/404.html +1 -1
  622. package/app/.next-cli-build/server/pages/500.html +1 -1
  623. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  624. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  625. package/app/.next-cli-build/static/chunks/1051-eec0f271123ef82f.js +64 -0
  626. package/app/.next-cli-build/static/chunks/{5497-ce954c5879356437.js → 5497-870b5871cedc0773.js} +1 -1
  627. package/app/.next-cli-build/static/chunks/{620-9b552f55170b689e.js → 620-1d22bf3692e5d9a1.js} +1 -1
  628. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/analytics/page-b9c37490439d0251.js +1 -0
  629. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-72e184938f05df76.js → page-14652e1e3f23d4e2.js} +1 -1
  630. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-4308e0b6f3d8403d.js → page-b695d2f55cd6af03.js} +1 -1
  631. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-9034072dfa0105a7.js → page-01933493e3363a09.js} +1 -1
  632. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-f995a0c42926bd26.js → page-38ed8bfcbff79895.js} +1 -1
  633. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-736f021a9dfcae43.js +1 -0
  634. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-542bcb64915fdf7a.js → page-f896fc077aa42dd3.js} +1 -1
  635. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/{page-7c0aa594e13a03e4.js → page-caccf16e222355f2.js} +1 -1
  636. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-d54c6fd49daa5492.js → page-1708f027fd5082f7.js} +1 -1
  637. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-c333349ef4f702ea.js → page-4196202cf3f283b2.js} +1 -1
  638. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-3eb3aa8fce4e9fca.js → page-b89c7420bae22256.js} +1 -1
  639. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-bd9b7161f474edd2.js → page-1270ed400b7de918.js} +1 -1
  640. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/{page-54d1a2f86248c78f.js → page-546f317cda8ecaa3.js} +1 -1
  641. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/{page-7c0aa594e13a03e4.js → page-caccf16e222355f2.js} +1 -1
  642. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-26cc3553a595d900.js → page-3c2cc260fa5c3c0c.js} +1 -1
  643. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-6fca0372fe983e90.js → page-62f9b3e0a1cde612.js} +1 -1
  644. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-2acb54313cbe19b9.js → page-a4e48c6734079591.js} +1 -1
  645. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-4269c3e96ee1766d.js → page-92f63ce188ab0114.js} +1 -1
  646. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-b73c6d5dd2a69b38.js → page-a411567133fd5c37.js} +1 -1
  647. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-d62fea52c76a298a.js → page-9fc6922c510f9354.js} +1 -1
  648. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-605f635e10f7c8ce.js → page-897405b2761abb0b.js} +1 -1
  649. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-17fbcb9cd6d99545.js → page-12b90445ca91aa88.js} +1 -1
  650. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-4b6fb89cc79d45dc.js → layout-872e9f4deabd99c8.js} +1 -1
  651. package/app/.next-cli-build/static/chunks/app/login/page-83edcccc82f976e7.js +1 -0
  652. package/app/.next-cli-build/static/css/f0a3543a32f5e4b0.css +1 -0
  653. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-4.0.10-to-4.0.11-4.0.11-20260618-193244 → upgrade-3.0.23-to-3.0.24-3.0.24-20260618-162339}/data.sqlite +0 -0
  654. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-4.0.6-to-4.0.7-4.0.7-20260618-185720 → upgrade-3.0.24-to-3.0.25-3.0.25-20260618-163352}/data.sqlite +0 -0
  655. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-4.0.7-to-4.0.8-4.0.8-20260618-190228 → upgrade-3.0.25-to-4.0.2-4.0.2-20260618-164820}/data.sqlite +0 -0
  656. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-4.0.8-to-4.0.9-4.0.9-20260618-191252 → upgrade-4.0.2-to-4.0.3-4.0.3-20260618-171158}/data.sqlite +0 -0
  657. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-4.0.3-to-4.0.13-4.0.13-20260619-102745/data.sqlite +0 -0
  658. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  659. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  660. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  661. package/app/cli/.build-home/AppData/Roaming/bluerouter/jwt-secret +1 -1
  662. package/app/cli/.build-home/AppData/Roaming/bluerouter/machine-id +1 -1
  663. package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +3 -3
  664. package/app/node_modules/baseline-browser-mapping/dist/index.cjs +1 -1
  665. package/app/node_modules/baseline-browser-mapping/package.json +2 -2
  666. package/app/node_modules/caniuse-lite/data/agents.js +1 -1
  667. package/app/node_modules/caniuse-lite/data/browserVersions.js +1 -1
  668. package/app/node_modules/caniuse-lite/data/features/aac.js +1 -1
  669. package/app/node_modules/caniuse-lite/data/features/abortcontroller.js +1 -1
  670. package/app/node_modules/caniuse-lite/data/features/ac3-ec3.js +1 -1
  671. package/app/node_modules/caniuse-lite/data/features/accelerometer.js +1 -1
  672. package/app/node_modules/caniuse-lite/data/features/addeventlistener.js +1 -1
  673. package/app/node_modules/caniuse-lite/data/features/alternate-stylesheet.js +1 -1
  674. package/app/node_modules/caniuse-lite/data/features/ambient-light.js +1 -1
  675. package/app/node_modules/caniuse-lite/data/features/apng.js +1 -1
  676. package/app/node_modules/caniuse-lite/data/features/array-find-index.js +1 -1
  677. package/app/node_modules/caniuse-lite/data/features/array-find.js +1 -1
  678. package/app/node_modules/caniuse-lite/data/features/array-flat.js +1 -1
  679. package/app/node_modules/caniuse-lite/data/features/array-includes.js +1 -1
  680. package/app/node_modules/caniuse-lite/data/features/arrow-functions.js +1 -1
  681. package/app/node_modules/caniuse-lite/data/features/asmjs.js +1 -1
  682. package/app/node_modules/caniuse-lite/data/features/async-clipboard.js +1 -1
  683. package/app/node_modules/caniuse-lite/data/features/async-functions.js +1 -1
  684. package/app/node_modules/caniuse-lite/data/features/atob-btoa.js +1 -1
  685. package/app/node_modules/caniuse-lite/data/features/audio-api.js +1 -1
  686. package/app/node_modules/caniuse-lite/data/features/audio.js +1 -1
  687. package/app/node_modules/caniuse-lite/data/features/audiotracks.js +1 -1
  688. package/app/node_modules/caniuse-lite/data/features/autofocus.js +1 -1
  689. package/app/node_modules/caniuse-lite/data/features/auxclick.js +1 -1
  690. package/app/node_modules/caniuse-lite/data/features/av1.js +1 -1
  691. package/app/node_modules/caniuse-lite/data/features/avif.js +1 -1
  692. package/app/node_modules/caniuse-lite/data/features/background-attachment.js +1 -1
  693. package/app/node_modules/caniuse-lite/data/features/background-clip-text.js +1 -1
  694. package/app/node_modules/caniuse-lite/data/features/background-img-opts.js +1 -1
  695. package/app/node_modules/caniuse-lite/data/features/background-position-x-y.js +1 -1
  696. package/app/node_modules/caniuse-lite/data/features/background-repeat-round-space.js +1 -1
  697. package/app/node_modules/caniuse-lite/data/features/background-sync.js +1 -1
  698. package/app/node_modules/caniuse-lite/data/features/battery-status.js +1 -1
  699. package/app/node_modules/caniuse-lite/data/features/beacon.js +1 -1
  700. package/app/node_modules/caniuse-lite/data/features/beforeafterprint.js +1 -1
  701. package/app/node_modules/caniuse-lite/data/features/bigint.js +1 -1
  702. package/app/node_modules/caniuse-lite/data/features/blobbuilder.js +1 -1
  703. package/app/node_modules/caniuse-lite/data/features/bloburls.js +1 -1
  704. package/app/node_modules/caniuse-lite/data/features/border-image.js +1 -1
  705. package/app/node_modules/caniuse-lite/data/features/border-radius.js +1 -1
  706. package/app/node_modules/caniuse-lite/data/features/broadcastchannel.js +1 -1
  707. package/app/node_modules/caniuse-lite/data/features/brotli.js +1 -1
  708. package/app/node_modules/caniuse-lite/data/features/calc.js +1 -1
  709. package/app/node_modules/caniuse-lite/data/features/canvas-blending.js +1 -1
  710. package/app/node_modules/caniuse-lite/data/features/canvas-text.js +1 -1
  711. package/app/node_modules/caniuse-lite/data/features/canvas.js +1 -1
  712. package/app/node_modules/caniuse-lite/data/features/ch-unit.js +1 -1
  713. package/app/node_modules/caniuse-lite/data/features/chacha20-poly1305.js +1 -1
  714. package/app/node_modules/caniuse-lite/data/features/channel-messaging.js +1 -1
  715. package/app/node_modules/caniuse-lite/data/features/childnode-remove.js +1 -1
  716. package/app/node_modules/caniuse-lite/data/features/classlist.js +1 -1
  717. package/app/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js +1 -1
  718. package/app/node_modules/caniuse-lite/data/features/clipboard.js +1 -1
  719. package/app/node_modules/caniuse-lite/data/features/colr-v1.js +1 -1
  720. package/app/node_modules/caniuse-lite/data/features/colr.js +1 -1
  721. package/app/node_modules/caniuse-lite/data/features/comparedocumentposition.js +1 -1
  722. package/app/node_modules/caniuse-lite/data/features/console-basic.js +1 -1
  723. package/app/node_modules/caniuse-lite/data/features/console-time.js +1 -1
  724. package/app/node_modules/caniuse-lite/data/features/const.js +1 -1
  725. package/app/node_modules/caniuse-lite/data/features/constraint-validation.js +1 -1
  726. package/app/node_modules/caniuse-lite/data/features/contenteditable.js +1 -1
  727. package/app/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js +1 -1
  728. package/app/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js +1 -1
  729. package/app/node_modules/caniuse-lite/data/features/cookie-store-api.js +1 -1
  730. package/app/node_modules/caniuse-lite/data/features/cors.js +1 -1
  731. package/app/node_modules/caniuse-lite/data/features/createimagebitmap.js +1 -1
  732. package/app/node_modules/caniuse-lite/data/features/credential-management.js +1 -1
  733. package/app/node_modules/caniuse-lite/data/features/cross-document-view-transitions.js +1 -1
  734. package/app/node_modules/caniuse-lite/data/features/cryptography.js +1 -1
  735. package/app/node_modules/caniuse-lite/data/features/css-all.js +1 -1
  736. package/app/node_modules/caniuse-lite/data/features/css-anchor-positioning.js +1 -1
  737. package/app/node_modules/caniuse-lite/data/features/css-animation.js +1 -1
  738. package/app/node_modules/caniuse-lite/data/features/css-any-link.js +1 -1
  739. package/app/node_modules/caniuse-lite/data/features/css-appearance.js +1 -1
  740. package/app/node_modules/caniuse-lite/data/features/css-at-counter-style.js +1 -1
  741. package/app/node_modules/caniuse-lite/data/features/css-autofill.js +1 -1
  742. package/app/node_modules/caniuse-lite/data/features/css-backdrop-filter.js +1 -1
  743. package/app/node_modules/caniuse-lite/data/features/css-background-offsets.js +1 -1
  744. package/app/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js +1 -1
  745. package/app/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js +1 -1
  746. package/app/node_modules/caniuse-lite/data/features/css-boxshadow.js +1 -1
  747. package/app/node_modules/caniuse-lite/data/features/css-canvas.js +1 -1
  748. package/app/node_modules/caniuse-lite/data/features/css-caret-color.js +1 -1
  749. package/app/node_modules/caniuse-lite/data/features/css-cascade-layers.js +1 -1
  750. package/app/node_modules/caniuse-lite/data/features/css-cascade-scope.js +1 -1
  751. package/app/node_modules/caniuse-lite/data/features/css-case-insensitive.js +1 -1
  752. package/app/node_modules/caniuse-lite/data/features/css-clip-path.js +1 -1
  753. package/app/node_modules/caniuse-lite/data/features/css-color-adjust.js +1 -1
  754. package/app/node_modules/caniuse-lite/data/features/css-color-function.js +1 -1
  755. package/app/node_modules/caniuse-lite/data/features/css-conic-gradients.js +1 -1
  756. package/app/node_modules/caniuse-lite/data/features/css-container-queries-style.js +1 -1
  757. package/app/node_modules/caniuse-lite/data/features/css-container-queries.js +1 -1
  758. package/app/node_modules/caniuse-lite/data/features/css-container-query-units.js +1 -1
  759. package/app/node_modules/caniuse-lite/data/features/css-containment.js +1 -1
  760. package/app/node_modules/caniuse-lite/data/features/css-content-visibility.js +1 -1
  761. package/app/node_modules/caniuse-lite/data/features/css-counters.js +1 -1
  762. package/app/node_modules/caniuse-lite/data/features/css-crisp-edges.js +1 -1
  763. package/app/node_modules/caniuse-lite/data/features/css-cross-fade.js +1 -1
  764. package/app/node_modules/caniuse-lite/data/features/css-default-pseudo.js +1 -1
  765. package/app/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js +1 -1
  766. package/app/node_modules/caniuse-lite/data/features/css-deviceadaptation.js +1 -1
  767. package/app/node_modules/caniuse-lite/data/features/css-dir-pseudo.js +1 -1
  768. package/app/node_modules/caniuse-lite/data/features/css-display-contents.js +1 -1
  769. package/app/node_modules/caniuse-lite/data/features/css-element-function.js +1 -1
  770. package/app/node_modules/caniuse-lite/data/features/css-env-function.js +1 -1
  771. package/app/node_modules/caniuse-lite/data/features/css-exclusions.js +1 -1
  772. package/app/node_modules/caniuse-lite/data/features/css-featurequeries.js +1 -1
  773. package/app/node_modules/caniuse-lite/data/features/css-file-selector-button.js +1 -1
  774. package/app/node_modules/caniuse-lite/data/features/css-filter-function.js +1 -1
  775. package/app/node_modules/caniuse-lite/data/features/css-filters.js +1 -1
  776. package/app/node_modules/caniuse-lite/data/features/css-first-letter.js +1 -1
  777. package/app/node_modules/caniuse-lite/data/features/css-first-line.js +1 -1
  778. package/app/node_modules/caniuse-lite/data/features/css-fixed.js +1 -1
  779. package/app/node_modules/caniuse-lite/data/features/css-focus-visible.js +1 -1
  780. package/app/node_modules/caniuse-lite/data/features/css-focus-within.js +1 -1
  781. package/app/node_modules/caniuse-lite/data/features/css-font-palette.js +1 -1
  782. package/app/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js +1 -1
  783. package/app/node_modules/caniuse-lite/data/features/css-font-stretch.js +1 -1
  784. package/app/node_modules/caniuse-lite/data/features/css-gencontent.js +1 -1
  785. package/app/node_modules/caniuse-lite/data/features/css-gradients.js +1 -1
  786. package/app/node_modules/caniuse-lite/data/features/css-grid-animation.js +1 -1
  787. package/app/node_modules/caniuse-lite/data/features/css-grid-lanes.js +1 -1
  788. package/app/node_modules/caniuse-lite/data/features/css-grid.js +1 -1
  789. package/app/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js +1 -1
  790. package/app/node_modules/caniuse-lite/data/features/css-has.js +1 -1
  791. package/app/node_modules/caniuse-lite/data/features/css-hyphens.js +1 -1
  792. package/app/node_modules/caniuse-lite/data/features/css-if.js +1 -1
  793. package/app/node_modules/caniuse-lite/data/features/css-image-orientation.js +1 -1
  794. package/app/node_modules/caniuse-lite/data/features/css-image-set.js +1 -1
  795. package/app/node_modules/caniuse-lite/data/features/css-in-out-of-range.js +1 -1
  796. package/app/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js +1 -1
  797. package/app/node_modules/caniuse-lite/data/features/css-initial-letter.js +1 -1
  798. package/app/node_modules/caniuse-lite/data/features/css-initial-value.js +1 -1
  799. package/app/node_modules/caniuse-lite/data/features/css-lch-lab.js +1 -1
  800. package/app/node_modules/caniuse-lite/data/features/css-letter-spacing.js +1 -1
  801. package/app/node_modules/caniuse-lite/data/features/css-line-clamp.js +1 -1
  802. package/app/node_modules/caniuse-lite/data/features/css-logical-props.js +1 -1
  803. package/app/node_modules/caniuse-lite/data/features/css-marker-pseudo.js +1 -1
  804. package/app/node_modules/caniuse-lite/data/features/css-masks.js +1 -1
  805. package/app/node_modules/caniuse-lite/data/features/css-matches-pseudo.js +1 -1
  806. package/app/node_modules/caniuse-lite/data/features/css-math-functions.js +1 -1
  807. package/app/node_modules/caniuse-lite/data/features/css-media-interaction.js +1 -1
  808. package/app/node_modules/caniuse-lite/data/features/css-media-range-syntax.js +1 -1
  809. package/app/node_modules/caniuse-lite/data/features/css-media-resolution.js +1 -1
  810. package/app/node_modules/caniuse-lite/data/features/css-media-scripting.js +1 -1
  811. package/app/node_modules/caniuse-lite/data/features/css-mediaqueries.js +1 -1
  812. package/app/node_modules/caniuse-lite/data/features/css-mixblendmode.js +1 -1
  813. package/app/node_modules/caniuse-lite/data/features/css-module-scripts.js +1 -1
  814. package/app/node_modules/caniuse-lite/data/features/css-motion-paths.js +1 -1
  815. package/app/node_modules/caniuse-lite/data/features/css-namespaces.js +1 -1
  816. package/app/node_modules/caniuse-lite/data/features/css-nesting.js +1 -1
  817. package/app/node_modules/caniuse-lite/data/features/css-not-sel-list.js +1 -1
  818. package/app/node_modules/caniuse-lite/data/features/css-nth-child-of.js +1 -1
  819. package/app/node_modules/caniuse-lite/data/features/css-opacity.js +1 -1
  820. package/app/node_modules/caniuse-lite/data/features/css-optional-pseudo.js +1 -1
  821. package/app/node_modules/caniuse-lite/data/features/css-overflow-anchor.js +1 -1
  822. package/app/node_modules/caniuse-lite/data/features/css-overflow-overlay.js +1 -1
  823. package/app/node_modules/caniuse-lite/data/features/css-overflow.js +1 -1
  824. package/app/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js +1 -1
  825. package/app/node_modules/caniuse-lite/data/features/css-page-break.js +1 -1
  826. package/app/node_modules/caniuse-lite/data/features/css-paged-media.js +1 -1
  827. package/app/node_modules/caniuse-lite/data/features/css-paint-api.js +1 -1
  828. package/app/node_modules/caniuse-lite/data/features/css-placeholder-shown.js +1 -1
  829. package/app/node_modules/caniuse-lite/data/features/css-placeholder.js +1 -1
  830. package/app/node_modules/caniuse-lite/data/features/css-print-color-adjust.js +1 -1
  831. package/app/node_modules/caniuse-lite/data/features/css-read-only-write.js +1 -1
  832. package/app/node_modules/caniuse-lite/data/features/css-rebeccapurple.js +1 -1
  833. package/app/node_modules/caniuse-lite/data/features/css-reflections.js +1 -1
  834. package/app/node_modules/caniuse-lite/data/features/css-regions.js +1 -1
  835. package/app/node_modules/caniuse-lite/data/features/css-relative-colors.js +1 -1
  836. package/app/node_modules/caniuse-lite/data/features/css-repeating-gradients.js +1 -1
  837. package/app/node_modules/caniuse-lite/data/features/css-resize.js +1 -1
  838. package/app/node_modules/caniuse-lite/data/features/css-revert-value.js +1 -1
  839. package/app/node_modules/caniuse-lite/data/features/css-rrggbbaa.js +1 -1
  840. package/app/node_modules/caniuse-lite/data/features/css-scroll-behavior.js +1 -1
  841. package/app/node_modules/caniuse-lite/data/features/css-scrollbar.js +1 -1
  842. package/app/node_modules/caniuse-lite/data/features/css-sel2.js +1 -1
  843. package/app/node_modules/caniuse-lite/data/features/css-sel3.js +1 -1
  844. package/app/node_modules/caniuse-lite/data/features/css-selection.js +1 -1
  845. package/app/node_modules/caniuse-lite/data/features/css-shapes.js +1 -1
  846. package/app/node_modules/caniuse-lite/data/features/css-snappoints.js +1 -1
  847. package/app/node_modules/caniuse-lite/data/features/css-sticky.js +1 -1
  848. package/app/node_modules/caniuse-lite/data/features/css-subgrid.js +1 -1
  849. package/app/node_modules/caniuse-lite/data/features/css-supports-api.js +1 -1
  850. package/app/node_modules/caniuse-lite/data/features/css-table.js +1 -1
  851. package/app/node_modules/caniuse-lite/data/features/css-text-align-last.js +1 -1
  852. package/app/node_modules/caniuse-lite/data/features/css-text-box-trim.js +1 -1
  853. package/app/node_modules/caniuse-lite/data/features/css-text-indent.js +1 -1
  854. package/app/node_modules/caniuse-lite/data/features/css-text-justify.js +1 -1
  855. package/app/node_modules/caniuse-lite/data/features/css-text-orientation.js +1 -1
  856. package/app/node_modules/caniuse-lite/data/features/css-text-spacing.js +1 -1
  857. package/app/node_modules/caniuse-lite/data/features/css-text-wrap-balance.js +1 -1
  858. package/app/node_modules/caniuse-lite/data/features/css-textshadow.js +1 -1
  859. package/app/node_modules/caniuse-lite/data/features/css-touch-action.js +1 -1
  860. package/app/node_modules/caniuse-lite/data/features/css-transitions.js +1 -1
  861. package/app/node_modules/caniuse-lite/data/features/css-unicode-bidi.js +1 -1
  862. package/app/node_modules/caniuse-lite/data/features/css-unset-value.js +1 -1
  863. package/app/node_modules/caniuse-lite/data/features/css-variables.js +1 -1
  864. package/app/node_modules/caniuse-lite/data/features/css-when-else.js +1 -1
  865. package/app/node_modules/caniuse-lite/data/features/css-widows-orphans.js +1 -1
  866. package/app/node_modules/caniuse-lite/data/features/css-width-stretch.js +1 -1
  867. package/app/node_modules/caniuse-lite/data/features/css-writing-mode.js +1 -1
  868. package/app/node_modules/caniuse-lite/data/features/css-zoom.js +1 -1
  869. package/app/node_modules/caniuse-lite/data/features/css3-attr.js +1 -1
  870. package/app/node_modules/caniuse-lite/data/features/css3-boxsizing.js +1 -1
  871. package/app/node_modules/caniuse-lite/data/features/css3-colors.js +1 -1
  872. package/app/node_modules/caniuse-lite/data/features/css3-cursors-grab.js +1 -1
  873. package/app/node_modules/caniuse-lite/data/features/css3-cursors-newer.js +1 -1
  874. package/app/node_modules/caniuse-lite/data/features/css3-cursors.js +1 -1
  875. package/app/node_modules/caniuse-lite/data/features/css3-tabsize.js +1 -1
  876. package/app/node_modules/caniuse-lite/data/features/currentcolor.js +1 -1
  877. package/app/node_modules/caniuse-lite/data/features/custom-elements.js +1 -1
  878. package/app/node_modules/caniuse-lite/data/features/custom-elementsv1.js +1 -1
  879. package/app/node_modules/caniuse-lite/data/features/customevent.js +1 -1
  880. package/app/node_modules/caniuse-lite/data/features/customizable-select.js +1 -1
  881. package/app/node_modules/caniuse-lite/data/features/datalist.js +1 -1
  882. package/app/node_modules/caniuse-lite/data/features/dataset.js +1 -1
  883. package/app/node_modules/caniuse-lite/data/features/datauri.js +1 -1
  884. package/app/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js +1 -1
  885. package/app/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js +1 -1
  886. package/app/node_modules/caniuse-lite/data/features/decorators.js +1 -1
  887. package/app/node_modules/caniuse-lite/data/features/details.js +1 -1
  888. package/app/node_modules/caniuse-lite/data/features/deviceorientation.js +1 -1
  889. package/app/node_modules/caniuse-lite/data/features/devicepixelratio.js +1 -1
  890. package/app/node_modules/caniuse-lite/data/features/dialog.js +1 -1
  891. package/app/node_modules/caniuse-lite/data/features/dispatchevent.js +1 -1
  892. package/app/node_modules/caniuse-lite/data/features/dnssec.js +1 -1
  893. package/app/node_modules/caniuse-lite/data/features/do-not-track.js +1 -1
  894. package/app/node_modules/caniuse-lite/data/features/document-currentscript.js +1 -1
  895. package/app/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js +1 -1
  896. package/app/node_modules/caniuse-lite/data/features/document-execcommand.js +1 -1
  897. package/app/node_modules/caniuse-lite/data/features/document-policy.js +1 -1
  898. package/app/node_modules/caniuse-lite/data/features/document-scrollingelement.js +1 -1
  899. package/app/node_modules/caniuse-lite/data/features/documenthead.js +1 -1
  900. package/app/node_modules/caniuse-lite/data/features/dom-manip-convenience.js +1 -1
  901. package/app/node_modules/caniuse-lite/data/features/dom-range.js +1 -1
  902. package/app/node_modules/caniuse-lite/data/features/domcontentloaded.js +1 -1
  903. package/app/node_modules/caniuse-lite/data/features/dommatrix.js +1 -1
  904. package/app/node_modules/caniuse-lite/data/features/download.js +1 -1
  905. package/app/node_modules/caniuse-lite/data/features/dragndrop.js +1 -1
  906. package/app/node_modules/caniuse-lite/data/features/element-closest.js +1 -1
  907. package/app/node_modules/caniuse-lite/data/features/element-from-point.js +1 -1
  908. package/app/node_modules/caniuse-lite/data/features/element-scroll-methods.js +1 -1
  909. package/app/node_modules/caniuse-lite/data/features/eme.js +1 -1
  910. package/app/node_modules/caniuse-lite/data/features/eot.js +1 -1
  911. package/app/node_modules/caniuse-lite/data/features/es5.js +1 -1
  912. package/app/node_modules/caniuse-lite/data/features/es6-class.js +1 -1
  913. package/app/node_modules/caniuse-lite/data/features/es6-generators.js +1 -1
  914. package/app/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js +1 -1
  915. package/app/node_modules/caniuse-lite/data/features/es6-module.js +1 -1
  916. package/app/node_modules/caniuse-lite/data/features/es6-number.js +1 -1
  917. package/app/node_modules/caniuse-lite/data/features/es6-string-includes.js +1 -1
  918. package/app/node_modules/caniuse-lite/data/features/es6.js +1 -1
  919. package/app/node_modules/caniuse-lite/data/features/eventsource.js +1 -1
  920. package/app/node_modules/caniuse-lite/data/features/extended-system-fonts.js +1 -1
  921. package/app/node_modules/caniuse-lite/data/features/feature-policy.js +1 -1
  922. package/app/node_modules/caniuse-lite/data/features/fetch.js +1 -1
  923. package/app/node_modules/caniuse-lite/data/features/fieldset-disabled.js +1 -1
  924. package/app/node_modules/caniuse-lite/data/features/fileapi.js +1 -1
  925. package/app/node_modules/caniuse-lite/data/features/filereader.js +1 -1
  926. package/app/node_modules/caniuse-lite/data/features/filereadersync.js +1 -1
  927. package/app/node_modules/caniuse-lite/data/features/filesystem.js +1 -1
  928. package/app/node_modules/caniuse-lite/data/features/flac.js +1 -1
  929. package/app/node_modules/caniuse-lite/data/features/flexbox-gap.js +1 -1
  930. package/app/node_modules/caniuse-lite/data/features/flexbox.js +1 -1
  931. package/app/node_modules/caniuse-lite/data/features/flow-root.js +1 -1
  932. package/app/node_modules/caniuse-lite/data/features/focusin-focusout-events.js +1 -1
  933. package/app/node_modules/caniuse-lite/data/features/font-family-system-ui.js +1 -1
  934. package/app/node_modules/caniuse-lite/data/features/font-feature.js +1 -1
  935. package/app/node_modules/caniuse-lite/data/features/font-kerning.js +1 -1
  936. package/app/node_modules/caniuse-lite/data/features/font-loading.js +1 -1
  937. package/app/node_modules/caniuse-lite/data/features/font-size-adjust.js +1 -1
  938. package/app/node_modules/caniuse-lite/data/features/font-smooth.js +1 -1
  939. package/app/node_modules/caniuse-lite/data/features/font-unicode-range.js +1 -1
  940. package/app/node_modules/caniuse-lite/data/features/font-variant-alternates.js +1 -1
  941. package/app/node_modules/caniuse-lite/data/features/font-variant-numeric.js +1 -1
  942. package/app/node_modules/caniuse-lite/data/features/fontface.js +1 -1
  943. package/app/node_modules/caniuse-lite/data/features/form-attribute.js +1 -1
  944. package/app/node_modules/caniuse-lite/data/features/form-submit-attributes.js +1 -1
  945. package/app/node_modules/caniuse-lite/data/features/form-validation.js +1 -1
  946. package/app/node_modules/caniuse-lite/data/features/forms.js +1 -1
  947. package/app/node_modules/caniuse-lite/data/features/fullscreen.js +1 -1
  948. package/app/node_modules/caniuse-lite/data/features/gamepad.js +1 -1
  949. package/app/node_modules/caniuse-lite/data/features/geolocation.js +1 -1
  950. package/app/node_modules/caniuse-lite/data/features/getboundingclientrect.js +1 -1
  951. package/app/node_modules/caniuse-lite/data/features/getcomputedstyle.js +1 -1
  952. package/app/node_modules/caniuse-lite/data/features/getelementsbyclassname.js +1 -1
  953. package/app/node_modules/caniuse-lite/data/features/getrandomvalues.js +1 -1
  954. package/app/node_modules/caniuse-lite/data/features/gyroscope.js +1 -1
  955. package/app/node_modules/caniuse-lite/data/features/hardwareconcurrency.js +1 -1
  956. package/app/node_modules/caniuse-lite/data/features/hashchange.js +1 -1
  957. package/app/node_modules/caniuse-lite/data/features/heif.js +1 -1
  958. package/app/node_modules/caniuse-lite/data/features/hevc.js +1 -1
  959. package/app/node_modules/caniuse-lite/data/features/hidden.js +1 -1
  960. package/app/node_modules/caniuse-lite/data/features/high-resolution-time.js +1 -1
  961. package/app/node_modules/caniuse-lite/data/features/history.js +1 -1
  962. package/app/node_modules/caniuse-lite/data/features/html-media-capture.js +1 -1
  963. package/app/node_modules/caniuse-lite/data/features/html5semantic.js +1 -1
  964. package/app/node_modules/caniuse-lite/data/features/http-live-streaming.js +1 -1
  965. package/app/node_modules/caniuse-lite/data/features/http2.js +1 -1
  966. package/app/node_modules/caniuse-lite/data/features/http3.js +1 -1
  967. package/app/node_modules/caniuse-lite/data/features/iframe-sandbox.js +1 -1
  968. package/app/node_modules/caniuse-lite/data/features/iframe-seamless.js +1 -1
  969. package/app/node_modules/caniuse-lite/data/features/iframe-srcdoc.js +1 -1
  970. package/app/node_modules/caniuse-lite/data/features/imagecapture.js +1 -1
  971. package/app/node_modules/caniuse-lite/data/features/ime.js +1 -1
  972. package/app/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js +1 -1
  973. package/app/node_modules/caniuse-lite/data/features/import-maps.js +1 -1
  974. package/app/node_modules/caniuse-lite/data/features/imports.js +1 -1
  975. package/app/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js +1 -1
  976. package/app/node_modules/caniuse-lite/data/features/indexeddb.js +1 -1
  977. package/app/node_modules/caniuse-lite/data/features/indexeddb2.js +1 -1
  978. package/app/node_modules/caniuse-lite/data/features/inline-block.js +1 -1
  979. package/app/node_modules/caniuse-lite/data/features/innertext.js +1 -1
  980. package/app/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js +1 -1
  981. package/app/node_modules/caniuse-lite/data/features/input-color.js +1 -1
  982. package/app/node_modules/caniuse-lite/data/features/input-datetime.js +1 -1
  983. package/app/node_modules/caniuse-lite/data/features/input-email-tel-url.js +1 -1
  984. package/app/node_modules/caniuse-lite/data/features/input-event.js +1 -1
  985. package/app/node_modules/caniuse-lite/data/features/input-file-accept.js +1 -1
  986. package/app/node_modules/caniuse-lite/data/features/input-file-directory.js +1 -1
  987. package/app/node_modules/caniuse-lite/data/features/input-file-multiple.js +1 -1
  988. package/app/node_modules/caniuse-lite/data/features/input-inputmode.js +1 -1
  989. package/app/node_modules/caniuse-lite/data/features/input-minlength.js +1 -1
  990. package/app/node_modules/caniuse-lite/data/features/input-number.js +1 -1
  991. package/app/node_modules/caniuse-lite/data/features/input-pattern.js +1 -1
  992. package/app/node_modules/caniuse-lite/data/features/input-placeholder.js +1 -1
  993. package/app/node_modules/caniuse-lite/data/features/input-range.js +1 -1
  994. package/app/node_modules/caniuse-lite/data/features/input-search.js +1 -1
  995. package/app/node_modules/caniuse-lite/data/features/input-selection.js +1 -1
  996. package/app/node_modules/caniuse-lite/data/features/insert-adjacent.js +1 -1
  997. package/app/node_modules/caniuse-lite/data/features/insertadjacenthtml.js +1 -1
  998. package/app/node_modules/caniuse-lite/data/features/internationalization.js +1 -1
  999. package/app/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js +1 -1
  1000. package/app/node_modules/caniuse-lite/data/features/intersectionobserver.js +1 -1
  1001. package/app/node_modules/caniuse-lite/data/features/intl-pluralrules.js +1 -1
  1002. package/app/node_modules/caniuse-lite/data/features/intrinsic-width.js +1 -1
  1003. package/app/node_modules/caniuse-lite/data/features/jpeg2000.js +1 -1
  1004. package/app/node_modules/caniuse-lite/data/features/jpegxl.js +1 -1
  1005. package/app/node_modules/caniuse-lite/data/features/jpegxr.js +1 -1
  1006. package/app/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js +1 -1
  1007. package/app/node_modules/caniuse-lite/data/features/json.js +1 -1
  1008. package/app/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js +1 -1
  1009. package/app/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js +1 -1
  1010. package/app/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js +1 -1
  1011. package/app/node_modules/caniuse-lite/data/features/keyboardevent-code.js +1 -1
  1012. package/app/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js +1 -1
  1013. package/app/node_modules/caniuse-lite/data/features/keyboardevent-key.js +1 -1
  1014. package/app/node_modules/caniuse-lite/data/features/keyboardevent-location.js +1 -1
  1015. package/app/node_modules/caniuse-lite/data/features/keyboardevent-which.js +1 -1
  1016. package/app/node_modules/caniuse-lite/data/features/lazyload.js +1 -1
  1017. package/app/node_modules/caniuse-lite/data/features/let.js +1 -1
  1018. package/app/node_modules/caniuse-lite/data/features/link-icon-png.js +1 -1
  1019. package/app/node_modules/caniuse-lite/data/features/link-icon-svg.js +1 -1
  1020. package/app/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js +1 -1
  1021. package/app/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js +1 -1
  1022. package/app/node_modules/caniuse-lite/data/features/link-rel-preconnect.js +1 -1
  1023. package/app/node_modules/caniuse-lite/data/features/link-rel-prefetch.js +1 -1
  1024. package/app/node_modules/caniuse-lite/data/features/link-rel-preload.js +1 -1
  1025. package/app/node_modules/caniuse-lite/data/features/link-rel-prerender.js +1 -1
  1026. package/app/node_modules/caniuse-lite/data/features/loading-lazy-attr.js +1 -1
  1027. package/app/node_modules/caniuse-lite/data/features/loading-lazy-media.js +1 -1
  1028. package/app/node_modules/caniuse-lite/data/features/localecompare.js +1 -1
  1029. package/app/node_modules/caniuse-lite/data/features/magnetometer.js +1 -1
  1030. package/app/node_modules/caniuse-lite/data/features/matchesselector.js +1 -1
  1031. package/app/node_modules/caniuse-lite/data/features/matchmedia.js +1 -1
  1032. package/app/node_modules/caniuse-lite/data/features/mathml.js +1 -1
  1033. package/app/node_modules/caniuse-lite/data/features/maxlength.js +1 -1
  1034. package/app/node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js +1 -1
  1035. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js +1 -1
  1036. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js +1 -1
  1037. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js +1 -1
  1038. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js +1 -1
  1039. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js +1 -1
  1040. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js +1 -1
  1041. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js +1 -1
  1042. package/app/node_modules/caniuse-lite/data/features/media-fragments.js +1 -1
  1043. package/app/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js +1 -1
  1044. package/app/node_modules/caniuse-lite/data/features/mediarecorder.js +1 -1
  1045. package/app/node_modules/caniuse-lite/data/features/mediasource.js +1 -1
  1046. package/app/node_modules/caniuse-lite/data/features/menu.js +1 -1
  1047. package/app/node_modules/caniuse-lite/data/features/meta-theme-color.js +1 -1
  1048. package/app/node_modules/caniuse-lite/data/features/meter.js +1 -1
  1049. package/app/node_modules/caniuse-lite/data/features/midi.js +1 -1
  1050. package/app/node_modules/caniuse-lite/data/features/minmaxwh.js +1 -1
  1051. package/app/node_modules/caniuse-lite/data/features/mp3.js +1 -1
  1052. package/app/node_modules/caniuse-lite/data/features/mpeg-dash.js +1 -1
  1053. package/app/node_modules/caniuse-lite/data/features/mpeg4.js +1 -1
  1054. package/app/node_modules/caniuse-lite/data/features/multibackgrounds.js +1 -1
  1055. package/app/node_modules/caniuse-lite/data/features/multicolumn.js +1 -1
  1056. package/app/node_modules/caniuse-lite/data/features/mutation-events.js +1 -1
  1057. package/app/node_modules/caniuse-lite/data/features/mutationobserver.js +1 -1
  1058. package/app/node_modules/caniuse-lite/data/features/namevalue-storage.js +1 -1
  1059. package/app/node_modules/caniuse-lite/data/features/native-filesystem-api.js +1 -1
  1060. package/app/node_modules/caniuse-lite/data/features/nav-timing.js +1 -1
  1061. package/app/node_modules/caniuse-lite/data/features/netinfo.js +1 -1
  1062. package/app/node_modules/caniuse-lite/data/features/notifications.js +1 -1
  1063. package/app/node_modules/caniuse-lite/data/features/object-entries.js +1 -1
  1064. package/app/node_modules/caniuse-lite/data/features/object-fit.js +1 -1
  1065. package/app/node_modules/caniuse-lite/data/features/object-observe.js +1 -1
  1066. package/app/node_modules/caniuse-lite/data/features/object-values.js +1 -1
  1067. package/app/node_modules/caniuse-lite/data/features/objectrtc.js +1 -1
  1068. package/app/node_modules/caniuse-lite/data/features/offline-apps.js +1 -1
  1069. package/app/node_modules/caniuse-lite/data/features/offscreencanvas.js +1 -1
  1070. package/app/node_modules/caniuse-lite/data/features/ogg-vorbis.js +1 -1
  1071. package/app/node_modules/caniuse-lite/data/features/ogv.js +1 -1
  1072. package/app/node_modules/caniuse-lite/data/features/ol-reversed.js +1 -1
  1073. package/app/node_modules/caniuse-lite/data/features/once-event-listener.js +1 -1
  1074. package/app/node_modules/caniuse-lite/data/features/online-status.js +1 -1
  1075. package/app/node_modules/caniuse-lite/data/features/opus.js +1 -1
  1076. package/app/node_modules/caniuse-lite/data/features/orientation-sensor.js +1 -1
  1077. package/app/node_modules/caniuse-lite/data/features/outline.js +1 -1
  1078. package/app/node_modules/caniuse-lite/data/features/pad-start-end.js +1 -1
  1079. package/app/node_modules/caniuse-lite/data/features/page-transition-events.js +1 -1
  1080. package/app/node_modules/caniuse-lite/data/features/pagevisibility.js +1 -1
  1081. package/app/node_modules/caniuse-lite/data/features/passive-event-listener.js +1 -1
  1082. package/app/node_modules/caniuse-lite/data/features/passkeys.js +1 -1
  1083. package/app/node_modules/caniuse-lite/data/features/passwordrules.js +1 -1
  1084. package/app/node_modules/caniuse-lite/data/features/path2d.js +1 -1
  1085. package/app/node_modules/caniuse-lite/data/features/payment-request.js +1 -1
  1086. package/app/node_modules/caniuse-lite/data/features/pdf-viewer.js +1 -1
  1087. package/app/node_modules/caniuse-lite/data/features/permissions-api.js +1 -1
  1088. package/app/node_modules/caniuse-lite/data/features/permissions-policy.js +1 -1
  1089. package/app/node_modules/caniuse-lite/data/features/picture-in-picture.js +1 -1
  1090. package/app/node_modules/caniuse-lite/data/features/picture.js +1 -1
  1091. package/app/node_modules/caniuse-lite/data/features/ping.js +1 -1
  1092. package/app/node_modules/caniuse-lite/data/features/png-alpha.js +1 -1
  1093. package/app/node_modules/caniuse-lite/data/features/pointer-events.js +1 -1
  1094. package/app/node_modules/caniuse-lite/data/features/pointer.js +1 -1
  1095. package/app/node_modules/caniuse-lite/data/features/pointerlock.js +1 -1
  1096. package/app/node_modules/caniuse-lite/data/features/portals.js +1 -1
  1097. package/app/node_modules/caniuse-lite/data/features/prefers-color-scheme.js +1 -1
  1098. package/app/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js +1 -1
  1099. package/app/node_modules/caniuse-lite/data/features/progress.js +1 -1
  1100. package/app/node_modules/caniuse-lite/data/features/promise-finally.js +1 -1
  1101. package/app/node_modules/caniuse-lite/data/features/promises.js +1 -1
  1102. package/app/node_modules/caniuse-lite/data/features/proximity.js +1 -1
  1103. package/app/node_modules/caniuse-lite/data/features/proxy.js +1 -1
  1104. package/app/node_modules/caniuse-lite/data/features/publickeypinning.js +1 -1
  1105. package/app/node_modules/caniuse-lite/data/features/push-api.js +1 -1
  1106. package/app/node_modules/caniuse-lite/data/features/queryselector.js +1 -1
  1107. package/app/node_modules/caniuse-lite/data/features/readonly-attr.js +1 -1
  1108. package/app/node_modules/caniuse-lite/data/features/referrer-policy.js +1 -1
  1109. package/app/node_modules/caniuse-lite/data/features/registerprotocolhandler.js +1 -1
  1110. package/app/node_modules/caniuse-lite/data/features/rel-noopener.js +1 -1
  1111. package/app/node_modules/caniuse-lite/data/features/rel-noreferrer.js +1 -1
  1112. package/app/node_modules/caniuse-lite/data/features/rellist.js +1 -1
  1113. package/app/node_modules/caniuse-lite/data/features/rem.js +1 -1
  1114. package/app/node_modules/caniuse-lite/data/features/requestanimationframe.js +1 -1
  1115. package/app/node_modules/caniuse-lite/data/features/requestidlecallback.js +1 -1
  1116. package/app/node_modules/caniuse-lite/data/features/resizeobserver.js +1 -1
  1117. package/app/node_modules/caniuse-lite/data/features/resource-timing.js +1 -1
  1118. package/app/node_modules/caniuse-lite/data/features/rest-parameters.js +1 -1
  1119. package/app/node_modules/caniuse-lite/data/features/rtcpeerconnection.js +1 -1
  1120. package/app/node_modules/caniuse-lite/data/features/ruby.js +1 -1
  1121. package/app/node_modules/caniuse-lite/data/features/run-in.js +1 -1
  1122. package/app/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js +1 -1
  1123. package/app/node_modules/caniuse-lite/data/features/screen-orientation.js +1 -1
  1124. package/app/node_modules/caniuse-lite/data/features/script-async.js +1 -1
  1125. package/app/node_modules/caniuse-lite/data/features/script-defer.js +1 -1
  1126. package/app/node_modules/caniuse-lite/data/features/scrollintoview.js +1 -1
  1127. package/app/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js +1 -1
  1128. package/app/node_modules/caniuse-lite/data/features/sdch.js +1 -1
  1129. package/app/node_modules/caniuse-lite/data/features/selection-api.js +1 -1
  1130. package/app/node_modules/caniuse-lite/data/features/server-timing.js +1 -1
  1131. package/app/node_modules/caniuse-lite/data/features/serviceworkers.js +1 -1
  1132. package/app/node_modules/caniuse-lite/data/features/setimmediate.js +1 -1
  1133. package/app/node_modules/caniuse-lite/data/features/shadowdom.js +1 -1
  1134. package/app/node_modules/caniuse-lite/data/features/shadowdomv1.js +1 -1
  1135. package/app/node_modules/caniuse-lite/data/features/sharedarraybuffer.js +1 -1
  1136. package/app/node_modules/caniuse-lite/data/features/sharedworkers.js +1 -1
  1137. package/app/node_modules/caniuse-lite/data/features/sni.js +1 -1
  1138. package/app/node_modules/caniuse-lite/data/features/spdy.js +1 -1
  1139. package/app/node_modules/caniuse-lite/data/features/speech-recognition.js +1 -1
  1140. package/app/node_modules/caniuse-lite/data/features/speech-synthesis.js +1 -1
  1141. package/app/node_modules/caniuse-lite/data/features/spellcheck-attribute.js +1 -1
  1142. package/app/node_modules/caniuse-lite/data/features/sql-storage.js +1 -1
  1143. package/app/node_modules/caniuse-lite/data/features/srcset.js +1 -1
  1144. package/app/node_modules/caniuse-lite/data/features/stream.js +1 -1
  1145. package/app/node_modules/caniuse-lite/data/features/streams.js +1 -1
  1146. package/app/node_modules/caniuse-lite/data/features/stricttransportsecurity.js +1 -1
  1147. package/app/node_modules/caniuse-lite/data/features/style-scoped.js +1 -1
  1148. package/app/node_modules/caniuse-lite/data/features/subresource-bundling.js +1 -1
  1149. package/app/node_modules/caniuse-lite/data/features/subresource-integrity.js +1 -1
  1150. package/app/node_modules/caniuse-lite/data/features/svg-css.js +1 -1
  1151. package/app/node_modules/caniuse-lite/data/features/svg-filters.js +1 -1
  1152. package/app/node_modules/caniuse-lite/data/features/svg-fonts.js +1 -1
  1153. package/app/node_modules/caniuse-lite/data/features/svg-fragment.js +1 -1
  1154. package/app/node_modules/caniuse-lite/data/features/svg-html.js +1 -1
  1155. package/app/node_modules/caniuse-lite/data/features/svg-html5.js +1 -1
  1156. package/app/node_modules/caniuse-lite/data/features/svg-img.js +1 -1
  1157. package/app/node_modules/caniuse-lite/data/features/svg-smil.js +1 -1
  1158. package/app/node_modules/caniuse-lite/data/features/svg.js +1 -1
  1159. package/app/node_modules/caniuse-lite/data/features/sxg.js +1 -1
  1160. package/app/node_modules/caniuse-lite/data/features/tabindex-attr.js +1 -1
  1161. package/app/node_modules/caniuse-lite/data/features/template-literals.js +1 -1
  1162. package/app/node_modules/caniuse-lite/data/features/template.js +1 -1
  1163. package/app/node_modules/caniuse-lite/data/features/temporal.js +1 -1
  1164. package/app/node_modules/caniuse-lite/data/features/testfeat.js +1 -1
  1165. package/app/node_modules/caniuse-lite/data/features/text-decoration.js +1 -1
  1166. package/app/node_modules/caniuse-lite/data/features/text-emphasis.js +1 -1
  1167. package/app/node_modules/caniuse-lite/data/features/text-overflow.js +1 -1
  1168. package/app/node_modules/caniuse-lite/data/features/text-size-adjust.js +1 -1
  1169. package/app/node_modules/caniuse-lite/data/features/text-stroke.js +1 -1
  1170. package/app/node_modules/caniuse-lite/data/features/textcontent.js +1 -1
  1171. package/app/node_modules/caniuse-lite/data/features/textencoder.js +1 -1
  1172. package/app/node_modules/caniuse-lite/data/features/tls1-1.js +1 -1
  1173. package/app/node_modules/caniuse-lite/data/features/tls1-2.js +1 -1
  1174. package/app/node_modules/caniuse-lite/data/features/tls1-3.js +1 -1
  1175. package/app/node_modules/caniuse-lite/data/features/touch.js +1 -1
  1176. package/app/node_modules/caniuse-lite/data/features/transforms2d.js +1 -1
  1177. package/app/node_modules/caniuse-lite/data/features/transforms3d.js +1 -1
  1178. package/app/node_modules/caniuse-lite/data/features/trusted-types.js +1 -1
  1179. package/app/node_modules/caniuse-lite/data/features/ttf.js +1 -1
  1180. package/app/node_modules/caniuse-lite/data/features/typedarrays.js +1 -1
  1181. package/app/node_modules/caniuse-lite/data/features/u2f.js +1 -1
  1182. package/app/node_modules/caniuse-lite/data/features/unhandledrejection.js +1 -1
  1183. package/app/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js +1 -1
  1184. package/app/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js +1 -1
  1185. package/app/node_modules/caniuse-lite/data/features/url.js +1 -1
  1186. package/app/node_modules/caniuse-lite/data/features/urlsearchparams.js +1 -1
  1187. package/app/node_modules/caniuse-lite/data/features/use-strict.js +1 -1
  1188. package/app/node_modules/caniuse-lite/data/features/user-select-none.js +1 -1
  1189. package/app/node_modules/caniuse-lite/data/features/user-timing.js +1 -1
  1190. package/app/node_modules/caniuse-lite/data/features/variable-fonts.js +1 -1
  1191. package/app/node_modules/caniuse-lite/data/features/vector-effect.js +1 -1
  1192. package/app/node_modules/caniuse-lite/data/features/vibration.js +1 -1
  1193. package/app/node_modules/caniuse-lite/data/features/video.js +1 -1
  1194. package/app/node_modules/caniuse-lite/data/features/videotracks.js +1 -1
  1195. package/app/node_modules/caniuse-lite/data/features/view-transitions.js +1 -1
  1196. package/app/node_modules/caniuse-lite/data/features/viewport-unit-variants.js +1 -1
  1197. package/app/node_modules/caniuse-lite/data/features/viewport-units.js +1 -1
  1198. package/app/node_modules/caniuse-lite/data/features/wai-aria.js +1 -1
  1199. package/app/node_modules/caniuse-lite/data/features/wake-lock.js +1 -1
  1200. package/app/node_modules/caniuse-lite/data/features/wasm-bigint.js +1 -1
  1201. package/app/node_modules/caniuse-lite/data/features/wasm-bulk-memory.js +1 -1
  1202. package/app/node_modules/caniuse-lite/data/features/wasm-extended-const.js +1 -1
  1203. package/app/node_modules/caniuse-lite/data/features/wasm-gc.js +1 -1
  1204. package/app/node_modules/caniuse-lite/data/features/wasm-multi-memory.js +1 -1
  1205. package/app/node_modules/caniuse-lite/data/features/wasm-multi-value.js +1 -1
  1206. package/app/node_modules/caniuse-lite/data/features/wasm-mutable-globals.js +1 -1
  1207. package/app/node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js +1 -1
  1208. package/app/node_modules/caniuse-lite/data/features/wasm-reference-types.js +1 -1
  1209. package/app/node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js +1 -1
  1210. package/app/node_modules/caniuse-lite/data/features/wasm-signext.js +1 -1
  1211. package/app/node_modules/caniuse-lite/data/features/wasm-simd.js +1 -1
  1212. package/app/node_modules/caniuse-lite/data/features/wasm-tail-calls.js +1 -1
  1213. package/app/node_modules/caniuse-lite/data/features/wasm-threads.js +1 -1
  1214. package/app/node_modules/caniuse-lite/data/features/wasm.js +1 -1
  1215. package/app/node_modules/caniuse-lite/data/features/wav.js +1 -1
  1216. package/app/node_modules/caniuse-lite/data/features/wbr-element.js +1 -1
  1217. package/app/node_modules/caniuse-lite/data/features/web-animation.js +1 -1
  1218. package/app/node_modules/caniuse-lite/data/features/web-app-manifest.js +1 -1
  1219. package/app/node_modules/caniuse-lite/data/features/web-bluetooth.js +1 -1
  1220. package/app/node_modules/caniuse-lite/data/features/web-serial.js +1 -1
  1221. package/app/node_modules/caniuse-lite/data/features/web-share.js +1 -1
  1222. package/app/node_modules/caniuse-lite/data/features/webauthn.js +1 -1
  1223. package/app/node_modules/caniuse-lite/data/features/webcodecs.js +1 -1
  1224. package/app/node_modules/caniuse-lite/data/features/webgl.js +1 -1
  1225. package/app/node_modules/caniuse-lite/data/features/webgl2.js +1 -1
  1226. package/app/node_modules/caniuse-lite/data/features/webgpu.js +1 -1
  1227. package/app/node_modules/caniuse-lite/data/features/webhid.js +1 -1
  1228. package/app/node_modules/caniuse-lite/data/features/webkit-user-drag.js +1 -1
  1229. package/app/node_modules/caniuse-lite/data/features/webm.js +1 -1
  1230. package/app/node_modules/caniuse-lite/data/features/webnfc.js +1 -1
  1231. package/app/node_modules/caniuse-lite/data/features/webp.js +1 -1
  1232. package/app/node_modules/caniuse-lite/data/features/websockets.js +1 -1
  1233. package/app/node_modules/caniuse-lite/data/features/webtransport.js +1 -1
  1234. package/app/node_modules/caniuse-lite/data/features/webusb.js +1 -1
  1235. package/app/node_modules/caniuse-lite/data/features/webvr.js +1 -1
  1236. package/app/node_modules/caniuse-lite/data/features/webvtt.js +1 -1
  1237. package/app/node_modules/caniuse-lite/data/features/webworkers.js +1 -1
  1238. package/app/node_modules/caniuse-lite/data/features/webxr.js +1 -1
  1239. package/app/node_modules/caniuse-lite/data/features/will-change.js +1 -1
  1240. package/app/node_modules/caniuse-lite/data/features/woff.js +1 -1
  1241. package/app/node_modules/caniuse-lite/data/features/woff2.js +1 -1
  1242. package/app/node_modules/caniuse-lite/data/features/word-break.js +1 -1
  1243. package/app/node_modules/caniuse-lite/data/features/wordwrap.js +1 -1
  1244. package/app/node_modules/caniuse-lite/data/features/x-doc-messaging.js +1 -1
  1245. package/app/node_modules/caniuse-lite/data/features/x-frame-options.js +1 -1
  1246. package/app/node_modules/caniuse-lite/data/features/xhr2.js +1 -1
  1247. package/app/node_modules/caniuse-lite/data/features/xhtml.js +1 -1
  1248. package/app/node_modules/caniuse-lite/data/features/xhtmlsmil.js +1 -1
  1249. package/app/node_modules/caniuse-lite/data/features/xml-serializer.js +1 -1
  1250. package/app/node_modules/caniuse-lite/data/features/zstd.js +1 -1
  1251. package/app/node_modules/caniuse-lite/package.json +1 -1
  1252. package/app/package.json +1 -1
  1253. package/app/server.js +1 -1
  1254. package/package.json +1 -1
  1255. package/app/.next-cli-build/server/chunks/7013.js +0 -64
  1256. package/app/.next-cli-build/static/chunks/2649-64ab34e3d24f7ee7.js +0 -64
  1257. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/analytics/page-b835da2c5e191265.js +0 -1
  1258. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/page-ff1a4f6a25e4cf9c.js +0 -1
  1259. package/app/.next-cli-build/static/chunks/app/login/page-d18097a9c2ee4aef.js +0 -1
  1260. package/app/.next-cli-build/static/css/150d3ced4cf2d14f.css +0 -1
  1261. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-4.0.9-to-4.0.10-4.0.10-20260618-192421/data.sqlite +0 -0
  1262. /package/app/.next-cli-build/static/{t_2sU35i707oxn0AJRwXm → GAF2h093CtVDtPBMIZKkD}/_buildManifest.js +0 -0
  1263. /package/app/.next-cli-build/static/{t_2sU35i707oxn0AJRwXm → GAF2h093CtVDtPBMIZKkD}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8978],{14051:(e,t,s)=>{e.exports=s(34701)()},34701:(e,t,s)=>{"use strict";var r=s(82114);function n(){}function l(){}l.resetWarningCache=n,e.exports=function(){function e(e,t,s,n,l,a){if(a!==r){var o=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var s={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:l,resetWarningCache:n};return s.PropTypes=s,s}},39944:(e,t,s)=>{Promise.resolve().then(s.bind(s,70959))},70959:(e,t,s)=>{"use strict";s.d(t,{default:()=>X});var r=s(95155),n=s(12115),l=s(94027);let a=[{value:"today",label:"H\xf4m nay"},{value:"yesterday",label:"H\xf4m qua"},{value:"24h",label:"24 giờ"},{value:"thisWeek",label:"Tuần n\xe0y"},{value:"lastWeek",label:"Tuần trước"},{value:"7d",label:"7 ng\xe0y"},{value:"thisMonth",label:"Th\xe1ng n\xe0y"},{value:"lastMonth",label:"Th\xe1ng trước"},{value:"30d",label:"30 ng\xe0y"},{value:"60d",label:"60 ng\xe0y"},{value:"all",label:"Tất cả"},{value:"custom",label:"T\xf9y chọn"}],o=[{value:"overview",label:"Tổng quan",icon:"dashboard"},{value:"apiKeys",label:"API keys",icon:"vpn_key"},{value:"clients",label:"Client/User",icon:"groups"},{value:"sources",label:"Source IP / Tool",icon:"hub"},{value:"providers",label:"Provider / Model",icon:"dns"},{value:"experience",label:"Trải nghiệm",icon:"speed"},{value:"errors",label:"Lỗi & bất thường",icon:"warning"},{value:"raw",label:"Raw usage",icon:"table"}];function i(e,t=0){return Number(e||0).toLocaleString("vi-VN",{maximumFractionDigits:t})}function d(e){let t=Number(e||0);return Intl.NumberFormat("vi-VN",{notation:"compact",maximumFractionDigits:1}).format(t)}function c(e){let t=100*Number(e||0);return`${t.toLocaleString("vi-VN",{maximumFractionDigits:1})}%`}function x(e){let t=Number(e||0);return t?`$${t.toLocaleString("vi-VN",{minimumFractionDigits:4,maximumFractionDigits:6})}`:"$0"}function m(e){if(null==e||Number.isNaN(Number(e)))return"-";let t=Number(e);return t>=1e3?`${(t/1e3).toLocaleString("vi-VN",{maximumFractionDigits:2})}s`:`${t.toLocaleString("vi-VN",{maximumFractionDigits:0})}ms`}function u(e,t="/s"){if(null==e||Number.isNaN(Number(e)))return"-";let s=Number(e);return`${s.toLocaleString("vi-VN",{maximumFractionDigits:s>=10?1:2})}${t}`}function p(e){return null==e||Number.isNaN(Number(e))?"-":`${Number(e).toLocaleString("vi-VN",{maximumFractionDigits:0})}/100`}function h(e){if(!e)return"-";try{let t=new Date(e);if(Number.isNaN(t.getTime()))return String(e);return t.toLocaleString("vi-VN",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return String(e)}}function b(e){if(!e)return"";try{let t=new Date(e);if(Number.isNaN(t.getTime()))return String(e);return t.toLocaleString("vi-VN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1})}catch{return String(e)}}function g(...e){return e.filter(Boolean).join(" ")}function j(e,t={}){let s=new URLSearchParams;return Object.entries({...e,...t}).forEach(([e,t])=>{let r=String(t??"").trim();r&&s.set(e,r)}),s.toString()}function y({children:e,className:t=""}){return(0,r.jsx)("div",{className:g("min-w-0 rounded-2xl border border-border bg-surface p-5 shadow-sm",t),children:e})}function v({icon:e,label:t,value:s,hint:n,tone:l="blue"}){return(0,r.jsx)(y,{className:"min-h-[126px]",children:(0,r.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm font-medium text-text-muted",children:t}),(0,r.jsx)("div",{className:"mt-2 text-2xl font-semibold text-text-main",children:s}),n?(0,r.jsx)("div",{className:"mt-2 text-xs text-text-muted",children:n}):null]}),(0,r.jsx)("div",{className:g("flex h-10 w-10 items-center justify-center rounded-xl",{blue:"bg-blue-500/10 text-blue-600 dark:text-blue-300",green:"bg-green-500/10 text-green-600 dark:text-green-300",red:"bg-red-500/10 text-red-600 dark:text-red-300",amber:"bg-amber-500/10 text-amber-600 dark:text-amber-300",purple:"bg-purple-500/10 text-purple-600 dark:text-purple-300",slate:"bg-slate-500/10 text-slate-600 dark:text-slate-300"}[l]||"bg-blue-500/10 text-blue-600 dark:text-blue-300"),children:(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:e})})]})})}function k({label:e,children:t}){return(0,r.jsxs)("label",{className:"space-y-1.5 text-xs font-medium text-text-muted",children:[(0,r.jsx)("span",{children:e}),t]})}function N({value:e,onChange:t,children:s}){return(0,r.jsx)("select",{value:e||"",onChange:e=>t(e.target.value),className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none transition focus:border-primary/60 focus:ring-2 focus:ring-primary/20",children:s})}function f({value:e,onChange:t,placeholder:s="",type:n="text"}){return(0,r.jsx)("input",{value:e||"",type:n,onChange:e=>t(e.target.value),placeholder:s,className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none transition placeholder:text-text-muted/60 focus:border-primary/60 focus:ring-2 focus:ring-primary/20"})}function T(){return(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-4",children:Array.from({length:8}).map((e,t)=>(0,r.jsx)("div",{className:"h-32 animate-pulse rounded-2xl border border-border bg-surface"},t))}),(0,r.jsx)("div",{className:"h-80 animate-pulse rounded-2xl border border-border bg-surface"})]})}function w({title:e="Kh\xf4ng c\xf3 dữ liệu",description:t="Kh\xf4ng t\xecm thấy dữ liệu theo bộ lọc hiện tại."}){return(0,r.jsxs)("div",{className:"flex min-h-[180px] flex-col items-center justify-center rounded-2xl border border-dashed border-border bg-surface/60 p-8 text-center",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-4xl text-text-muted",children:"database_off"}),(0,r.jsx)("div",{className:"mt-3 text-sm font-semibold text-text-main",children:e}),(0,r.jsx)("div",{className:"mt-1 max-w-xl text-sm text-text-muted",children:t})]})}function P({data:e=[],valueKey:t="totalTokens",secondaryKey:s="requests",height:n=220}){let l=e||[],a=Math.max(...l.map(e=>Number(e[t]||0)),1),o=Math.max(...l.map(e=>Number(e[s]||0)),1);return 0===l.length?(0,r.jsx)(w,{description:"Chưa c\xf3 time-series trong khoảng thời gian n\xe0y."}):(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("div",{className:"min-w-[720px]",children:[(0,r.jsx)("div",{className:"flex items-end gap-1",style:{height:n},children:l.map((e,l)=>{let d=Math.max(2,Number(e[t]||0)/a*(n-42)),c=Math.max(2,Number(e[s]||0)/o*(n-42));return(0,r.jsx)("div",{className:"group flex flex-1 flex-col items-center justify-end gap-1",children:(0,r.jsxs)("div",{className:"relative flex h-full w-full max-w-[34px] items-end justify-center gap-0.5",children:[(0,r.jsx)("div",{className:"w-2 rounded-t bg-primary/70",style:{height:d}}),(0,r.jsx)("div",{className:"w-2 rounded-t bg-amber-500/70",style:{height:c}}),(0,r.jsxs)("div",{className:"pointer-events-none absolute bottom-full left-1/2 z-20 hidden w-56 -translate-x-1/2 rounded-xl border border-border bg-surface p-3 text-left text-xs shadow-xl group-hover:block",children:[(0,r.jsx)("div",{className:"font-semibold text-text-main",children:b(e.label)}),(0,r.jsxs)("div",{className:"mt-1 text-text-muted",children:["Request: ",i(e.requests)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["Input token: ",i(e.promptTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["Output token: ",i(e.completionTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["Tổng token: ",i(e.totalTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["Lỗi: ",i(e.errors)]})]})]})},`${e.label}-${l}`)})}),(0,r.jsxs)("div",{className:"mt-3 flex justify-between gap-2 text-[11px] text-text-muted",children:[(0,r.jsx)("span",{children:b(l[0]?.label)}),(0,r.jsx)("span",{children:b(l[Math.floor(l.length/2)]?.label)}),(0,r.jsx)("span",{children:b(l[l.length-1]?.label)})]})]})})}function S(){return(0,r.jsxs)("div",{className:"flex flex-wrap gap-3 text-xs text-text-muted",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("span",{className:"h-2.5 w-2.5 rounded-sm bg-primary/70"}),"Token"]}),(0,r.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,r.jsx)("span",{className:"h-2.5 w-2.5 rounded-sm bg-amber-500/70"}),"Request"]})]})}function q({columns:e,rows:t,empty:s="Kh\xf4ng c\xf3 dữ liệu"}){return t&&0!==t.length?(0,r.jsx)("div",{className:"overflow-x-auto overflow-y-auto rounded-2xl border border-border",style:{maxHeight:"500px"},children:(0,r.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,r.jsx)("thead",{className:"bg-background/70",children:(0,r.jsx)("tr",{children:e.map(e=>(0,r.jsx)("th",{className:g("whitespace-nowrap px-4 py-3 text-left text-xs font-semibold uppercase tracking-wide text-text-muted",e.className),children:e.label},e.key))})}),(0,r.jsx)("tbody",{className:"divide-y divide-border bg-surface",children:t.map((t,s)=>(0,r.jsx)("tr",{className:"hover:bg-background/60",children:e.map(e=>(0,r.jsx)("td",{className:g("whitespace-nowrap px-4 py-3 align-top text-text-main",e.className),children:e.render?e.render(t,s):t[e.key]??"-"},e.key))},t.key||t.id||`${t.label}-${s}`))})]})}):(0,r.jsx)(w,{title:s})}function I({items:e=[]}){return e&&0!==e.length?(0,r.jsx)("div",{className:"flex max-w-[360px] flex-wrap gap-1.5",children:e.slice(0,3).map(e=>(0,r.jsxs)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs text-primary",children:[e.label||e.key," \xb7 ",i(e.count??e.requests??e.totalTokens??0)]},e.key))}):(0,r.jsx)("span",{className:"text-text-muted",children:"-"})}function R({row:e}){return(0,r.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,r.jsxs)("div",{className:"font-semibold text-text-main",children:[d(e.totalTokens)," token"]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["In ",d(e.promptTokens)," / Out ",d(e.completionTokens)]})]})}function L({value:e}){let t=Number(e||0);return(0,r.jsx)("span",{className:g("rounded-full px-2 py-1 text-xs font-semibold",t>=.2?"bg-red-500/10 text-red-600 dark:text-red-300":t>=.05?"bg-amber-500/10 text-amber-600 dark:text-amber-300":"bg-green-500/10 text-green-600 dark:text-green-300"),children:c(t)})}function M({level:e,label:t}){let s=String(e||"none");return(0,r.jsx)("span",{className:g("rounded-full px-2 py-1 text-xs font-semibold",{fast:"bg-green-500/10 text-green-700 dark:text-green-300",ok:"bg-blue-500/10 text-blue-700 dark:text-blue-300",slow:"bg-amber-500/10 text-amber-700 dark:text-amber-300",very_slow:"bg-red-500/10 text-red-700 dark:text-red-300",low_sample:"bg-amber-500/10 text-amber-700 dark:text-amber-300",none:"bg-slate-500/10 text-slate-700 dark:text-slate-300"}[s]||"bg-slate-500/10 text-slate-700 dark:text-slate-300"),children:t||"-"})}function C({level:e,label:t}){let s=String(e||"normal");return(0,r.jsx)("span",{className:g("rounded-full px-2 py-1 text-xs font-semibold",{critical:"bg-red-500/10 text-red-700 dark:text-red-300",high:"bg-amber-500/10 text-amber-700 dark:text-amber-300",medium:"bg-blue-500/10 text-blue-700 dark:text-blue-300",normal:"bg-green-500/10 text-green-700 dark:text-green-300",none:"bg-slate-500/10 text-slate-700 dark:text-slate-300"}[s]||"bg-slate-500/10 text-slate-700 dark:text-slate-300"),children:t||"-"})}function K({value:e}){let t=String(e||"unknown"),s={gateway:{label:"Gateway",cls:"bg-purple-500/10 text-purple-700 dark:text-purple-300"},upstream:{label:"Upstream",cls:"bg-red-500/10 text-red-700 dark:text-red-300"},client:{label:"Client",cls:"bg-slate-500/10 text-slate-700 dark:text-slate-300"},rate_limit:{label:"Rate limit",cls:"bg-amber-500/10 text-amber-700 dark:text-amber-300"},unknown:{label:"Unknown",cls:"bg-zinc-500/10 text-zinc-700 dark:text-zinc-300"}}[t]||{label:t,cls:"bg-zinc-500/10 text-zinc-700 dark:text-zinc-300"};return(0,r.jsx)("span",{className:g("rounded-full px-2 py-1 text-xs font-semibold",s.cls),children:s.label})}function A({row:e}){let t=e.sampleMessage||e.errorMessageShort||"";return t?(0,r.jsx)("span",{className:"block max-w-[360px] truncate text-xs text-text-muted",title:t,children:t}):(0,r.jsx)("span",{className:"text-text-muted",children:"-"})}function $({icon:e,label:t,value:s,hint:n,tone:l="slate"}){return(0,r.jsx)("div",{className:g("rounded-2xl border p-4 shadow-sm",{red:"border-red-500/20 bg-red-500/10 text-red-700 dark:text-red-300",amber:"border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300",purple:"border-purple-500/20 bg-purple-500/10 text-purple-700 dark:text-purple-300",slate:"border-border bg-surface text-text-main",green:"border-green-500/20 bg-green-500/10 text-green-700 dark:text-green-300"}[l]||"border-border bg-surface text-text-main"),children:(0,r.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wide opacity-75",children:t}),(0,r.jsx)("div",{className:"mt-2 text-2xl font-bold",children:i(s)}),n?(0,r.jsx)("div",{className:"mt-1 text-xs opacity-80",children:n}):null]}),(0,r.jsx)("span",{className:"material-symbols-outlined text-[24px] opacity-80",children:e})]})})}function E({anomaly:e}){let t="danger"===e.level?"border-red-500/30 bg-red-500/10 text-red-700 dark:text-red-300":"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300",s="danger"===e.level?"error":"warning";return(0,r.jsx)("div",{className:g("rounded-2xl border p-4",t),children:(0,r.jsxs)("div",{className:"flex gap-3",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:s}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.title}),(0,r.jsx)("div",{className:"mt-1 text-sm opacity-90",children:e.detail})]})]})})}function F({notes:e=[]}){return e.length?(0,r.jsx)("div",{className:"space-y-2 rounded-2xl border border-blue-500/20 bg-blue-500/10 p-4 text-sm text-blue-700 dark:text-blue-300",children:e.map((e,t)=>(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"info"}),(0,r.jsx)("span",{children:e})]},t))}):null}function _({filters:e,setFilters:t,options:s,onRefresh:n,onExportCsv:l,loading:o,showProviderFilters:i=!0}){let d=(e,s)=>t(t=>({...t,[e]:s}));return(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-6",children:[(0,r.jsx)(k,{label:"Khoảng thời gian",children:(0,r.jsx)(N,{value:e.period,onChange:e=>d("period",e),children:a.map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))})}),(0,r.jsx)(k,{label:"Từ ng\xe0y",children:(0,r.jsx)(f,{type:"datetime-local",value:e.dateFrom,onChange:e=>d("dateFrom",e)})}),(0,r.jsx)(k,{label:"Đến ng\xe0y",children:(0,r.jsx)(f,{type:"datetime-local",value:e.dateTo,onChange:e=>d("dateTo",e)})}),i?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(k,{label:"Provider",children:(0,r.jsxs)(N,{value:e.provider,onChange:e=>d("provider",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả provider"}),(s.providers||[]).map(e=>{let t="string"==typeof e?e:e.value,s="string"==typeof e?e:e.label||e.value;return(0,r.jsx)("option",{value:t,children:s},t)})]})}),(0,r.jsx)(k,{label:"Model",children:(0,r.jsxs)(N,{value:e.model,onChange:e=>d("model",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả model"}),(s.models||[]).map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})}),(0,r.jsx)(k,{label:"Provider account",children:(0,r.jsxs)(N,{value:e.connectionId,onChange:e=>d("connectionId",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả account"}),(s.connections||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]})})]}):null,(0,r.jsx)(k,{label:"API key",children:(0,r.jsxs)(N,{value:e.apiKey,onChange:e=>d("apiKey",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả API key"}),(s.apiKeys||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]})}),(0,r.jsx)(k,{label:"Source IP",children:(0,r.jsx)(f,{value:e.clientIp,onChange:e=>d("clientIp",e),placeholder:"172.16.253.1"})}),(0,r.jsx)(k,{label:"Source tool",children:(0,r.jsx)(f,{value:e.sourceTool,onChange:e=>d("sourceTool",e),placeholder:"copilot, antigravity..."})}),(0,r.jsx)(k,{label:"Endpoint",children:(0,r.jsxs)(N,{value:e.endpoint,onChange:e=>d("endpoint",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả endpoint"}),(s.endpoints||[]).map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})}),(0,r.jsx)(k,{label:"Status",children:(0,r.jsxs)(N,{value:e.status,onChange:e=>d("status",e),children:[(0,r.jsx)("option",{value:"",children:"Tất cả status"}),(s.statuses||[]).map(e=>(0,r.jsx)("option",{value:e,children:e},e))]})}),(0,r.jsx)(k,{label:"Session / keyword",children:(0,r.jsx)(f,{value:e.sessionId||e.keyword,onChange:e=>d("keyword",e),placeholder:"session, prompt, error..."})})]}),(0,r.jsxs)("div",{className:"mt-4 flex flex-wrap items-center justify-between gap-3",children:[(0,r.jsx)("div",{className:"text-xs text-text-muted",children:"Token/cost lấy từ UsageHistory. Source IP/tool/session lấy từ Prompt Logs."}),(0,r.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,r.jsx)("button",{onClick:()=>t({period:"today",dateFrom:"",dateTo:"",provider:"",model:"",connectionId:"",status:"",endpoint:"",apiKey:"",clientIp:"",sourceTool:"",sessionId:"",keyword:""}),className:"rounded-xl border border-border px-3 py-2 text-sm font-medium text-text-main hover:bg-background",children:"Reset"}),(0,r.jsxs)("button",{onClick:l,className:"rounded-xl border border-border px-3 py-2 text-sm font-medium text-text-main hover:bg-background",children:[(0,r.jsx)("span",{className:"material-symbols-outlined mr-1 align-[-4px] text-[18px]",children:"download"}),"Export CSV"]}),(0,r.jsxs)("button",{onClick:n,disabled:o,className:"rounded-xl bg-primary px-4 py-2 text-sm font-semibold text-white shadow-sm disabled:opacity-60",children:[(0,r.jsx)("span",{className:"material-symbols-outlined mr-1 align-[-4px] text-[18px]",children:"refresh"}),o?"Đang tải...":"Refresh"]})]})]})]})}function O({data:e}){let t=e.overview||{},s=e.latency||{},n=e.experience||{};return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-4",children:[(0,r.jsx)(v,{icon:"call_made",label:"Tổng request",value:i(t.requests),hint:`${i(t.requestsPerMinute,2)} request/ph\xfat`}),(0,r.jsx)(v,{icon:"check_circle",label:"Th\xe0nh c\xf4ng",value:i(t.success),hint:`Tỷ lệ lỗi ${c(t.errorRate)}`,tone:"green"}),(0,r.jsx)(v,{icon:"dns",label:"Lỗi server/provider",value:i(t.serverErrorEvents),hint:`Server-impacting ${c(t.serverErrorRate)} \xb7 client ${i(t.clientErrorEvents)}`,tone:t.serverErrorEvents?"red":"green"}),(0,r.jsx)(v,{icon:"speed",label:"Trải nghiệm",value:p(n.score),hint:`${n.label||"-"} \xb7 ${i(n.samples)} mẫu`,tone:n.tone||"purple"}),(0,r.jsx)(v,{icon:"timer",label:"Latency P95",value:m(n.p95LatencyMs||s.p95Ms),hint:`AVG ${m(n.avgLatencyMs||s.avgMs)} \xb7 P50 ${m(n.p50LatencyMs||s.p50Ms)}`,tone:"purple"}),(0,r.jsx)(v,{icon:"bolt",label:"TTFT P95",value:m(n.p95TtftMs),hint:"Thời gian chờ token đầu ti\xean",tone:n.slowTtftRate>=.2?"amber":"blue"}),(0,r.jsx)(v,{icon:"input",label:"Input P95",value:d(n.p95PromptTokens||0),hint:`Avg ${d(n.avgPromptTokens||t.avgPromptTokens)} \xb7 >=30k ${c(n.longInputRate)}`}),(0,r.jsx)(v,{icon:"person_alert",label:"Top user nặng",value:t.topHeavyUser||"-",hint:`Chiếm ${c(t.topHeavyUserTokenShare)} tổng token`,tone:t.topHeavyUserTokenShare>=.35?"amber":"slate"}),(0,r.jsx)(v,{icon:"running_with_errors",label:"Request chậm",value:c(n.slowRequestRate),hint:`>= ${m(n.thresholds?.slowLatencyMs||45e3)} \xb7 max ${m(n.maxLatencyMs)}`,tone:n.slowRequestRate>=.2?"amber":"green"}),(0,r.jsx)(v,{icon:"output",label:"Output tokens",value:d(t.completionTokens),hint:`Avg ${i(t.avgCompletionTokens,1)} / request`}),(0,r.jsx)(v,{icon:"token",label:"Tổng tokens",value:d(t.totalTokens),hint:`${d(t.tokensPerMinute)} token/ph\xfat`,tone:"amber"}),(0,r.jsx)(v,{icon:"speed",label:"Output speed",value:u(n.decodeTokensPerSecond," tok/s"),hint:`Latency/10k input ${m(n.latencyMsPer10kInputTokens)}`,tone:"slate"}),(0,r.jsx)(v,{icon:"payments",label:"Cost ước t\xednh",value:x(t.cost),hint:"Dựa tr\xean pricing đ\xe3 cấu h\xecnh",tone:"green"})]}),(0,r.jsxs)("div",{className:"grid min-w-0 gap-5 xl:grid-cols-[2fr_1fr]",children:[(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Tần suất request & token theo thời gian"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Cột xanh l\xe0 token, cột v\xe0ng l\xe0 số request trong từng bucket thời gian."})]}),(0,r.jsx)(S,{})]}),(0,r.jsx)(P,{data:e.timeSeries||[]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"T\xf3m tắt active"}),(0,r.jsx)("div",{className:"mt-4 space-y-3",children:[["API key đang d\xf9ng",t.activeApiKeys],["Provider active",t.activeProviders],["Model active",t.activeModels],["Endpoint active",t.activeEndpoints],["Cached tokens",t.cachedTokens],["Reasoning tokens",t.reasoningTokens],["Latency AVG",m(n.avgLatencyMs||s.avgMs)],["Latency P50",m(n.p50LatencyMs||s.p50Ms)],["Latency P99",m(n.p99LatencyMs||s.p99Ms)],["TTFT P95",m(n.p95TtftMs)],["Input P95",d(n.p95PromptTokens||0)],["Long input >=30k",c(n.longInputRate)]].map(([e,t])=>(0,r.jsxs)("div",{className:"flex items-center justify-between rounded-xl bg-background px-3 py-2",children:[(0,r.jsx)("span",{className:"text-sm text-text-muted",children:e}),(0,r.jsx)("span",{className:"font-semibold text-text-main",children:"number"==typeof t?i(t):t})]},e))})]})]}),(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Top API key d\xf9ng nhiều token"}),(0,r.jsx)(q,{rows:(e.clientRequests?.topApiKeysByTokens||e.groups?.apiKeys||[]).slice(0,8),columns:[{key:"name",label:"API key",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.name||e.label}),(0,r.jsxs)("div",{className:"text-xs text-text-muted",children:[e.fingerprint||e.apiKeyFingerprint,e.ownerUser||e.apiKeyOwner?` \xb7 ${e.ownerUser||e.apiKeyOwner}`:""]})]})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"input",label:"P95/Max input",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsx)("div",{children:d(e.p95PromptTokens||0)}),(0,r.jsxs)("div",{className:"text-text-muted",children:["max ",d(e.maxPromptTokens||0)]})]})}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Top Source IP d\xf9ng nhiều token"}),(0,r.jsx)(q,{rows:(e.clientRequests?.topSourceIpsByTokens||[]).slice(0,8),columns:[{key:"label",label:"Source IP",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"heavy",label:"Nặng",render:e=>(0,r.jsxs)("span",{className:"text-xs text-text-muted",children:[i(e.heavyRequests||0)," req"]})}],empty:"Kh\xf4ng c\xf3 Source IP c\xf3 token trong khoảng lọc."})]})]})]})}function U({data:e}){let t=e.clientRequests||{},s=t.summary||{},n=t.topHeavyUsers||[],l=t.topProblemClients||[],a=t.topApiKeysByTokens||[],o=t.topSourceIpsByTokens||[];t.topSourceIpsByHeavyRequests;let x=t.inputBuckets||[],u=e=>(0,r.jsxs)("div",{className:"min-w-[220px]",children:[(0,r.jsx)("div",{className:"font-semibold text-text-main",children:e.label}),(0,r.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.ownerUser?`Owner ${e.ownerUser}`:e.apiKeyName||"Kh\xf4ng c\xf3 owner"}),(0,r.jsx)("div",{className:"font-mono text-[11px] text-text-muted",children:e.apiKeyFingerprint||e.primaryClientIp||e.key})]}),p=e=>(0,r.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,r.jsxs)("div",{children:["Nặng ",i(e.heavyRequests)," \xb7 ",c(e.heavyRequestRate)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["P95 input ",d(e.p95PromptTokens)," \xb7 Max ",d(e.maxPromptTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:[">=70k ",i(e.extremeInputRequests)," \xb7 ",c(e.extremeInputRate)]})]});return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-4",children:[(0,r.jsx)(v,{icon:"person_alert",label:"Top user nặng nhất",value:s.topUserLabel||"-",hint:`${d(s.topUserTokens)} token \xb7 ${c(s.topUserTokenShare)} tổng token`,tone:s.topUserTokenShare>=.35?"amber":"slate"}),(0,r.jsx)(v,{icon:"vpn_key",label:"Top API key nhiều token",value:s.topApiKeyLabel||"-",hint:`${d(s.topApiKeyTokens)} token \xb7 ${c(s.topApiKeyTokenShare)} tổng token`,tone:s.topApiKeyTokenShare>=.35?"amber":"blue"}),(0,r.jsx)(v,{icon:"lan",label:"Top IP nhiều token",value:s.topSourceIpLabel||"-",hint:`${d(s.topSourceIpTokens)} token \xb7 ${c(s.topSourceIpTokenShare)} tổng token`,tone:s.topSourceIpTokenShare>=.35?"amber":"purple"}),(0,r.jsx)(v,{icon:"input",label:"Input d\xe0i >=30k",value:c(s.longInputBucketShare||0),hint:`>=70k ${c(s.extremeInputShare||0)}`,tone:(s.extremeInputShare||0)>=.1?"amber":"green"}),(0,r.jsx)(v,{icon:"groups",label:"User/API key được theo d\xf5i",value:i(s.trackedUsers||0),hint:"Theo owner/API key fingerprint/source IP",tone:"blue"}),(0,r.jsx)(v,{icon:"network_check",label:"Top IP request nặng",value:s.topSourceIpHeavyLabel||"-",hint:`${i(s.topSourceIpHeavyRequests||0)} request >=30k input/total`,tone:s.topSourceIpHeavyRequests?"amber":"slate"}),(0,r.jsx)(v,{icon:"report",label:"Client lỗi nhiều",value:i(s.problemClients||0),hint:"Nh\xf3m user/API key c\xf3 error rows",tone:s.problemClients?"amber":"green"})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-start justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Top user/API key gửi request nặng nhất"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Xếp theo tổng input/output token của request th\xe0nh c\xf4ng c\xf3 token. D\xf9ng để ph\xe1t hiện user VS Code/agent đang tạo tải long-context lớn."})]}),(0,r.jsx)("span",{className:"rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary",children:"Kh\xf4ng hiển thị full bearer token"})]}),(0,r.jsx)(q,{rows:n,columns:[{key:"user",label:"User/API key",render:u},{key:"quality",label:"\xc1p lực",render:e=>(0,r.jsx)(C,{level:e.level,label:e.pressureLabel})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"input",label:"Input pressure",render:e=>(0,r.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,r.jsxs)("div",{children:["Avg ",d(e.avgPromptTokens)," \xb7 P95 ",d(e.p95PromptTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["Max ",d(e.maxPromptTokens)," \xb7 >=30k ",c(e.longInputRate)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:[">=50k ",c(e.hugeInputRate)," \xb7 >=70k ",c(e.extremeInputRate)]})]})},{key:"latency",label:"Latency / TTFT",render:e=>(0,r.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,r.jsxs)("div",{children:["P95 ",m(e.p95LatencyMs)," \xb7 Max ",m(e.maxLatencyMs)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["TTFT P95 ",m(e.p95TtftMs)," \xb7 Slow ",c(e.slowRequestRate)]})]})},{key:"topModels",label:"Top model",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"topIps",label:"IP / Tool",render:e=>(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)(I,{items:e.topIps}),(0,r.jsx)(I,{items:e.topTools})]})},{key:"meta",label:"Meta",render:e=>(0,r.jsxs)("div",{className:"space-y-1 text-xs text-text-muted",children:[(0,r.jsxs)("div",{children:["Key ",i(e.apiKeyCount)," \xb7 IP ",i(e.sourceIpCount)," \xb7 Tool ",i(e.sourceToolCount)]}),(0,r.jsxs)("div",{children:["Session ",i(e.sessionCount)," \xb7 Last ",h(e.lastSeen)]})]})}],empty:"Kh\xf4ng c\xf3 request th\xe0nh c\xf4ng c\xf3 token trong khoảng lọc."})]}),(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Top API key d\xf9ng nhiều token nhất"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Xếp theo tổng input + output token từ UsageHistory, kh\xf4ng lộ full bearer token."})]}),(0,r.jsx)(q,{rows:a,columns:[{key:"apiKey",label:"API key",render:e=>(0,r.jsxs)("div",{className:"min-w-[220px]",children:[(0,r.jsx)("div",{className:"font-semibold text-text-main",children:e.label}),(0,r.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.apiKeyOwner?`Owner ${e.apiKeyOwner}`:e.apiKeyName||e.primarySourceTool||"-"}),(0,r.jsx)("div",{className:"font-mono text-[11px] text-text-muted",children:e.apiKeyFingerprint||e.primaryClientIp||e.key})]})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"input",label:"Input nặng",render:p},{key:"meta",label:"Nguồn",render:e=>(0,r.jsxs)("div",{className:"text-xs text-text-muted",children:[(0,r.jsxs)("div",{children:["IP ",i(e.sourceIpCount)," \xb7 Tool ",i(e.sourceToolCount)]}),(0,r.jsxs)("div",{children:["Model ",i(e.modelCount)," \xb7 Provider ",i(e.providerCount)]})]})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 API key c\xf3 token trong khoảng lọc."})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Top Source IP d\xf9ng nhiều token nhất"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Dựa tr\xean UsageHistory n\xean c\xf3 input/output token, kh\xe1c với bảng Source IP từ Prompt Logs chỉ đếm log."})]}),(0,r.jsx)(q,{rows:o,columns:[{key:"ip",label:"Source IP",render:e=>(0,r.jsxs)("div",{className:"min-w-[180px]",children:[(0,r.jsx)("div",{className:"font-mono text-sm font-semibold text-text-main",children:e.label}),(0,r.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["Tool ",i(e.sourceToolCount)," \xb7 API key ",i(e.apiKeyCount)]}),(0,r.jsxs)("div",{className:"text-xs text-text-muted",children:["Model ",i(e.modelCount)," \xb7 Provider ",i(e.providerCount)]})]})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"input",label:"Input nặng",render:p},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 Source IP c\xf3 token trong khoảng lọc."})]})]}),(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Ph\xe2n bố request theo k\xedch thước input"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Gi\xfap admin biết workload đang l\xe0 chat ngắn hay long-context VS Code/agent."})]}),(0,r.jsx)(q,{rows:x,columns:[{key:"label",label:"Input bucket",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"share",label:"Tỷ trọng",render:e=>c(e.share)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"latency",label:"Latency P95/MAX",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsxs)("div",{children:[m(e.p95LatencyMs)," / ",m(e.maxLatencyMs)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["TTFT P95 ",m(e.p95TtftMs)]})]})}],empty:"Kh\xf4ng c\xf3 dữ liệu bucket input."})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Client/API key lỗi nhiều"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"D\xf9ng để ph\xe1t hiện sai endpoint/model/auth/policy hoặc client tool cấu h\xecnh sai."})]}),(0,r.jsx)(q,{rows:l,columns:[{key:"user",label:"Client",render:u},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"errors",label:"Lỗi",render:e=>i(e.errors)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"source",label:"IP/Tool",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsx)("div",{className:"font-mono",children:e.primaryClientIp||"-"}),(0,r.jsx)("div",{className:"text-text-muted",children:e.primarySourceTool||"-"})]})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 client lỗi theo bộ lọc hiện tại."})]})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"G\xf3c nh\xecn monitor client n\xean d\xf9ng"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"C\xe1c chỉ số n\xe0y bổ sung cho latency/model để admin ph\xe2n biệt server chậm hay client gửi request qu\xe1 nặng."})]}),(0,r.jsx)("div",{className:"grid gap-3 text-sm md:grid-cols-2 xl:grid-cols-3",children:[["Token/user","X\xe1c định user/API key tạo tải lớn nhất, hữu \xedch cho quota v\xe0 hướng dẫn workflow VS Code."],["Input bucket","Nếu phần lớn request nằm ở 30k-70k+, P95/P99 cao chủ yếu do prompt eval/context d\xe0i."],["TTFT theo user","TTFT cao cho một user thường l\xe0 input d\xe0i hoặc chờ slot, kh\xf4ng nhất thiết provider lỗi."],["Error theo client","T\xe1ch lỗi sai endpoint/model/API key khỏi lỗi server/provider để kh\xf4ng cảnh b\xe1o nhầm."],["Source IP/tool","Ph\xe1t hiện m\xe1y/tool gửi request nhiều hoặc cấu h\xecnh sai."],["Top request nặng","D\xf9ng Raw usage để drill-down request cụ thể khi một user k\xe9o tải hệ thống."]].map(([e,t])=>(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,r.jsx)("div",{className:"font-semibold text-text-main",children:e}),(0,r.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:t})]},e))})]})]})}function V({data:e}){return(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Thống k\xea theo API key"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Kh\xf4ng hiển thị full bearer token. Dashboard chỉ d\xf9ng fingerprint/masked key."})]}),(0,r.jsx)(q,{rows:e.groups?.apiKeys||[],columns:[{key:"name",label:"API key",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.name}),(0,r.jsxs)("div",{className:"text-xs text-text-muted",children:[e.fingerprint,e.ownerUser?` \xb7 Owner: ${e.ownerUser}`:""]})]})},{key:"requests",label:"Requests",render:e=>i(e.requests)},{key:"success",label:"OK/Lỗi",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsxs)("div",{className:"text-green-600",children:["OK ",i(e.success)]}),(0,r.jsxs)("div",{className:"text-red-600",children:["Lỗi ",i(e.errors)]})]})},{key:"tokens",label:"In/Out token",render:e=>(0,r.jsx)(R,{row:e})},{key:"cost",label:"Cost",render:e=>x(e.cost)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"topModels",label:"Top model",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"topProviders",label:"Top provider",render:e=>(0,r.jsx)(I,{items:e.topProviders})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]})}function D({data:e}){let t=e.clientRequests?.topSourceIpsByTokens||[],s=e.clientRequests?.topSourceIpsByHeavyRequests||[],n=e=>(0,r.jsxs)("div",{className:"min-w-[180px]",children:[(0,r.jsx)("div",{className:"font-mono text-sm font-semibold text-text-main",children:e.label}),(0,r.jsxs)("div",{className:"mt-1 text-xs text-text-muted",children:["API key ",i(e.apiKeyCount)," \xb7 Tool ",i(e.sourceToolCount)]}),(0,r.jsxs)("div",{className:"text-xs text-text-muted",children:["Model ",i(e.modelCount)," \xb7 Provider ",i(e.providerCount)]})]});return(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Top IP d\xf9ng nhiều token nhất"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Aggregate từ UsageHistory, xếp theo tổng input + output token."})]}),(0,r.jsx)(q,{rows:t,columns:[{key:"ip",label:"Source IP",render:n},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 Source IP c\xf3 token trong khoảng lọc."})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Top IP gửi request nặng nhất"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Xếp theo số request input/total token từ 30k trở l\xean, sau đ\xf3 theo max/P95 input."})]}),(0,r.jsx)(q,{rows:s,columns:[{key:"ip",label:"Source IP",render:n},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"heavy",label:"Request nặng",render:e=>(0,r.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,r.jsxs)("div",{children:["Nặng ",i(e.heavyRequests)," \xb7 ",c(e.heavyRequestRate)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["P95 input ",d(e.p95PromptTokens)," \xb7 Max ",d(e.maxPromptTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:[">=70k ",i(e.extremeInputRequests)," \xb7 ",c(e.extremeInputRate)]})]})},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 Source IP gửi request nặng trong khoảng lọc."})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Source IP từ Prompt Logs"}),(0,r.jsx)(q,{rows:e.promptLogs?.topClientIps||[],columns:[{key:"label",label:"IP",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label})},{key:"requests",label:"Logs",render:e=>i(e.requests)},{key:"errors",label:"Lỗi",render:e=>i(e.errors)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"topTools",label:"Tools",render:e=>(0,r.jsx)(I,{items:e.topTools})},{key:"topModels",label:"Models",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Source tool"}),(0,r.jsx)(q,{rows:e.promptLogs?.topSourceTools||[],columns:[{key:"label",label:"Tool",render:e=>(0,r.jsx)("span",{className:"font-semibold",children:e.label})},{key:"requests",label:"Logs",render:e=>i(e.requests)},{key:"errors",label:"Lỗi",render:e=>i(e.errors)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"topIps",label:"Top IP",render:e=>(0,r.jsx)(I,{items:e.topIps})},{key:"topModels",label:"Top model",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]}),(0,r.jsxs)(y,{className:"xl:col-span-2",children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Session nhiều hoạt động"}),(0,r.jsx)(q,{rows:e.promptLogs?.topSessions||[],columns:[{key:"label",label:"Session",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label})},{key:"requests",label:"Logs",render:e=>i(e.requests)},{key:"errors",label:"Lỗi",render:e=>i(e.errors)},{key:"topIps",label:"IP",render:e=>(0,r.jsx)(I,{items:e.topIps})},{key:"topTools",label:"Tool",render:e=>(0,r.jsx)(I,{items:e.topTools})},{key:"topModels",label:"Model",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]})]})}function H({data:e}){return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Provider"}),(0,r.jsx)(q,{rows:e.groups?.providers||[],columns:[{key:"label",label:"Provider",render:e=>(0,r.jsx)("span",{className:"font-semibold",children:e.label})},{key:"requests",label:"Requests",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"cost",label:"Cost",render:e=>x(e.cost)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"topModels",label:"Top model",render:e=>(0,r.jsx)(I,{items:e.topModels})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]}),(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Model"}),(0,r.jsx)(q,{rows:e.groups?.models||[],columns:[{key:"label",label:"Model",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.model}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:e.providerLabel||e.provider})]})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"errorRate",label:"Lỗi",render:e=>(0,r.jsx)(L,{value:e.errorRate})}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Provider account / connection"}),(0,r.jsx)(q,{rows:e.groups?.providerAccounts||[],columns:[{key:"label",label:"Account",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.label}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:e.providerLabel||e.provider||e.connectionId})]})},{key:"requests",label:"Req",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"errorRate",label:"Lỗi",render:e=>(0,r.jsx)(L,{value:e.errorRate})}]})]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Endpoint"}),(0,r.jsx)(q,{rows:e.groups?.endpoints||[],columns:[{key:"label",label:"Endpoint",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.label})},{key:"requests",label:"Requests",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"cost",label:"Cost",render:e=>x(e.cost)},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]})]})}function B({data:e}){let t=e.experience||{},s=t.thresholds||{},n=t.byModel||[],l=t.slowestRequests||[];return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-4",children:[(0,r.jsx)(v,{icon:"verified",label:"Đ\xe1nh gi\xe1 tổng",value:p(t.score),hint:`${t.label||"-"} \xb7 ${i(t.samples)} mẫu success c\xf3 token`,tone:t.tone||"slate"}),(0,r.jsx)(v,{icon:"timer",label:"Latency AVG / P95",value:`${m(t.avgLatencyMs)} / ${m(t.p95LatencyMs)}`,hint:`P50 ${m(t.p50LatencyMs)} \xb7 P99 ${m(t.p99LatencyMs)}`,tone:"purple"}),(0,r.jsx)(v,{icon:"bolt",label:"TTFT AVG / P95",value:`${m(t.avgTtftMs)} / ${m(t.p95TtftMs)}`,hint:"TTFT cao thường l\xe0 queue/prompt eval/input d\xe0i",tone:t.slowTtftRate>=.2?"amber":"blue"}),(0,r.jsx)(v,{icon:"keyboard_double_arrow_up",label:"Input AVG / P95",value:`${d(t.avgPromptTokens)} / ${d(t.p95PromptTokens)}`,hint:`>=30k ${c(t.longInputRate)} \xb7 >=50k ${c(t.hugeInputRate)}`}),(0,r.jsx)(v,{icon:"running_with_errors",label:"Slow request",value:c(t.slowRequestRate),hint:`Latency >= ${m(s.slowLatencyMs||45e3)} \xb7 rất chậm ${c(t.verySlowRequestRate)}`,tone:t.slowRequestRate>=.2?"amber":"green"}),(0,r.jsx)(v,{icon:"pending_actions",label:"Slow TTFT",value:c(t.slowTtftRate),hint:`TTFT >= ${m(s.slowTtftMs||2e4)}`,tone:t.slowTtftRate>=.2?"amber":"green"}),(0,r.jsx)(v,{icon:"speed",label:"Output tốc độ",value:u(t.decodeTokensPerSecond," tok/s"),hint:`Output/latency ${u(t.outputTokensPerSecond," tok/s")}`,tone:"slate"}),(0,r.jsx)(v,{icon:"data_usage",label:"Latency / 10k input",value:m(t.latencyMsPer10kInputTokens),hint:"Hữu \xedch khi VS Code gửi 30k–70k token",tone:"slate"})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"C\xe1ch đọc trải nghiệm user"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Nh\xf3m n\xe0y chỉ t\xednh request th\xe0nh c\xf4ng c\xf3 token v\xe0 latency > 0. Error/pending/success 0-token kh\xf4ng trộn v\xe0o tốc độ model. TTFT l\xe0 thời gian tới token đầu ti\xean; với VS Code input 30k–70k, TTFT cao thường phản \xe1nh chờ slot hoặc prompt eval d\xe0i."})]}),(0,r.jsxs)("div",{className:"grid gap-3 md:grid-cols-3",children:[(0,r.jsxs)("div",{className:"rounded-2xl bg-background p-4",children:[(0,r.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wide text-text-muted",children:"Nhanh/chậm thực tế"}),(0,r.jsx)("div",{className:"mt-2 text-sm text-text-main",children:"Latency AVG/P50/P95/MAX cho biết user phải chờ bao l\xe2u để request ho\xe0n tất."})]}),(0,r.jsxs)("div",{className:"rounded-2xl bg-background p-4",children:[(0,r.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wide text-text-muted",children:"Queue hoặc prompt eval"}),(0,r.jsx)("div",{className:"mt-2 text-sm text-text-main",children:"TTFT cao + input P95 cao l\xe0 t\xedn hiệu request d\xe0i, hết slot hoặc upstream đang queue."})]}),(0,r.jsxs)("div",{className:"rounded-2xl bg-background p-4",children:[(0,r.jsx)("div",{className:"text-xs font-semibold uppercase tracking-wide text-text-muted",children:"VS Code / agent"}),(0,r.jsx)("div",{className:"mt-2 text-sm text-text-main",children:"Theo d\xf5i tỷ lệ input >=30k/50k/70k để biết P95/P99 cao c\xf3 phải do context cực d\xe0i hay kh\xf4ng."})]})]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Chất lượng phản hồi theo provider/model"}),(0,r.jsx)(q,{rows:n,empty:"Chưa c\xf3 mẫu latency cho model trong khoảng lọc.",columns:[{key:"model",label:"Model",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.model}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:e.providerLabel||e.provider})]})},{key:"quality",label:"Đ\xe1nh gi\xe1",render:e=>(0,r.jsxs)("div",{className:"space-y-1",children:[(0,r.jsx)(M,{level:e.level,label:e.labelQuality}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:p(e.score)})]})},{key:"samples",label:"Mẫu",render:e=>i(e.samples)},{key:"latency",label:"Latency P50/P95/MAX",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsxs)("div",{children:[m(e.p50LatencyMs)," / ",m(e.p95LatencyMs)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:["max ",m(e.maxLatencyMs)]})]})},{key:"ttft",label:"TTFT P95",render:e=>m(e.p95TtftMs)},{key:"input",label:"Input avg/P95",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsxs)("div",{children:[d(e.avgPromptTokens)," / ",d(e.p95PromptTokens)]}),(0,r.jsxs)("div",{className:"text-text-muted",children:[">=30k ",c(e.longInputRate)]})]})},{key:"slow",label:"Chậm",render:e=>(0,r.jsx)(L,{value:e.slowRequestRate})},{key:"speed",label:"Output tok/s",render:e=>u(e.outputTokensPerSecond," tok/s")}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Request chậm nhất"}),(0,r.jsx)(q,{rows:l,empty:"Kh\xf4ng c\xf3 request chậm trong khoảng lọc.",columns:[{key:"timestamp",label:"Time",render:e=>h(e.timestamp)},{key:"model",label:"Model",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.model}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:e.providerLabel||e.provider})]})},{key:"latency",label:"Latency / TTFT",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsx)("div",{className:"font-semibold",children:m(e.latencyMs)}),(0,r.jsxs)("div",{className:"text-text-muted",children:["TTFT ",m(e.ttftMs)]})]})},{key:"tokens",label:"In / Out",render:e=>(0,r.jsx)(R,{row:e})},{key:"apiKeyName",label:"API key",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{children:e.apiKeyName}),(0,r.jsx)("div",{className:"font-mono text-xs text-text-muted",children:e.apiKeyFingerprint})]})},{key:"sourceTool",label:"Tool/IP",render:e=>(0,r.jsxs)("div",{className:"text-xs",children:[(0,r.jsx)("div",{children:e.sourceTool||"-"}),(0,r.jsx)("div",{className:"font-mono text-text-muted",children:e.clientIp||"-"})]})},{key:"endpoint",label:"Endpoint",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.endpoint||"-"})}]})]})]})}function G({data:e}){let t=e.requestErrors||{},s=t.summary||{},n=e.overview||{},l=Number(n.serverErrorRate||0),a=Number(n.clientErrorRate||0),o=Number(n.rateLimitErrorRate||0),d=[{key:"faultOwner",label:"Loại",render:e=>(0,r.jsx)(K,{value:e.faultOwner})},{key:"status",label:"Status",render:e=>(0,r.jsx)("span",{className:"rounded-full bg-red-500/10 px-2 py-1 text-xs font-semibold text-red-600 dark:text-red-300",children:e.status})},{key:"provider",label:"Provider",render:e=>e.providerLabel||e.provider},{key:"model",label:"Model"},{key:"endpoint",label:"Endpoint",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.endpoint})},{key:"requests",label:"Lỗi",render:e=>i(e.errors||e.requests)},{key:"errorType",label:"Type",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.errorType||e.errorCode||"-"})},{key:"sampleMessage",label:"Sample",render:e=>(0,r.jsx)(A,{row:e})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}];return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-5",children:[(0,r.jsx)($,{icon:"dns",label:"Server/provider",value:s.serverImpacting||0,hint:`${c(l)} tr\xean tổng request`,tone:s.serverImpacting?"red":"green"}),(0,r.jsx)($,{icon:"cloud_off",label:"Upstream",value:s.upstream||0,hint:"Provider/model server, timeout, network, 5xx",tone:s.upstream?"red":"green"}),(0,r.jsx)($,{icon:"router",label:"Gateway",value:s.gateway||0,hint:"Lỗi nội bộ BlueRouter/gateway",tone:s.gateway?"purple":"green"}),(0,r.jsx)($,{icon:"integration_instructions",label:"Client/request",value:s.client||0,hint:`${c(a)} do endpoint/model/body/auth`,tone:s.client?"slate":"green"}),(0,r.jsx)($,{icon:"speed",label:"Rate/quota",value:s.rateLimit||0,hint:`${c(o)} rate-limit/quota`,tone:s.rateLimit?"amber":"green"})]}),(0,r.jsx)("div",{className:"rounded-2xl border border-blue-500/20 bg-blue-500/10 p-4 text-sm text-blue-700 dark:text-blue-300",children:(0,r.jsxs)("div",{className:"flex gap-3",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[22px]",children:"rule_settings"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:"Ph\xe2n loại lỗi đ\xe3 t\xe1ch client khỏi server/provider"}),(0,r.jsxs)("div",{className:"mt-1 opacity-90",children:["Cảnh b\xe1o vận h\xe0nh n\xean ưu ti\xean nh\xf3m ",(0,r.jsx)("b",{children:"Server/provider"})," gồm gateway, upstream, timeout, network v\xe0 5xx. Nh\xf3m ",(0,r.jsx)("b",{children:"Client/request"})," vẫn được log đầy đủ nhưng thường l\xe0 sai endpoint, model, auth, JSON/body hoặc context."]})]})]})}),e.anomalies?.length?(0,r.jsx)("div",{className:"grid gap-4 xl:grid-cols-2",children:e.anomalies.map((e,t)=>(0,r.jsx)(E,{anomaly:e},t))}):(0,r.jsxs)("div",{className:"rounded-2xl border border-green-500/20 bg-green-500/10 p-4 text-sm text-green-700 dark:text-green-300",children:[(0,r.jsx)("span",{className:"material-symbols-outlined mr-2 align-[-5px]",children:"check_circle"}),"Chưa ph\xe1t hiện bất thường server/provider r\xf5 r\xe0ng theo bộ lọc hiện tại."]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-start justify-between gap-3",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Lỗi server/provider cần xử l\xfd"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Chỉ gồm gateway/upstream/server-impacting errors. Đ\xe2y l\xe0 bảng quan trọng nhất cho vận h\xe0nh."})]}),(0,r.jsxs)("span",{className:"rounded-full bg-red-500/10 px-3 py-1 text-xs font-semibold text-red-600 dark:text-red-300",children:[i(s.serverImpacting||0)," lỗi"]})]}),(0,r.jsx)(q,{rows:t.topServerErrors||[],columns:d,empty:"Kh\xf4ng c\xf3 lỗi server/provider trong khoảng lọc."})]}),(0,r.jsxs)("div",{className:"grid gap-5 xl:grid-cols-2",children:[(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Lỗi client/request sai"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Sai endpoint, model, auth, JSON/body, context length. D\xf9ng để hướng dẫn client sửa request."})]}),(0,r.jsx)(q,{rows:t.topClientErrors||[],columns:d.filter(e=>!["sampleMessage"].includes(e.key)),empty:"Kh\xf4ng c\xf3 lỗi client/request trong khoảng lọc."})]}),(0,r.jsxs)(y,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Ph\xe2n bố loại lỗi"}),(0,r.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"T\xe1ch nguồn chịu tr\xe1ch nhiệm để kh\xf4ng nhầm lỗi client th\xe0nh lỗi server."})]}),(0,r.jsx)(q,{rows:t.byFaultOwner||[],columns:[{key:"faultOwner",label:"Loại",render:e=>(0,r.jsx)(K,{value:e.faultOwner||e.key})},{key:"requests",label:"Số lỗi",render:e=>i(e.requests)},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}],empty:"Kh\xf4ng c\xf3 lỗi để ph\xe2n loại."})]})]}),t.topRateLimitErrors?.length?(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Rate limit / quota"}),(0,r.jsx)(q,{rows:t.topRateLimitErrors||[],columns:d})]}):null,(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Tất cả lỗi raw theo status/provider/model/endpoint"}),(0,r.jsx)(q,{rows:e.groups?.errors||[],columns:[{key:"faultOwner",label:"Loại",render:e=>(0,r.jsx)(K,{value:e.faultOwner})},{key:"status",label:"Status",render:e=>(0,r.jsx)("span",{className:"rounded-full bg-red-500/10 px-2 py-1 text-xs font-semibold text-red-600 dark:text-red-300",children:e.status})},{key:"provider",label:"Provider",render:e=>e.providerLabel||e.provider},{key:"model",label:"Model"},{key:"endpoint",label:"Endpoint",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.endpoint})},{key:"requests",label:"Lỗi",render:e=>i(e.errors||e.requests)},{key:"apiKey",label:"API key",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.apiKey})},{key:"lastSeen",label:"Last seen",render:e=>h(e.lastSeen)}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Status distribution"}),(0,r.jsx)(q,{rows:e.groups?.statuses||[],columns:[{key:"label",label:"Status"},{key:"requests",label:"Requests",render:e=>i(e.requests)},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"errorRate",label:"Error %",render:e=>(0,r.jsx)(L,{value:e.errorRate})}]})]})]})}function z({data:e}){return(0,r.jsxs)("div",{className:"space-y-5",children:[(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Top request nặng token"}),(0,r.jsx)(q,{rows:e.heavyRequests||[],columns:[{key:"timestamp",label:"Time",render:e=>h(e.timestamp)},{key:"model",label:"Model",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-semibold",children:e.model}),(0,r.jsx)("div",{className:"text-xs text-text-muted",children:e.providerLabel||e.provider})]})},{key:"apiKeyName",label:"API key",render:e=>(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{children:e.apiKeyName}),(0,r.jsx)("div",{className:"font-mono text-xs text-text-muted",children:e.apiKeyFingerprint})]})},{key:"accountName",label:"Account"},{key:"endpoint",label:"Endpoint",render:e=>(0,r.jsx)("span",{className:"font-mono text-xs",children:e.endpoint})},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"status",label:"Status"}]})]}),(0,r.jsxs)(y,{children:[(0,r.jsx)("h2",{className:"mb-4 text-lg font-semibold text-text-main",children:"Recent usage"}),(0,r.jsx)(q,{rows:e.recentUsage||[],columns:[{key:"timestamp",label:"Time",render:e=>h(e.timestamp)},{key:"provider",label:"Provider",render:e=>e.providerLabel||e.provider},{key:"model",label:"Model"},{key:"apiKeyName",label:"API key"},{key:"tokens",label:"Token",render:e=>(0,r.jsx)(R,{row:e})},{key:"cost",label:"Cost",render:e=>x(e.cost)},{key:"status",label:"Status"}]})]})]})}function X(){let{isAdmin:e,isMonitorAdmin:t}=(0,l.s)(),[s,a]=(0,n.useState)({period:"today",dateFrom:"",dateTo:"",provider:"",model:"",connectionId:"",status:"",endpoint:"",apiKey:"",clientIp:"",sourceTool:"",sessionId:"",keyword:""}),[i,d]=(0,n.useState)(null),[c,x]=(0,n.useState)(!0),[m,u]=(0,n.useState)(""),[p,b]=(0,n.useState)("overview"),[y,v]=(0,n.useState)(!1),k=function(e,t=450){let[s,r]=(0,n.useState)(e);return(0,n.useEffect)(()=>{let s=setTimeout(()=>r(e),t);return()=>clearTimeout(s)},[e,t]),s}(s,450),N=(0,n.useCallback)(async()=>{x(!0),u("");try{let e=j(k),t=await fetch(`/api/dashboard/analytics?${e}`,{cache:"no-store"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng tải được dữ liệu analytics");d(s)}catch(e){u(e.message||"Kh\xf4ng tải được dữ liệu analytics")}finally{x(!1)}},[k]);(0,n.useEffect)(()=>{N()},[N]),(0,n.useEffect)(()=>{if(!y)return;let e=setInterval(()=>N(),1e4);return()=>clearInterval(e)},[y,N]);let f=i?.options||{},P=(0,n.useMemo)(()=>i?.generatedAt?h(i.generatedAt):"-",[i]);return(0,r.jsxs)("div",{className:"space-y-5 p-4 md:p-6",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 text-primary",children:[(0,r.jsx)("span",{className:"material-symbols-outlined",children:"monitoring"}),(0,r.jsx)("span",{className:"text-sm font-semibold uppercase tracking-wide",children:"BlueRouter Analytics"})]}),(0,r.jsx)("h1",{className:"mt-2 text-2xl font-bold text-text-main",children:"Thống k\xea sử dụng Gateway"}),(0,r.jsx)("p",{className:"mt-1 max-w-3xl text-sm text-text-muted",children:"Theo d\xf5i tần suất request, input/output token, API key, provider, model, endpoint, Source IP, source tool v\xe0 lỗi vận h\xe0nh."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 rounded-2xl border border-border bg-surface px-4 py-3 text-sm text-text-muted",children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"schedule"}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{children:["Generated: ",P]}),(0,r.jsxs)("label",{className:"mt-1 flex cursor-pointer items-center gap-2 text-xs",children:[(0,r.jsx)("input",{type:"checkbox",checked:y,onChange:e=>v(e.target.checked)}),"Auto refresh 10s"]})]})]})]}),(0,r.jsx)(_,{filters:s,setFilters:a,options:f,onRefresh:N,onExportCsv:()=>{let e=j(k,{format:"csv"});window.open(`/api/dashboard/analytics?${e}`,"_blank","noopener,noreferrer")},loading:c,showProviderFilters:e||t}),m?(0,r.jsxs)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4 text-sm text-red-700 dark:text-red-300",children:[(0,r.jsx)("span",{className:"material-symbols-outlined mr-2 align-[-5px]",children:"error"}),m]}):null,i?.qualityNotes?.length?(0,r.jsx)(F,{notes:i.qualityNotes}):null,(0,r.jsx)("div",{className:"flex flex-wrap gap-2 rounded-2xl border border-border bg-surface p-2",children:o.map(e=>(0,r.jsxs)("button",{onClick:()=>b(e.value),className:g("flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition",p===e.value?"bg-primary text-white shadow-sm":"text-text-muted hover:bg-background hover:text-text-main"),children:[(0,r.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:e.icon}),e.label]},e.value))}),c&&!i?(0,r.jsx)(T,{}):null,!c&&i&&i.overview?.requests===0&&0===(i.promptLogs?.total||0)?(0,r.jsx)(w,{title:"Chưa c\xf3 dữ liệu analytics",description:"Kh\xf4ng c\xf3 UsageHistory hoặc Prompt Logs theo bộ lọc hiện tại."}):null,i?(0,r.jsxs)(r.Fragment,{children:["overview"===p?(0,r.jsx)(O,{data:i}):null,"apiKeys"===p?(0,r.jsx)(V,{data:i}):null,"clients"===p?(0,r.jsx)(U,{data:i}):null,"sources"===p?(0,r.jsx)(D,{data:i}):null,"providers"===p?(0,r.jsx)(H,{data:i}):null,"experience"===p?(0,r.jsx)(B,{data:i}):null,"errors"===p?(0,r.jsx)(G,{data:i}):null,"raw"===p?(0,r.jsx)(z,{data:i}):null]}):null]})}},82114:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},94027:(e,t,s)=>{"use strict";s.d(t,{Y:()=>i,s:()=>d});var r=s(95155),n=s(12115),l=s(14051),a=s.n(l);let o=(0,n.createContext)(null);function i({children:e}){let[t,s]=(0,n.useState)(null),[l,a]=(0,n.useState)(!0),[d,c]=(0,n.useState)(""),x=(0,n.useCallback)(async()=>{a(!0),c("");try{let e=await fetch("/api/auth/status",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");return s(t||{}),t||{}}catch(e){return c(e?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),s({}),{}}finally{a(!1)}},[]);(0,n.useEffect)(()=>{let e=!1;return(async()=>{a(!0),c("");try{let t=await fetch("/api/auth/status",{cache:"no-store"}),r=await t.json().catch(()=>({}));if(e)return;if(!t.ok)throw Error(r?.error||"Kh\xf4ng tải được trạng th\xe1i đăng nhập");s(r||{})}catch(t){e||(c(t?.message||"Kh\xf4ng tải được trạng th\xe1i đăng nhập"),s({}))}finally{e||a(!1)}})(),()=>{e=!0}},[]);let m=(0,n.useMemo)(()=>{let e,s,r,n;return s=(e=t&&"object"==typeof t?t:{}).displayName||e.oidcName||e.oidcEmail||e.userId||"",r=!0===e.isAdmin,n=!0===e.isMonitorAdmin,{status:e,displayName:s,userId:e.userId||"",loginMethod:e.loginMethod||"",role:e.role||"guest",isAdmin:r,isMonitorAdmin:n,canManageApiKeys:!0===e.canManageApiKeys||r||n,canUseMonitorAdminTabs:!0===e.canUseMonitorAdminTabs||r||n}},[t]),u=(0,n.useMemo)(()=>({...m,loading:l,error:d,reload:x}),[m,l,d,x]);return(0,r.jsx)(o.Provider,{value:u,children:e})}function d(){let e=(0,n.useContext)(o);return e||{status:{},displayName:"",userId:"",loginMethod:"",role:"admin",isAdmin:!0,isMonitorAdmin:!1,canManageApiKeys:!0,canUseMonitorAdminTabs:!0,loading:!1,error:"",reload:async()=>({})}}i.propTypes={children:a().node}}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=39944)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{20061:(e,t,n)=>{Promise.resolve().then(n.bind(n,47295))},47295:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>H});var a=n(95155),r=n(12115),l=n(44923),s=n(87256),o=n(39768),i=n(82639),d=n(35497),c=n(11059),m=n(28777),u=n(52679);let x=/^[a-zA-Z0-9_.\-]+$/,b=[{value:"global",label:"To\xe0n cục / h\xe0nh vi hiện tại",description:"Giữ h\xe0nh vi hiện tại: mọi request d\xf9ng chung v\xf2ng xoay combo to\xe0n cục."},{value:"client_ip",label:"IP client",description:"Giữ c\xf9ng model khởi đầu cho c\xf9ng IP client cho đến khi hết TTL."},{value:"client_session",label:"IP client + phi\xean chat",description:"Ph\xf9 hợp nhất cho c\xf4ng cụ chat. Giữ c\xf9ng model cho c\xf9ng m\xe1y v\xe0 c\xf9ng phi\xean chat."}],p=[{value:"fallback",label:"Ưu ti\xean fallback",description:"Thử model trong combo theo đ\xfang thứ tự hiển thị, lỗi th\xec fallback."},{value:"round-robin",label:"Round Robin",description:"Lu\xe2n phi\xean model đang bật được thử đầu ti\xean. C\xe1c t\xf9y chọn giữ d\xednh b\xean dưới vẫn được \xe1p dụng."},{value:"least-latency",label:"Độ trễ thấp nhất",description:"Ưu ti\xean target c\xf3 điểm health/độ trễ tốt nhất. Hữu \xedch cho LAN Ollama."},{value:"p2c",label:"P2C",description:"Power of Two Choices: lấy mẫu hai target khỏe rồi chọn target \xedt bận hơn."}],h=[{card:"border-sky-100 bg-sky-50/55 dark:border-sky-400/15 dark:bg-sky-950/10",panel:"border-sky-100/80 bg-white/80 dark:border-sky-400/15 dark:bg-zinc-950/60"},{card:"border-slate-200 bg-slate-50/80 dark:border-slate-500/15 dark:bg-slate-900/35",panel:"border-slate-200/80 bg-white/80 dark:border-slate-500/15 dark:bg-zinc-950/60"},{card:"border-emerald-100 bg-emerald-50/45 dark:border-emerald-400/15 dark:bg-emerald-950/10",panel:"border-emerald-100/80 bg-white/80 dark:border-emerald-400/15 dark:bg-zinc-950/60"},{card:"border-violet-100 bg-violet-50/45 dark:border-violet-400/15 dark:bg-violet-950/10",panel:"border-violet-100/80 bg-white/80 dark:border-violet-400/15 dark:bg-zinc-950/60"}],g=Object.freeze({temperature:.3,top_p:.95,max_tokens:4096,reasoning_budget:0,thinkingMode:"off"}),f=[{value:"inherit",label:"Theo request gốc",description:"Giữ nguy\xean request gốc, kh\xf4ng inject thinking."},{value:"off",label:"Tắt thinking",description:"Gửi chat_template_kwargs.enable_thinking = false."},{value:"on",label:"Bật thinking",description:"Gửi chat_template_kwargs.enable_thinking = true."}],y=[{value:"inherit",label:"Theo cấu h\xecnh to\xe0n cục",description:"Giữ đ\xfang logic Prompt Logs hiện tại theo setting to\xe0n cục v\xe0 stage logging."},{value:"enabled",label:"Ghi nội dung như hiện tại",description:"Cho ph\xe9p Prompt Logs ghi nội dung theo logic hiện tại khi Prompt Logs to\xe0n cục đang bật."},{value:"disabled",label:"Ẩn nội dung cho combo n\xe0y",description:"Vẫn ghi metadata cơ bản, nhưng kh\xf4ng lưu prompt/body/response/full JSON v\xe0o Prompt Logs."}];function v(e,t){return Object.prototype.hasOwnProperty.call(e||{},t)}function j(e,{min:t,max:n,precision:a=3}={}){if(null==e||""===e)return;let r=Number(e);if(Number.isFinite(r))return Number(Math.min(n,Math.max(t,r)).toFixed(a))}function k(e,{min:t,max:n}={}){let a=j(e,{min:t,max:n,precision:0});return void 0===a?void 0:Math.trunc(a)}function N(e){let t=C(e).toLowerCase();return"enabled"===t||"disabled"===t?t:"inherit"}function w(e={}){let t=e&&"object"==typeof e&&!Array.isArray(e)?e:{},n={};if(v(t,"temperature")){let e=j(t.temperature,{min:0,max:2});void 0!==e&&(n.temperature=e)}if(v(t,"top_p")){let e=j(t.top_p,{min:.01,max:1});void 0!==e&&(n.top_p=e)}let a=t.max_tokens??t.maxTokens??t.max_token;if(v(t,"max_tokens")||v(t,"maxTokens")||v(t,"max_token")){let e=k(a,{min:1,max:262144});void 0!==e&&(n.max_tokens=e)}let r=t.reasoning_budget??t.reasoningBudget??t["reasoning-budget"];if(v(t,"reasoning_budget")||v(t,"reasoningBudget")||v(t,"reasoning-budget")){let e=k(r,{min:0,max:262144});void 0!==e&&(n.reasoning_budget=e)}let l=function(e){if(!0===e)return"on";if(!1===e)return"off";let t=C(e).toLowerCase();return["on","true","1","enable","enabled"].includes(t)?"on":["off","false","0","disable","disabled"].includes(t)?"off":void 0}(t.thinkingMode??t.thinking);return l&&(n.thinkingMode=l),n}function C(e){return String(e||"").trim()}function _(e={}){return Array.isArray(e.disabledModels)?[...new Set(e.disabledModels.map(e=>C(e)).filter(Boolean))]:[]}function T(e={}){let t=e.fallbackStrategy||"fallback";return{...e,fallbackStrategy:t,stickyScope:e.stickyScope||"global",stickyTtlMinutes:Number(e.stickyTtlMinutes||120),stickyFallbackToClientIp:!1!==e.stickyFallbackToClientIp,lanHealthEnabled:!1!==e.lanHealthEnabled,healthCheckPath:e.healthCheckPath||"/api/tags",healthCheckIntervalMs:Number(e.healthCheckIntervalMs||15e3),requiredTags:Array.isArray(e.requiredTags)?e.requiredTags:[],modelTagRules:e.modelTagRules||e.modelTags||e.tagRules||{},disabledModels:_(e),requestOverrides:w(e.requestOverrides||{}),contentLoggingMode:N(e.contentLoggingMode)}}function S(e={}){let t={...e};t.disabledModels=_(e),"fallback"===(t.fallbackStrategy||"fallback")&&delete t.fallbackStrategy,t.disabledModels.length||delete t.disabledModels;let n=N(t.contentLoggingMode);"inherit"===n?delete t.contentLoggingMode:t.contentLoggingMode=n,t.requiredTags?.length||delete t.requiredTags;let a=w(t.requestOverrides||{});return Object.keys(a).length?t.requestOverrides=a:delete t.requestOverrides,t.modelTagRules&&0!==Object.keys(t.modelTagRules).length||delete t.modelTagRules,"/api/tags"===t.healthCheckPath&&delete t.healthCheckPath,15e3===Number(t.healthCheckIntervalMs)&&delete t.healthCheckIntervalMs,!0===t.lanHealthEnabled&&delete t.lanHealthEnabled,Object.keys(t).length?t:null}function M(e=[]){return Array.isArray(e)?e.join(", "):String(e||"")}function $(e=""){return String(e||"").split(/[\n,;]+/).map(e=>e.trim()).filter(Boolean)}function O(e={}){return e&&"object"==typeof e?Object.entries(e).map(([e,t])=>`${e}: ${Array.isArray(t)?t.join(", "):String(t||"")}`).join("\n"):""}function L(e){return"string"==typeof e?e:e&&"object"==typeof e&&(e.value||e.model||e.id)||""}function E(e={}){let t=C(e.provider);return C(e.providerSpecificData?.prefix)||C(e.prefix)||C((0,u.wG)(t))||t}function q(e={}){return C(e.email)||C(e.accountName)||C(e.displayName)||C(e.name)||C(e.providerSpecificData?.nodeName)||C(e.id)}function P(e){return e&&"object"==typeof e?C(e.connectionId||e.connection_id):""}function I(e){let t=L(e),n=P(e);return t?n?`${t}@@${n}`:t:""}function R(e){return"string"==typeof e?e:e&&"object"==typeof e?C(e.label)||C(e.displayName)||C(e.name)||L(e):""}function A(e){if(!e||"object"!=typeof e)return L(e);let t=L(e);return t?Object.fromEntries(Object.entries({model:t,connectionId:P(e)||void 0,label:R(e)||void 0,provider:C(e.provider)||void 0,accountName:C(e.accountName||e.account_name)||void 0,weight:Number(e.weight||0)>0?Number(e.weight):void 0}).filter(([,e])=>void 0!==e&&""!==e)):""}function B(e,t=!0){let n=A(e),a=I(n);return{value:a,enabled:t,target:n,label:R(n)||a,subtitle:function(e){if(!e||"object"!=typeof e)return"";let t=P(e),n=L(e);return t?`T\xe0i khoản cố định • ${t}${n?` • ${n}`:""}`:""}(n)}}function D(e={}){return C(e.defaultModel)||C(e.providerSpecificData?.defaultModel)||C(e.model)||""}function z(e,t,n,a=""){let r=C(n);!r||t.has(r)||(t.add(r),e.push({value:r,label:C(a)||r}))}function G(e={},t={}){let n=[],a=new Set,r=C(e.provider),l=[...new Set([E(e),C((0,u.wG)(r)),r].filter(Boolean))];for(let e of(0,m.KC)(r)||[])e?.type&&"llm"!==e.type||z(n,a,e.id,e.name||e.id);for(let[e,r]of Object.entries(t||{})){let t=C(r),s=l.find(e=>e&&t.startsWith(`${e}/`));if(!s)continue;let o=t.slice(s.length+1);z(n,a,o,e||o)}return z(n,a,D(e),"Model mặc định"),n}function F(e={},{disabledModels:t=[],requestOverrides:n,contentLoggingMode:a}={}){let r={...e},l=[...new Set((t||[]).map(e=>C(e)).filter(Boolean))];if(l.length>0?r.disabledModels=l:delete r.disabledModels,void 0!==n){let e=w(n||{});Object.keys(e).length?r.requestOverrides=e:delete r.requestOverrides}if(void 0!==a){let e=N(a);"inherit"===e?delete r.contentLoggingMode:r.contentLoggingMode=e}return S(r)}function H(){let[e,t]=(0,r.useState)([]),[n,l]=(0,r.useState)(!0),[s,o]=(0,r.useState)(!1),[i,m]=(0,r.useState)(null),[u,x]=(0,r.useState)([]),[b,p]=(0,r.useState)(!1),[h,g]=(0,r.useState)(!1),[f,y]=(0,r.useState)({}),[v,j]=(0,r.useState)(""),[k,N]=(0,r.useState)(null),{copied:w,copy:C}=(0,c.C)();(0,r.useEffect)(()=>{_()},[]),(0,r.useEffect)(()=>{if(0===e.length){v&&j("");return}let t=e.some(e=>e.name===v);v&&t||j(e[0].name)},[e,v]);let _=async()=>{try{let e=await fetch("/api/dashboard/combos",{cache:"no-store"}),n=await e.json();e.ok&&(t(n.combos||[]),y(n.comboStrategies||{}))}catch(e){console.log("Error fetching combo data:",e)}finally{l(!1)}},M=async()=>{if(!b&&!h){g(!0);try{let e=await fetch("/api/providers",{cache:"no-store"}),t=await e.json();e.ok&&(x(t.connections||[]),p(!0))}catch(e){console.log("Error loading provider accounts:",e)}finally{g(!1)}}},$=async()=>{o(!0),M()},O=async e=>{m(e),M()},L=async e=>{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:e})}),y(e)},E=async e=>{let{disabledModels:t=[],requestOverrides:n,contentLoggingMode:a,...r}=e;try{let e=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(e.ok){let e=F({},{disabledModels:t,requestOverrides:n,contentLoggingMode:a});e&&await L({...f,[r.name]:e}),await _(),j(r.name),o(!1)}else{let t=await e.json();alert(t.error||"Tạo combo thất bại")}}catch(e){console.log("Error creating combo:",e)}},q=async(e,t)=>{let{disabledModels:n=[],requestOverrides:a,contentLoggingMode:r,...l}=t,s=i?.name;try{let t=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)});if(t.ok){let e={...f};s&&s!==l.name&&e[s]&&(e[l.name]=e[s],delete e[s]);let t=F(e[l.name]||{},{disabledModels:n,requestOverrides:a,contentLoggingMode:r});t?e[l.name]=t:delete e[l.name],await L(e),await _(),j(l.name),m(null)}else{let e=await t.json();alert(e.error||"Cập nhật combo thất bại")}}catch(e){console.log("Error updating combo:",e)}},P=async n=>{let a=e.find(e=>e.id===n);N({title:"X\xf3a combo",message:"Bạn c\xf3 chắc muốn x\xf3a combo n\xe0y?",onConfirm:async()=>{N(null);try{if((await fetch(`/api/combos/${n}`,{method:"DELETE"})).ok){if(a?.name&&f[a.name]){let e={...f};delete e[a.name],await L(e)}t(e=>{let t=e.filter(e=>e.id!==n);return a?.name===v&&j(t[0]?.name||""),t})}}catch(e){console.log("Error deleting combo:",e)}}})},I=async(e,t)=>{try{let n={...f};if(t)n[e]=T(n[e]);else{let t=function(e={}){return S({...e,fallbackStrategy:"fallback"})}(n[e]||{});t?n[e]=t:delete n[e]}await L(n)}catch(e){console.log("Error updating combo strategy:",e)}},R=async(e,t)=>{try{let n={...f},a=S({...T(n[e]),...t});a?n[e]=a:delete n[e],await L(n)}catch(e){console.log("Error updating combo routing settings:",e)}},A=e.find(e=>e.name===v)||e[0]||null,B=A?Math.max(0,e.findIndex(e=>e.id===A.id)):0;return n?(0,a.jsx)("div",{className:"grid gap-4",children:[1,2,3].map(e=>(0,a.jsx)("div",{className:"h-36 animate-pulse rounded-2xl border border-border bg-surface"},e))}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Combo model"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Tạo combo model với fallback, round-robin, độ trễ thấp nhất, P2C v\xe0 routing theo trạng th\xe1i health của LAN Ollama."})]}),(0,a.jsxs)("button",{type:"button",onClick:$,className:"inline-flex items-center justify-center gap-2 rounded-xl bg-primary px-4 py-2 text-sm font-medium text-white hover:opacity-90",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"add"}),"Tạo combo"]})]}),0===e.length?(0,a.jsxs)("div",{className:"rounded-2xl border border-dashed border-border bg-surface p-12 text-center",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-4xl text-text-muted",children:"layers"}),(0,a.jsx)("h2",{className:"mt-3 text-lg font-semibold text-text-main",children:"Chưa c\xf3 combo n\xe0o"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Tạo combo model c\xf3 hỗ trợ fallback."}),(0,a.jsx)("button",{type:"button",onClick:$,className:"mt-4 rounded-xl bg-primary px-4 py-2 text-sm font-medium text-white hover:opacity-90",children:"Tạo combo"})]}):(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"rounded-2xl border border-border bg-surface/80 p-4 shadow-sm dark:bg-zinc-950/70",children:(0,a.jsxs)("div",{className:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",children:[(0,a.jsxs)("label",{className:"block min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-semibold uppercase tracking-wide text-text-muted",children:"Combo đang xem"}),(0,a.jsx)("select",{value:A?.name||"",onChange:e=>j(e.target.value),className:"w-full rounded-xl border border-border bg-white px-4 py-2.5 text-sm font-semibold text-text-main outline-none transition focus:border-primary dark:bg-zinc-900",children:e.map(e=>(0,a.jsxs)("option",{value:e.name,children:[e.name," • ",(e.models||[]).length," model"]},e.id))})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 text-xs text-text-muted",children:[(0,a.jsxs)("span",{className:"rounded-full bg-background px-3 py-1 dark:bg-zinc-900",children:["Tổng ",e.length," combo"]}),A?(0,a.jsxs)("span",{className:"rounded-full bg-primary/10 px-3 py-1 font-medium text-primary",children:["Đang hiển thị: ",A.name]}):null]})]})}),A?(0,a.jsx)(K,{combo:A,comboIndex:B,copied:w,onCopy:C,onEdit:()=>O(A),onDelete:()=>P(A.id),comboStrategy:f[A.name]||{},onToggleRoundRobin:e=>I(A.name,e),onUpdateComboStrategy:e=>R(A.name,e)},A.id):null]}),(0,a.jsx)(W,{isOpen:s,comboStrategy:{},onClose:()=>o(!1),onSave:E,activeProviders:u,providersLoading:h}),(0,a.jsx)(W,{isOpen:!!i,combo:i,comboStrategy:f[i?.name]||{},onClose:()=>m(null),onSave:e=>q(i.id,e),activeProviders:u,providersLoading:h}),(0,a.jsx)(d.uo,{isOpen:!!k,onClose:()=>N(null),onConfirm:k?.onConfirm,title:k?.title||"X\xe1c nhận",message:k?.message,variant:"danger"})]})}function K({combo:e,comboIndex:t=0,copied:n,onCopy:l,onEdit:s,onDelete:o,comboStrategy:i={},onToggleRoundRobin:d,onUpdateComboStrategy:c}){let m=T(i||{}),u=m.fallbackStrategy||"fallback",x=p.find(e=>e.value===u)||p[0],g=m.stickyScope||"global",f=b.find(e=>e.value===g)||b[0],y=_(i),v=h[t%h.length],[j,k]=(0,r.useState)(M(m.requiredTags)),[N,C]=(0,r.useState)(O(m.modelTagRules));return(0,r.useEffect)(()=>{k(M(m.requiredTags)),C(O(m.modelTagRules))},[e.name,JSON.stringify(m.requiredTags||[]),JSON.stringify(m.modelTagRules||{})]),(0,a.jsxs)("div",{className:`rounded-2xl border p-5 shadow-sm transition-colors ${v.card}`,children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-primary",children:"layers"}),(0,a.jsx)("h3",{className:"truncate text-lg font-semibold text-text-main",children:e.name})]}),(0,a.jsxs)("p",{className:"mt-1 text-sm text-text-muted",children:[(e.models||[]).length," model đang bật",y.length>0?` • ${y.length} đ\xe3 tắt`:""]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(J,{icon:n===`combo-${e.id}`?"check":"content_copy",title:"Copy t\xean combo",onClick:()=>l(e.name,`combo-${e.id}`)}),(0,a.jsx)(J,{icon:"edit",title:"Chỉnh sửa",onClick:s}),(0,a.jsx)(J,{icon:"delete",title:"X\xf3a",onClick:o,danger:!0})]})]}),(0,a.jsxs)("div",{className:"mt-4 flex flex-wrap gap-2",children:[0===(e.models||[]).length?(0,a.jsx)("span",{className:"rounded-lg bg-background px-2 py-1 text-xs text-text-muted",children:"Chưa c\xf3 model đang bật"}):(e.models||[]).slice(0,5).map((e,t)=>(0,a.jsx)("span",{className:"rounded-lg bg-background px-2 py-1 font-mono text-xs text-text-main",children:R(e)},`${I(e)}-${t}`)),(e.models||[]).length>5&&(0,a.jsxs)("span",{className:"rounded-lg bg-background px-2 py-1 text-xs text-text-muted",children:["+",e.models.length-5," model nữa"]}),y.length>0&&(0,a.jsxs)("span",{className:"rounded-lg bg-red-500/10 px-2 py-1 text-xs text-red-500",children:[y.length," đ\xe3 tắt"]}),(function(e={}){let t=w(e),n=[];return void 0!==t.temperature&&n.push(`temp ${t.temperature}`),void 0!==t.top_p&&n.push(`top_p ${t.top_p}`),void 0!==t.max_tokens&&n.push(`max ${t.max_tokens}`),void 0!==t.reasoning_budget&&n.push(`reasoning ${t.reasoning_budget}`),"off"===t.thinkingMode&&n.push("thinking off"),"on"===t.thinkingMode&&n.push("thinking on"),n})(m.requestOverrides).map(e=>(0,a.jsx)("span",{className:"rounded-lg bg-primary/10 px-2 py-1 text-xs font-medium text-primary",children:e},e)),"inherit"!==m.contentLoggingMode?(0,a.jsxs)("span",{className:`rounded-lg px-2 py-1 text-xs font-medium ${"disabled"===m.contentLoggingMode?"bg-amber-500/10 text-amber-600":"bg-emerald-500/10 text-emerald-600"}`,children:["prompt logs ",m.contentLoggingMode]}):null]}),(0,a.jsxs)("div",{className:`mt-5 rounded-xl border p-4 ${v.panel}`,children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 md:flex-row md:items-center md:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main",children:"Chiến lược routing"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:x.description})]}),(0,a.jsx)("select",{value:u,onChange:e=>c({fallbackStrategy:e.target.value}),className:"rounded-lg border border-border bg-surface px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:p.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})]}),(0,a.jsx)(V,{value:m.requestOverrides||{},onChange:e=>c({requestOverrides:e}),compact:!0}),(0,a.jsx)(U,{value:m.contentLoggingMode,onChange:e=>c({contentLoggingMode:e}),compact:!0}),("least-latency"===u||"p2c"===u)&&(0,a.jsxs)("div",{className:"mt-4 rounded-xl border border-primary/15 bg-surface p-3",children:[(0,a.jsxs)("label",{className:"flex items-start gap-2 text-sm text-text-muted",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==m.lanHealthEnabled,onChange:e=>c({lanHealthEnabled:e.target.checked}),className:"mt-0.5 h-3.5 w-3.5 accent-primary"}),(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"font-medium text-text-main",children:"Routing theo trạng th\xe1i health LAN"}),(0,a.jsx)("span",{className:"mt-1 block text-xs",children:"D\xf9ng dữ liệu health v\xe0 circuit breaker khi xếp hạng target trong combo."})]})]}),(0,a.jsxs)("div",{className:"mt-3 grid gap-3 md:grid-cols-2",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Đường dẫn health"}),(0,a.jsx)("input",{value:m.healthCheckPath||"/api/tags",onChange:e=>c({healthCheckPath:e.target.value||"/api/tags"}),placeholder:"/api/tags",className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 font-mono text-xs text-text-main outline-none focus:border-primary"})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Chu kỳ kiểm tra (ms)"}),(0,a.jsx)("input",{type:"number",min:"1000",value:m.healthCheckIntervalMs||15e3,onChange:e=>c({healthCheckIntervalMs:Number(e.target.value)||15e3}),className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 text-xs text-text-main outline-none focus:border-primary"})]})]}),(0,a.jsxs)("div",{className:"mt-3 grid gap-3 md:grid-cols-2",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Tag endpoint bắt buộc"}),(0,a.jsx)("input",{value:j,onChange:e=>k(e.target.value),onBlur:()=>c({requiredTags:$(j)}),onKeyDown:e=>"Enter"===e.key&&e.currentTarget.blur(),placeholder:"gpu, vram:8gb",className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 font-mono text-xs text-text-main outline-none focus:border-primary"}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:"Mọi endpoint được route đều phải c\xf3 c\xe1c tag n\xe0y."})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Quy tắc tag theo model"}),(0,a.jsx)("textarea",{value:N,onChange:e=>C(e.target.value),onBlur:()=>c({modelTagRules:function(e=""){let t={};for(let n of String(e||"").split(/\n+/)){let e=n.trim();if(!e)continue;let a=e.indexOf(":");if(-1===a)continue;let r=e.slice(0,a).trim(),l=$(e.slice(a+1));r&&l.length&&(t[r]=l)}return t}(N)}),placeholder:"qwen3:32b: gpu, vram:16gb\nqwen3:8b: model_support:qwen3:8b",rows:3,className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 font-mono text-xs text-text-main outline-none focus:border-primary"})]})]})]}),"round-robin"===u&&(0,a.jsxs)("div",{className:"mt-4 rounded-xl border border-primary/15 bg-surface p-3",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm font-semibold text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"sticky_note_2"}),"Round Robin giữ d\xednh"]}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-xs text-text-muted",children:[(0,a.jsx)("input",{type:"checkbox",checked:"round-robin"===u,onChange:e=>d(e.target.checked),className:"h-3.5 w-3.5 accent-primary"}),"Bật"]})]}),(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"Chế độ giữ d\xednh"}),(0,a.jsx)("select",{value:g,onChange:e=>c({stickyScope:e.target.value}),className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 text-xs text-text-main outline-none focus:border-primary",children:b.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:f.description})]}),(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-1 block text-xs font-medium text-text-muted",children:"TTL giữ d\xednh (ph\xfat)"}),(0,a.jsx)("input",{type:"number",min:"1",value:m.stickyTtlMinutes||120,onChange:e=>c({stickyTtlMinutes:Number(e.target.value)||120}),className:"w-full rounded-lg border border-border bg-background px-2 py-1.5 text-xs text-text-main outline-none focus:border-primary"})]})]}),(0,a.jsxs)("label",{className:"mt-3 flex items-start gap-2 text-xs text-text-muted",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==m.stickyFallbackToClientIp,onChange:e=>c({stickyFallbackToClientIp:e.target.checked}),className:"mt-0.5 h-3.5 w-3.5 accent-primary"}),"Nếu thiếu chat session id, fallback về IP client thay v\xec xoay to\xe0n cục."]})]})]})]})}function J({icon:e,title:t,onClick:n,danger:r=!1}){return(0,a.jsx)("button",{type:"button",onClick:e=>{e.stopPropagation(),n?.()},className:`rounded-lg p-2 transition ${r?"text-red-500 hover:bg-red-500/10":"text-text-muted hover:bg-background hover:text-primary"}`,title:t,"aria-label":t,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:e})})}function X({id:e,index:t,model:n,subtitle:l="",enabled:i,isFirst:d,isLast:c,onEdit:m,onMoveUp:u,onMoveDown:x,onRemove:b,onToggleEnabled:p}){let{attributes:h,listeners:g,setNodeRef:f,transform:y,isDragging:v}=(0,s.gl)({id:e}),j={transform:o.Ks.Transform.toString(y),opacity:v?.4:1,zIndex:v?999:void 0},[k,N]=(0,r.useState)(!1),[w,C]=(0,r.useState)(n);(0,r.useEffect)(()=>{C(n)},[n]);let _=()=>{let e=w.trim();e&&e!==n?m(e):C(n),N(!1)};return(0,a.jsxs)("div",{ref:f,style:j,className:`flex items-center gap-3 rounded-xl border p-3 transition ${i?"border-border bg-background":"border-red-200 bg-red-50/70 opacity-75 dark:border-red-500/30 dark:bg-red-500/10"}`,children:[(0,a.jsx)("button",{type:"button",className:"cursor-grab text-text-muted active:cursor-grabbing",...h,...g,title:"K\xe9o để sắp xếp lại",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"drag_indicator"})}),(0,a.jsx)("span",{className:`flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold ${i?"bg-primary/10 text-primary":"bg-red-100 text-red-600 dark:bg-red-500/20 dark:text-red-300"}`,children:t+1}),k?(0,a.jsx)("input",{autoFocus:!0,value:w,onChange:e=>C(e.target.value),onBlur:_,onKeyDown:e=>{"Enter"===e.key&&_(),"Escape"===e.key&&(C(n),N(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-background px-2 py-1 font-mono text-xs text-text-main outline-none"}):(0,a.jsxs)("button",{type:"button",onClick:()=>N(!0),className:"min-w-0 flex-1 text-left",title:"Bấm để sửa model",children:[(0,a.jsx)("span",{className:`block truncate font-mono text-xs ${i?"text-text-main":"text-text-muted line-through"}`,children:n}),l?(0,a.jsx)("span",{className:"mt-0.5 block truncate text-[11px] text-text-muted",children:l}):null]}),(0,a.jsx)("button",{type:"button",onClick:p,className:`rounded-lg p-1.5 transition ${i?"text-green-600 hover:bg-green-500/10":"text-red-500 hover:bg-red-500/10"}`,title:i?"Tắt model trong combo":"Bật model trong combo",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:i?"toggle_on":"toggle_off"})}),(0,a.jsx)("button",{type:"button",onClick:u,disabled:d,className:"rounded-lg p-1.5 text-text-muted transition hover:bg-surface disabled:opacity-30",title:"Di chuyển l\xean",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"arrow_upward"})}),(0,a.jsx)("button",{type:"button",onClick:x,disabled:c,className:"rounded-lg p-1.5 text-text-muted transition hover:bg-surface disabled:opacity-30",title:"Di chuyển xuống",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"arrow_downward"})}),(0,a.jsx)("button",{type:"button",onClick:b,className:"rounded-lg p-1.5 text-red-500 transition hover:bg-red-500/10",title:"X\xf3a",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]})}function U({value:e="inherit",onChange:t,compact:n=!1}){let r=N(e),l=y.find(e=>e.value===r)||y[0];return(0,a.jsx)("div",{className:n?"mt-4 rounded-xl border border-amber-500/15 bg-surface p-3":"rounded-xl border border-amber-500/15 bg-amber-500/5 p-4",children:(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-[minmax(0,1fr)_280px] md:items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-amber-500",children:"manage_search"}),"Prompt Logs cho combo n\xe0y"]}),(0,a.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:l.description}),"disabled"===r?(0,a.jsx)("p",{className:"mt-1 text-[11px] font-medium text-amber-600",children:"Khi chạy request, Prompt Logs sẽ chỉ ghi metadata v\xe0 hiển thị [promptlogs disabled on this combo]."}):null]}),(0,a.jsx)("select",{value:r,onChange:e=>t?.(N(e.target.value)),className:"w-full rounded-lg border border-border bg-surface px-3 py-2 text-sm text-text-main outline-none focus:border-primary",children:y.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))})]})})}function V({value:e={},onChange:t,compact:n=!1}){let r=w(e),l=void 0!==r.temperature,s=void 0!==r.top_p,o=void 0!==r.max_tokens,i=void 0!==r.reasoning_budget,d=r.thinkingMode||"inherit",c=e=>{t?.(w({...r,...e}))},m=(e,n,a)=>{if(!n){let n={...r};delete n[e],t?.(w(n));return}c({[e]:a})};return(0,a.jsxs)("div",{className:n?"mt-4 rounded-xl border border-sky-500/15 bg-surface p-3":"rounded-xl border border-sky-500/15 bg-sky-500/5 p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm font-semibold text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px] text-sky-500",children:"tune"}),"Tham số request Local endpoint"]}),(0,a.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:["Chỉ inject khi combo route 100% tới local endpoint: ",(0,a.jsx)("span",{className:"font-mono",children:"llama.cpp"}),", ",(0,a.jsx)("span",{className:"font-mono",children:"vLLM"})," hoặc ",(0,a.jsx)("span",{className:"font-mono",children:"Ollama"}),". Nếu combo mix local + cloud/provider kh\xe1c, BlueRouter bỏ qua to\xe0n bộ block n\xe0y v\xe0 giữ nguy\xean request gốc."]})]}),!function(e={}){return Object.keys(w(e)).length>0}(r)?(0,a.jsx)("span",{className:"inline-flex items-center rounded-full bg-background px-2 py-1 text-[11px] font-semibold text-text-muted",children:"Kh\xf4ng inject"}):(0,a.jsx)("span",{className:"inline-flex items-center rounded-full bg-primary/10 px-2 py-1 text-[11px] font-semibold text-primary",children:"Đang override"})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5",children:[(0,a.jsxs)("label",{className:`rounded-lg border p-3 transition ${l?"border-primary/30 bg-background":"border-border bg-background/60"}`,children:[(0,a.jsxs)("span",{className:"mb-2 flex items-center justify-between gap-2 text-xs font-medium text-text-main",children:["Temperature",(0,a.jsx)("input",{type:"checkbox",checked:l,onChange:e=>m("temperature",e.target.checked,g.temperature),className:"h-3.5 w-3.5 accent-primary"})]}),(0,a.jsx)("input",{type:"number",min:"0",max:"2",step:"0.05",disabled:!l,value:l?r.temperature:g.temperature,onChange:e=>c({temperature:e.target.value}),className:"w-full rounded-lg border border-border bg-surface px-2 py-1.5 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:"0 = ổn định, 2 = s\xe1ng tạo."})]}),(0,a.jsxs)("label",{className:`rounded-lg border p-3 transition ${s?"border-primary/30 bg-background":"border-border bg-background/60"}`,children:[(0,a.jsxs)("span",{className:"mb-2 flex items-center justify-between gap-2 text-xs font-medium text-text-main",children:["top_p",(0,a.jsx)("input",{type:"checkbox",checked:s,onChange:e=>m("top_p",e.target.checked,g.top_p),className:"h-3.5 w-3.5 accent-primary"})]}),(0,a.jsx)("input",{type:"number",min:"0.01",max:"1",step:"0.01",disabled:!s,value:s?r.top_p:g.top_p,onChange:e=>c({top_p:e.target.value}),className:"w-full rounded-lg border border-border bg-surface px-2 py-1.5 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:"0.01–1.0; 0.9–0.95 thường hợp coder/chat."})]}),(0,a.jsxs)("label",{className:`rounded-lg border p-3 transition ${o?"border-primary/30 bg-background":"border-border bg-background/60"}`,children:[(0,a.jsxs)("span",{className:"mb-2 flex items-center justify-between gap-2 text-xs font-medium text-text-main",children:["max_tokens",(0,a.jsx)("input",{type:"checkbox",checked:o,onChange:e=>m("max_tokens",e.target.checked,g.max_tokens),className:"h-3.5 w-3.5 accent-primary"})]}),(0,a.jsx)("input",{type:"number",min:"1",max:"262144",step:"1",disabled:!o,value:o?r.max_tokens:g.max_tokens,onChange:e=>c({max_tokens:e.target.value}),className:"w-full rounded-lg border border-border bg-surface px-2 py-1.5 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:"Giới hạn output cho request."})]}),(0,a.jsxs)("label",{className:`rounded-lg border p-3 transition ${i?"border-primary/30 bg-background":"border-border bg-background/60"}`,children:[(0,a.jsxs)("span",{className:"mb-2 flex items-center justify-between gap-2 text-xs font-medium text-text-main",children:["reasoning_budget",(0,a.jsx)("input",{type:"checkbox",checked:i,onChange:e=>m("reasoning_budget",e.target.checked,g.reasoning_budget),className:"h-3.5 w-3.5 accent-primary"})]}),(0,a.jsx)("input",{type:"number",min:"0",max:"262144",step:"1",disabled:!i,value:i?r.reasoning_budget:g.reasoning_budget,onChange:e=>c({reasoning_budget:e.target.value}),className:"w-full rounded-lg border border-border bg-surface px-2 py-1.5 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:"Chỉ d\xf9ng cho llama.cpp/vLLM local; runtime sẽ map đ\xfang field."})]}),(0,a.jsxs)("label",{className:"rounded-lg border border-border bg-background p-3",children:[(0,a.jsx)("span",{className:"mb-2 block text-xs font-medium text-text-main",children:"Thinking"}),(0,a.jsx)("select",{value:d,onChange:e=>c({thinkingMode:"inherit"===e.target.value?void 0:e.target.value}),className:"w-full rounded-lg border border-border bg-surface px-2 py-1.5 text-sm text-text-main outline-none focus:border-primary",children:f.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},e.value))}),(0,a.jsx)("span",{className:"mt-1 block text-[11px] text-text-muted",children:f.find(e=>e.value===d)?.description||f[0].description})]})]})]})}function W({isOpen:e,combo:t,comboStrategy:n={},onClose:o,onSave:c,activeProviders:m,providersLoading:b=!1,kindFilter:p=null}){let[h,f]=(0,r.useState)(t?.name||""),[y,v]=(0,r.useState)([]),[j,k]=(0,r.useState)(!1),[T,S]=(0,r.useState)(!1),[M,$]=(0,r.useState)(""),[O,L]=(0,r.useState)({}),[P,R]=(0,r.useState)(""),[z,F]=(0,r.useState)(""),[H,K]=(0,r.useState)(()=>t?w(n?.requestOverrides||{}):w(g)),[J,Q]=(0,r.useState)(()=>N(n?.contentLoggingMode)),Z=n||{},Y=(0,l.FR)((0,l.MS)(l.AN,{activationConstraint:{distance:5}}),(0,l.MS)(l.uN,{coordinateGetter:s.JR}));(0,r.useEffect)(()=>{e&&(f(t?.name||""),v(function(e,t={}){let n=(e?.models||[]).map(e=>B(e,!0)).filter(e=>e.value),a=new Set(n.map(e=>e.value));return[...n,..._(t).filter(e=>!a.has(e)).map(e=>B(e,!1)).filter(e=>e.value)]}(t,Z)),$(""),R(""),F(""),K(t?w(Z.requestOverrides||{}):w(g)),Q(N(Z.contentLoggingMode)))},[e,t?.id,t?.name,Z.contentLoggingMode]),(0,r.useEffect)(()=>{e&&ee()},[e]);let ee=async()=>{try{let e=await fetch("/api/models/alias",{cache:"no-store"});if(!e.ok)return;let t=await e.json();L(t.aliases||{})}catch(e){console.error("Error fetching modal data:",e)}},et=y.map((e,t)=>({uid:`item-${t}-${e.value}`,row:e})),en=y.map(e=>e.value),ea=y.filter(e=>e.enabled).length,er=y.filter(e=>!e.enabled).length,el=(m||[]).filter(e=>e?.isActive!==!1),es=el.find(e=>e.id===P)||null,eo=es?G(es,O):[],ei=eo[0]?.value||(es?D(es):""),ed=e=>e.trim()?x.test(e)?($(""),!0):($("Chỉ cho ph\xe9p chữ, số, dấu -, _ v\xe0 ."),!1):($("Bắt buộc nhập t\xean"),!1),ec=async()=>{if(!ed(h))return;let{models:e,disabledModels:t}=function(e=[]){let t=[],n=new Set;for(let a of e){let e=C(a?.value||I(a?.target));!e||n.has(e)||(n.add(e),t.push({...a,value:e,enabled:a?.enabled!==!1,target:A(a?.target||a?.value)}))}return{models:t.filter(e=>e.enabled).map(e=>e.target).filter(Boolean),disabledModels:t.filter(e=>!e.enabled).map(e=>e.value)}}(y);S(!0),await c({name:h.trim(),models:e,disabledModels:t,requestOverrides:w(H),contentLoggingMode:J}),S(!1)};if(!e)return null;let em=!!t;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/45 p-3 backdrop-blur-[1px] sm:p-4",children:(0,a.jsxs)("div",{className:"flex max-h-[92vh] w-full max-w-7xl flex-col overflow-hidden rounded-2xl border border-border bg-white shadow-2xl dark:bg-zinc-950",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between border-b border-border px-5 py-4 sm:px-6",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:em?"Chỉnh sửa combo":"Tạo combo"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Chọn model, tắt tạm thời khi cần v\xe0 sắp xếp thứ tự ưu ti\xean fallback đang bật."})]}),(0,a.jsx)("button",{type:"button",onClick:o,className:"rounded-lg p-1 text-text-muted transition hover:bg-surface hover:text-text-main",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"close"})})]}),(0,a.jsxs)("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto bg-white px-5 py-4 dark:bg-zinc-950 sm:px-6",children:[(0,a.jsxs)("label",{className:"block",children:[(0,a.jsx)("span",{className:"mb-2 block text-sm font-semibold text-text-main",children:"T\xean"}),(0,a.jsx)("input",{value:h,onChange:e=>{let t=e.target.value;f(t),t?ed(t):$("")},placeholder:"premium-coding",className:`w-full rounded-xl border bg-white px-4 py-2.5 text-text-main outline-none transition focus:border-primary dark:bg-zinc-900 ${M?"border-red-400":"border-border"}`}),(0,a.jsx)("span",{className:`mt-1 block text-xs ${M?"text-red-500":"text-text-muted"}`,children:M||"Chỉ cho ph\xe9p chữ, số, dấu -, _ v\xe0 ."})]}),(0,a.jsx)(V,{value:H,onChange:K,defaultEnabled:!em}),(0,a.jsx)(U,{value:J,onChange:Q}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-3 flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-sm font-semibold text-text-main",children:"Danh s\xe1ch model"}),(0,a.jsxs)("p",{className:"mt-1 text-xs text-text-muted",children:[ea," đang bật",er>0?`, ${er} đ\xe3 tắt`:"",". Model đ\xe3 tắt vẫn nằm trong combo nhưng kh\xf4ng được route."]})]}),(0,a.jsxs)("button",{type:"button",onClick:()=>k(!0),className:"inline-flex items-center gap-1 rounded-lg border border-border px-3 py-1.5 text-xs font-medium text-primary hover:border-primary/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"add"}),"Th\xeam model"]})]}),(0,a.jsxs)("div",{className:"mb-4 rounded-xl border border-primary/15 bg-primary/5 p-3",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"account_tree"}),"Th\xeam target theo provider account"]}),(0,a.jsx)("p",{className:"mb-3 text-xs text-text-muted",children:"Cố định bước combo n\xe0y v\xe0o một provider account cụ thể. Danh s\xe1ch account chỉ được load khi mở modal để trang combo nhẹ hơn."}),(0,a.jsxs)("div",{className:"grid gap-2 md:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)_auto]",children:[(0,a.jsxs)("select",{value:P,onChange:e=>{let t=e.target.value,n=el.find(e=>e.id===t),a=n?G(n,O):[];R(t),F(a[0]?.value||D(n||{})||"")},className:"min-w-0 rounded-lg border border-border bg-background px-3 py-2 text-xs text-text-main outline-none focus:border-primary",children:[(0,a.jsx)("option",{value:"",children:b?"Đang tải provider account...":"Chọn provider account"}),el.map(e=>{let t=E(e),n=q(e),r=n&&n!==t?`${t} / ${n}`:t;return(0,a.jsx)("option",{value:e.id,children:r},e.id)})]}),(0,a.jsxs)("select",{value:z,onChange:e=>F(e.target.value),disabled:!P||0===eo.length,className:"min-w-0 rounded-lg border border-border bg-background px-3 py-2 font-mono text-xs text-text-main outline-none focus:border-primary disabled:cursor-not-allowed disabled:opacity-60",children:[(0,a.jsx)("option",{value:"",children:P?eo.length>0?"Chọn model":"Kh\xf4ng t\xecm thấy model của provider":"Chọn account trước"}),eo.map(e=>(0,a.jsx)("option",{value:e.value,children:e.label},`${e.value}-${e.label}`))]}),(0,a.jsxs)("button",{type:"button",onClick:()=>{if(!es)return;let e=function(e,t){let n=E(e),a=function(e={}){let t=C(e.provider),n=E(e);return(0,u.mq)(t)||(0,u.gb)(t)?n||t:t||n}(e),r=q(e),l=C(t||D(e));if(!n||!e?.id||!l)return null;let s=l.includes("/"),o=s?l:`${n}/${l}`,i=s&&l.startsWith(`${n}/`)?l.slice(n.length+1):l,d=r&&r!==a?`${a}/${r}/${i}`:`${a}/${i}`;return{model:o,connectionId:e.id,provider:a||n,accountName:r||void 0,label:d}}(es,z||ei);if(!e)return void alert("H\xe3y chọn provider account v\xe0 model cho target cố định n\xe0y.");let t=B(e,!0);v(e=>{let n=e.findIndex(e=>e.value===t.value);if(-1!==n){let a=[...e];return a[n]={...a[n],...t,enabled:!0},a}return[...e,t]}),F("")},disabled:!P||!z,className:"inline-flex items-center justify-center gap-1 rounded-lg bg-primary px-3 py-2 text-xs font-semibold text-white disabled:opacity-50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"add_link"}),"Th\xeam account"]})]})]}),0===y.length?(0,a.jsxs)("div",{className:"rounded-xl border border-dashed border-border p-8 text-center text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined",children:"layers"}),(0,a.jsx)("p",{className:"mt-2 text-sm",children:"Chưa th\xeam model n\xe0o"})]}):(0,a.jsx)(l.Mp,{sensors:Y,collisionDetection:l.fp,modifiers:[i.FN,i.gj],onDragEnd:e=>{let{active:t,over:n}=e;if(n&&t.id!==n.id){let e=et.findIndex(e=>e.uid===t.id),a=et.findIndex(e=>e.uid===n.id);-1!==e&&-1!==a&&v(t=>(0,s.be)(t,e,a))}},children:(0,a.jsx)(s.gB,{items:et.map(e=>e.uid),strategy:s._G,children:(0,a.jsx)("div",{className:"space-y-3",children:et.map(({uid:e,row:t},n)=>(0,a.jsx)(X,{id:e,index:n,model:t.label||t.value,subtitle:t.subtitle,enabled:t.enabled,isFirst:0===n,isLast:n===y.length-1,onEdit:e=>{let t=e.trim();if(!t)return;let a=[...y],r=a[n];if(r?.target&&"object"==typeof r.target){let e=A({...r.target,model:t});a[n]=B(e,!1!==r.enabled)}else a[n]=B(t,r?.enabled!==!1);v(a)},onMoveUp:()=>{if(0===n)return;let e=[...y];[e[n-1],e[n]]=[e[n],e[n-1]],v(e)},onMoveDown:()=>{if(n===y.length-1)return;let e=[...y];[e[n],e[n+1]]=[e[n+1],e[n]],v(e)},onToggleEnabled:()=>{let e=[...y];e[n]={...e[n],enabled:!e[n].enabled},v(e)},onRemove:()=>v(y.filter((e,t)=>t!==n))},e))})})})]})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-3 border-t border-border bg-white px-5 py-4 dark:bg-zinc-950 sm:px-6",children:[(0,a.jsx)("button",{type:"button",onClick:o,className:"rounded-xl border border-border px-4 py-2 text-sm font-medium text-text-main hover:bg-surface",children:"Hủy"}),(0,a.jsx)("button",{type:"button",onClick:ec,disabled:T,className:"rounded-xl bg-primary px-4 py-2 text-sm font-medium text-white hover:opacity-90 disabled:opacity-50",children:T?"Đang lưu...":em?"Lưu":"Tạo"})]})]})}),(0,a.jsx)(d.rq,{isOpen:j,onClose:()=>k(!1),onSelect:e=>{let t=e.value;v(e=>{let n=e.findIndex(e=>e.value===t);if(-1!==n){let t=[...e];return t[n]={...t[n],enabled:!0},t}return[...e,B(t,!0)]})},onDeselect:e=>{v(t=>t.filter(t=>t.value!==e.value))},activeProviders:m,modelAliases:O,title:"Th\xeam model v\xe0o combo",kindFilter:p,addedModelValues:en,closeOnSelect:!1})]})}}},e=>{e.O(0,[2574,3862,2649,7055,620,5497,8441,3794,7358],()=>e(e.s=20061)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4520],{23333:()=>{},33796:(e,t,s)=>{Promise.resolve().then(s.bind(s,83016))},39092:(e,t,s)=>{"use strict";e.exports=s(73279).style},54642:e=>{var t;"u">typeof __nccwpck_require__&&(__nccwpck_require__.ab="//"),(t={}).endianness=function(){return"LE"},t.hostname=function(){return"u">typeof location?location.hostname:""},t.loadavg=function(){return[]},t.uptime=function(){return 0},t.freemem=function(){return Number.MAX_VALUE},t.totalmem=function(){return Number.MAX_VALUE},t.cpus=function(){return[]},t.type=function(){return"Browser"},t.release=function(){return"u">typeof navigator?navigator.appVersion:""},t.networkInterfaces=t.getNetworkInterfaces=function(){return{}},t.arch=function(){return"javascript"},t.platform=function(){return"browser"},t.tmpdir=t.tmpDir=function(){return"/tmp"},t.EOL="\n",t.homedir=function(){return"/"},e.exports=t},73279:(e,t,s)=>{"use strict";var a=s(41463);s(23333);var r=s(12115),n=r&&"object"==typeof r&&"default"in r?r:{default:r},i=void 0!==a&&a.env&&!0,d=function(e){return"[object String]"===Object.prototype.toString.call(e)},o=function(){function e(e){var t=void 0===e?{}:e,s=t.name,a=void 0===s?"stylesheet":s,r=t.optimizeForSpeed,n=void 0===r?i:r;l(d(a),"`name` must be a string"),this._name=a,this._deletedRulePlaceholder="#"+a+"-deleted-rule____{}",l("boolean"==typeof n,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=n,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var o="u">typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=o?o.getAttribute("content"):null}var t,s=e.prototype;return s.setOptimizeForSpeed=function(e){l("boolean"==typeof e,"`setOptimizeForSpeed` accepts a boolean"),l(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=e,this.inject()},s.isOptimizeForSpeed=function(){return this._optimizeForSpeed},s.inject=function(){var e=this;if(l(!this._injected,"sheet already injected"),this._injected=!0,"u">typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(i||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(t,s){return"number"==typeof s?e._serverSheet.cssRules[s]={cssText:t}:e._serverSheet.cssRules.push({cssText:t}),s},deleteRule:function(t){e._serverSheet.cssRules[t]=null}}},s.getSheetForTag=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]},s.getSheet=function(){return this.getSheetForTag(this._tags[this._tags.length-1])},s.insertRule=function(e,t){if(l(d(e),"`insertRule` accepts only strings"),"u"<typeof window)return"number"!=typeof t&&(t=this._serverSheet.cssRules.length),this._serverSheet.insertRule(e,t),this._rulesCount++;if(this._optimizeForSpeed){var s=this.getSheet();"number"!=typeof t&&(t=s.cssRules.length);try{s.insertRule(e,t)}catch(t){return i||console.warn("StyleSheet: illegal rule: \n\n"+e+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),-1}}else{var a=this._tags[t];this._tags.push(this.makeStyleTag(this._name,e,a))}return this._rulesCount++},s.replaceRule=function(e,t){if(this._optimizeForSpeed||"u"<typeof window){var s="u">typeof window?this.getSheet():this._serverSheet;if(t.trim()||(t=this._deletedRulePlaceholder),!s.cssRules[e])return e;s.deleteRule(e);try{s.insertRule(t,e)}catch(a){i||console.warn("StyleSheet: illegal rule: \n\n"+t+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),s.insertRule(this._deletedRulePlaceholder,e)}}else{var a=this._tags[e];l(a,"old rule at index `"+e+"` not found"),a.textContent=t}return e},s.deleteRule=function(e){if("u"<typeof window)return void this._serverSheet.deleteRule(e);if(this._optimizeForSpeed)this.replaceRule(e,"");else{var t=this._tags[e];l(t,"rule at index `"+e+"` not found"),t.parentNode.removeChild(t),this._tags[e]=null}},s.flush=function(){this._injected=!1,this._rulesCount=0,"u">typeof window?(this._tags.forEach(function(e){return e&&e.parentNode.removeChild(e)}),this._tags=[]):this._serverSheet.cssRules=[]},s.cssRules=function(){var e=this;return"u"<typeof window?this._serverSheet.cssRules:this._tags.reduce(function(t,s){return s?t=t.concat(Array.prototype.map.call(e.getSheetForTag(s).cssRules,function(t){return t.cssText===e._deletedRulePlaceholder?null:t})):t.push(null),t},[])},s.makeStyleTag=function(e,t,s){t&&l(d(t),"makeStyleTag accepts only strings as second parameter");var a=document.createElement("style");this._nonce&&a.setAttribute("nonce",this._nonce),a.type="text/css",a.setAttribute("data-"+e,""),t&&a.appendChild(document.createTextNode(t));var r=document.head||document.getElementsByTagName("head")[0];return s?r.insertBefore(a,s):r.appendChild(a),a},t=[{key:"length",get:function(){return this._rulesCount}}],function(e,t){for(var s=0;s<t.length;s++){var a=t[s];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}(e.prototype,t),e}();function l(e,t){if(!e)throw Error("StyleSheet: "+t+".")}var c=function(e){for(var t=5381,s=e.length;s;)t=33*t^e.charCodeAt(--s);return t>>>0},h={};function u(e,t){if(!t)return"jsx-"+e;var s=String(t),a=e+s;return h[a]||(h[a]="jsx-"+c(e+"-"+s)),h[a]}function x(e,t){"u"<typeof window&&(t=t.replace(/\/style/gi,"\\/style"));var s=e+t;return h[s]||(h[s]=t.replace(/__jsx-style-dynamic-selector/g,e)),h[s]}var p=function(){function e(e){var t=void 0===e?{}:e,s=t.styleSheet,a=void 0===s?null:s,r=t.optimizeForSpeed,n=void 0!==r&&r;this._sheet=a||new o({name:"styled-jsx",optimizeForSpeed:n}),this._sheet.inject(),a&&"boolean"==typeof n&&(this._sheet.setOptimizeForSpeed(n),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),this._fromServer=void 0,this._indices={},this._instancesCounts={}}var t=e.prototype;return t.add=function(e){var t=this;void 0===this._optimizeForSpeed&&(this._optimizeForSpeed=Array.isArray(e.children),this._sheet.setOptimizeForSpeed(this._optimizeForSpeed),this._optimizeForSpeed=this._sheet.isOptimizeForSpeed()),"u">typeof window&&!this._fromServer&&(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(e,t){return e[t]=0,e},{}));var s=this.getIdAndRules(e),a=s.styleId,r=s.rules;if(a in this._instancesCounts){this._instancesCounts[a]+=1;return}var n=r.map(function(e){return t._sheet.insertRule(e)}).filter(function(e){return -1!==e});this._indices[a]=n,this._instancesCounts[a]=1},t.remove=function(e){var t=this,s=this.getIdAndRules(e).styleId;if(function(e,t){if(!e)throw Error("StyleSheetRegistry: "+t+".")}(s in this._instancesCounts,"styleId: `"+s+"` not found"),this._instancesCounts[s]-=1,this._instancesCounts[s]<1){var a=this._fromServer&&this._fromServer[s];a?(a.parentNode.removeChild(a),delete this._fromServer[s]):(this._indices[s].forEach(function(e){return t._sheet.deleteRule(e)}),delete this._indices[s]),delete this._instancesCounts[s]}},t.update=function(e,t){this.add(t),this.remove(e)},t.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},t.cssRules=function(){var e=this,t=this._fromServer?Object.keys(this._fromServer).map(function(t){return[t,e._fromServer[t]]}):[],s=this._sheet.cssRules();return t.concat(Object.keys(this._indices).map(function(t){return[t,e._indices[t].map(function(e){return s[e].cssText}).join(e._optimizeForSpeed?"":"\n")]}).filter(function(e){return!!e[1]}))},t.styles=function(e){var t,s;return t=this.cssRules(),void 0===(s=e)&&(s={}),t.map(function(e){var t=e[0],a=e[1];return n.default.createElement("style",{id:"__"+t,key:"__"+t,nonce:s.nonce?s.nonce:void 0,dangerouslySetInnerHTML:{__html:a}})})},t.getIdAndRules=function(e){var t=e.children,s=e.dynamic,a=e.id;if(s){var r=u(a,s);return{styleId:r,rules:Array.isArray(t)?t.map(function(e){return x(r,e)}):[x(r,t)]}}return{styleId:u(a),rules:Array.isArray(t)?t:[t]}},t.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(e,t){return e[t.id.slice(2)]=t,e},{})},e}(),m=r.createContext(null);m.displayName="StyleSheetContext";var f=n.default.useInsertionEffect||n.default.useLayoutEffect,j="u">typeof window?new p:void 0;function g(e){var t=j||r.useContext(m);return t&&("u"<typeof window?t.add(e):f(function(){return t.add(e),function(){t.remove(e)}},[e.id,String(e.dynamic)])),null}g.dynamic=function(e){return e.map(function(e){return u(e[0],e[1])}).join(" ")},t.style=g},73321:(e,t,s)=>{"use strict";var a=s(74645);s.o(a,"notFound")&&s.d(t,{notFound:function(){return a.notFound}}),s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}}),s.o(a,"useSearchParams")&&s.d(t,{useSearchParams:function(){return a.useSearchParams}})},83016:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>u});var a=s(95155),r=s(39092),n=s.n(r),i=s(12115),d=s(73321),o=s(90620);let l=[{badge:"CHAT",title:"AI Web Chat",description:"Tr\xf2 chuyện với AI nội bộ, hỗ trợ viết code, ph\xe2n t\xedch t\xe0i liệu, brainstorm \xfd tưởng v\xe0 hỏi đ\xe1p kỹ thuật.",href:"https://ai.fujinet.vn/",cta:"Mở AI Chat",icon:"chat",accent:"#d946ef",accentRgb:"217,70,239"},{badge:"DỊCH",title:"AI Translator",description:"Dịch Word, Excel, PowerPoint, h\xecnh ảnh v\xe0 PDF bằng AI, ưu ti\xean giữ nguy\xean định dạng gốc.",href:"https://translate-workspace.fujinet.vn",cta:"Mở Translator",icon:"translate",accent:"#a855f7",accentRgb:"168,85,247"},{badge:"TICKET",title:"IT Support",description:"Gửi y\xeau cầu hỗ trợ kỹ thuật, theo d\xf5i tiến độ ticket, trao đổi với IT v\xe0 xem lịch sử xử l\xfd sự cố.",href:"https://itsupport.fujinet.vn",cta:"Gửi Ticket",icon:"support",accent:"#3b82f6",accentRgb:"59,130,246"},{badge:"MEETING",title:"Web Meeting",description:"Họp video conference nội bộ trực tuyến, hỗ trợ chia sẻ m\xe0n h\xecnh, trao đổi nh\xf3m v\xe0 l\xe0m việc từ xa.",href:"https://meeting.fujinet.net",cta:"V\xe0o Meeting",icon:"meeting",accent:"#10b981",accentRgb:"16,185,129"},{badge:"ASSET",title:"IT Resource",description:"Quản l\xfd thiết bị, t\xe0i khoản, VPN, Work From Home v\xe0 c\xe1c dịch vụ hạ tầng CNTT nội bộ.",href:"https://itresource.fujinet.net/",cta:"Mở Resource",icon:"resource",accent:"#06b6d4",accentRgb:"6,182,212"}];function c({name:e,className:t="h-5 w-5"}){let s={className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};return"chat"===e?(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M7.5 8.5h9"}),(0,a.jsx)("path",{d:"M7.5 12h5.5"}),(0,a.jsx)("path",{d:"M21 11.5a7.5 7.5 0 0 1-7.5 7.5H8l-5 3v-5.2A7.5 7.5 0 1 1 21 11.5Z"})]}):"translate"===e?(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M4 5h7"}),(0,a.jsx)("path",{d:"M8 3v2"}),(0,a.jsx)("path",{d:"M10 5c-.6 3.2-2.4 5.7-5 7.5"}),(0,a.jsx)("path",{d:"M5 8c1.2 1.8 2.7 3.2 4.7 4.2"}),(0,a.jsx)("path",{d:"m14 21 4-9 4 9"}),(0,a.jsx)("path",{d:"M15.5 17.5h5"})]}):"support"===e?(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("path",{d:"M4 13a8 8 0 0 1 16 0"}),(0,a.jsx)("path",{d:"M18 19a3 3 0 0 1-3 3h-2"}),(0,a.jsx)("path",{d:"M4 13v3a2 2 0 0 0 2 2h1v-7H6a2 2 0 0 0-2 2Z"}),(0,a.jsx)("path",{d:"M20 13v3a2 2 0 0 1-2 2h-1v-7h1a2 2 0 0 1 2 2Z"})]}):"meeting"===e?(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("rect",{x:"3",y:"6",width:"13",height:"12",rx:"2"}),(0,a.jsx)("path",{d:"m16 10 5-3v10l-5-3"}),(0,a.jsx)("path",{d:"M7.5 10h4"}),(0,a.jsx)("path",{d:"M7.5 14h2.5"})]}):"resource"===e?(0,a.jsxs)("svg",{...s,children:[(0,a.jsx)("rect",{x:"4",y:"5",width:"16",height:"11",rx:"2"}),(0,a.jsx)("path",{d:"M8 20h8"}),(0,a.jsx)("path",{d:"M12 16v4"}),(0,a.jsx)("path",{d:"M8 9h8"}),(0,a.jsx)("path",{d:"M8 12h4"})]}):null}function h({service:e}){return(0,a.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"group relative flex flex-col justify-between overflow-hidden rounded-2xl border border-white/12 bg-white/[0.04] p-4 backdrop-blur-xl transition-all duration-300 hover:-translate-y-1 hover:border-white/25 hover:bg-white/[0.08]",style:{boxShadow:"0 8px 24px rgba(0,0,0,0.25), inset 0 1px 0 rgba(255,255,255,0.05)"},children:[(0,a.jsx)("div",{className:"pointer-events-none absolute -right-8 -top-8 h-24 w-24 rounded-full opacity-50 blur-2xl transition-opacity duration-300 group-hover:opacity-80",style:{background:e.accent}}),(0,a.jsx)("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 h-px opacity-0 transition-opacity duration-300 group-hover:opacity-100",style:{background:`linear-gradient(90deg, transparent, ${e.accent}, transparent)`}}),(0,a.jsxs)("div",{className:"relative z-10 mb-3 flex items-center justify-between",children:[(0,a.jsx)("span",{className:"rounded-full px-2.5 py-0.5 text-[9px] font-black uppercase tracking-[0.18em] text-white shadow-lg",style:{background:e.accent,boxShadow:`0 4px 12px rgba(${e.accentRgb}, 0.4)`},children:e.badge}),(0,a.jsx)("span",{className:"grid h-8 w-8 place-items-center rounded-xl bg-white/95 shadow-md ring-1 ring-white/20 transition-transform group-hover:scale-110 group-hover:rotate-3",style:{color:e.accent},children:(0,a.jsx)(c,{name:e.icon,className:"h-4 w-4"})})]}),(0,a.jsxs)("div",{className:"relative z-10 flex-1",children:[(0,a.jsx)("h3",{className:"text-sm font-bold text-white",children:e.title}),(0,a.jsx)("p",{className:"mt-1 text-[11px] leading-relaxed text-white/55 line-clamp-2",children:e.description})]}),(0,a.jsxs)("div",{className:"relative z-10 mt-3 flex items-center gap-1.5 text-[10px] font-black uppercase tracking-[0.14em] text-violet-200/90 transition-colors group-hover:text-white",children:[e.cta,(0,a.jsx)("svg",{className:"h-3 w-3 transition-transform group-hover:translate-x-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",children:(0,a.jsx)("path",{d:"M5 12h14M13 5l7 7-7 7"})})]})]})}function u(){let[e,t]=(0,i.useState)("admin"),[s,r]=(0,i.useState)(""),[c,u]=(0,i.useState)(!1),[x,p]=(0,i.useState)(""),[m,f]=(0,i.useState)(""),[j,g]=(0,i.useState)(0),[v,b]=(0,i.useState)(!1),[w,y]=(0,i.useState)(null),[N,k]=(0,i.useState)("password"),[_,S]=(0,i.useState)(!1),[C,M]=(0,i.useState)("Sign in with OIDC"),[R,F]=(0,i.useState)(!1),[L,A]=(0,i.useState)(!1),[I,z]=(0,i.useState)("admin"),T=(0,d.useRouter)();o.vQ?.name,(0,i.useEffect)(()=>{if(j<=0)return;let e=setInterval(()=>g(e=>e>0?e-1:0),1e3);return()=>clearInterval(e)},[j]),(0,i.useEffect)(()=>{!async function(){let e=new AbortController,s=setTimeout(()=>e.abort(),5e3),a=window.location.origin;try{let r=await fetch(`${a}/api/auth/status`,{signal:e.signal});if(clearTimeout(s),r.ok){let e=await r.json();y(!!e.hasPassword),k(e.authMode||"password"),S(!0===e.oidcConfigured),M(e.oidcLoginLabel||"Sign in with OIDC"),F(!0===e.ldapEnabled),A(!0===e.ldapConfigured),z(e.localLoginUsername||"admin"),t(e.localLoginUsername||"admin")}else y(!0)}catch{clearTimeout(s),y(!0)}}()},[T]);let P=async t=>{t.preventDefault(),b(!0),p(""),f("");try{let t=await fetch("/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:s,loginType:"auto"})});if(t.ok)T.push("/dashboard"),T.refresh();else{let e=await t.json();p(e.error||"Invalid account or password"),e.resetHint&&f(e.resetHint),e.retryAfter&&g(Number(e.retryAfter))}}catch{p("An error occurred. Please try again.")}finally{b(!1)}},E=_&&["oidc","both"].includes(N),W="oidc"!==N||!_,O=R&&L&&W;return(0,a.jsxs)("main",{className:"jsx-e45020aa9d0dcde0 relative min-h-screen overflow-hidden bg-[#0a0a1f] text-slate-800",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute inset-0",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 absolute -top-40 -left-40 h-[600px] w-[600px] rounded-full bg-violet-600/30 blur-[120px] animate-[floaty_12s_ease-in-out_infinite]"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 absolute top-1/3 -right-40 h-[500px] w-[500px] rounded-full bg-indigo-600/30 blur-[120px] animate-[floaty_14s_ease-in-out_infinite_-3s]"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 absolute -bottom-40 left-1/3 h-[550px] w-[550px] rounded-full bg-fuchsia-600/25 blur-[120px] animate-[floaty_16s_ease-in-out_infinite_-6s]"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 absolute top-1/2 left-1/2 h-[400px] w-[400px] -translate-x-1/2 -translate-y-1/2 rounded-full bg-cyan-500/15 blur-[100px] animate-[floaty_10s_ease-in-out_infinite_-2s]"})]}),(0,a.jsx)(n(),{id:"e45020aa9d0dcde0",children:'@keyframes floaty{0%,100%{transform:translate(0,0)scale(1)}33%{transform:translate(40px,-30px)scale(1.08)}66%{transform:translate(-30px,20px)scale(.95)}}@keyframes shimmer{0%{transform:translatex(-100%)}100%{transform:translatex(200%)}}@keyframes fadeUp{from{opacity:0;transform:translatey(20px)}to{opacity:1;transform:translatey(0)}}.shimmer-btn::after{content:"";position:absolute;top:0;left:0;bottom:0;width:60%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);animation:shimmer 2.8s ease-in-out infinite;pointer-events:none}.fade-up{animation:fadeUp.6s ease-out backwards}'}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative z-10 mx-auto flex min-h-screen max-w-7xl flex-col px-4 py-6 sm:px-6 lg:px-8 lg:py-8",children:[(0,a.jsxs)("div",{style:{boxShadow:"0 30px 90px rgba(0,0,0,0.45)"},className:"jsx-e45020aa9d0dcde0 grid w-full overflow-hidden rounded-[2rem] border border-white/10 bg-white/[0.02] backdrop-blur-2xl fade-up lg:grid-cols-[1.1fr_0.9fr]",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative hidden overflow-hidden bg-gradient-to-br from-indigo-950 via-violet-900 to-purple-900 p-8 lg:flex lg:flex-col lg:justify-between lg:p-10",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute -top-20 -right-20 h-72 w-72 rounded-full bg-fuchsia-500/40 blur-[60px]"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute -bottom-20 -left-20 h-72 w-72 rounded-full bg-indigo-500/40 blur-[60px]"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute top-1/2 left-1/2 h-48 w-48 -translate-x-1/2 -translate-y-1/2 rounded-full bg-pink-500/20 blur-[50px]"}),(0,a.jsx)("div",{style:{backgroundImage:"linear-gradient(rgba(255,255,255,0.06) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.06) 1px, transparent 1px)",backgroundSize:"32px 32px",maskImage:"radial-gradient(ellipse at center, black 30%, transparent 75%)",WebkitMaskImage:"radial-gradient(ellipse at center, black 30%, transparent 75%)"},className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute inset-0 opacity-40"}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative z-10 flex items-center gap-4",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 flex h-14 w-14 items-center justify-center rounded-2xl bg-white/95 shadow-2xl shadow-indigo-900/40 ring-1 ring-white/20",children:(0,a.jsx)("img",{src:"/fjslogo.svg",alt:"Fujinet",className:"jsx-e45020aa9d0dcde0 h-9 w-auto"})}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 text-white",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 text-base font-bold tracking-tight",children:"Fujinet Systems JSC"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 text-[11px] uppercase tracking-[0.18em] text-violet-200/70",children:"Software Solutions"})]})]}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative z-10",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mb-5 inline-flex items-center gap-2 rounded-full border border-white/20 bg-white/10 px-3.5 py-1.5 text-[10px] font-semibold uppercase tracking-[0.18em] text-white backdrop-blur-md",children:[(0,a.jsxs)("span",{className:"jsx-e45020aa9d0dcde0 relative flex h-1.5 w-1.5",children:[(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-75"}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-400"})]}),"AI Router Gateway \xb7 Internal"]}),(0,a.jsxs)("h1",{className:"jsx-e45020aa9d0dcde0 text-3xl font-black leading-[1.1] tracking-tight text-white xl:text-4xl",children:["Truy cập cổng"," ",(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 bg-gradient-to-br from-violet-200 via-fuchsia-200 to-cyan-200 bg-clip-text text-transparent",children:"AI nội bộ"})," ","Fujinet"]}),(0,a.jsx)("p",{className:"jsx-e45020aa9d0dcde0 mt-4 max-w-md text-sm leading-relaxed text-violet-100/75",children:"API key gateway d\xf9ng chung cho to\xe0n bộ workload AI — translation, coding assistance, agent runtime v\xe0 internal services."})]}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 relative z-10 space-y-2.5",children:[{icon:(0,a.jsx)("path",{d:"M16.5 10.5V7a4.5 4.5 0 0 0-9 0v3.5M5 10.5h14v9a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 5 19.5v-9Z",className:"jsx-e45020aa9d0dcde0"}),text:"OIDC \xb7 LDAP \xb7 Password — đa phương thức x\xe1c thực"},{icon:(0,a.jsx)("path",{d:"M12 3 4 6.5v5C4 16.5 7.5 20.5 12 21c4.5-.5 8-4.5 8-9.5v-5L12 3Z",className:"jsx-e45020aa9d0dcde0"}),text:"Rate limit & audit log đầy đủ cho mỗi API key"},{icon:(0,a.jsx)("path",{d:"M13 2 3 14h7l-1 8 10-12h-7l1-8Z",className:"jsx-e45020aa9d0dcde0"}),text:"Self-hosted \xb7 dữ liệu kh\xf4ng rời khỏi infra Fujinet"}].map((e,t)=>(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-center gap-3 text-[13px] text-violet-100/85",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 flex h-8 w-8 shrink-0 items-center justify-center rounded-xl border border-white/15 bg-white/10 backdrop-blur-md",children:(0,a.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-3.5 w-3.5 text-white",children:e.icon})}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0",children:e.text})]},t))})]}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative flex flex-col bg-white p-7 sm:p-10",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute -top-24 -right-24 h-72 w-72 rounded-full bg-violet-500/12 blur-3xl"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute -bottom-24 -left-24 h-64 w-64 rounded-full bg-indigo-500/10 blur-3xl"}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mb-6 flex items-center gap-3 lg:hidden",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 flex h-11 w-11 items-center justify-center rounded-xl bg-gradient-to-br from-indigo-600 to-violet-600 shadow-lg shadow-indigo-500/30",children:(0,a.jsx)("img",{src:"/fjslogo.svg",alt:"Fujinet",className:"jsx-e45020aa9d0dcde0 h-7 w-auto brightness-0 invert"})}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 text-sm font-bold text-slate-900",children:"Fujinet Systems JSC"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 text-[10px] uppercase tracking-[0.18em] text-indigo-600",children:"AI Router Gateway"})]})]}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 relative z-10 flex flex-1 flex-col",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0",children:[(0,a.jsxs)("span",{className:"jsx-e45020aa9d0dcde0 inline-flex items-center gap-1.5 rounded-full bg-gradient-to-r from-indigo-600 to-violet-600 px-3 py-1 text-[10px] font-black uppercase tracking-[0.18em] text-white shadow-lg shadow-indigo-500/30",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,className:"jsx-e45020aa9d0dcde0 h-3 w-3",children:[(0,a.jsx)("rect",{x:"4",y:"11",width:"16",height:"9",rx:"2",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M8 11V7a4 4 0 0 1 8 0v4",className:"jsx-e45020aa9d0dcde0"})]}),"Đăng nhập"]}),(0,a.jsx)("h2",{className:"jsx-e45020aa9d0dcde0 mt-3 text-2xl font-black tracking-tight text-slate-950",children:"Ch\xe0o mừng trở lại"}),(0,a.jsx)("p",{className:"jsx-e45020aa9d0dcde0 mt-1.5 text-sm text-slate-500",children:"Đăng nhập để quản l\xfd API key & route AI traffic nội bộ."})]}),null===w?(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mt-6 flex items-center justify-center gap-3 rounded-2xl border border-slate-200 bg-slate-50/80 px-4 py-5 text-sm text-slate-500",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",className:"jsx-e45020aa9d0dcde0 h-4 w-4 animate-spin text-indigo-500",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",className:"jsx-e45020aa9d0dcde0 opacity-25"}),(0,a.jsx)("path",{fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4Z",className:"jsx-e45020aa9d0dcde0 opacity-75"})]}),"Đang tải cấu h\xecnh x\xe1c thực..."]}):(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mt-6",children:[E&&(0,a.jsxs)("button",{type:"button",onClick:()=>{window.location.href="/api/auth/oidc/start"},className:"jsx-e45020aa9d0dcde0 group mb-3 flex w-full items-center justify-center gap-2.5 rounded-2xl border border-slate-200 bg-white px-4 py-2.5 text-sm font-bold text-slate-700 shadow-sm transition-all hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-indigo-50/40 hover:shadow-md hover:shadow-indigo-500/10",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4 text-indigo-600",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"m9 12 2 2 4-4",className:"jsx-e45020aa9d0dcde0"})]}),C,(0,a.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,className:"jsx-e45020aa9d0dcde0 h-3.5 w-3.5 text-slate-400 transition-transform group-hover:translate-x-0.5",children:(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 12h14M13 5l7 7-7 7",className:"jsx-e45020aa9d0dcde0"})})]}),E&&W&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mb-3 flex items-center gap-3 text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-400",children:[(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 h-px flex-1 bg-slate-200"}),"hoặc",(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 h-px flex-1 bg-slate-200"})]}),W?(0,a.jsxs)("form",{onSubmit:P,className:"jsx-e45020aa9d0dcde0 space-y-3",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0",children:[(0,a.jsx)("label",{className:"jsx-e45020aa9d0dcde0 mb-1 block text-[11px] font-black uppercase tracking-[0.16em] text-slate-500",children:"T\xe0i khoản"}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 group relative",children:[(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400 transition-colors group-focus-within:text-indigo-600",children:(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:[(0,a.jsx)("circle",{cx:"12",cy:"8",r:"4",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8",className:"jsx-e45020aa9d0dcde0"})]})}),(0,a.jsx)("input",{value:e,onChange:e=>t(e.target.value),placeholder:O?"admin hoặc LDAP username":I||"admin",autoFocus:!E,required:!0,className:"jsx-e45020aa9d0dcde0 w-full rounded-2xl border border-slate-200 bg-white py-2.5 pl-11 pr-3.5 text-sm font-medium text-slate-900 shadow-sm outline-none transition-all placeholder:font-normal placeholder:text-slate-400 focus:border-indigo-500 focus:shadow-md focus:shadow-indigo-500/10 focus:ring-4 focus:ring-indigo-500/12"})]})]}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0",children:[(0,a.jsx)("label",{className:"jsx-e45020aa9d0dcde0 mb-1 block text-[11px] font-black uppercase tracking-[0.16em] text-slate-500",children:"Mật khẩu"}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 group relative",children:[(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 pointer-events-none absolute left-3.5 top-1/2 -translate-y-1/2 text-slate-400 transition-colors group-focus-within:text-indigo-600",children:(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:[(0,a.jsx)("rect",{x:"4",y:"11",width:"16",height:"10",rx:"2",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M8 11V7a4 4 0 0 1 8 0v4",className:"jsx-e45020aa9d0dcde0"})]})}),(0,a.jsx)("input",{type:c?"text":"password",value:s,onChange:e=>r(e.target.value),placeholder:"Nhập mật khẩu",required:!0,className:"jsx-e45020aa9d0dcde0 w-full rounded-2xl border border-slate-200 bg-white py-2.5 pl-11 pr-11 text-sm font-medium text-slate-900 shadow-sm outline-none transition-all placeholder:font-normal placeholder:text-slate-400 focus:border-indigo-500 focus:shadow-md focus:shadow-indigo-500/10 focus:ring-4 focus:ring-indigo-500/12"}),(0,a.jsx)("button",{type:"button",onClick:()=>u(e=>!e),tabIndex:-1,"aria-label":c?"Ẩn mật khẩu":"Hiện mật khẩu",className:"jsx-e45020aa9d0dcde0 absolute right-3 top-1/2 -translate-y-1/2 rounded-lg p-1.5 text-slate-400 transition-colors hover:bg-slate-100 hover:text-indigo-600",children:c?(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:[(0,a.jsx)("path",{d:"M3 3l18 18",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M10.6 6.1A10.5 10.5 0 0 1 12 6c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2M6.6 6.6A17 17 0 0 0 2 13s3.5 7 10 7a10 10 0 0 0 5.4-1.6",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M9.9 9.9a3 3 0 0 0 4.2 4.2",className:"jsx-e45020aa9d0dcde0"})]}):(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:[(0,a.jsx)("path",{d:"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12Z",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("circle",{cx:"12",cy:"12",r:"3",className:"jsx-e45020aa9d0dcde0"})]})})]})]}),"oidc"===N&&!_&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-start gap-2.5 rounded-2xl border border-amber-200 bg-amber-50 p-2.5 text-xs text-amber-800",children:[(0,a.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-e45020aa9d0dcde0 mt-0.5 h-4 w-4 shrink-0",children:(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v4m0 4h.01M10.3 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z",className:"jsx-e45020aa9d0dcde0"})}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0",children:"OIDC đang bật nhưng chưa cấu h\xecnh. Password login vẫn d\xf9ng được để recovery."})]}),"both"===N&&_&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-start gap-2.5 rounded-2xl border border-indigo-200 bg-indigo-50 p-2.5 text-xs text-indigo-800",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-e45020aa9d0dcde0 mt-0.5 h-4 w-4 shrink-0",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 16v-4m0-4h.01",className:"jsx-e45020aa9d0dcde0"})]}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0",children:"Password/OIDC login đều khả dụng."})]}),x&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-start gap-2.5 rounded-2xl border border-red-200 bg-red-50 p-2.5 text-sm text-red-700",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-e45020aa9d0dcde0 mt-0.5 h-4 w-4 shrink-0",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 8v4m0 4h.01",className:"jsx-e45020aa9d0dcde0"})]}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0",children:x})]}),j>0&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-start gap-2.5 rounded-2xl border border-red-200 bg-red-50 p-2.5 text-sm text-red-700",children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,className:"jsx-e45020aa9d0dcde0 mt-0.5 h-4 w-4 shrink-0",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6l4 2",className:"jsx-e45020aa9d0dcde0"})]}),(0,a.jsxs)("span",{className:"jsx-e45020aa9d0dcde0",children:["Đ\xe3 kh\xf3a. Thử lại sau ",j,"s."]})]}),m&&(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 rounded-2xl border border-slate-200 bg-slate-50 p-2.5 text-xs text-slate-600",children:["Qu\xean mật khẩu? Mở"," ",(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 rounded bg-slate-200/70 px-1.5 py-0.5 font-mono text-[11px]",children:"bluerouter"})," ","CLI tr\xean host → Settings → Reset Password to Default."]}),(0,a.jsx)("button",{type:"submit",disabled:v||j>0,className:"jsx-e45020aa9d0dcde0 shimmer-btn relative mt-1 flex w-full items-center justify-center gap-2 overflow-hidden rounded-2xl bg-gradient-to-r from-indigo-600 via-violet-600 to-purple-600 px-4 py-3 text-sm font-black uppercase tracking-[0.06em] text-white shadow-xl shadow-indigo-500/30 transition-all hover:-translate-y-0.5 hover:shadow-2xl hover:shadow-indigo-500/40 active:translate-y-0 disabled:cursor-not-allowed disabled:opacity-60 disabled:hover:translate-y-0 disabled:hover:shadow-xl",children:(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 relative z-10 flex items-center gap-2",children:v?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",className:"jsx-e45020aa9d0dcde0 h-4 w-4 animate-spin",children:[(0,a.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"3",className:"jsx-e45020aa9d0dcde0 opacity-25"}),(0,a.jsx)("path",{fill:"currentColor",d:"M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4Z",className:"jsx-e45020aa9d0dcde0 opacity-75"})]}),"Đang đăng nhập..."]}):j>0?(0,a.jsxs)(a.Fragment,{children:["Đợi ",j,"s"]}):(0,a.jsxs)(a.Fragment,{children:["Đăng nhập",(0,a.jsx)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:(0,a.jsx)("path",{d:"M5 12h14M13 5l7 7-7 7",className:"jsx-e45020aa9d0dcde0"})})]})})}),!1===w&&(0,a.jsx)("p",{className:"jsx-e45020aa9d0dcde0 text-center text-xs text-slate-500",children:"Chưa c\xf3 custom password. Default password vẫn d\xf9ng được cho đến khi bạn đổi."})]}):x&&(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 rounded-2xl border border-red-200 bg-red-50 p-3 text-sm text-red-700",children:x})]})]})]})]}),(0,a.jsxs)("div",{style:{animationDelay:"0.15s"},className:"jsx-e45020aa9d0dcde0 relative z-10 mt-6 fade-up",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 mb-4 flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-center gap-3",children:[(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 h-px w-8 bg-gradient-to-r from-transparent to-violet-400/60"}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 text-[11px] font-black uppercase tracking-[0.22em] text-violet-200/80",children:"Hệ thống nội bộ"}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 h-px w-8 bg-gradient-to-l from-transparent to-violet-400/60"})]}),(0,a.jsx)("span",{className:"jsx-e45020aa9d0dcde0 text-[11px] text-white/40",children:"Truy cập nhanh c\xe1c dịch vụ"})]}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 grid gap-3 sm:grid-cols-2 lg:grid-cols-5",children:l.map(e=>(0,a.jsx)(h,{service:e},e.badge))})]}),(0,a.jsxs)("footer",{className:"jsx-e45020aa9d0dcde0 relative z-10 mt-6 flex flex-col items-center justify-between gap-3 border-t border-white/10 pt-5 text-xs text-white/40 sm:flex-row",children:[(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 flex items-center gap-3",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 flex h-8 w-8 items-center justify-center rounded-xl bg-gradient-to-br from-indigo-600 to-violet-600 text-white shadow-lg shadow-indigo-500/20 ring-1 ring-indigo-500/20",children:(0,a.jsxs)("svg",{fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.2,strokeLinecap:"round",strokeLinejoin:"round",className:"jsx-e45020aa9d0dcde0 h-4 w-4",children:[(0,a.jsx)("path",{d:"M12 3.75 19.5 8v8L12 20.25 4.5 16V8L12 3.75Z",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"M12 8v8",className:"jsx-e45020aa9d0dcde0"}),(0,a.jsx)("path",{d:"m7.5 10.25 4.5 2.5 4.5-2.5",className:"jsx-e45020aa9d0dcde0"})]})}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 leading-tight",children:[(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 font-semibold text-white/70",children:"Fujinet Internal Portal"}),(0,a.jsx)("div",{className:"jsx-e45020aa9d0dcde0 text-[11px] text-white/40",children:"AI Workspace \xb7 Meeting \xb7 Support \xb7 Resource"})]})]}),(0,a.jsxs)("div",{className:"jsx-e45020aa9d0dcde0 text-white/50",children:["\xa9 2026 Fujinet Systems."," ",(0,a.jsx)("a",{href:"mailto:itadmin@fujinet.net",className:"jsx-e45020aa9d0dcde0 font-semibold text-violet-300 hover:text-violet-200 hover:underline",children:"Contact: itadmin@fujinet.net"})]})]})]})]})}}},e=>{e.O(0,[620,8441,3794,7358],()=>e(e.s=33796)),_N_E=e.O()}]);