@lunora/studio 1.0.0-alpha.8 → 1.0.0-alpha.80

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 (305) hide show
  1. package/LICENSE.md +6 -0
  2. package/dist/index.d.ts +777 -780
  3. package/dist/index.js +1 -41
  4. package/dist/mount.d.ts +10 -10
  5. package/dist/mount.js +1 -26
  6. package/dist/packem_chunks/ApiTab.js +1 -0
  7. package/dist/packem_chunks/AuditPanel.js +1 -0
  8. package/dist/packem_chunks/DeploymentHealthPanel.js +1 -0
  9. package/dist/packem_chunks/ExportImportPanel.js +3 -0
  10. package/dist/packem_chunks/FileBrowser.js +4 -0
  11. package/dist/packem_chunks/FunctionRunner.js +1 -0
  12. package/dist/packem_chunks/FunctionStatsPanel.js +1 -0
  13. package/dist/packem_chunks/HealthPanel.js +1 -0
  14. package/dist/packem_chunks/InsightsPanel.js +1 -0
  15. package/dist/packem_chunks/LogsPanel.js +1 -0
  16. package/dist/packem_chunks/MailPanel.js +2 -0
  17. package/dist/packem_chunks/MetricsPanel.js +1 -0
  18. package/dist/packem_chunks/NotificationsPanel.js +1 -0
  19. package/dist/packem_chunks/PitrPanel.js +1 -0
  20. package/dist/packem_chunks/SchemaViewer.js +1 -0
  21. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -0
  22. package/dist/packem_chunks/SettingsPanel.js +1 -0
  23. package/dist/packem_chunks/SqlEditorPanel.js +6 -0
  24. package/dist/packem_chunks/TableEditor.js +1 -0
  25. package/dist/packem_chunks/agents-panel.js +1 -0
  26. package/dist/packem_chunks/analytics-panel.js +1 -0
  27. package/dist/packem_chunks/auth-audit-panel.js +1 -0
  28. package/dist/packem_chunks/auth-config-panel.js +1 -0
  29. package/dist/packem_chunks/auth-sessions-panel.js +1 -0
  30. package/dist/packem_chunks/containers-panel.js +1 -0
  31. package/dist/packem_chunks/dashboards-panel.js +1 -0
  32. package/dist/packem_chunks/fanout-panel.js +1 -0
  33. package/dist/packem_chunks/flags-panel.js +1 -0
  34. package/dist/packem_chunks/issues-panel.js +1 -0
  35. package/dist/packem_chunks/kv-browser.js +1 -0
  36. package/dist/packem_chunks/log-drains-panel.js +4 -0
  37. package/dist/packem_chunks/migrations-route.js +1 -0
  38. package/dist/packem_chunks/organizations-panel.js +1 -0
  39. package/dist/packem_chunks/payments-panel.js +1 -0
  40. package/dist/packem_chunks/permissions-panel.js +1 -0
  41. package/dist/packem_chunks/queues-panel.js +1 -0
  42. package/dist/packem_chunks/rls-panel.js +1 -0
  43. package/dist/packem_chunks/schedule-panel.js +1 -0
  44. package/dist/packem_chunks/sparkline.js +1 -0
  45. package/dist/packem_chunks/storage-rules-panel.js +1 -0
  46. package/dist/packem_chunks/subscriptions-panel.js +1 -0
  47. package/dist/packem_chunks/sync-client-panel.js +1 -0
  48. package/dist/packem_chunks/traces-panel.js +1 -0
  49. package/dist/packem_chunks/users-panel.js +1 -0
  50. package/dist/packem_chunks/vector-browser.js +1 -0
  51. package/dist/packem_chunks/workflows-panel.js +1 -0
  52. package/dist/packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js +1 -0
  53. package/dist/packem_shared/ApiDocsPanel-DfUQ1ZAF.js +2 -0
  54. package/dist/packem_shared/ApiReferencePanel-9q8BbJl-.js +1 -0
  55. package/dist/packem_shared/CommandPalette--SQwfTW1.js +1 -0
  56. package/dist/packem_shared/ConfirmButton-CTL3f3kr.js +1 -0
  57. package/dist/packem_shared/ConnectionBadge-DOk0CQWo.js +1 -0
  58. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js +1 -0
  59. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js +1 -0
  60. package/dist/packem_shared/DEFAULT_LOCALE-BZ4NojpD.js +1 -0
  61. package/dist/packem_shared/DataBrowser-CuRlztBz.js +1 -0
  62. package/dist/packem_shared/DataFilters-B26ZeqBZ.js +1 -0
  63. package/dist/packem_shared/ErrorBoundary-DvzYskH7.js +1 -0
  64. package/dist/packem_shared/GlobalDataBrowser-DB-vQ2_H.js +1 -0
  65. package/dist/packem_shared/HomePanel-Dcs4a3Ax.js +1 -0
  66. package/dist/packem_shared/MigrationsPanel-C2OnsqRb.js +1 -0
  67. package/dist/packem_shared/OpenRpcReferencePanel-qOZcWXMs.js +1 -0
  68. package/dist/packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js +1 -0
  69. package/dist/packem_shared/ScheduledJobs-D8kBZWBu.js +1 -0
  70. package/dist/packem_shared/ShardInput-BVn2iCU0.js +1 -0
  71. package/dist/packem_shared/Studio-B26_pT8J.js +1 -0
  72. package/dist/packem_shared/StudioApp-bXhJeLlZ.js +1 -0
  73. package/dist/packem_shared/StudioI18nProvider-CZ5h4nrV.js +1 -0
  74. package/dist/packem_shared/advisor-view-Pa8HLtBv.js +1 -0
  75. package/dist/packem_shared/aggregateMetrics-BNfajLa2.js +1 -0
  76. package/dist/packem_shared/alert-CVcOFuDR.js +1 -0
  77. package/dist/packem_shared/app.d-DW7yZsfu.d.ts +252 -0
  78. package/dist/packem_shared/badge-BbuuAio7.js +1 -0
  79. package/dist/packem_shared/bar-chart-DraN_srt.js +9 -0
  80. package/dist/packem_shared/browser-storage-xjTyMKY0.js +1 -0
  81. package/dist/packem_shared/button-BkCrNcAs.js +1 -0
  82. package/dist/packem_shared/card-CIDGUN6K.js +1 -0
  83. package/dist/packem_shared/cf-links-gbDy51nR.js +1 -0
  84. package/dist/packem_shared/checkbox-StT4Gob6.js +1 -0
  85. package/dist/packem_shared/data-grid-DcxyIXwG.js +1 -0
  86. package/dist/packem_shared/data-view-params-ClrV7XgF.js +1 -0
  87. package/dist/packem_shared/dropdown-menu-C3RQ_HlW.js +2 -0
  88. package/dist/packem_shared/empty-state-Cg7t_8qu.js +1 -0
  89. package/dist/packem_shared/error-alert-t6cpEi0z.js +1 -0
  90. package/dist/packem_shared/grid-features-jnrD0SpX.js +6 -0
  91. package/dist/packem_shared/home-panel-CU6MWLHG.js +3 -0
  92. package/dist/packem_shared/input-JHu63lTv.js +1 -0
  93. package/dist/packem_shared/internal-BSIsQVC6.js +2 -0
  94. package/dist/packem_shared/label-6uP1obNF.js +1 -0
  95. package/dist/packem_shared/live-status-CmuRLFKf.js +1 -0
  96. package/dist/packem_shared/log-fields-CoL3hsIQ.js +1 -0
  97. package/dist/packem_shared/modal-shell-CUwwWC2o.js +1 -0
  98. package/dist/packem_shared/operation-console-provider-BMJNtiyB.js +1 -0
  99. package/dist/packem_shared/recording-client-DRAZEmzE.js +1 -0
  100. package/dist/packem_shared/reference-view-DnYYWr7I.js +12 -0
  101. package/dist/packem_shared/result-chart-DzJOVsaw.js +1 -0
  102. package/dist/packem_shared/schema-diagram-cg-bz_VL.js +2 -0
  103. package/dist/packem_shared/scroll-area-DTEq6Jec.js +2 -0
  104. package/dist/packem_shared/select-Bul-DeII.js +2 -0
  105. package/dist/packem_shared/shard-history-DMEW5VBE.js +1 -0
  106. package/dist/packem_shared/skeleton-C1wQ9M5t.js +1 -0
  107. package/dist/packem_shared/sparkline-CgjeUU2I.js +1 -0
  108. package/dist/packem_shared/storage-tier-DznqOf-q.js +1 -0
  109. package/dist/packem_shared/studio-q-C-acL7.js +2 -0
  110. package/dist/packem_shared/table-DdJBrClo.js +2 -0
  111. package/dist/packem_shared/table-list-sidebar-BFkSQwlB.js +1 -0
  112. package/dist/packem_shared/textarea-Bu2-jKAs.js +1 -0
  113. package/dist/packem_shared/trace-handoff-Dw7mwjxu.js +1 -0
  114. package/dist/packem_shared/use-admin-query-QJ-ibl5u.js +1 -0
  115. package/dist/packem_shared/use-async-submit-q3ymBJkD.js +1 -0
  116. package/dist/packem_shared/use-auth-config-BObBpdsi.js +1 -0
  117. package/dist/packem_shared/use-sql-assistant-CHEu2-Rk.js +1 -0
  118. package/dist/packem_shared/useDebounced-Ihdiid_k.js +1 -0
  119. package/dist/packem_shared/utils-bhneXptQ.js +1 -0
  120. package/dist/packem_shared/virtual-rect-1o1veP7R.js +1 -0
  121. package/dist/standalone/chunk-2GA4SHO7.js +1 -0
  122. package/dist/standalone/chunk-2OUPA2WJ.js +1 -0
  123. package/dist/standalone/chunk-2PJNAWB3.js +1 -0
  124. package/dist/standalone/chunk-2VDFV5TD.js +1 -0
  125. package/dist/standalone/chunk-2WOIRKEI.js +1 -0
  126. package/dist/standalone/chunk-33CL6OHR.js +1 -0
  127. package/dist/standalone/chunk-34D36UCW.js +1 -0
  128. package/dist/standalone/chunk-3C3CG7ZK.js +1 -0
  129. package/dist/standalone/chunk-3O3HAXW7.js +1 -0
  130. package/dist/standalone/chunk-3STOIE7Q.js +1 -0
  131. package/dist/standalone/chunk-3XIESWL4.js +1 -0
  132. package/dist/standalone/chunk-4UOFSGUS.js +1 -0
  133. package/dist/standalone/chunk-53WEPGUD.js +1 -0
  134. package/dist/standalone/chunk-54MMVNPT.js +1 -0
  135. package/dist/standalone/chunk-5CVJS7ON.js +1 -0
  136. package/dist/standalone/chunk-5Y3QLNWX.js +1 -0
  137. package/dist/standalone/chunk-6IKEW5LG.js +1 -0
  138. package/dist/standalone/chunk-6LNCYDZO.js +1 -0
  139. package/dist/standalone/chunk-6NY7SPDL.js +1 -0
  140. package/dist/standalone/chunk-6PNPIW6I.js +2 -0
  141. package/dist/standalone/chunk-6ST5ECQA.js +1 -0
  142. package/dist/standalone/chunk-6VAKZALJ.js +1 -0
  143. package/dist/standalone/chunk-6YI4WJO4.js +1 -0
  144. package/dist/standalone/chunk-6YTSSIEJ.js +3 -0
  145. package/dist/standalone/chunk-7LWMHTJ3.js +1 -0
  146. package/dist/standalone/chunk-7QIFDWQV.js +1 -0
  147. package/dist/standalone/chunk-7T7UOTYK.js +1 -0
  148. package/dist/standalone/chunk-A74VSSA2.js +4 -0
  149. package/dist/standalone/chunk-AADILRJW.js +14 -0
  150. package/dist/standalone/chunk-AVAC26HJ.js +1 -0
  151. package/dist/standalone/chunk-BGBLQ563.js +1 -0
  152. package/dist/standalone/chunk-CCVXYYPJ.js +1 -0
  153. package/dist/standalone/chunk-CFPZYHPY.js +2 -0
  154. package/dist/standalone/chunk-CT5MMH4O.js +1 -0
  155. package/dist/standalone/chunk-CTNB2KIA.js +1 -0
  156. package/dist/standalone/chunk-CU55Y5TV.js +62 -0
  157. package/dist/standalone/chunk-D2RKH6JK.js +1 -0
  158. package/dist/standalone/chunk-E3NMX2VU.js +4 -0
  159. package/dist/standalone/chunk-EN2QAEO4.js +11 -0
  160. package/dist/standalone/chunk-ESVP44Y3.js +1 -0
  161. package/dist/standalone/chunk-FNPJ7GJZ.js +1 -0
  162. package/dist/standalone/chunk-FOBRNWBG.js +3 -0
  163. package/dist/standalone/chunk-FXCBF4XT.js +1 -0
  164. package/dist/standalone/chunk-G6PSMGLD.js +1 -0
  165. package/dist/standalone/chunk-GAX5IZYG.js +8 -0
  166. package/dist/standalone/chunk-GB6U2BPU.js +1 -0
  167. package/dist/standalone/chunk-GEDMLM4A.js +6 -0
  168. package/dist/standalone/chunk-GMR677FL.js +1 -0
  169. package/dist/standalone/chunk-GRL5MG3Z.js +1 -0
  170. package/dist/standalone/chunk-GXSZH7VJ.js +13 -0
  171. package/dist/standalone/chunk-GYKVBKT5.js +1 -0
  172. package/dist/standalone/chunk-H6YOWRFB.js +1 -0
  173. package/dist/standalone/chunk-HJ3E4YF5.js +1 -0
  174. package/dist/standalone/chunk-HJD2YUQS.js +1 -0
  175. package/dist/standalone/chunk-HPFLBYRI.js +1 -0
  176. package/dist/standalone/chunk-IC4L6G56.js +1 -0
  177. package/dist/standalone/chunk-IHQC7J35.js +1 -0
  178. package/dist/standalone/chunk-ILNELDFC.js +1 -0
  179. package/dist/standalone/chunk-IVFHIQOT.js +1 -0
  180. package/dist/standalone/chunk-JLOWAJRR.js +1 -0
  181. package/dist/standalone/chunk-JN2Y24PY.js +1 -0
  182. package/dist/standalone/chunk-JRMMYIAF.js +1 -0
  183. package/dist/standalone/chunk-KC44QCN6.js +1 -0
  184. package/dist/standalone/chunk-KJB7YAKB.js +1 -0
  185. package/dist/standalone/chunk-KLQYC6CC.js +1 -0
  186. package/dist/standalone/chunk-KUVMORDQ.js +1 -0
  187. package/dist/standalone/chunk-KZ3ALMMP.js +1 -0
  188. package/dist/standalone/chunk-L7R74G63.js +1 -0
  189. package/dist/standalone/chunk-LEDWUPXM.js +1 -0
  190. package/dist/standalone/chunk-LFKCLLPT.js +1 -0
  191. package/dist/standalone/chunk-MIQTKZAR.js +1 -0
  192. package/dist/standalone/chunk-OG4N2XHD.js +19 -0
  193. package/dist/standalone/chunk-OY2RVUZL.js +1 -0
  194. package/dist/standalone/chunk-P4YLIBCN.js +1 -0
  195. package/dist/standalone/chunk-PZVU2QMX.js +1 -0
  196. package/dist/standalone/chunk-Q7O6B7WC.js +1 -0
  197. package/dist/standalone/chunk-QBWRC5YX.js +1 -0
  198. package/dist/standalone/chunk-QLQADHFE.js +1 -0
  199. package/dist/standalone/chunk-QWGT25SE.js +1 -0
  200. package/dist/standalone/chunk-QXXIJAD5.js +1 -0
  201. package/dist/standalone/chunk-QZGTH6WH.js +1 -0
  202. package/dist/standalone/chunk-RJP3WBZ4.js +1 -0
  203. package/dist/standalone/chunk-RNL6BSFM.js +1 -0
  204. package/dist/standalone/chunk-RNRJKBY3.js +4 -0
  205. package/dist/standalone/chunk-RQ7AFLIV.js +1 -0
  206. package/dist/standalone/chunk-S252DAFP.js +1 -0
  207. package/dist/standalone/chunk-S2VVR7HI.js +1 -0
  208. package/dist/standalone/chunk-SD4BERSA.js +1 -0
  209. package/dist/standalone/chunk-SFDOII3B.js +1 -0
  210. package/dist/standalone/chunk-SKHEGARW.js +1 -0
  211. package/dist/standalone/chunk-SKW6J4VW.js +1 -0
  212. package/dist/standalone/chunk-SMIESS7P.js +1 -0
  213. package/dist/standalone/chunk-T6VMSOBB.js +1 -0
  214. package/dist/standalone/chunk-T7IUZIF4.js +1 -0
  215. package/dist/standalone/chunk-THIXMMZD.js +1 -0
  216. package/dist/standalone/chunk-TTGOOYLF.js +1 -0
  217. package/dist/standalone/chunk-U6TNNM5U.js +1 -0
  218. package/dist/standalone/chunk-UZERI5YC.js +1 -0
  219. package/dist/standalone/chunk-V53KNYRN.js +1 -0
  220. package/dist/standalone/chunk-VHWOCPRK.js +1 -0
  221. package/dist/standalone/chunk-W6SAOXGH.js +6 -0
  222. package/dist/standalone/chunk-WBYSSCV2.js +1 -0
  223. package/dist/standalone/chunk-X665E2HU.js +1 -0
  224. package/dist/standalone/chunk-XBDKZZ67.js +1 -0
  225. package/dist/standalone/chunk-XDAT7LHC.js +1 -0
  226. package/dist/standalone/chunk-XQCVZAGU.js +1 -0
  227. package/dist/standalone/chunk-XS5LDR52.js +1 -0
  228. package/dist/standalone/chunk-XXQUMVWH.js +1 -0
  229. package/dist/standalone/chunk-Y5Y7DHFW.js +1 -0
  230. package/dist/standalone/chunk-YJYTMQJI.js +1 -0
  231. package/dist/standalone/chunk-Z2V42P7J.js +1 -0
  232. package/dist/standalone/chunk-ZJGP6EKR.js +1 -0
  233. package/dist/standalone/studio.js +9 -356
  234. package/dist/styles.css +2 -2
  235. package/package.json +16 -14
  236. package/dist/packem_shared/ADMIN_FUNCTIONS-DjXgvJb6.js +0 -46
  237. package/dist/packem_shared/ApiDocsPanel-yVSGHK3H.js +0 -842
  238. package/dist/packem_shared/ApiReferencePanel-1vubqG5s.js +0 -229
  239. package/dist/packem_shared/ApiTab-rwttyQ1-.js +0 -251
  240. package/dist/packem_shared/AuditPanel-BqXZAsu_.js +0 -212
  241. package/dist/packem_shared/CommandPalette-BtgkBzZI.js +0 -373
  242. package/dist/packem_shared/ConfirmButton-C2eVi2Qv.js +0 -59
  243. package/dist/packem_shared/ConnectionBadge-B2DDM2Tn.js +0 -111
  244. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +0 -50
  245. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +0 -89
  246. package/dist/packem_shared/DEFAULT_LOCALE-CiX4W7Kr.js +0 -27
  247. package/dist/packem_shared/DataBrowser-Ck_7QwNK.js +0 -4542
  248. package/dist/packem_shared/DataFilters-FNquMaiu.js +0 -249
  249. package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +0 -66
  250. package/dist/packem_shared/ExportImportPanel-Dq6rj0tI.js +0 -193
  251. package/dist/packem_shared/FileBrowser-0pCpdKPE.js +0 -2932
  252. package/dist/packem_shared/FunctionRunner-7NH3KcTg.js +0 -343
  253. package/dist/packem_shared/FunctionStatsPanel-Cn_EBpDy.js +0 -432
  254. package/dist/packem_shared/GlobalDataBrowser-BTEmGrph.js +0 -318
  255. package/dist/packem_shared/HealthPanel-CQ4LzVET.js +0 -640
  256. package/dist/packem_shared/HomePanel-CP0lN1eF.js +0 -1273
  257. package/dist/packem_shared/InsightsPanel-DzNtoz7k.js +0 -423
  258. package/dist/packem_shared/LogsPanel-C3W0mabf.js +0 -839
  259. package/dist/packem_shared/MailPanel-CoEfWkCh.js +0 -447
  260. package/dist/packem_shared/MetricsPanel-CujtUfpl.js +0 -1625
  261. package/dist/packem_shared/MigrationsPanel-RX5qIFSr.js +0 -246
  262. package/dist/packem_shared/OpenRpcReferencePanel-vbcYbv3V.js +0 -191
  263. package/dist/packem_shared/PitrPanel-LJGNP_IX.js +0 -252
  264. package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +0 -3
  265. package/dist/packem_shared/ScheduledJobs-CabfKbyM.js +0 -159
  266. package/dist/packem_shared/SchemaViewer-Bam6ylvw.js +0 -2512
  267. package/dist/packem_shared/SecurityAdvisorPanel-DHr_bI38.js +0 -79
  268. package/dist/packem_shared/SettingsPanel-CBXQpYQA.js +0 -176
  269. package/dist/packem_shared/ShardInput-gx_DZXXn.js +0 -107
  270. package/dist/packem_shared/SqlEditorPanel-D5wMIxcg.js +0 -13
  271. package/dist/packem_shared/Studio-DkgODWD3.js +0 -33
  272. package/dist/packem_shared/StudioApp-ColQCvC_.js +0 -657
  273. package/dist/packem_shared/StudioI18nProvider-B-tDCZIi.js +0 -48
  274. package/dist/packem_shared/TableEditor-B8K5nUna.js +0 -371
  275. package/dist/packem_shared/advisor-view-CGcfMiPq.js +0 -159
  276. package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +0 -108
  277. package/dist/packem_shared/app.d-Nbhpihxv.d.ts +0 -300
  278. package/dist/packem_shared/badge-B2PKA1-5.js +0 -49
  279. package/dist/packem_shared/bar-chart-CzJAgqkp.js +0 -3245
  280. package/dist/packem_shared/button-BhsN2uZH.js +0 -49
  281. package/dist/packem_shared/card-DURq3ElK.js +0 -175
  282. package/dist/packem_shared/cf-links-2cktDedA.js +0 -8
  283. package/dist/packem_shared/checkbox-UNkzAxl-.js +0 -63
  284. package/dist/packem_shared/data-grid-B5CaV3wS.js +0 -183
  285. package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +0 -280
  286. package/dist/packem_shared/empty-state-DY_oe0k6.js +0 -98
  287. package/dist/packem_shared/grid-features-CzUfqgsM.js +0 -840
  288. package/dist/packem_shared/input-XH4r1Pt1.js +0 -53
  289. package/dist/packem_shared/internal-rXJEAhXS.js +0 -68
  290. package/dist/packem_shared/label-D8ykjn5J.js +0 -46
  291. package/dist/packem_shared/live-status-FZ0psC1z.js +0 -44
  292. package/dist/packem_shared/reference-view-B4E49Lip.js +0 -2180
  293. package/dist/packem_shared/shard-history-DyebH1R5.js +0 -38
  294. package/dist/packem_shared/sparkline-10dG-_f0.js +0 -93
  295. package/dist/packem_shared/sql-editor-panel-Smfl_FDF.js +0 -2562
  296. package/dist/packem_shared/storage-tier-CL98eOvn.js +0 -85
  297. package/dist/packem_shared/studio-Be28OqIx.js +0 -10413
  298. package/dist/packem_shared/table-_RzNvy3R.js +0 -246
  299. package/dist/packem_shared/table-list-sidebar-Bg7uzbvC.js +0 -832
  300. package/dist/packem_shared/textarea-D3gaCU_-.js +0 -46
  301. package/dist/packem_shared/use-live-admin-Dq6g3daN.js +0 -73
  302. package/dist/packem_shared/use-live-shard-seed-Cuk3dnH0.js +0 -76
  303. package/dist/packem_shared/useDebounced-Dxncpg6z.js +0 -32
  304. package/dist/packem_shared/utils-B05Dmz_H.js +0 -8
  305. package/dist/packem_shared/virtual-rect-CVMUskSm.js +0 -10
package/dist/index.js CHANGED
@@ -1,41 +1 @@
1
- export { StudioApp } from './packem_shared/StudioApp-ColQCvC_.js';
2
- export { CommandPalette, openCommandPalette } from './packem_shared/CommandPalette-BtgkBzZI.js';
3
- export { S as Studio } from './packem_shared/studio-Be28OqIx.js';
4
- export { ConfirmButton } from './packem_shared/ConfirmButton-C2eVi2Qv.js';
5
- export { default as ConnectionBadge } from './packem_shared/ConnectionBadge-B2DDM2Tn.js';
6
- export { ErrorBoundary } from './packem_shared/ErrorBoundary-BzAApI7J.js';
7
- export { ShardInput } from './packem_shared/ShardInput-gx_DZXXn.js';
8
- export { DEFAULT_INSIGHT_THRESHOLDS, deriveInsights } from './packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js';
9
- export { InsightsPanel } from './packem_shared/InsightsPanel-DzNtoz7k.js';
10
- export { default as SecurityAdvisorPanel } from './packem_shared/SecurityAdvisorPanel-DHr_bI38.js';
11
- export { default as ApiDocsPanel } from './packem_shared/ApiDocsPanel-yVSGHK3H.js';
12
- export { default as ApiReferencePanel } from './packem_shared/ApiReferencePanel-1vubqG5s.js';
13
- export { default as ApiTab } from './packem_shared/ApiTab-rwttyQ1-.js';
14
- export { default as OpenRpcReferencePanel } from './packem_shared/OpenRpcReferencePanel-vbcYbv3V.js';
15
- export { DataBrowser } from './packem_shared/DataBrowser-Ck_7QwNK.js';
16
- export { DataFilters, toFilterClauses } from './packem_shared/DataFilters-FNquMaiu.js';
17
- export { GlobalDataBrowser } from './packem_shared/GlobalDataBrowser-BTEmGrph.js';
18
- export { TableEditor } from './packem_shared/TableEditor-B8K5nUna.js';
19
- export { ExportImportPanel } from './packem_shared/ExportImportPanel-Dq6rj0tI.js';
20
- export { MigrationsPanel } from './packem_shared/MigrationsPanel-RX5qIFSr.js';
21
- export { PitrPanel } from './packem_shared/PitrPanel-LJGNP_IX.js';
22
- export { FunctionRunner } from './packem_shared/FunctionRunner-7NH3KcTg.js';
23
- export { FunctionStatsPanel } from './packem_shared/FunctionStatsPanel-Cn_EBpDy.js';
24
- export { HomePanel } from './packem_shared/HomePanel-CP0lN1eF.js';
25
- export { AuditPanel } from './packem_shared/AuditPanel-BqXZAsu_.js';
26
- export { LogsPanel } from './packem_shared/LogsPanel-C3W0mabf.js';
27
- export { MailPanel } from './packem_shared/MailPanel-CoEfWkCh.js';
28
- export { ScheduledJobs } from './packem_shared/ScheduledJobs-CabfKbyM.js';
29
- export { HealthPanel } from './packem_shared/HealthPanel-CQ4LzVET.js';
30
- export { aggregateMetrics, shardsToAggregate } from './packem_shared/aggregateMetrics-D4nUHEKU.js';
31
- export { MetricsPanel } from './packem_shared/MetricsPanel-CujtUfpl.js';
32
- export { SchemaViewer } from './packem_shared/SchemaViewer-Bam6ylvw.js';
33
- export { SettingsPanel } from './packem_shared/SettingsPanel-CBXQpYQA.js';
34
- export { S as SqlEditorPanel } from './packem_shared/sql-editor-panel-Smfl_FDF.js';
35
- export { FileBrowser } from './packem_shared/FileBrowser-0pCpdKPE.js';
36
- export { DEFAULT_AUTO_REFRESH_MS, useAutoRefresh } from './packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js';
37
- export { default as useDebounced } from './packem_shared/useDebounced-Dxncpg6z.js';
38
- export { DEFAULT_LOCALE, createStudioI18n, studioI18n, useT } from './packem_shared/DEFAULT_LOCALE-CiX4W7Kr.js';
39
- export { StudioI18nProvider } from './packem_shared/StudioI18nProvider-B-tDCZIi.js';
40
- export { ADMIN_FUNCTIONS, ADMIN_FUNCTION_PREFIX } from './packem_shared/ADMIN_FUNCTIONS-DjXgvJb6.js';
41
- export { default as STUDIO_ROOT_CLASS } from './packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js';
1
+ import{StudioApp as r}from"./packem_shared/StudioApp-bXhJeLlZ.js";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette--SQwfTW1.js";import{S as m}from"./packem_shared/studio-q-C-acL7.js";import{ConfirmButton as x}from"./packem_shared/ConfirmButton-CTL3f3kr.js";import{default as s}from"./packem_shared/ConnectionBadge-DOk0CQWo.js";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-DvzYskH7.js";import{ShardInput as P}from"./packem_shared/ShardInput-BVn2iCU0.js";import{DEFAULT_INSIGHT_THRESHOLDS as A,deriveInsights as c}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{InsightsPanel as T}from"./packem_chunks/InsightsPanel.js";import{default as g}from"./packem_chunks/SecurityAdvisorPanel.js";import{default as F}from"./packem_shared/ApiDocsPanel-DfUQ1ZAF.js";import{default as R}from"./packem_shared/ApiReferencePanel-9q8BbJl-.js";import{default as C}from"./packem_chunks/ApiTab.js";import{default as H}from"./packem_shared/OpenRpcReferencePanel-qOZcWXMs.js";import{DataBrowser as N}from"./packem_shared/DataBrowser-CuRlztBz.js";import{DataFilters as U,toFilterClauses as B}from"./packem_shared/DataFilters-B26ZeqBZ.js";import{GlobalDataBrowser as w}from"./packem_shared/GlobalDataBrowser-DB-vQ2_H.js";import{TableEditor as y}from"./packem_chunks/TableEditor.js";import{ExportImportPanel as q}from"./packem_chunks/ExportImportPanel.js";import{MigrationsPanel as V}from"./packem_shared/MigrationsPanel-C2OnsqRb.js";import{PitrPanel as j}from"./packem_chunks/PitrPanel.js";import{FunctionRunner as z}from"./packem_chunks/FunctionRunner.js";import{FunctionStatsPanel as Q}from"./packem_chunks/FunctionStatsPanel.js";import{DeploymentHealthPanel as Y}from"./packem_chunks/DeploymentHealthPanel.js";import{H as $}from"./packem_shared/home-panel-CU6MWLHG.js";import{AuditPanel as oe}from"./packem_chunks/AuditPanel.js";import{LogsPanel as te}from"./packem_chunks/LogsPanel.js";import{MailPanel as fe}from"./packem_chunks/MailPanel.js";import{ScheduledJobs as me}from"./packem_shared/ScheduledJobs-D8kBZWBu.js";import{NotificationsPanel as xe}from"./packem_chunks/NotificationsPanel.js";import{HealthPanel as se}from"./packem_chunks/HealthPanel.js";import{aggregateMetrics as de,shardsToAggregate as ue}from"./packem_shared/aggregateMetrics-BNfajLa2.js";import{MetricsPanel as Se}from"./packem_chunks/MetricsPanel.js";import{SchemaViewer as ce}from"./packem_chunks/SchemaViewer.js";import{SettingsPanel as Te}from"./packem_chunks/SettingsPanel.js";import{SqlEditorPanel as ge}from"./packem_chunks/SqlEditorPanel.js";import{FileBrowser as Fe}from"./packem_chunks/FileBrowser.js";import{DEFAULT_AUTO_REFRESH_MS as Re,useAutoRefresh as he}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{default as Oe}from"./packem_shared/useDebounced-Ihdiid_k.js";import{DEFAULT_LOCALE as Le,createStudioI18n as Ne,studioI18n as Me,useT as Ue}from"./packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as be}from"./packem_shared/StudioI18nProvider-CZ5h4nrV.js";import{ADMIN_FUNCTIONS as ve,ADMIN_FUNCTION_PREFIX as ye}from"./packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{default as qe}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js";export{ve as ADMIN_FUNCTIONS,ye as ADMIN_FUNCTION_PREFIX,F as ApiDocsPanel,R as ApiReferencePanel,C as ApiTab,oe as AuditPanel,a as CommandPalette,x as ConfirmButton,s as ConnectionBadge,Re as DEFAULT_AUTO_REFRESH_MS,A as DEFAULT_INSIGHT_THRESHOLDS,Le as DEFAULT_LOCALE,N as DataBrowser,U as DataFilters,Y as DeploymentHealthPanel,d as ErrorBoundary,q as ExportImportPanel,Fe as FileBrowser,z as FunctionRunner,Q as FunctionStatsPanel,w as GlobalDataBrowser,se as HealthPanel,$ as HomePanel,T as InsightsPanel,te as LogsPanel,fe as MailPanel,Se as MetricsPanel,V as MigrationsPanel,xe as NotificationsPanel,H as OpenRpcReferencePanel,j as PitrPanel,qe as STUDIO_ROOT_CLASS,me as ScheduledJobs,ce as SchemaViewer,g as SecurityAdvisorPanel,Te as SettingsPanel,P as ShardInput,ge as SqlEditorPanel,m as Studio,r as StudioApp,be as StudioI18nProvider,y as TableEditor,de as aggregateMetrics,Ne as createStudioI18n,c as deriveInsights,f as openCommandPalette,ue as shardsToAggregate,Me as studioI18n,B as toFilterClauses,he as useAutoRefresh,Oe as useDebounced,Ue as useT};
package/dist/mount.d.ts CHANGED
@@ -1,21 +1,21 @@
1
1
  import { Root } from 'react-dom/client';
2
- import { S as StudioAppProps } from "./packem_shared/app.d-Nbhpihxv.js";
2
+ import { S as StudioAppProps } from "./packem_shared/app.d-DW7yZsfu.js";
3
3
  import '@lunora/client';
4
4
  import 'react';
5
5
  import '@lingui/core';
6
6
  interface MountStudioOptions extends StudioAppProps {
7
7
  /**
8
- * The container to mount into. Accepts an element or a selector; defaults to
9
- * `#root`. Throws if the selector matches nothing so misconfiguration fails
10
- * loudly rather than silently rendering nowhere.
11
- */
8
+ * The container to mount into. Accepts an element or a selector; defaults to
9
+ * `#root`. Throws if the selector matches nothing so misconfiguration fails
10
+ * loudly rather than silently rendering nowhere.
11
+ */
12
12
  readonly container?: Element | string;
13
13
  }
14
14
  /**
15
- * Mount the batteries-included {@link StudioApp} into the DOM and return the
16
- * React root (call `.unmount()` to tear it down). This is the entry the
17
- * standalone app's `main.tsx` and the `@lunora/vite` dev route both call — it
18
- * keeps the host HTML to a single `<div id="root">` plus one script.
19
- */
15
+ * Mount the batteries-included {@link StudioApp} into the DOM and return the
16
+ * React root (call `.unmount()` to tear it down). This is the entry the
17
+ * standalone app's `main.tsx` and the `@lunora/vite` dev route both call — it
18
+ * keeps the host HTML to a single `<div id="root">` plus one script.
19
+ */
20
20
  declare const mountStudio: (options?: MountStudioOptions) => Root;
21
21
  export { MountStudioOptions, mountStudio };
package/dist/mount.js CHANGED
@@ -1,26 +1 @@
1
- import { createRoot } from 'react-dom/client';
2
- import { StudioApp } from './packem_shared/StudioApp-ColQCvC_.js';
3
- import { jsxDEV } from 'react/jsx-dev-runtime';
4
-
5
- const mountStudio = (options = {}) => {
6
- const {
7
- container = "#root",
8
- ...appProps
9
- } = options;
10
- const element = typeof container === "string" ? document.querySelector(container) : container;
11
- if (element === null) {
12
- throw new Error(`mountStudio: container ${typeof container === "string" ? container : "element"} not found`);
13
- }
14
- const root = createRoot(element);
15
- root.render(/* @__PURE__ */ jsxDEV(StudioApp, {
16
- adminToken: appProps.adminToken,
17
- basePath: appProps.basePath,
18
- baseUrl: appProps.baseUrl,
19
- locale: appProps.locale,
20
- rulesInstalled: appProps.rulesInstalled,
21
- studio: appProps.studio
22
- }, void 0, false));
23
- return root;
24
- };
25
-
26
- export { mountStudio };
1
+ import{LunoraError as a}from"@lunora/errors";import{createRoot as s}from"react-dom/client";import{StudioApp as i}from"./packem_shared/StudioApp-bXhJeLlZ.js";import{jsx as l}from"react/jsx-runtime";const p=(n={})=>{const{container:t="#root",...o}=n,e=typeof t=="string"?document.querySelector(t):t;if(e===null)throw new a("INTERNAL",`mountStudio: container ${typeof t=="string"?t:"element"} not found`);const r=s(e);return r.render(l(i,{adminToken:o.adminToken,basePath:o.basePath,baseUrl:o.baseUrl,locale:o.locale,rulesInstalled:o.rulesInstalled,studio:o.studio})),r};export{p as mountStudio};
@@ -0,0 +1 @@
1
+ import{c as q}from"react/compiler-runtime";import{useState as j}from"react";import{u as k}from"../packem_shared/button-BkCrNcAs.js";import{useT as F}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import M from"../packem_shared/ApiDocsPanel-DfUQ1ZAF.js";import V from"../packem_shared/ApiReferencePanel-9q8BbJl-.js";import W from"../packem_shared/OpenRpcReferencePanel-qOZcWXMs.js";import{jsx as o,jsxs as T}from"react/jsx-runtime";const B=["reference","snippets"],E=["openapi","openrpc"],Z=I=>{const e=q(51),{functions:$,initialShardKey:A,openApiSpec:P,openRpcSpec:_}=I,t=F(),[r,O]=j("reference"),[l,z]=j("openapi");let i;e[0]!==t?(i=t("Reference"),e[0]=t,e[1]=i):i=e[1];let n;e[2]!==t?(n=t("Snippets"),e[2]=t,e[3]=n):n=e[3];let g;e[4]!==i||e[5]!==n?(g={reference:i,snippets:n},e[4]=i,e[5]=n,e[6]=g):g=e[6];const C=g;let p;e[7]!==t?(p=t("OpenAPI"),e[7]=t,e[8]=p):p=e[8];let s;e[9]!==t?(s=t("OpenRPC"),e[9]=t,e[10]=s):s=e[10];let w;e[11]!==p||e[12]!==s?(w={openapi:p,openrpc:s},e[11]=p,e[12]=s,e[13]=w):w=e[13];const R=w;let y;e[14]===Symbol.for("react.memo_cache_sentinel")?(y=a=>{O(a.currentTarget.dataset.view)},e[14]=y):y=e[14];const D=y;let S;e[15]===Symbol.for("react.memo_cache_sentinel")?(S=a=>{z(a.currentTarget.dataset.format)},e[15]=S):S=e[15];const K=S;let c;e[16]!==t?(c=t("API view"),e[16]=t,e[17]=c):c=e[17];let m;e[18]!==r||e[19]!==C?(m=B.map(a=>o(k,{"aria-selected":r===a,"data-testid":`api-view-${a}`,"data-view":a,onClick:D,role:"tab",size:"sm",type:"button",variant:r===a?"default":"outline",children:C[a]},a)),e[18]=r,e[19]=C,e[20]=m):m=e[20];let f;e[21]!==m||e[22]!==c?(f=o("div",{"aria-label":c,className:"flex gap-1.5","data-testid":"api-view-toggle",role:"tablist",children:m}),e[21]=m,e[22]=c,e[23]=f):f=e[23];let d;e[24]!==l||e[25]!==R||e[26]!==t||e[27]!==r?(d=r==="reference"&&o("div",{"aria-label":t("API spec format"),className:"flex gap-1.5","data-testid":"api-format-toggle",role:"tablist",children:E.map(a=>o(k,{"aria-selected":l===a,"data-format":a,"data-testid":`api-format-${a}`,onClick:K,role:"tab",size:"sm",type:"button",variant:l===a?"default":"outline",children:R[a]},a))}),e[24]=l,e[25]=R,e[26]=t,e[27]=r,e[28]=d):d=e[28];let h;e[29]!==f||e[30]!==d?(h=T("div",{className:"flex shrink-0 flex-wrap items-center gap-3 border-b border-border px-6 py-3",children:[f,d]}),e[29]=f,e[30]=d,e[31]=h):h=e[31];let u;e[32]!==$||e[33]!==A||e[34]!==r?(u=r==="snippets"&&o("div",{className:"min-h-0 flex-1 overflow-y-auto p-6",children:o(M,{functions:$,initialShardKey:A})}),e[32]=$,e[33]=A,e[34]=r,e[35]=u):u=e[35];let b;e[36]!==l||e[37]!==P||e[38]!==r?(b=r==="reference"&&l==="openapi"&&o(V,{spec:P}),e[36]=l,e[37]=P,e[38]=r,e[39]=b):b=e[39];let v;e[40]!==l||e[41]!==_||e[42]!==r?(v=r==="reference"&&l==="openrpc"&&o(W,{spec:_}),e[40]=l,e[41]=_,e[42]=r,e[43]=v):v=e[43];let x;e[44]!==u||e[45]!==b||e[46]!==v?(x=T("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[u,b,v]}),e[44]=u,e[45]=b,e[46]=v,e[47]=x):x=e[47];let N;return e[48]!==h||e[49]!==x?(N=T("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"lunora-api-tab",children:[h,x]}),e[48]=h,e[49]=x,e[50]=N):N=e[50],N};export{Z as default};
@@ -0,0 +1 @@
1
+ import{useVirtualizer as j,observeElementRect as F}from"@tanstack/react-virtual";import{useState as w,useMemo as S,useRef as H}from"react";import{E as K}from"../packem_shared/error-alert-t6cpEi0z.js";import{L as O}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as P}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as _}from"../packem_shared/badge-BbuuAio7.js";import{c as q,u as B}from"../packem_shared/card-CIDGUN6K.js";import{E as D}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as J}from"../packem_shared/input-JHu63lTv.js";import{n as U,d as W,m as L,p as l,f as Z,u as d}from"../packem_shared/table-DdJBrClo.js";import{N as G}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import Q from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as X}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Y}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{i as ee}from"../packem_shared/internal-BSIsQVC6.js";import{jsxs as n,jsx as e}from"react/jsx-runtime";const $=80,te=i=>{if(i===void 0)return"";const t=JSON.stringify(i);return t.length>$?`${t.slice(0,$)}…`:t},re=41,y=480,b=5,ae=(i,t)=>F(i,o=>{t(o.height>0?o:{height:y,width:o.width})}),we=({initialShardKey:i})=>{const t=X(),[o,C]=w(i??""),[m,E]=w(""),I=Q(o.trim(),400),{data:u,error:p,errorSource:A,isLoading:M,liveError:R}=G(Y.getAuditLog,{},{live:!0,shardKey:I}),c=S(()=>u?.entries??[],[u]),s=S(()=>{const a=m.trim().toLowerCase();return a===""?c:c.filter(r=>r.op.toLowerCase().includes(a)||(r.table??"").toLowerCase().includes(a)||(r.id??"").toLowerCase().includes(a))},[c,m]),f=H(null),g=j({count:s.length,estimateSize:()=>re,getScrollElement:()=>f.current,initialRect:{height:y,width:800},observeElementRect:ae,overscan:8}),h=g.getVirtualItems(),T=g.getTotalSize(),x=h[0]?.start??0,v=T-(h.at(-1)?.end??0),k={height:x},z={height:v},V=a=>{E(a.target.value)};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-audit",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[e(P,{onChange:C,testId:"au-shard-input",value:o}),e(O,{message:R,prefix:"au"}),e(J,{"aria-label":t("Filter audit log"),className:"h-8 w-48","data-testid":"au-search",onChange:V,placeholder:t("filter op, table, id"),value:m})]}),p!==null&&e(K,{error:A,testId:"au-error"}),p===null&&!M&&s.length===0&&e(D,{description:t("State-changing admin operations are recorded here."),icon:e("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:e("path",{d:"M8 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2h-2M9 3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1V3Zm-1 9h8m-8 4h5"})}),testId:"au-empty",title:t("No audit entries.")}),s.length>0&&e(q,{className:"overflow-hidden py-0",children:e(B,{className:"max-h-[30rem] overflow-auto px-0",ref:f,children:n(U,{"data-testid":"au-table",children:[e(W,{children:n(L,{children:[e(l,{children:t("time")}),e(l,{children:t("op")}),e(l,{children:t("table")}),e(l,{children:t("id")}),e(l,{children:t("detail")})]})}),n(Z,{children:[x>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:b,style:k})}),h.map(a=>{const r=s[a.index],N=te(r.detail);return n(L,{"data-testid":"au-row",children:[e(d,{className:"text-muted-foreground tabular-nums",children:ee(r.ts,"—")}),e(d,{children:e(_,{variant:"secondary",children:r.op})}),e(d,{className:"font-medium",children:r.table??e("span",{className:"text-muted-foreground",children:"—"})}),e(d,{className:"max-w-[20ch] truncate font-mono text-xs",children:r.id??e("span",{className:"text-muted-foreground",children:"—"})}),e(d,{className:"max-w-[32ch] truncate font-mono text-xs text-muted-foreground",title:N||void 0,children:N||e("span",{className:"text-muted-foreground",children:"—"})})]},r.seq)}),v>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:b,style:z})})]})]})})})]})};export{we as AuditPanel};
@@ -0,0 +1 @@
1
+ import{c as ie}from"react/compiler-runtime";import{useLunora as ce}from"@lunora/react";import{useQuery as me}from"@tanstack/react-query";import{g as le}from"../packem_shared/badge-BbuuAio7.js";import{c as se}from"../packem_shared/card-CIDGUN6K.js";import{E as pe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as re}from"../packem_shared/skeleton-C1wQ9M5t.js";import{useT as he}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{i as ue}from"../packem_shared/internal-BSIsQVC6.js";import{c as te}from"../packem_shared/utils-bhneXptQ.js";import{jsxs as o,jsx as l}from"react/jsx-runtime";const fe="/_lunora/health",ge="/_lunora/health/ready",xe=(n,e)=>(n.endsWith("/")?n.slice(0,-1):n)+e,Ne=()=>{const n=ce();return async e=>{const w=e==="ready"?ge:fe,t=n.getAuthToken(),$=xe(n.url,w);try{const r=await fetch($,{headers:t===null?{}:{authorization:`Bearer ${t}`}});let d=null;try{d=await r.json()}catch{d=null}return{body:d,ok:r.ok,status:r.status}}catch(r){return{body:null,error:r instanceof Error?r.message:String(r),ok:!1,status:0}}}},de={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ve={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},ye=n=>n==="unhealthy"?"crit":n==="degraded"?"warn":"ok",ne=n=>{const e=ie(13),{label:w,level:t,testId:$,value:r}=n,d=de[t];let c;e[0]!==d?(c=te("size-1.5 shrink-0 rounded-full",d),e[0]=d,e[1]=c):c=e[1];let m;e[2]!==c?(m=l("span",{"aria-hidden":"true",className:c}),e[2]=c,e[3]=m):m=e[3];let x;e[4]!==w||e[5]!==m?(x=o("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[m,w]}),e[4]=w,e[5]=m,e[6]=x):x=e[6];let N;e[7]!==$||e[8]!==r?(N=l("span",{className:"text-lg font-semibold text-foreground","data-testid":$,children:r}),e[7]=$,e[8]=r,e[9]=N):N=e[9];let u;return e[10]!==x||e[11]!==N?(u=l(se,{className:"gap-0 py-0",children:o("div",{className:"flex flex-col gap-2.5 p-4",children:[x,N]})}),e[10]=x,e[11]=N,e[12]=u):u=e[12],u},Ie=n=>{const e=ie(115),{probe:w}=n,t=he(),$=Ne(),r=w??$;let d;e[0]!==r?(d=async()=>{const[a,i]=await Promise.all([r("live"),r("ready")]);return{live:a,ready:i}},e[0]=r,e[1]=d):d=e[1];let c;e[2]===Symbol.for("react.memo_cache_sentinel")?(c=["deployment-health"],e[2]=c):c=e[2];let m;e[3]!==d?(m={queryFn:d,queryKey:c},e[3]=d,e[4]=m):m=e[4];const{data:x,isPending:N}=me(m),u=x?.live??null,oe=x?.ready??null;if(N){let a;return e[5]===Symbol.for("react.memo_cache_sentinel")?(a=o("div",{className:"flex flex-col gap-4","data-testid":"deployment-health-loading",children:[l(re,{className:"h-16 w-full"}),l(re,{className:"h-40 w-full"})]}),e[5]=a):a=e[5],a}const s=u?.body??null;if(s===null){const a=u?.status===403;let i;e[6]!==a||e[7]!==u?.error||e[8]!==t?(i=a?t("The health endpoint is in the admin posture. Paste a valid admin token in the connect popover, or set its auth to public."):t("Couldn't reach the health endpoint: {message}",{message:u?.error??t("no response")}),e[6]=a,e[7]=u?.error,e[8]=t,e[9]=i):i=e[9];let f;e[10]!==t?(f=t("Health endpoint unavailable"),e[10]=t,e[11]=f):f=e[11];let h;return e[12]!==i||e[13]!==f?(h=l(pe,{description:i,testId:"deployment-health-error",title:f}),e[12]=i,e[13]=f,e[14]=h):h=e[14],h}let Z;e[15]!==s.status?(Z=ye(s.status),e[15]=s.status,e[16]=Z):Z=e[16];const _=Z;let p;if(s.status==="unhealthy"){let a;e[17]!==t?(a=t("Unhealthy"),e[17]=t,e[18]=a):a=e[18],p=a}else if(s.status==="degraded"){let a;e[19]!==t?(a=t("Degraded"),e[19]=t,e[20]=a):a=e[20],p=a}else{let a;e[21]!==t?(a=t("Healthy"),e[21]=t,e[22]=a):a=e[22],p=a}const j=oe?.ok??!1,Y=j?"ok":"crit";let C,P,v,y,b,S,z,k,V,H;if(e[23]!==s.appName||e[24]!==s.appVersion||e[25]!==s.checks||e[26]!==s.timestamp||e[27]!==_||e[28]!==Y||e[29]!==j||e[30]!==p||e[31]!==t){const a=[...s.checks].toSorted(be);H="flex flex-col gap-6",P="deployment-health";let i;e[42]!==t?(i=t("Live liveness, readiness, and per-binding health from the deployment's /_lunora/health endpoint — wire an uptime monitor or a Cloudflare Health Check at it."),e[42]=t,e[43]=i):i=e[43],e[44]!==i?(v=l("p",{className:"text-sm text-muted-foreground",children:i}),e[44]=i,e[45]=v):v=e[45];const f=ve[_];let h;e[46]!==f?(h=te("flex size-10 shrink-0 items-center justify-center rounded-full",f),e[46]=f,e[47]=h):h=e[47];const ae=de[_];let T;e[48]!==ae?(T=te("size-3 rounded-full",ae),e[48]=ae,e[49]=T):T=e[49];let D;e[50]!==T?(D=l("span",{className:T}),e[50]=T,e[51]=D):D=e[51];let E;e[52]!==h||e[53]!==D?(E=l("span",{"aria-hidden":"true",className:h,children:D}),e[52]=h,e[53]=D,e[54]=E):E=e[54];let L;e[55]!==p?(L=l("span",{className:"text-sm font-semibold text-foreground","data-testid":"dh-status",children:p}),e[55]=p,e[56]=L):L=e[56];let q;e[57]!==s.appName||e[58]!==s.appVersion?(q=o("span",{className:"font-mono text-[13px] text-muted-foreground","data-testid":"dh-app",children:[s.appName," · ",s.appVersion]}),e[57]=s.appName,e[58]=s.appVersion,e[59]=q):q=e[59];let R;e[60]!==L||e[61]!==q?(R=o("div",{className:"grid leading-tight",children:[L,q]}),e[60]=L,e[61]=q,e[62]=R):R=e[62];let U;e[63]!==E||e[64]!==R?(U=o("div",{className:"flex items-center gap-3",children:[E,R]}),e[63]=E,e[64]=R,e[65]=U):U=e[65];let A;e[66]!==t?(A=t("Checked"),e[66]=t,e[67]=A):A=e[67];let B;e[68]!==A?(B=l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:A}),e[68]=A,e[69]=B):B=e[69];let F;e[70]!==s.timestamp?(F=ue(s.timestamp),e[70]=s.timestamp,e[71]=F):F=e[71];let K;e[72]!==F?(K=l("time",{className:"text-[13px] text-muted-foreground","data-testid":"dh-timestamp",children:F}),e[72]=F,e[73]=K):K=e[73];let Q;e[74]!==B||e[75]!==K?(Q=o("div",{className:"text-end",children:[B,K]}),e[74]=B,e[75]=K,e[76]=Q):Q=e[76],e[77]!==U||e[78]!==Q?(y=l(se,{className:"gap-0 py-0",children:o("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[U,Q]})}),e[77]=U,e[78]=Q,e[79]=y):y=e[79];let W;e[80]!==t?(W=t("Liveness"),e[80]=t,e[81]=W):W=e[81];let G;e[82]!==_||e[83]!==p||e[84]!==W?(G=l(ne,{label:W,level:_,testId:"dh-liveness",value:p}),e[82]=_,e[83]=p,e[84]=W,e[85]=G):G=e[85];let J;e[86]!==t?(J=t("Readiness"),e[86]=t,e[87]=J):J=e[87];let M;e[88]!==j||e[89]!==t?(M=t(j?"Ready":"Not ready"),e[88]=j,e[89]=t,e[90]=M):M=e[90];let O;e[91]!==Y||e[92]!==J||e[93]!==M?(O=l(ne,{label:J,level:Y,testId:"dh-readiness",value:M}),e[91]=Y,e[92]=J,e[93]=M,e[94]=O):O=e[94],e[95]!==G||e[96]!==O?(b=o("div",{className:"grid gap-3 sm:grid-cols-2","data-testid":"dh-probes",children:[G,O]}),e[95]=G,e[96]=O,e[97]=b):b=e[97],C=se,S="gap-0 py-0",z="dh-checks";let X;e[98]!==t?(X=t("Subsystem checks"),e[98]=t,e[99]=X):X=e[99],e[100]!==X?(k=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:X})}),e[100]=X,e[101]=k):k=e[101],V=a.length===0?l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"dh-checks-empty",children:t("No checks reported.")}):l("ul",{className:"divide-y divide-border",children:a.map(g=>o("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2.5 text-xs","data-testid":`dh-check-${g.name}`,children:[o("span",{className:"flex items-center gap-2",children:[l("span",{"aria-hidden":"true",className:te("size-1.5 shrink-0 rounded-full",g.status==="up"?"bg-success":"bg-destructive")}),l("span",{className:"font-mono text-foreground",children:g.name}),g.critical&&l(le,{variant:"outline",children:t("Critical")})]}),o("span",{className:"flex shrink-0 items-center gap-2",children:[g.message!==void 0&&l("span",{className:"text-muted-foreground",children:g.message}),l(le,{"data-testid":`dh-check-status-${g.name}`,variant:g.status==="up"?"secondary":"destructive",children:g.status==="up"?t("Up"):t("Down")})]})]},g.name))}),e[23]=s.appName,e[24]=s.appVersion,e[25]=s.checks,e[26]=s.timestamp,e[27]=_,e[28]=Y,e[29]=j,e[30]=p,e[31]=t,e[32]=C,e[33]=P,e[34]=v,e[35]=y,e[36]=b,e[37]=S,e[38]=z,e[39]=k,e[40]=V,e[41]=H}else C=e[32],P=e[33],v=e[34],y=e[35],b=e[36],S=e[37],z=e[38],k=e[39],V=e[40],H=e[41];let I;e[102]!==C||e[103]!==S||e[104]!==z||e[105]!==k||e[106]!==V?(I=o(C,{className:S,"data-testid":z,children:[k,V]}),e[102]=C,e[103]=S,e[104]=z,e[105]=k,e[106]=V,e[107]=I):I=e[107];let ee;return e[108]!==P||e[109]!==v||e[110]!==y||e[111]!==b||e[112]!==I||e[113]!==H?(ee=o("div",{className:H,"data-testid":P,children:[v,y,b,I]}),e[108]=P,e[109]=v,e[110]=y,e[111]=b,e[112]=I,e[113]=H,e[114]=ee):ee=e[114],ee};function be(n,e){return n.name.localeCompare(e.name)}export{Ie as DeploymentHealthPanel};
@@ -0,0 +1,3 @@
1
+ import{c as xe}from"react/compiler-runtime";import{LunoraError as ne}from"@lunora/errors";import{useLunora as be}from"@lunora/react";import{useState as q}from"react";import{ConfirmButton as he}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{ShardInput as ge}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as Ne}from"../packem_shared/button-BkCrNcAs.js";import{u as ie,c as ce}from"../packem_shared/card-CIDGUN6K.js";import{l as we}from"../packem_shared/textarea-Bu2-jKAs.js";import{U as ye}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as Se}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{d as de,b as oe,f as me,g as fe}from"../packem_shared/internal-BSIsQVC6.js";import{r as pe}from"../packem_shared/shard-history-DMEW5VBE.js";import{jsx as l,jsxs as h}from"react/jsx-runtime";const Ie=fe(Z.exportShard),ve=fe(Z.importShard),je=u=>u.map(e=>JSON.stringify(e)).join(`
2
+ `),$e=u=>{const e=[],ee=u.split(`
3
+ `);for(const[a,g]of ee.entries()){const t=g.trim();if(t==="")continue;const r=JSON.parse(t);if(typeof r!="object"||r===null)throw new ne("INTERNAL",`line ${(a+1).toString()}: expected a { table, doc } object`);const x=r;if(typeof x.table!="string"||typeof x.doc!="object"||x.doc===null||Array.isArray(x.doc))throw new ne("INTERNAL",`line ${(a+1).toString()}: expected a { table, doc } object`);e.push(x)}return e},Be=u=>{const e=xe(94),{initialShardKey:ee}=u,a=be(),g=ye(),t=Se(),[r,x]=q(ee??""),[o,se]=q(""),[c,B]=q(!1),[H,K]=q(null),[n,te]=q(null),[N,ae]=q(null);let Q;e[0]!==a||e[1]!==r?(Q=async()=>{B(!0),K(null),te(null);try{const i=await a.query(Ie,{},de(r));pe(r),se(je(i.rows)),ae(i.rows.length)}catch(i){K(oe(i))}B(!1)},e[0]=a,e[1]=r,e[2]=Q):Q=e[2];const z=Q;let V;e[3]!==a||e[4]!==g||e[5]!==o||e[6]!==r||e[7]!==t?(V=async()=>{B(!0),K(null),te(null),ae(null);let i;try{i=$e(o)}catch(s){K(t("Invalid NDJSON: {message}",{message:oe(s)})),B(!1);return}try{const s=await a.query(ve,{rows:i},de(r));pe(r),te(s),g(Z.readTablePage),g(Z.listTables)}catch(s){K(oe(s))}B(!1)},e[3]=a,e[4]=g,e[5]=o,e[6]=r,e[7]=t,e[8]=V):V=e[8];const G=V;let w,y,S,d,I,m,p,v,j,f,$;if(e[9]!==c||e[10]!==N||e[11]!==z||e[12]!==n||e[13]!==G||e[14]!==o||e[15]!==r||e[16]!==t){const i=n===null?0:Object.values(n.inserted).reduce(Ee,0);let s;e[28]!==z?(s=()=>{me(z())},e[28]=z,e[29]=s):s=e[29];const re=s;let X;e[30]!==G?(X=()=>{me(G())},e[30]=G,e[31]=X):X=e[31];const le=X;let Y;e[32]===Symbol.for("react.memo_cache_sentinel")?(Y=b=>{se(b.target.value)},e[32]=Y):Y=e[32];const ue=Y;$="flex flex-col gap-4",S="lunora-export-import";let C;e[33]!==t?(C=t("Export"),e[33]=t,e[34]=C):C=e[34];let T;e[35]!==C?(T=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:C})}),e[35]=C,e[36]=T):T=e[36];let L;e[37]!==r?(L=l(ge,{onChange:x,testId:"ei-shard-input",value:r}),e[37]=r,e[38]=L):L=e[38];let J;e[39]!==t?(J=t("Export"),e[39]=t,e[40]=J):J=e[40];let R;e[41]!==c||e[42]!==re||e[43]!==J?(R=l(Ne,{"data-testid":"ei-export",disabled:c,onClick:re,type:"button",children:J}),e[41]=c,e[42]=re,e[43]=J,e[44]=R):R=e[44];let _;e[45]!==L||e[46]!==R?(_=h("div",{className:"flex flex-wrap items-center gap-2",children:[L,R]}),e[45]=L,e[46]=R,e[47]=_):_=e[47];let k;e[48]!==N||e[49]!==t?(k=N!==null&&l("p",{className:"text-sm text-muted-foreground","data-testid":"ei-export-result",children:t("Exported {count} rows.",{count:N})}),e[48]=N,e[49]=t,e[50]=k):k=e[50];let D;e[51]!==_||e[52]!==k?(D=h(ie,{className:"flex flex-col gap-3 p-4",children:[_,k]}),e[51]=_,e[52]=k,e[53]=D):D=e[53],e[54]!==T||e[55]!==D?(d=h(ce,{className:"rounded-xl border border-border bg-card shadow-xs",children:[T,D]}),e[54]=T,e[55]=D,e[56]=d):d=e[56],y=ce,j="rounded-xl border border-border bg-card shadow-xs";let F;e[57]!==t?(F=t("Import"),e[57]=t,e[58]=F):F=e[58],e[59]!==F?(f=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:F})}),e[59]=F,e[60]=f):f=e[60],w=ie,I="flex flex-col gap-3 p-4",e[61]!==o?(m=l(we,{"aria-label":"NDJSON",className:"font-mono text-xs min-h-40 rounded-md","data-testid":"ei-ndjson",onChange:ue,placeholder:'{"table":"messages","doc":{…}}',value:o}),e[61]=o,e[62]=m):m=e[62];let M;e[63]!==t?(M=t("Import (writes rows)?"),e[63]=t,e[64]=M):M=e[64];let P;e[65]!==c||e[66]!==o?(P=c||o.trim()==="",e[65]=c,e[66]=o,e[67]=P):P=e[67];let U;e[68]!==t?(U=t("Import"),e[68]=t,e[69]=U):U=e[69],e[70]!==le||e[71]!==M||e[72]!==P||e[73]!==U?(p=l("div",{className:"flex flex-wrap items-center gap-2",children:l(he,{confirmLabel:M,disabled:P,onConfirm:le,testId:"ei-import",children:U})}),e[70]=le,e[71]=M,e[72]=P,e[73]=U,e[74]=p):p=e[74],v=n!==null&&h("div",{className:"flex flex-col gap-2","data-testid":"ei-import-result",children:[l("p",{className:"text-sm text-muted-foreground",children:t("Inserted {inserted}, {conflicts} conflicts, {errors} errors.",{conflicts:n.conflicts,errors:n.errors.length,inserted:i})}),n.errors.length>0&&l("ul",{className:"flex flex-col gap-1","data-testid":"ei-import-errors",children:n.errors.map(b=>l("li",{className:"text-xs text-destructive",children:t("line {line} ({table}): {message}",{line:b.line,message:b.message,table:b.table})},`${b.table}-${b.line.toString()}`))})]}),e[9]=c,e[10]=N,e[11]=z,e[12]=n,e[13]=G,e[14]=o,e[15]=r,e[16]=t,e[17]=w,e[18]=y,e[19]=S,e[20]=d,e[21]=I,e[22]=m,e[23]=p,e[24]=v,e[25]=j,e[26]=f,e[27]=$}else w=e[17],y=e[18],S=e[19],d=e[20],I=e[21],m=e[22],p=e[23],v=e[24],j=e[25],f=e[26],$=e[27];let E;e[75]!==w||e[76]!==I||e[77]!==m||e[78]!==p||e[79]!==v?(E=h(w,{className:I,children:[m,p,v]}),e[75]=w,e[76]=I,e[77]=m,e[78]=p,e[79]=v,e[80]=E):E=e[80];let O;e[81]!==y||e[82]!==E||e[83]!==j||e[84]!==f?(O=h(y,{className:j,children:[f,E]}),e[81]=y,e[82]=E,e[83]=j,e[84]=f,e[85]=O):O=e[85];let A;e[86]!==H?(A=H!==null&&l("p",{className:"text-sm text-destructive","data-testid":"ei-error",role:"alert",children:H}),e[86]=H,e[87]=A):A=e[87];let W;return e[88]!==S||e[89]!==d||e[90]!==O||e[91]!==A||e[92]!==$?(W=h("div",{className:$,"data-testid":S,children:[d,O,A]}),e[88]=S,e[89]=d,e[90]=O,e[91]=A,e[92]=$,e[93]=W):W=e[93],W};function Ee(u,e){return u+e}export{Be as ExportImportPanel};
@@ -0,0 +1,4 @@
1
+ import{c as M}from"react/compiler-runtime";import{useState as E,useEffect as le,useRef as he,useMemo as fe,useCallback as nt}from"react";import{ShardInput as ot}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as se}from"../packem_shared/button-BkCrNcAs.js";import{E as Se}from"../packem_shared/empty-state-Cg7t_8qu.js";import{useT as lt}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{z as st}from"../packem_shared/grid-features-jnrD0SpX.js";import{c as at,u as it}from"../packem_shared/card-CIDGUN6K.js";import{f as Ne}from"../packem_shared/checkbox-StT4Gob6.js";import{p as oe,d as ct,m as me,f as dt,n as ut,u as te}from"../packem_shared/table-DdJBrClo.js";import{k as Ce,f as q,b as ee,d as xe,g as $e,c as ft}from"../packem_shared/internal-BSIsQVC6.js";import{ConfirmButton as ht}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{g as ce}from"../packem_shared/badge-BbuuAio7.js";import{jsx as s,jsxs as T,Fragment as je}from"react/jsx-runtime";import{u as mt}from"../packem_shared/input-JHu63lTv.js";import{d as pt}from"../packem_shared/cf-links-gbDy51nR.js";import{useLunora as gt}from"@lunora/react";import{useAutoRefresh as bt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";const Ke=(d,e,t)=>{const{onCopy:r,onDelete:l,onDownload:n,onToggleSelect:c}=t,i=()=>{r(d.key)},o=()=>{n(d.key)},u=()=>{l(d.key)},h=()=>{c(d.key)};return{copy:i,download:o,name:d.key.slice(e.length),remove:u,toggle:h}},De=d=>{const e=M(31),{busy:t,buttonClassName:r,copied:l,objectKey:n,onCopy:c,onDelete:i,onDownload:o,t:u}=d,h=`storage-copy-${n}`;let f;e[0]!==l||e[1]!==u?(f=u(l?"Copied":"Copy URL"),e[0]=l,e[1]=u,e[2]=f):f=e[2];let m;e[3]!==t||e[4]!==r||e[5]!==c||e[6]!==h||e[7]!==f?(m=s(se,{className:r,"data-testid":h,disabled:t,onClick:c,size:"sm",type:"button",variant:"ghost",children:f}),e[3]=t,e[4]=r,e[5]=c,e[6]=h,e[7]=f,e[8]=m):m=e[8];const k=`storage-download-${n}`;let a;e[9]!==u?(a=u("Download"),e[9]=u,e[10]=a):a=e[10];let v;e[11]!==t||e[12]!==r||e[13]!==o||e[14]!==k||e[15]!==a?(v=s(se,{className:r,"data-testid":k,disabled:t,onClick:o,size:"sm",type:"button",variant:"ghost",children:a}),e[11]=t,e[12]=r,e[13]=o,e[14]=k,e[15]=a,e[16]=v):v=e[16];let S;e[17]!==u?(S=u("Delete object?"),e[17]=u,e[18]=S):S=e[18];const y=`storage-delete-${n}`;let g;e[19]!==u?(g=u("Delete"),e[19]=u,e[20]=g):g=e[20];let x;e[21]!==t||e[22]!==i||e[23]!==S||e[24]!==y||e[25]!==g?(x=s(ht,{confirmLabel:S,disabled:t,onConfirm:i,testId:y,children:g}),e[21]=t,e[22]=i,e[23]=S,e[24]=y,e[25]=g,e[26]=x):x=e[26];let b;return e[27]!==x||e[28]!==m||e[29]!==v?(b=T(je,{children:[m,v,x]}),e[27]=x,e[28]=m,e[29]=v,e[30]=b):b=e[30],b},Te=d=>{const e=M(14),{objectKey:t,references:r,t:l}=d;if(r===void 0)return null;if(r.length===0){const h=`storage-orphan-${t}`;let f;e[0]!==l?(f=l("Orphan"),e[0]=l,e[1]=f):f=e[1];let m;return e[2]!==h||e[3]!==f?(m=s(ce,{"data-testid":h,variant:"warning",children:f}),e[2]=h,e[3]=f,e[4]=m):m=e[4],m}let n;e[5]!==r?(n=r.map(yt).join(`
2
+ `),e[5]=r,e[6]=n):n=e[6];const c=n,i=`storage-refs-${t}`;let o;e[7]!==r.length||e[8]!==l?(o=r.length===1?l("1 record"):l("{count} records",{count:r.length}),e[7]=r.length,e[8]=l,e[9]=o):o=e[9];let u;return e[10]!==c||e[11]!==i||e[12]!==o?(u=s(ce,{"data-testid":i,title:c,variant:"secondary",children:o}),e[10]=c,e[11]=i,e[12]=o,e[13]=u):u=e[13],u},Fe=d=>{const e=M(7),{objectKey:t,onToggle:r,selected:l,t:n}=d;let c;e[0]!==n?(c=n("Select row"),e[0]=n,e[1]=c):c=e[1];const i=`storage-select-${t}`;let o;return e[2]!==r||e[3]!==l||e[4]!==c||e[5]!==i?(o=s(Ne,{"aria-label":c,checked:l,"data-testid":i,onCheckedChange:r}),e[2]=r,e[3]=l,e[4]=c,e[5]=i,e[6]=o):o=e[6],o};function yt(d){return`${d.table}·${d.id}`}const xt=d=>{const e=M(10),{colSpan:t,name:r,onEnter:l}=d;let n;e[0]!==r||e[1]!==l?(n=()=>{l(r)},e[0]=r,e[1]=l,e[2]=n):n=e[2];const c=n;let i;e[3]===Symbol.for("react.memo_cache_sentinel")?(i=s("svg",{"aria-hidden":"true",className:"size-4 text-muted-foreground",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:s("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"})}),e[3]=i):i=e[3];let o;e[4]!==c||e[5]!==r?(o=T("button",{className:"inline-flex items-center gap-2 font-mono text-xs outline-none hover:text-foreground focus-visible:text-foreground","data-testid":"fb-folder",onClick:c,type:"button",children:[i,r]}),e[4]=c,e[5]=r,e[6]=o):o=e[6];let u;return e[7]!==t||e[8]!==o?(u=s(me,{children:s(te,{colSpan:t,children:o})}),e[7]=t,e[8]=o,e[9]=u):u=e[9],u},vt=d=>{const e=M(37),{busy:t,copiedKey:r,handlers:l,object:n,prefix:c,references:i,selected:o,showReferences:u,t:h}=d;let f;e[0]!==l||e[1]!==n||e[2]!==c?(f=Ke(n,c,l),e[0]=l,e[1]=n,e[2]=c,e[3]=f):f=e[3];const{copy:m,download:k,name:a,remove:v,toggle:S}=f;let y;e[4]!==n.key||e[5]!==o||e[6]!==h||e[7]!==S?(y=s(te,{className:"w-8",children:s(Fe,{objectKey:n.key,onToggle:S,selected:o,t:h})}),e[4]=n.key,e[5]=o,e[6]=h,e[7]=S,e[8]=y):y=e[8];let g;e[9]!==a?(g=s(te,{className:"font-mono text-xs",children:a}),e[9]=a,e[10]=g):g=e[10];let x;e[11]!==n.size?(x=Ce(n.size),e[11]=n.size,e[12]=x):x=e[12];let b;e[13]!==x?(b=s(te,{className:"tabular-nums text-muted-foreground",children:x}),e[13]=x,e[14]=b):b=e[14];const C=n.httpMetadata?.contentType??"";let w;e[15]!==C?(w=s(te,{children:C}),e[15]=C,e[16]=w):w=e[16];let N;e[17]!==n.key||e[18]!==i||e[19]!==u||e[20]!==h?(N=u&&s(te,{children:s(Te,{objectKey:n.key,references:i,t:h})}),e[17]=n.key,e[18]=i,e[19]=u,e[20]=h,e[21]=N):N=e[21];const z=r===n.key;let $;e[22]!==t||e[23]!==m||e[24]!==k||e[25]!==n.key||e[26]!==v||e[27]!==h||e[28]!==z?($=s(te,{className:"text-right",children:s("span",{className:"inline-flex items-center gap-1",children:s(De,{busy:t,copied:z,objectKey:n.key,onCopy:m,onDelete:v,onDownload:k,t:h})})}),e[22]=t,e[23]=m,e[24]=k,e[25]=n.key,e[26]=v,e[27]=h,e[28]=z,e[29]=$):$=e[29];let D;return e[30]!==$||e[31]!==y||e[32]!==g||e[33]!==b||e[34]!==w||e[35]!==N?(D=T(me,{"data-testid":"fb-row",children:[y,g,b,w,N,$]}),e[30]=$,e[31]=y,e[32]=g,e[33]=b,e[34]=w,e[35]=N,e[36]=D):D=e[36],D},kt=d=>{const e=M(65),{allSelected:t,busy:r,copiedKey:l,files:n,folders:c,handlers:i,onEnterFolder:o,prefix:u,references:h,selected:f,showReferences:m,someSelected:k,t:a,toggleSelectAll:v}=d;let S;e[0]!==a?(S=a("Select all rows"),e[0]=a,e[1]=S):S=e[1];let y;e[2]!==t||e[3]!==k||e[4]!==S||e[5]!==v?(y=s(oe,{className:"w-8",children:s(Ne,{"aria-label":S,checked:t,"data-testid":"storage-select-all",indeterminate:k,onCheckedChange:v})}),e[2]=t,e[3]=k,e[4]=S,e[5]=v,e[6]=y):y=e[6];let g;e[7]!==a?(g=a("key"),e[7]=a,e[8]=g):g=e[8];let x;e[9]!==g?(x=s(oe,{children:g}),e[9]=g,e[10]=x):x=e[10];let b;e[11]!==a?(b=a("size"),e[11]=a,e[12]=b):b=e[12];let C;e[13]!==b?(C=s(oe,{children:b}),e[13]=b,e[14]=C):C=e[14];let w;e[15]!==a?(w=a("content-type"),e[15]=a,e[16]=w):w=e[16];let N;e[17]!==w?(N=s(oe,{children:w}),e[17]=w,e[18]=N):N=e[18];let z;e[19]!==m||e[20]!==a?(z=m&&s(oe,{children:a("used by")}),e[19]=m,e[20]=a,e[21]=z):z=e[21];let $;e[22]!==a?($=a("Actions"),e[22]=a,e[23]=$):$=e[23];let D;e[24]!==$?(D=s(oe,{"aria-label":$}),e[24]=$,e[25]=D):D=e[25];let K;e[26]!==D||e[27]!==y||e[28]!==x||e[29]!==C||e[30]!==N||e[31]!==z?(K=s(ct,{children:T(me,{children:[y,x,C,N,z,D]})}),e[26]=D,e[27]=y,e[28]=x,e[29]=C,e[30]=N,e[31]=z,e[32]=K):K=e[32];let F;if(e[33]!==c||e[34]!==o||e[35]!==m){let R;e[37]!==o||e[38]!==m?(R=O=>s(xt,{colSpan:m?6:5,name:O,onEnter:o},O),e[37]=o,e[38]=m,e[39]=R):R=e[39],F=c.map(R),e[33]=c,e[34]=o,e[35]=m,e[36]=F}else F=e[36];let U;if(e[40]!==r||e[41]!==l||e[42]!==n||e[43]!==i||e[44]!==u||e[45]!==h||e[46]!==f||e[47]!==m||e[48]!==a){let R;e[50]!==r||e[51]!==l||e[52]!==i||e[53]!==u||e[54]!==h||e[55]!==f||e[56]!==m||e[57]!==a?(R=O=>s(vt,{busy:r,copiedKey:l,handlers:i,object:O,prefix:u,references:h[O.key],selected:f.has(O.key),showReferences:m,t:a},O.key),e[50]=r,e[51]=l,e[52]=i,e[53]=u,e[54]=h,e[55]=f,e[56]=m,e[57]=a,e[58]=R):R=e[58],U=n.map(R),e[40]=r,e[41]=l,e[42]=n,e[43]=i,e[44]=u,e[45]=h,e[46]=f,e[47]=m,e[48]=a,e[49]=U}else U=e[49];let L;e[59]!==F||e[60]!==U?(L=T(dt,{children:[F,U]}),e[59]=F,e[60]=U,e[61]=L):L=e[61];let B;return e[62]!==K||e[63]!==L?(B=s(at,{className:"overflow-hidden py-0",children:s(it,{className:"px-0",children:T(ut,{"data-testid":"fb-table",children:[K,L]})})}),e[62]=K,e[63]=L,e[64]=B):B=e[64],B},wt=[{label:"15m",seconds:900},{label:"1h",seconds:3600},{label:"24h",seconds:86400},{label:"7d",seconds:604800}],St=3600,ve=(d,e)=>{if(e==="size")return d.size;if(e==="type")return d.httpMetadata?.contentType??"";if(e==="date"){if(d.uploaded===void 0)return 0;const t=new Date(d.uploaded).getTime();return Number.isNaN(t)?0:t}return e.startsWith("tag:")?d.customMetadata?.[e.slice(4)]??"":d.key},Nt=(d,e,t)=>{const r=t==="desc"?-1:1;return d.toSorted((l,n)=>{const c=ve(l,e),i=ve(n,e);return(typeof c=="number"&&typeof i=="number"?c-i:String(c).localeCompare(String(i)))*r})},Ct=(d,e)=>{const t=new Set,r=[];for(const l of d){const n=l.key.slice(e.length),c=n.indexOf("/");c===-1?r.push(l):t.add(n.slice(0,c+1))}return{files:r,folders:[...t].toSorted((l,n)=>l.localeCompare(n))}},$t=d=>{const e=M(59),{bucket:t,buckets:r,busy:l,draftPrefix:n,expiry:c,fileInputRef:i,onBucketChange:o,onExpiryChange:u,onFileChange:h,onList:f,onPrefixChange:m,onUploadClick:k,t:a}=d;let v;e[0]!==m?(v=P=>{m(P.target.value)},e[0]=m,e[1]=v):v=e[1];const S=v;let y;e[2]!==o?(y=P=>{o(P.target.value)},e[2]=o,e[3]=y):y=e[3];const g=y;let x;e[4]!==u?(x=P=>{u(Number.parseInt(P.target.value,10))},e[4]=u,e[5]=x):x=e[5];const b=x;let C;e[6]!==t||e[7]!==r||e[8]!==g||e[9]!==a?(C=r.length>0&&s("select",{"aria-label":a("Bucket"),className:"h-8 rounded-md border border-border bg-background px-1 outline-none focus-visible:border-ring","data-testid":"fb-bucket",onChange:g,value:t,children:r.map(zt)}),e[6]=t,e[7]=r,e[8]=g,e[9]=a,e[10]=C):C=e[10];let w;e[11]!==a?(w=a("Key prefix"),e[11]=a,e[12]=w):w=e[12];let N;e[13]!==a?(N=a("key prefix (optional)"),e[13]=a,e[14]=N):N=e[14];let z;e[15]!==n||e[16]!==S||e[17]!==w||e[18]!==N?(z=s(mt,{"aria-label":w,className:"h-8 w-64 max-w-full","data-testid":"fb-prefix-input",onChange:S,placeholder:N,value:n}),e[15]=n,e[16]=S,e[17]=w,e[18]=N,e[19]=z):z=e[19];let $;e[20]!==a?($=a("List"),e[20]=a,e[21]=$):$=e[21];let D;e[22]!==l||e[23]!==f||e[24]!==$?(D=s(se,{"data-testid":"fb-list",disabled:l,onClick:f,size:"sm",type:"button",children:$}),e[22]=l,e[23]=f,e[24]=$,e[25]=D):D=e[25];let K;e[26]!==l||e[27]!==a?(K=a(l?"Uploading…":"Upload"),e[26]=l,e[27]=a,e[28]=K):K=e[28];let F;e[29]!==l||e[30]!==k||e[31]!==K?(F=s(se,{"data-testid":"storage-upload",disabled:l,onClick:k,size:"sm",type:"button",variant:"outline",children:K}),e[29]=l,e[30]=k,e[31]=K,e[32]=F):F=e[32];let U;e[33]!==i||e[34]!==h?(U=s("input",{className:"hidden","data-testid":"storage-file-input",onChange:h,ref:i,type:"file"}),e[33]=i,e[34]=h,e[35]=U):U=e[35];let L;e[36]!==a?(L=a("Link expiry"),e[36]=a,e[37]=L):L=e[37];let B;e[38]!==a?(B=wt.map(P=>s("option",{value:P.seconds,children:a(P.label)},P.seconds)),e[38]=a,e[39]=B):B=e[39];let R;e[40]!==c||e[41]!==b||e[42]!==B?(R=s("select",{className:"h-8 rounded-md border border-border bg-background px-1 tabular-nums outline-none focus-visible:border-ring","data-testid":"storage-expiry",id:"storage-expiry",onChange:b,value:c,children:B}),e[40]=c,e[41]=b,e[42]=B,e[43]=R):R=e[43];let O;e[44]!==L||e[45]!==R?(O=T("label",{className:"ml-auto flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"storage-expiry",children:[L,R]}),e[44]=L,e[45]=R,e[46]=O):O=e[46];let I;e[47]!==a?(I=a("Open in Cloudflare"),e[47]=a,e[48]=I):I=e[48];let A;e[49]!==I?(A=s("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"fb-cf-link",href:pt,rel:"noreferrer",target:"_blank",children:I}),e[49]=I,e[50]=A):A=e[50];let W;return e[51]!==F||e[52]!==U||e[53]!==O||e[54]!==A||e[55]!==C||e[56]!==z||e[57]!==D?(W=T("div",{className:"flex flex-wrap items-center gap-2",children:[C,z,D,F,U,O,A]}),e[51]=F,e[52]=U,e[53]=O,e[54]=A,e[55]=C,e[56]=z,e[57]=D,e[58]=W):W=e[58],W},jt=d=>{const e=M(66),{onSortKeyChange:t,onThumbSizeChange:r,showGrid:l,showList:n,sortDirection:c,sortKey:i,t:o,tagKeys:u,thumbSize:h,toggleSortDirection:f,view:m}=d;let k;e[0]!==t?(k=Z=>{t(Z.target.value)},e[0]=t,e[1]=k):k=e[1];const a=k;let v;e[2]!==r?(v=Z=>{r(Number.parseInt(Z.target.value,10))},e[2]=r,e[3]=v):v=e[3];const S=v,y=m==="list";let g;e[4]!==o?(g=o("List"),e[4]=o,e[5]=g):g=e[5];let x;e[6]!==n||e[7]!==y||e[8]!==g?(x=s("button",{"aria-pressed":y,className:"px-2 py-1 outline-none transition-colors hover:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground","data-testid":"fb-view-list",onClick:n,type:"button",children:g}),e[6]=n,e[7]=y,e[8]=g,e[9]=x):x=e[9];const b=m==="grid";let C;e[10]!==o?(C=o("Grid"),e[10]=o,e[11]=C):C=e[11];let w;e[12]!==l||e[13]!==b||e[14]!==C?(w=s("button",{"aria-pressed":b,className:"border-s border-border px-2 py-1 outline-none transition-colors hover:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground","data-testid":"fb-view-grid",onClick:l,type:"button",children:C}),e[12]=l,e[13]=b,e[14]=C,e[15]=w):w=e[15];let N;e[16]!==x||e[17]!==w?(N=T("div",{className:"inline-flex overflow-hidden rounded-md border border-border",children:[x,w]}),e[16]=x,e[17]=w,e[18]=N):N=e[18];let z;e[19]!==o?(z=o("Sort"),e[19]=o,e[20]=z):z=e[20];let $;e[21]!==o?($=o("Name"),e[21]=o,e[22]=$):$=e[22];let D;e[23]!==$?(D=s("option",{value:"name",children:$}),e[23]=$,e[24]=D):D=e[24];let K;e[25]!==o?(K=o("size"),e[25]=o,e[26]=K):K=e[26];let F;e[27]!==K?(F=s("option",{value:"size",children:K}),e[27]=K,e[28]=F):F=e[28];let U;e[29]!==o?(U=o("Type"),e[29]=o,e[30]=U):U=e[30];let L;e[31]!==U?(L=s("option",{value:"type",children:U}),e[31]=U,e[32]=L):L=e[32];let B;e[33]!==o?(B=o("Modified"),e[33]=o,e[34]=B):B=e[34];let R;e[35]!==B?(R=s("option",{value:"date",children:B}),e[35]=B,e[36]=R):R=e[36];let O;e[37]!==u?(O=u.map(Kt),e[37]=u,e[38]=O):O=e[38];let I;e[39]!==a||e[40]!==i||e[41]!==D||e[42]!==F||e[43]!==L||e[44]!==R||e[45]!==O?(I=T("select",{className:"h-8 rounded-md border border-border bg-background px-1 outline-none focus-visible:border-ring","data-testid":"fb-sort",id:"fb-sort",onChange:a,value:i,children:[D,F,L,R,O]}),e[39]=a,e[40]=i,e[41]=D,e[42]=F,e[43]=L,e[44]=R,e[45]=O,e[46]=I):I=e[46];let A;e[47]!==z||e[48]!==I?(A=T("label",{className:"flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-sort",children:[z,I]}),e[47]=z,e[48]=I,e[49]=A):A=e[49];let W;e[50]!==o?(W=o("Toggle sort direction"),e[50]=o,e[51]=W):W=e[51];const P=c==="asc"?"↑":"↓";let G;e[52]!==W||e[53]!==P||e[54]!==f?(G=s("button",{"aria-label":W,className:"flex size-8 items-center justify-center rounded-md border border-border tabular-nums outline-none transition-colors hover:bg-accent focus-visible:bg-accent","data-testid":"fb-sort-dir",onClick:f,type:"button",children:P}),e[52]=W,e[53]=P,e[54]=f,e[55]=G):G=e[55];let Y;e[56]!==S||e[57]!==o||e[58]!==h||e[59]!==m?(Y=m==="grid"&&T("label",{className:"ml-auto flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-thumb-size",children:[o("Thumbnail size"),s("input",{className:"accent-primary","data-testid":"fb-thumb-size",id:"fb-thumb-size",max:240,min:80,onChange:S,step:8,type:"range",value:h})]}),e[56]=S,e[57]=o,e[58]=h,e[59]=m,e[60]=Y):Y=e[60];let re;return e[61]!==A||e[62]!==G||e[63]!==Y||e[64]!==N?(re=T("div",{className:"flex flex-wrap items-center gap-2 text-xs","data-testid":"fb-controls",children:[N,A,G,Y]}),e[61]=A,e[62]=G,e[63]=Y,e[64]=N,e[65]=re):re=e[65],re};function zt(d){return s("option",{value:d,children:d},d)}function Kt(d){return s("option",{value:`tag:${d}`,children:d},d)}const Dt=/\.(?:avif|bmp|gif|ico|jpe?g|png|svg|webp)$/iu,Tt=d=>(d.httpMetadata?.contentType??"").startsWith("image/")||Dt.test(d.key),Ft=()=>{const d=M(1);let e;return d[0]===Symbol.for("react.memo_cache_sentinel")?(e=s("svg",{"aria-hidden":"true",className:"size-8 text-muted-foreground/60",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.4,viewBox:"0 0 24 24",children:s("path",{d:"M7 3h7l5 5v13a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm7 0v5h5"})}),d[0]=e):e=d[0],e},Rt=d=>{const e=M(13),{object:t,resolveUrl:r}=d,[l,n]=E(null),[c,i]=E(!1);let o;e[0]!==t?(o=Tt(t),e[0]=t,e[1]=o):o=e[1];const u=o;let h,f;e[2]!==u||e[3]!==t.key||e[4]!==r?(h=()=>{if(!u)return;const v={cancelled:!1};return q((async()=>{try{const S=await r(t.key);v.cancelled||n(S)}catch{v.cancelled||i(!0)}})()),()=>{v.cancelled=!0}},f=[u,t.key,r],e[2]=u,e[3]=t.key,e[4]=r,e[5]=h,e[6]=f):(h=e[5],f=e[6]),le(h,f);let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{i(!0)},e[7]=m):m=e[7];const k=m;let a;return e[8]!==c||e[9]!==u||e[10]!==t.key||e[11]!==l?(a=s("div",{className:"flex aspect-square w-full items-center justify-center overflow-hidden rounded-md border border-border bg-muted/30",children:u&&l!==null&&!c?s("img",{alt:t.key,className:"size-full object-cover",loading:"lazy",onError:k,src:l}):s(Ft,{})}),e[8]=c,e[9]=u,e[10]=t.key,e[11]=l,e[12]=a):a=e[12],a},Lt=d=>{const e=M(42),{busy:t,copiedKey:r,handlers:l,object:n,prefix:c,references:i,resolveUrl:o,selected:u,showReferences:h,t:f}=d;let m;e[0]!==l||e[1]!==n||e[2]!==c?(m=Ke(n,c,l),e[0]=l,e[1]=n,e[2]=c,e[3]=m):m=e[3];const{copy:k,download:a,name:v,remove:S,toggle:y}=m;let g;e[4]!==n||e[5]!==o?(g=s(Rt,{object:n,resolveUrl:o}),e[4]=n,e[5]=o,e[6]=g):g=e[6];let x;e[7]!==n.key||e[8]!==u||e[9]!==f||e[10]!==y?(x=s("span",{className:"absolute left-1.5 top-1.5 rounded bg-background/80 p-0.5",children:s(Fe,{objectKey:n.key,onToggle:y,selected:u,t:f})}),e[7]=n.key,e[8]=u,e[9]=f,e[10]=y,e[11]=x):x=e[11];let b;e[12]!==g||e[13]!==x?(b=T("div",{className:"relative",children:[g,x]}),e[12]=g,e[13]=x,e[14]=b):b=e[14];let C;e[15]!==v?(C=s("p",{className:"truncate font-mono text-xs",title:v,children:v}),e[15]=v,e[16]=C):C=e[16];let w;e[17]!==n.size?(w=Ce(n.size),e[17]=n.size,e[18]=w):w=e[18];let N;e[19]!==w?(N=s("p",{className:"text-[11px] tabular-nums text-muted-foreground",children:w}),e[19]=w,e[20]=N):N=e[20];let z;e[21]!==n.key||e[22]!==i||e[23]!==h||e[24]!==f?(z=h&&s("div",{className:"mt-1",children:s(Te,{objectKey:n.key,references:i,t:f})}),e[21]=n.key,e[22]=i,e[23]=h,e[24]=f,e[25]=z):z=e[25];let $;e[26]!==C||e[27]!==N||e[28]!==z?($=T("div",{className:"min-w-0",children:[C,N,z]}),e[26]=C,e[27]=N,e[28]=z,e[29]=$):$=e[29];const D=r===n.key;let K;e[30]!==t||e[31]!==k||e[32]!==a||e[33]!==n.key||e[34]!==S||e[35]!==f||e[36]!==D?(K=s("div",{className:"flex items-center gap-1",children:s(De,{busy:t,buttonClassName:"h-7 px-2 text-xs",copied:D,objectKey:n.key,onCopy:k,onDelete:S,onDownload:a,t:f})}),e[30]=t,e[31]=k,e[32]=a,e[33]=n.key,e[34]=S,e[35]=f,e[36]=D,e[37]=K):K=e[37];let F;return e[38]!==K||e[39]!==b||e[40]!==$?(F=T("div",{className:"flex flex-col gap-1.5","data-testid":"fb-tile",children:[b,$,K]}),e[38]=K,e[39]=b,e[40]=$,e[41]=F):F=e[41],F},Ot=d=>{const e=M(9),{name:t,onEnter:r}=d;let l;e[0]!==t||e[1]!==r?(l=()=>{r(t)},e[0]=t,e[1]=r,e[2]=l):l=e[2];const n=l;let c;e[3]===Symbol.for("react.memo_cache_sentinel")?(c=s("span",{className:"flex aspect-square w-full items-center justify-center rounded-md border border-border bg-muted/30 transition-colors hover:bg-accent",children:s("svg",{"aria-hidden":"true",className:"size-10 text-muted-foreground",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.4,viewBox:"0 0 24 24",children:s("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"})})}),e[3]=c):c=e[3];let i;e[4]!==t?(i=s("span",{className:"truncate font-mono text-xs",title:t,children:t}),e[4]=t,e[5]=i):i=e[5];let o;return e[6]!==n||e[7]!==i?(o=T("button",{className:"flex flex-col gap-1.5 text-left outline-none","data-testid":"fb-folder",onClick:n,type:"button",children:[c,i]}),e[6]=n,e[7]=i,e[8]=o):o=e[8],o},Et=d=>{const e=M(34),{busy:t,copiedKey:r,files:l,folders:n,handlers:c,onEnterFolder:i,prefix:o,references:u,resolveUrl:h,selected:f,showReferences:m,size:k,t:a}=d;let v;e[0]!==k?(v=k.toString(),e[0]=k,e[1]=v):v=e[1];const S=`repeat(auto-fill, minmax(${v}px, 1fr))`;let y;e[2]!==S?(y={gridTemplateColumns:S},e[2]=S,e[3]=y):y=e[3];const g=y;let x;if(e[4]!==n||e[5]!==i){let w;e[7]!==i?(w=N=>s(Ot,{name:N,onEnter:i},N),e[7]=i,e[8]=w):w=e[8],x=n.map(w),e[4]=n,e[5]=i,e[6]=x}else x=e[6];let b;if(e[9]!==t||e[10]!==r||e[11]!==l||e[12]!==c||e[13]!==o||e[14]!==u||e[15]!==h||e[16]!==f||e[17]!==m||e[18]!==a){let w;e[20]!==t||e[21]!==r||e[22]!==c||e[23]!==o||e[24]!==u||e[25]!==h||e[26]!==f||e[27]!==m||e[28]!==a?(w=N=>s(Lt,{busy:t,copiedKey:r,handlers:c,object:N,prefix:o,references:u[N.key],resolveUrl:h,selected:f.has(N.key),showReferences:m,t:a},N.key),e[20]=t,e[21]=r,e[22]=c,e[23]=o,e[24]=u,e[25]=h,e[26]=f,e[27]=m,e[28]=a,e[29]=w):w=e[29],b=l.map(w),e[9]=t,e[10]=r,e[11]=l,e[12]=c,e[13]=o,e[14]=u,e[15]=h,e[16]=f,e[17]=m,e[18]=a,e[19]=b}else b=e[19];let C;return e[30]!==g||e[31]!==x||e[32]!==b?(C=T("div",{className:"grid gap-4","data-testid":"fb-gallery",style:g,children:[x,b]}),e[30]=g,e[31]=x,e[32]=b,e[33]=C):C=e[33],C},Ut=d=>{const e=M(23),{reference:t,t:r}=d,l=`fb-dangling-${t.table}-${t.id}-${t.column}`,n=`${t.table}·${t.id}`;let c;e[0]!==n?(c=s(ce,{variant:"secondary",children:n}),e[0]=n,e[1]=c):c=e[1];let i;e[2]!==t.column?(i=s("span",{className:"text-muted-foreground",children:t.column}),e[2]=t.column,e[3]=i):i=e[3];let o;e[4]!==r?(o=r("→"),e[4]=r,e[5]=o):o=e[5];let u;e[6]!==o?(u=s("span",{className:"text-muted-foreground/60",children:o}),e[6]=o,e[7]=u):u=e[7];let h;e[8]!==t.key?(h=s("code",{className:"rounded bg-muted px-1 py-0.5 font-mono text-foreground",children:t.key}),e[8]=t.key,e[9]=h):h=e[9];let f;e[10]!==c||e[11]!==i||e[12]!==u||e[13]!==h?(f=T("span",{className:"flex flex-wrap items-center gap-1.5",children:[c,i,u,h]}),e[10]=c,e[11]=i,e[12]=u,e[13]=h,e[14]=f):f=e[14];let m;e[15]!==r?(m=r("Missing object"),e[15]=r,e[16]=m):m=e[16];let k;e[17]!==m?(k=s(ce,{className:"border-destructive/40 text-destructive",variant:"outline",children:m}),e[17]=m,e[18]=k):k=e[18];let a;return e[19]!==l||e[20]!==k||e[21]!==f?(a=T("li",{className:"flex flex-wrap items-center justify-between gap-2 rounded-md border border-border/60 px-3 py-2 text-xs","data-testid":l,children:[f,k]}),e[19]=l,e[20]=k,e[21]=f,e[22]=a):a=e[22],a},_t=d=>{const e=M(37),{busy:t,onCheck:r,references:l,t:n,truncated:c}=d;let i;e[0]!==n?(i=n("Integrity"),e[0]=n,e[1]=i):i=e[1];let o;e[2]!==i?(o=s("span",{className:"font-mono text-[11px] uppercase tracking-wide text-muted-foreground",children:i}),e[2]=i,e[3]=o):o=e[3];let u;e[4]!==n?(u=n("Orphaned objects"),e[4]=n,e[5]=u):u=e[5];let h;e[6]!==u?(h=s("span",{className:"text-sm font-medium text-foreground",children:u}),e[6]=u,e[7]=h):h=e[7];let f;e[8]!==n?(f=n("Find records whose file reference points at an object the bucket no longer has."),e[8]=n,e[9]=f):f=e[9];let m;e[10]!==f?(m=s("span",{className:"text-xs text-muted-foreground",children:f}),e[10]=f,e[11]=m):m=e[11];let k;e[12]!==o||e[13]!==h||e[14]!==m?(k=T("div",{className:"flex flex-col gap-1",children:[o,h,m]}),e[12]=o,e[13]=h,e[14]=m,e[15]=k):k=e[15];let a;e[16]!==t||e[17]!==n?(a=n(t?"Checking…":"Check for orphans"),e[16]=t,e[17]=n,e[18]=a):a=e[18];let v;e[19]!==t||e[20]!==r||e[21]!==a?(v=s(se,{"data-testid":"fb-orphans-check",disabled:t,onClick:r,size:"sm",type:"button",variant:"outline",children:a}),e[19]=t,e[20]=r,e[21]=a,e[22]=v):v=e[22];let S;e[23]!==k||e[24]!==v?(S=T("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[k,v]}),e[23]=k,e[24]=v,e[25]=S):S=e[25];let y;e[26]!==l?.length||e[27]!==n?(y=l?.length===0&&s(Se,{description:n("Every record's file reference points at an object that exists in the bucket."),testId:"fb-orphans-empty",title:n("No dangling references.")}),e[26]=l?.length,e[27]=n,e[28]=y):y=e[28];let g;e[29]!==l||e[30]!==n||e[31]!==c?(g=l!==void 0&&l.length>0&&T(je,{children:[c&&s("p",{className:"text-xs text-warning","data-testid":"fb-orphans-truncated",children:n("Showing the first {count} dangling references — the scan was truncated.",{count:l.length})}),s("ul",{className:"flex flex-col gap-1.5","data-testid":"fb-orphans-list",children:l.map(b=>s(Ut,{reference:b,t:n},`${b.table}·${b.id}·${b.column}`))})]}),e[29]=l,e[30]=n,e[31]=c,e[32]=g):g=e[32];let x;return e[33]!==S||e[34]!==y||e[35]!==g?(x=T("section",{className:"flex flex-col gap-2 rounded-lg border border-border/60 p-3","data-testid":"fb-orphans",children:[S,y,g]}),e[33]=S,e[34]=y,e[35]=g,e[36]=x):x=e[36],x},Bt=function(d,e){const t=M(18);let r;t[0]===Symbol.for("react.memo_cache_sentinel")?(r=new Set,t[0]=r):r=t[0];const[l,n]=E(r);let c;t[1]===Symbol.for("react.memo_cache_sentinel")?(c=y=>{n(g=>{const x=new Set(g);return x.has(y)?x.delete(y):x.add(y),x})},t[1]=c):c=t[1];const i=c;let o;t[2]===Symbol.for("react.memo_cache_sentinel")?(o=()=>{n(new Set)},t[2]=o):o=t[2];const u=o;let h,f,m;if(t[3]!==d||t[4]!==e||t[5]!==l){let y;t[9]!==e?(y=g=>e(g),t[9]=e,t[10]=y):y=t[10],f=d.map(y),h=f.length>0&&f.every(g=>l.has(g)),m=!h&&f.some(g=>l.has(g)),t[3]=d,t[4]=e,t[5]=l,t[6]=h,t[7]=f,t[8]=m}else h=t[6],f=t[7],m=t[8];const k=m;let a;t[11]!==f?(a=()=>{n(y=>f.every(g=>y.has(g))?new Set:new Set(f))},t[11]=f,t[12]=a):a=t[12];const v=a;let S;return t[13]!==h||t[14]!==l||t[15]!==k||t[16]!==v?(S={allSelected:h,clear:u,selected:l,someSelected:k,toggle:i,toggleAll:v},t[13]=h,t[14]=l,t[15]=k,t[16]=v,t[17]=S):S=t[17],S},It=$e(ze.storageReferences),Mt=$e(ze.storageOrphans),ke=1e4,At=1e3,Pt=3600,Wt=(d,e)=>{if(!("document"in globalThis))return;const t=globalThis.document.createElement("a");t.href=d,t.download=e,t.rel="noopener",globalThis.document.body.append(t),t.click(),t.remove()},qt=d=>d.key,Gt=({initialPrefix:d,pageSize:e})=>{const t=gt(),[r,l]=E(d??""),[n,c]=E(d??""),[i,o]=E(St),[u,h]=E("list"),[f,m]=E(128),[k,a]=E("name"),[v,S]=E("asc"),[y,g]=E(void 0),[x,b]=E(void 0),[C,w]=E(!1),[N,z]=E(void 0),[$,D]=E(void 0),[K,F]=E(""),[U,L]=E({}),[B,R]=E(!1),[O,I]=E(void 0),[A,W]=E(!1),[P,G]=E(!1),[Y,re]=E([]),[Z,pe]=E(""),ne=he(0),Q=he(0);le(()=>{const p={cancelled:!1};return q((async()=>{try{const j=await t.listStorageBuckets();if(!p.cancelled){re(j);const[_]=j;_!==void 0&&pe(H=>H===""?_:H)}}catch{}})()),()=>{p.cancelled=!0}},[t]);const V=fe(()=>({list:p=>t.listStorageObjects({...p,bucket:Z}),remove:p=>t.deleteStorageObject(p,{bucket:Z}),signedUrl:(p,j)=>t.signedStorageUrl(p,{...j,bucket:Z}),upload:p=>t.uploadStorageObject({...p,bucket:Z})}),[Z,t]),X=nt(async(p,j,_)=>{ne.current+=1;const H=ne.current;b(void 0),w(!0);try{const J=await V.list({cursor:j,limit:e,prefix:p});if(H!==ne.current)return;g(ye=>_&&ye!==void 0?[...ye,...J.objects]:J.objects),D(J.cursor)}catch(J){if(H!==ne.current)return;_||g(void 0),b(ee(J))}finally{H===ne.current&&w(!1)}},[e,V]);le(()=>{q(X(d??"",void 0,!1))},[X,d]);const Re=(y?.length??0)<=e;bt(()=>{q(X(r,void 0,!1))},Re);const{files:de,folders:Le}=Ct(y??[],r),Oe=fe(()=>{const p=new Set;for(const j of de)for(const _ of Object.keys(j.customMetadata??{}))p.add(_);return[...p].toSorted((j,_)=>j.localeCompare(_))},[de]),ie=Nt(de,k,v),ue=fe(()=>[...new Set(ie.map(p=>p.key))].toSorted((p,j)=>p.localeCompare(j)).join(`
3
+ `),[ie]);le(()=>{const p=ue===""?[]:ue.split(`
4
+ `);if(p.length===0){L({});return}const j={current:!0};return q((async()=>{try{const _=await t.query(It,{keys:p},xe(K));j.current&&(L(_.references??{}),R(Object.keys(_.storageColumns??{}).length>0))}catch{j.current&&(L({}),R(!1))}})()),()=>{j.current=!1}},[t,ue,K]);const{allSelected:Ee,clear:ae,selected:ge,someSelected:Ue,toggle:_e,toggleAll:Be}=Bt(ie,qt),Ie=()=>{l(n),ae(),q(X(n,void 0,!1))},Me=()=>{q(X(r,$,!0))},be=p=>{l(p),c(p),ae(),q(X(p,void 0,!1))},Ae=p=>{be(`${r}${p}`)},Pe=p=>V.signedUrl(p,{expiresInSeconds:Pt}),We=()=>{h("list")},qe=()=>{h("grid")},Ge=p=>{a(p)},He=()=>{S(p=>p==="asc"?"desc":"asc")},Ze=p=>{m(p)},Ve=p=>{o(p)},Xe=()=>{b(void 0),w(!0),q((async()=>{try{for(const p of ge)await V.remove(p);await X(r,void 0,!1),ae()}catch(p){b(ee(p))}w(!1)})())},Ye=p=>{b(void 0),q((async()=>{try{const j=await V.signedUrl(p,{expiresInSeconds:i});ft(j)&&z(p)}catch(j){b(ee(j))}})())},Qe=p=>{b(void 0),q((async()=>{try{const j=await V.signedUrl(p,{expiresInSeconds:i}),_=p.slice(p.lastIndexOf("/")+1)||p;Wt(j,_)}catch(j){b(ee(j))}})())};le(()=>{if(N===void 0)return;const p=globalThis.setTimeout(()=>{z(void 0)},2e3);return()=>{globalThis.clearTimeout(p)}},[N]);const Je=p=>{b(void 0),w(!0),q((async()=>{try{await V.remove(p),await X(r,void 0,!1)}catch(j){b(ee(j))}w(!1)})())},et=p=>{const j=`${r}${p.name}`;b(void 0),w(!0),q((async()=>{try{const _=await p.arrayBuffer();await V.upload({body:_,contentType:p.type===""?void 0:p.type,key:j}),await X(r,void 0,!1)}catch(_){b(ee(_))}w(!1)})())};le(()=>{Q.current+=1,I(void 0),G(!1)},[K]);const tt=()=>{Q.current+=1;const p=Q.current;b(void 0),W(!0),q((async()=>{try{const j=[];let _;do{const H=await V.list({cursor:_,limit:At});for(const J of H.objects)j.push(J.key);_=j.length>=ke?void 0:H.cursor}while(_!==void 0);if(j.length>=ke)p===Q.current&&(I([]),G(!0));else{const H=await t.query(Mt,{liveKeys:j},xe(K));p===Q.current&&(I(H.references??[]),G(H.truncated===!0))}}catch(j){p===Q.current&&(I([]),G(!1),b(ee(j)))}p===Q.current&&W(!1)})())},rt=p=>{ne.current+=1,Q.current+=1,pe(p),l(d??""),c(d??""),g(void 0),I(void 0),G(!1),ae()};return{allSelected:Ee,bucket:Z,buckets:Y,bulkDelete:Xe,busy:C,checkOrphans:tt,clearSelection:ae,copiedKey:N,danglingBusy:A,danglingReferences:O,danglingTruncated:P,draftPrefix:n,enterFolder:Ae,error:x,expiry:i,files:ie,folders:Le,hasObjects:y!==void 0&&y.length>0,hasStorageColumns:B,listFirst:Ie,loaded:y!==void 0,loadMore:Me,navigate:be,nextCursor:$,onCopy:Ye,onDelete:Je,onDownload:Qe,onExpiryChange:Ve,onFile:et,onSortKeyChange:Ge,onThumbSizeChange:Ze,prefix:r,referenceShard:K,references:U,resolveUrl:Pe,selectBucket:rt,selected:ge,setDraftPrefix:c,setReferenceShard:F,showGrid:qe,showList:We,someSelected:Ue,sortDirection:v,sortKey:k,tagKeys:Oe,thumbSize:f,toggleSelect:_e,toggleSelectAll:Be,toggleSortDirection:He,view:u}},Ht=100,we=d=>{const e=M(6),{label:t,onNavigate:r,target:l}=d;let n;e[0]!==r||e[1]!==l?(n=()=>{r(l)},e[0]=r,e[1]=l,e[2]=n):n=e[2];const c=n;let i;return e[3]!==c||e[4]!==t?(i=s("button",{className:"rounded px-1 text-muted-foreground outline-none hover:text-foreground focus-visible:text-foreground",onClick:c,type:"button",children:t}),e[3]=c,e[4]=t,e[5]=i):i=e[5],i},Zt=d=>{const e=M(11),{onNavigate:t,prefix:r,t:l}=d;let n;if(e[0]!==t||e[1]!==r||e[2]!==l){const c=r.split("/").filter(Vt);let i;e[4]!==l?(i=l("Folder path"),e[4]=l,e[5]=i):i=e[5];let o;e[6]!==l?(o=l("root"),e[6]=l,e[7]=o):o=e[7];let u;e[8]!==t||e[9]!==o?(u=s(we,{label:o,onNavigate:t,target:""}),e[8]=t,e[9]=o,e[10]=u):u=e[10],n=T("nav",{"aria-label":i,className:"flex flex-wrap items-center gap-0.5 text-xs","data-testid":"fb-breadcrumbs",children:[u,c.map((h,f)=>T("span",{className:"flex items-center gap-0.5",children:[s("span",{className:"text-muted-foreground/50",children:"/"}),s(we,{label:h,onNavigate:t,target:`${c.slice(0,f+1).join("/")}/`})]},`${h}-${f.toString()}`))]}),e[0]=t,e[1]=r,e[2]=l,e[3]=n}else n=e[3];return n},pr=({initialPrefix:d,pageSize:e=Ht})=>{const t=lt(),r=Gt({initialPrefix:d,pageSize:e}),l=he(null),{onCopy:n,onDelete:c,onDownload:i,onFile:o,toggleSelect:u}=r,h={onCopy:n,onDelete:c,onDownload:i,onToggleSelect:u},f=()=>{l.current?.click()},m=a=>{const v=a.target,S=v.files?.[0];v.value="",S&&o(S)},k=r.loaded&&!r.hasObjects;return T("div",{className:"flex flex-col gap-3","data-testid":"lunora-file-browser",children:[s($t,{bucket:r.bucket,buckets:r.buckets,busy:r.busy,draftPrefix:r.draftPrefix,expiry:r.expiry,fileInputRef:l,onBucketChange:r.selectBucket,onExpiryChange:r.onExpiryChange,onFileChange:m,onList:r.listFirst,onPrefixChange:r.setDraftPrefix,onUploadClick:f,t}),r.loaded&&s(Zt,{onNavigate:r.navigate,prefix:r.prefix,t}),r.hasObjects&&s(jt,{onSortKeyChange:r.onSortKeyChange,onThumbSizeChange:r.onThumbSizeChange,showGrid:r.showGrid,showList:r.showList,sortDirection:r.sortDirection,sortKey:r.sortKey,t,tagKeys:r.tagKeys,thumbSize:r.thumbSize,toggleSortDirection:r.toggleSortDirection,view:r.view}),r.hasStorageColumns&&T("div",{className:"flex flex-wrap items-center gap-2","data-testid":"fb-references-shard",children:[s("label",{className:"text-xs text-muted-foreground",htmlFor:"fb-reference-shard-input",children:t("References shard")}),s(ot,{id:"fb-reference-shard-input",onChange:r.setReferenceShard,testId:"fb-reference-shard-input",value:r.referenceShard}),s("span",{className:"text-xs text-muted-foreground",children:t("Which shard's records are checked for references to these files. Empty = root shard.")})]}),r.hasStorageColumns&&s(_t,{busy:r.danglingBusy,onCheck:r.checkOrphans,references:r.danglingReferences,t,truncated:r.danglingTruncated}),r.selected.size>0&&s(st,{count:r.selected.size,editable:!0,onClear:r.clearSelection,onDelete:r.bulkDelete}),r.error!==void 0&&s("p",{className:"text-sm text-destructive","data-testid":"storage-error",role:"alert",children:r.error}),k&&s(Se,{description:t("Objects you upload to your R2 buckets will appear here."),icon:T("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[s("path",{d:"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Z"}),s("path",{d:"M12 11v5m-2.5-2.5h5"})]}),testId:"fb-empty",title:t("No objects.")}),r.hasObjects&&r.view==="list"&&s(kt,{allSelected:r.allSelected,busy:r.busy,copiedKey:r.copiedKey,files:r.files,folders:r.folders,handlers:h,onEnterFolder:r.enterFolder,prefix:r.prefix,references:r.references,selected:r.selected,showReferences:r.hasStorageColumns,someSelected:r.someSelected,t,toggleSelectAll:r.toggleSelectAll}),r.hasObjects&&r.view==="grid"&&s(Et,{busy:r.busy,copiedKey:r.copiedKey,files:r.files,folders:r.folders,handlers:h,onEnterFolder:r.enterFolder,prefix:r.prefix,references:r.references,resolveUrl:r.resolveUrl,selected:r.selected,showReferences:r.hasStorageColumns,size:r.thumbSize,t}),r.nextCursor!==void 0&&s("div",{children:s(se,{"data-testid":"fb-next",disabled:r.busy,onClick:r.loadMore,size:"sm",type:"button",variant:"outline",children:t("Load more")})})]})};function Vt(d){return d!==""}export{pr as FileBrowser};
@@ -0,0 +1 @@
1
+ import{useLunora as G}from"@lunora/react";import{useState as o,useEffect as H}from"react";import{ShardInput as Q}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as T}from"../packem_shared/badge-BbuuAio7.js";import{u as y}from"../packem_shared/button-BkCrNcAs.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as N}from"../packem_shared/label-6uP1obNF.js";import{l as W}from"../packem_shared/textarea-Bu2-jKAs.js";import{useT as Y}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{b as ee,i as te,f as re,j as ae,g as se}from"../packem_shared/internal-BSIsQVC6.js";import{r as ne}from"../packem_shared/shard-history-DMEW5VBE.js";import{jsxs as n,jsx as r}from"react/jsx-runtime";const ie=t=>t.kind==="id"?t.table===void 0?"id":`id<${t.table}>`:t.kind==="array"?t.element===void 0?"array":`${t.element}[]`:t.kind,oe=t=>t===void 0||t.length===0?"()":`(${t.map(i=>`${i.name}${i.optional?"?":""}: ${ie(i)}`).join(", ")})`,de=t=>{switch(t){case"array":return[];case"bigint":case"number":return 0;case"boolean":return!1;case"object":case"record":return{};default:return""}},le=t=>{const i={};for(const a of t??[])a.optional||(i[a.name]=de(a.kind));return JSON.stringify(i,void 0,2)},ce=se(Z.runAs),ue=10,me=t=>t===void 0?"undefined":JSON.stringify(t,null,2),Ie=({functions:t,runAsIdentity:i=!1}={})=>{const a=Y(),u=G(),[J,K]=o(null),[w,L]=o(null),p=t??J??[],[k,S]=o(""),[m,g]=o("{}"),[c,$]=o(""),[f,z]=o(""),[x,h]=o("idle"),[M,b]=o(void 0),[I,v]=o(null),[F,P]=o([]);H(()=>{if(t!==void 0)return;let e=!1;return u.listFunctions().then(d=>(e||K(d),d)).catch(d=>{e||L(ee(d))}),()=>{e=!0}},[u,t]);const C=k===""?p[0]?.path??"":k,s=p.find(e=>e.path===C),_=async()=>{if(!s)return;let e;try{e=m.trim()===""?{}:JSON.parse(m)}catch(l){h("error"),b(void 0),v(a("Invalid JSON args: {message}",{message:l.message}));return}const d={__lunoraRef:s.path},R=c.trim()===""?{}:{shardKey:c.trim()},j=i?f.trim():"",A=l=>{P(O=>[{argsText:m,at:Date.now(),id:(O[0]?.id??0)+1,kind:s.kind,path:s.path,shardKey:c,status:l},...O].slice(0,ue))};h("running"),v(null);try{const l=j===""?await ae(u,s.kind,d,e,R):await u.query(ce,{args:e,functionPath:s.path,userId:j},R);ne(c),b(l),h("success"),A("success")}catch(l){b(void 0),v(l.message),h("error"),A("error")}},q=e=>{S(e.path),g(e.argsText),$(e.shardKey)},B=e=>{S(e.target.value)},D=e=>{g(e.target.value)},E=e=>{z(e.target.value)},U=()=>{re(_())},X=()=>{g(le(s?.args))};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-runner",children:[w!==null&&r("p",{className:"text-sm text-destructive","data-testid":"function-discover-error",role:"alert",children:w}),n("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4",children:[n("div",{className:"flex flex-col gap-1.5",children:[r(N,{htmlFor:"function-select",children:a("Function")}),r("select",{"aria-label":a("Function"),className:"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50","data-testid":"function-select",id:"function-select",onChange:B,value:C,children:p.map(e=>n("option",{value:e.path,children:[e.path," (",e.kind,")"]},e.path))}),s!==void 0&&n("p",{className:"text-xs text-muted-foreground",children:[r("span",{className:"mr-1.5 font-medium",children:a("Signature")}),r("code",{className:"font-mono","data-testid":"function-signature",children:oe(s.args)})]})]}),n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:"flex items-center justify-between gap-2",children:[r(N,{htmlFor:"args-input",children:a("Arguments")}),r(y,{"data-testid":"prefill-button",disabled:s===void 0,onClick:X,size:"xs",type:"button",variant:"ghost",children:a("Prefill")})]}),r(W,{"aria-label":a("Arguments"),className:"font-mono text-xs","data-testid":"args-input",id:"args-input",onChange:D,value:m})]}),r(Q,{onChange:$,testId:"shard-input",value:c}),i&&n("div",{className:"flex flex-col gap-1.5","data-testid":"run-as-field",children:[r(N,{htmlFor:"run-as-input",children:a("Run as identity (userId)")}),r(V,{"aria-label":a("Run as identity (userId)"),className:"font-mono text-xs","data-testid":"run-as-input",id:"run-as-input",onChange:E,placeholder:a("Leave empty to run as admin"),value:f}),r("p",{className:"text-[11px] text-muted-foreground",children:a("Dev only: runs the function as this user so you can test auth and RLS. Forged over the admin gate.")})]}),n("div",{className:"flex flex-wrap items-center gap-2",children:[r(y,{"data-testid":"run-button",disabled:x==="running"||s===void 0,onClick:U,type:"button",children:a("Run")}),s!==void 0&&r(T,{variant:"outline",children:s.kind}),i&&f.trim()!==""&&r(T,{"data-testid":"run-as-badge",variant:"secondary",children:a("as {userId}",{userId:f.trim()})})]})]}),x==="error"&&I!==null&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs text-destructive","data-testid":"error",role:"alert",children:I}),x==="success"&&r("pre",{className:"overflow-auto rounded-md border border-border bg-muted/50 p-3 font-mono text-xs","data-testid":"result",children:me(M)}),F.length>0&&r("ul",{className:"flex flex-col overflow-hidden rounded-xl border border-border","data-testid":"fn-history",children:F.map((e,d)=>n("li",{className:"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2 text-sm last:border-b-0","data-testid":"fn-history-row",children:[r("span",{className:e.status==="success"?"text-success":"text-destructive","data-testid":`fn-history-status-${d.toString()}`,children:e.status==="success"?"✓":"✗"})," ",n("span",{className:"font-mono text-xs",children:[e.path," (",e.kind,")"]})," ",r("time",{className:"text-xs text-muted-foreground",children:te(e.at)})," ",r(y,{className:"ml-auto","data-testid":`fn-history-load-${d.toString()}`,onClick:()=>{q(e)},size:"xs",type:"button",variant:"ghost",children:a("Load")})]},e.id))})]})};export{Ie as FunctionRunner};
@@ -0,0 +1 @@
1
+ import{c as W}from"react/compiler-runtime";import{useState as K}from"react";import{E as G}from"../packem_shared/error-alert-t6cpEi0z.js";import{L as J}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as V}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as X}from"../packem_shared/badge-BbuuAio7.js";import{u as Y}from"../packem_shared/button-BkCrNcAs.js";import{c as Z,u as tt}from"../packem_shared/card-CIDGUN6K.js";import{E as et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as rt,d as at,m as P,p as l,f as st,u as n}from"../packem_shared/table-DdJBrClo.js";import{N as lt}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import nt from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as ot}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as it}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{i as ct}from"../packem_shared/internal-BSIsQVC6.js";import{c as z}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as y}from"react/jsx-runtime";const dt={action:"outline",mutation:"default",query:"secondary"},O=r=>r<1e3?`${r<10?r.toFixed(1):Math.round(r).toString()}ms`:`${(r/1e3).toFixed(2)}s`,mt=r=>r.calls===0?"—":r.errors===0?"0":`${r.errors.toString()} (${(r.errors/r.calls*100).toFixed(1)}%)`,ut=r=>{const t=r.conflicts??0;return r.calls===0?"—":t===0?"0":`${t.toString()} (${(t/r.calls*100).toFixed(1)}%)`},ht={calls:(r,t)=>t.calls-r.calls,recent:(r,t)=>t.lastCalledAt-r.lastCalledAt,slowest:(r,t)=>t.maxDurationMs-r.maxDurationMs},Dt=r=>{const t=W(47),{functions:_,initialShardKey:R}=r,s=ot(),[o,U]=K(R??""),[i,B]=K("recent");let S;t[0]!==o?(S=o.trim(),t[0]=o,t[1]=S):S=t[1];const T=nt(S,400);let M;t[2]===Symbol.for("react.memo_cache_sentinel")?(M={},t[2]=M):M=t[2];let w;t[3]!==T?(w={live:!0,shardKey:T},t[3]=T,t[4]=w):w=t[4];const{data:H,error:c,errorSource:$,liveError:v}=lt(it.getFunctionStats,M,w),b=H?.functions??null;let E;t[5]!==_?(E=new Map((_??[]).map(ft)),t[5]=_,t[6]=E):E=t[6];const L=E;let C;t[7]===Symbol.for("react.memo_cache_sentinel")?(C=k=>{B(k.currentTarget.dataset.sort)},t[7]=C):C=t[7];const Q=C;let F;if(t[8]!==c||t[9]!==$||t[10]!==L||t[11]!==v||t[12]!==o||t[13]!==i||t[14]!==b||t[15]!==s){const k=b===null?[]:b.toSorted(ht[i]);let d;t[17]!==s?(d=s("Recent"),t[17]=s,t[18]=d):d=t[18];let m;t[19]!==d?(m={key:"recent",label:d},t[19]=d,t[20]=m):m=t[20];let u;t[21]!==s?(u=s("Most called"),t[21]=s,t[22]=u):u=t[22];let h;t[23]!==u?(h={key:"calls",label:u},t[23]=u,t[24]=h):h=t[24];let f;t[25]!==s?(f=s("Slowest"),t[25]=s,t[26]=f):f=t[26];let p;t[27]!==f?(p={key:"slowest",label:f},t[27]=f,t[28]=p):p=t[28];let I;t[29]!==h||t[30]!==p||t[31]!==m?(I=[m,h,p],t[29]=h,t[30]=p,t[31]=m,t[32]=I):I=t[32];const j=I;let x;t[33]!==o?(x=e(V,{onChange:U,testId:"fs-shard-input",value:o}),t[33]=o,t[34]=x):x=t[34];let g;t[35]!==v?(g=e(J,{message:v,prefix:"fs"}),t[35]=v,t[36]=g):g=t[36];let N;t[37]!==j||t[38]!==i?(N=e("div",{className:"ml-auto flex items-center gap-1",role:"group",children:j.map(a=>e(Y,{"data-sort":a.key,"data-testid":`fs-sort-${a.key}`,onClick:Q,size:"sm",type:"button",variant:i===a.key?"secondary":"ghost",children:a.label},a.key))}),t[37]=j,t[38]=i,t[39]=N):N=t[39];let A;t[40]!==x||t[41]!==g||t[42]!==N?(A=y("div",{className:"flex flex-wrap items-center gap-2",children:[x,g,N]}),t[40]=x,t[41]=g,t[42]=N,t[43]=A):A=t[43];let D;t[44]!==c||t[45]!==$?(D=c!==null&&e(G,{error:$,testId:"fs-error"}),t[44]=c,t[45]=$,t[46]=D):D=t[46],F=y("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-stats",children:[A,D,b!==null&&k.length===0&&c===null&&e(et,{description:s("Per-function call counts, error rates, and latency land here after your first request."),icon:y("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[e("path",{d:"M3 3v18h18"}),e("path",{d:"M7 14l4-4 3 3 5-6"})]}),testId:"fs-empty",title:s("No functions have run on this shard yet.")}),k.length>0&&e(Z,{className:"overflow-hidden py-0",children:e(tt,{className:"px-0",children:y(rt,{"data-testid":"fs-table",children:[e(at,{children:y(P,{children:[e(l,{children:s("function")}),e(l,{children:s("kind")}),e(l,{className:"text-right",children:s("calls")}),e(l,{className:"text-right",children:s("errors")}),e(l,{className:"text-right",children:s("conflicts")}),e(l,{className:"text-right",children:s("avg")}),e(l,{className:"text-right",children:s("max")}),e(l,{children:s("last run")}),e(l,{children:s("last error")})]})}),e(st,{children:k.map(a=>{const q=L.get(a.path);return y(P,{"data-testid":`fs-row-${a.path}`,children:[e(n,{className:"font-medium",children:a.path}),e(n,{children:q===void 0?e("span",{className:"text-muted-foreground",children:"—"}):e(X,{variant:dt[q],children:q})}),e(n,{className:"text-right tabular-nums",children:a.calls}),e(n,{className:z("text-right tabular-nums",a.errors>0&&"text-destructive"),children:mt(a)}),e(n,{className:z("text-right tabular-nums",(a.conflicts??0)>0&&"text-warning"),children:ut(a)}),e(n,{className:"text-right tabular-nums",children:a.calls===0?"—":O(a.totalDurationMs/a.calls)}),e(n,{className:"text-right tabular-nums",children:a.calls===0?"—":O(a.maxDurationMs)}),e(n,{className:"text-muted-foreground",children:ct(a.lastCalledAt,"—")}),e(n,{className:"max-w-[24ch] truncate text-destructive",title:a.lastErrorMessage??void 0,children:a.lastErrorMessage??e("span",{className:"text-muted-foreground",children:"—"})})]},a.path)})})]})})})]}),t[8]=c,t[9]=$,t[10]=L,t[11]=v,t[12]=o,t[13]=i,t[14]=b,t[15]=s,t[16]=F}else F=t[16];return F};function ft(r){return[r.path,r.kind]}export{Dt as FunctionStatsPanel};
@@ -0,0 +1 @@
1
+ import{c as fe}from"react/compiler-runtime";import{useLunora as pe}from"@lunora/react";import{useState as v,useRef as P,useEffect as C,useCallback as he}from"react";import ge from"../packem_shared/ConnectionBadge-DOk0CQWo.js";import{L as xe}from"../packem_shared/live-status-CmuRLFKf.js";import{g as F}from"../packem_shared/badge-BbuuAio7.js";import{c as S}from"../packem_shared/card-CIDGUN6K.js";import{N as ve}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as Ne}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as b}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{f as B,i as be,d as Z,b as ee,g as q}from"../packem_shared/internal-BSIsQVC6.js";import{l as we}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as M}from"../packem_shared/utils-bhneXptQ.js";import{shardsToAggregate as ye}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{S as G}from"../packem_shared/sparkline-CgjeUU2I.js";import{jsxs as i,jsx as s}from"react/jsx-runtime";const te={completed:0,failed:2,in_progress:1},ke=a=>{let e=0,t=0,r=0,l=0;const u=[];for(const{metrics:m}of a){if(m===null){l+=1;continue}r+=1,e+=m.requests,t+=m.errors,u.push(...m.history??[])}return{errors:t,failed:l,history:u,reachable:r,requests:e}},Se=a=>{const e=new Map;for(const t of a)for(const r of t){const l=e.get(r.path);if(l===void 0){e.set(r.path,{...r});continue}l.calls+=r.calls,l.errors+=r.errors,l.totalDurationMs+=r.totalDurationMs,l.scans=(l.scans??0)+(r.scans??0),l.maxDurationMs=Math.max(l.maxDurationMs,r.maxDurationMs),l.lastCalledAt=Math.max(l.lastCalledAt,r.lastCalledAt),(r.lastErrorAt??0)>(l.lastErrorAt??0)&&(l.lastErrorAt=r.lastErrorAt,l.lastErrorMessage=r.lastErrorMessage)}return[...e.values()]},Me=a=>{const e=new Map;for(const t of a)for(const r of t){const l=e.get(r.id);if(l===void 0){e.set(r.id,r);continue}const u=te[r.status]-te[l.status];(u>0||u===0&&(r.updatedAt??0)>(l.updatedAt??0))&&e.set(r.id,r)}return[...e.values()]},qe=q(b.getAuthMetrics),Ae=q(b.getFunctionStats),Ee=q(b.getLogs),je=q(b.getMetrics),De=q(b.migrationStatus),Ie=5,re=2e3,$e=5,se=.01,ae=.05,Le=.1,Pe=.3,Ce=1,Fe=50,V=(a,e,t)=>a>=t?"crit":a>=e?"warn":"ok",Te=(a,e,t)=>a>=t?"crit":a>=e?"warn":"ok",Oe={crit:"destructive",ok:"secondary",warn:"default"},T=(a,e)=>e===0?"—":`${(a/e*100).toFixed(1)}%`,Re=a=>{const e=new Map;for(const r of a??[]){const l=e.get(r.bucketMs)??{calls:0,errors:0};l.calls+=r.calls,l.errors+=r.errors,e.set(r.bucketMs,l)}const t=[...e.entries()].toSorted((r,l)=>r[0]-l[0]);return{errors:t.map(([,r])=>r.errors),requests:t.map(([,r])=>r.calls)}},_e=a=>{let e=0,t=0;for(const l of a)l.status==="failed"?e+=1:l.status==="in_progress"&&(t+=1);let r="ok";return e>0?r="crit":t>0&&(r="warn"),{failed:e,level:r,running:t}},ze=(a,e)=>a.failed>0?e("{count} failed",{count:a.failed.toString()}):a.running>0?e("{count} running",{count:a.running.toString()}):e("OK"),le={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ne={crit:"text-destructive",ok:"text-foreground",warn:"text-warning"},He={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Ke=a=>a.includes("crit")?"crit":a.includes("warn")?"warn":"ok",O=a=>{const e=fe(19),{chart:t,label:r,level:l,testId:u,value:m}=a,c=le[l];let p;e[0]!==c?(p=M("size-1.5 shrink-0 rounded-full",c),e[0]=c,e[1]=p):p=e[1];let f;e[2]!==p?(f=s("span",{"aria-hidden":"true",className:p}),e[2]=p,e[3]=f):f=e[3];let h;e[4]!==r||e[5]!==f?(h=i("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[f,r]}),e[4]=r,e[5]=f,e[6]=h):h=e[6];const N=ne[l];let d;e[7]!==N?(d=M("truncate text-2xl font-semibold tabular-nums",N),e[7]=N,e[8]=d):d=e[8];let o;e[9]!==d||e[10]!==u||e[11]!==m?(o=s("span",{className:d,"data-testid":u,children:m}),e[9]=d,e[10]=u,e[11]=m,e[12]=o):o=e[12];let g;e[13]!==t||e[14]!==o?(g=i("div",{className:"flex items-center justify-between gap-3",children:[o,t]}),e[13]=t,e[14]=o,e[15]=g):g=e[15];let x;return e[16]!==h||e[17]!==g?(x=s(S,{className:"gap-0 py-0",children:i("div",{className:"flex flex-col gap-2.5 p-4",children:[h,g]})}),e[16]=h,e[17]=g,e[18]=x):x=e[18],x},Ue=async(a,e,t)=>{const r=await Promise.all(t.map(d=>{const o=Z(d);return Promise.allSettled([a.query(je,{},o),a.query(Ae,{},o),a.query(De,{},o)])})),l=Z(e),u=typeof a.schedulerStatus=="function"?a.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[m,c,p]=await Promise.allSettled([a.query(Ee,{},l),a.query(qe,{},l),u]),f=r.map(([d,o,g])=>({functions:o.status==="fulfilled"?o.value.functions:[],metrics:d.status==="fulfilled"?d.value:null,migrations:g.status==="fulfilled"?g.value.migrations:[]})),h=ke(f),N=r[0]?.[0];return{auth:c.status==="fulfilled"?c.value:null,entries:m.status==="fulfilled"?m.value.entries:[],functions:Se(f.map(d=>d.functions)),logsError:m.status==="rejected"?ee(m.reason):null,metricsError:h.reachable===0&&N?.status==="rejected"?ee(N.reason):null,migrations:Me(f.map(d=>d.migrations)),scheduler:p.status==="fulfilled"?p.value:null,totals:h}},Be=a=>{const e=a?.history??[];return{attempts:e.map(t=>t.attempts),failures:e.map(t=>t.failures)}},ot=({initialShardKey:a})=>{const e=pe(),t=Ne(),[r,l]=v([]),[u,m]=v(null),[c,p]=v(null),[f,h]=v(null),[N,d]=v([]),[o,g]=v(null),[x,ie]=v(null),[oe,ce]=v([]),[w]=v(we),A=P(!1),R=P(!0);C(()=>(R.current=!0,()=>{R.current=!1}),[]);const E=a??"",j=he(async()=>{if(A.current)return;A.current=!0;const n=await Ue(e,E,ye(E,w));if(!R.current){A.current=!1;return}p(n.totals),h(n.metricsError),d(n.functions),ce(n.migrations),l(n.entries),m(n.logsError),g(n.auth),ie(n.scheduler),A.current=!1},[e,w,E]);C(()=>{B(j())},[j]);const _=P(0),y=P(null),de=()=>{const n=Date.now()-_.current;if(n>=re){_.current=Date.now(),B(j());return}y.current===null&&(y.current=setTimeout(()=>{y.current=null,_.current=Date.now(),B(j())},re-n))};C(()=>()=>{y.current!==null&&clearTimeout(y.current)},[]);const{data:J,liveError:ue}=ve(b.getMetrics,{},{live:!0,shardKey:E});C(()=>{J!==void 0&&de()},[J]);const z=r.filter(n=>n.level==="error"),H=z.slice(0,Ie),D=Re(c?.history),Q=Be(o),W=N.filter(n=>n.calls>0).toSorted((n,k)=>k.errors/k.calls-n.errors/n.calls||k.calls-n.calls).slice(0,$e),K=_e(oe),me=c===null||c.requests===0?0:c.errors/c.requests,U=V(me,se,ae),X=o===null?"ok":V(o.failureRate,Le,Pe),Y=x===null?"ok":Te(x.backlog,Ce,Fe),I=Ke([U,X,Y,K.level]);let $,L;return I==="crit"?($=t("Critical"),L=t("One or more service levels are breached.")):I==="warn"?($=t("Degraded"),L=t("Some service levels need attention.")):($=t("All systems healthy"),L=t("All service levels are within target.")),i("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[i(S,{className:"gap-0 py-0",children:[i("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[i("div",{className:"flex items-center gap-3",children:[s("span",{"aria-hidden":"true",className:M("flex size-10 shrink-0 items-center justify-center rounded-full",He[I]),children:s("span",{className:M("size-3 rounded-full",le[I])})}),i("div",{className:"grid leading-tight",children:[s("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:$}),s("span",{className:"text-[13px] text-muted-foreground",children:L})]})]}),i("div",{className:"flex flex-wrap items-center gap-4",children:[i("div",{className:"text-end",children:[s("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:t("Requests")}),i("div",{className:"flex items-center justify-end gap-2",children:[D.requests.length>=2&&s(G,{ariaLabel:t("Requests over time"),className:"h-6 w-20 text-foreground",series:D.requests,testId:"hl-spark-requests"}),s("span",{className:"text-lg font-semibold tabular-nums text-foreground","data-testid":"hl-requests",children:(c?.requests??0).toString()})]})]}),s("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),i("div",{className:"text-end",children:[s("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:t("Error rate")}),s("div",{className:M("text-lg font-semibold tabular-nums",ne[U]),"data-testid":"hl-error-rate",children:c===null?"—":T(c.errors,c.requests)})]}),s("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),i("div",{className:"flex items-center gap-2",children:[s(ge,{}),s(xe,{message:ue,prefix:"hl"})]})]})]}),f!==null&&s("div",{className:"border-t border-border bg-destructive/5 px-4 py-2 text-sm text-destructive","data-testid":"hl-metrics-error",role:"alert",children:f})]}),i("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[s(O,{chart:D.errors.length>=2?s(G,{ariaLabel:t("Errors over time"),className:"h-7 w-20 text-destructive",series:D.errors,testId:"hl-spark-errors"}):void 0,label:t("Error rate"),level:U,testId:"hl-slo-errorrate",value:c===null?"—":T(c.errors,c.requests)}),s(O,{chart:Q.failures.length>=2?s(G,{ariaLabel:t("Auth failures over time"),className:"h-7 w-20 text-destructive",series:Q.failures,testId:"hl-spark-auth"}):void 0,label:t("Auth failures"),level:X,testId:"hl-slo-auth",value:o===null?"—":T(o.failures,o.attempts)}),s(O,{label:t("Scheduler backlog"),level:Y,testId:"hl-slo-backlog",value:x===null?"—":x.backlog.toString()}),s(O,{label:t("Migrations"),level:K.level,testId:"hl-slo-migrations",value:ze(K,t)})]}),i("div",{className:"grid gap-3 lg:grid-cols-2",children:[i(S,{className:"gap-0 py-0","data-testid":"hl-functions",children:[s("header",{className:"border-b border-border px-4 py-3",children:s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Functions by error rate")})}),W.length===0?s("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-functions-empty",children:t("No function activity yet.")}):s("ul",{className:"divide-y divide-border",children:W.map(n=>i("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs","data-testid":"hl-fn-row",children:[s("span",{className:"truncate font-mono text-foreground",children:n.path}),i("span",{className:"flex shrink-0 items-center gap-2",children:[s("span",{className:"tabular-nums text-muted-foreground",children:t("{count} calls",{count:n.calls.toString()})}),s(F,{variant:Oe[V(n.errors/n.calls,se,ae)],children:T(n.errors,n.calls)})]})]},n.path))})]}),i(S,{className:"gap-0 py-0",children:[i("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Recent errors")}),s(F,{"data-testid":"hl-error-count",variant:z.length>0?"destructive":"outline",children:z.length})]}),u!==null&&s("p",{className:"px-4 py-8 text-center text-sm text-destructive","data-testid":"hl-logs-error",role:"alert",children:u}),u===null&&H.length===0&&s("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-errors-empty",children:t("No recent errors.")}),H.length>0&&s("ul",{className:"divide-y divide-border",children:H.map((n,k)=>i("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[i("span",{className:"flex items-center gap-2",children:[s("time",{className:"shrink-0 text-muted-foreground",children:be(n.timestamp)}),n.functionPath!==void 0&&s("span",{className:"truncate font-mono text-foreground",children:n.functionPath})]}),s("span",{className:"text-destructive",children:n.message})]},`${n.timestamp.toString()}-${k.toString()}`))})]})]}),i(S,{className:"gap-0 py-0",children:[i("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[s("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:t("Shards seen")}),s(F,{"data-testid":"hl-shard-count",variant:"outline",children:w.length})]}),w.length>0&&s("ul",{className:"flex flex-wrap gap-1.5 p-4",children:w.map(n=>s("li",{"data-testid":"hl-shard",children:s(F,{variant:"secondary",children:n})},n))})]})]})};export{ot as HealthPanel};
@@ -0,0 +1 @@
1
+ import{c as B}from"react/compiler-runtime";import{useLunora as ee}from"@lunora/react";import{useNavigate as te}from"@tanstack/react-router";import{useState as I,useRef as ne,useCallback as j,useEffect as O,useEffectEvent as ae,useMemo as re}from"react";import{ShardInput as ie}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as se}from"../packem_shared/button-BkCrNcAs.js";import{N as H}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import oe from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as K}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as T}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{f as E,d as q,g as J}from"../packem_shared/internal-BSIsQVC6.js";import{r as le}from"../packem_shared/shard-history-DMEW5VBE.js";import{E as U,A as ce}from"../packem_shared/advisor-view-Pa8HLtBv.js";import{ConfirmButton as de}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{jsx as w}from"react/jsx-runtime";import{deriveInsights as ue}from"../packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{runAdvisor as fe,RUNTIME_LINTS as me}from"@lunora/advisor";const he=t=>{const{suggestedIndex:e,table:r}=t;return!(typeof r!="string"||r.length===0||typeof e!="object"||e===null||!Array.isArray(e.fields)||e.fields.length===0)},pe=(t,e,r)=>{const n=`"${t}"`,a=`"${e}"`,l=r.map(o=>`"${o}"`).join(", ");return`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${l});`},ge=t=>{const e=B(19),{fields:r,indexName:n,table:a,testId:l}=t,o=K(),[x,d]=I(!1);let u;e[0]!==r||e[1]!==n||e[2]!==a?(u=()=>{const v="navigator"in globalThis?globalThis.navigator.clipboard:void 0;if(v===void 0)return;const b=pe(a,n,r);E(v.writeText(b)),d(!0)},e[0]=r,e[1]=n,e[2]=a,e[3]=u):u=e[3];const m=u;if(x){const v=`${l}-applied`;let b;e[4]!==o?(b=o("CREATE INDEX SQL copied to clipboard."),e[4]=o,e[5]=b):b=e[5];let S;return e[6]!==v||e[7]!==b?(S=w("span",{className:"text-xs text-muted-foreground","data-testid":v,children:b}),e[6]=v,e[7]=b,e[8]=S):S=e[8],S}let h;e[9]!==o?(h=o("Apply?"),e[9]=o,e[10]=h):h=e[10];let f;e[11]!==o||e[12]!==a?(f=o("Apply index on {table}",{table:a}),e[11]=o,e[12]=a,e[13]=f):f=e[13];let g;return e[14]!==m||e[15]!==h||e[16]!==f||e[17]!==l?(g=w(de,{confirmLabel:h,onConfirm:m,testId:l,children:f}),e[14]=m,e[15]=h,e[16]=f,e[17]=l,e[18]=g):g=e[18],g},be=(t,e)=>{const r=new Map;for(const n of e){const a=`${n.table} ${n.index}`;r.set(a,(r.get(a)??0)+n.reads)}return t.map(n=>({index:n.index,reads:r.get(`${n.table} ${n.index}`)??0,table:n.table}))},ve=t=>{const e=new Map;for(const r of t)for(const n of r.scannedTables??[])e.set(n.table,(e.get(n.table)??0)+n.scans);return[...e].map(([r,n])=>({scans:n,table:r}))},xe=(t,e)=>e.map(r=>({index:r.name,table:t})),ye=t=>{const e=be(t.declaredIndexes??[],t.indexHits??[]),r=ve(t.functions??[]),n=t.shardTraffic??[],a=t.analyticsMetrics,l=a&&a.indexHits.length>0?a.indexHits:e,o=a&&a.tableScans.length>0?a.tableScans:r,x=a&&a.shardTraffic.length>0?a.shardTraffic:n,d=fe({indexHits:l,schema:{tables:[]},shardTraffic:x,tableScans:o},{lints:me,source:"runtime"}),u=t.suppressHotScanTables;return(u===void 0?d:d.filter(m=>!(m.metadata.kind==="hot_scan"&&typeof m.metadata.table=="string"&&u.has(m.metadata.table)))).map(m=>U(m))},$e=J(T.listTables),we=J(T.listTableIndexes),M=t=>`${(t*100).toFixed(1)}%`,D=t=>`${(t/1e3).toFixed(2)}s`,Se=t=>{if(t.length<=1)return t[0]??"";const e=t[t.length-1]??"";return`${t.slice(0,-1).join(", ")} and ${e}`},Te=(t,e)=>({"high-error-rate":t("High error rate"),"high-evictions":t("High cache eviction rate"),"high-write-contention":t("High write contention"),"low-cache-hit-rate":t("Low cache hit rate"),"missing-index":t("Missing index"),"slow-function":t("Slow function")})[e.kind],X=(t,e)=>({"high-error-rate":t("{rate} of calls failed.",{rate:M(e.value)}),"high-evictions":t("{count} entries evicted recently.",{count:e.value}),"high-write-contention":t("{rate} of calls hit a write conflict — consider sharding to cut contention.",{rate:M(e.value)}),"low-cache-hit-rate":t("{rate} hit rate over recent traffic.",{rate:M(e.value)}),"missing-index":t("Slowest call took {duration} — it full-scanned {tables} with no index.",{duration:D(e.value),tables:Se(e.tables??[])}),"slow-function":t("Slowest call took {duration}.",{duration:D(e.value)})})[e.kind],Ie=t=>{const e=B(10),{onJump:r,table:n}=t,a=K();let l;e[0]!==r||e[1]!==n?(l=()=>{r(n)},e[0]=r,e[1]=n,e[2]=l):l=e[2];const o=l,x=`in-add-index-${n}`;let d;e[3]!==a||e[4]!==n?(d=a("Add index on {table}",{table:n}),e[3]=a,e[4]=n,e[5]=d):d=e[5];let u;return e[6]!==o||e[7]!==x||e[8]!==d?(u=w(se,{"data-testid":x,onClick:o,size:"sm",type:"button",variant:"outline",children:d}),e[6]=o,e[7]=x,e[8]=d,e[9]=u):u=e[9],u},Be=({initialShardKey:t,loadShardTraffic:e})=>{const r=ee(),n=te(),a=K(),[l,o]=I(t??""),[x,d]=I(null),[u,m]=I(null),h=oe(l.trim(),400),f=ne(""),g=H(T.getMetrics,{},{live:!0,shardKey:h}),v=H(T.getFunctionStats,{},{live:!0,shardKey:h}),b=H(T.getAdvisories,{},{live:!0,shardKey:h}),S=g.data??null,C=v.data?.functions??null,L=b.data?.advisories??null,z=g.data?.indexHits??null,_=g.error!==null&&v.error!==null?g.error:null,P=e??(i=>r.shardTraffic(i)),V=async(i,$)=>{const s=i[0];if(s===void 0||s===""){f.current===$&&m(null);return}try{const y=await P(s);if(f.current!==$)return;const p=new Map;for(const c of y.shards)p.has(c.shardKey)||p.set(c.shardKey,{requests:c.requests,shardKey:c.shardKey});m([...p.values()])}catch{f.current===$&&m(null)}},A=j(async i=>{f.current=i;let $=[];try{const s=await r.query($e,{},q(i));if(f.current!==i)return;le(i),$=s.map(c=>c.name);const y=await Promise.allSettled(s.map(async c=>[c.name,await r.query(we,{table:c.name},q(i))]));if(f.current!==i)return;const p=[];for(const c of y)if(c.status==="fulfilled"){const[k,Z]=c.value;p.push(...xe(k,Z.indexes))}d(p)}catch{f.current===i&&d(null)}await V($,i)},[r]);O(()=>{E(A(h))},[h,A]);const G=ae(()=>{g.refetch(),v.refetch(),b.refetch(),E(A(h))});O(()=>{const i=()=>{document.visibilityState==="visible"&&G()};return document.addEventListener("visibilitychange",i),()=>{document.removeEventListener("visibilitychange",i)}},[]);const R=j(i=>{E(n({search:{table:i},to:"/schema"}))},[n]),N=ue(S,C),Q=new Set(N.filter(i=>i.kind==="missing-index").flatMap(i=>i.tables??[])),F=ye({declaredIndexes:x??[],functions:C,indexHits:z,shardTraffic:u,suppressHotScanTables:Q}),W=re(()=>{const i=N.map(s=>{const y=s.kind==="missing-index"?s.tables??[]:[];return{action:y.length>0?y.map(p=>w(Ie,{onJump:R,table:p},p)):void 0,description:s.message===void 0?X(a,s):`${X(a,s)} — ${s.message}`,entity:s.fn,issueType:Te(a,s),key:`${s.kind}:${s.fn??""}`,level:s.severity}}),$=new Set(["unindexed_foreign_key","unindexed_relation_target"]);return[...(L??[]).map(s=>{const y=U(s);if($.has(s.name)&&he(s.metadata)){const{table:p,suggestedIndex:c}=s.metadata,k=`in-apply-index-${p}-${c.name}`;return{...y,action:w(ge,{fields:c.fields,indexName:c.name,table:p,testId:k})}}return y}),...F,...i]},[L,N,R,F,a]),Y=w(ie,{onChange:o,testId:"in-shard-input",value:l});return w(ce,{error:_,errorSource:_===null?void 0:g.errorSource,rows:W,testId:"lunora-insights",toolbar:Y})};export{Be as InsightsPanel};
@@ -0,0 +1 @@
1
+ import{c as M}from"react/compiler-runtime";import{useVirtualizer as qe}from"@tanstack/react-virtual";import{useState as $,useReducer as Me,useRef as ie,useEffect as de,useMemo as Ae}from"react";import{f as Q}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Oe}from"../packem_shared/error-alert-t6cpEi0z.js";import{L as Fe}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as De}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as Y}from"../packem_shared/badge-BbuuAio7.js";import{E as B}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as _}from"../packem_shared/input-JHu63lTv.js";import{N as re}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import G from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as ce}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as te}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{b as ue}from"../packem_shared/cf-links-gbDy51nR.js";import{r as Ue}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as q}from"../packem_shared/utils-bhneXptQ.js";import{l as Ke}from"../packem_shared/virtual-rect-1o1veP7R.js";import{useLunora as Ve}from"@lunora/react";import{u as ze}from"../packem_shared/button-BkCrNcAs.js";import{n as je,d as Be,m as me,p as P,f as Ge,u as T}from"../packem_shared/table-DdJBrClo.js";import{f as ae,l as We,b as le}from"../packem_shared/internal-BSIsQVC6.js";import{jsx as t,jsxs as w,Fragment as Qe}from"react/jsx-runtime";const he=["trace","debug","log","info","warn","error","fatal"],Ye="LOG_ARCHIVE_NOT_CONFIGURED",ge={debug:"secondary",error:"destructive",fatal:"destructive",info:"outline",log:"outline",trace:"outline",warn:"secondary"},He={cursor:void 0,error:null,loading:!1,notConfigured:!1,rows:null},Je=(l,e)=>{switch(e.type){case"append":return{...l,cursor:e.cursor,error:null,loading:!1,rows:[...l.rows??[],...e.rows]};case"failed":return{cursor:void 0,error:e.message,loading:!1,notConfigured:!1,rows:null};case"loaded":return{cursor:e.cursor,error:null,loading:!1,notConfigured:!1,rows:e.rows};case"loading":return{...l,error:null,loading:!0,notConfigured:!1};case"notConfigured":return{cursor:void 0,error:null,loading:!1,notConfigured:!0,rows:null};case"pageFailed":return{...l,error:e.message,loading:!1};default:return l}},Xe=l=>{const e=M(33),{row:r}=l;let s;e[0]!==r.fields?(s=Q(r.fields),e[0]=r.fields,e[1]=s):s=e[1];const n=s,a=`lg-archive-row-${String(r.ts)}`;let i;e[2]!==r.ts?(i=new Date(r.ts).toLocaleString(),e[2]=r.ts,e[3]=i):i=e[3];let u;e[4]!==i?(u=t(T,{className:"tabular-nums whitespace-nowrap text-xs text-muted-foreground",children:i}),e[4]=i,e[5]=u):u=e[5];const v=ge[r.level];let c;e[6]!==r.level||e[7]!==v?(c=t(T,{children:t(Y,{variant:v,children:r.level})}),e[6]=r.level,e[7]=v,e[8]=c):c=e[8];let d;e[9]!==r.functionPath?(d=t(T,{className:"font-mono text-xs",children:r.functionPath}),e[9]=r.functionPath,e[10]=d):d=e[10];let b;e[11]!==r.message?(b=t("div",{className:"truncate",title:r.message,children:r.message}),e[11]=r.message,e[12]=b):b=e[12];let f;e[13]!==n?(f=n!==""&&t("div",{className:"truncate font-mono text-[11px] text-muted-foreground",title:n,children:n}),e[13]=n,e[14]=f):f=e[14];let m;e[15]!==b||e[16]!==f?(m=w(T,{className:"max-w-md",children:[b,f]}),e[15]=b,e[16]=f,e[17]=m):m=e[17];const h=r.traceId??"—";let p;e[18]!==h?(p=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:h}),e[18]=h,e[19]=p):p=e[19];const L=r.shardKey??"—";let g;e[20]!==L?(g=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:L}),e[20]=L,e[21]=g):g=e[21];const x=r.userId??"—";let y;e[22]!==x?(y=t(T,{className:"font-mono text-[11px] text-muted-foreground",children:x}),e[22]=x,e[23]=y):y=e[23];let C;return e[24]!==m||e[25]!==p||e[26]!==g||e[27]!==y||e[28]!==a||e[29]!==u||e[30]!==c||e[31]!==d?(C=w(me,{"data-testid":a,children:[u,c,d,m,p,g,y]}),e[24]=m,e[25]=p,e[26]=g,e[27]=y,e[28]=a,e[29]=u,e[30]=c,e[31]=d,e[32]=C):C=e[32],C},Ze=({shardKey:l})=>{const e=Ve(),r=ce(),[s,n]=$(""),[a,i]=$(""),[u,v]=$(""),[{cursor:c,error:d,loading:b,notConfigured:f,rows:m},h]=Me(Je,He),p=G(s.trim(),400),L=G(a.trim(),400),g={...p===""?{}:{functionPathPrefix:p},...u===""?{}:{minLevel:u},...l===""?{}:{shardKey:l},...L===""?{}:{userId:L}},x=JSON.stringify(g),y=ie(x);de(()=>{const N={cancelled:!1};return y.current=x,ae((async()=>{h({type:"loading"});try{const k=await e.queryLogArchive(g);N.cancelled||h({cursor:k.nextCursor,rows:k.rows,type:"loaded"})}catch(k){N.cancelled||h(We(k)===Ye?{type:"notConfigured"}:{message:le(k),type:"failed"})}})()),()=>{N.cancelled=!0}},[e,x]);const C=async()=>{if(c===void 0)return;const N=x;h({type:"loading"});try{const k=await e.queryLogArchive({...g,cursor:c});y.current===N&&h({cursor:k.nextCursor,rows:k.rows,type:"append"})}catch(k){y.current===N&&h({message:le(k),type:"pageFailed"})}},R=N=>{n(N.target.value)},S=N=>{i(N.target.value)},I=N=>{v(N.target.value)},E=()=>{ae(C())};return f?t(B,{action:t("a",{className:"text-sm text-primary underline-offset-4 hover:underline",href:ue,rel:"noreferrer",target:"_blank",children:r("Open in Cloudflare")}),description:r("Wire pipelineLogSink to a Cloudflare Pipeline → R2 Data Catalog table and set R2_SQL_ACCOUNT_ID, R2_SQL_TOKEN, R2_SQL_BUCKET to browse the durable log archive here."),testId:"lg-archive-not-configured",title:r("Log archive not configured")}):w("div",{className:"flex flex-col gap-4","data-testid":"lg-archive",children:[w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":r("Function path prefix"),className:"h-8 w-48","data-testid":"lg-archive-path",onChange:R,placeholder:r("function path…"),value:s}),t(_,{"aria-label":r("User id"),className:"h-8 w-40","data-testid":"lg-archive-user",onChange:S,placeholder:r("user id…"),value:a}),w("select",{"aria-label":r("Minimum level"),className:"h-8 rounded-md border border-border bg-background px-2 text-sm","data-testid":"lg-archive-min-level",onChange:I,value:u,children:[t("option",{value:"",children:r("min level")}),he.map(N=>t("option",{value:N,children:N},N))]})]}),d!==null&&t("p",{className:"text-sm text-destructive","data-testid":"lg-archive-error",role:"alert",children:d}),b&&m===null&&d===null&&t("p",{className:"text-sm text-muted-foreground","data-testid":"lg-archive-loading",children:r("Loading…")}),m!==null&&m.length===0&&t(B,{description:r("No archived logs match these filters. The durable archive fills as pipelineLogSink flushes records to R2."),testId:"lg-archive-empty",title:r("No archived logs.")}),m!==null&&m.length>0&&t("div",{className:"overflow-hidden rounded-xl border border-border shadow-xs",children:w(je,{"data-testid":"lg-archive-table",children:[t(Be,{children:w(me,{children:[t(P,{children:r("Time")}),t(P,{children:r("Level")}),t(P,{children:r("Function")}),t(P,{children:r("Message")}),t(P,{children:r("Trace")}),t(P,{children:r("Shard")}),t(P,{children:r("User")})]})}),t(Ge,{children:m.map((N,k)=>t(Xe,{row:N},`${String(N.ts)}-${String(k)}`))})]})}),c!==void 0&&t("div",{children:t(ze,{"data-testid":"lg-archive-more",disabled:b,onClick:E,size:"sm",variant:"outline",children:r(b?"Loading…":"Load more")})})]})},W=400,er=36,rr={height:W,overflow:"auto"},fe={left:0,position:"absolute",top:0,width:"100%"},tr={error:"destructive",ok:"secondary"},ar=l=>{const e=M(26),{entry:r,index:s,measureRef:n,start:a}=l,i=`translateY(${String(a)}px)`;let u;e[0]!==i?(u={...fe,transform:i},e[0]=i,e[1]=u):u=e[1];const v=u;let c;e[2]!==r.fields?(c=Q(r.fields),e[2]=r.fields,e[3]=c):c=e[3];const d=c;let b;e[4]!==r.timestamp?(b=new Date(r.timestamp).toLocaleString(),e[4]=r.timestamp,e[5]=b):b=e[5];let f;e[6]!==b?(f=t("span",{className:"w-44 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:b}),e[6]=b,e[7]=f):f=e[7];const m=ge[r.level];let h;e[8]!==r.level||e[9]!==m?(h=t("span",{className:"w-20 shrink-0",role:"gridcell",children:t(Y,{variant:m,children:r.level})}),e[8]=r.level,e[9]=m,e[10]=h):h=e[10];const p=r.functionPath??"—";let L;e[11]!==p?(L=t("span",{className:"w-48 shrink-0 truncate text-muted-foreground",role:"gridcell",children:p}),e[11]=p,e[12]=L):L=e[12];let g;e[13]!==d?(g=d===""?null:t("span",{className:"ml-2 text-muted-foreground","data-testid":"lg-fields",children:d}),e[13]=d,e[14]=g):g=e[14];let x;e[15]!==r.message||e[16]!==g?(x=w("span",{className:"flex-1 truncate",role:"gridcell",children:[r.message,g]}),e[15]=r.message,e[16]=g,e[17]=x):x=e[17];let y;return e[18]!==s||e[19]!==n||e[20]!==v||e[21]!==x||e[22]!==f||e[23]!==h||e[24]!==L?(y=w("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":s,"data-testid":"lg-row",ref:n,role:"row",style:v,children:[f,h,L,x]}),e[18]=s,e[19]=n,e[20]=v,e[21]=x,e[22]=f,e[23]=h,e[24]=L,e[25]=y):y=e[25],y},oe=l=>l.length===0?"—":l.join(", "),lr=l=>{const e=M(37),{entry:r,index:s,measureRef:n,start:a}=l,i=`translateY(${String(a)}px)`;let u;e[0]!==i?(u={...fe,transform:i},e[0]=i,e[1]=u):u=e[1];const v=u;let c;e[2]!==r.ts?(c=new Date(r.ts).toLocaleString(),e[2]=r.ts,e[3]=c):c=e[3];let d;e[4]!==c?(d=t("span",{className:"w-40 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:c}),e[4]=c,e[5]=d):d=e[5];const b=tr[r.outcome];let f;e[6]!==r.outcome||e[7]!==b?(f=t("span",{className:"w-16 shrink-0",role:"gridcell",children:t(Y,{variant:b,children:r.outcome})}),e[6]=r.outcome,e[7]=b,e[8]=f):f=e[8];let m;e[9]!==r.functionPath?(m=t("span",{className:"w-44 shrink-0 truncate",role:"gridcell",title:r.functionPath,children:r.functionPath}),e[9]=r.functionPath,e[10]=m):m=e[10];const h=r.shardKey??"—";let p;e[11]!==h?(p=t("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:h}),e[11]=h,e[12]=p):p=e[12];const L=r.userId??"—";let g;e[13]!==L?(g=t("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:L}),e[13]=L,e[14]=g):g=e[14];let x;e[15]!==r.durationMs?(x=Math.round(r.durationMs),e[15]=r.durationMs,e[16]=x):x=e[16];const y=`${String(x)}ms`;let C;e[17]!==y?(C=t("span",{className:"w-16 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:y}),e[17]=y,e[18]=C):C=e[18];let R;e[19]!==r.errorMessage||e[20]!==r.outcome||e[21]!==r.tablesRead||e[22]!==r.tablesWritten?(R=r.outcome==="error"&&r.errorMessage!==void 0?r.errorMessage:`r:${oe(r.tablesRead)} · w:${oe(r.tablesWritten)}`,e[19]=r.errorMessage,e[20]=r.outcome,e[21]=r.tablesRead,e[22]=r.tablesWritten,e[23]=R):R=e[23];let S;e[24]!==R?(S=t("span",{className:"flex-1 truncate text-muted-foreground",role:"gridcell",children:R}),e[24]=R,e[25]=S):S=e[25];let I;return e[26]!==s||e[27]!==n||e[28]!==v||e[29]!==g||e[30]!==C||e[31]!==S||e[32]!==d||e[33]!==f||e[34]!==m||e[35]!==p?(I=w("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":s,"data-testid":"lg-req-row",ref:n,role:"row",style:v,children:[d,f,m,p,g,C,S]}),e[26]=s,e[27]=n,e[28]=v,e[29]=g,e[30]=C,e[31]=S,e[32]=d,e[33]=f,e[34]=m,e[35]=p,e[36]=I):I=e[36],I},se=l=>{const{entries:e}=l??{};return Array.isArray(e)?e:[]},or=l=>{const e={};return l.functionPathPrefix.trim()!==""&&(e.functionPathPrefix=l.functionPathPrefix.trim()),l.userId.trim()!==""&&(e.userId=l.userId.trim()),l.tableTouched.trim()!==""&&(e.tableTouched=l.tableTouched.trim()),(l.outcome==="ok"||l.outcome==="error")&&(e.outcome=l.outcome),e},pe=he,sr={"5m":300*1e3,"15m":900*1e3,"1h":3600*1e3},nr=(l,e)=>{const r=e.search.trim().toLowerCase(),s=e.path.trim().toLowerCase(),n=e.range==="all"?Number.NEGATIVE_INFINITY:e.now-sr[e.range];return l.filter(a=>e.levels.size>0&&!e.levels.has(a.level)||a.timestamp<n||s!==""&&!(a.functionPath??"").toLowerCase().includes(s)?!1:r===""||a.message.toLowerCase().includes(r)||Q(a.fields).toLowerCase().includes(r))},ir="—",dr=l=>{const e=new Map,r=new Map;for(const a of l){e.set(a.level,(e.get(a.level)??0)+1);const i=a.functionPath??ir;r.set(i,(r.get(i)??0)+1)}const s=pe.filter(a=>e.has(a)).map(a=>({count:e.get(a)??0,key:a})),n=[...r.entries()].map(([a,i])=>({count:i,key:a})).toSorted((a,i)=>i.count===a.count?a.key.localeCompare(i.key):i.count-a.count);return{byLevel:s,byPath:n,total:l.length}},cr=l=>{const e=M(11),{level:r,onToggle:s,selected:n}=l;let a;e[0]!==r||e[1]!==s?(a=()=>{s(r)},e[0]=r,e[1]=s,e[2]=a):a=e[2];const i=a,u=n?"border-border bg-muted font-medium":"border-input text-muted-foreground";let v;e[3]!==u?(v=q("rounded-md border px-2 py-1 text-xs",u),e[3]=u,e[4]=v):v=e[4];const c=`logs-level-${r}`;let d;return e[5]!==r||e[6]!==i||e[7]!==n||e[8]!==v||e[9]!==c?(d=t("button",{"aria-pressed":n,className:v,"data-testid":c,onClick:i,type:"button",children:r}),e[5]=r,e[6]=i,e[7]=n,e[8]=v,e[9]=c,e[10]=d):d=e[10],d},ne=l=>{const e=M(7),{bucket:r}=l;let s;e[0]!==r.key?(s=t("span",{className:"truncate text-muted-foreground",role:"gridcell",children:r.key}),e[0]=r.key,e[1]=s):s=e[1];let n;e[2]!==r.count?(n=t("span",{className:"shrink-0 tabular-nums",role:"gridcell",children:r.count}),e[2]=r.count,e[3]=n):n=e[3];let a;return e[4]!==s||e[5]!==n?(a=w("div",{className:"flex items-center justify-between gap-4 px-3 py-1 font-mono text-xs","data-testid":"logs-summary-row",role:"row",children:[s,n]}),e[4]=s,e[5]=n,e[6]=a):a=e[6],a},qr=({initialShardKey:l})=>{const e=ce(),[r,s]=$("requests"),[n,a]=$(l??""),[i,u]=$(""),[v,c]=$(()=>new Set),[d,b]=$(""),[f,m]=$("all"),[h,p]=$(!1),[L,g]=$(""),[x,y]=$(""),[C,R]=$(""),[S,I]=$("all"),E=G(n.trim(),400),N=or({functionPathPrefix:L,outcome:S,tableTouched:C,userId:x}),k=re(te.getRequestLog,N,{enabled:r==="requests",live:!0,shardKey:E}),H=re(te.getLogs,{},{enabled:r==="errors",live:!0,shardKey:E}),D=r==="requests"?k:H,{error:J,errorSource:ve,isLoading:X,liveError:be}=D,xe=se(H.data),Z=se(k.data);de(()=>{D.data!==void 0&&Ue(E)},[D.data,E]);const U=nr(xe,{levels:v,now:Date.now(),path:d,range:f,search:i}),K=dr(U),V=r==="requests"?Z.length:U.length,z=r==="errors"&&h,A=Ae(()=>J!==null?"error":V===0?X?z?"summary":"list":"empty":z?"summary":"list",[V,X,J,z]),ee=ie(null),O=qe({count:V,estimateSize:()=>er,getScrollElement:()=>ee.current,initialRect:{height:W,width:800},observeElementRect:(o,j)=>Ke(o,j,W),overscan:8}),we=O.getVirtualItems(),ye={height:O.getTotalSize(),position:"relative",width:"100%"},Ne=o=>{u(o.target.value)},Le=o=>{c(j=>{const F=new Set(j);return F.has(o)?F.delete(o):F.add(o),F})},Ce=o=>{b(o.target.value)},ke=o=>{m(o.target.value)},$e=()=>{p(o=>!o)},Se=o=>{g(o.target.value)},Re=o=>{y(o.target.value)},Ie=o=>{R(o.target.value)},Ee=o=>{I(o.target.value)},Pe=()=>{s("requests"),p(!1)},Te=()=>{s("errors"),p(!1)},_e=()=>{s("archive"),p(!1)};return w("div",{className:"flex flex-col gap-4","data-testid":"lunora-logs",children:[w("div",{className:"flex flex-wrap items-center gap-2",children:[w("div",{className:"inline-flex overflow-hidden rounded-lg border border-border",role:"tablist",children:[t("button",{"aria-selected":r==="requests",className:q("px-3 py-1 text-sm",r==="requests"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-requests",onClick:Pe,role:"tab",type:"button",children:e("Requests")}),t("button",{"aria-selected":r==="errors",className:q("px-3 py-1 text-sm",r==="errors"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-errors",onClick:Te,role:"tab",type:"button",children:e("Errors")}),t("button",{"aria-selected":r==="archive",className:q("px-3 py-1 text-sm",r==="archive"?"bg-muted font-medium":"text-muted-foreground"),"data-testid":"lg-view-archive",onClick:_e,role:"tab",type:"button",children:e("Archive")})]}),t(De,{onChange:a,testId:"lg-shard-input",value:n}),r!=="archive"&&t(Fe,{message:be,prefix:"lg"}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"lg-cf-link",href:ue,rel:"noreferrer",target:"_blank",children:e("Open in Cloudflare")})]}),r==="errors"&&w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":e("Search messages"),className:"h-8 w-48","data-testid":"lg-search",onChange:Ne,placeholder:e("search message"),value:i}),t(_,{"aria-label":e("Function path"),className:"h-8 w-40","data-testid":"logs-path-filter",onChange:Ce,placeholder:e("filter path"),value:d}),t("div",{"aria-label":e("Level filter"),className:"inline-flex items-center gap-1","data-testid":"logs-level-filter",role:"group",children:pe.map(o=>t(cr,{level:o,onToggle:Le,selected:v.has(o)},o))}),w("select",{"aria-label":e("Time range"),className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"logs-time-range",onChange:ke,value:f,children:[t("option",{value:"all",children:e("All time")}),t("option",{value:"5m",children:e("Last 5m")}),t("option",{value:"15m",children:e("Last 15m")}),t("option",{value:"1h",children:e("Last hour")})]}),t("button",{"aria-pressed":h,className:q("h-8 rounded-md border px-3 text-sm",h?"border-border bg-muted font-medium":"border-input text-muted-foreground"),"data-testid":"logs-summary-toggle",onClick:$e,type:"button",children:e(h?"List":"Summary")})]}),r==="requests"&&w("div",{className:"flex flex-wrap items-center gap-2",children:[t(_,{"aria-label":e("Function path"),className:"h-8 w-44","data-testid":"lg-req-path",onChange:Se,placeholder:e("file:function"),value:L}),t(_,{"aria-label":e("User id"),className:"h-8 w-32","data-testid":"lg-req-user",onChange:Re,placeholder:e("userId"),value:x}),t(_,{"aria-label":e("Table touched"),className:"h-8 w-32","data-testid":"lg-req-table",onChange:Ie,placeholder:e("table"),value:C}),w("select",{"aria-label":e("Outcome filter"),className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"lg-req-outcome",onChange:Ee,value:S,children:[t("option",{value:"all",children:e("all")}),t("option",{value:"ok",children:e("ok")}),t("option",{value:"error",children:e("error")})]})]}),r==="archive"?t(Ze,{shardKey:E}):w(Qe,{children:[A==="error"&&t(Oe,{error:ve,testId:"lg-error"}),A==="empty"&&t(B,{description:e("Function and request logs for this shard show up here as your app handles traffic."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M4 5h16M4 12h16M4 19h10"})}),testId:"lg-empty",title:e("No logs.")}),A==="summary"&&w("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"logs-summary",children:[t("p",{className:"text-xs text-muted-foreground","data-testid":"logs-summary-total",children:e("{count} entries",{count:K.total})}),w("div",{children:[t("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:e("By level")}),t("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-levels",role:"grid",children:K.byLevel.map(o=>t(ne,{bucket:o},o.key))})]}),w("div",{children:[t("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:e("By function")}),t("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-paths",role:"grid",children:K.byPath.map(o=>t(ne,{bucket:o},o.key))})]})]}),A==="list"&&t("div",{className:"rounded-xl border border-border shadow-xs","data-testid":"lg-scroll",ref:ee,style:rr,children:t("div",{"aria-label":e("Recent logs"),"data-testid":"lg-table",role:"grid",style:ye,children:we.map(o=>r==="requests"?t(lr,{entry:Z[o.index],index:o.index,measureRef:O.measureElement,start:o.start},o.key):t(ar,{entry:U[o.index],index:o.index,measureRef:O.measureElement,start:o.start},o.key))})})]})]})};export{qr as LogsPanel,nr as filterLogs,dr as summarizeLogs};
@@ -0,0 +1,2 @@
1
+ import{useLunora as G}from"@lunora/react";import{useState as p}from"react";import{E as J}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as K}from"../packem_shared/badge-BbuuAio7.js";import{u as m}from"../packem_shared/button-BkCrNcAs.js";import{E as Q}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as V}from"../packem_shared/input-JHu63lTv.js";import{p as X}from"../packem_shared/scroll-area-DTEq6Jec.js";import{Separator as Y}from"@base-ui/react/separator";import{c as Z}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as l,Fragment as ee}from"react/jsx-runtime";import{N as te}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as ae}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as re}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as g}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{i as k,f as $,c as ie,d as j,b as T,g as L}from"../packem_shared/internal-BSIsQVC6.js";function de({className:r,orientation:s="horizontal",...a}){return e(Y,{"data-slot":"separator",orientation:s,className:Z("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",r),...a})}const le=L(g.clearCapturedMail),se=L(g.sendTestMail),oe=/https?:\/\/[^\s"'<>)]+/i,z=r=>r===void 0?void 0:oe.exec(r)?.[0],ne=r=>{if(r!==void 0)return z(r.html)??z(r.text)},ce=`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:">`,me=r=>`${ce}${r}`,f=r=>r===void 0?"":Array.isArray(r)?r.join(", "):r,ue=(r,s)=>{const a=s.trim().toLowerCase();return a===""?r:r.filter(u=>`${u.subject} ${f(u.to)}`.toLowerCase().includes(a))},he=(r,s)=>{if(r.length!==0)return r.find(a=>a.id===s)??r[0]},Me=({limit:r=100})=>{const s=G(),a=re(),{data:u,error:b,errorSource:M,isLoading:S,refetch:x}=te(g.getCapturedMail,{limit:r}),[v,h]=p(null),[A,N]=p(null),[c,E]=p("html"),[w,F]=p(""),o=u?.entries??[],y=b??v,O=b===null?v:M,H=async()=>{h(null);try{await s.query(le,{},j("")),N(null),x()}catch(t){h(T(t))}},I=async()=>{h(null);try{await s.query(se,{},j("")),x()}catch(t){h(T(t))}};ae(()=>{x()},!0);const _=()=>{$(H())},q=()=>{$(I())},P=t=>{F(t.currentTarget.value)},D=t=>{const{id:d}=t.currentTarget.dataset;d!==void 0&&N(d)},R=t=>{const d=t.currentTarget.dataset.tab;(d==="headers"||d==="html"||d==="text")&&E(d)},B=t=>a(t==="html"?"HTML":t==="text"?"Plain text":"Headers"),C=ue(o,w),i=he(C,A),n=ne(i),U=()=>{n!==void 0&&ie(n)},W=()=>{n!==void 0&&"window"in globalThis&&globalThis.window.open(n,"_blank","noopener")};return l("div",{className:"flex flex-col gap-4","data-testid":"mail-panel",children:[l("div",{className:"flex flex-wrap items-center gap-2",children:[e(m,{"data-testid":"mail-send-test",onClick:q,size:"sm",type:"button",variant:"outline",children:a("Send test")}),e(m,{"data-testid":"mail-clear",disabled:o.length===0,onClick:_,size:"sm",type:"button",variant:"outline",children:a("Clear inbox")}),o.length>0&&e(K,{className:"ml-auto","data-testid":"mail-count",variant:"secondary",children:a("{count} messages",{count:o.length})})]}),y!==null&&e(J,{error:O,testId:"mail-error"}),y===null&&!S&&o.length===0&&e(Q,{description:a("Email your app sends in dev is captured here — nothing is delivered."),icon:l("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[e("path",{d:"M4 5h16v14H4z"}),e("path",{d:"m4 6 8 6 8-6"})]}),testId:"mail-empty",title:a("No captured email.")}),o.length>0&&l("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[minmax(0,22rem)_1fr]","data-testid":"mail-reader",children:[l("div",{className:"flex flex-col gap-2",children:[e(V,{"aria-label":a("Search messages"),"data-testid":"mail-search",onChange:P,placeholder:a("Filter messages"),type:"search",value:w}),e(X,{className:"max-h-[32rem] rounded-xl border border-border bg-card shadow-xs","data-testid":"mail-list",children:e("ul",{className:"divide-y",children:C.map(t=>{const d=t.id===i?.id;return e("li",{children:l("button",{className:`flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left text-sm hover:bg-muted/60 ${d?"bg-muted":""}`,"data-active":d,"data-id":t.id,"data-testid":"mail-list-item",onClick:D,type:"button",children:[e("span",{className:"w-full truncate font-medium",children:t.subject||a("(no subject)")}),e("span",{className:"w-full truncate text-xs text-muted-foreground",children:f(t.to)}),e("span",{className:"text-xs text-muted-foreground tabular-nums",children:k(t.capturedAt,"—")})]})},t.id)})})})]}),i!==void 0&&l("div",{className:"flex min-w-0 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"mail-detail",children:[l("div",{className:"flex flex-col gap-1",children:[e("h2",{className:"truncate text-base font-semibold","data-testid":"mail-subject",children:i.subject||a("(no subject)")}),l("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs text-muted-foreground",children:[e("dt",{children:a("From")}),e("dd",{className:"truncate font-mono",children:i.from??"—"}),e("dt",{children:a("To")}),e("dd",{className:"truncate font-mono",children:f(i.to)}),i.cc!==void 0&&i.cc.length>0&&l(ee,{children:[e("dt",{children:a("Cc")}),e("dd",{className:"truncate font-mono",children:f(i.cc)})]}),e("dt",{children:a("Sent")}),e("dd",{className:"tabular-nums",children:k(i.capturedAt,"—")})]})]}),l("div",{className:"flex flex-wrap items-center gap-2","data-testid":"mail-actions",children:[e(m,{"data-testid":"mail-copy-link",disabled:n===void 0,onClick:U,size:"sm",type:"button",variant:"outline",children:a("Copy link")}),e(m,{"data-testid":"mail-open-link",disabled:n===void 0,onClick:W,size:"sm",type:"button",variant:"outline",children:a("Open in new tab")})]}),e(de,{}),e("div",{className:"flex items-center gap-1","data-testid":"mail-tabs",role:"tablist",children:["html","text","headers"].map(t=>e(m,{"aria-selected":c===t,"data-tab":t,"data-testid":`mail-tab-${t}`,onClick:R,role:"tab",size:"sm",type:"button",variant:c===t?"secondary":"ghost",children:B(t)},t))}),l("div",{className:"min-h-[12rem]",children:[c==="html"&&(i.html===void 0?e("p",{className:"text-sm text-muted-foreground",children:a("No HTML body.")}):e("iframe",{className:"h-[24rem] w-full rounded-md border bg-white","data-testid":"mail-preview-html",sandbox:"",srcDoc:me(i.html),title:a("Email preview")})),c==="text"&&(i.text===void 0?e("p",{className:"text-sm text-muted-foreground",children:a("No text body.")}):e("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-text",children:i.text})),c==="headers"&&(i.headers===void 0||Object.keys(i.headers).length===0?e("p",{className:"text-sm text-muted-foreground",children:a("No headers.")}):e("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-headers",children:Object.entries(i.headers).map(([t,d])=>`${t}: ${d}`).join(`
2
+ `)}))]})]})]})]})};export{Me as MailPanel};
@@ -0,0 +1 @@
1
+ import{c as Re}from"react/compiler-runtime";import{useLunora as pt}from"@lunora/react";import{useNavigate as xt}from"@tanstack/react-router";import{useState as ue,useRef as Ge,useEffect as tt,useMemo as bt}from"react";import{L as vt}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as yt}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as rt}from"../packem_shared/button-BkCrNcAs.js";import{c as he,u as ge,n as Qe,f as Ue,m as Nt}from"../packem_shared/card-CIDGUN6K.js";import{p as ie,d as ct,m as Be,u as se,n as mt,f as ut}from"../packem_shared/table-DdJBrClo.js";import{N as He}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import wt from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as Ae}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Oe}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{c as St}from"../packem_shared/cf-links-gbDy51nR.js";import{l as $t,k as Xe,f as at,d as kt,b as qt,g as _t}from"../packem_shared/internal-BSIsQVC6.js";import{r as Mt,l as It}from"../packem_shared/shard-history-DMEW5VBE.js";import{w as Ct}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{f as Tt}from"../packem_shared/log-fields-CoL3hsIQ.js";import{g as et}from"../packem_shared/badge-BbuuAio7.js";import{S as ht}from"../packem_shared/sparkline-CgjeUU2I.js";import{jsx as t,jsxs as n,Fragment as Ye}from"react/jsx-runtime";import{aggregateMetrics as Dt,computeLatencyPercentiles as Ft,enrichQueryStats as Lt,shardsToAggregate as Ot}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{ResponsiveContainer as st,AreaChart as Rt,CartesianGrid as lt,XAxis as nt,YAxis as it,Tooltip as ot,Area as At,LineChart as zt,Line as Kt}from"recharts";import{E as Et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{c as jt}from"../packem_shared/utils-bhneXptQ.js";import{N as Qt,y as Ut,k as Pe,_ as Pt,w as Jt}from"../packem_shared/select-Bul-DeII.js";const Bt=(s,e)=>s<e?-1:s>e?1:0,Ze=s=>{if(s===void 0)return"null";if(typeof s=="bigint")throw new TypeError("stableStringify: cannot use a bigint in a stable JSON cache key — pass it as a string, or use stableWireKey");if(s===null||typeof s!="object")return JSON.stringify(s);if(Array.isArray(s))return`[${s.map(u=>Ze(u)).join(",")}]`;const e=Object.getPrototypeOf(s);if(e!==null&&e!==Object.prototype){const u=s.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${u} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const l=s,r=Object.keys(l).toSorted(Bt),a=[];for(const u of r){const c=l[u];c!==void 0&&a.push(`${JSON.stringify(u)}:${Ze(c)}`)}return`{${a.join(",")}}`},gt=(s,e,l)=>`${s}:${e}:${Ze(l??{})}`,ft=(s,e)=>s==="gauge"?e.last:s==="histogram"?e.sum/Math.max(1,e.count):e.sum,Ht=(s,e)=>ft(s,e),Wt=s=>ft(s.kind,s),Ve=s=>Number.isInteger(s)?s.toLocaleString():s.toLocaleString(void 0,{maximumFractionDigits:2}),Gt=s=>Array.isArray(s?.series)?s.series:[],Xt="FUNCTION_NOT_FOUND",Yt=s=>{const e=new Map;if(!Array.isArray(s?.series))return e;for(const l of s.series)e.set(gt(l.kind,l.name,l.attributes),l.points);return e},Vt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=s=>{const e=Re(18),{name:l,onOpenTrace:r,traceId:a}=s,u=Ae();if(a===void 0){let m;return e[0]===Symbol.for("react.memo_cache_sentinel")?(m=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=m):m=e[0],m}let c;e[1]!==a?(c=a.slice(0,8),e[1]=a,e[2]=c):c=e[2];const g=c;if(r===void 0){const m=`mt-instrument-trace-${l}`;let b;return e[3]!==g||e[4]!==m||e[5]!==a?(b=t("span",{className:"text-muted-foreground","data-testid":m,title:a,children:g}),e[3]=g,e[4]=m,e[5]=a,e[6]=b):b=e[6],b}const p=`mt-instrument-trace-${l}`;let x;e[7]!==r||e[8]!==a?(x=()=>{r(a)},e[7]=r,e[8]=a,e[9]=x):x=e[9];let v;e[10]!==u||e[11]!==a?(v=u("Open the exemplar trace {trace}",{trace:a}),e[10]=u,e[11]=a,e[12]=v):v=e[12];let h;return e[13]!==g||e[14]!==p||e[15]!==x||e[16]!==v?(h=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":p,onClick:x,title:v,type:"button",children:g}),e[13]=g,e[14]=p,e[15]=x,e[16]=v,e[17]=h):h=e[17],h},er=s=>{const e=Re(105),{onOpenTrace:l,shardKey:r}=s,a=Ae();let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u={},e[0]=u):u=e[0];let c;e[1]!==r?(c={live:!0,shardKey:r},e[1]=r,e[2]=c):c=e[2];const{data:g,error:p,errorSource:x}=He(Oe.getMetricSeries,u,c);let v;e[3]===Symbol.for("react.memo_cache_sentinel")?(v={},e[3]=v):v=e[3];let h;e[4]!==r?(h={live:!0,shardKey:r},e[4]=r,e[5]=h):h=e[5];const{data:m}=He(Oe.getMetricHistory,v,h);let b,O,k,C,R,o,y,$,T,D,_,N,A;if(e[6]!==g||e[7]!==p||e[8]!==x||e[9]!==m||e[10]!==l||e[11]!==a){$=Symbol.for("react.early_return_sentinel");e:{const de=Gt(g),ce=$t(x)===Xt;if(p!==null&&!ce){let i;e[25]!==a?(i=a("Instruments"),e[25]=a,e[26]=i):i=e[26];let I;e[27]!==i?(I=t("h3",{className:"text-sm font-semibold text-foreground",children:i}),e[27]=i,e[28]=I):I=e[28];let F;e[29]!==p||e[30]!==a?(F=a("Instruments unavailable: {error}",{error:p}),e[29]=p,e[30]=a,e[31]=F):F=e[31];let L;e[32]!==F?(L=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:F}),e[32]=F,e[33]=L):L=e[33];let ae;e[34]!==I||e[35]!==L?(ae=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[I,L]}),e[34]=I,e[35]=L,e[36]=ae):ae=e[36],$=ae;break e}if(de.length===0){$=null;break e}const Fe=Yt(m);let d;e[37]!==a?(d=i=>a(i==="counter"?"Counter":i==="gauge"?"Gauge":"Histogram"),e[37]=a,e[38]=d):d=e[38];const K=d;R="flex flex-col gap-2",o="mt-instruments";let w;e[39]!==a?(w=a("Instruments"),e[39]=a,e[40]=w):w=e[40],e[41]!==w?(y=t("h3",{className:"text-sm font-semibold text-foreground",children:w}),e[41]=w,e[42]=y):y=e[42],C=he,A="overflow-hidden py-0",k=ge,N="px-0",O=mt,D="mt-instruments-table";let S;e[43]!==a?(S=a("name"),e[43]=a,e[44]=S):S=e[44];let Q;e[45]!==S?(Q=t(ie,{children:S}),e[45]=S,e[46]=Q):Q=e[46];let U;e[47]!==a?(U=a("kind"),e[47]=a,e[48]=U):U=e[48];let P;e[49]!==U?(P=t(ie,{children:U}),e[49]=U,e[50]=P):P=e[50];let J;e[51]!==a?(J=a("value"),e[51]=a,e[52]=J):J=e[52];let B;e[53]!==J?(B=t(ie,{className:"text-right",children:J}),e[53]=J,e[54]=B):B=e[54];let H;e[55]!==a?(H=a("count"),e[55]=a,e[56]=H):H=e[56];let W;e[57]!==H?(W=t(ie,{className:"text-right",children:H}),e[57]=H,e[58]=W):W=e[58];let G;e[59]!==a?(G=a("range"),e[59]=a,e[60]=G):G=e[60];let X;e[61]!==G?(X=t(ie,{className:"text-right",children:G}),e[61]=G,e[62]=X):X=e[62];let Y;e[63]!==a?(Y=a("trend"),e[63]=a,e[64]=Y):Y=e[64];let V;e[65]!==Y?(V=t(ie,{children:Y}),e[65]=Y,e[66]=V):V=e[66];let Z;e[67]!==a?(Z=a("trace"),e[67]=a,e[68]=Z):Z=e[68];let ee;e[69]!==Z?(ee=t(ie,{children:Z}),e[69]=Z,e[70]=ee):ee=e[70];let te;e[71]!==a?(te=a("dimensions"),e[71]=a,e[72]=te):te=e[72];let re;e[73]!==te?(re=t(ie,{children:te}),e[73]=te,e[74]=re):re=e[74],e[75]!==Q||e[76]!==P||e[77]!==B||e[78]!==W||e[79]!==X||e[80]!==V||e[81]!==ee||e[82]!==re?(_=t(ct,{children:n(Be,{children:[Q,P,B,W,X,V,ee,re]})}),e[75]=Q,e[76]=P,e[77]=B,e[78]=W,e[79]=X,e[80]=V,e[81]=ee,e[82]=re,e[83]=_):_=e[83],b=ut,T=de.map(i=>{const I=Tt(i.attributes),F=gt(i.kind,i.name,i.attributes),L=(Fe.get(F)??[]).map(ae=>Ht(i.kind,ae));return n(Be,{"data-testid":`mt-instrument-${i.name}`,children:[t(se,{className:"font-mono text-xs",title:i.functionPath,children:i.name}),t(se,{children:t(et,{variant:Vt[i.kind],children:K(i.kind)})}),t(se,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${i.name}`,children:Ve(Wt(i))}),t(se,{className:"text-right tabular-nums text-muted-foreground",children:i.count.toLocaleString()}),t(se,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:i.min===i.max?"—":`${Ve(i.min)}–${Ve(i.max)}`}),t(se,{children:L.length>=2?t(ht,{ariaLabel:a("{name} trend",{name:i.name}),className:"h-6 w-24 text-foreground",series:L,testId:`mt-instrument-trend-${i.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(se,{className:"font-mono text-xs",children:t(Zt,{name:i.name,onOpenTrace:l,traceId:i.exemplarTraceId})}),t(se,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:I,children:I===""?"—":I})]},F)})}e[6]=g,e[7]=p,e[8]=x,e[9]=m,e[10]=l,e[11]=a,e[12]=b,e[13]=O,e[14]=k,e[15]=C,e[16]=R,e[17]=o,e[18]=y,e[19]=$,e[20]=T,e[21]=D,e[22]=_,e[23]=N,e[24]=A}else b=e[12],O=e[13],k=e[14],C=e[15],R=e[16],o=e[17],y=e[18],$=e[19],T=e[20],D=e[21],_=e[22],N=e[23],A=e[24];if($!==Symbol.for("react.early_return_sentinel"))return $;let j;e[84]!==b||e[85]!==T?(j=t(b,{children:T}),e[84]=b,e[85]=T,e[86]=j):j=e[86];let z;e[87]!==O||e[88]!==j||e[89]!==D||e[90]!==_?(z=n(O,{"data-testid":D,children:[_,j]}),e[87]=O,e[88]=j,e[89]=D,e[90]=_,e[91]=z):z=e[91];let M;e[92]!==k||e[93]!==z||e[94]!==N?(M=t(k,{className:N,children:z}),e[92]=k,e[93]=z,e[94]=N,e[95]=M):M=e[95];let q;e[96]!==C||e[97]!==M||e[98]!==A?(q=t(C,{className:A,children:M}),e[96]=C,e[97]=M,e[98]=A,e[99]=q):q=e[99];let oe;return e[100]!==R||e[101]!==o||e[102]!==y||e[103]!==q?(oe=n("section",{className:R,"data-testid":o,children:[y,q]}),e[100]=R,e[101]=o,e[102]=y,e[103]=q,e[104]=oe):oe=e[104],oe},We=s=>s>=100?"critical":s>=50?"warning":"good",Le=s=>s<1?`${(s*1e3).toFixed(0)}μs`:s<1e3?`${s.toFixed(1)}ms`:`${(s/1e3).toFixed(2)}s`,Je=s=>s>=1e9?`${(s/1e9).toFixed(1)}B`:s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:s.toLocaleString(),tr=s=>{const e=Re(3),{level:l}=s;if(l==="critical"){let a;return e[0]===Symbol.for("react.memo_cache_sentinel")?(a=t(et,{variant:"destructive",children:"Slow"}),e[0]=a):a=e[0],a}if(l==="warning"){let a;return e[1]===Symbol.for("react.memo_cache_sentinel")?(a=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-warning/10 px-2 py-0.5 text-xs font-medium text-warning",children:"Moderate"}),e[1]=a):a=e[1],a}let r;return e[2]===Symbol.for("react.memo_cache_sentinel")?(r=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-success/10 px-2 py-0.5 text-xs font-medium text-success",children:"Fast"}),e[2]=r):r=e[2],r},rr=(s,e)=>{const l=[...s];return l.sort((r,a)=>{switch(e){case"avgTime":return a.avgDurationMs-r.avgDurationMs;case"execCount":return a.execCount-r.execCount;case"rowsRead":return a.rowsRead-r.rowsRead;default:return a.totalDurationMs-r.totalDurationMs}}),l},ar=s=>{const e=Re(161),{queryStats:l}=s,r=Ae(),[a,u]=ue("totalTime");let c;e[0]===Symbol.for("react.memo_cache_sentinel")?(c=new Set,e[0]=c):c=e[0];const[g,p]=ue(c);let x;e[1]===Symbol.for("react.memo_cache_sentinel")?(x=A=>{A!==null&&u(A)},e[1]=x):x=e[1];const v=x;let h,m,b,O,k,C,R,o,y,$;if(e[2]!==g||e[3]!==l||e[4]!==a||e[5]!==r){b=Symbol.for("react.early_return_sentinel");e:{const A=rr(l,a);let j;e[16]!==l?(j=l.filter(sr),e[16]=l,e[17]=j):j=e[17];const z=j.length;let M;e[18]!==l?(M=l.filter(lr),e[18]=l,e[19]=M):M=e[19];const q=M.length;let oe;e[20]!==l?(oe=l.filter(nr),e[20]=l,e[21]=oe):oe=e[21];const de=oe.length;let ce;e[22]===Symbol.for("react.memo_cache_sentinel")?(ce=f=>{p(le=>{const E=new Set(le);return E.has(f)?E.delete(f):E.add(f),E})},e[22]=ce):ce=e[22];const Fe=ce;if(l.length===0){let f;e[23]!==r?(f=r("No query insights yet"),e[23]=r,e[24]=f):f=e[24];let le;e[25]!==f?(le=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:f}),e[25]=f,e[26]=le):le=e[26];let E;e[27]!==r?(E=r("Query insights appear once statements are executed against this shard."),e[27]=r,e[28]=E):E=e[28];let me;e[29]!==E?(me=t("p",{className:"mt-1 text-sm",children:E}),e[29]=E,e[30]=me):me=e[30];let je;e[31]!==le||e[32]!==me?(je=t(he,{children:t(ge,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[le,me]})})}),e[31]=le,e[32]=me,e[33]=je):je=e[33],b=je;break e}R="space-y-4",o="qi-root";let d;e[34]!==r?(d=r("Critical queries"),e[34]=r,e[35]=d):d=e[35];let K;e[36]!==d?(K=t(Qe,{className:"pb-2",children:t(Ue,{className:"text-sm font-medium",children:d})}),e[36]=d,e[37]=K):K=e[37];let w;e[38]!==z?(w=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:z}),e[38]=z,e[39]=w):w=e[39];let S;e[40]!==r?(S=r(">100ms avg execution"),e[40]=r,e[41]=S):S=e[41];let Q;e[42]!==S?(Q=t("p",{className:"text-xs text-muted-foreground",children:S}),e[42]=S,e[43]=Q):Q=e[43];let U;e[44]!==w||e[45]!==Q?(U=n(ge,{children:[w,Q]}),e[44]=w,e[45]=Q,e[46]=U):U=e[46];let P;e[47]!==K||e[48]!==U?(P=n(he,{children:[K,U]}),e[47]=K,e[48]=U,e[49]=P):P=e[49];let J;e[50]!==r?(J=r("Moderate queries"),e[50]=r,e[51]=J):J=e[51];let B;e[52]!==J?(B=t(Qe,{className:"pb-2",children:t(Ue,{className:"text-sm font-medium",children:J})}),e[52]=J,e[53]=B):B=e[53];let H;e[54]!==q?(H=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:q}),e[54]=q,e[55]=H):H=e[55];let W;e[56]!==r?(W=r("50–100ms avg execution"),e[56]=r,e[57]=W):W=e[57];let G;e[58]!==W?(G=t("p",{className:"text-xs text-muted-foreground",children:W}),e[58]=W,e[59]=G):G=e[59];let X;e[60]!==H||e[61]!==G?(X=n(ge,{children:[H,G]}),e[60]=H,e[61]=G,e[62]=X):X=e[62];let Y;e[63]!==B||e[64]!==X?(Y=n(he,{children:[B,X]}),e[63]=B,e[64]=X,e[65]=Y):Y=e[65];let V;e[66]!==r?(V=r("Fast queries"),e[66]=r,e[67]=V):V=e[67];let Z;e[68]!==V?(Z=t(Qe,{className:"pb-2",children:t(Ue,{className:"text-sm font-medium",children:V})}),e[68]=V,e[69]=Z):Z=e[69];let ee;e[70]!==de?(ee=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:de}),e[70]=de,e[71]=ee):ee=e[71];let te;e[72]!==r?(te=r("<50ms avg execution"),e[72]=r,e[73]=te):te=e[73];let re;e[74]!==te?(re=t("p",{className:"text-xs text-muted-foreground",children:te}),e[74]=te,e[75]=re):re=e[75];let i;e[76]!==ee||e[77]!==re?(i=n(ge,{children:[ee,re]}),e[76]=ee,e[77]=re,e[78]=i):i=e[78];let I;e[79]!==Z||e[80]!==i?(I=n(he,{children:[Z,i]}),e[79]=Z,e[80]=i,e[81]=I):I=e[81],e[82]!==P||e[83]!==Y||e[84]!==I?(y=n("div",{className:"grid gap-4 md:grid-cols-3",children:[P,Y,I]}),e[82]=P,e[83]=Y,e[84]=I,e[85]=y):y=e[85];let F;e[86]!==r?(F=r("Query leaderboard"),e[86]=r,e[87]=F):F=e[87];let L;e[88]!==F?(L=t("h3",{className:"text-lg font-semibold",children:F}),e[88]=F,e[89]=L):L=e[89];let ae;e[90]!==a||e[91]!==r?(ae=r("Slow queries sorted by {sortField}",{sortField:r(a)}),e[90]=a,e[91]=r,e[92]=ae):ae=e[92];let fe;e[93]!==ae?(fe=t("p",{className:"text-sm text-muted-foreground",children:ae}),e[93]=ae,e[94]=fe):fe=e[94];let pe;e[95]!==L||e[96]!==fe?(pe=n("div",{children:[L,fe]}),e[95]=L,e[96]=fe,e[97]=pe):pe=e[97];let xe;e[98]!==r?(xe=r("Sort by"),e[98]=r,e[99]=xe):xe=e[99];let be;e[100]!==xe?(be=t("span",{className:"text-sm text-muted-foreground",children:xe}),e[100]=xe,e[101]=be):be=e[101];let ve;e[102]!==r?(ve=r("Sort queries by"),e[102]=r,e[103]=ve):ve=e[103];let ze;e[104]===Symbol.for("react.memo_cache_sentinel")?(ze=t(Qt,{}),e[104]=ze):ze=e[104];let ye;e[105]!==ve?(ye=t(Ut,{"aria-label":ve,className:"w-[140px]","data-testid":"qi-sort",children:ze}),e[105]=ve,e[106]=ye):ye=e[106];let Ne;e[107]!==r?(Ne=r("Total time"),e[107]=r,e[108]=Ne):Ne=e[108];let we;e[109]!==Ne?(we=t(Pe,{value:"totalTime",children:Ne}),e[109]=Ne,e[110]=we):we=e[110];let Se;e[111]!==r?(Se=r("Avg time"),e[111]=r,e[112]=Se):Se=e[112];let $e;e[113]!==Se?($e=t(Pe,{value:"avgTime",children:Se}),e[113]=Se,e[114]=$e):$e=e[114];let ke;e[115]!==r?(ke=r("Execution count"),e[115]=r,e[116]=ke):ke=e[116];let qe;e[117]!==ke?(qe=t(Pe,{value:"execCount",children:ke}),e[117]=ke,e[118]=qe):qe=e[118];let _e;e[119]!==r?(_e=r("Rows read"),e[119]=r,e[120]=_e):_e=e[120];let Me;e[121]!==_e?(Me=t(Pe,{value:"rowsRead",children:_e}),e[121]=_e,e[122]=Me):Me=e[122];let Ie;e[123]!==we||e[124]!==$e||e[125]!==qe||e[126]!==Me?(Ie=n(Pt,{children:[we,$e,qe,Me]}),e[123]=we,e[124]=$e,e[125]=qe,e[126]=Me,e[127]=Ie):Ie=e[127];let Ce;e[128]!==a||e[129]!==ye||e[130]!==Ie?(Ce=n(Jt,{onValueChange:v,value:a,children:[ye,Ie]}),e[128]=a,e[129]=ye,e[130]=Ie,e[131]=Ce):Ce=e[131];let Te;e[132]!==be||e[133]!==Ce?(Te=n("div",{className:"flex items-center gap-2",children:[be,Ce]}),e[132]=be,e[133]=Ce,e[134]=Te):Te=e[134],e[135]!==pe||e[136]!==Te?($=n("div",{className:"flex items-center justify-between",children:[pe,Te]}),e[135]=pe,e[136]=Te,e[137]=$):$=e[137],m=he;let De;e[138]!==r?(De=r("Statements"),e[138]=r,e[139]=De):De=e[139];let Ke;e[140]!==De?(Ke=t(Ue,{children:De}),e[140]=De,e[141]=Ke):Ke=e[141],C=n(Qe,{children:[Ke,t(Nt,{children:r("{count} tracked statements",{count:A.length})})]}),h=ge,O="space-y-2";let Ee;e[142]!==g||e[143]!==r?(Ee=f=>{const le=f.normalizedSql,E=g.has(le),me=We(f.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":E,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{Fe(le)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(tr,{level:me}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:f.normalizedSql})]}),n("div",{className:"flex shrink-0 items-center gap-4",children:[n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Le(f.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:r("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Le(f.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:r("avg")})]}),f.p95DurationMs!==void 0&&n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Le(f.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:r("p95")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Je(f.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:r("calls")})]})]})]}),E&&n("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[n("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:r("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:f.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[f.p50DurationMs!==void 0&&n("div",{children:[t("span",{className:"text-muted-foreground",children:r("p50")}),t("span",{className:"block font-medium tabular-nums",children:Le(f.p50DurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:Je(f.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Le(f.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:Je(f.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:r("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:Je(f.rowsWritten)})]})]})]})]},le)},e[142]=g,e[143]=r,e[144]=Ee):Ee=e[144],k=A.map(Ee)}e[2]=g,e[3]=l,e[4]=a,e[5]=r,e[6]=h,e[7]=m,e[8]=b,e[9]=O,e[10]=k,e[11]=C,e[12]=R,e[13]=o,e[14]=y,e[15]=$}else h=e[6],m=e[7],b=e[8],O=e[9],k=e[10],C=e[11],R=e[12],o=e[13],y=e[14],$=e[15];if(b!==Symbol.for("react.early_return_sentinel"))return b;let T;e[145]!==O||e[146]!==k?(T=t("div",{className:O,children:k}),e[145]=O,e[146]=k,e[147]=T):T=e[147];let D;e[148]!==h||e[149]!==T?(D=t(h,{children:T}),e[148]=h,e[149]=T,e[150]=D):D=e[150];let _;e[151]!==m||e[152]!==D||e[153]!==C?(_=n(m,{children:[C,D]}),e[151]=m,e[152]=D,e[153]=C,e[154]=_):_=e[154];let N;return e[155]!==_||e[156]!==R||e[157]!==o||e[158]!==y||e[159]!==$?(N=n("div",{className:R,"data-testid":o,children:[y,$,_]}),e[155]=_,e[156]=R,e[157]=o,e[158]=y,e[159]=$,e[160]=N):N=e[160],N};function sr(s){return We(s.avgDurationMs)==="critical"}function lr(s){return We(s.avgDurationMs)==="warning"}function nr(s){return We(s.avgDurationMs)==="good"}const ir=["1m","5m","15m","1h"],or=s=>new Date(s).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),dr=s=>s.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:or(e.bucketMs)})),cr=({shardKey:s=""})=>{const e=Ae(),[l,r]=ue("15m"),a=He(Oe.getQueryInsights,{range:l},{live:!0,shardKey:s}).data,u=dr(a?.buckets??[]);return n("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t("div",{className:"flex gap-1 rounded-lg border border-border p-0.5","data-testid":"qi-ranges",role:"group",children:ir.map(c=>t("button",{"aria-pressed":c===l,className:jt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",c===l&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${c}`,onClick:()=>{r(c)},type:"button",children:c},c))}),a?.capped===!0&&t(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),u.length===0?t(Et,{description:e("Statements executed in the selected window appear here, with throughput and latency over time."),testId:"qi-empty",title:e("No queries in this window.")}):n("div",{className:"grid gap-4 lg:grid-cols-2",children:[n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-throughput",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Throughput")}),t(st,{height:140,width:"100%",children:n(Rt,{data:u,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(nt,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(At,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),n("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-latency",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Mean latency (ms)")}),t(st,{height:140,width:"100%",children:n(zt,{data:u,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(nt,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(Kt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(ar,{queryStats:a?.entries??[]})]})},mr=_t(Oe.getMetrics),ur=s=>{const e=Math.floor(s/1e3),l=Math.floor(e/3600),r=Math.floor(e%3600/60),a=e%60;return l>0?`${l.toString()}h ${r.toString()}m`:r>0?`${r.toString()}m ${a.toString()}s`:`${a.toString()}s`},hr=(s,e)=>s?e:"overview",gr=(s,e)=>{const l=s+e;return l===0?"—":`${(s/l*100).toFixed(1)}%`},ne=s=>{const e=Re(16),{chart:l,footer:r,label:a,testId:u,value:c}=s;let g;e[0]!==a?(g=t("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:a}),e[0]=a,e[1]=g):g=e[1];let p;e[2]!==u||e[3]!==c?(p=t("span",{className:"truncate text-2xl font-semibold tabular-nums text-foreground","data-testid":u,children:c}),e[2]=u,e[3]=c,e[4]=p):p=e[4];let x;e[5]!==l||e[6]!==p?(x=n("div",{className:"flex items-center justify-between gap-3",children:[p,l]}),e[5]=l,e[6]=p,e[7]=x):x=e[7];let v;e[8]!==g||e[9]!==x?(v=n("div",{className:"flex flex-col gap-2.5 p-4",children:[g,x]}),e[8]=g,e[9]=x,e[10]=v):v=e[10];let h;e[11]!==r?(h=r!=null&&t("div",{className:"border-t border-border bg-muted/50 px-4 py-2.5 text-[11px] text-muted-foreground",children:r}),e[11]=r,e[12]=h):h=e[12];let m;return e[13]!==v||e[14]!==h?(m=n(he,{className:"justify-between gap-0 py-0",children:[v,h]}),e[13]=v,e[14]=h,e[15]=m):m=e[15],m},dt=s=>s<=0?"—":s<1?`${(s*1e3).toFixed(0)}μs`:s<1e3?`${s.toFixed(1)}ms`:`${(s/1e3).toFixed(2)}s`,jr=({initialShardKey:s})=>{const e=pt(),l=Ae(),r=xt(),[a,u]=ue(s??""),[c,g]=ue("overview"),[p,x]=ue([]),v=Ge(null),h=Ge(null),m=Ge(!0);tt(()=>(m.current=!0,()=>{m.current=!1}),[]);const b=wt(a.trim(),400),O=d=>{Ct({shardKey:b,traceId:d}),at(r({to:"/traces"}))},{data:k,error:C,liveError:R}=He(Oe.getMetrics,{},{live:!0,shardKey:b}),o=k??null;tt(()=>{if(k===void 0)return;Mt(b);const d=k,K=v.current,w=h.current!==null&&h.current!==d.shard;if(h.current=d.shard,v.current=d.requests,w){x([]);return}K!==null&&d.requests>=K&&x(S=>[...S,d.requests-K].slice(-30))},[k,b]);const[y,$]=ue(null),[T,D]=ue(!1),_=async()=>{D(!0);const d=Ot(a,It());try{const K=await Promise.all(d.map(async w=>{try{const S=await e.query(mr,{},kt(w));return{error:null,metrics:S,shard:w===""?S.shard:w}}catch(S){return{error:qt(S),metrics:null,shard:w===""?"__root__":w}}}));m.current&&$(K)}finally{m.current&&D(!1)}},N=y===null?null:Dt(y),A=o===null||o.requests===0?"—":`${(o.errors/o.requests*100).toFixed(1)}%`,j=p.length>0?p.at(-1):0,z=o?Ft(o):{p90:0,p95:0},M=bt(()=>{if(!o||!("queryStats"in o))return;const d=o.queryStats;if(!(!d||!Array.isArray(d)))return Lt(d)},[o]),q=hr(M!==void 0,c),oe=()=>{at(_())},de=()=>{$(null)},ce=()=>{g("overview")},Fe=()=>{g("query-insights")};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(yt,{onChange:u,testId:"mt-shard-input",value:a}),t(vt,{message:R,prefix:"mt"}),t(rt,{"data-testid":"mt-aggregate",disabled:T,onClick:oe,size:"sm",type:"button",variant:"secondary",children:l(T?"Aggregating…":"All shards")}),y!==null&&t(rt,{"data-testid":"mt-aggregate-clear",onClick:de,size:"sm",type:"button",variant:"ghost",children:l("Hide")}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:St,rel:"noreferrer",target:"_blank",children:l("Open in Cloudflare")})]}),C!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:C}),M!==void 0&&n("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${q==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:ce,type:"button",children:l("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${q==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:Fe,type:"button",children:[l("Query insights"),M.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:M.length})]})]}),q==="query-insights"&&M!==void 0&&t(cr,{shardKey:b}),q==="overview"&&o!==null&&n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[t(ne,{chart:p.length>=2?t(ht,{ariaLabel:l("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:p,testId:"mt-sparkline"}):void 0,footer:p.length>=2?n(Ye,{children:[t("span",{className:"font-semibold text-foreground",children:`+${j.toLocaleString()}`})," ",l("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:l("collecting samples…")}),label:l("Requests"),testId:"mt-requests",value:o.requests}),t(ne,{footer:l("{rate} error rate",{rate:A}),label:l("Errors"),testId:"mt-errors",value:n(Ye,{children:[o.errors," (",A,")"]})}),t(ne,{footer:z.p90>0?`P90 ${dt(z.p90)}`:void 0,label:l("P95 latency"),testId:"mt-p95",value:z.p95>0?dt(z.p95):"—"}),t(ne,{footer:o.cache===null?void 0:`${o.cache.entries.toLocaleString()} ${l("cache entries")}`,label:l("Database size"),testId:"mt-db-size",value:Xe(o.databaseSize)}),t(ne,{label:l("Shard"),testId:"mt-shard",value:o.shard}),t(ne,{label:l("Uptime"),testId:"mt-uptime",value:ur(o.uptimeMs)}),t(ne,{label:l("Cache hit rate"),testId:"mt-cache",value:o.cache===null?l("no cache configured"):l("{rate} ({count} entries)",{count:o.cache.entries,rate:gr(o.cache.hits,o.cache.misses)})})]}),q==="overview"&&o===null&&null,q==="overview"&&t(er,{onOpenTrace:O,shardKey:b}),q==="overview"&&N!==null&&y!==null&&n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[t(ne,{label:l("Shards"),testId:"mt-agg-shards",value:N.failed>0?l("{reachable} reachable, {failed} unreachable",{failed:N.failed,reachable:N.reachable}):l("{reachable} reachable",{reachable:N.reachable})}),t(ne,{label:l("Total requests"),testId:"mt-agg-requests",value:N.totalRequests}),t(ne,{label:l("Total errors"),testId:"mt-agg-errors",value:N.totalErrors}),t(ne,{label:l("Total database size"),testId:"mt-agg-db-size",value:Xe(N.totalDatabaseSize)}),t(ne,{label:l("Combined cache hit rate"),testId:"mt-agg-cache",value:N.hitRate===null?l("no cache configured"):`${(N.hitRate*100).toFixed(1)}%`})]}),t(he,{className:"overflow-hidden py-0",children:t(ge,{className:"px-0",children:n(mt,{"data-testid":"mt-agg-table",children:[t(ct,{children:n(Be,{children:[t(ie,{children:l("shard")}),t(ie,{children:l("requests")}),t(ie,{children:l("errors")}),t(ie,{children:l("db size")})]})}),t(ut,{children:y.map(d=>n(Be,{"data-testid":`mt-agg-row-${d.shard}`,children:[t(se,{children:d.shard}),d.metrics===null?t(se,{className:"text-destructive",colSpan:3,children:d.error??l("unreachable")}):n(Ye,{children:[t(se,{className:"tabular-nums",children:d.metrics.requests}),t(se,{className:"tabular-nums",children:d.metrics.errors}),t(se,{className:"tabular-nums",children:Xe(d.metrics.databaseSize)})]})]},d.shard))})]})})})]})]})};export{jr as MetricsPanel};
@@ -0,0 +1 @@
1
+ import{c as W}from"react/compiler-runtime";import{useState as T}from"react";import{E as B}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as _}from"../packem_shared/badge-BbuuAio7.js";import{u as z}from"../packem_shared/button-BkCrNcAs.js";import{c as O,u as U}from"../packem_shared/card-CIDGUN6K.js";import{E as q}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as G}from"../packem_shared/input-JHu63lTv.js";import{n as J,d as K,m as F,p as h,f as Q,u as f}from"../packem_shared/table-DdJBrClo.js";import{N as X}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as Y}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{i as ee}from"../packem_shared/internal-BSIsQVC6.js";import{jsx as t,jsxs as x}from"react/jsx-runtime";const te=e=>e==="ok"?"success":e==="failed"?"destructive":e==="expired"?"warning":"secondary",P=e=>e.endpoint??e.id,ve=()=>{const e=W(38),r=Y(),[i,R]=T("all"),[s,V]=T("");let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g={},e[0]=g):g=e[0];const{data:S,error:o,errorSource:p,isLoading:C,refetch:v}=X(Z.listPushSubscriptions,g);let N;if(e[1]!==S?.subscriptions||e[2]!==o||e[3]!==p||e[4]!==C||e[5]!==i||e[6]!==v||e[7]!==s||e[8]!==r){const A=S?.subscriptions??[],j=s.trim().toLowerCase(),E=A.filter(a=>i!=="all"&&a.kind!==i?!1:j===""?!0:`${P(a)} ${a.userId??""}`.toLowerCase().includes(j));let b;e[10]===Symbol.for("react.memo_cache_sentinel")?(b=a=>{V(a.target.value)},e[10]=b):b=e[10];const D=b;let w;e[11]!==v?(w=()=>{v()},e[11]=v,e[12]=w):w=e[12];const I=w;let y;e[13]===Symbol.for("react.memo_cache_sentinel")?(y=["all","web-push","fcm"],e[13]=y):y=e[13];const H=y;let l;e[14]!==i||e[15]!==r?(l=t("div",{className:"flex items-center gap-1","data-testid":"nt-kind-filter",role:"tablist",children:H.map(a=>t(z,{"aria-selected":i===a,"data-testid":`nt-kind-${a}`,onClick:()=>{R(a)},role:"tab",size:"sm",type:"button",variant:i===a?"secondary":"ghost",children:a==="all"?r("All"):a},a))}),e[14]=i,e[15]=r,e[16]=l):l=e[16];let n;e[17]!==r?(n=r("Filter devices"),e[17]=r,e[18]=n):n=e[18];let c;e[19]!==r?(c=r("filter endpoint, user"),e[19]=r,e[20]=c):c=e[20];let d;e[21]!==s||e[22]!==n||e[23]!==c?(d=t(G,{"aria-label":n,className:"h-8 w-56","data-testid":"nt-search",onChange:D,placeholder:c,value:s}),e[21]=s,e[22]=n,e[23]=c,e[24]=d):d=e[24];let m;e[25]!==r?(m=r("Refresh"),e[25]=r,e[26]=m):m=e[26];let u;e[27]!==I||e[28]!==m?(u=t(z,{className:"ml-auto","data-testid":"nt-refresh",onClick:I,size:"sm",type:"button",variant:"outline",children:m}),e[27]=I,e[28]=m,e[29]=u):u=e[29];const L=A.length>0&&t(_,{"data-testid":"nt-count",variant:"secondary",children:r("{count} devices",{count:A.length})});let $;e[30]!==u||e[31]!==L||e[32]!==l||e[33]!==d?($=x("div",{className:"flex flex-wrap items-center gap-2",children:[l,d,u,L]}),e[30]=u,e[31]=L,e[32]=l,e[33]=d,e[34]=$):$=e[34];let k;e[35]!==o||e[36]!==p?(k=o!==null&&t(B,{error:p,testId:"nt-error"}),e[35]=o,e[36]=p,e[37]=k):k=e[37],N=x("div",{className:"flex flex-col gap-4","data-testid":"lunora-notifications",children:[$,k,o===null&&!C&&E.length===0&&t(q,{description:r("Registered Web Push / FCM devices appear here. Configure lunora/notify.ts with defineNotify({ store }) and register a device with ctx.push.register(...)."),icon:t("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:t("path",{d:"M15 17h5l-1.4-1.4A2 2 0 0 1 18 14.2V11a6 6 0 0 0-4-5.7V5a2 2 0 1 0-4 0v.3A6 6 0 0 0 6 11v3.2a2 2 0 0 1-.6 1.4L4 17h5m6 0v1a3 3 0 1 1-6 0v-1m6 0H9"})}),testId:"nt-empty",title:r("No registered devices.")}),E.length>0&&t(O,{className:"overflow-hidden py-0",children:t(U,{className:"max-h-[30rem] overflow-auto px-0",children:x(J,{"data-testid":"nt-table",children:[t(K,{children:x(F,{children:[t(h,{children:r("kind")}),t(h,{children:r("endpoint")}),t(h,{children:r("user")}),t(h,{children:r("last seen")}),t(h,{children:r("status")}),t(h,{children:r("error")})]})}),t(Q,{children:E.map(a=>{const M=P(a);return x(F,{"data-testid":"nt-row",children:[t(f,{children:t(_,{variant:"outline",children:a.kind})}),t(f,{className:"max-w-[28ch] truncate font-mono text-xs",title:M,children:M}),t(f,{className:"max-w-[16ch] truncate font-mono text-xs",children:a.userId??t("span",{className:"text-muted-foreground",children:"—"})}),t(f,{className:"text-muted-foreground tabular-nums",children:ee(a.lastSeenAt,"—")}),t(f,{children:t(_,{"data-testid":`nt-status-${a.id}`,variant:te(a.lastStatus),children:a.lastStatus??r("n/a")})}),t(f,{className:"max-w-[28ch] truncate font-mono text-xs text-muted-foreground",title:a.lastError??void 0,children:a.lastError??t("span",{className:"text-muted-foreground",children:"—"})})]},a.id)})})]})})})]}),e[1]=S?.subscriptions,e[2]=o,e[3]=p,e[4]=C,e[5]=i,e[6]=v,e[7]=s,e[8]=r,e[9]=N}else N=e[9];return N};export{ve as NotificationsPanel};
@@ -0,0 +1 @@
1
+ import{useLunora as E}from"@lunora/react";import{useState as s,useCallback as H,useEffect as W}from"react";import{ConfirmButton as F}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{g as Z}from"../packem_shared/badge-BbuuAio7.js";import{u as _}from"../packem_shared/button-BkCrNcAs.js";import{u as I}from"../packem_shared/input-JHu63lTv.js";import{p as g}from"../packem_shared/label-6uP1obNF.js";import{useAutoRefresh as G}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as J}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as B}from"../packem_shared/ADMIN_FUNCTIONS-BnD4aovm.js";import{d as u,b as N,f as p,g as S}from"../packem_shared/internal-BSIsQVC6.js";import{jsxs as a,jsx as r}from"react/jsx-runtime";const y=S(B.getPitrBookmark),Q=S(B.pitrRestore),de=({initialShardKey:T})=>{const m=E(),t=J(),i=T??"",[O,f]=s(null),[l,P]=s(""),[v,w]=s(null),[c,q]=s(""),[h,A]=s(!1),[o,L]=s(null),[C,n]=s(null),[x,d]=s(!1),b=H(async()=>{d(!0),n(null);try{const e=await m.query(y,{},u(i));f(e.current)}catch(e){n(N(e))}d(!1)},[m,i]);W(()=>{p(b())},[b]),G(()=>{p((async()=>{try{const e=await m.query(y,{},u(i));f(e.current)}catch{}})())},!0);const U=e=>{P(e.target.value)},j=e=>{q(e.target.value)},M=e=>{A(e.target.checked)},z=()=>{l.trim()!==""&&p((async()=>{d(!0),n(null);try{const e=await m.query(y,{time:l.trim()},u(i));w(e.forTime??null),f(e.current)}catch(e){w(null),n(N(e))}d(!1)})())},R=e=>{p((async()=>{d(!0),n(null);try{const k=await m.mutation(Q,e,u(i));L(k),await b()}catch(k){n(N(k))}d(!1)})())},K=c.trim()!==""||l.trim()!=="",$=()=>{const e=h?{restart:!0}:{};c.trim()===""?e.time=l.trim():e.bookmark=c.trim(),R(e)},D=()=>{o!==null&&R(h?{bookmark:o.undoBookmark,restart:!0}:{bookmark:o.undoBookmark})};return a("div",{className:"flex flex-col gap-4","data-testid":"lunora-pitr",children:[r("div",{className:"flex flex-wrap items-center gap-3",children:a("span",{className:"text-xs text-muted-foreground",children:[t("Shard"),": ",r("span",{className:"font-mono",children:i===""?t("root"):i})]})}),r("p",{className:"text-sm text-muted-foreground","data-testid":"pitr-note",children:t("In-place recovery to any moment in the last 30 days. For older or portable recovery, use the snapshot backup tier.")}),C!==null&&r("p",{className:"text-sm text-destructive","data-testid":"pitr-error",role:"alert",children:C}),a("section",{className:"rounded-xl border border-border bg-card p-3 shadow-xs",children:[r("h3",{className:"mb-2 text-sm font-semibold",children:t("Current bookmark")}),r("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-current",children:O??r("span",{className:"text-muted-foreground",children:"—"})})]}),a("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 shadow-xs",children:[r("h3",{className:"text-sm font-semibold",children:t("Restore")}),a("div",{className:"flex flex-col gap-1",children:[r(g,{htmlFor:"pitr-time",children:t("Time (ISO or epoch-ms, last 30 days)")}),a("div",{className:"flex items-center gap-2",children:[r(I,{"data-testid":"pitr-time",id:"pitr-time",onChange:U,placeholder:"2026-06-01T00:00:00.000Z",value:l}),r(_,{"data-testid":"pitr-preview",disabled:x||l.trim()==="",onClick:z,size:"sm",type:"button",variant:"outline",children:t("Preview")})]}),v!==null&&a("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-preview-bookmark",children:[t("Bookmark for that time"),": ",v]})]}),a("div",{className:"flex flex-col gap-1",children:[r(g,{htmlFor:"pitr-bookmark",children:t("Or an explicit bookmark (wins over time)")}),r(I,{"data-testid":"pitr-bookmark",id:"pitr-bookmark",onChange:j,placeholder:t("bookmark string"),value:c})]}),a(g,{className:"flex items-center gap-2 text-xs font-normal text-muted-foreground",htmlFor:"pitr-restart",children:[r("input",{checked:h,className:"size-4 accent-primary","data-testid":"pitr-restart",id:"pitr-restart",onChange:M,type:"checkbox"}),t("Restart the shard now so recovery applies immediately")]}),r("div",{children:r(F,{confirmLabel:t("Confirm restore"),disabled:x||!K,onConfirm:$,testId:"pitr-restore",children:t("Restore")})})]}),o!==null&&a("section",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-3 shadow-xs","data-testid":"pitr-result",children:[a("div",{className:"flex items-center gap-2",children:[r("h3",{className:"text-sm font-semibold",children:t("Restore armed")}),r(Z,{variant:o.restarted?"destructive":"secondary",children:o.restarted?t("restarted now"):t("on next restart")})]}),a("p",{className:"font-mono text-xs break-all text-muted-foreground",children:[t("Restored to"),": ",o.restoredTo]}),a("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-undo-bookmark",children:[t("Undo bookmark"),": ",o.undoBookmark]}),r("div",{children:r(F,{confirmLabel:t("Confirm undo"),disabled:x,onConfirm:D,testId:"pitr-undo",children:t("Undo restore")})})]})]})};export{de as PitrPanel};