@lunora/studio 1.0.0-alpha.107 → 1.0.0-alpha.109

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 (387) hide show
  1. package/dist/index.d.ts +15 -2
  2. package/dist/index.js +1 -1
  3. package/dist/mount.js +1 -1
  4. package/dist/packem_chunks/AdvisorHealthPanel.js +1 -1
  5. package/dist/packem_chunks/ApiTab.js +1 -1
  6. package/dist/packem_chunks/AuditPanel.js +1 -1
  7. package/dist/packem_chunks/DeploymentHealthPanel.js +1 -1
  8. package/dist/packem_chunks/ExportImportPanel.js +3 -3
  9. package/dist/packem_chunks/FileBrowser.js +4 -4
  10. package/dist/packem_chunks/FunctionRunner.js +1 -1
  11. package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
  12. package/dist/packem_chunks/HealthPanel.js +1 -1
  13. package/dist/packem_chunks/InsightsPanel.js +1 -1
  14. package/dist/packem_chunks/LogsPanel.js +1 -1
  15. package/dist/packem_chunks/MailPanel.js +1 -1
  16. package/dist/packem_chunks/MetricsPanel.js +1 -1
  17. package/dist/packem_chunks/NotificationsPanel.js +1 -1
  18. package/dist/packem_chunks/PitrPanel.js +1 -1
  19. package/dist/packem_chunks/SchemaViewer.js +1 -1
  20. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
  21. package/dist/packem_chunks/SettingsPanel.js +1 -1
  22. package/dist/packem_chunks/SqlEditorPanel.js +6 -6
  23. package/dist/packem_chunks/TableEditor.js +1 -1
  24. package/dist/packem_chunks/agents-panel.js +1 -1
  25. package/dist/packem_chunks/analytics-panel.js +1 -1
  26. package/dist/packem_chunks/auth-audit-panel.js +1 -1
  27. package/dist/packem_chunks/auth-config-panel.js +1 -1
  28. package/dist/packem_chunks/auth-sessions-panel.js +1 -1
  29. package/dist/packem_chunks/containers-panel.js +1 -1
  30. package/dist/packem_chunks/dashboards-panel.js +1 -1
  31. package/dist/packem_chunks/evals-panel.js +1 -1
  32. package/dist/packem_chunks/fanout-panel.js +1 -1
  33. package/dist/packem_chunks/flags-panel.js +1 -1
  34. package/dist/packem_chunks/issues-panel.js +1 -1
  35. package/dist/packem_chunks/kv-browser.js +1 -1
  36. package/dist/packem_chunks/log-drains-panel.js +4 -4
  37. package/dist/packem_chunks/migrations-route.js +1 -1
  38. package/dist/packem_chunks/organizations-panel.js +1 -1
  39. package/dist/packem_chunks/payments-panel.js +1 -1
  40. package/dist/packem_chunks/permissions-panel.js +1 -1
  41. package/dist/packem_chunks/queues-panel.js +1 -1
  42. package/dist/packem_chunks/rls-panel.js +1 -1
  43. package/dist/packem_chunks/schedule-panel.js +1 -1
  44. package/dist/packem_chunks/sparkline.js +1 -1
  45. package/dist/packem_chunks/storage-rules-panel.js +1 -1
  46. package/dist/packem_chunks/subscriptions-panel.js +1 -1
  47. package/dist/packem_chunks/sync-client-panel.js +1 -1
  48. package/dist/packem_chunks/traces-panel.js +1 -1
  49. package/dist/packem_chunks/users-panel.js +1 -1
  50. package/dist/packem_chunks/vector-browser.js +1 -1
  51. package/dist/packem_chunks/workflows-panel.js +1 -1
  52. package/dist/packem_shared/ApiDocsPanel-BQ79UVEg.js +2 -0
  53. package/dist/packem_shared/ApiReferencePanel-CkCFMCBb.js +1 -0
  54. package/dist/packem_shared/CommandPalette-B5yLEABs.js +1 -0
  55. package/dist/packem_shared/ConfirmButton-Cj2SOapE.js +1 -0
  56. package/dist/packem_shared/ConnectionBadge-Bh16X9-u.js +1 -0
  57. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.js +1 -0
  58. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-1Lrg55IV.js +1 -0
  59. package/dist/packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js +1 -0
  60. package/dist/packem_shared/DataBrowser-BnDIFN-S.js +1 -0
  61. package/dist/packem_shared/DataFilters-3nbW0uax.js +1 -0
  62. package/dist/packem_shared/ErrorBoundary-BWNF98VF.js +1 -0
  63. package/dist/packem_shared/GlobalDataBrowser-DusjXzRF.js +1 -0
  64. package/dist/packem_shared/HomePanel-BcaHVBJh.js +1 -0
  65. package/dist/packem_shared/MigrationsPanel-CCOENX4X.js +1 -0
  66. package/dist/packem_shared/OpenRpcReferencePanel-21OWMH45.js +1 -0
  67. package/dist/packem_shared/ScheduledJobs-CiO3eXgI.js +1 -0
  68. package/dist/packem_shared/ShardInput-XumEzeT0.js +1 -0
  69. package/dist/packem_shared/Studio-CHmLCjBR.js +1 -0
  70. package/dist/packem_shared/StudioApp-DCdbsciH.js +1 -0
  71. package/dist/packem_shared/StudioI18nProvider-Bl547evf.js +1 -0
  72. package/dist/packem_shared/advisor-view-C1KFTXSH.js +1 -0
  73. package/dist/packem_shared/aggregateMetrics-A-Y7OH6R.js +1 -0
  74. package/dist/packem_shared/alert-C2SEhYS9.js +1 -0
  75. package/dist/packem_shared/{badge-BbuuAio7.js → badge-cAk9Di1Q.js} +1 -1
  76. package/dist/packem_shared/bar-chart-CCyO67Uf.js +6 -0
  77. package/dist/packem_shared/browser-storage-Br_bLeBt.js +1 -0
  78. package/dist/packem_shared/{button-BkCrNcAs.js → button-BOPLD1un.js} +1 -1
  79. package/dist/packem_shared/card-BGlQzQY-.js +1 -0
  80. package/dist/packem_shared/cf-links-CBJ5SywP.js +1 -0
  81. package/dist/packem_shared/{checkbox-StT4Gob6.js → checkbox-C5w53W-E.js} +1 -1
  82. package/dist/packem_shared/data-grid-BFTQnkXq.js +1 -0
  83. package/dist/packem_shared/data-view-params-qoSTqjAj.js +1 -0
  84. package/dist/packem_shared/dropdown-menu-D_ewqsUU.js +2 -0
  85. package/dist/packem_shared/empty-state-B939z6K2.js +1 -0
  86. package/dist/packem_shared/error-alert-TYdKetJd.js +1 -0
  87. package/dist/packem_shared/grid-features-C_yXlMc_.js +6 -0
  88. package/dist/packem_shared/home-panel-BiJHXeDC.js +3 -0
  89. package/dist/packem_shared/input-CY5W3wzv.js +1 -0
  90. package/dist/packem_shared/internal-CwaF9YNk.js +2 -0
  91. package/dist/packem_shared/label-BOUo-DP0.js +1 -0
  92. package/dist/packem_shared/live-status-Bf7rR8o8.js +1 -0
  93. package/dist/packem_shared/{log-fields-CoL3hsIQ.js → log-fields-SBxKyBug.js} +1 -1
  94. package/dist/packem_shared/log-line-UnE93Ovi.js +1 -0
  95. package/dist/packem_shared/modal-shell-wGW4CKEW.js +1 -0
  96. package/dist/packem_shared/operation-console-provider-DoloEvon.js +1 -0
  97. package/dist/packem_shared/recording-client-CKn4-vUx.js +1 -0
  98. package/dist/packem_shared/reference-view-CUIDzLf0.js +12 -0
  99. package/dist/packem_shared/result-chart-Ca3YLzt8.js +1 -0
  100. package/dist/packem_shared/schema-diagram-DHD13TjS.js +2 -0
  101. package/dist/packem_shared/scroll-area-DSJftwu_.js +2 -0
  102. package/dist/packem_shared/select-BPISLTcv.js +2 -0
  103. package/dist/packem_shared/shard-history-QcjcMnCA.js +1 -0
  104. package/dist/packem_shared/skeleton-DFBBaJU6.js +1 -0
  105. package/dist/packem_shared/sparkline-BreIqzDO.js +1 -0
  106. package/dist/packem_shared/stat-card-B9uIvAHg.js +1 -0
  107. package/dist/packem_shared/{storage-tier-DznqOf-q.js → storage-tier-C2mKwYRj.js} +1 -1
  108. package/dist/packem_shared/studio-B3eEcBK0.js +2 -0
  109. package/dist/packem_shared/table-BMsuYFhk.js +2 -0
  110. package/dist/packem_shared/table-list-sidebar-Bluzd1_2.js +1 -0
  111. package/dist/packem_shared/textarea-DpO3i-Qo.js +1 -0
  112. package/dist/packem_shared/{trace-handoff-Dw7mwjxu.js → trace-handoff-C0CFV2ix.js} +1 -1
  113. package/dist/packem_shared/use-admin-query-P0RJrjsD.js +1 -0
  114. package/dist/packem_shared/use-async-submit-DdLd0MdK.js +1 -0
  115. package/dist/packem_shared/use-auth-config-z3KRWAqD.js +1 -0
  116. package/dist/packem_shared/use-open-trace-4tIa0SXZ.js +1 -0
  117. package/dist/packem_shared/use-shard-key-BsP3o5wT.js +1 -0
  118. package/dist/packem_shared/use-sql-assistant-CP90nLLh.js +1 -0
  119. package/dist/packem_shared/useDebounced-DVeQ5-oW.js +1 -0
  120. package/dist/packem_shared/virtual-rect-D_j7aLxX.js +1 -0
  121. package/dist/packem_shared/wire-codec-Dl3VeNrd.js +1 -0
  122. package/dist/standalone/chunk-25OIGX2A.js +1 -0
  123. package/dist/standalone/{chunk-OBMNLQWG.js → chunk-26VREVWU.js} +1 -1
  124. package/dist/standalone/chunk-2BDM6HNL.js +1 -0
  125. package/dist/standalone/{chunk-5BJKIPW4.js → chunk-2DC6F7NH.js} +1 -1
  126. package/dist/standalone/chunk-3F5I435D.js +1 -0
  127. package/dist/standalone/{chunk-QITZPIKR.js → chunk-3QB5JI32.js} +1 -1
  128. package/dist/standalone/chunk-3RYEUXY2.js +1 -0
  129. package/dist/standalone/chunk-44WNSIGQ.js +1 -0
  130. package/dist/standalone/chunk-45YWYMD5.js +1 -0
  131. package/dist/standalone/chunk-4MAJFNON.js +1 -0
  132. package/dist/standalone/chunk-4YTSKL4R.js +1 -0
  133. package/dist/standalone/chunk-57VX76PR.js +1 -0
  134. package/dist/standalone/chunk-5JLIP2HH.js +1 -0
  135. package/dist/standalone/chunk-5NRQIDQA.js +1 -0
  136. package/dist/standalone/{chunk-WC6UDT34.js → chunk-5T7KRUPX.js} +1 -1
  137. package/dist/standalone/chunk-6FWN26RH.js +1 -0
  138. package/dist/standalone/chunk-6JGXSMKV.js +1 -0
  139. package/dist/standalone/{chunk-DNJI44ZU.js → chunk-6NJAHOGO.js} +1 -1
  140. package/dist/standalone/chunk-6SAAMM4S.js +1 -0
  141. package/dist/standalone/{chunk-IUYFXK4X.js → chunk-6ZPTNC34.js} +6 -6
  142. package/dist/standalone/chunk-74ASA4WU.js +1 -0
  143. package/dist/standalone/{chunk-6ST5ECQA.js → chunk-7PIHTTND.js} +1 -1
  144. package/dist/standalone/{chunk-GMR677FL.js → chunk-7SROZWKL.js} +1 -1
  145. package/dist/standalone/chunk-AECDJKXB.js +1 -0
  146. package/dist/standalone/{chunk-2PJNAWB3.js → chunk-AFKLFS74.js} +1 -1
  147. package/dist/standalone/chunk-AOAJGSYZ.js +2 -0
  148. package/dist/standalone/chunk-AOE75NAT.js +1 -0
  149. package/dist/standalone/{chunk-HFRJMPXJ.js → chunk-APRVSWBH.js} +27 -27
  150. package/dist/standalone/{chunk-DII5CUK3.js → chunk-BELLXCN7.js} +1 -1
  151. package/dist/standalone/chunk-BORG7WUC.js +1 -0
  152. package/dist/standalone/{chunk-AVAC26HJ.js → chunk-BQK2C2Z4.js} +1 -1
  153. package/dist/standalone/chunk-BRHTM6FU.js +1 -0
  154. package/dist/standalone/{chunk-MWIKAR7F.js → chunk-BWEXJENB.js} +1 -1
  155. package/dist/standalone/chunk-C5E5PLJT.js +4 -0
  156. package/dist/standalone/chunk-C7E4I7JZ.js +1 -0
  157. package/dist/standalone/{chunk-QWGT25SE.js → chunk-CAOUXOL7.js} +1 -1
  158. package/dist/standalone/chunk-CEPMQS24.js +6 -0
  159. package/dist/standalone/chunk-CKTKI4IY.js +1 -0
  160. package/dist/standalone/{chunk-IC4L6G56.js → chunk-CN2AINNY.js} +1 -1
  161. package/dist/standalone/chunk-CP4ZFBVW.js +1 -0
  162. package/dist/standalone/chunk-CYX3OHJ3.js +1 -0
  163. package/dist/standalone/{chunk-RR3WQUTS.js → chunk-D7DUQS2Y.js} +1 -1
  164. package/dist/standalone/{chunk-QBWRC5YX.js → chunk-DKSLOJDQ.js} +1 -1
  165. package/dist/standalone/chunk-DL3UOEWN.js +1 -0
  166. package/dist/standalone/chunk-DPNEFSEC.js +1 -0
  167. package/dist/standalone/{chunk-BGBLQ563.js → chunk-DUDQV6XJ.js} +1 -1
  168. package/dist/standalone/chunk-EDHW2EEG.js +1 -0
  169. package/dist/standalone/chunk-EYGF6TQS.js +1 -0
  170. package/dist/standalone/chunk-F7JOSNAT.js +1 -0
  171. package/dist/standalone/{chunk-YBAHC3CS.js → chunk-FBAZHG35.js} +1 -1
  172. package/dist/standalone/chunk-FLCK2WWQ.js +1 -0
  173. package/dist/standalone/chunk-FSWPREH3.js +1 -0
  174. package/dist/standalone/{chunk-53K3JA4T.js → chunk-GIRZD3UB.js} +2 -2
  175. package/dist/standalone/chunk-GZMBMNL3.js +6 -0
  176. package/dist/standalone/chunk-HPX3IM45.js +13 -0
  177. package/dist/standalone/{chunk-KUVMORDQ.js → chunk-INBA3473.js} +1 -1
  178. package/dist/standalone/{chunk-T6VMSOBB.js → chunk-INQICZYC.js} +1 -1
  179. package/dist/standalone/chunk-IWNVQHF7.js +1 -0
  180. package/dist/standalone/chunk-IWOZGUI2.js +1 -0
  181. package/dist/standalone/chunk-IYWVSMAY.js +1 -0
  182. package/dist/standalone/chunk-JURAVSE7.js +1 -0
  183. package/dist/standalone/chunk-JUWOEHDD.js +1 -0
  184. package/dist/standalone/{chunk-4UOFSGUS.js → chunk-JV7KTJPY.js} +1 -1
  185. package/dist/standalone/{chunk-DAKX7Y3W.js → chunk-JVAYDDMK.js} +1 -1
  186. package/dist/standalone/chunk-KEKIGANB.js +1 -0
  187. package/dist/standalone/chunk-KFZ37KQP.js +1 -0
  188. package/dist/standalone/chunk-KQIHXYE6.js +1 -0
  189. package/dist/standalone/chunk-L4EZAHCD.js +1 -0
  190. package/dist/standalone/chunk-L7CJ5PGH.js +1 -0
  191. package/dist/standalone/{chunk-WMJYSFAD.js → chunk-LT4XQDD2.js} +1 -1
  192. package/dist/standalone/chunk-M3NNNOD5.js +1 -0
  193. package/dist/standalone/chunk-MBEIKVJH.js +1 -0
  194. package/dist/standalone/chunk-MCLM2QJI.js +1 -0
  195. package/dist/standalone/chunk-METRMDIQ.js +1 -0
  196. package/dist/standalone/{chunk-OKQ3NJOW.js → chunk-MGC6PRMV.js} +1 -1
  197. package/dist/standalone/chunk-MOUI44OT.js +1 -0
  198. package/dist/standalone/{chunk-6SENF2BM.js → chunk-MSFUDXBA.js} +1 -1
  199. package/dist/standalone/chunk-NIX2QSSN.js +1 -0
  200. package/dist/standalone/chunk-NXXGISFB.js +1 -0
  201. package/dist/standalone/{chunk-SBZXUGZ7.js → chunk-OE4KGVJW.js} +4 -4
  202. package/dist/standalone/chunk-OG57FC7W.js +1 -0
  203. package/dist/standalone/chunk-OLQWBGKT.js +1 -0
  204. package/dist/standalone/{chunk-AQSDQ7YW.js → chunk-OOBJFXYB.js} +1 -1
  205. package/dist/standalone/chunk-P52BY657.js +1 -0
  206. package/dist/standalone/chunk-PHHMPYEP.js +1 -0
  207. package/dist/standalone/{chunk-MBCQNLYR.js → chunk-PJDKRUWT.js} +1 -1
  208. package/dist/standalone/chunk-PZ4QDWTI.js +1 -0
  209. package/dist/standalone/chunk-QZ55OWAB.js +4 -0
  210. package/dist/standalone/chunk-R5ZTCHCE.js +1 -0
  211. package/dist/standalone/chunk-RBUVNO22.js +1 -0
  212. package/dist/standalone/{chunk-XBDKZZ67.js → chunk-RCZTUWG3.js} +1 -1
  213. package/dist/standalone/chunk-S77D4SHR.js +1 -0
  214. package/dist/standalone/chunk-SL5R7WBN.js +1 -0
  215. package/dist/standalone/chunk-SMKRXJUC.js +1 -0
  216. package/dist/standalone/{chunk-THIXMMZD.js → chunk-SPDZUX4P.js} +1 -1
  217. package/dist/standalone/chunk-T2LDA6WP.js +1 -0
  218. package/dist/standalone/{chunk-5UY7MLRC.js → chunk-T6HLABZW.js} +1 -1
  219. package/dist/standalone/{chunk-WNX3CW2W.js → chunk-TBXK3FKP.js} +4 -4
  220. package/dist/standalone/{chunk-7QIFDWQV.js → chunk-TFMQSCGC.js} +1 -1
  221. package/dist/standalone/chunk-TLPWZ5NI.js +3 -0
  222. package/dist/standalone/chunk-TNKECJW4.js +1 -0
  223. package/dist/standalone/{chunk-XQCVZAGU.js → chunk-UANVABQG.js} +1 -1
  224. package/dist/standalone/chunk-UIF57LBO.js +1 -0
  225. package/dist/standalone/chunk-V6QPVFDL.js +1 -0
  226. package/dist/standalone/chunk-VNTEQQPP.js +1 -0
  227. package/dist/standalone/chunk-VR3UJA7B.js +1 -0
  228. package/dist/standalone/{chunk-5DVJR52Z.js → chunk-VYW2PAWC.js} +3 -3
  229. package/dist/standalone/chunk-VZCS5GXZ.js +1 -0
  230. package/dist/standalone/{chunk-RY3KNLUE.js → chunk-WHRG6S5P.js} +1 -1
  231. package/dist/standalone/{chunk-GVV3QMRO.js → chunk-WIG3HCUJ.js} +1 -1
  232. package/dist/standalone/chunk-WUW4ZHRL.js +1 -0
  233. package/dist/standalone/chunk-X6Q5DWLZ.js +1 -0
  234. package/dist/standalone/{chunk-Z2IF3TEX.js → chunk-XGIG4EDG.js} +4 -4
  235. package/dist/standalone/chunk-XJSWM47N.js +1 -0
  236. package/dist/standalone/chunk-XQS7KSHL.js +1 -0
  237. package/dist/standalone/chunk-YS7HEZC2.js +1 -0
  238. package/dist/standalone/chunk-YUWMB6EV.js +1 -0
  239. package/dist/standalone/{chunk-TMGHRD6W.js → chunk-ZPGNTTQ3.js} +1 -1
  240. package/dist/standalone/chunk-ZQLIKKIY.js +1 -0
  241. package/dist/standalone/chunk-ZSOLGJFC.js +1 -0
  242. package/dist/standalone/studio.js +6 -6
  243. package/package.json +11 -11
  244. package/dist/packem_shared/ApiDocsPanel-Cu_QmzO0.js +0 -2
  245. package/dist/packem_shared/ApiReferencePanel-DuIU1P8B.js +0 -1
  246. package/dist/packem_shared/CommandPalette-mPR8-vIm.js +0 -1
  247. package/dist/packem_shared/ConfirmButton-CTL3f3kr.js +0 -1
  248. package/dist/packem_shared/ConnectionBadge-DOk0CQWo.js +0 -1
  249. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js +0 -1
  250. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js +0 -1
  251. package/dist/packem_shared/DEFAULT_LOCALE-BZ4NojpD.js +0 -1
  252. package/dist/packem_shared/DataBrowser-CPNKM0KZ.js +0 -1
  253. package/dist/packem_shared/DataFilters-B26ZeqBZ.js +0 -1
  254. package/dist/packem_shared/ErrorBoundary-DvzYskH7.js +0 -1
  255. package/dist/packem_shared/GlobalDataBrowser-BSmyOO0n.js +0 -1
  256. package/dist/packem_shared/HomePanel-BUO6BcYQ.js +0 -1
  257. package/dist/packem_shared/MigrationsPanel-BAnvY79E.js +0 -1
  258. package/dist/packem_shared/OpenRpcReferencePanel-DXeffPFr.js +0 -1
  259. package/dist/packem_shared/ScheduledJobs-pHVlh2xU.js +0 -1
  260. package/dist/packem_shared/ShardInput-BVn2iCU0.js +0 -1
  261. package/dist/packem_shared/Studio-CD66AkL1.js +0 -1
  262. package/dist/packem_shared/StudioApp-0Vaayv2I.js +0 -1
  263. package/dist/packem_shared/StudioI18nProvider-CZ5h4nrV.js +0 -1
  264. package/dist/packem_shared/advisor-view-CGcwvlMo.js +0 -1
  265. package/dist/packem_shared/aggregateMetrics-BNfajLa2.js +0 -1
  266. package/dist/packem_shared/alert-CVcOFuDR.js +0 -1
  267. package/dist/packem_shared/bar-chart-B8oDHgnw.js +0 -6
  268. package/dist/packem_shared/browser-storage-xjTyMKY0.js +0 -1
  269. package/dist/packem_shared/card-BMKx5UdA.js +0 -1
  270. package/dist/packem_shared/cf-links-Dmg86v1D.js +0 -1
  271. package/dist/packem_shared/data-grid-Ci4-tZkk.js +0 -1
  272. package/dist/packem_shared/data-view-params-ClrV7XgF.js +0 -1
  273. package/dist/packem_shared/dropdown-menu-BgS2zw1i.js +0 -2
  274. package/dist/packem_shared/empty-state-Cg7t_8qu.js +0 -1
  275. package/dist/packem_shared/error-alert-_2q2VtVG.js +0 -1
  276. package/dist/packem_shared/grid-features-Y2YSjhCf.js +0 -6
  277. package/dist/packem_shared/home-panel-Ir3YHReO.js +0 -3
  278. package/dist/packem_shared/input-JHu63lTv.js +0 -1
  279. package/dist/packem_shared/internal-zkEvTqy8.js +0 -2
  280. package/dist/packem_shared/label-6uP1obNF.js +0 -1
  281. package/dist/packem_shared/live-status-CmuRLFKf.js +0 -1
  282. package/dist/packem_shared/log-line-BDI826X-.js +0 -1
  283. package/dist/packem_shared/modal-shell-CUwwWC2o.js +0 -1
  284. package/dist/packem_shared/operation-console-provider-BMJNtiyB.js +0 -1
  285. package/dist/packem_shared/recording-client-DtUxwVNY.js +0 -1
  286. package/dist/packem_shared/reference-view-DncEStdm.js +0 -12
  287. package/dist/packem_shared/result-chart-0VgP_3FP.js +0 -1
  288. package/dist/packem_shared/schema-diagram-GVgnLWTf.js +0 -2
  289. package/dist/packem_shared/scroll-area-DTEq6Jec.js +0 -2
  290. package/dist/packem_shared/select-BssZMiFY.js +0 -2
  291. package/dist/packem_shared/shard-history-DMEW5VBE.js +0 -1
  292. package/dist/packem_shared/skeleton-C1wQ9M5t.js +0 -1
  293. package/dist/packem_shared/sparkline-BNvxiJj_.js +0 -1
  294. package/dist/packem_shared/stat-card-BGJdhfm6.js +0 -1
  295. package/dist/packem_shared/studio-CUXq5VSB.js +0 -2
  296. package/dist/packem_shared/table-DZAB8cs3.js +0 -2
  297. package/dist/packem_shared/table-list-sidebar-fz0m_4I4.js +0 -1
  298. package/dist/packem_shared/textarea-Bu2-jKAs.js +0 -1
  299. package/dist/packem_shared/use-admin-query-CnnyWJXM.js +0 -1
  300. package/dist/packem_shared/use-async-submit-B32whHJO.js +0 -1
  301. package/dist/packem_shared/use-auth-config-0EnNCdLu.js +0 -1
  302. package/dist/packem_shared/use-open-trace-CniEgUdp.js +0 -1
  303. package/dist/packem_shared/use-shard-key-B2JtNa5m.js +0 -1
  304. package/dist/packem_shared/use-sql-assistant-Dtw55kKM.js +0 -1
  305. package/dist/packem_shared/useDebounced-CU-uftxO.js +0 -1
  306. package/dist/packem_shared/virtual-rect-1o1veP7R.js +0 -1
  307. package/dist/packem_shared/wire-codec-DkrdsFXO.js +0 -1
  308. package/dist/standalone/chunk-2MOW5R5F.js +0 -1
  309. package/dist/standalone/chunk-2OUPA2WJ.js +0 -1
  310. package/dist/standalone/chunk-2QSHLBCO.js +0 -1
  311. package/dist/standalone/chunk-36ZRDYSW.js +0 -13
  312. package/dist/standalone/chunk-3C3CG7ZK.js +0 -1
  313. package/dist/standalone/chunk-3CWGJYBB.js +0 -1
  314. package/dist/standalone/chunk-3DH35OZ5.js +0 -1
  315. package/dist/standalone/chunk-3LOVQM5J.js +0 -4
  316. package/dist/standalone/chunk-3SCGCJYS.js +0 -1
  317. package/dist/standalone/chunk-3XIESWL4.js +0 -1
  318. package/dist/standalone/chunk-4V545ZJY.js +0 -1
  319. package/dist/standalone/chunk-53C44DRG.js +0 -1
  320. package/dist/standalone/chunk-54MMVNPT.js +0 -1
  321. package/dist/standalone/chunk-5HCAPI76.js +0 -1
  322. package/dist/standalone/chunk-5PNUXGSN.js +0 -1
  323. package/dist/standalone/chunk-5Y3QLNWX.js +0 -1
  324. package/dist/standalone/chunk-6O7WGEPO.js +0 -1
  325. package/dist/standalone/chunk-7CZI2HNL.js +0 -1
  326. package/dist/standalone/chunk-7T7UOTYK.js +0 -1
  327. package/dist/standalone/chunk-AE2C6FJ5.js +0 -1
  328. package/dist/standalone/chunk-AXQU7ULF.js +0 -1
  329. package/dist/standalone/chunk-B7ZEKCKL.js +0 -1
  330. package/dist/standalone/chunk-BONZWJ4I.js +0 -1
  331. package/dist/standalone/chunk-BQWOD2OQ.js +0 -1
  332. package/dist/standalone/chunk-C7LUGC7P.js +0 -1
  333. package/dist/standalone/chunk-CFPZYHPY.js +0 -2
  334. package/dist/standalone/chunk-CZZWYUTR.js +0 -1
  335. package/dist/standalone/chunk-D5564VH5.js +0 -1
  336. package/dist/standalone/chunk-DIRKDC43.js +0 -1
  337. package/dist/standalone/chunk-DJZYD5I5.js +0 -1
  338. package/dist/standalone/chunk-ED6AUZUE.js +0 -4
  339. package/dist/standalone/chunk-EDQZJWAO.js +0 -1
  340. package/dist/standalone/chunk-ESVP44Y3.js +0 -1
  341. package/dist/standalone/chunk-FEKQ5FEG.js +0 -6
  342. package/dist/standalone/chunk-FURI47Z2.js +0 -1
  343. package/dist/standalone/chunk-G2TIDP45.js +0 -1
  344. package/dist/standalone/chunk-GG6PIGQO.js +0 -1
  345. package/dist/standalone/chunk-GKTUXDZR.js +0 -1
  346. package/dist/standalone/chunk-GLCH6XAO.js +0 -1
  347. package/dist/standalone/chunk-GRL5MG3Z.js +0 -1
  348. package/dist/standalone/chunk-HBSEWNIR.js +0 -1
  349. package/dist/standalone/chunk-HPFLBYRI.js +0 -1
  350. package/dist/standalone/chunk-I6A5C46N.js +0 -1
  351. package/dist/standalone/chunk-IGCNMZSB.js +0 -1
  352. package/dist/standalone/chunk-IOTGZYQS.js +0 -1
  353. package/dist/standalone/chunk-IVFHIQOT.js +0 -1
  354. package/dist/standalone/chunk-J5NKUMHE.js +0 -1
  355. package/dist/standalone/chunk-JKSUHSHA.js +0 -1
  356. package/dist/standalone/chunk-JL4ADWT6.js +0 -1
  357. package/dist/standalone/chunk-JQ4LFPF7.js +0 -1
  358. package/dist/standalone/chunk-LBWEYJMC.js +0 -1
  359. package/dist/standalone/chunk-LEDWUPXM.js +0 -1
  360. package/dist/standalone/chunk-MLT5MMMY.js +0 -1
  361. package/dist/standalone/chunk-NWFRUF4E.js +0 -1
  362. package/dist/standalone/chunk-OENUM3OW.js +0 -1
  363. package/dist/standalone/chunk-P7DBFWVY.js +0 -3
  364. package/dist/standalone/chunk-PMT3YIDB.js +0 -1
  365. package/dist/standalone/chunk-QLQADHFE.js +0 -1
  366. package/dist/standalone/chunk-QU33TT7V.js +0 -1
  367. package/dist/standalone/chunk-RA5DW5MU.js +0 -1
  368. package/dist/standalone/chunk-REBEU3J6.js +0 -1
  369. package/dist/standalone/chunk-RMN2JN4S.js +0 -1
  370. package/dist/standalone/chunk-SD4BERSA.js +0 -1
  371. package/dist/standalone/chunk-SFDOII3B.js +0 -1
  372. package/dist/standalone/chunk-SMIESS7P.js +0 -1
  373. package/dist/standalone/chunk-TRX6MWMH.js +0 -1
  374. package/dist/standalone/chunk-UG3YK5U3.js +0 -1
  375. package/dist/standalone/chunk-V53KNYRN.js +0 -1
  376. package/dist/standalone/chunk-VDZQM6KJ.js +0 -1
  377. package/dist/standalone/chunk-VZXE62W4.js +0 -1
  378. package/dist/standalone/chunk-WJQLNYGX.js +0 -1
  379. package/dist/standalone/chunk-WPK2Q33V.js +0 -6
  380. package/dist/standalone/chunk-WQH3LT2P.js +0 -1
  381. package/dist/standalone/chunk-XDBQX5P4.js +0 -1
  382. package/dist/standalone/chunk-XFGE43TZ.js +0 -1
  383. package/dist/standalone/chunk-XXQUMVWH.js +0 -1
  384. package/dist/standalone/chunk-Y32QIKBS.js +0 -1
  385. package/dist/standalone/chunk-ZJGP6EKR.js +0 -1
  386. package/dist/standalone/chunk-ZUZXES3T.js +0 -1
  387. /package/dist/standalone/{chunk-XF2B7P5A.js → chunk-W2JBKQNU.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,9 +1,22 @@
1
1
  import { F as FunctionDescriptor } from "./packem_shared/app.d-D1bPR8FO.js";
2
2
  export { type a as FunctionKind, type R as RunStatus, b as ScheduledJobs, type c as ScheduledJobsProps, d as Studio, e as StudioApp, type S as StudioAppProps, type f as StudioProps } from "./packem_shared/app.d-D1bPR8FO.js";
3
3
  import { ReactElement, ReactNode, ErrorInfo, Component, ChangeEvent } from 'react';
4
- import '@lunora/advisor';
5
4
  import { CapturedMail } from '@lunora/mail';
6
- export type { CapturedMail } from '@lunora/mail';
5
+ export type {
6
+ /**
7
+ * One captured outbound email as served by `__lunora_admin__:getCapturedMail`.
8
+ * Persisted by `@lunora/mail`'s dev capture transport into the root-shard
9
+ * mailbox and rendered by the studio Mail inbox. `html`/`text` are the rendered
10
+ * bodies; `to`/`cc`/`bcc` are the original recipient lists; `capturedAt` is
11
+ * epoch-ms.
12
+ *
13
+ * Re-exported verbatim from `@lunora/mail`, the canonical owner of the
14
+ * captured-mail wire type (also imported at the top of this file for local use
15
+ * in {@link CapturedMailResult}). This is NOT one of the hand-mirrored
16
+ * `@lunora/do` shapes below — it shares the real source of truth, so a field
17
+ * added in `@lunora/mail` flows here automatically.
18
+ */
19
+ CapturedMail } from '@lunora/mail';
7
20
  import { HealthBody } from '@lunora/runtime';
8
21
  import { Messages, I18n } from '@lingui/core';
9
22
  export type { LunoraClient, ScheduleRecord, StorageObject } from '@lunora/client';
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{StudioApp as r}from"./packem_shared/StudioApp-0Vaayv2I.js";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-mPR8-vIm.js";import{S as m}from"./packem_shared/studio-CUXq5VSB.js";import{ConfirmButton as l}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 as A}from"./packem_chunks/AdvisorHealthPanel.js";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.js";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.js";import{default as h}from"./packem_shared/ApiDocsPanel-Cu_QmzO0.js";import{default as C}from"./packem_shared/ApiReferencePanel-DuIU1P8B.js";import{default as O}from"./packem_chunks/ApiTab.js";import{default as N}from"./packem_shared/OpenRpcReferencePanel-DXeffPFr.js";import{DataBrowser as U}from"./packem_shared/DataBrowser-CPNKM0KZ.js";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-B26ZeqBZ.js";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-BSmyOO0n.js";import{TableEditor as q}from"./packem_chunks/TableEditor.js";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.js";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-BAnvY79E.js";import{PitrPanel as z}from"./packem_chunks/PitrPanel.js";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.js";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.js";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.js";import{H as oe}from"./packem_shared/home-panel-Ir3YHReO.js";import{AuditPanel as te}from"./packem_chunks/AuditPanel.js";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.js";import{MailPanel as me}from"./packem_chunks/MailPanel.js";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-pHVlh2xU.js";import{default as se}from"./packem_chunks/NotificationsPanel.js";import{HealthPanel as de}from"./packem_chunks/HealthPanel.js";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-BNfajLa2.js";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.js";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.js";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.js";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.js";import{FileBrowser as he}from"./packem_chunks/FileBrowser.js";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{default as Le}from"./packem_shared/useDebounced-CU-uftxO.js";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-CZ5h4nrV.js";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
1
+ import{StudioApp as r}from"./packem_shared/StudioApp-DCdbsciH.js";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-B5yLEABs.js";import{S as m}from"./packem_shared/studio-B3eEcBK0.js";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-Cj2SOapE.js";import{default as s}from"./packem_shared/ConnectionBadge-Bh16X9-u.js";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.js";import{ShardInput as P}from"./packem_shared/ShardInput-XumEzeT0.js";import{default as A}from"./packem_chunks/AdvisorHealthPanel.js";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-1Lrg55IV.js";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.js";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.js";import{default as h}from"./packem_shared/ApiDocsPanel-BQ79UVEg.js";import{default as C}from"./packem_shared/ApiReferencePanel-CkCFMCBb.js";import{default as O}from"./packem_chunks/ApiTab.js";import{default as N}from"./packem_shared/OpenRpcReferencePanel-21OWMH45.js";import{DataBrowser as U}from"./packem_shared/DataBrowser-BnDIFN-S.js";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-3nbW0uax.js";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-DusjXzRF.js";import{TableEditor as q}from"./packem_chunks/TableEditor.js";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.js";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-CCOENX4X.js";import{PitrPanel as z}from"./packem_chunks/PitrPanel.js";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.js";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.js";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.js";import{H as oe}from"./packem_shared/home-panel-BiJHXeDC.js";import{AuditPanel as te}from"./packem_chunks/AuditPanel.js";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.js";import{MailPanel as me}from"./packem_chunks/MailPanel.js";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-CiO3eXgI.js";import{default as se}from"./packem_chunks/NotificationsPanel.js";import{HealthPanel as de}from"./packem_chunks/HealthPanel.js";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-A-Y7OH6R.js";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.js";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.js";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.js";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.js";import{FileBrowser as he}from"./packem_chunks/FileBrowser.js";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.js";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.js";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-Bl547evf.js";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
package/dist/mount.js CHANGED
@@ -1 +1 @@
1
- import{LunoraError as a}from"@lunora/errors";import{createRoot as s}from"react-dom/client";import{StudioApp as i}from"./packem_shared/StudioApp-0Vaayv2I.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};
1
+ import{LunoraError as s}from"@lunora/errors";import{createRoot as a}from"react-dom/client";import{StudioApp as l}from"./packem_shared/StudioApp-DCdbsciH.js";import{jsx as i}from"react/jsx-runtime";const c=(n={})=>{const{container:t="#root",...o}=n,e=typeof t=="string"?document.querySelector(t):t;if(e===null)throw new s("INTERNAL",`mountStudio: container ${typeof t=="string"?t:"element"} not found`);const r=a(e);return r.render(i(l,{adminToken:o.adminToken,basePath:o.basePath,baseUrl:o.baseUrl,locale:o.locale,rulesInstalled:o.rulesInstalled,studio:o.studio})),r};export{c as mountStudio};
@@ -1 +1 @@
1
- import{scoreAdvisor as $}from"@lunora/advisor";import{U as w}from"../packem_shared/error-alert-_2q2VtVG.js";import{c,f as i}from"../packem_shared/card-BMKx5UdA.js";import{d as j,n as R,f as g,m,b as A,p as o}from"../packem_shared/table-DZAB8cs3.js";import{N}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useT as I}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as v}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{c as x}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as a}from"react/jsx-runtime";const l={clean:"text-emerald-600 dark:text-emerald-400",exempt:"text-muted-foreground",failing:"text-red-600 dark:text-red-400",warned:"text-amber-600 dark:text-amber-400"},k={"at-risk":"text-red-600 dark:text-red-400",excellent:"text-emerald-600 dark:text-emerald-400",good:"text-emerald-600 dark:text-emerald-400","needs-work":"text-amber-600 dark:text-amber-400"},S=(t,r)=>`exempt: ${t.exemptReason===void 0||t.exemptReason===""?r:t.exemptReason}`,T=t=>t.toSorted((r,d)=>r.coverage==="clean"&&d.coverage!=="clean"?1:d.coverage==="clean"&&r.coverage!=="clean"?-1:r.score-d.score),O=({testId:t="advisor-health"})=>{const r=I(),d=N(v.getAdvisories,{},{live:!0}),p=N(v.getAdvisorProcedures,{},{live:!0}),u=d.data?.advisories??null,h=p.data?.procedures??null,s=u===null||h===null?null:$(h,u),f=p.error??d.error;if(f!==null)return e(w,{error:f,testId:`${t}-error`});if(s===null)return e(c,{children:e(i,{className:"py-8 text-center text-muted-foreground","data-testid":`${t}-loading`,children:r("Loading…")})});const b=T(s.procedures);return a("div",{className:"space-y-4","data-testid":t,children:[e(c,{children:a(i,{className:"flex flex-wrap items-baseline gap-x-6 gap-y-2 py-6",children:[a("div",{children:[e("span",{className:x("text-4xl font-semibold tabular-nums",k[s.grade]),"data-testid":`${t}-score`,children:s.score}),e("span",{className:"text-muted-foreground text-lg",children:"/100"})]}),e("span",{className:x("text-sm font-medium uppercase tracking-wide",k[s.grade]),"data-testid":`${t}-grade`,children:s.grade}),a("div",{className:"text-muted-foreground flex gap-4 text-sm tabular-nums","data-testid":`${t}-summary`,children:[a("span",{className:l.clean,children:[s.summary.clean," ",r("clean")]}),a("span",{className:l.warned,children:[s.summary.warned," ",r("warned")]}),a("span",{className:l.failing,children:[s.summary.failing," ",r("failing")]}),a("span",{className:l.exempt,children:[s.summary.exempt," ",r("exempt")]})]})]})}),s.project.checks.length>0&&e(c,{children:a(i,{className:"py-4 text-sm","data-testid":`${t}-project`,children:[a("span",{className:"font-medium",children:[r("Schema & config")," ",s.project.score,"/100"]}),a("span",{className:"text-muted-foreground",children:[" — ",s.project.checks.map(n=>n.name).join(", ")]})]})}),e(c,{children:e(i,{className:"p-0",children:a(j,{children:[e(R,{children:a(g,{children:[e(m,{className:"w-20",children:r("Score")}),e(m,{children:r("Procedure")}),e(m,{className:"w-32",children:r("Kind")}),e(m,{children:r("Rules fired")})]})}),e(A,{children:b.map(n=>a(g,{"data-testid":`${t}-row`,children:[e(o,{className:x("tabular-nums font-medium",l[n.coverage]),children:n.coverage==="exempt"?"—":n.score}),e(o,{className:"font-mono text-xs",children:n.id}),a(o,{className:"text-muted-foreground text-xs",children:[n.visibility," ",n.kind,n.sensitivity.level==="high"&&e("span",{className:"ml-1 text-amber-600 dark:text-amber-400",children:r("sensitive")})]}),e(o,{className:"text-muted-foreground text-xs",children:n.coverage==="exempt"?S(n,r("no reason given")):n.checks.map(y=>y.name).join(", ")})]},n.id))})]})})})]})};export{O as default};
1
+ import{scoreAdvisor as T}from"@lunora/advisor";import{E as A}from"../packem_shared/error-alert-TYdKetJd.js";import{C as c,a as o}from"../packem_shared/card-BGlQzQY-.js";import{T as j,a as R,b as f,c as i,d as $,e as m}from"../packem_shared/table-BMsuYFhk.js";import{u as v}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{useT as C}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as N}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{c as u}from"../packem_shared/utils-bhneXptQ.js";import{jsx as e,jsxs as r}from"react/jsx-runtime";const n={clean:"text-emerald-600 dark:text-emerald-400",exempt:"text-muted-foreground",failing:"text-red-600 dark:text-red-400",warned:"text-amber-600 dark:text-amber-400"},b={"at-risk":"text-red-600 dark:text-red-400",excellent:"text-emerald-600 dark:text-emerald-400",good:"text-emerald-600 dark:text-emerald-400","needs-work":"text-amber-600 dark:text-amber-400"},E=(s,a)=>`exempt: ${s.exemptReason===void 0||s.exemptReason===""?a:s.exemptReason}`,S=s=>s.toSorted((a,l)=>a.coverage==="clean"&&l.coverage!=="clean"?1:l.coverage==="clean"&&a.coverage!=="clean"?-1:a.score-l.score),Y=({testId:s="advisor-health"})=>{const a=C(),l=v(N.getAdvisories,{},{live:!0}),x=v(N.getAdvisorProcedures,{},{live:!0}),p=l.data?.advisories??null,h=x.data?.procedures??null,t=p===null||h===null?null:T(h,p),g=x.error??l.error;if(g!==null)return e(A,{error:g,testId:`${s}-error`});if(t===null)return e(c,{children:e(o,{className:"py-8 text-center text-muted-foreground","data-testid":`${s}-loading`,children:a("Loading…")})});const k=S(t.procedures);return r("div",{className:"space-y-4","data-testid":s,children:[e(c,{children:r(o,{className:"flex flex-wrap items-baseline gap-x-6 gap-y-2 py-6",children:[r("div",{children:[e("span",{className:u("text-4xl font-semibold tabular-nums",b[t.grade]),"data-testid":`${s}-score`,children:t.score}),e("span",{className:"text-muted-foreground text-lg",children:"/100"})]}),e("span",{className:u("text-sm font-medium uppercase tracking-wide",b[t.grade]),"data-testid":`${s}-grade`,children:t.grade}),r("div",{className:"text-muted-foreground flex gap-4 text-sm tabular-nums","data-testid":`${s}-summary`,children:[r("span",{className:n.clean,children:[t.summary.clean," ",a("clean")]}),r("span",{className:n.warned,children:[t.summary.warned," ",a("warned")]}),r("span",{className:n.failing,children:[t.summary.failing," ",a("failing")]}),r("span",{className:n.exempt,children:[t.summary.exempt," ",a("exempt")]})]})]})}),t.project.checks.length>0&&e(c,{children:r(o,{className:"py-4 text-sm","data-testid":`${s}-project`,children:[r("span",{className:"font-medium",children:[a("Schema & config")," ",t.project.score,"/100"]}),r("span",{className:"text-muted-foreground",children:[" — ",t.project.checks.map(d=>d.name).join(", ")]})]})}),e(c,{children:e(o,{className:"p-0",children:r(j,{children:[e(R,{children:r(f,{children:[e(i,{className:"w-20",children:a("Score")}),e(i,{children:a("Procedure")}),e(i,{className:"w-32",children:a("Kind")}),e(i,{children:a("Rules fired")})]})}),e($,{children:k.map(d=>r(f,{"data-testid":`${s}-row`,children:[e(m,{className:u("tabular-nums font-medium",n[d.coverage]),children:d.coverage==="exempt"?"—":d.score}),e(m,{className:"font-mono text-xs",children:d.id}),r(m,{className:"text-muted-foreground text-xs",children:[d.visibility," ",d.kind,d.sensitivity.level==="high"&&e("span",{className:"ml-1 text-amber-600 dark:text-amber-400",children:a("sensitive")})]}),e(m,{className:"text-muted-foreground text-xs",children:d.coverage==="exempt"?E(d,a("no reason given")):d.checks.map(w=>w.name).join(", ")})]},d.id))})]})})})]})};export{Y as default};
@@ -1 +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-Cu_QmzO0.js";import V from"../packem_shared/ApiReferencePanel-DuIU1P8B.js";import W from"../packem_shared/OpenRpcReferencePanel-DXeffPFr.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};
1
+ import{c as L}from"react/compiler-runtime";import{useState as F}from"react";import{B as K}from"../packem_shared/button-BOPLD1un.js";import{useT as Y}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import D from"../packem_shared/ApiDocsPanel-BQ79UVEg.js";import M from"../packem_shared/ApiReferencePanel-CkCFMCBb.js";import W from"../packem_shared/OpenRpcReferencePanel-21OWMH45.js";import{jsx as r,jsxs as E}from"react/jsx-runtime";const _=["reference","snippets"],q=["openapi","openrpc"],k=V=>{const e=L(51),{functions:R,initialShardKey:N,openApiSpec:T,openRpcSpec:I}=V,t=Y(),[i,$]=F("reference"),[a,j]=F("openapi");let s;e[0]!==t?(s=t("Reference"),e[0]=t,e[1]=s):s=e[1];let o;e[2]!==t?(o=t("Snippets"),e[2]=t,e[3]=o):o=e[3];let w;e[4]!==s||e[5]!==o?(w={reference:s,snippets:o},e[4]=s,e[5]=o,e[6]=w):w=e[6];const O=w;let n;e[7]!==t?(n=t("OpenAPI"),e[7]=t,e[8]=n):n=e[8];let c;e[9]!==t?(c=t("OpenRPC"),e[9]=t,e[10]=c):c=e[10];let g;e[11]!==n||e[12]!==c?(g={openapi:n,openrpc:c},e[11]=n,e[12]=c,e[13]=g):g=e[13];const C=g;let S;e[14]===Symbol.for("react.memo_cache_sentinel")?(S=l=>{$(l.currentTarget.dataset.view)},e[14]=S):S=e[14];const z=S;let A;e[15]===Symbol.for("react.memo_cache_sentinel")?(A=l=>{j(l.currentTarget.dataset.format)},e[15]=A):A=e[15];const B=A;let p;e[16]!==t?(p=t("API view"),e[16]=t,e[17]=p):p=e[17];let f;e[18]!==i||e[19]!==O?(f=_.map(l=>r(K,{"aria-selected":i===l,"data-testid":`api-view-${l}`,"data-view":l,onClick:z,role:"tab",size:"sm",type:"button",variant:i===l?"default":"outline",children:O[l]},l)),e[18]=i,e[19]=O,e[20]=f):f=e[20];let m;e[21]!==f||e[22]!==p?(m=r("div",{"aria-label":p,className:"flex gap-1.5","data-testid":"api-view-toggle",role:"tablist",children:f}),e[21]=f,e[22]=p,e[23]=m):m=e[23];let d;e[24]!==a||e[25]!==C||e[26]!==t||e[27]!==i?(d=i==="reference"&&r("div",{"aria-label":t("API spec format"),className:"flex gap-1.5","data-testid":"api-format-toggle",role:"tablist",children:q.map(l=>r(K,{"aria-selected":a===l,"data-format":l,"data-testid":`api-format-${l}`,onClick:B,role:"tab",size:"sm",type:"button",variant:a===l?"default":"outline",children:C[l]},l))}),e[24]=a,e[25]=C,e[26]=t,e[27]=i,e[28]=d):d=e[28];let b;e[29]!==m||e[30]!==d?(b=E("div",{className:"flex shrink-0 flex-wrap items-center gap-3 border-b border-border px-6 py-3",children:[m,d]}),e[29]=m,e[30]=d,e[31]=b):b=e[31];let v;e[32]!==R||e[33]!==N||e[34]!==i?(v=i==="snippets"&&r("div",{className:"min-h-0 flex-1 overflow-y-auto p-6",children:r(D,{functions:R,initialShardKey:N})}),e[32]=R,e[33]=N,e[34]=i,e[35]=v):v=e[35];let h;e[36]!==a||e[37]!==T||e[38]!==i?(h=i==="reference"&&a==="openapi"&&r(M,{spec:T}),e[36]=a,e[37]=T,e[38]=i,e[39]=h):h=e[39];let u;e[40]!==a||e[41]!==I||e[42]!==i?(u=i==="reference"&&a==="openrpc"&&r(W,{spec:I}),e[40]=a,e[41]=I,e[42]=i,e[43]=u):u=e[43];let x;e[44]!==v||e[45]!==h||e[46]!==u?(x=E("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[v,h,u]}),e[44]=v,e[45]=h,e[46]=u,e[47]=x):x=e[47];let P;return e[48]!==b||e[49]!==x?(P=E("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"lunora-api-tab",children:[b,x]}),e[48]=b,e[49]=x,e[50]=P):P=e[50],P};export{k as default};
@@ -1 +1 @@
1
- import{useVirtualizer as A,observeElementRect as V}from"@tanstack/react-virtual";import{useState as j,useMemo as w,useRef as q}from"react";import{U as F}from"../packem_shared/error-alert-_2q2VtVG.js";import{L as H}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as O}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as U}from"../packem_shared/badge-BbuuAio7.js";import{c as _,f as B}from"../packem_shared/card-BMKx5UdA.js";import{E as D}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as J}from"../packem_shared/input-JHu63lTv.js";import{d as P,n as W,f as S,m as d,b as Z,p as l}from"../packem_shared/table-DZAB8cs3.js";import{N as G}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{S as Q}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as X}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Y}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as ee}from"../packem_shared/internal-zkEvTqy8.js";import{jsxs as o,jsx as e}from"react/jsx-runtime";const y=80,te=i=>{if(i===void 0)return"";const t=JSON.stringify(i);return t.length>y?`${t.slice(0,y)}…`:t},re=41,L=480,b=5,ae=(i,t)=>V(i,n=>{t(n.height>0?n:{height:L,width:n.width})}),we=({initialShardKey:i})=>{const t=X(),{queryShardKey:n,setShardKey:$,shardKey:C}=Q(i),[m,I]=j(""),{data:u,error:f,errorSource:E,isLoading:K,liveError:M}=G(Y.getAuditLog,{},{live:!0,shardKey:n}),c=w(()=>u?.entries??[],[u]),s=w(()=>{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]),p=q(null),g=A({count:s.length,estimateSize:()=>re,getScrollElement:()=>p.current,initialRect:{height:L,width:800},observeElementRect:ae,overscan:8}),h=g.getVirtualItems(),R=g.getTotalSize(),x=h[0]?.start??0,v=R-(h.at(-1)?.end??0),T={height:x},k={height:v},z=a=>{I(a.target.value)};return o("div",{className:"flex flex-col gap-4","data-testid":"lunora-audit",children:[o("div",{className:"flex flex-wrap items-center gap-2",children:[e(O,{onChange:$,testId:"au-shard-input",value:C}),e(H,{message:M,prefix:"au"}),e(J,{"aria-label":t("Filter audit log"),className:"h-8 w-48","data-testid":"au-search",onChange:z,placeholder:t("filter op, table, id"),value:m})]}),f!==null&&e(F,{error:E,testId:"au-error"}),f===null&&!K&&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(_,{className:"overflow-hidden py-0",children:e(B,{className:"max-h-[30rem] overflow-auto px-0",ref:p,children:o(P,{"data-testid":"au-table",children:[e(W,{children:o(S,{children:[e(d,{children:t("time")}),e(d,{children:t("op")}),e(d,{children:t("table")}),e(d,{children:t("id")}),e(d,{children:t("detail")})]})}),o(Z,{children:[x>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:b,style:T})}),h.map(a=>{const r=s[a.index],N=te(r.detail);return o(S,{"data-testid":"au-row",children:[e(l,{className:"text-muted-foreground tabular-nums",children:ee(r.ts,"—")}),e(l,{children:e(U,{variant:"secondary",children:r.op})}),e(l,{className:"font-medium",children:r.table??e("span",{className:"text-muted-foreground",children:"—"})}),e(l,{className:"max-w-[20ch] truncate font-mono text-xs",children:r.id??e("span",{className:"text-muted-foreground",children:"—"})}),e(l,{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:k})})]})]})})})]})};export{we as AuditPanel};
1
+ import{useVirtualizer as z,observeElementRect as B}from"@tanstack/react-virtual";import{useState as K,useMemo as N,useRef as V}from"react";import{E as j}from"../packem_shared/error-alert-TYdKetJd.js";import{L as k}from"../packem_shared/live-status-Bf7rR8o8.js";import{ShardInput as D}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as U}from"../packem_shared/badge-cAk9Di1Q.js";import{C as q,a as F}from"../packem_shared/card-BGlQzQY-.js";import{E as G}from"../packem_shared/empty-state-B939z6K2.js";import{I as W}from"../packem_shared/input-CY5W3wzv.js";import{T as J,a as P,b,c as s,d as Q,e as l}from"../packem_shared/table-BMsuYFhk.js";import{u as X}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{u as Z}from"../packem_shared/use-shard-key-BsP3o5wT.js";import{useT as $}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as Y}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as ee}from"../packem_shared/internal-CwaF9YNk.js";import{jsxs as i,jsx as e}from"react/jsx-runtime";const w=80,te=o=>{if(o===void 0)return"";const t=JSON.stringify(o);return t.length>w?`${t.slice(0,w)}…`:t},re=41,y=480,C=5,ae=(o,t)=>B(o,n=>{t(n.height>0?n:{height:y,width:n.width})}),Ne=({initialShardKey:o})=>{const t=$(),{queryShardKey:n,setShardKey:T,shardKey:L}=Z(o),[c,E]=K(""),{data:u,error:p,errorSource:I,isLoading:R,liveError:A}=X(Y.getAuditLog,{},{live:!0,shardKey:n}),m=N(()=>u?.entries??[],[u]),d=N(()=>{const a=c.trim().toLowerCase();return a===""?m:m.filter(r=>r.op.toLowerCase().includes(a)||(r.table??"").toLowerCase().includes(a)||(r.id??"").toLowerCase().includes(a))},[m,c]),f=V(null),g=z({count:d.length,estimateSize:()=>re,getScrollElement:()=>f.current,initialRect:{height:y,width:800},observeElementRect:ae,overscan:8}),h=g.getVirtualItems(),H=g.getTotalSize(),v=h[0]?.start??0,x=H-(h.at(-1)?.end??0),M={height:v},O={height:x},_=a=>{E(a.target.value)};return i("div",{className:"flex flex-col gap-4","data-testid":"lunora-audit",children:[i("div",{className:"flex flex-wrap items-center gap-2",children:[e(D,{onChange:T,testId:"au-shard-input",value:L}),e(k,{message:A,prefix:"au"}),e(W,{"aria-label":t("Filter audit log"),className:"h-8 w-48","data-testid":"au-search",onChange:_,placeholder:t("filter op, table, id"),value:c})]}),p!==null&&e(j,{error:I,testId:"au-error"}),p===null&&!R&&d.length===0&&e(G,{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.")}),d.length>0&&e(q,{className:"overflow-hidden py-0",children:e(F,{className:"max-h-[30rem] overflow-auto px-0",ref:f,children:i(J,{"data-testid":"au-table",children:[e(P,{children:i(b,{children:[e(s,{children:t("time")}),e(s,{children:t("op")}),e(s,{children:t("table")}),e(s,{children:t("id")}),e(s,{children:t("detail")})]})}),i(Q,{children:[v>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:C,style:M})}),h.map(a=>{const r=d[a.index],S=te(r.detail);return i(b,{"data-testid":"au-row",children:[e(l,{className:"text-muted-foreground tabular-nums",children:ee(r.ts,"—")}),e(l,{children:e(U,{variant:"secondary",children:r.op})}),e(l,{className:"font-medium",children:r.table??e("span",{className:"text-muted-foreground",children:"—"})}),e(l,{className:"max-w-[20ch] truncate font-mono text-xs",children:r.id??e("span",{className:"text-muted-foreground",children:"—"})}),e(l,{className:"max-w-[32ch] truncate font-mono text-xs text-muted-foreground",title:S||void 0,children:S||e("span",{className:"text-muted-foreground",children:"—"})})]},r.seq)}),x>0&&e("tr",{"aria-hidden":"true",children:e("td",{colSpan:C,style:O})})]})]})})})]})};export{Ne as AuditPanel};
@@ -1 +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-BMKx5UdA.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-zkEvTqy8.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};
1
+ import{c as oe}from"react/compiler-runtime";import{useLunora as de}from"@lunora/react";import{useQuery as ue}from"@tanstack/react-query";import{B as re}from"../packem_shared/badge-cAk9Di1Q.js";import{C as ae}from"../packem_shared/card-BGlQzQY-.js";import{E as fe}from"../packem_shared/empty-state-B939z6K2.js";import{S as ne}from"../packem_shared/skeleton-DFBBaJU6.js";import{useT as he}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{i as ge}from"../packem_shared/internal-CwaF9YNk.js";import{c as se}from"../packem_shared/utils-bhneXptQ.js";import{jsxs as i,jsx as a}from"react/jsx-runtime";const xe="/_lunora/health",ye="/_lunora/health/ready",Ne=(r,e)=>(r.endsWith("/")?r.slice(0,-1):r)+e,ve=()=>{const r=de();return async e=>{const w=e==="ready"?ye:xe,t=r.getAuthToken(),y=Ne(r.url,w);try{const o=await fetch(y,{headers:t===null?{}:{authorization:`Bearer ${t}`}});let p=null;try{p=await o.json()}catch{p=null}return{body:p,ok:o.ok,status:o.status}}catch(o){return{body:null,error:o instanceof Error?o.message:String(o),ok:!1,status:0}}}},ce={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},be={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},ke=r=>r==="unhealthy"?"crit":r==="degraded"?"warn":"ok",ie=r=>{const e=oe(13),{label:w,level:t,testId:y,value:o}=r,p=ce[t];let d;e[0]!==p?(d=se("size-1.5 shrink-0 rounded-full",p),e[0]=p,e[1]=d):d=e[1];let c;e[2]!==d?(c=a("span",{"aria-hidden":"true",className:d}),e[2]=d,e[3]=c):c=e[3];let m;e[4]!==w||e[5]!==c?(m=i("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[c,w]}),e[4]=w,e[5]=c,e[6]=m):m=e[6];let u;e[7]!==y||e[8]!==o?(u=a("span",{className:"text-lg font-semibold text-foreground","data-testid":y,children:o}),e[7]=y,e[8]=o,e[9]=u):u=e[9];let L;return e[10]!==m||e[11]!==u?(L=a(ae,{className:"gap-0 py-0",children:i("div",{className:"flex flex-col gap-2.5 p-4",children:[m,u]})}),e[10]=m,e[11]=u,e[12]=L):L=e[12],L},De=r=>{const e=oe(119),{probe:w}=r,t=he(),y=de(),o=ve(),p=w??o;let d;e[0]!==p?(d=async()=>{const[s,n]=await Promise.all([p("live"),p("ready")]);return{live:s,ready:n}},e[0]=p,e[1]=d):d=e[1];let c;e[2]!==y?(c=y.clientIdentifier(),e[2]=y,e[3]=c):c=e[3];let m;e[4]!==c?(m=["deployment-health",c],e[4]=c,e[5]=m):m=e[5];let u;e[6]!==d||e[7]!==m?(u={queryFn:d,queryKey:m},e[6]=d,e[7]=m,e[8]=u):u=e[8];const{data:L,isPending:me}=ue(u),X=L?.live??null,pe=L?.ready??null;if(me){let s;return e[9]===Symbol.for("react.memo_cache_sentinel")?(s=i("div",{className:"flex flex-col gap-4","data-testid":"deployment-health-loading",children:[a(ne,{className:"h-16 w-full"}),a(ne,{className:"h-40 w-full"})]}),e[9]=s):s=e[9],s}const l=X?.body??null;if(l===null){const s=X?.status===403;let n;e[10]!==s||e[11]!==X?.error||e[12]!==t?(n=s?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:X?.error??t("no response")}),e[10]=s,e[11]=X?.error,e[12]=t,e[13]=n):n=e[13];let g;e[14]!==t?(g=t("Health endpoint unavailable"),e[14]=t,e[15]=g):g=e[15];let h;return e[16]!==n||e[17]!==g?(h=a(fe,{description:n,testId:"deployment-health-error",title:g}),e[16]=n,e[17]=g,e[18]=h):h=e[18],h}let ee;e[19]!==l.status?(ee=ke(l.status),e[19]=l.status,e[20]=ee):ee=e[20];const H=ee;let f;if(l.status==="unhealthy"){let s;e[21]!==t?(s=t("Unhealthy"),e[21]=t,e[22]=s):s=e[22],f=s}else if(l.status==="degraded"){let s;e[23]!==t?(s=t("Degraded"),e[23]=t,e[24]=s):s=e[24],f=s}else{let s;e[25]!==t?(s=t("Healthy"),e[25]=t,e[26]=s):s=e[26],f=s}const T=pe?.ok??!1,Z=T?"ok":"crit";let _,E,P,N,v,b,C,j,k,S;if(e[27]!==l.appName||e[28]!==l.appVersion||e[29]!==l.checks||e[30]!==l.timestamp||e[31]!==H||e[32]!==Z||e[33]!==T||e[34]!==f||e[35]!==t){const s=[...l.checks].toSorted(we);E="flex flex-col gap-6",P="deployment-health";let n;e[46]!==t?(n=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[46]=t,e[47]=n):n=e[47],e[48]!==n?(N=a("p",{className:"text-sm text-muted-foreground",children:n}),e[48]=n,e[49]=N):N=e[49];const g=be[H];let h;e[50]!==g?(h=se("flex size-10 shrink-0 items-center justify-center rounded-full",g),e[50]=g,e[51]=h):h=e[51];const le=ce[H];let A;e[52]!==le?(A=se("size-3 rounded-full",le),e[52]=le,e[53]=A):A=e[53];let D;e[54]!==A?(D=a("span",{className:A}),e[54]=A,e[55]=D):D=e[55];let I;e[56]!==h||e[57]!==D?(I=a("span",{"aria-hidden":"true",className:h,children:D}),e[56]=h,e[57]=D,e[58]=I):I=e[58];let R;e[59]!==f?(R=a("span",{className:"text-sm font-semibold text-foreground","data-testid":"dh-status",children:f}),e[59]=f,e[60]=R):R=e[60];let z;e[61]!==l.appName||e[62]!==l.appVersion?(z=i("span",{className:"font-mono text-[13px] text-muted-foreground","data-testid":"dh-app",children:[l.appName," · ",l.appVersion]}),e[61]=l.appName,e[62]=l.appVersion,e[63]=z):z=e[63];let $;e[64]!==R||e[65]!==z?($=i("div",{className:"grid leading-tight",children:[R,z]}),e[64]=R,e[65]=z,e[66]=$):$=e[66];let B;e[67]!==I||e[68]!==$?(B=i("div",{className:"flex items-center gap-3",children:[I,$]}),e[67]=I,e[68]=$,e[69]=B):B=e[69];let U;e[70]!==t?(U=t("Checked"),e[70]=t,e[71]=U):U=e[71];let q;e[72]!==U?(q=a("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:U}),e[72]=U,e[73]=q):q=e[73];let O;e[74]!==l.timestamp?(O=ge(l.timestamp),e[74]=l.timestamp,e[75]=O):O=e[75];let F;e[76]!==O?(F=a("time",{className:"text-[13px] text-muted-foreground","data-testid":"dh-timestamp",children:O}),e[76]=O,e[77]=F):F=e[77];let G;e[78]!==q||e[79]!==F?(G=i("div",{className:"text-end",children:[q,F]}),e[78]=q,e[79]=F,e[80]=G):G=e[80],e[81]!==B||e[82]!==G?(v=a(ae,{className:"gap-0 py-0",children:i("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[B,G]})}),e[81]=B,e[82]=G,e[83]=v):v=e[83];let K;e[84]!==t?(K=t("Liveness"),e[84]=t,e[85]=K):K=e[85];let Q;e[86]!==H||e[87]!==f||e[88]!==K?(Q=a(ie,{label:K,level:H,testId:"dh-liveness",value:f}),e[86]=H,e[87]=f,e[88]=K,e[89]=Q):Q=e[89];let W;e[90]!==t?(W=t("Readiness"),e[90]=t,e[91]=W):W=e[91];let Y;e[92]!==T||e[93]!==t?(Y=t(T?"Ready":"Not ready"),e[92]=T,e[93]=t,e[94]=Y):Y=e[94];let J;e[95]!==Z||e[96]!==W||e[97]!==Y?(J=a(ie,{label:W,level:Z,testId:"dh-readiness",value:Y}),e[95]=Z,e[96]=W,e[97]=Y,e[98]=J):J=e[98],e[99]!==Q||e[100]!==J?(b=i("div",{className:"grid gap-3 sm:grid-cols-2","data-testid":"dh-probes",children:[Q,J]}),e[99]=Q,e[100]=J,e[101]=b):b=e[101],_=ae,C="gap-0 py-0",j="dh-checks";let M;e[102]!==t?(M=t("Subsystem checks"),e[102]=t,e[103]=M):M=e[103],e[104]!==M?(k=a("header",{className:"border-b border-border px-4 py-3",children:a("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:M})}),e[104]=M,e[105]=k):k=e[105],S=s.length===0?a("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"dh-checks-empty",children:t("No checks reported.")}):a("ul",{className:"divide-y divide-border",children:s.map(x=>i("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2.5 text-xs","data-testid":`dh-check-${x.name}`,children:[i("span",{className:"flex items-center gap-2",children:[a("span",{"aria-hidden":"true",className:se("size-1.5 shrink-0 rounded-full",x.status==="up"?"bg-success":"bg-destructive")}),a("span",{className:"font-mono text-foreground",children:x.name}),x.critical&&a(re,{variant:"outline",children:t("Critical")})]}),i("span",{className:"flex shrink-0 items-center gap-2",children:[x.message!==void 0&&a("span",{className:"text-muted-foreground",children:x.message}),a(re,{"data-testid":`dh-check-status-${x.name}`,variant:x.status==="up"?"secondary":"destructive",children:x.status==="up"?t("Up"):t("Down")})]})]},x.name))}),e[27]=l.appName,e[28]=l.appVersion,e[29]=l.checks,e[30]=l.timestamp,e[31]=H,e[32]=Z,e[33]=T,e[34]=f,e[35]=t,e[36]=_,e[37]=E,e[38]=P,e[39]=N,e[40]=v,e[41]=b,e[42]=C,e[43]=j,e[44]=k,e[45]=S}else _=e[36],E=e[37],P=e[38],N=e[39],v=e[40],b=e[41],C=e[42],j=e[43],k=e[44],S=e[45];let V;e[106]!==_||e[107]!==C||e[108]!==j||e[109]!==k||e[110]!==S?(V=i(_,{className:C,"data-testid":j,children:[k,S]}),e[106]=_,e[107]=C,e[108]=j,e[109]=k,e[110]=S,e[111]=V):V=e[111];let te;return e[112]!==E||e[113]!==P||e[114]!==N||e[115]!==v||e[116]!==b||e[117]!==V?(te=i("div",{className:E,"data-testid":P,children:[N,v,b,V]}),e[112]=E,e[113]=P,e[114]=N,e[115]=v,e[116]=b,e[117]=V,e[118]=te):te=e[118],te};function we(r,e){return r.name.localeCompare(e.name)}export{De as DeploymentHealthPanel};
@@ -1,3 +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{f as ie,c as ce}from"../packem_shared/card-BMKx5UdA.js";import{l as we}from"../packem_shared/textarea-Bu2-jKAs.js";import{U as ye}from"../packem_shared/use-admin-query-CnnyWJXM.js";import{useT as Se}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as Z}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{d as de,b as oe,f as me,g as fe}from"../packem_shared/internal-zkEvTqy8.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};
1
+ import{c as xe}from"react/compiler-runtime";import{LunoraError as ae}from"@lunora/errors";import{useLunora as he}from"@lunora/react";import{useState as q}from"react";import{ConfirmButton as be}from"../packem_shared/ConfirmButton-Cj2SOapE.js";import{ShardInput as ge}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as Ne}from"../packem_shared/button-BOPLD1un.js";import{a as ie,C as ce}from"../packem_shared/card-BGlQzQY-.js";import{T as ye}from"../packem_shared/textarea-DpO3i-Qo.js";import{a as Se}from"../packem_shared/use-admin-query-P0RJrjsD.js";import{useT as we}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as ee}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{c as pe,d as de,b as le,f as me}from"../packem_shared/internal-CwaF9YNk.js";import{r as fe}from"../packem_shared/shard-history-QcjcMnCA.js";import{jsx as s,jsxs as b}from"react/jsx-runtime";const Ie=pe(ee.exportShard),_e=pe(ee.importShard),je=u=>u.map(e=>JSON.stringify(e)).join(`
2
+ `),ve=u=>{const e=[],te=u.split(`
3
+ `);for(const[n,g]of te.entries()){const t=g.trim();if(t==="")continue;const r=JSON.parse(t);if(typeof r!="object"||r===null)throw new ae("INTERNAL",`line ${(n+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 ae("INTERNAL",`line ${(n+1).toString()}: expected a { table, doc } object`);e.push(x)}return e},Fe=u=>{const e=xe(94),{initialShardKey:te}=u,n=he(),g=Se(),t=we(),[r,x]=q(te??""),[l,oe]=q(""),[c,F]=q(!1),[G,H]=q(null),[a,re]=q(null),[N,ne]=q(null);let Q;e[0]!==n||e[1]!==r?(Q=async()=>{F(!0),H(null),re(null);try{const i=await n.query(Ie,{},de(r));fe(r),oe(je(i.rows)),ne(i.rows.length)}catch(i){H(le(i))}F(!1)},e[0]=n,e[1]=r,e[2]=Q):Q=e[2];const U=Q;let V;e[3]!==n||e[4]!==g||e[5]!==l||e[6]!==r||e[7]!==t?(V=async()=>{F(!0),H(null),re(null),ne(null);let i;try{i=ve(l)}catch(o){H(t("Invalid NDJSON: {message}",{message:le(o)})),F(!1);return}try{const o=await n.query(_e,{rows:i},de(r));fe(r),re(o),g(ee.readTablePage),g(ee.listTables)}catch(o){H(le(o))}F(!1)},e[3]=n,e[4]=g,e[5]=l,e[6]=r,e[7]=t,e[8]=V):V=e[8];const X=V;let y,S,w,d,I,m,f,_,j,p,v;if(e[9]!==c||e[10]!==N||e[11]!==U||e[12]!==a||e[13]!==X||e[14]!==l||e[15]!==r||e[16]!==t){const i=a===null?0:Object.values(a.inserted).reduce(Ce,0);let o;e[28]!==U?(o=()=>{me(U())},e[28]=U,e[29]=o):o=e[29];const z=o;let Y;e[30]!==X?(Y=()=>{me(X())},e[30]=X,e[31]=Y):Y=e[31];const se=Y;let Z;e[32]===Symbol.for("react.memo_cache_sentinel")?(Z=h=>{oe(h.target.value)},e[32]=Z):Z=e[32];const ue=Z;v="flex flex-col gap-4",w="lunora-export-import";let O;e[33]!==t?(O=t("Export"),e[33]=t,e[34]=O):O=e[34];let R;e[35]!==O?(R=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:O})}),e[35]=O,e[36]=R):R=e[36];let E;e[37]!==r?(E=s(ge,{onChange:x,testId:"ei-shard-input",value:r}),e[37]=r,e[38]=E):E=e[38];let L;e[39]!==t?(L=t("Export"),e[39]=t,e[40]=L):L=e[40];let D;e[41]!==c||e[42]!==z||e[43]!==L?(D=s(Ne,{"data-testid":"ei-export",disabled:c,onClick:z,type:"button",children:L}),e[41]=c,e[42]=z,e[43]=L,e[44]=D):D=e[44];let $;e[45]!==E||e[46]!==D?($=b("div",{className:"flex flex-wrap items-center gap-2",children:[E,D]}),e[45]=E,e[46]=D,e[47]=$):$=e[47];let B;e[48]!==N||e[49]!==t?(B=N!==null&&s("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]=B):B=e[50];let J;e[51]!==$||e[52]!==B?(J=b(ie,{className:"flex flex-col gap-3 p-4",children:[$,B]}),e[51]=$,e[52]=B,e[53]=J):J=e[53],e[54]!==R||e[55]!==J?(d=b(ce,{className:"rounded-xl border border-border bg-card shadow-xs",children:[R,J]}),e[54]=R,e[55]=J,e[56]=d):d=e[56],S=ce,j="rounded-xl border border-border bg-card shadow-xs";let P;e[57]!==t?(P=t("Import"),e[57]=t,e[58]=P):P=e[58],e[59]!==P?(p=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:P})}),e[59]=P,e[60]=p):p=e[60],y=ie,I="flex flex-col gap-3 p-4",e[61]!==l?(m=s(ye,{"aria-label":"NDJSON",className:"font-mono text-xs min-h-40 rounded-md","data-testid":"ei-ndjson",onChange:ue,placeholder:'{"table":"messages","doc":{…}}',value:l}),e[61]=l,e[62]=m):m=e[62];let k;e[63]!==t?(k=t("Import (writes rows)?"),e[63]=t,e[64]=k):k=e[64];let K;e[65]!==c||e[66]!==l?(K=c||l.trim()==="",e[65]=c,e[66]=l,e[67]=K):K=e[67];let M;e[68]!==t?(M=t("Import"),e[68]=t,e[69]=M):M=e[69],e[70]!==se||e[71]!==k||e[72]!==K||e[73]!==M?(f=s("div",{className:"flex flex-wrap items-center gap-2",children:s(be,{confirmLabel:k,disabled:K,onConfirm:se,testId:"ei-import",children:M})}),e[70]=se,e[71]=k,e[72]=K,e[73]=M,e[74]=f):f=e[74],_=a!==null&&b("div",{className:"flex flex-col gap-2","data-testid":"ei-import-result",children:[s("p",{className:"text-sm text-muted-foreground",children:t("Inserted {inserted}, {conflicts} conflicts, {errors} errors.",{conflicts:a.conflicts,errors:a.errors.length,inserted:i})}),a.errors.length>0&&s("ul",{className:"flex flex-col gap-1","data-testid":"ei-import-errors",children:a.errors.map(h=>s("li",{className:"text-xs text-destructive",children:t("line {line} ({table}): {message}",{line:h.line,message:h.message,table:h.table})},`${h.table}-${h.line.toString()}`))})]}),e[9]=c,e[10]=N,e[11]=U,e[12]=a,e[13]=X,e[14]=l,e[15]=r,e[16]=t,e[17]=y,e[18]=S,e[19]=w,e[20]=d,e[21]=I,e[22]=m,e[23]=f,e[24]=_,e[25]=j,e[26]=p,e[27]=v}else y=e[17],S=e[18],w=e[19],d=e[20],I=e[21],m=e[22],f=e[23],_=e[24],j=e[25],p=e[26],v=e[27];let C;e[75]!==y||e[76]!==I||e[77]!==m||e[78]!==f||e[79]!==_?(C=b(y,{className:I,children:[m,f,_]}),e[75]=y,e[76]=I,e[77]=m,e[78]=f,e[79]=_,e[80]=C):C=e[80];let T;e[81]!==S||e[82]!==C||e[83]!==j||e[84]!==p?(T=b(S,{className:j,children:[p,C]}),e[81]=S,e[82]=C,e[83]=j,e[84]=p,e[85]=T):T=e[85];let A;e[86]!==G?(A=G!==null&&s("p",{className:"text-sm text-destructive","data-testid":"ei-error",role:"alert",children:G}),e[86]=G,e[87]=A):A=e[87];let W;return e[88]!==w||e[89]!==d||e[90]!==T||e[91]!==A||e[92]!==v?(W=b("div",{className:v,"data-testid":w,children:[d,T,A]}),e[88]=w,e[89]=d,e[90]=T,e[91]=A,e[92]=v,e[93]=W):W=e[93],W};function Ce(u,e){return u+e}export{Fe as ExportImportPanel};
@@ -1,4 +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-Y2YSjhCf.js";import{c as at,f as it}from"../packem_shared/card-BMKx5UdA.js";import{f as Ne}from"../packem_shared/checkbox-StT4Gob6.js";import{m as oe,n as ct,f as me,b as dt,d as ut,p as te}from"../packem_shared/table-DZAB8cs3.js";import{l as Ce,f as q,b as ee,d as xe,g as $e,c as ft}from"../packem_shared/internal-zkEvTqy8.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-Dmg86v1D.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-4aE59aDq.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};
1
+ import{c as U}from"react/compiler-runtime";import{useState as B,useEffect as oe,useRef as me,useMemo as he,useCallback as lt}from"react";import{ShardInput as nt}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as re}from"../packem_shared/button-BOPLD1un.js";import{E as we}from"../packem_shared/empty-state-B939z6K2.js";import{useT as ot}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{S as rt}from"../packem_shared/grid-features-C_yXlMc_.js";import{C as it,a as at}from"../packem_shared/card-BGlQzQY-.js";import{C as Ce}from"../packem_shared/checkbox-C5w53W-E.js";import{c as ne,a as ct,b as pe,d as dt,T as ft,e as te}from"../packem_shared/table-BMsuYFhk.js";import{l as Ne,f as P,b as ee,d as xe,c as Te,g as ut}from"../packem_shared/internal-CwaF9YNk.js";import{ConfirmButton as ht}from"../packem_shared/ConfirmButton-Cj2SOapE.js";import{B as de}from"../packem_shared/badge-cAk9Di1Q.js";import{jsx as r,jsxs as R,Fragment as _e}from"react/jsx-runtime";import{I as mt}from"../packem_shared/input-CY5W3wzv.js";import{d as pt}from"../packem_shared/cf-links-CBJ5SywP.js";import{useLunora as gt}from"@lunora/react";import{useAutoRefresh as bt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.js";import{ADMIN_FUNCTIONS as Ee}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";const $e=(f,e,t)=>{const{onCopy:s,onDelete:o,onDownload:l,onToggleSelect:c}=t,a=()=>{s(f.key)},n=()=>{l(f.key)},d=()=>{o(f.key)},h=()=>{c(f.key)};return{copy:a,download:n,name:f.key.slice(e.length),remove:d,toggle:h}},Fe=f=>{const e=U(31),{busy:t,buttonClassName:s,copied:o,objectKey:l,onCopy:c,onDelete:a,onDownload:n,t:d}=f,h=`storage-copy-${l}`;let u;e[0]!==o||e[1]!==d?(u=d(o?"Copied":"Copy URL"),e[0]=o,e[1]=d,e[2]=u):u=e[2];let m;e[3]!==t||e[4]!==s||e[5]!==c||e[6]!==h||e[7]!==u?(m=r(re,{className:s,"data-testid":h,disabled:t,onClick:c,size:"sm",type:"button",variant:"ghost",children:u}),e[3]=t,e[4]=s,e[5]=c,e[6]=h,e[7]=u,e[8]=m):m=e[8];const k=`storage-download-${l}`;let i;e[9]!==d?(i=d("Download"),e[9]=d,e[10]=i):i=e[10];let v;e[11]!==t||e[12]!==s||e[13]!==n||e[14]!==k||e[15]!==i?(v=r(re,{className:s,"data-testid":k,disabled:t,onClick:n,size:"sm",type:"button",variant:"ghost",children:i}),e[11]=t,e[12]=s,e[13]=n,e[14]=k,e[15]=i,e[16]=v):v=e[16];let w;e[17]!==d?(w=d("Delete object?"),e[17]=d,e[18]=w):w=e[18];const y=`storage-delete-${l}`;let g;e[19]!==d?(g=d("Delete"),e[19]=d,e[20]=g):g=e[20];let x;e[21]!==t||e[22]!==a||e[23]!==w||e[24]!==y||e[25]!==g?(x=r(ht,{confirmLabel:w,disabled:t,onConfirm:a,testId:y,children:g}),e[21]=t,e[22]=a,e[23]=w,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=R(_e,{children:[m,v,x]}),e[27]=x,e[28]=m,e[29]=v,e[30]=b):b=e[30],b},Re=f=>{const e=U(14),{objectKey:t,references:s,t:o}=f;if(s===void 0)return null;if(s.length===0){const h=`storage-orphan-${t}`;let u;e[0]!==o?(u=o("Orphan"),e[0]=o,e[1]=u):u=e[1];let m;return e[2]!==h||e[3]!==u?(m=r(de,{"data-testid":h,variant:"warning",children:u}),e[2]=h,e[3]=u,e[4]=m):m=e[4],m}let l;e[5]!==s?(l=s.map(yt).join(`
2
+ `),e[5]=s,e[6]=l):l=e[6];const c=l,a=`storage-refs-${t}`;let n;e[7]!==s.length||e[8]!==o?(n=s.length===1?o("1 record"):o("{count} records",{count:s.length}),e[7]=s.length,e[8]=o,e[9]=n):n=e[9];let d;return e[10]!==c||e[11]!==a||e[12]!==n?(d=r(de,{"data-testid":a,title:c,variant:"secondary",children:n}),e[10]=c,e[11]=a,e[12]=n,e[13]=d):d=e[13],d},ze=f=>{const e=U(7),{objectKey:t,onToggle:s,selected:o,t:l}=f;let c;e[0]!==l?(c=l("Select row"),e[0]=l,e[1]=c):c=e[1];const a=`storage-select-${t}`;let n;return e[2]!==s||e[3]!==o||e[4]!==c||e[5]!==a?(n=r(Ce,{"aria-label":c,checked:o,"data-testid":a,onCheckedChange:s}),e[2]=s,e[3]=o,e[4]=c,e[5]=a,e[6]=n):n=e[6],n};function yt(f){return`${f.table}·${f.id}`}const xt=f=>{const e=U(10),{colSpan:t,name:s,onEnter:o}=f;let l;e[0]!==s||e[1]!==o?(l=()=>{o(s)},e[0]=s,e[1]=o,e[2]=l):l=e[2];const c=l;let a;e[3]===Symbol.for("react.memo_cache_sentinel")?(a=r("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:r("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]=a):a=e[3];let n;e[4]!==c||e[5]!==s?(n=R("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:[a,s]}),e[4]=c,e[5]=s,e[6]=n):n=e[6];let d;return e[7]!==t||e[8]!==n?(d=r(pe,{children:r(te,{colSpan:t,children:n})}),e[7]=t,e[8]=n,e[9]=d):d=e[9],d},vt=f=>{const e=U(37),{busy:t,copiedKey:s,handlers:o,object:l,prefix:c,references:a,selected:n,showReferences:d,t:h}=f;let u;e[0]!==o||e[1]!==l||e[2]!==c?(u=$e(l,c,o),e[0]=o,e[1]=l,e[2]=c,e[3]=u):u=e[3];const{copy:m,download:k,name:i,remove:v,toggle:w}=u;let y;e[4]!==l.key||e[5]!==n||e[6]!==h||e[7]!==w?(y=r(te,{className:"w-8",children:r(ze,{objectKey:l.key,onToggle:w,selected:n,t:h})}),e[4]=l.key,e[5]=n,e[6]=h,e[7]=w,e[8]=y):y=e[8];let g;e[9]!==i?(g=r(te,{className:"font-mono text-xs",children:i}),e[9]=i,e[10]=g):g=e[10];let x;e[11]!==l.size?(x=Ne(l.size),e[11]=l.size,e[12]=x):x=e[12];let b;e[13]!==x?(b=r(te,{className:"tabular-nums text-muted-foreground",children:x}),e[13]=x,e[14]=b):b=e[14];const N=l.httpMetadata?.contentType??"";let S;e[15]!==N?(S=r(te,{children:N}),e[15]=N,e[16]=S):S=e[16];let C;e[17]!==l.key||e[18]!==a||e[19]!==d||e[20]!==h?(C=d&&r(te,{children:r(Re,{objectKey:l.key,references:a,t:h})}),e[17]=l.key,e[18]=a,e[19]=d,e[20]=h,e[21]=C):C=e[21];const E=s===l.key;let T;e[22]!==t||e[23]!==m||e[24]!==k||e[25]!==l.key||e[26]!==v||e[27]!==h||e[28]!==E?(T=r(te,{className:"text-right",children:r("span",{className:"inline-flex items-center gap-1",children:r(Fe,{busy:t,copied:E,objectKey:l.key,onCopy:m,onDelete:v,onDownload:k,t:h})})}),e[22]=t,e[23]=m,e[24]=k,e[25]=l.key,e[26]=v,e[27]=h,e[28]=E,e[29]=T):T=e[29];let F;return e[30]!==T||e[31]!==y||e[32]!==g||e[33]!==b||e[34]!==S||e[35]!==C?(F=R(pe,{"data-testid":"fb-row",children:[y,g,b,S,C,T]}),e[30]=T,e[31]=y,e[32]=g,e[33]=b,e[34]=S,e[35]=C,e[36]=F):F=e[36],F},kt=f=>{const e=U(65),{allSelected:t,busy:s,copiedKey:o,files:l,folders:c,handlers:a,onEnterFolder:n,prefix:d,references:h,selected:u,showReferences:m,someSelected:k,t:i,toggleSelectAll:v}=f;let w;e[0]!==i?(w=i("Select all rows"),e[0]=i,e[1]=w):w=e[1];let y;e[2]!==t||e[3]!==k||e[4]!==w||e[5]!==v?(y=r(ne,{className:"w-8",children:r(Ce,{"aria-label":w,checked:t,"data-testid":"storage-select-all",indeterminate:k,onCheckedChange:v})}),e[2]=t,e[3]=k,e[4]=w,e[5]=v,e[6]=y):y=e[6];let g;e[7]!==i?(g=i("key"),e[7]=i,e[8]=g):g=e[8];let x;e[9]!==g?(x=r(ne,{children:g}),e[9]=g,e[10]=x):x=e[10];let b;e[11]!==i?(b=i("size"),e[11]=i,e[12]=b):b=e[12];let N;e[13]!==b?(N=r(ne,{children:b}),e[13]=b,e[14]=N):N=e[14];let S;e[15]!==i?(S=i("content-type"),e[15]=i,e[16]=S):S=e[16];let C;e[17]!==S?(C=r(ne,{children:S}),e[17]=S,e[18]=C):C=e[18];let E;e[19]!==m||e[20]!==i?(E=m&&r(ne,{children:i("used by")}),e[19]=m,e[20]=i,e[21]=E):E=e[21];let T;e[22]!==i?(T=i("Actions"),e[22]=i,e[23]=T):T=e[23];let F;e[24]!==T?(F=r(ne,{"aria-label":T}),e[24]=T,e[25]=F):F=e[25];let $;e[26]!==F||e[27]!==y||e[28]!==x||e[29]!==N||e[30]!==C||e[31]!==E?($=r(ct,{children:R(pe,{children:[y,x,N,C,E,F]})}),e[26]=F,e[27]=y,e[28]=x,e[29]=N,e[30]=C,e[31]=E,e[32]=$):$=e[32];let z;if(e[33]!==c||e[34]!==n||e[35]!==m){let D;e[37]!==n||e[38]!==m?(D=K=>r(xt,{colSpan:m?6:5,name:K,onEnter:n},K),e[37]=n,e[38]=m,e[39]=D):D=e[39],z=c.map(D),e[33]=c,e[34]=n,e[35]=m,e[36]=z}else z=e[36];let L;if(e[40]!==s||e[41]!==o||e[42]!==l||e[43]!==a||e[44]!==d||e[45]!==h||e[46]!==u||e[47]!==m||e[48]!==i){let D;e[50]!==s||e[51]!==o||e[52]!==a||e[53]!==d||e[54]!==h||e[55]!==u||e[56]!==m||e[57]!==i?(D=K=>r(vt,{busy:s,copiedKey:o,handlers:a,object:K,prefix:d,references:h[K.key],selected:u.has(K.key),showReferences:m,t:i},K.key),e[50]=s,e[51]=o,e[52]=a,e[53]=d,e[54]=h,e[55]=u,e[56]=m,e[57]=i,e[58]=D):D=e[58],L=l.map(D),e[40]=s,e[41]=o,e[42]=l,e[43]=a,e[44]=d,e[45]=h,e[46]=u,e[47]=m,e[48]=i,e[49]=L}else L=e[49];let j;e[59]!==z||e[60]!==L?(j=R(dt,{children:[z,L]}),e[59]=z,e[60]=L,e[61]=j):j=e[61];let O;return e[62]!==$||e[63]!==j?(O=r(it,{className:"overflow-hidden py-0",children:r(at,{className:"px-0",children:R(ft,{"data-testid":"fb-table",children:[$,j]})})}),e[62]=$,e[63]=j,e[64]=O):O=e[64],O},St=[{label:"15m",seconds:900},{label:"1h",seconds:3600},{label:"24h",seconds:86400},{label:"7d",seconds:604800}],wt=3600,ve=(f,e)=>{if(e==="size")return f.size;if(e==="type")return f.httpMetadata?.contentType??"";if(e==="date"){if(f.uploaded===void 0)return 0;const t=new Date(f.uploaded).getTime();return Number.isNaN(t)?0:t}return e.startsWith("tag:")?f.customMetadata?.[e.slice(4)]??"":f.key},Ct=(f,e,t)=>{const s=t==="desc"?-1:1;return f.toSorted((o,l)=>{const c=ve(o,e),a=ve(l,e);return(typeof c=="number"&&typeof a=="number"?c-a:String(c).localeCompare(String(a)))*s})},Nt=(f,e)=>{const t=new Set,s=[];for(const o of f){const l=o.key.slice(e.length),c=l.indexOf("/");c===-1?s.push(o):t.add(l.slice(0,c+1))}return{files:s,folders:[...t].toSorted((o,l)=>o.localeCompare(l))}},Tt=f=>{const e=U(59),{bucket:t,buckets:s,busy:o,draftPrefix:l,expiry:c,fileInputRef:a,onBucketChange:n,onExpiryChange:d,onFileChange:h,onList:u,onPrefixChange:m,onUploadClick:k,t:i}=f;let v;e[0]!==m?(v=G=>{m(G.target.value)},e[0]=m,e[1]=v):v=e[1];const w=v;let y;e[2]!==n?(y=G=>{n(G.target.value)},e[2]=n,e[3]=y):y=e[3];const g=y;let x;e[4]!==d?(x=G=>{d(Number.parseInt(G.target.value,10))},e[4]=d,e[5]=x):x=e[5];const b=x;let N;e[6]!==t||e[7]!==s||e[8]!==g||e[9]!==i?(N=s.length>0&&r("select",{"aria-label":i("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:s.map(Et)}),e[6]=t,e[7]=s,e[8]=g,e[9]=i,e[10]=N):N=e[10];let S;e[11]!==i?(S=i("Key prefix"),e[11]=i,e[12]=S):S=e[12];let C;e[13]!==i?(C=i("key prefix (optional)"),e[13]=i,e[14]=C):C=e[14];let E;e[15]!==l||e[16]!==w||e[17]!==S||e[18]!==C?(E=r(mt,{"aria-label":S,className:"h-8 w-64 max-w-full","data-testid":"fb-prefix-input",onChange:w,placeholder:C,value:l}),e[15]=l,e[16]=w,e[17]=S,e[18]=C,e[19]=E):E=e[19];let T;e[20]!==i?(T=i("List"),e[20]=i,e[21]=T):T=e[21];let F;e[22]!==o||e[23]!==u||e[24]!==T?(F=r(re,{"data-testid":"fb-list",disabled:o,onClick:u,size:"sm",type:"button",children:T}),e[22]=o,e[23]=u,e[24]=T,e[25]=F):F=e[25];let $;e[26]!==o||e[27]!==i?($=i(o?"Uploading…":"Upload"),e[26]=o,e[27]=i,e[28]=$):$=e[28];let z;e[29]!==o||e[30]!==k||e[31]!==$?(z=r(re,{"data-testid":"storage-upload",disabled:o,onClick:k,size:"sm",type:"button",variant:"outline",children:$}),e[29]=o,e[30]=k,e[31]=$,e[32]=z):z=e[32];let L;e[33]!==a||e[34]!==h?(L=r("input",{className:"hidden","data-testid":"storage-file-input",onChange:h,ref:a,type:"file"}),e[33]=a,e[34]=h,e[35]=L):L=e[35];let j;e[36]!==i?(j=i("Link expiry"),e[36]=i,e[37]=j):j=e[37];let O;e[38]!==i?(O=St.map(G=>r("option",{value:G.seconds,children:i(G.label)},G.seconds)),e[38]=i,e[39]=O):O=e[39];let D;e[40]!==c||e[41]!==b||e[42]!==O?(D=r("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:O}),e[40]=c,e[41]=b,e[42]=O,e[43]=D):D=e[43];let K;e[44]!==j||e[45]!==D?(K=R("label",{className:"ml-auto flex items-center gap-1.5 text-xs text-muted-foreground",htmlFor:"storage-expiry",children:[j,D]}),e[44]=j,e[45]=D,e[46]=K):K=e[46];let A;e[47]!==i?(A=i("Open in Cloudflare"),e[47]=i,e[48]=A):A=e[48];let M;e[49]!==A?(M=r("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"fb-cf-link",href:pt,rel:"noreferrer",target:"_blank",children:A}),e[49]=A,e[50]=M):M=e[50];let H;return e[51]!==z||e[52]!==L||e[53]!==K||e[54]!==M||e[55]!==N||e[56]!==E||e[57]!==F?(H=R("div",{className:"flex flex-wrap items-center gap-2",children:[N,E,F,z,L,K,M]}),e[51]=z,e[52]=L,e[53]=K,e[54]=M,e[55]=N,e[56]=E,e[57]=F,e[58]=H):H=e[58],H},_t=f=>{const e=U(66),{onSortKeyChange:t,onThumbSizeChange:s,showGrid:o,showList:l,sortDirection:c,sortKey:a,t:n,tagKeys:d,thumbSize:h,toggleSortDirection:u,view:m}=f;let k;e[0]!==t?(k=W=>{t(W.target.value)},e[0]=t,e[1]=k):k=e[1];const i=k;let v;e[2]!==s?(v=W=>{s(Number.parseInt(W.target.value,10))},e[2]=s,e[3]=v):v=e[3];const w=v,y=m==="list";let g;e[4]!==n?(g=n("List"),e[4]=n,e[5]=g):g=e[5];let x;e[6]!==l||e[7]!==y||e[8]!==g?(x=r("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:l,type:"button",children:g}),e[6]=l,e[7]=y,e[8]=g,e[9]=x):x=e[9];const b=m==="grid";let N;e[10]!==n?(N=n("Grid"),e[10]=n,e[11]=N):N=e[11];let S;e[12]!==o||e[13]!==b||e[14]!==N?(S=r("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:o,type:"button",children:N}),e[12]=o,e[13]=b,e[14]=N,e[15]=S):S=e[15];let C;e[16]!==x||e[17]!==S?(C=R("div",{className:"inline-flex overflow-hidden rounded-md border border-border",children:[x,S]}),e[16]=x,e[17]=S,e[18]=C):C=e[18];let E;e[19]!==n?(E=n("Sort"),e[19]=n,e[20]=E):E=e[20];let T;e[21]!==n?(T=n("Name"),e[21]=n,e[22]=T):T=e[22];let F;e[23]!==T?(F=r("option",{value:"name",children:T}),e[23]=T,e[24]=F):F=e[24];let $;e[25]!==n?($=n("size"),e[25]=n,e[26]=$):$=e[26];let z;e[27]!==$?(z=r("option",{value:"size",children:$}),e[27]=$,e[28]=z):z=e[28];let L;e[29]!==n?(L=n("Type"),e[29]=n,e[30]=L):L=e[30];let j;e[31]!==L?(j=r("option",{value:"type",children:L}),e[31]=L,e[32]=j):j=e[32];let O;e[33]!==n?(O=n("Modified"),e[33]=n,e[34]=O):O=e[34];let D;e[35]!==O?(D=r("option",{value:"date",children:O}),e[35]=O,e[36]=D):D=e[36];let K;e[37]!==d?(K=d.map($t),e[37]=d,e[38]=K):K=e[38];let A;e[39]!==i||e[40]!==a||e[41]!==F||e[42]!==z||e[43]!==j||e[44]!==D||e[45]!==K?(A=R("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:i,value:a,children:[F,z,j,D,K]}),e[39]=i,e[40]=a,e[41]=F,e[42]=z,e[43]=j,e[44]=D,e[45]=K,e[46]=A):A=e[46];let M;e[47]!==E||e[48]!==A?(M=R("label",{className:"flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-sort",children:[E,A]}),e[47]=E,e[48]=A,e[49]=M):M=e[49];let H;e[50]!==n?(H=n("Toggle sort direction"),e[50]=n,e[51]=H):H=e[51];const G=c==="asc"?"↑":"↓";let q;e[52]!==H||e[53]!==G||e[54]!==u?(q=r("button",{"aria-label":H,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:u,type:"button",children:G}),e[52]=H,e[53]=G,e[54]=u,e[55]=q):q=e[55];let Y;e[56]!==w||e[57]!==n||e[58]!==h||e[59]!==m?(Y=m==="grid"&&R("label",{className:"ml-auto flex items-center gap-1.5 text-muted-foreground",htmlFor:"fb-thumb-size",children:[n("Thumbnail size"),r("input",{className:"accent-primary","data-testid":"fb-thumb-size",id:"fb-thumb-size",max:240,min:80,onChange:w,step:8,type:"range",value:h})]}),e[56]=w,e[57]=n,e[58]=h,e[59]=m,e[60]=Y):Y=e[60];let se;return e[61]!==M||e[62]!==q||e[63]!==Y||e[64]!==C?(se=R("div",{className:"flex flex-wrap items-center gap-2 text-xs","data-testid":"fb-controls",children:[C,M,q,Y]}),e[61]=M,e[62]=q,e[63]=Y,e[64]=C,e[65]=se):se=e[65],se};function Et(f){return r("option",{value:f,children:f},f)}function $t(f){return r("option",{value:`tag:${f}`,children:f},f)}const Ft=/\.(?:avif|bmp|gif|ico|jpe?g|png|svg|webp)$/iu,Rt=f=>(f.httpMetadata?.contentType??"").startsWith("image/")||Ft.test(f.key),zt=()=>{const f=U(1);let e;return f[0]===Symbol.for("react.memo_cache_sentinel")?(e=r("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:r("path",{d:"M7 3h7l5 5v13a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1Zm7 0v5h5"})}),f[0]=e):e=f[0],e},Dt=f=>{const e=U(13),{object:t,resolveUrl:s}=f,[o,l]=B(null),[c,a]=B(!1);let n;e[0]!==t?(n=Rt(t),e[0]=t,e[1]=n):n=e[1];const d=n;let h,u;e[2]!==d||e[3]!==t.key||e[4]!==s?(h=()=>{if(!d)return;const v={cancelled:!1};return P((async()=>{try{const w=await s(t.key);v.cancelled||l(w)}catch{v.cancelled||a(!0)}})()),()=>{v.cancelled=!0}},u=[d,t.key,s],e[2]=d,e[3]=t.key,e[4]=s,e[5]=h,e[6]=u):(h=e[5],u=e[6]),oe(h,u);let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{a(!0)},e[7]=m):m=e[7];const k=m;let i;return e[8]!==c||e[9]!==d||e[10]!==t.key||e[11]!==o?(i=r("div",{className:"flex aspect-square w-full items-center justify-center overflow-hidden rounded-md border border-border bg-muted/30",children:d&&o!==null&&!c?r("img",{alt:t.key,className:"size-full object-cover",loading:"lazy",onError:k,src:o}):r(zt,{})}),e[8]=c,e[9]=d,e[10]=t.key,e[11]=o,e[12]=i):i=e[12],i},jt=f=>{const e=U(42),{busy:t,copiedKey:s,handlers:o,object:l,prefix:c,references:a,resolveUrl:n,selected:d,showReferences:h,t:u}=f;let m;e[0]!==o||e[1]!==l||e[2]!==c?(m=$e(l,c,o),e[0]=o,e[1]=l,e[2]=c,e[3]=m):m=e[3];const{copy:k,download:i,name:v,remove:w,toggle:y}=m;let g;e[4]!==l||e[5]!==n?(g=r(Dt,{object:l,resolveUrl:n}),e[4]=l,e[5]=n,e[6]=g):g=e[6];let x;e[7]!==l.key||e[8]!==d||e[9]!==u||e[10]!==y?(x=r("span",{className:"absolute left-1.5 top-1.5 rounded bg-background/80 p-0.5",children:r(ze,{objectKey:l.key,onToggle:y,selected:d,t:u})}),e[7]=l.key,e[8]=d,e[9]=u,e[10]=y,e[11]=x):x=e[11];let b;e[12]!==g||e[13]!==x?(b=R("div",{className:"relative",children:[g,x]}),e[12]=g,e[13]=x,e[14]=b):b=e[14];let N;e[15]!==v?(N=r("p",{className:"truncate font-mono text-xs",title:v,children:v}),e[15]=v,e[16]=N):N=e[16];let S;e[17]!==l.size?(S=Ne(l.size),e[17]=l.size,e[18]=S):S=e[18];let C;e[19]!==S?(C=r("p",{className:"text-[11px] tabular-nums text-muted-foreground",children:S}),e[19]=S,e[20]=C):C=e[20];let E;e[21]!==l.key||e[22]!==a||e[23]!==h||e[24]!==u?(E=h&&r("div",{className:"mt-1",children:r(Re,{objectKey:l.key,references:a,t:u})}),e[21]=l.key,e[22]=a,e[23]=h,e[24]=u,e[25]=E):E=e[25];let T;e[26]!==N||e[27]!==C||e[28]!==E?(T=R("div",{className:"min-w-0",children:[N,C,E]}),e[26]=N,e[27]=C,e[28]=E,e[29]=T):T=e[29];const F=s===l.key;let $;e[30]!==t||e[31]!==k||e[32]!==i||e[33]!==l.key||e[34]!==w||e[35]!==u||e[36]!==F?($=r("div",{className:"flex items-center gap-1",children:r(Fe,{busy:t,buttonClassName:"h-7 px-2 text-xs",copied:F,objectKey:l.key,onCopy:k,onDelete:w,onDownload:i,t:u})}),e[30]=t,e[31]=k,e[32]=i,e[33]=l.key,e[34]=w,e[35]=u,e[36]=F,e[37]=$):$=e[37];let z;return e[38]!==$||e[39]!==b||e[40]!==T?(z=R("div",{className:"flex flex-col gap-1.5","data-testid":"fb-tile",children:[b,T,$]}),e[38]=$,e[39]=b,e[40]=T,e[41]=z):z=e[41],z},Kt=f=>{const e=U(9),{name:t,onEnter:s}=f;let o;e[0]!==t||e[1]!==s?(o=()=>{s(t)},e[0]=t,e[1]=s,e[2]=o):o=e[2];const l=o;let c;e[3]===Symbol.for("react.memo_cache_sentinel")?(c=r("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:r("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:r("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 a;e[4]!==t?(a=r("span",{className:"truncate font-mono text-xs",title:t,children:t}),e[4]=t,e[5]=a):a=e[5];let n;return e[6]!==l||e[7]!==a?(n=R("button",{className:"flex flex-col gap-1.5 text-left outline-none","data-testid":"fb-folder",onClick:l,type:"button",children:[c,a]}),e[6]=l,e[7]=a,e[8]=n):n=e[8],n},Bt=f=>{const e=U(34),{busy:t,copiedKey:s,files:o,folders:l,handlers:c,onEnterFolder:a,prefix:n,references:d,resolveUrl:h,selected:u,showReferences:m,size:k,t:i}=f;let v;e[0]!==k?(v=k.toString(),e[0]=k,e[1]=v):v=e[1];const w=`repeat(auto-fill, minmax(${v}px, 1fr))`;let y;e[2]!==w?(y={gridTemplateColumns:w},e[2]=w,e[3]=y):y=e[3];const g=y;let x;if(e[4]!==l||e[5]!==a){let S;e[7]!==a?(S=C=>r(Kt,{name:C,onEnter:a},C),e[7]=a,e[8]=S):S=e[8],x=l.map(S),e[4]=l,e[5]=a,e[6]=x}else x=e[6];let b;if(e[9]!==t||e[10]!==s||e[11]!==o||e[12]!==c||e[13]!==n||e[14]!==d||e[15]!==h||e[16]!==u||e[17]!==m||e[18]!==i){let S;e[20]!==t||e[21]!==s||e[22]!==c||e[23]!==n||e[24]!==d||e[25]!==h||e[26]!==u||e[27]!==m||e[28]!==i?(S=C=>r(jt,{busy:t,copiedKey:s,handlers:c,object:C,prefix:n,references:d[C.key],resolveUrl:h,selected:u.has(C.key),showReferences:m,t:i},C.key),e[20]=t,e[21]=s,e[22]=c,e[23]=n,e[24]=d,e[25]=h,e[26]=u,e[27]=m,e[28]=i,e[29]=S):S=e[29],b=o.map(S),e[9]=t,e[10]=s,e[11]=o,e[12]=c,e[13]=n,e[14]=d,e[15]=h,e[16]=u,e[17]=m,e[18]=i,e[19]=b}else b=e[19];let N;return e[30]!==g||e[31]!==x||e[32]!==b?(N=R("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]=N):N=e[33],N},Lt=f=>{const e=U(23),{reference:t,t:s}=f,o=`fb-dangling-${t.table}-${t.id}-${t.column}`,l=`${t.table}·${t.id}`;let c;e[0]!==l?(c=r(de,{variant:"secondary",children:l}),e[0]=l,e[1]=c):c=e[1];let a;e[2]!==t.column?(a=r("span",{className:"text-muted-foreground",children:t.column}),e[2]=t.column,e[3]=a):a=e[3];let n;e[4]!==s?(n=s("→"),e[4]=s,e[5]=n):n=e[5];let d;e[6]!==n?(d=r("span",{className:"text-muted-foreground/60",children:n}),e[6]=n,e[7]=d):d=e[7];let h;e[8]!==t.key?(h=r("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 u;e[10]!==c||e[11]!==a||e[12]!==d||e[13]!==h?(u=R("span",{className:"flex flex-wrap items-center gap-1.5",children:[c,a,d,h]}),e[10]=c,e[11]=a,e[12]=d,e[13]=h,e[14]=u):u=e[14];let m;e[15]!==s?(m=s("Missing object"),e[15]=s,e[16]=m):m=e[16];let k;e[17]!==m?(k=r(de,{className:"border-destructive/40 text-destructive",variant:"outline",children:m}),e[17]=m,e[18]=k):k=e[18];let i;return e[19]!==o||e[20]!==k||e[21]!==u?(i=R("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":o,children:[u,k]}),e[19]=o,e[20]=k,e[21]=u,e[22]=i):i=e[22],i},It=f=>{const e=U(37),{busy:t,onCheck:s,references:o,t:l,truncated:c}=f;let a;e[0]!==l?(a=l("Integrity"),e[0]=l,e[1]=a):a=e[1];let n;e[2]!==a?(n=r("span",{className:"font-mono text-[11px] uppercase tracking-wide text-muted-foreground",children:a}),e[2]=a,e[3]=n):n=e[3];let d;e[4]!==l?(d=l("Orphaned objects"),e[4]=l,e[5]=d):d=e[5];let h;e[6]!==d?(h=r("span",{className:"text-sm font-medium text-foreground",children:d}),e[6]=d,e[7]=h):h=e[7];let u;e[8]!==l?(u=l("Find records whose file reference points at an object the bucket no longer has."),e[8]=l,e[9]=u):u=e[9];let m;e[10]!==u?(m=r("span",{className:"text-xs text-muted-foreground",children:u}),e[10]=u,e[11]=m):m=e[11];let k;e[12]!==n||e[13]!==h||e[14]!==m?(k=R("div",{className:"flex flex-col gap-1",children:[n,h,m]}),e[12]=n,e[13]=h,e[14]=m,e[15]=k):k=e[15];let i;e[16]!==t||e[17]!==l?(i=l(t?"Checking…":"Check for orphans"),e[16]=t,e[17]=l,e[18]=i):i=e[18];let v;e[19]!==t||e[20]!==s||e[21]!==i?(v=r(re,{"data-testid":"fb-orphans-check",disabled:t,onClick:s,size:"sm",type:"button",variant:"outline",children:i}),e[19]=t,e[20]=s,e[21]=i,e[22]=v):v=e[22];let w;e[23]!==k||e[24]!==v?(w=R("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[k,v]}),e[23]=k,e[24]=v,e[25]=w):w=e[25];let y;e[26]!==o?.length||e[27]!==l?(y=o?.length===0&&r(we,{description:l("Every record's file reference points at an object that exists in the bucket."),testId:"fb-orphans-empty",title:l("No dangling references.")}),e[26]=o?.length,e[27]=l,e[28]=y):y=e[28];let g;e[29]!==o||e[30]!==l||e[31]!==c?(g=o!==void 0&&o.length>0&&R(_e,{children:[c&&r("p",{className:"text-xs text-warning","data-testid":"fb-orphans-truncated",children:l("Showing the first {count} dangling references — the scan was truncated.",{count:o.length})}),r("ul",{className:"flex flex-col gap-1.5","data-testid":"fb-orphans-list",children:o.map(b=>r(Lt,{reference:b,t:l},`${b.table}·${b.id}·${b.column}`))})]}),e[29]=o,e[30]=l,e[31]=c,e[32]=g):g=e[32];let x;return e[33]!==w||e[34]!==y||e[35]!==g?(x=R("section",{className:"flex flex-col gap-2 rounded-lg border border-border/60 p-3","data-testid":"fb-orphans",children:[w,y,g]}),e[33]=w,e[34]=y,e[35]=g,e[36]=x):x=e[36],x},Ot=function(f,e){const t=U(18);let s;t[0]===Symbol.for("react.memo_cache_sentinel")?(s=new Set,t[0]=s):s=t[0];const[o,l]=B(s);let c;t[1]===Symbol.for("react.memo_cache_sentinel")?(c=y=>{l(g=>{const x=new Set(g);return x.has(y)?x.delete(y):x.add(y),x})},t[1]=c):c=t[1];const a=c;let n;t[2]===Symbol.for("react.memo_cache_sentinel")?(n=()=>{l(new Set)},t[2]=n):n=t[2];const d=n;let h,u,m;if(t[3]!==f||t[4]!==e||t[5]!==o){let y;t[9]!==e?(y=g=>e(g),t[9]=e,t[10]=y):y=t[10],u=f.map(y),h=u.length>0&&u.every(g=>o.has(g)),m=!h&&u.some(g=>o.has(g)),t[3]=f,t[4]=e,t[5]=o,t[6]=h,t[7]=u,t[8]=m}else h=t[6],u=t[7],m=t[8];const k=m;let i;t[11]!==u?(i=()=>{l(y=>u.every(g=>y.has(g))?new Set:new Set(u))},t[11]=u,t[12]=i):i=t[12];const v=i;let w;return t[13]!==h||t[14]!==o||t[15]!==k||t[16]!==v?(w={allSelected:h,clear:d,selected:o,someSelected:k,toggle:a,toggleAll:v},t[13]=h,t[14]=o,t[15]=k,t[16]=v,t[17]=w):w=t[17],w},At=Te(Ee.storageReferences),Ut=Te(Ee.storageOrphans),ke=1e4,Mt=1e3,Gt=3600,Ht=(f,e)=>{if(!("document"in globalThis))return;const t=globalThis.document.createElement("a");t.href=f,t.download=e,t.rel="noopener",globalThis.document.body.append(t),t.click(),t.remove()},Pt=f=>f.key,qt=({initialPrefix:f,pageSize:e})=>{const t=gt(),[s,o]=B(f??""),[l,c]=B(f??""),[a,n]=B(wt),[d,h]=B("list"),[u,m]=B(128),[k,i]=B("name"),[v,w]=B("asc"),[y,g]=B(void 0),[x,b]=B(void 0),[N,S]=B(!1),[C,E]=B(void 0),[T,F]=B(void 0),[$,z]=B(""),[L,j]=B({}),[O,D]=B(!1),[K,A]=B(void 0),[M,H]=B(!1),[G,q]=B(!1),[Y,se]=B([]),[W,ge]=B(""),le=me(0),J=me(0);oe(()=>{const p={cancelled:!1};return P((async()=>{try{const _=await t.listStorageBuckets();if(!p.cancelled){se(_);const[I]=_;I!==void 0&&ge(Q=>Q===""?I:Q)}}catch{}})()),()=>{p.cancelled=!0}},[t]);const Z=he(()=>({list:p=>t.listStorageObjects({...p,bucket:W}),remove:p=>t.deleteStorageObject(p,{bucket:W}),signedUrl:(p,_)=>t.signedStorageUrl(p,{..._,bucket:W}),upload:p=>t.uploadStorageObject({...p,bucket:W})}),[W,t]),X=lt(async(p,_,I)=>{le.current+=1;const Q=le.current;b(void 0),S(!0);try{const V=await Z.list({cursor:_,limit:e,prefix:p});if(Q!==le.current)return;g(ce=>I&&ce!==void 0?[...ce,...V.objects]:V.objects),F(V.cursor)}catch(V){if(Q!==le.current)return;I||g(void 0),b(ee(V))}finally{Q===le.current&&S(!1)}},[e,Z]);oe(()=>{P(X(f??"",void 0,!1))},[X,f]);const De=(y?.length??0)<=e;bt(()=>{P(X(s,void 0,!1))},De);const{files:fe,folders:je}=Nt(y??[],s),Ke=he(()=>{const p=new Set;for(const _ of fe)for(const I of Object.keys(_.customMetadata??{}))p.add(I);return[...p].toSorted((_,I)=>_.localeCompare(I))},[fe]),ae=Ct(fe,k,v),ue=he(()=>[...new Set(ae.map(p=>p.key))].toSorted((p,_)=>p.localeCompare(_)).join(`
3
+ `),[ae]);oe(()=>{const p=ue===""?[]:ue.split(`
4
+ `);if(p.length===0){j({});return}const _={current:!0};return P((async()=>{try{const I=await t.query(At,{keys:p},xe($));_.current&&(j(I.references??{}),D(Object.keys(I.storageColumns??{}).length>0))}catch{_.current&&(j({}),D(!1))}})()),()=>{_.current=!1}},[t,ue,$]);const{allSelected:Be,clear:ie,selected:be,someSelected:Le,toggle:Ie,toggleAll:Oe}=Ot(ae,Pt),Ae=()=>{o(l),ie(),P(X(l,void 0,!1))},Ue=()=>{P(X(s,T,!0))},ye=p=>{o(p),c(p),ie(),P(X(p,void 0,!1))},Me=p=>{ye(`${s}${p}`)},Ge=p=>Z.signedUrl(p,{expiresInSeconds:Gt}),He=()=>{h("list")},Pe=()=>{h("grid")},qe=p=>{i(p)},Ve=()=>{w(p=>p==="asc"?"desc":"asc")},We=p=>{m(p)},Ze=p=>{n(p)},Xe=()=>{b(void 0),S(!0),P((async()=>{try{for(const p of be)await Z.remove(p);await X(s,void 0,!1),ie()}catch(p){b(ee(p))}S(!1)})())},Ye=p=>{b(void 0),P((async()=>{try{const _=await Z.signedUrl(p,{expiresInSeconds:a});ut(_)&&E(p)}catch(_){b(ee(_))}})())},Je=p=>{b(void 0),P((async()=>{try{const _=await Z.signedUrl(p,{expiresInSeconds:a}),I=p.slice(p.lastIndexOf("/")+1)||p;Ht(_,I)}catch(_){b(ee(_))}})())};oe(()=>{if(C===void 0)return;const p=globalThis.setTimeout(()=>{E(void 0)},2e3);return()=>{globalThis.clearTimeout(p)}},[C]);const Qe=p=>{b(void 0),S(!0),P((async()=>{try{await Z.remove(p),await X(s,void 0,!1)}catch(_){b(ee(_))}S(!1)})())},et=p=>{const _=`${s}${p.name}`;b(void 0),S(!0),P((async()=>{try{const I=await p.arrayBuffer();await Z.upload({body:I,contentType:p.type===""?void 0:p.type,key:_}),await X(s,void 0,!1)}catch(I){b(ee(I))}S(!1)})())};oe(()=>{J.current+=1,A(void 0),q(!1)},[$]);const tt=()=>{J.current+=1;const p=J.current;b(void 0),H(!0),P((async()=>{try{const _=[];let I;do{const V=await Z.list({cursor:I,limit:Mt});for(const ce of V.objects)_.push(ce.key);I=_.length>=ke?void 0:V.cursor}while(I!==void 0);if(_.length>=ke)p===J.current&&(A([]),q(!0));else{const V=await t.query(Ut,{liveKeys:_},xe($));p===J.current&&(A(V.references??[]),q(V.truncated===!0))}}catch(_){p===J.current&&(A([]),q(!1),b(ee(_)))}p===J.current&&H(!1)})())},st=p=>{le.current+=1,J.current+=1,ge(p),o(f??""),c(f??""),g(void 0),A(void 0),q(!1),ie()};return{allSelected:Be,bucket:W,buckets:Y,bulkDelete:Xe,busy:N,checkOrphans:tt,clearSelection:ie,copiedKey:C,danglingBusy:M,danglingReferences:K,danglingTruncated:G,draftPrefix:l,enterFolder:Me,error:x,expiry:a,files:ae,folders:je,hasObjects:y!==void 0&&y.length>0,hasStorageColumns:O,listFirst:Ae,loaded:y!==void 0,loadMore:Ue,navigate:ye,nextCursor:T,onCopy:Ye,onDelete:Qe,onDownload:Je,onExpiryChange:Ze,onFile:et,onSortKeyChange:qe,onThumbSizeChange:We,prefix:s,referenceShard:$,references:L,resolveUrl:Ge,selectBucket:st,selected:be,setDraftPrefix:c,setReferenceShard:z,showGrid:Pe,showList:He,someSelected:Le,sortDirection:v,sortKey:k,tagKeys:Ke,thumbSize:u,toggleSelect:Ie,toggleSelectAll:Oe,toggleSortDirection:Ve,view:d}},Vt=100,Se=f=>{const e=U(6),{label:t,onNavigate:s,target:o}=f;let l;e[0]!==s||e[1]!==o?(l=()=>{s(o)},e[0]=s,e[1]=o,e[2]=l):l=e[2];const c=l;let a;return e[3]!==c||e[4]!==t?(a=r("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]=a):a=e[5],a},Wt=f=>{const e=U(11),{onNavigate:t,prefix:s,t:o}=f;let l;if(e[0]!==t||e[1]!==s||e[2]!==o){const c=s.split("/").filter(Zt);let a;e[4]!==o?(a=o("Folder path"),e[4]=o,e[5]=a):a=e[5];let n;e[6]!==o?(n=o("root"),e[6]=o,e[7]=n):n=e[7];let d;e[8]!==t||e[9]!==n?(d=r(Se,{label:n,onNavigate:t,target:""}),e[8]=t,e[9]=n,e[10]=d):d=e[10],l=R("nav",{"aria-label":a,className:"flex flex-wrap items-center gap-0.5 text-xs","data-testid":"fb-breadcrumbs",children:[d,c.map((h,u)=>R("span",{className:"flex items-center gap-0.5",children:[r("span",{className:"text-muted-foreground/50",children:"/"}),r(Se,{label:h,onNavigate:t,target:`${c.slice(0,u+1).join("/")}/`})]},`${h}-${u.toString()}`))]}),e[0]=t,e[1]=s,e[2]=o,e[3]=l}else l=e[3];return l},ps=({initialPrefix:f,pageSize:e=Vt})=>{const t=ot(),s=qt({initialPrefix:f,pageSize:e}),o=me(null),{onCopy:l,onDelete:c,onDownload:a,onFile:n,toggleSelect:d}=s,h={onCopy:l,onDelete:c,onDownload:a,onToggleSelect:d},u=()=>{o.current?.click()},m=i=>{const v=i.target,w=v.files?.[0];v.value="",w&&n(w)},k=s.loaded&&!s.hasObjects;return R("div",{className:"flex flex-col gap-3","data-testid":"lunora-file-browser",children:[r(Tt,{bucket:s.bucket,buckets:s.buckets,busy:s.busy,draftPrefix:s.draftPrefix,expiry:s.expiry,fileInputRef:o,onBucketChange:s.selectBucket,onExpiryChange:s.onExpiryChange,onFileChange:m,onList:s.listFirst,onPrefixChange:s.setDraftPrefix,onUploadClick:u,t}),s.loaded&&r(Wt,{onNavigate:s.navigate,prefix:s.prefix,t}),s.hasObjects&&r(_t,{onSortKeyChange:s.onSortKeyChange,onThumbSizeChange:s.onThumbSizeChange,showGrid:s.showGrid,showList:s.showList,sortDirection:s.sortDirection,sortKey:s.sortKey,t,tagKeys:s.tagKeys,thumbSize:s.thumbSize,toggleSortDirection:s.toggleSortDirection,view:s.view}),s.hasStorageColumns&&R("div",{className:"flex flex-wrap items-center gap-2","data-testid":"fb-references-shard",children:[r("label",{className:"text-xs text-muted-foreground",htmlFor:"fb-reference-shard-input",children:t("References shard")}),r(nt,{id:"fb-reference-shard-input",onChange:s.setReferenceShard,testId:"fb-reference-shard-input",value:s.referenceShard}),r("span",{className:"text-xs text-muted-foreground",children:t("Which shard's records are checked for references to these files. Empty = root shard.")})]}),s.hasStorageColumns&&r(It,{busy:s.danglingBusy,onCheck:s.checkOrphans,references:s.danglingReferences,t,truncated:s.danglingTruncated}),s.selected.size>0&&r(rt,{count:s.selected.size,editable:!0,onClear:s.clearSelection,onDelete:s.bulkDelete}),s.error!==void 0&&r("p",{className:"text-sm text-destructive","data-testid":"storage-error",role:"alert",children:s.error}),k&&r(we,{description:t("Objects you upload to your R2 buckets will appear here."),icon:R("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[r("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"}),r("path",{d:"M12 11v5m-2.5-2.5h5"})]}),testId:"fb-empty",title:t("No objects.")}),s.hasObjects&&s.view==="list"&&r(kt,{allSelected:s.allSelected,busy:s.busy,copiedKey:s.copiedKey,files:s.files,folders:s.folders,handlers:h,onEnterFolder:s.enterFolder,prefix:s.prefix,references:s.references,selected:s.selected,showReferences:s.hasStorageColumns,someSelected:s.someSelected,t,toggleSelectAll:s.toggleSelectAll}),s.hasObjects&&s.view==="grid"&&r(Bt,{busy:s.busy,copiedKey:s.copiedKey,files:s.files,folders:s.folders,handlers:h,onEnterFolder:s.enterFolder,prefix:s.prefix,references:s.references,resolveUrl:s.resolveUrl,selected:s.selected,showReferences:s.hasStorageColumns,size:s.thumbSize,t}),s.nextCursor!==void 0&&r("div",{children:r(re,{"data-testid":"fb-next",disabled:s.busy,onClick:s.loadMore,size:"sm",type:"button",variant:"outline",children:t("Load more")})})]})};function Zt(f){return f!==""}export{ps as FileBrowser};
@@ -1 +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-4aE59aDq.js";import{b as ee,i as te,f as re,k as ae,g as se}from"../packem_shared/internal-zkEvTqy8.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()},A=i?f.trim():"",j=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=A===""?await ae(u,s.kind,d,e,R):await u.query(ce,{args:e,functionPath:s.path,userId:A},R);ne(c),b(l),h("success"),j("success")}catch(l){b(void 0),v(l.message),h("error"),j("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};
1
+ import{useLunora as X}from"@lunora/react";import{useState as i,useEffect as Y}from"react";import{ShardInput as G}from"../packem_shared/ShardInput-XumEzeT0.js";import{B as E}from"../packem_shared/badge-cAk9Di1Q.js";import{B as N}from"../packem_shared/button-BOPLD1un.js";import{I as Q}from"../packem_shared/input-CY5W3wzv.js";import{L as y}from"../packem_shared/label-BOUo-DP0.js";import{T as W}from"../packem_shared/textarea-DpO3i-Qo.js";import{useT as Z}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.js";import{ADMIN_FUNCTIONS as _}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{b as ee,i as te,f as re,k as se,c as ae}from"../packem_shared/internal-CwaF9YNk.js";import{r as ne}from"../packem_shared/shard-history-QcjcMnCA.js";import{jsxs as n,jsx as r}from"react/jsx-runtime";const oe=t=>t.kind==="id"?t.table===void 0?"id":`id<${t.table}>`:t.kind==="array"?t.element===void 0?"array":`${t.element}[]`:t.kind,ie=t=>t===void 0||t.length===0?"()":`(${t.map(o=>`${o.name}${o.optional?"?":""}: ${oe(o)}`).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 o={};for(const s of t??[])s.optional||(o[s.name]=de(s.kind));return JSON.stringify(o,void 0,2)},ce=ae(_.runAs),ue=10,me=t=>t===void 0?"undefined":JSON.stringify(t,null,2),Ae=({functions:t,runAsIdentity:o=!1}={})=>{const s=Z(),u=X(),[L,j]=i(null),[S,B]=i(null),p=t??L??[],[w,R]=i(""),[m,g]=i("{}"),[c,k]=i(""),[f,D]=i(""),[x,h]=i("idle"),[K,b]=i(void 0),[I,v]=i(null),[A,U]=i([]);Y(()=>{if(t!==void 0)return;let e=!1;return u.listFunctions().then(d=>(e||j(d),d)).catch(d=>{e||B(ee(d))}),()=>{e=!0}},[u,t]);const C=w===""?p[0]?.path??"":w,a=p.find(e=>e.path===C),J=async()=>{if(!a)return;let e;try{e=m.trim()===""?{}:JSON.parse(m)}catch(l){h("error"),b(void 0),v(s("Invalid JSON args: {message}",{message:l.message}));return}const d={__lunoraRef:a.path},T=c.trim()===""?{}:{shardKey:c.trim()},F=o?f.trim():"",$=l=>{U(O=>[{argsText:m,at:Date.now(),id:(O[0]?.id??0)+1,kind:a.kind,path:a.path,shardKey:c,status:l},...O].slice(0,ue))};h("running"),v(null);try{const l=F===""?await se(u,a.kind,d,e,T):await u.query(ce,{args:e,functionPath:a.path,userId:F},T);ne(c),b(l),h("success"),$("success")}catch(l){b(void 0),v(l.message),h("error"),$("error")}},M=e=>{R(e.path),g(e.argsText),k(e.shardKey)},P=e=>{R(e.target.value)},z=e=>{g(e.target.value)},q=e=>{D(e.target.value)},H=()=>{re(J())},V=()=>{g(le(a?.args))};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-runner",children:[S!==null&&r("p",{className:"text-sm text-destructive","data-testid":"function-discover-error",role:"alert",children:S}),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(y,{htmlFor:"function-select",children:s("Function")}),r("select",{"aria-label":s("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:P,value:C,children:p.map(e=>n("option",{value:e.path,children:[e.path," (",e.kind,")"]},e.path))}),a!==void 0&&n("p",{className:"text-xs text-muted-foreground",children:[r("span",{className:"mr-1.5 font-medium",children:s("Signature")}),r("code",{className:"font-mono","data-testid":"function-signature",children:ie(a.args)})]})]}),n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:"flex items-center justify-between gap-2",children:[r(y,{htmlFor:"args-input",children:s("Arguments")}),r(N,{"data-testid":"prefill-button",disabled:a===void 0,onClick:V,size:"xs",type:"button",variant:"ghost",children:s("Prefill")})]}),r(W,{"aria-label":s("Arguments"),className:"font-mono text-xs","data-testid":"args-input",id:"args-input",onChange:z,value:m})]}),r(G,{onChange:k,testId:"shard-input",value:c}),o&&n("div",{className:"flex flex-col gap-1.5","data-testid":"run-as-field",children:[r(y,{htmlFor:"run-as-input",children:s("Run as identity (userId)")}),r(Q,{"aria-label":s("Run as identity (userId)"),className:"font-mono text-xs","data-testid":"run-as-input",id:"run-as-input",onChange:q,placeholder:s("Leave empty to run as admin"),value:f}),r("p",{className:"text-[11px] text-muted-foreground",children:s("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(N,{"data-testid":"run-button",disabled:x==="running"||a===void 0,onClick:H,type:"button",children:s("Run")}),a!==void 0&&r(E,{variant:"outline",children:a.kind}),o&&f.trim()!==""&&r(E,{"data-testid":"run-as-badge",variant:"secondary",children:s("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(K)}),A.length>0&&r("ul",{className:"flex flex-col overflow-hidden rounded-xl border border-border","data-testid":"fn-history",children:A.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(N,{className:"ml-auto","data-testid":`fn-history-load-${d.toString()}`,onClick:()=>{M(e)},size:"xs",type:"button",variant:"ghost",children:s("Load")})]},e.id))})]})};export{Ae as FunctionRunner};