adonisjs-server-stats 1.5.4 → 1.6.2

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 (527) hide show
  1. package/README.md +351 -171
  2. package/dist/configure.d.ts.map +1 -1
  3. package/dist/core/api-client.d.ts +73 -0
  4. package/dist/core/api-client.d.ts.map +1 -0
  5. package/dist/core/config-utils.d.ts +109 -0
  6. package/dist/core/config-utils.d.ts.map +1 -0
  7. package/dist/core/constants.d.ts +11 -0
  8. package/dist/core/constants.d.ts.map +1 -0
  9. package/dist/core/dashboard-api.d.ts +65 -0
  10. package/dist/core/dashboard-api.d.ts.map +1 -0
  11. package/dist/core/dashboard-data-controller.d.ts +157 -0
  12. package/dist/core/dashboard-data-controller.d.ts.map +1 -0
  13. package/dist/core/debug-data-controller.d.ts +89 -0
  14. package/dist/core/debug-data-controller.d.ts.map +1 -0
  15. package/dist/core/feature-detect.d.ts +67 -0
  16. package/dist/core/feature-detect.d.ts.map +1 -0
  17. package/dist/core/formatters.d.ts +189 -0
  18. package/dist/core/formatters.d.ts.map +1 -0
  19. package/dist/core/history-buffer.d.ts +23 -0
  20. package/dist/core/history-buffer.d.ts.map +1 -0
  21. package/dist/core/icons.d.ts +36 -0
  22. package/dist/core/icons.d.ts.map +1 -0
  23. package/dist/core/index.d.ts +39 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +1961 -0
  26. package/dist/core/internals-utils.d.ts +71 -0
  27. package/dist/core/internals-utils.d.ts.map +1 -0
  28. package/dist/core/job-utils.d.ts +45 -0
  29. package/dist/core/job-utils.d.ts.map +1 -0
  30. package/dist/core/log-utils.d.ts +34 -0
  31. package/dist/core/log-utils.d.ts.map +1 -0
  32. package/dist/core/metrics.d.ts +41 -0
  33. package/dist/core/metrics.d.ts.map +1 -0
  34. package/dist/core/pagination.d.ts +128 -0
  35. package/dist/core/pagination.d.ts.map +1 -0
  36. package/dist/core/query-utils.d.ts +35 -0
  37. package/dist/core/query-utils.d.ts.map +1 -0
  38. package/dist/core/resizable-columns.d.ts +18 -0
  39. package/dist/core/resizable-columns.d.ts.map +1 -0
  40. package/dist/core/routes.d.ts +12 -0
  41. package/dist/core/routes.d.ts.map +1 -0
  42. package/dist/core/server-stats-controller.d.ts +106 -0
  43. package/dist/core/server-stats-controller.d.ts.map +1 -0
  44. package/dist/core/sparkline.d.ts +80 -0
  45. package/dist/core/sparkline.d.ts.map +1 -0
  46. package/dist/core/theme.d.ts +42 -0
  47. package/dist/core/theme.d.ts.map +1 -0
  48. package/dist/core/trace-utils.d.ts +62 -0
  49. package/dist/core/trace-utils.d.ts.map +1 -0
  50. package/dist/core/transmit-adapter.d.ts +59 -0
  51. package/dist/core/transmit-adapter.d.ts.map +1 -0
  52. package/dist/core/types.d.ts +619 -0
  53. package/dist/core/types.d.ts.map +1 -0
  54. package/dist/react/CacheSection-DGxMDlWK.js +146 -0
  55. package/dist/react/CacheTab-CnVW5PLs.js +123 -0
  56. package/dist/react/ConfigContent-CnsEI4j3.js +397 -0
  57. package/dist/react/ConfigSection-DPcrfqXY.js +11 -0
  58. package/dist/react/ConfigTab-BSWq_o2p.js +15 -0
  59. package/dist/react/CustomPaneTab-xjkYwTvH.js +104 -0
  60. package/dist/react/DataTable-YyShr5B-.js +55 -0
  61. package/dist/react/EmailsSection-CSyTg1aX.js +262 -0
  62. package/dist/react/EmailsTab-Dh2YSa_f.js +131 -0
  63. package/dist/react/EventsSection-C1pbJDfW.js +86 -0
  64. package/dist/react/EventsTab-eCh02cdd.js +63 -0
  65. package/dist/react/FilterBar-DQRXpWrb.js +50 -0
  66. package/dist/react/InternalsContent-DBzsI0CG.js +346 -0
  67. package/dist/react/InternalsSection-t7ihcWO-.js +32 -0
  68. package/dist/react/InternalsTab-Oij0A2fN.js +30 -0
  69. package/dist/react/JobsSection-CLAin5vU.js +187 -0
  70. package/dist/react/JobsTab-Dl5nrj2z.js +141 -0
  71. package/dist/react/LogsSection-C1p81fXO.js +212 -0
  72. package/dist/react/LogsTab-D-kR7PjX.js +88 -0
  73. package/dist/react/OverviewSection-nm3xdACz.js +539 -0
  74. package/dist/react/Pagination-BkmzUDY8.js +64 -0
  75. package/dist/react/QueriesSection-DB12HMfQ.js +461 -0
  76. package/dist/react/QueriesTab-fyBB1u_Y.js +90 -0
  77. package/dist/react/RequestsSection-DTqB81ac.js +209 -0
  78. package/dist/react/RoutesSection-DJWa4NPV.js +74 -0
  79. package/dist/react/RoutesTab-D3l8TOpu.js +74 -0
  80. package/dist/react/TimelineSection-C4d-jRX1.js +158 -0
  81. package/dist/react/TimelineTab-C5TFaSmQ.js +193 -0
  82. package/dist/react/WaterfallChart-Cj73WdfM.js +100 -0
  83. package/dist/react/core/api-client.d.ts +73 -0
  84. package/dist/react/core/api-client.d.ts.map +1 -0
  85. package/dist/react/core/config-utils.d.ts +109 -0
  86. package/dist/react/core/config-utils.d.ts.map +1 -0
  87. package/dist/react/core/constants.d.ts +11 -0
  88. package/dist/react/core/constants.d.ts.map +1 -0
  89. package/dist/react/core/dashboard-api.d.ts +65 -0
  90. package/dist/react/core/dashboard-api.d.ts.map +1 -0
  91. package/dist/react/core/dashboard-data-controller.d.ts +157 -0
  92. package/dist/react/core/dashboard-data-controller.d.ts.map +1 -0
  93. package/dist/react/core/debug-data-controller.d.ts +89 -0
  94. package/dist/react/core/debug-data-controller.d.ts.map +1 -0
  95. package/dist/react/core/feature-detect.d.ts +67 -0
  96. package/dist/react/core/feature-detect.d.ts.map +1 -0
  97. package/dist/react/core/formatters.d.ts +189 -0
  98. package/dist/react/core/formatters.d.ts.map +1 -0
  99. package/dist/react/core/history-buffer.d.ts +23 -0
  100. package/dist/react/core/history-buffer.d.ts.map +1 -0
  101. package/dist/react/core/icons.d.ts +36 -0
  102. package/dist/react/core/icons.d.ts.map +1 -0
  103. package/dist/react/core/index.d.ts +39 -0
  104. package/dist/react/core/index.d.ts.map +1 -0
  105. package/dist/react/core/internals-utils.d.ts +71 -0
  106. package/dist/react/core/internals-utils.d.ts.map +1 -0
  107. package/dist/react/core/job-utils.d.ts +45 -0
  108. package/dist/react/core/job-utils.d.ts.map +1 -0
  109. package/dist/react/core/log-utils.d.ts +34 -0
  110. package/dist/react/core/log-utils.d.ts.map +1 -0
  111. package/dist/react/core/metrics.d.ts +41 -0
  112. package/dist/react/core/metrics.d.ts.map +1 -0
  113. package/dist/react/core/pagination.d.ts +128 -0
  114. package/dist/react/core/pagination.d.ts.map +1 -0
  115. package/dist/react/core/query-utils.d.ts +35 -0
  116. package/dist/react/core/query-utils.d.ts.map +1 -0
  117. package/dist/react/core/resizable-columns.d.ts +18 -0
  118. package/dist/react/core/resizable-columns.d.ts.map +1 -0
  119. package/dist/react/core/routes.d.ts +12 -0
  120. package/dist/react/core/routes.d.ts.map +1 -0
  121. package/dist/react/core/server-stats-controller.d.ts +106 -0
  122. package/dist/react/core/server-stats-controller.d.ts.map +1 -0
  123. package/dist/react/core/sparkline.d.ts +80 -0
  124. package/dist/react/core/sparkline.d.ts.map +1 -0
  125. package/dist/react/core/theme.d.ts +42 -0
  126. package/dist/react/core/theme.d.ts.map +1 -0
  127. package/dist/react/core/trace-utils.d.ts +62 -0
  128. package/dist/react/core/trace-utils.d.ts.map +1 -0
  129. package/dist/react/core/transmit-adapter.d.ts +59 -0
  130. package/dist/react/core/transmit-adapter.d.ts.map +1 -0
  131. package/dist/react/core/types.d.ts +619 -0
  132. package/dist/react/core/types.d.ts.map +1 -0
  133. package/dist/react/index-UdTfSvtO.js +1074 -0
  134. package/dist/react/index.js +18 -0
  135. package/dist/react/react/components/Dashboard/DashboardPage.d.ts +17 -0
  136. package/dist/react/react/components/Dashboard/DashboardPage.d.ts.map +1 -0
  137. package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts +7 -0
  138. package/dist/react/react/components/Dashboard/sections/CacheSection.d.ts.map +1 -0
  139. package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts +7 -0
  140. package/dist/react/react/components/Dashboard/sections/ConfigSection.d.ts.map +1 -0
  141. package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts +7 -0
  142. package/dist/react/react/components/Dashboard/sections/EmailsSection.d.ts.map +1 -0
  143. package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts +7 -0
  144. package/dist/react/react/components/Dashboard/sections/EventsSection.d.ts.map +1 -0
  145. package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts +14 -0
  146. package/dist/react/react/components/Dashboard/sections/InternalsSection.d.ts.map +1 -0
  147. package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts +7 -0
  148. package/dist/react/react/components/Dashboard/sections/JobsSection.d.ts.map +1 -0
  149. package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts +7 -0
  150. package/dist/react/react/components/Dashboard/sections/LogsSection.d.ts.map +1 -0
  151. package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts +7 -0
  152. package/dist/react/react/components/Dashboard/sections/OverviewSection.d.ts.map +1 -0
  153. package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts +7 -0
  154. package/dist/react/react/components/Dashboard/sections/QueriesSection.d.ts.map +1 -0
  155. package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts +7 -0
  156. package/dist/react/react/components/Dashboard/sections/RequestsSection.d.ts.map +1 -0
  157. package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts +7 -0
  158. package/dist/react/react/components/Dashboard/sections/RoutesSection.d.ts.map +1 -0
  159. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts +9 -0
  160. package/dist/react/react/components/Dashboard/sections/TimelineSection.d.ts.map +1 -0
  161. package/dist/react/react/components/Dashboard/shared/DataTable.d.ts +27 -0
  162. package/dist/react/react/components/Dashboard/shared/DataTable.d.ts.map +1 -0
  163. package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts +17 -0
  164. package/dist/react/react/components/Dashboard/shared/FilterBar.d.ts.map +1 -0
  165. package/dist/react/react/components/Dashboard/shared/Pagination.d.ts +13 -0
  166. package/dist/react/react/components/Dashboard/shared/Pagination.d.ts.map +1 -0
  167. package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts +12 -0
  168. package/dist/react/react/components/Dashboard/shared/TimeRangeSelector.d.ts.map +1 -0
  169. package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts +16 -0
  170. package/dist/react/react/components/Dashboard/shared/WaterfallChart.d.ts.map +1 -0
  171. package/dist/react/react/components/DebugPanel/DebugPanel.d.ts +16 -0
  172. package/dist/react/react/components/DebugPanel/DebugPanel.d.ts.map +1 -0
  173. package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts +8 -0
  174. package/dist/react/react/components/DebugPanel/tabs/CacheTab.d.ts.map +1 -0
  175. package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts +8 -0
  176. package/dist/react/react/components/DebugPanel/tabs/ConfigTab.d.ts.map +1 -0
  177. package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts +14 -0
  178. package/dist/react/react/components/DebugPanel/tabs/CustomPaneTab.d.ts.map +1 -0
  179. package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts +7 -0
  180. package/dist/react/react/components/DebugPanel/tabs/EmailsTab.d.ts.map +1 -0
  181. package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts +7 -0
  182. package/dist/react/react/components/DebugPanel/tabs/EventsTab.d.ts.map +1 -0
  183. package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts +12 -0
  184. package/dist/react/react/components/DebugPanel/tabs/InternalsTab.d.ts.map +1 -0
  185. package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts +9 -0
  186. package/dist/react/react/components/DebugPanel/tabs/JobsTab.d.ts.map +1 -0
  187. package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts +7 -0
  188. package/dist/react/react/components/DebugPanel/tabs/LogsTab.d.ts.map +1 -0
  189. package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts +7 -0
  190. package/dist/react/react/components/DebugPanel/tabs/QueriesTab.d.ts.map +1 -0
  191. package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts +8 -0
  192. package/dist/react/react/components/DebugPanel/tabs/RoutesTab.d.ts.map +1 -0
  193. package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts +7 -0
  194. package/dist/react/react/components/DebugPanel/tabs/TimelineTab.d.ts.map +1 -0
  195. package/dist/react/react/components/StatsBar/MetricCard.d.ts +21 -0
  196. package/dist/react/react/components/StatsBar/MetricCard.d.ts.map +1 -0
  197. package/dist/react/react/components/StatsBar/Sparkline.d.ts +15 -0
  198. package/dist/react/react/components/StatsBar/Sparkline.d.ts.map +1 -0
  199. package/dist/react/react/components/StatsBar/StatsBar.d.ts +22 -0
  200. package/dist/react/react/components/StatsBar/StatsBar.d.ts.map +1 -0
  201. package/dist/react/react/components/shared/Badge.d.ts +32 -0
  202. package/dist/react/react/components/shared/Badge.d.ts.map +1 -0
  203. package/dist/react/react/components/shared/ConfigContent.d.ts +13 -0
  204. package/dist/react/react/components/shared/ConfigContent.d.ts.map +1 -0
  205. package/dist/react/react/components/shared/InternalsContent.d.ts +10 -0
  206. package/dist/react/react/components/shared/InternalsContent.d.ts.map +1 -0
  207. package/dist/react/react/components/shared/JsonViewer.d.ts +12 -0
  208. package/dist/react/react/components/shared/JsonViewer.d.ts.map +1 -0
  209. package/dist/react/react/components/shared/ThemeToggle.d.ts +13 -0
  210. package/dist/react/react/components/shared/ThemeToggle.d.ts.map +1 -0
  211. package/dist/react/react/components/shared/Tooltip.d.ts +16 -0
  212. package/dist/react/react/components/shared/Tooltip.d.ts.map +1 -0
  213. package/dist/react/react/hooks/useApiClient.d.ts +10 -0
  214. package/dist/react/react/hooks/useApiClient.d.ts.map +1 -0
  215. package/dist/react/react/hooks/useDashboardApiBase.d.ts +19 -0
  216. package/dist/react/react/hooks/useDashboardApiBase.d.ts.map +1 -0
  217. package/dist/react/react/hooks/useDashboardData.d.ts +27 -0
  218. package/dist/react/react/hooks/useDashboardData.d.ts.map +1 -0
  219. package/dist/react/react/hooks/useDebugData.d.ts +17 -0
  220. package/dist/react/react/hooks/useDebugData.d.ts.map +1 -0
  221. package/dist/react/react/hooks/useFeatures.d.ts +13 -0
  222. package/dist/react/react/hooks/useFeatures.d.ts.map +1 -0
  223. package/dist/react/react/hooks/useResizableTable.d.ts +13 -0
  224. package/dist/react/react/hooks/useResizableTable.d.ts.map +1 -0
  225. package/dist/react/react/hooks/useServerStats.d.ts +21 -0
  226. package/dist/react/react/hooks/useServerStats.d.ts.map +1 -0
  227. package/dist/react/react/hooks/useTheme.d.ts +12 -0
  228. package/dist/react/react/hooks/useTheme.d.ts.map +1 -0
  229. package/dist/react/react/index.d.ts +14 -0
  230. package/dist/react/react/index.d.ts.map +1 -0
  231. package/dist/react/style.css +1 -0
  232. package/dist/react/useApiClient-BVtNCmnL.js +9 -0
  233. package/dist/react/useDashboardApiBase-Bi36pJ2L.js +14 -0
  234. package/dist/react/useResizableTable-CNJmACdt.js +13 -0
  235. package/dist/src/collectors/app_collector.d.ts.map +1 -1
  236. package/dist/src/collectors/app_collector.js +30 -2
  237. package/dist/src/collectors/auto_detect.d.ts +31 -0
  238. package/dist/src/collectors/auto_detect.d.ts.map +1 -0
  239. package/dist/src/collectors/auto_detect.js +120 -0
  240. package/dist/src/collectors/collector.d.ts +17 -0
  241. package/dist/src/collectors/collector.d.ts.map +1 -1
  242. package/dist/src/collectors/db_pool_collector.d.ts.map +1 -1
  243. package/dist/src/collectors/db_pool_collector.js +35 -1
  244. package/dist/src/collectors/http_collector.d.ts +4 -3
  245. package/dist/src/collectors/http_collector.d.ts.map +1 -1
  246. package/dist/src/collectors/http_collector.js +28 -11
  247. package/dist/src/collectors/index.d.ts +2 -0
  248. package/dist/src/collectors/index.d.ts.map +1 -1
  249. package/dist/src/collectors/index.js +1 -0
  250. package/dist/src/collectors/log_collector.d.ts +11 -4
  251. package/dist/src/collectors/log_collector.d.ts.map +1 -1
  252. package/dist/src/collectors/log_collector.js +51 -5
  253. package/dist/src/collectors/process_collector.d.ts.map +1 -1
  254. package/dist/src/collectors/process_collector.js +4 -0
  255. package/dist/src/collectors/queue_collector.d.ts.map +1 -1
  256. package/dist/src/collectors/queue_collector.js +55 -1
  257. package/dist/src/collectors/redis_collector.d.ts.map +1 -1
  258. package/dist/src/collectors/redis_collector.js +42 -3
  259. package/dist/src/collectors/system_collector.d.ts.map +1 -1
  260. package/dist/src/collectors/system_collector.js +4 -0
  261. package/dist/src/controller/api_controller.d.ts +101 -0
  262. package/dist/src/controller/api_controller.d.ts.map +1 -0
  263. package/dist/src/controller/api_controller.js +131 -0
  264. package/dist/src/controller/debug_controller.d.ts +19 -10
  265. package/dist/src/controller/debug_controller.d.ts.map +1 -1
  266. package/dist/src/controller/debug_controller.js +118 -101
  267. package/dist/src/core/theme.d.ts +42 -0
  268. package/dist/src/core/theme.d.ts.map +1 -0
  269. package/dist/src/core/theme.js +115 -0
  270. package/dist/src/dashboard/chart_aggregator.d.ts.map +1 -1
  271. package/dist/src/dashboard/chart_aggregator.js +3 -2
  272. package/dist/src/dashboard/dashboard_controller.d.ts +10 -14
  273. package/dist/src/dashboard/dashboard_controller.d.ts.map +1 -1
  274. package/dist/src/dashboard/dashboard_controller.js +132 -250
  275. package/dist/src/dashboard/dashboard_store.d.ts +62 -19
  276. package/dist/src/dashboard/dashboard_store.d.ts.map +1 -1
  277. package/dist/src/dashboard/dashboard_store.js +242 -53
  278. package/dist/src/dashboard/integrations/cache_inspector.d.ts +19 -1
  279. package/dist/src/dashboard/integrations/cache_inspector.d.ts.map +1 -1
  280. package/dist/src/dashboard/integrations/config_inspector.d.ts +1 -1
  281. package/dist/src/dashboard/integrations/config_inspector.d.ts.map +1 -1
  282. package/dist/src/dashboard/integrations/config_inspector.js +3 -2
  283. package/dist/src/dashboard/integrations/queue_inspector.d.ts +55 -10
  284. package/dist/src/dashboard/integrations/queue_inspector.d.ts.map +1 -1
  285. package/dist/src/dashboard/integrations/queue_inspector.js +70 -24
  286. package/dist/src/dashboard/migrator.d.ts +5 -0
  287. package/dist/src/dashboard/migrator.d.ts.map +1 -1
  288. package/dist/src/dashboard/migrator.js +44 -9
  289. package/dist/src/dashboard/models/stats_event.d.ts +1 -1
  290. package/dist/src/dashboard/models/stats_event.d.ts.map +1 -1
  291. package/dist/src/dashboard/models/stats_log.d.ts +1 -1
  292. package/dist/src/dashboard/models/stats_log.d.ts.map +1 -1
  293. package/dist/src/dashboard/models/stats_query.d.ts +1 -1
  294. package/dist/src/dashboard/models/stats_query.d.ts.map +1 -1
  295. package/dist/src/dashboard/models/stats_saved_filter.d.ts +1 -1
  296. package/dist/src/dashboard/models/stats_saved_filter.d.ts.map +1 -1
  297. package/dist/src/dashboard/models/stats_trace.d.ts +2 -1
  298. package/dist/src/dashboard/models/stats_trace.d.ts.map +1 -1
  299. package/dist/src/data/data_access.d.ts +105 -0
  300. package/dist/src/data/data_access.d.ts.map +1 -0
  301. package/dist/src/data/data_access.js +310 -0
  302. package/dist/src/data/index.d.ts +3 -0
  303. package/dist/src/data/index.d.ts.map +1 -0
  304. package/dist/src/data/index.js +1 -0
  305. package/dist/src/debug/debug_store.d.ts +20 -1
  306. package/dist/src/debug/debug_store.d.ts.map +1 -1
  307. package/dist/src/debug/debug_store.js +43 -15
  308. package/dist/src/debug/email_collector.d.ts +6 -2
  309. package/dist/src/debug/email_collector.d.ts.map +1 -1
  310. package/dist/src/debug/email_collector.js +3 -0
  311. package/dist/src/debug/event_collector.d.ts +6 -2
  312. package/dist/src/debug/event_collector.d.ts.map +1 -1
  313. package/dist/src/debug/event_collector.js +12 -8
  314. package/dist/src/debug/query_collector.d.ts +6 -2
  315. package/dist/src/debug/query_collector.d.ts.map +1 -1
  316. package/dist/src/debug/query_collector.js +3 -0
  317. package/dist/src/debug/ring_buffer.d.ts +1 -0
  318. package/dist/src/debug/ring_buffer.d.ts.map +1 -1
  319. package/dist/src/debug/ring_buffer.js +5 -2
  320. package/dist/src/debug/route_inspector.d.ts +2 -2
  321. package/dist/src/debug/route_inspector.d.ts.map +1 -1
  322. package/dist/src/debug/route_inspector.js +4 -3
  323. package/dist/src/debug/trace_collector.d.ts +7 -3
  324. package/dist/src/debug/trace_collector.d.ts.map +1 -1
  325. package/dist/src/debug/trace_collector.js +7 -5
  326. package/dist/src/debug/types.d.ts +107 -2
  327. package/dist/src/debug/types.d.ts.map +1 -1
  328. package/dist/src/debug/types.js +1 -1
  329. package/dist/src/define_config.d.ts +49 -5
  330. package/dist/src/define_config.d.ts.map +1 -1
  331. package/dist/src/define_config.js +361 -4
  332. package/dist/src/edge/bootstrap.d.ts +17 -0
  333. package/dist/src/edge/bootstrap.d.ts.map +1 -0
  334. package/dist/src/edge/bootstrap.js +29 -0
  335. package/dist/src/edge/client/dashboard.js +2 -3619
  336. package/dist/src/edge/client/debug-panel-deferred.js +1 -0
  337. package/dist/src/edge/client/debug-panel.js +1 -2140
  338. package/dist/src/edge/client/stats-bar.js +1 -801
  339. package/dist/src/edge/client-vue/dashboard.js +5 -0
  340. package/dist/src/edge/client-vue/debug-panel-deferred.js +4 -0
  341. package/dist/src/edge/client-vue/debug-panel.js +4 -0
  342. package/dist/src/edge/client-vue/stats-bar.js +4 -0
  343. package/dist/src/edge/plugin.d.ts +35 -2
  344. package/dist/src/edge/plugin.d.ts.map +1 -1
  345. package/dist/src/edge/plugin.js +30 -66
  346. package/dist/src/edge/types.d.ts +46 -0
  347. package/dist/src/edge/types.d.ts.map +1 -0
  348. package/dist/src/edge/types.js +4 -0
  349. package/dist/src/edge/views/dashboard.edge +1 -358
  350. package/dist/src/edge/views/debug-panel.edge +2 -154
  351. package/dist/src/edge/views/stats-bar.edge +15 -48
  352. package/dist/src/engine/stats_engine.d.ts +18 -0
  353. package/dist/src/engine/stats_engine.d.ts.map +1 -1
  354. package/dist/src/engine/stats_engine.js +45 -2
  355. package/dist/src/index.d.ts +1 -1
  356. package/dist/src/index.d.ts.map +1 -1
  357. package/dist/src/log_stream/log_stream_provider.d.ts.map +1 -1
  358. package/dist/src/log_stream/log_stream_provider.js +21 -4
  359. package/dist/src/log_stream/log_stream_service.d.ts +8 -1
  360. package/dist/src/log_stream/log_stream_service.d.ts.map +1 -1
  361. package/dist/src/log_stream/log_stream_service.js +27 -3
  362. package/dist/src/middleware/request_tracking_middleware.d.ts +1 -1
  363. package/dist/src/middleware/request_tracking_middleware.d.ts.map +1 -1
  364. package/dist/src/middleware/request_tracking_middleware.js +21 -6
  365. package/dist/src/prometheus/prometheus_collector.d.ts +2 -1
  366. package/dist/src/prometheus/prometheus_collector.d.ts.map +1 -1
  367. package/dist/src/provider/server_stats_provider.d.ts +100 -0
  368. package/dist/src/provider/server_stats_provider.d.ts.map +1 -1
  369. package/dist/src/provider/server_stats_provider.js +460 -104
  370. package/dist/src/routes/access_middleware.d.ts +2 -1
  371. package/dist/src/routes/access_middleware.d.ts.map +1 -1
  372. package/dist/src/routes/access_middleware.js +7 -1
  373. package/dist/src/routes/index.d.ts +4 -0
  374. package/dist/src/routes/index.d.ts.map +1 -0
  375. package/dist/src/routes/index.js +1 -0
  376. package/dist/src/routes/register_routes.d.ts +103 -0
  377. package/dist/src/routes/register_routes.d.ts.map +1 -0
  378. package/dist/src/routes/register_routes.js +356 -0
  379. package/dist/src/routes/router_types.d.ts +29 -0
  380. package/dist/src/routes/router_types.d.ts.map +1 -0
  381. package/dist/src/routes/router_types.js +1 -0
  382. package/dist/src/stubs/config.stub +12 -32
  383. package/dist/src/styles/components.css +1048 -0
  384. package/dist/src/{edge/client → styles}/dashboard.css +299 -736
  385. package/dist/src/{edge/client → styles}/debug-panel.css +117 -633
  386. package/dist/src/{edge/client → styles}/stats-bar.css +28 -10
  387. package/dist/src/styles/tokens.css +153 -0
  388. package/dist/src/styles/utilities.css +75 -0
  389. package/dist/src/types.d.ts +119 -16
  390. package/dist/src/types.d.ts.map +1 -1
  391. package/dist/src/utils/app_import.d.ts +23 -0
  392. package/dist/src/utils/app_import.d.ts.map +1 -0
  393. package/dist/src/utils/app_import.js +44 -0
  394. package/dist/src/utils/json_helpers.d.ts +2 -2
  395. package/dist/src/utils/json_helpers.d.ts.map +1 -1
  396. package/dist/src/utils/logger.d.ts +17 -0
  397. package/dist/src/utils/logger.d.ts.map +1 -0
  398. package/dist/src/utils/logger.js +27 -0
  399. package/dist/src/utils/mail_helpers.d.ts +1 -1
  400. package/dist/src/utils/mail_helpers.d.ts.map +1 -1
  401. package/dist/src/utils/mail_helpers.js +1 -1
  402. package/dist/vue/CacheSection-C788Yfai.js +149 -0
  403. package/dist/vue/CacheTab-BPisYYiQ.js +104 -0
  404. package/dist/vue/ConfigSection-CRzYxqW2.js +576 -0
  405. package/dist/vue/ConfigTab-C8cafGUj.js +361 -0
  406. package/dist/vue/CustomPaneTab-BJxT5Dp7.js +172 -0
  407. package/dist/vue/EmailsSection-C8JFMtW7.js +206 -0
  408. package/dist/vue/EmailsTab-DhFhoNmU.js +157 -0
  409. package/dist/vue/EventsSection-C4wXUgxG.js +107 -0
  410. package/dist/vue/EventsTab-DQ4Nd6AK.js +97 -0
  411. package/dist/vue/FilterBar.vue_vue_type_script_setup_true_lang-ClJ37hhT.js +62 -0
  412. package/dist/vue/InternalsSection-BJUXE-5F.js +468 -0
  413. package/dist/vue/InternalsTab-DEMjqtlw.js +471 -0
  414. package/dist/vue/JobsSection-CsKWTjgN.js +187 -0
  415. package/dist/vue/JobsTab-BCvhOARO.js +117 -0
  416. package/dist/vue/JsonViewer.vue_vue_type_script_setup_true_lang-Vsqar1zx.js +67 -0
  417. package/dist/vue/LogsSection-BFVjSZ24.js +227 -0
  418. package/dist/vue/LogsTab-DpEQ7euu.js +122 -0
  419. package/dist/vue/OverviewSection-CbMdAido.js +849 -0
  420. package/dist/vue/PaginationControls.vue_vue_type_script_setup_true_lang-CuN7g_8Z.js +50 -0
  421. package/dist/vue/QueriesSection-BPiv7u3r.js +429 -0
  422. package/dist/vue/QueriesTab-C8_7oprC.js +107 -0
  423. package/dist/vue/RequestsSection-LtImH4rD.js +243 -0
  424. package/dist/vue/RoutesSection-CrxOxmzx.js +106 -0
  425. package/dist/vue/RoutesTab-Dz0MkZuF.js +80 -0
  426. package/dist/vue/TimelineSection-DLxMW2J_.js +186 -0
  427. package/dist/vue/TimelineTab-Db6lKKsD.js +250 -0
  428. package/dist/vue/WaterfallChart.vue_vue_type_script_setup_true_lang-tZ13cNj1.js +118 -0
  429. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts +18 -0
  430. package/dist/vue/components/Dashboard/DashboardPage.vue.d.ts.map +1 -0
  431. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts +5 -0
  432. package/dist/vue/components/Dashboard/sections/CacheSection.vue.d.ts.map +1 -0
  433. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts +3 -0
  434. package/dist/vue/components/Dashboard/sections/ConfigSection.vue.d.ts.map +1 -0
  435. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts +5 -0
  436. package/dist/vue/components/Dashboard/sections/EmailsSection.vue.d.ts.map +1 -0
  437. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts +5 -0
  438. package/dist/vue/components/Dashboard/sections/EventsSection.vue.d.ts.map +1 -0
  439. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts +3 -0
  440. package/dist/vue/components/Dashboard/sections/InternalsSection.vue.d.ts.map +1 -0
  441. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts +5 -0
  442. package/dist/vue/components/Dashboard/sections/JobsSection.vue.d.ts.map +1 -0
  443. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts +3 -0
  444. package/dist/vue/components/Dashboard/sections/LogsSection.vue.d.ts.map +1 -0
  445. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts +5 -0
  446. package/dist/vue/components/Dashboard/sections/OverviewSection.vue.d.ts.map +1 -0
  447. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts +45 -0
  448. package/dist/vue/components/Dashboard/sections/QueriesSection.vue.d.ts.map +1 -0
  449. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts +5 -0
  450. package/dist/vue/components/Dashboard/sections/RequestsSection.vue.d.ts.map +1 -0
  451. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts +5 -0
  452. package/dist/vue/components/Dashboard/sections/RoutesSection.vue.d.ts.map +1 -0
  453. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts +11 -0
  454. package/dist/vue/components/Dashboard/sections/TimelineSection.vue.d.ts.map +1 -0
  455. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts +29 -0
  456. package/dist/vue/components/Dashboard/shared/FilterBar.vue.d.ts.map +1 -0
  457. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts +12 -0
  458. package/dist/vue/components/Dashboard/shared/PaginationControls.vue.d.ts.map +1 -0
  459. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts +11 -0
  460. package/dist/vue/components/Dashboard/shared/TimeRangeSelector.vue.d.ts.map +1 -0
  461. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts +10 -0
  462. package/dist/vue/components/Dashboard/shared/WaterfallChart.vue.d.ts.map +1 -0
  463. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts +21 -0
  464. package/dist/vue/components/DebugPanel/DebugPanel.vue.d.ts.map +1 -0
  465. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts +12 -0
  466. package/dist/vue/components/DebugPanel/tabs/CacheTab.vue.d.ts.map +1 -0
  467. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts +11 -0
  468. package/dist/vue/components/DebugPanel/tabs/ConfigTab.vue.d.ts.map +1 -0
  469. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts +11 -0
  470. package/dist/vue/components/DebugPanel/tabs/CustomPaneTab.vue.d.ts.map +1 -0
  471. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts +12 -0
  472. package/dist/vue/components/DebugPanel/tabs/EmailsTab.vue.d.ts.map +1 -0
  473. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts +12 -0
  474. package/dist/vue/components/DebugPanel/tabs/EventsTab.vue.d.ts.map +1 -0
  475. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts +11 -0
  476. package/dist/vue/components/DebugPanel/tabs/InternalsTab.vue.d.ts.map +1 -0
  477. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts +13 -0
  478. package/dist/vue/components/DebugPanel/tabs/JobsTab.vue.d.ts.map +1 -0
  479. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts +15 -0
  480. package/dist/vue/components/DebugPanel/tabs/LogsTab.vue.d.ts.map +1 -0
  481. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts +12 -0
  482. package/dist/vue/components/DebugPanel/tabs/QueriesTab.vue.d.ts.map +1 -0
  483. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts +12 -0
  484. package/dist/vue/components/DebugPanel/tabs/RoutesTab.vue.d.ts.map +1 -0
  485. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts +15 -0
  486. package/dist/vue/components/DebugPanel/tabs/TimelineTab.vue.d.ts.map +1 -0
  487. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts +19 -0
  488. package/dist/vue/components/StatsBar/MetricCard.vue.d.ts.map +1 -0
  489. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts +17 -0
  490. package/dist/vue/components/StatsBar/Sparkline.vue.d.ts.map +1 -0
  491. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts +22 -0
  492. package/dist/vue/components/StatsBar/StatsBar.vue.d.ts.map +1 -0
  493. package/dist/vue/components/shared/JsonViewer.vue.d.ts +13 -0
  494. package/dist/vue/components/shared/JsonViewer.vue.d.ts.map +1 -0
  495. package/dist/vue/components/shared/ThemeToggle.vue.d.ts +8 -0
  496. package/dist/vue/components/shared/ThemeToggle.vue.d.ts.map +1 -0
  497. package/dist/vue/composables/useApiClient.d.ts +9 -0
  498. package/dist/vue/composables/useApiClient.d.ts.map +1 -0
  499. package/dist/vue/composables/useDashboardData.d.ts +53 -0
  500. package/dist/vue/composables/useDashboardData.d.ts.map +1 -0
  501. package/dist/vue/composables/useDebugData.d.ts +25 -0
  502. package/dist/vue/composables/useDebugData.d.ts.map +1 -0
  503. package/dist/vue/composables/useFeatures.d.ts +80 -0
  504. package/dist/vue/composables/useFeatures.d.ts.map +1 -0
  505. package/dist/vue/composables/useResizableTable.d.ts +16 -0
  506. package/dist/vue/composables/useResizableTable.d.ts.map +1 -0
  507. package/dist/vue/composables/useServerStats.d.ts +104 -0
  508. package/dist/vue/composables/useServerStats.d.ts.map +1 -0
  509. package/dist/vue/composables/useTheme.d.ts +6 -0
  510. package/dist/vue/composables/useTheme.d.ts.map +1 -0
  511. package/dist/vue/index-qCQpBftQ.js +1233 -0
  512. package/dist/vue/index.d.ts +10 -0
  513. package/dist/vue/index.d.ts.map +1 -0
  514. package/dist/vue/index.js +11 -0
  515. package/dist/vue/style.css +1 -0
  516. package/dist/vue/useApiClient-BQQ9CF-q.js +10 -0
  517. package/dist/vue/useResizableTable-BoivAevK.js +17 -0
  518. package/package.json +72 -10
  519. package/dist/src/dashboard/dashboard_routes.d.ts +0 -16
  520. package/dist/src/dashboard/dashboard_routes.d.ts.map +0 -1
  521. package/dist/src/dashboard/dashboard_routes.js +0 -77
  522. package/dist/src/routes/debug_routes.d.ts +0 -14
  523. package/dist/src/routes/debug_routes.d.ts.map +0 -1
  524. package/dist/src/routes/debug_routes.js +0 -42
  525. package/dist/src/routes/stats_routes.d.ts +0 -14
  526. package/dist/src/routes/stats_routes.d.ts.map +0 -1
  527. package/dist/src/routes/stats_routes.js +0 -27
@@ -0,0 +1,1074 @@
1
+ import { jsx as e, jsxs as d, Fragment as H } from "react/jsx-runtime";
2
+ import K, { useState as N, useRef as j, useEffect as R, useCallback as B, useMemo as O, Suspense as F, lazy as T } from "react";
3
+ import { DEFAULT_FEATURES as G, detectFeatures as Q, ServerStatsController as X, getTheme as Y, onThemeChange as Z, toggleTheme as ee, buildSparklineData as se, computeStats as te, formatStatNum as U, detectMetricGroupsFromStats as ne, getVisibleMetricGroups as oe, METRIC_DEFINITIONS as ie, TAB_ICONS as L, DashboardDataController as re, subscribeToChannel as ae, DebugDataController as le, compactPreview as ce } from "adonisjs-server-stats/core";
4
+ import { createPortal as de } from "react-dom";
5
+ function z(s = {}) {
6
+ const { baseUrl: i = "", debugEndpoint: t = "/admin/api/debug", authToken: n } = s, [a, h] = N(G), [c, r] = N(!0), [g, p] = N(null), m = j(!1);
7
+ return R(() => {
8
+ if (m.current) return;
9
+ m.current = !0;
10
+ let l = !1;
11
+ return (async () => {
12
+ try {
13
+ const f = await Q({ baseUrl: i, debugEndpoint: t, authToken: n });
14
+ l || (h(f), r(!1));
15
+ } catch (f) {
16
+ l || (p(f instanceof Error ? f : new Error(String(f))), r(!1));
17
+ }
18
+ })(), () => {
19
+ l = !0;
20
+ };
21
+ }, [i, t, n]), { features: a, isLoading: c, error: g };
22
+ }
23
+ function ue(s = {}) {
24
+ const {
25
+ baseUrl: i = "",
26
+ endpoint: t = "/admin/api/server-stats",
27
+ channelName: n = "admin/server-stats",
28
+ authToken: a,
29
+ pollInterval: h = 3e3
30
+ } = s, [c, r] = N(null), [g, p] = N(!1), [m, l] = N(!1), [y, f] = N(null), [b, w] = N(!1), E = j(null);
31
+ R(() => {
32
+ if (b) return;
33
+ const I = new X({
34
+ baseUrl: i,
35
+ endpoint: t,
36
+ channelName: n,
37
+ authToken: a,
38
+ pollInterval: h,
39
+ onStatsUpdate: (C) => r(C),
40
+ onConnectionChange: (C) => p(C),
41
+ onStaleChange: (C) => l(C),
42
+ onError: (C) => f(C),
43
+ onUnauthorizedChange: (C) => w(C)
44
+ });
45
+ return E.current = I, I.start(), () => {
46
+ I.stop(), E.current = null;
47
+ };
48
+ }, [i, n, a, h, b]);
49
+ const _ = B((I) => E.current?.getHistory(I) ?? [], []);
50
+ return {
51
+ stats: c,
52
+ history: E.current?.getAllHistory() ?? {},
53
+ getHistory: _,
54
+ isConnected: g,
55
+ isStale: m,
56
+ error: y,
57
+ unauthorized: b
58
+ };
59
+ }
60
+ function A() {
61
+ const [s, i] = N(() => Y());
62
+ R(() => Z((a) => {
63
+ i(a);
64
+ }), []);
65
+ const t = B(() => {
66
+ const n = ee();
67
+ return i(n), n;
68
+ }, []);
69
+ return { theme: s, toggleTheme: t };
70
+ }
71
+ function he({
72
+ data: s,
73
+ color: i = "#34d399",
74
+ width: t = 120,
75
+ height: n = 32,
76
+ className: a = ""
77
+ }) {
78
+ const h = O(
79
+ () => se(s, { width: t, height: n }),
80
+ [s, t, n]
81
+ ), c = O(() => "ss-grad-" + Math.random().toString(36).slice(2, 8), []), r = { "--ss-accent": i };
82
+ if (!h)
83
+ return /* @__PURE__ */ e("div", { className: `ss-dash-sparkline ${a}`, style: r, children: /* @__PURE__ */ e(
84
+ "svg",
85
+ {
86
+ width: t,
87
+ height: n,
88
+ viewBox: `0 0 ${t} ${n}`,
89
+ style: { display: "block" },
90
+ children: /* @__PURE__ */ d("text", { x: t / 2, y: n / 2 + 3, textAnchor: "middle", fill: "#737373", fontSize: "9", children: [
91
+ "collecting",
92
+ "…"
93
+ ] })
94
+ }
95
+ ) });
96
+ const g = i || "var(--ss-accent)";
97
+ return /* @__PURE__ */ e("div", { className: `ss-dash-sparkline ${a}`, style: r, children: /* @__PURE__ */ d(
98
+ "svg",
99
+ {
100
+ width: t,
101
+ height: n,
102
+ viewBox: `0 0 ${t} ${n}`,
103
+ style: { display: "block" },
104
+ children: [
105
+ /* @__PURE__ */ e("defs", { children: /* @__PURE__ */ d("linearGradient", { id: c, x1: "0", y1: "0", x2: "0", y2: "1", children: [
106
+ /* @__PURE__ */ e("stop", { offset: "0%", stopColor: g, stopOpacity: "0.25" }),
107
+ /* @__PURE__ */ e("stop", { offset: "100%", stopColor: g, stopOpacity: "0.02" })
108
+ ] }) }),
109
+ /* @__PURE__ */ e("path", { d: h.areaPath, fill: `url(#${c})` }),
110
+ /* @__PURE__ */ e(
111
+ "path",
112
+ {
113
+ className: "ss-dash-sparkline-line",
114
+ d: "M" + h.points.replace(/ /g, " L"),
115
+ fill: "none",
116
+ stroke: g,
117
+ strokeWidth: "1.5",
118
+ strokeLinejoin: "round",
119
+ strokeLinecap: "round"
120
+ }
121
+ )
122
+ ]
123
+ }
124
+ ) });
125
+ }
126
+ const pe = {
127
+ "ss-red": "#f87171",
128
+ "ss-amber": "#fbbf24",
129
+ "ss-green": "#34d399",
130
+ "ss-muted": "#737373"
131
+ };
132
+ function me(s, i, t) {
133
+ const [n, a] = N({
134
+ position: "absolute",
135
+ bottom: "100%",
136
+ left: 0,
137
+ marginBottom: "10px",
138
+ zIndex: 180
139
+ });
140
+ return R(() => {
141
+ if (!t) return;
142
+ const h = () => {
143
+ const r = s.current, g = i.current;
144
+ if (!r || !g) return;
145
+ const p = r.closest(".ss-bar");
146
+ if (!p) return;
147
+ const m = r.getBoundingClientRect(), l = p.getBoundingClientRect(), y = m.left - l.left + m.width / 2;
148
+ a({
149
+ position: "absolute",
150
+ bottom: "100%",
151
+ left: `${y}px`,
152
+ transform: "translateX(-50%)",
153
+ marginBottom: "10px",
154
+ zIndex: 180
155
+ }), requestAnimationFrame(() => {
156
+ const f = g.getBoundingClientRect();
157
+ let b = 0;
158
+ f.left < 8 ? b = 8 - f.left : f.right > window.innerWidth - 8 && (b = window.innerWidth - 8 - f.right), b && a((w) => ({
159
+ ...w,
160
+ transform: `translateX(calc(-50% + ${b}px))`
161
+ }));
162
+ });
163
+ };
164
+ h();
165
+ const c = s.current?.closest(".ss-bar-scroll");
166
+ return c?.addEventListener("scroll", h), window.addEventListener("resize", h), () => {
167
+ c?.removeEventListener("scroll", h), window.removeEventListener("resize", h);
168
+ };
169
+ }, [t, s, i]), n;
170
+ }
171
+ function be({ metric: s, stats: i, history: t, className: n = "" }) {
172
+ const [a, h] = N(!1), [c, r] = N(!1), g = j(null), p = j(null);
173
+ if (s.show && !s.show(i))
174
+ return null;
175
+ const m = s.value ? s.value(i) : s.format(i), l = s.color ? s.color(i) : "", y = l && pe[l] || "#34d399", f = typeof s.detail == "function" ? s.detail(i) : s.detail, b = O(() => te(t), [t]), w = a || c, E = me(g, p, w), _ = B(($) => {
176
+ $.stopPropagation(), h((o) => !o);
177
+ }, []);
178
+ R(() => {
179
+ if (!a) return;
180
+ const $ = (v) => {
181
+ const x = v.target;
182
+ g.current && !g.current.contains(x) && p.current && !p.current.contains(x) && h(!1);
183
+ }, o = (v) => {
184
+ v.key === "Escape" && h(!1);
185
+ };
186
+ return document.addEventListener("click", $), document.addEventListener("keydown", o), () => {
187
+ document.removeEventListener("click", $), document.removeEventListener("keydown", o);
188
+ };
189
+ }, [a]);
190
+ const I = g.current?.closest(".ss-bar"), C = w && I ? de(
191
+ /* @__PURE__ */ d(
192
+ "div",
193
+ {
194
+ ref: p,
195
+ className: `ss-tooltip ${a ? "ss-pinned" : ""}`,
196
+ style: E,
197
+ children: [
198
+ /* @__PURE__ */ d("div", { className: "ss-tooltip-inner", style: { position: "relative" }, children: [
199
+ a && /* @__PURE__ */ e(
200
+ "button",
201
+ {
202
+ className: "ss-tooltip-close",
203
+ onClick: ($) => {
204
+ $.stopPropagation(), h(!1);
205
+ },
206
+ type: "button",
207
+ children: "×"
208
+ }
209
+ ),
210
+ /* @__PURE__ */ d("div", { className: "ss-tooltip-header", children: [
211
+ /* @__PURE__ */ e("span", { className: "ss-tooltip-title", children: s.title }),
212
+ s.unit && /* @__PURE__ */ e("span", { className: "ss-tooltip-unit", children: s.unit })
213
+ ] }),
214
+ /* @__PURE__ */ d("div", { className: "ss-tooltip-current", children: [
215
+ /* @__PURE__ */ e("span", { className: "ss-tooltip-current-label", children: "Current: " }),
216
+ /* @__PURE__ */ e("span", { className: "ss-tooltip-current-value", children: m })
217
+ ] }),
218
+ b && /* @__PURE__ */ d("div", { className: "ss-tooltip-stats", children: [
219
+ /* @__PURE__ */ d("span", { children: [
220
+ "Min: ",
221
+ U(b.min, s.unit)
222
+ ] }),
223
+ /* @__PURE__ */ d("span", { children: [
224
+ "Max: ",
225
+ U(b.max, s.unit)
226
+ ] }),
227
+ /* @__PURE__ */ d("span", { children: [
228
+ "Avg: ",
229
+ U(b.avg, s.unit)
230
+ ] })
231
+ ] }),
232
+ f && /* @__PURE__ */ e("div", { className: "ss-tooltip-details", children: f }),
233
+ t.length > 0 && /* @__PURE__ */ d(H, { children: [
234
+ /* @__PURE__ */ e("div", { className: "ss-tooltip-sparkline", children: /* @__PURE__ */ e(he, { data: t, color: y }) }),
235
+ /* @__PURE__ */ d("div", { className: "ss-tooltip-samples", children: [
236
+ "Last ",
237
+ Math.min(t.length, 60),
238
+ " samples (~",
239
+ Math.round(Math.min(t.length, 60) * 3 / 60),
240
+ " min)"
241
+ ] })
242
+ ] })
243
+ ] }),
244
+ /* @__PURE__ */ e("div", { className: "ss-tooltip-arrow" })
245
+ ]
246
+ }
247
+ ),
248
+ I
249
+ ) : null;
250
+ return /* @__PURE__ */ d(H, { children: [
251
+ /* @__PURE__ */ d(
252
+ "div",
253
+ {
254
+ ref: g,
255
+ className: `ss-badge ${a ? "ss-pinned" : ""} ${n}`,
256
+ onClick: _,
257
+ onMouseEnter: () => !a && r(!0),
258
+ onMouseLeave: () => r(!1),
259
+ role: "button",
260
+ tabIndex: 0,
261
+ onKeyDown: ($) => $.key === "Enter" && _($),
262
+ children: [
263
+ /* @__PURE__ */ e("span", { className: "ss-label", children: s.label }),
264
+ /* @__PURE__ */ e("span", { className: `ss-value ${l}`, children: m })
265
+ ]
266
+ }
267
+ ),
268
+ C
269
+ ] });
270
+ }
271
+ function We(s) {
272
+ const {
273
+ featureOptions: i,
274
+ autoHideOnUnauthorized: t = !0,
275
+ onOpenDebugPanel: n,
276
+ debugPanelOpen: a = !1,
277
+ onConnectionChange: h,
278
+ ...c
279
+ } = s, { stats: r, getHistory: g, isConnected: p, isStale: m, unauthorized: l } = ue(c);
280
+ R(() => {
281
+ h?.(p);
282
+ }, [p, h]);
283
+ const { features: y } = z(i), { theme: f } = A(), [b, w] = N(() => typeof window > "u" ? !0 : localStorage.getItem("admin:stats-bar") !== "hidden"), E = j(null), _ = j(null);
284
+ R(() => {
285
+ t && l && w(!1);
286
+ }, [t, l]);
287
+ const I = B(() => {
288
+ w((v) => {
289
+ const x = !v;
290
+ return localStorage.setItem("admin:stats-bar", x ? "visible" : "hidden"), x;
291
+ });
292
+ }, []);
293
+ R(() => {
294
+ const v = _.current;
295
+ if (!v) return;
296
+ const x = (k) => {
297
+ Math.abs(k.deltaX) > Math.abs(k.deltaY) || (k.preventDefault(), v.scrollLeft += k.deltaY);
298
+ };
299
+ return v.addEventListener("wheel", x, { passive: !1 }), () => v.removeEventListener("wheel", x);
300
+ }, []);
301
+ const C = O(() => r ? ne(r) : oe(y), [r, y]), $ = O(
302
+ () => ie.filter((v) => C.has(v.group || "core")),
303
+ [C]
304
+ ), o = O(() => {
305
+ const v = [];
306
+ let x = "";
307
+ for (const k of $) {
308
+ const D = k.group || "core";
309
+ D !== x && (x = D, v.push({ group: x, metrics: [] })), v[v.length - 1].metrics.push(k);
310
+ }
311
+ return v;
312
+ }, [$]);
313
+ return t && l ? null : /* @__PURE__ */ d(H, { children: [
314
+ /* @__PURE__ */ d(
315
+ "button",
316
+ {
317
+ type: "button",
318
+ className: `ss-toggle ${b ? "ss-visible" : "ss-collapsed"}`,
319
+ onClick: I,
320
+ title: b ? "Hide stats bar" : "Show stats bar",
321
+ "data-ss-theme": f,
322
+ children: [
323
+ !b && r && /* @__PURE__ */ d("span", { className: "ss-toggle-summary", style: { display: "flex" }, children: [
324
+ C.has("process") && /* @__PURE__ */ d(H, { children: [
325
+ /* @__PURE__ */ d(
326
+ "span",
327
+ {
328
+ className: `ss-value ${r.cpuPercent > 80 ? "ss-red" : r.cpuPercent > 50 ? "ss-amber" : "ss-green"}`,
329
+ children: [
330
+ r.cpuPercent.toFixed(0),
331
+ "%"
332
+ ]
333
+ }
334
+ ),
335
+ /* @__PURE__ */ e("span", { className: "ss-value ss-green", children: r.memHeapUsed !== void 0 ? Math.round(r.memHeapUsed / (1024 * 1024)) + "M" : "-" })
336
+ ] }),
337
+ C.has("redis") && r.redisOk !== void 0 && /* @__PURE__ */ e("span", { className: `ss-value ${r.redisOk ? "ss-green" : "ss-red"}`, children: r.redisOk ? "✓" : "✗" })
338
+ ] }),
339
+ b && /* @__PURE__ */ e("span", { className: "ss-toggle-label", style: { color: "#737373" }, children: "hide stats" }),
340
+ /* @__PURE__ */ e("span", { className: "ss-toggle-arrow", children: b ? "▼" : "▲" })
341
+ ]
342
+ }
343
+ ),
344
+ /* @__PURE__ */ d("div", { ref: E, className: b ? "ss-bar" : "ss-bar ss-hidden", "data-ss-theme": f, children: [
345
+ /* @__PURE__ */ d("div", { className: "ss-bar-left", children: [
346
+ n && /* @__PURE__ */ e(
347
+ "button",
348
+ {
349
+ type: "button",
350
+ className: `ss-dbg-btn ${a ? "ss-dbg-active" : ""}`,
351
+ onClick: n,
352
+ title: "Toggle debug panel",
353
+ id: "ss-dbg-wrench",
354
+ children: /* @__PURE__ */ e(
355
+ "svg",
356
+ {
357
+ width: "14",
358
+ height: "14",
359
+ viewBox: L.wrench.viewBox,
360
+ fill: "none",
361
+ stroke: "currentColor",
362
+ strokeWidth: "2",
363
+ strokeLinecap: "round",
364
+ strokeLinejoin: "round",
365
+ dangerouslySetInnerHTML: { __html: L.wrench.elements.join("") }
366
+ }
367
+ )
368
+ }
369
+ ),
370
+ /* @__PURE__ */ e("div", { className: m ? "ss-dot ss-stale" : "ss-dot" })
371
+ ] }),
372
+ /* @__PURE__ */ e("div", { ref: _, className: "ss-bar-scroll", id: "ss-bar-scroll", children: r && o.map((v, x) => /* @__PURE__ */ d(K.Fragment, { children: [
373
+ x > 0 && /* @__PURE__ */ e("div", { className: "ss-group-sep" }),
374
+ /* @__PURE__ */ e("div", { className: "ss-group", children: v.metrics.map((k) => /* @__PURE__ */ e(
375
+ be,
376
+ {
377
+ metric: k,
378
+ stats: r,
379
+ history: g(k.historyKey || "")
380
+ },
381
+ k.id
382
+ )) })
383
+ ] }, v.group)) })
384
+ ] })
385
+ ] });
386
+ }
387
+ function J({
388
+ theme: s,
389
+ onToggle: i,
390
+ className: t = "",
391
+ classPrefix: n = "ss-dash"
392
+ }) {
393
+ const a = s === "dark";
394
+ return /* @__PURE__ */ e(
395
+ "button",
396
+ {
397
+ type: "button",
398
+ className: `${n === "ss-dbg" ? "ss-dbg-theme-toggle" : "ss-dash-theme-btn"} ${t}`,
399
+ onClick: i,
400
+ title: a ? "Switch to light theme" : "Switch to dark theme",
401
+ "aria-label": a ? "Switch to light theme" : "Switch to dark theme",
402
+ children: a ? (
403
+ // Sun icon
404
+ /* @__PURE__ */ e(
405
+ "svg",
406
+ {
407
+ width: "16",
408
+ height: "16",
409
+ viewBox: L.sun.viewBox,
410
+ fill: "none",
411
+ stroke: "currentColor",
412
+ strokeWidth: "2",
413
+ strokeLinecap: "round",
414
+ strokeLinejoin: "round",
415
+ dangerouslySetInnerHTML: { __html: L.sun.elements.join("") }
416
+ }
417
+ )
418
+ ) : (
419
+ // Moon icon
420
+ /* @__PURE__ */ e(
421
+ "svg",
422
+ {
423
+ width: "16",
424
+ height: "16",
425
+ viewBox: L.moon.viewBox,
426
+ fill: "none",
427
+ stroke: "currentColor",
428
+ strokeWidth: "2",
429
+ strokeLinecap: "round",
430
+ strokeLinejoin: "round",
431
+ dangerouslySetInnerHTML: { __html: L.moon.elements.join("") }
432
+ }
433
+ )
434
+ )
435
+ }
436
+ );
437
+ }
438
+ const ge = T(() => import("./QueriesTab-fyBB1u_Y.js")), ve = T(() => import("./EventsTab-eCh02cdd.js")), fe = T(() => import("./EmailsTab-Dh2YSa_f.js")), we = T(() => import("./RoutesTab-D3l8TOpu.js")), ke = T(() => import("./LogsTab-D-kR7PjX.js")), Ne = T(() => import("./TimelineTab-C5TFaSmQ.js")), ye = T(() => import("./CacheTab-CnVW5PLs.js")), Ce = T(() => import("./JobsTab-Dl5nrj2z.js")), Se = T(() => import("./ConfigTab-BSWq_o2p.js")), Le = T(() => import("./InternalsTab-Oij0A2fN.js")), Te = T(() => import("./CustomPaneTab-xjkYwTvH.js"));
439
+ function Je(s) {
440
+ const {
441
+ defaultOpen: i = !1,
442
+ dashboardPath: t,
443
+ isOpen: n,
444
+ onOpenChange: a,
445
+ isLive: h = !1,
446
+ ...c
447
+ } = s, [r, g] = N(i), p = n !== void 0 ? n : r, m = (o) => {
448
+ a ? a(o) : g(o);
449
+ }, [l, y] = N("queries"), { features: f } = z(c), { theme: b, toggleTheme: w } = A(), E = f.customPanes || [];
450
+ R(() => {
451
+ const o = (v) => {
452
+ v.key === "Escape" && p && m(!1);
453
+ };
454
+ return document.addEventListener("keydown", o), () => document.removeEventListener("keydown", o);
455
+ }, [p]);
456
+ const _ = O(
457
+ () => [
458
+ { id: "queries", label: "Queries", visible: !0 },
459
+ { id: "events", label: "Events", visible: !0 },
460
+ { id: "emails", label: "Emails", visible: !0 },
461
+ { id: "routes", label: "Routes", visible: !0 },
462
+ { id: "logs", label: "Logs", visible: !0 },
463
+ { id: "timeline", label: "Timeline", visible: f.tracing },
464
+ { id: "cache", label: "Cache", visible: f.cache },
465
+ { id: "jobs", label: "Jobs", visible: f.queues },
466
+ { id: "config", label: "Config", visible: !0 },
467
+ { id: "internals", label: "Internals", visible: !0 }
468
+ ],
469
+ [f]
470
+ ), I = O(() => _.filter((o) => o.visible), [_]);
471
+ R(() => {
472
+ const o = [
473
+ ...I.map((v) => v.id),
474
+ ...E.map((v) => v.id)
475
+ ];
476
+ !o.includes(l) && o.length > 0 && y(o[0]);
477
+ }, [I, E, l]);
478
+ const C = B(() => {
479
+ m(!p);
480
+ }, [p]), $ = B(() => {
481
+ const o = { options: c }, v = E.find((k) => k.id === l);
482
+ if (v)
483
+ return /* @__PURE__ */ e(F, { fallback: /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading..." }), children: /* @__PURE__ */ e(Te, { pane: v, options: c }) });
484
+ const x = {
485
+ queries: /* @__PURE__ */ e(ge, { ...o }),
486
+ events: /* @__PURE__ */ e(ve, { ...o }),
487
+ emails: /* @__PURE__ */ e(fe, { ...o }),
488
+ routes: /* @__PURE__ */ e(
489
+ we,
490
+ {
491
+ ...o,
492
+ currentPath: typeof window < "u" ? window.location.pathname : ""
493
+ }
494
+ ),
495
+ logs: /* @__PURE__ */ e(ke, { ...o }),
496
+ timeline: /* @__PURE__ */ e(Ne, { ...o }),
497
+ cache: /* @__PURE__ */ e(ye, { ...o, dashboardPath: t }),
498
+ jobs: /* @__PURE__ */ e(Ce, { ...o, dashboardPath: t }),
499
+ config: /* @__PURE__ */ e(Se, { ...o, dashboardPath: t }),
500
+ internals: /* @__PURE__ */ e(Le, { ...o })
501
+ };
502
+ return /* @__PURE__ */ e(F, { fallback: /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Loading..." }), children: x[l] || /* @__PURE__ */ e("div", { className: "ss-dbg-empty", children: "Unknown tab" }) });
503
+ }, [l, c, E]);
504
+ return /* @__PURE__ */ d(H, { children: [
505
+ n === void 0 && /* @__PURE__ */ e(
506
+ "button",
507
+ {
508
+ type: "button",
509
+ className: `ss-dbg-btn ${p ? "ss-dbg-active" : ""}`,
510
+ onClick: C,
511
+ title: "Toggle debug panel",
512
+ id: "ss-dbg-wrench",
513
+ children: /* @__PURE__ */ e(
514
+ "svg",
515
+ {
516
+ width: "14",
517
+ height: "14",
518
+ viewBox: L.wrench.viewBox,
519
+ fill: "none",
520
+ stroke: "currentColor",
521
+ strokeWidth: "2",
522
+ strokeLinecap: "round",
523
+ strokeLinejoin: "round",
524
+ dangerouslySetInnerHTML: { __html: L.wrench.elements.join("") }
525
+ }
526
+ )
527
+ }
528
+ ),
529
+ /* @__PURE__ */ d(
530
+ "div",
531
+ {
532
+ className: `ss-dbg-panel ${p ? "ss-dbg-open" : ""}`,
533
+ "data-ss-theme": b,
534
+ id: "ss-dbg-panel",
535
+ children: [
536
+ /* @__PURE__ */ d("div", { className: "ss-dbg-tabs", children: [
537
+ /* @__PURE__ */ d("div", { className: "ss-dbg-tabs-scroll", children: [
538
+ I.map((o) => /* @__PURE__ */ d(
539
+ "button",
540
+ {
541
+ type: "button",
542
+ className: `ss-dbg-tab ${l === o.id ? "ss-dbg-active" : ""}`,
543
+ onClick: () => y(o.id),
544
+ children: [
545
+ L[o.id] ? /* @__PURE__ */ e(
546
+ "svg",
547
+ {
548
+ className: "ss-dbg-tab-icon",
549
+ viewBox: L[o.id].viewBox,
550
+ dangerouslySetInnerHTML: { __html: L[o.id].elements.join("") }
551
+ }
552
+ ) : null,
553
+ o.label
554
+ ]
555
+ },
556
+ o.id
557
+ )),
558
+ E.map((o) => /* @__PURE__ */ e(
559
+ "button",
560
+ {
561
+ type: "button",
562
+ className: `ss-dbg-tab ${l === o.id ? "ss-dbg-active" : ""}`,
563
+ onClick: () => y(o.id),
564
+ children: o.label
565
+ },
566
+ o.id
567
+ ))
568
+ ] }),
569
+ /* @__PURE__ */ d("div", { className: "ss-dbg-tabs-right", children: [
570
+ /* @__PURE__ */ e(
571
+ "span",
572
+ {
573
+ className: `ss-dbg-conn-mode ${h ? "ss-dbg-conn-live" : "ss-dbg-conn-polling"}`,
574
+ title: h ? "Connected via Transmit (SSE) — real-time updates" : "Polling every 3s",
575
+ children: h ? "live" : "polling"
576
+ }
577
+ ),
578
+ /* @__PURE__ */ e(J, { theme: b, onToggle: w, classPrefix: "ss-dbg" }),
579
+ t && /* @__PURE__ */ e(
580
+ "a",
581
+ {
582
+ href: t,
583
+ target: "_blank",
584
+ rel: "noopener noreferrer",
585
+ className: "ss-dbg-dashboard-link",
586
+ title: "Open dashboard",
587
+ children: /* @__PURE__ */ e(
588
+ "svg",
589
+ {
590
+ width: "14",
591
+ height: "14",
592
+ viewBox: L["external-link"].viewBox,
593
+ fill: "none",
594
+ stroke: "currentColor",
595
+ strokeWidth: "2",
596
+ strokeLinecap: "round",
597
+ strokeLinejoin: "round",
598
+ dangerouslySetInnerHTML: { __html: L["external-link"].elements.join("") }
599
+ }
600
+ )
601
+ }
602
+ ),
603
+ /* @__PURE__ */ e(
604
+ "button",
605
+ {
606
+ type: "button",
607
+ className: "ss-dbg-close",
608
+ onClick: () => m(!1),
609
+ title: "Close panel",
610
+ children: "×"
611
+ }
612
+ )
613
+ ] })
614
+ ] }),
615
+ /* @__PURE__ */ e("div", { className: "ss-dbg-content", children: p && $() })
616
+ ]
617
+ }
618
+ )
619
+ ] });
620
+ }
621
+ function Ee(s, i = {}) {
622
+ const {
623
+ baseUrl: t = "",
624
+ dashboardEndpoint: n = "/__stats/api",
625
+ authToken: a,
626
+ page: h = 1,
627
+ perPage: c = 50,
628
+ search: r,
629
+ sort: g,
630
+ sortDir: p,
631
+ filters: m,
632
+ timeRange: l,
633
+ refreshKey: y
634
+ } = i, [f, b] = N(null), [w, E] = N(null), [_, I] = N(!0), [C, $] = N(null), o = j(null), v = j(s), x = j(!1);
635
+ o.current || (o.current = new re({
636
+ baseUrl: t,
637
+ endpoint: n,
638
+ authToken: a,
639
+ section: s,
640
+ perPage: c,
641
+ callbacks: {
642
+ onData: (M) => b(M),
643
+ onPagination: (M) => E(M),
644
+ onLoading: (M) => I(M),
645
+ onError: (M) => $(M),
646
+ onUnauthorized: () => {
647
+ }
648
+ }
649
+ })), R(() => {
650
+ const M = o.current, u = v.current !== s;
651
+ return v.current = s, M.configure({ page: h, perPage: c, search: r, sort: g, sortDir: p, filters: m, timeRange: l }), u || !x.current ? (u ? M.setSection(s) : M.start(), x.current = !0) : M.fetch(!0), () => {
652
+ M.stop();
653
+ };
654
+ }, [s, h, c, r, g, p, m, l, y]);
655
+ const k = B(() => {
656
+ o.current?.fetch(!0);
657
+ }, []), D = B(
658
+ async (M, u = "post", S) => o.current.mutate(M, u, S),
659
+ []
660
+ ), P = B(() => o.current.getApi(), []);
661
+ return { data: f, meta: w, isLoading: _, error: C, refresh: k, mutate: D, getApi: P };
662
+ }
663
+ const $e = [
664
+ "overview",
665
+ "requests",
666
+ "queries",
667
+ "events",
668
+ "routes",
669
+ "logs",
670
+ "emails",
671
+ "timeline",
672
+ "cache",
673
+ "jobs",
674
+ "config",
675
+ "internals"
676
+ ], xe = T(() => import("./OverviewSection-nm3xdACz.js")), Ie = T(() => import("./RequestsSection-DTqB81ac.js")), Be = T(() => import("./QueriesSection-DB12HMfQ.js")), Me = T(() => import("./EventsSection-C1pbJDfW.js")), Re = T(() => import("./RoutesSection-DJWa4NPV.js")), Oe = T(() => import("./LogsSection-C1p81fXO.js")), _e = T(() => import("./EmailsSection-CSyTg1aX.js")), De = T(() => import("./TimelineSection-C4d-jRX1.js")), je = T(() => import("./CacheSection-DGxMDlWK.js")), He = T(() => import("./JobsSection-CLAin5vU.js")), Pe = T(() => import("./ConfigSection-DPcrfqXY.js")), qe = T(() => import("./InternalsSection-t7ihcWO-.js"));
677
+ function W(s) {
678
+ return s === "timeline" ? "dashboard-timeline" : s;
679
+ }
680
+ function Ve(s) {
681
+ const {
682
+ baseUrl: i = "",
683
+ dashboardEndpoint: t = "/__stats/api",
684
+ debugEndpoint: n,
685
+ authToken: a,
686
+ backUrl: h = "/",
687
+ channelName: c = "server-stats/dashboard"
688
+ } = s, { features: r } = z({ baseUrl: i, debugEndpoint: n, authToken: a }), { theme: g, toggleTheme: p } = A(), [m, l] = N("overview"), [y, f] = N(() => typeof window > "u" ? !1 : localStorage.getItem("ss-dash-sidebar") === "collapsed"), [b, w] = N(!1), [E, _] = N(0), I = j(0);
689
+ R(() => {
690
+ if (!c) return;
691
+ const u = ae({
692
+ baseUrl: i,
693
+ channelName: c,
694
+ authToken: a,
695
+ onMessage: () => {
696
+ I.current += 1, _(I.current);
697
+ },
698
+ onConnect: () => w(!0),
699
+ onDisconnect: () => w(!1),
700
+ onError: () => w(!1)
701
+ });
702
+ return () => u.unsubscribe();
703
+ }, [i, c, a]);
704
+ const C = r.customPanes || [], $ = B(
705
+ (u) => {
706
+ const S = u.replace("#", "").split("?")[0];
707
+ return S && [...$e, ...C.map((V) => V.id)].includes(S) ? S : "overview";
708
+ },
709
+ [C]
710
+ );
711
+ R(() => {
712
+ if (typeof window > "u") return;
713
+ const u = $(window.location.hash);
714
+ (u !== "overview" || window.location.hash) && l(u);
715
+ }, [$]), R(() => {
716
+ const u = () => {
717
+ const S = $(window.location.hash);
718
+ S !== m && l(S);
719
+ };
720
+ return window.addEventListener("hashchange", u), () => window.removeEventListener("hashchange", u);
721
+ }, [m, $]), R(() => {
722
+ typeof window > "u" || (window.location.hash = m);
723
+ }, [m]);
724
+ const o = B(() => {
725
+ f((u) => {
726
+ const S = !u;
727
+ return localStorage.setItem("ss-dash-sidebar", S ? "collapsed" : "expanded"), S;
728
+ });
729
+ }, []), v = O(
730
+ () => [
731
+ { id: "overview", label: "Overview", visible: !0 },
732
+ { id: "requests", label: "Requests", visible: !0 },
733
+ { id: "queries", label: "Queries", visible: !0 },
734
+ { id: "events", label: "Events", visible: !0 },
735
+ { id: "routes", label: "Routes", visible: !0 },
736
+ { id: "logs", label: "Logs", visible: !0 },
737
+ { id: "emails", label: "Emails", visible: !0 },
738
+ { id: "timeline", label: "Timeline", visible: r.tracing },
739
+ { id: "cache", label: "Cache", visible: r.cache },
740
+ { id: "jobs", label: "Jobs", visible: r.queues },
741
+ { id: "config", label: "Config", visible: !0 },
742
+ { id: "internals", label: "Internals", visible: !0 }
743
+ ],
744
+ [r]
745
+ ), x = O(() => v.filter((u) => u.visible), [v]), k = O(
746
+ () => ({ baseUrl: i, dashboardEndpoint: t, authToken: a, refreshKey: E }),
747
+ [i, t, a, E]
748
+ ), { data: D } = Ee("overview", k), P = O(() => {
749
+ if (!D) return {};
750
+ const u = {};
751
+ if (D.totalRequests > 0 && (u.requests = { count: D.totalRequests }), D.queryStats?.total > 0 && (u.queries = { count: D.queryStats.total }), D.logLevelBreakdown) {
752
+ const S = D.logLevelBreakdown, q = S.error + S.warn + S.info + S.debug;
753
+ q > 0 && (u.logs = { count: q });
754
+ }
755
+ return u;
756
+ }, [D]), M = B(() => {
757
+ const u = {
758
+ overview: /* @__PURE__ */ e(xe, { options: k }),
759
+ requests: /* @__PURE__ */ e(Ie, { options: k }),
760
+ queries: /* @__PURE__ */ e(Be, { options: k }),
761
+ events: /* @__PURE__ */ e(Me, { options: k }),
762
+ routes: /* @__PURE__ */ e(Re, { options: k }),
763
+ logs: /* @__PURE__ */ e(Oe, { options: k }),
764
+ emails: /* @__PURE__ */ e(_e, { options: k }),
765
+ timeline: /* @__PURE__ */ e(De, { options: k }),
766
+ cache: /* @__PURE__ */ e(je, { options: k }),
767
+ jobs: /* @__PURE__ */ e(He, { options: k }),
768
+ config: /* @__PURE__ */ e(Pe, { options: k }),
769
+ internals: /* @__PURE__ */ e(qe, { options: k, debugEndpoint: n })
770
+ };
771
+ return /* @__PURE__ */ e("div", { className: "ss-dash-pane ss-dash-active", id: `ss-dash-pane-${m}`, children: /* @__PURE__ */ e("div", { className: "ss-dash-pane-inner", children: /* @__PURE__ */ e(F, { fallback: /* @__PURE__ */ e("div", { className: "ss-dash-empty", children: "Loading..." }), children: u[m] || /* @__PURE__ */ e("div", { className: "ss-dash-empty", children: "Unknown section" }) }) }) });
772
+ }, [m, k]);
773
+ return /* @__PURE__ */ d("div", { className: "ss-dash", "data-theme": g, id: "ss-dash", children: [
774
+ /* @__PURE__ */ d("div", { className: "ss-dash-header", children: [
775
+ /* @__PURE__ */ d("div", { className: "ss-dash-header-left", children: [
776
+ /* @__PURE__ */ e("span", { className: "ss-dash-logo", children: "Server Stats" }),
777
+ /* @__PURE__ */ e("span", { className: "ss-dash-logo-sub", children: "Dashboard" })
778
+ ] }),
779
+ /* @__PURE__ */ d("div", { className: "ss-dash-header-center", children: [
780
+ /* @__PURE__ */ e(
781
+ "span",
782
+ {
783
+ className: `ss-dash-live-dot ${b ? "ss-dash-connected" : ""}`,
784
+ id: "ss-dash-live-dot"
785
+ }
786
+ ),
787
+ /* @__PURE__ */ e(
788
+ "span",
789
+ {
790
+ className: `ss-dash-live-label ${b ? "ss-dash-connected" : ""}`,
791
+ id: "ss-dash-live-label",
792
+ children: b ? "Live" : "Polling"
793
+ }
794
+ )
795
+ ] }),
796
+ /* @__PURE__ */ d("div", { className: "ss-dash-header-right", children: [
797
+ /* @__PURE__ */ e(J, { theme: g, onToggle: p }),
798
+ h && /* @__PURE__ */ e("a", { href: h, className: "ss-dash-back-link", title: "Back to app", children: "← App" })
799
+ ] })
800
+ ] }),
801
+ /* @__PURE__ */ d("div", { className: "ss-dash-body", children: [
802
+ /* @__PURE__ */ d(
803
+ "div",
804
+ {
805
+ className: `ss-dash-sidebar ${y ? "ss-dash-collapsed" : ""}`,
806
+ id: "ss-dash-sidebar",
807
+ children: [
808
+ /* @__PURE__ */ d("nav", { className: "ss-dash-nav", children: [
809
+ x.map((u) => {
810
+ const S = P[u.id];
811
+ return /* @__PURE__ */ d(
812
+ "button",
813
+ {
814
+ type: "button",
815
+ className: `ss-dash-nav-item ${m === u.id ? "ss-dash-active" : ""}`,
816
+ "data-ss-section": u.id,
817
+ onClick: () => {
818
+ u.id !== m && l(u.id);
819
+ },
820
+ title: y ? u.label : void 0,
821
+ children: [
822
+ /* @__PURE__ */ e("span", { className: "ss-dash-nav-icon", children: /* @__PURE__ */ e(
823
+ "svg",
824
+ {
825
+ width: "20",
826
+ height: "20",
827
+ viewBox: (L[W(u.id)] || L.config).viewBox,
828
+ fill: "none",
829
+ stroke: "currentColor",
830
+ strokeWidth: "2",
831
+ strokeLinecap: "round",
832
+ strokeLinejoin: "round",
833
+ dangerouslySetInnerHTML: {
834
+ __html: (L[W(u.id)] || L.config).elements.join("")
835
+ }
836
+ }
837
+ ) }),
838
+ /* @__PURE__ */ e("span", { className: "ss-dash-nav-label", children: u.label }),
839
+ S && S.count > 0 && /* @__PURE__ */ e(
840
+ "span",
841
+ {
842
+ className: `ss-dash-nav-badge${S.variant ? " " + S.variant : ""}`,
843
+ children: S.count
844
+ }
845
+ )
846
+ ]
847
+ },
848
+ u.id
849
+ );
850
+ }),
851
+ C.length > 0 && /* @__PURE__ */ e("div", { className: "ss-dash-nav-sep" }),
852
+ C.map((u) => /* @__PURE__ */ d(
853
+ "button",
854
+ {
855
+ type: "button",
856
+ className: `ss-dash-nav-item ${m === u.id ? "ss-dash-active" : ""}`,
857
+ onClick: () => l(u.id),
858
+ title: y ? u.label : void 0,
859
+ children: [
860
+ /* @__PURE__ */ e("span", { className: "ss-dash-nav-icon", children: /* @__PURE__ */ e(
861
+ "svg",
862
+ {
863
+ width: "20",
864
+ height: "20",
865
+ viewBox: L["custom-pane"].viewBox,
866
+ fill: "none",
867
+ stroke: "currentColor",
868
+ strokeWidth: "2",
869
+ strokeLinecap: "round",
870
+ strokeLinejoin: "round",
871
+ dangerouslySetInnerHTML: { __html: L["custom-pane"].elements.join("") }
872
+ }
873
+ ) }),
874
+ /* @__PURE__ */ e("span", { className: "ss-dash-nav-label", children: u.label })
875
+ ]
876
+ },
877
+ u.id
878
+ ))
879
+ ] }),
880
+ /* @__PURE__ */ e(
881
+ "button",
882
+ {
883
+ type: "button",
884
+ className: "ss-dash-sidebar-toggle",
885
+ id: "ss-dash-sidebar-toggle",
886
+ onClick: o,
887
+ title: y ? "Expand sidebar" : "Collapse sidebar",
888
+ children: y ? /* @__PURE__ */ e(
889
+ "svg",
890
+ {
891
+ width: "16",
892
+ height: "16",
893
+ viewBox: L["chevron-right"].viewBox,
894
+ fill: "none",
895
+ stroke: "currentColor",
896
+ strokeWidth: "1.5",
897
+ dangerouslySetInnerHTML: { __html: L["chevron-right"].elements.join("") }
898
+ }
899
+ ) : /* @__PURE__ */ e(
900
+ "svg",
901
+ {
902
+ width: "16",
903
+ height: "16",
904
+ viewBox: L["chevron-left"].viewBox,
905
+ fill: "none",
906
+ stroke: "currentColor",
907
+ strokeWidth: "1.5",
908
+ dangerouslySetInnerHTML: { __html: L["chevron-left"].elements.join("") }
909
+ }
910
+ )
911
+ }
912
+ )
913
+ ]
914
+ }
915
+ ),
916
+ /* @__PURE__ */ e("div", { className: "ss-dash-main", children: M() })
917
+ ] })
918
+ ] });
919
+ }
920
+ function Ke(s, i = {}) {
921
+ const { baseUrl: t = "", debugEndpoint: n = "/admin/api/debug", authToken: a } = i, [h, c] = N(null), [r, g] = N(!0), [p, m] = N(null), l = j(null);
922
+ l.current || (l.current = new le({
923
+ baseUrl: t,
924
+ endpoint: n,
925
+ authToken: a,
926
+ onData: (w) => c(w),
927
+ onLoading: (w) => g(w),
928
+ onError: (w) => m(w),
929
+ onUnauthorized: (w) => m(w)
930
+ })), R(() => {
931
+ const w = l.current;
932
+ return w.start(s), () => w.stop();
933
+ }, [s]);
934
+ const y = B(() => {
935
+ l.current?.refresh();
936
+ }, []), f = B(() => {
937
+ c(null);
938
+ }, []), b = B((w, E) => {
939
+ l.current?.cacheForTab(w, E);
940
+ }, []);
941
+ return { data: h, isLoading: r, error: p, refresh: y, clearData: f, cacheForTab: b };
942
+ }
943
+ function Ge({
944
+ color: s = "muted",
945
+ children: i,
946
+ className: t = "",
947
+ classPrefix: n = "ss-dash"
948
+ }) {
949
+ return /* @__PURE__ */ e("span", { className: `${n}-badge ${n}-badge-${s} ${t}`, children: i });
950
+ }
951
+ function Qe({ method: s, className: i = "", classPrefix: t = "ss-dash" }) {
952
+ return /* @__PURE__ */ e(
953
+ "span",
954
+ {
955
+ className: `${t}-method ${t}-method-${s.toLowerCase()} ${i}`,
956
+ children: s
957
+ }
958
+ );
959
+ }
960
+ function Xe({ code: s, className: i = "", classPrefix: t = "ss-dash" }) {
961
+ let n = `${t}-status-2xx`;
962
+ return s >= 500 ? n = `${t}-status-5xx` : s >= 400 ? n = `${t}-status-4xx` : s >= 300 && (n = `${t}-status-3xx`), /* @__PURE__ */ e("span", { className: `${t}-status ${n} ${i}`, children: s });
963
+ }
964
+ function Ye({
965
+ data: s,
966
+ maxPreviewLength: i = 100,
967
+ className: t = "",
968
+ classPrefix: n = "ss-dash"
969
+ }) {
970
+ const [a, h] = N(!1), c = O(() => {
971
+ if (typeof s == "string")
972
+ try {
973
+ return JSON.parse(s);
974
+ } catch {
975
+ return s;
976
+ }
977
+ return s;
978
+ }, [s]), r = O(() => typeof c == "object" && c !== null ? ce(c, i) : String(c ?? "-"), [c, i]), g = O(() => typeof c == "object" && c !== null ? JSON.stringify(c, null, 2) : String(c), [c]), p = B(() => {
979
+ h((l) => !l);
980
+ }, []), m = B(async () => {
981
+ try {
982
+ await navigator.clipboard.writeText(g);
983
+ } catch {
984
+ }
985
+ }, [g]);
986
+ return !s && s !== 0 && s !== !1 ? /* @__PURE__ */ e("span", { className: `ss-dim ${n}-c-dim`, children: "-" }) : /* @__PURE__ */ d("div", { className: `${n}-data-cell ${t}`, children: [
987
+ /* @__PURE__ */ e(
988
+ "span",
989
+ {
990
+ className: `${n}-data-preview`,
991
+ onClick: p,
992
+ role: "button",
993
+ tabIndex: 0,
994
+ onKeyDown: (l) => l.key === "Enter" && p(),
995
+ children: r
996
+ }
997
+ ),
998
+ a && /* @__PURE__ */ d("div", { className: `${n}-data-full`, onClick: p, children: [
999
+ /* @__PURE__ */ e(
1000
+ "button",
1001
+ {
1002
+ className: `${n}-copy-btn`,
1003
+ onClick: (l) => {
1004
+ l.stopPropagation(), m();
1005
+ },
1006
+ title: "Copy to clipboard",
1007
+ type: "button",
1008
+ children: "Copy"
1009
+ }
1010
+ ),
1011
+ /* @__PURE__ */ e("pre", { children: g })
1012
+ ] })
1013
+ ] });
1014
+ }
1015
+ function Ze({ content: s, children: i, position: t = "top", className: n = "" }) {
1016
+ const [a, h] = N(!1), [c, r] = N({ left: 0, bottom: 0 }), g = j(null), p = j(null), m = B(() => {
1017
+ h(!0);
1018
+ }, []), l = B(() => {
1019
+ h(!1);
1020
+ }, []);
1021
+ return R(() => {
1022
+ if (!a || !g.current || !p.current) return;
1023
+ const y = g.current.getBoundingClientRect(), f = p.current.getBoundingClientRect();
1024
+ let b = y.left + y.width / 2 - f.width / 2, w;
1025
+ b < 8 && (b = 8), b + f.width > window.innerWidth - 8 && (b = window.innerWidth - 8 - f.width), t === "top" && (w = window.innerHeight - y.top + 8), r({ left: b, bottom: w ?? 0 });
1026
+ }, [a, t]), /* @__PURE__ */ d(
1027
+ "div",
1028
+ {
1029
+ ref: g,
1030
+ className: `ss-tooltip-trigger ${n}`,
1031
+ onMouseEnter: m,
1032
+ onMouseLeave: l,
1033
+ style: { display: "inline-flex", position: "relative" },
1034
+ children: [
1035
+ i,
1036
+ a && /* @__PURE__ */ d(
1037
+ "div",
1038
+ {
1039
+ ref: p,
1040
+ className: "ss-tooltip",
1041
+ style: {
1042
+ position: "fixed",
1043
+ left: `${c.left}px`,
1044
+ bottom: t === "top" ? `${c.bottom}px` : void 0,
1045
+ zIndex: 200,
1046
+ pointerEvents: "none"
1047
+ },
1048
+ children: [
1049
+ /* @__PURE__ */ e("div", { className: "ss-tooltip-inner", children: s }),
1050
+ /* @__PURE__ */ e("div", { className: "ss-tooltip-arrow" })
1051
+ ]
1052
+ }
1053
+ )
1054
+ ]
1055
+ }
1056
+ );
1057
+ }
1058
+ export {
1059
+ Ge as B,
1060
+ Ve as D,
1061
+ Ye as J,
1062
+ Qe as M,
1063
+ he as S,
1064
+ J as T,
1065
+ Ee as a,
1066
+ Xe as b,
1067
+ Je as c,
1068
+ We as d,
1069
+ Ze as e,
1070
+ z as f,
1071
+ ue as g,
1072
+ A as h,
1073
+ Ke as u
1074
+ };