@lunora/studio 1.0.0-alpha.7 → 1.0.0-alpha.71

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 (295) hide show
  1. package/LICENSE.md +6 -0
  2. package/dist/index.d.ts +762 -779
  3. package/dist/index.js +1 -41
  4. package/dist/mount.d.ts +10 -10
  5. package/dist/mount.js +1 -26
  6. package/dist/packem_chunks/ApiTab.js +1 -0
  7. package/dist/packem_chunks/AuditPanel.js +1 -0
  8. package/dist/packem_chunks/DeploymentHealthPanel.js +1 -0
  9. package/dist/packem_chunks/ExportImportPanel.js +3 -0
  10. package/dist/packem_chunks/FileBrowser.js +4 -0
  11. package/dist/packem_chunks/FunctionRunner.js +1 -0
  12. package/dist/packem_chunks/FunctionStatsPanel.js +1 -0
  13. package/dist/packem_chunks/HealthPanel.js +1 -0
  14. package/dist/packem_chunks/InsightsPanel.js +1 -0
  15. package/dist/packem_chunks/LogsPanel.js +1 -0
  16. package/dist/packem_chunks/MailPanel.js +2 -0
  17. package/dist/packem_chunks/MetricsPanel.js +1 -0
  18. package/dist/packem_chunks/MigrationsPanel.js +1 -0
  19. package/dist/packem_chunks/NotificationsPanel.js +1 -0
  20. package/dist/packem_chunks/PitrPanel.js +1 -0
  21. package/dist/packem_chunks/SchemaViewer.js +2 -0
  22. package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -0
  23. package/dist/packem_chunks/SettingsPanel.js +1 -0
  24. package/dist/packem_chunks/SqlEditorPanel.js +4 -0
  25. package/dist/packem_chunks/TableEditor.js +1 -0
  26. package/dist/packem_chunks/agents-panel.js +1 -0
  27. package/dist/packem_chunks/analytics-panel.js +1 -0
  28. package/dist/packem_chunks/auth-audit-panel.js +1 -0
  29. package/dist/packem_chunks/auth-config-panel.js +1 -0
  30. package/dist/packem_chunks/auth-sessions-panel.js +1 -0
  31. package/dist/packem_chunks/containers-panel.js +1 -0
  32. package/dist/packem_chunks/dashboards-panel.js +1 -0
  33. package/dist/packem_chunks/fanout-panel.js +1 -0
  34. package/dist/packem_chunks/flags-panel.js +1 -0
  35. package/dist/packem_chunks/issues-panel.js +1 -0
  36. package/dist/packem_chunks/kv-browser.js +1 -0
  37. package/dist/packem_chunks/log-drains-panel.js +4 -0
  38. package/dist/packem_chunks/organizations-panel.js +1 -0
  39. package/dist/packem_chunks/payments-panel.js +1 -0
  40. package/dist/packem_chunks/permissions-panel.js +1 -0
  41. package/dist/packem_chunks/queues-panel.js +1 -0
  42. package/dist/packem_chunks/rls-panel.js +1 -0
  43. package/dist/packem_chunks/schedule-panel.js +1 -0
  44. package/dist/packem_chunks/sparkline.js +1 -0
  45. package/dist/packem_chunks/storage-rules-panel.js +1 -0
  46. package/dist/packem_chunks/subscriptions-panel.js +1 -0
  47. package/dist/packem_chunks/sync-client-panel.js +1 -0
  48. package/dist/packem_chunks/traces-panel.js +1 -0
  49. package/dist/packem_chunks/users-panel.js +1 -0
  50. package/dist/packem_chunks/vector-browser.js +1 -0
  51. package/dist/packem_chunks/workflows-panel.js +1 -0
  52. package/dist/packem_shared/ADMIN_FUNCTIONS-BYNSbBVE.js +1 -0
  53. package/dist/packem_shared/ApiDocsPanel-eJYZlylw.js +2 -0
  54. package/dist/packem_shared/ApiReferencePanel-C42v1jr6.js +1 -0
  55. package/dist/packem_shared/CommandPalette-CVIaY3j8.js +1 -0
  56. package/dist/packem_shared/ConfirmButton-CTL3f3kr.js +1 -0
  57. package/dist/packem_shared/ConnectionBadge-DOk0CQWo.js +1 -0
  58. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js +1 -0
  59. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js +1 -0
  60. package/dist/packem_shared/DEFAULT_LOCALE-BZ4NojpD.js +1 -0
  61. package/dist/packem_shared/DataBrowser-B8J5lHjP.js +1 -0
  62. package/dist/packem_shared/DataFilters-Csb30F0C.js +1 -0
  63. package/dist/packem_shared/ErrorBoundary-DvzYskH7.js +1 -0
  64. package/dist/packem_shared/GlobalDataBrowser-RLJ6NvOs.js +1 -0
  65. package/dist/packem_shared/HomePanel-DL1HupAN.js +1 -0
  66. package/dist/packem_shared/OpenRpcReferencePanel-sGsIgYWj.js +1 -0
  67. package/dist/packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.js +1 -0
  68. package/dist/packem_shared/ScheduledJobs-DUbo6epc.js +1 -0
  69. package/dist/packem_shared/ShardInput-BVn2iCU0.js +1 -0
  70. package/dist/packem_shared/Studio-BWBclm_C.js +1 -0
  71. package/dist/packem_shared/StudioApp-BFm73yVr.js +1 -0
  72. package/dist/packem_shared/StudioI18nProvider-CZ5h4nrV.js +1 -0
  73. package/dist/packem_shared/advisor-view-DaCX9Jy5.js +1 -0
  74. package/dist/packem_shared/aggregateMetrics-BNfajLa2.js +1 -0
  75. package/dist/packem_shared/alert-CVcOFuDR.js +1 -0
  76. package/dist/packem_shared/app.d-bRPJhby-.d.ts +254 -0
  77. package/dist/packem_shared/badge-BbuuAio7.js +1 -0
  78. package/dist/packem_shared/bar-chart-AryFCeoa.js +9 -0
  79. package/dist/packem_shared/browser-storage-xjTyMKY0.js +1 -0
  80. package/dist/packem_shared/button-BkCrNcAs.js +1 -0
  81. package/dist/packem_shared/card-CIDGUN6K.js +1 -0
  82. package/dist/packem_shared/cf-links-gbDy51nR.js +1 -0
  83. package/dist/packem_shared/checkbox-StT4Gob6.js +1 -0
  84. package/dist/packem_shared/data-grid-BMBKzMEJ.js +1 -0
  85. package/dist/packem_shared/data-view-params-C8T3bW1z.js +1 -0
  86. package/dist/packem_shared/dropdown-menu-C3RQ_HlW.js +2 -0
  87. package/dist/packem_shared/empty-state-Cg7t_8qu.js +1 -0
  88. package/dist/packem_shared/error-alert-B59DnrDI.js +1 -0
  89. package/dist/packem_shared/grid-features-uZCUj955.js +6 -0
  90. package/dist/packem_shared/home-panel-B-8BCffw.js +3 -0
  91. package/dist/packem_shared/input-JHu63lTv.js +1 -0
  92. package/dist/packem_shared/internal-AtZ4bTal.js +2 -0
  93. package/dist/packem_shared/label-6uP1obNF.js +1 -0
  94. package/dist/packem_shared/live-status-CGW2JHf_.js +1 -0
  95. package/dist/packem_shared/log-fields-CoL3hsIQ.js +1 -0
  96. package/dist/packem_shared/modal-shell-CUwwWC2o.js +1 -0
  97. package/dist/packem_shared/reference-view-KvhektwF.js +12 -0
  98. package/dist/packem_shared/result-chart-CwKhhKM0.js +1 -0
  99. package/dist/packem_shared/scroll-area-DTEq6Jec.js +2 -0
  100. package/dist/packem_shared/select-Bul-DeII.js +2 -0
  101. package/dist/packem_shared/shard-history-DMEW5VBE.js +1 -0
  102. package/dist/packem_shared/skeleton-C1wQ9M5t.js +1 -0
  103. package/dist/packem_shared/sparkline-DtcZoU48.js +1 -0
  104. package/dist/packem_shared/storage-tier-DznqOf-q.js +1 -0
  105. package/dist/packem_shared/studio-BHA7hnI3.js +2 -0
  106. package/dist/packem_shared/table-DdJBrClo.js +2 -0
  107. package/dist/packem_shared/table-list-sidebar-CMCcNALK.js +1 -0
  108. package/dist/packem_shared/textarea-Bu2-jKAs.js +1 -0
  109. package/dist/packem_shared/trace-handoff-Dw7mwjxu.js +1 -0
  110. package/dist/packem_shared/use-admin-query-Di3fLE8H.js +1 -0
  111. package/dist/packem_shared/use-async-submit-H68GHPz8.js +1 -0
  112. package/dist/packem_shared/useDebounced-Ihdiid_k.js +1 -0
  113. package/dist/packem_shared/utils-bhneXptQ.js +1 -0
  114. package/dist/packem_shared/virtual-rect-1o1veP7R.js +1 -0
  115. package/dist/standalone/chunk-2F7G7IWQ.js +1 -0
  116. package/dist/standalone/chunk-2OUPA2WJ.js +1 -0
  117. package/dist/standalone/chunk-2PJNAWB3.js +1 -0
  118. package/dist/standalone/chunk-2Y36BVVM.js +4 -0
  119. package/dist/standalone/chunk-34UVAASH.js +1 -0
  120. package/dist/standalone/chunk-35II7U25.js +11 -0
  121. package/dist/standalone/chunk-3FUFEZ65.js +1 -0
  122. package/dist/standalone/chunk-3QRTYSSX.js +1 -0
  123. package/dist/standalone/chunk-3RTTXLMU.js +1 -0
  124. package/dist/standalone/chunk-3XIESWL4.js +1 -0
  125. package/dist/standalone/chunk-4CGALXS3.js +19 -0
  126. package/dist/standalone/chunk-4UOFSGUS.js +1 -0
  127. package/dist/standalone/chunk-4WLYA3XE.js +1 -0
  128. package/dist/standalone/chunk-54MMVNPT.js +1 -0
  129. package/dist/standalone/chunk-5L2MD6F6.js +1 -0
  130. package/dist/standalone/chunk-5OWIOACV.js +13 -0
  131. package/dist/standalone/chunk-5RF4QDDA.js +6 -0
  132. package/dist/standalone/chunk-5U2THBI7.js +1 -0
  133. package/dist/standalone/chunk-5Y3QLNWX.js +1 -0
  134. package/dist/standalone/chunk-65OTWFS3.js +1 -0
  135. package/dist/standalone/chunk-6DWCIIHE.js +1 -0
  136. package/dist/standalone/chunk-6ST5ECQA.js +1 -0
  137. package/dist/standalone/chunk-7J5N6DGQ.js +1 -0
  138. package/dist/standalone/chunk-7LQWFOEU.js +1 -0
  139. package/dist/standalone/chunk-7QIFDWQV.js +1 -0
  140. package/dist/standalone/chunk-7RXOPYR5.js +1 -0
  141. package/dist/standalone/chunk-7T7UOTYK.js +1 -0
  142. package/dist/standalone/chunk-7YEFOSPH.js +1 -0
  143. package/dist/standalone/chunk-AVAC26HJ.js +1 -0
  144. package/dist/standalone/chunk-B43FTQJ7.js +1 -0
  145. package/dist/standalone/chunk-BEH5N5ZA.js +1 -0
  146. package/dist/standalone/chunk-BGBLQ563.js +1 -0
  147. package/dist/standalone/chunk-BNUJ7QMG.js +3 -0
  148. package/dist/standalone/chunk-C43X4M5U.js +1 -0
  149. package/dist/standalone/chunk-CFPZYHPY.js +2 -0
  150. package/dist/standalone/chunk-D7XXWV4E.js +1 -0
  151. package/dist/standalone/chunk-DVOBKIUX.js +1 -0
  152. package/dist/standalone/chunk-EKRN4ZQM.js +1 -0
  153. package/dist/standalone/chunk-ESVP44Y3.js +1 -0
  154. package/dist/standalone/chunk-EVN46TVV.js +1 -0
  155. package/dist/standalone/chunk-EXFBIISG.js +2 -0
  156. package/dist/standalone/chunk-F5QWLENA.js +1 -0
  157. package/dist/standalone/chunk-F6GOKFMU.js +3 -0
  158. package/dist/standalone/chunk-FGTK44LR.js +1 -0
  159. package/dist/standalone/chunk-FXCBF4XT.js +1 -0
  160. package/dist/standalone/chunk-GMR677FL.js +1 -0
  161. package/dist/standalone/chunk-GRL5MG3Z.js +1 -0
  162. package/dist/standalone/chunk-GSPTEMYN.js +1 -0
  163. package/dist/standalone/chunk-GXZAXNZI.js +1 -0
  164. package/dist/standalone/chunk-H7NIIBHH.js +1 -0
  165. package/dist/standalone/chunk-HP2UCWND.js +1 -0
  166. package/dist/standalone/chunk-HPFLBYRI.js +1 -0
  167. package/dist/standalone/chunk-IC4L6G56.js +1 -0
  168. package/dist/standalone/chunk-IDNNI63H.js +1 -0
  169. package/dist/standalone/chunk-ILNELDFC.js +1 -0
  170. package/dist/standalone/chunk-IVFHIQOT.js +1 -0
  171. package/dist/standalone/chunk-JN2Y24PY.js +1 -0
  172. package/dist/standalone/chunk-KDOC2DP5.js +1 -0
  173. package/dist/standalone/chunk-KUVMORDQ.js +1 -0
  174. package/dist/standalone/chunk-KYF2E5CJ.js +1 -0
  175. package/dist/standalone/chunk-L7N7F3DA.js +1 -0
  176. package/dist/standalone/chunk-LE56LPNH.js +13 -0
  177. package/dist/standalone/chunk-LEDWUPXM.js +1 -0
  178. package/dist/standalone/chunk-LFKCLLPT.js +1 -0
  179. package/dist/standalone/chunk-LFXFP4IF.js +1 -0
  180. package/dist/standalone/chunk-LJDP7NRB.js +1 -0
  181. package/dist/standalone/chunk-LLXFYRGQ.js +1 -0
  182. package/dist/standalone/chunk-M536Y2KX.js +1 -0
  183. package/dist/standalone/chunk-MIQTKZAR.js +1 -0
  184. package/dist/standalone/chunk-OHKRN65U.js +1 -0
  185. package/dist/standalone/chunk-P24JBHEZ.js +4 -0
  186. package/dist/standalone/chunk-PF7V3G2Z.js +62 -0
  187. package/dist/standalone/chunk-PWWHP76O.js +1 -0
  188. package/dist/standalone/chunk-QBWRC5YX.js +1 -0
  189. package/dist/standalone/chunk-QGKAJTQQ.js +1 -0
  190. package/dist/standalone/chunk-QLJJ5YYZ.js +1 -0
  191. package/dist/standalone/chunk-QVEHPYA5.js +1 -0
  192. package/dist/standalone/chunk-QWGT25SE.js +1 -0
  193. package/dist/standalone/chunk-QWJ3NPE3.js +1 -0
  194. package/dist/standalone/chunk-RAA2RGG6.js +1 -0
  195. package/dist/standalone/chunk-RBU52M5T.js +1 -0
  196. package/dist/standalone/chunk-SA3MDZC3.js +1 -0
  197. package/dist/standalone/chunk-SD4BERSA.js +1 -0
  198. package/dist/standalone/chunk-SFDOII3B.js +1 -0
  199. package/dist/standalone/chunk-SKHEGARW.js +1 -0
  200. package/dist/standalone/chunk-SMIESS7P.js +1 -0
  201. package/dist/standalone/chunk-T2JIUFOD.js +4 -0
  202. package/dist/standalone/chunk-T6VMSOBB.js +1 -0
  203. package/dist/standalone/chunk-THIXMMZD.js +1 -0
  204. package/dist/standalone/chunk-TJ2WZ5OP.js +1 -0
  205. package/dist/standalone/chunk-TLHJRWNK.js +1 -0
  206. package/dist/standalone/chunk-UIS34ZPB.js +8 -0
  207. package/dist/standalone/chunk-UNUU7CJJ.js +1 -0
  208. package/dist/standalone/chunk-UZERI5YC.js +1 -0
  209. package/dist/standalone/chunk-V53KNYRN.js +1 -0
  210. package/dist/standalone/chunk-VPAXCQ2Y.js +4 -0
  211. package/dist/standalone/chunk-X2FQ6B5V.js +1 -0
  212. package/dist/standalone/chunk-XBDKZZ67.js +1 -0
  213. package/dist/standalone/chunk-XEDU5FO4.js +1 -0
  214. package/dist/standalone/chunk-XQBTNJUQ.js +1 -0
  215. package/dist/standalone/chunk-XQCVZAGU.js +1 -0
  216. package/dist/standalone/chunk-XQGANNLS.js +1 -0
  217. package/dist/standalone/chunk-XSD4Y6SQ.js +1 -0
  218. package/dist/standalone/chunk-XXQUMVWH.js +1 -0
  219. package/dist/standalone/chunk-YD5NF6UT.js +1 -0
  220. package/dist/standalone/chunk-YI3WYUXK.js +1 -0
  221. package/dist/standalone/chunk-ZJGP6EKR.js +1 -0
  222. package/dist/standalone/chunk-ZNNAGR6N.js +1 -0
  223. package/dist/standalone/studio.js +9 -356
  224. package/dist/styles.css +2 -2
  225. package/package.json +17 -15
  226. package/dist/packem_shared/ADMIN_FUNCTIONS-DmBqMZ-z.js +0 -45
  227. package/dist/packem_shared/ApiDocsPanel-C5-yJ1p7.js +0 -842
  228. package/dist/packem_shared/ApiReferencePanel-1vubqG5s.js +0 -229
  229. package/dist/packem_shared/ApiTab-W3no0KOj.js +0 -251
  230. package/dist/packem_shared/AuditPanel-Bq4o_IqT.js +0 -212
  231. package/dist/packem_shared/CommandPalette-BtgkBzZI.js +0 -373
  232. package/dist/packem_shared/ConfirmButton-C2eVi2Qv.js +0 -59
  233. package/dist/packem_shared/ConnectionBadge-B2DDM2Tn.js +0 -111
  234. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +0 -50
  235. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +0 -89
  236. package/dist/packem_shared/DEFAULT_LOCALE-CiX4W7Kr.js +0 -27
  237. package/dist/packem_shared/DataBrowser-CtBe1So9.js +0 -4542
  238. package/dist/packem_shared/DataFilters-FNquMaiu.js +0 -249
  239. package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +0 -66
  240. package/dist/packem_shared/ExportImportPanel-dxY56TDF.js +0 -193
  241. package/dist/packem_shared/FileBrowser-Dhy4zES8.js +0 -2932
  242. package/dist/packem_shared/FunctionRunner--fQJRPAD.js +0 -343
  243. package/dist/packem_shared/FunctionStatsPanel-BjRUA_G3.js +0 -432
  244. package/dist/packem_shared/GlobalDataBrowser-BTEmGrph.js +0 -318
  245. package/dist/packem_shared/HealthPanel-PxclMWmA.js +0 -640
  246. package/dist/packem_shared/HomePanel-Cw16stjq.js +0 -1273
  247. package/dist/packem_shared/InsightsPanel-CWS_C-xW.js +0 -423
  248. package/dist/packem_shared/LogsPanel-CTW8CFcM.js +0 -839
  249. package/dist/packem_shared/MailPanel-BwkvfIHF.js +0 -447
  250. package/dist/packem_shared/MetricsPanel-BLuOhZQ4.js +0 -1625
  251. package/dist/packem_shared/MigrationsPanel-DT3lnwHF.js +0 -246
  252. package/dist/packem_shared/OpenRpcReferencePanel-vbcYbv3V.js +0 -191
  253. package/dist/packem_shared/PitrPanel-CdErL7EJ.js +0 -252
  254. package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +0 -3
  255. package/dist/packem_shared/ScheduledJobs-CabfKbyM.js +0 -159
  256. package/dist/packem_shared/SchemaViewer-LJDcmNIO.js +0 -2512
  257. package/dist/packem_shared/SecurityAdvisorPanel-C_ETsPih.js +0 -79
  258. package/dist/packem_shared/SettingsPanel-C0uLRf5P.js +0 -176
  259. package/dist/packem_shared/ShardInput-gx_DZXXn.js +0 -107
  260. package/dist/packem_shared/SqlEditorPanel-CguV7otm.js +0 -13
  261. package/dist/packem_shared/Studio-BmSGSIuY.js +0 -33
  262. package/dist/packem_shared/StudioApp-D4azxYBu.js +0 -657
  263. package/dist/packem_shared/StudioI18nProvider-B-tDCZIi.js +0 -48
  264. package/dist/packem_shared/TableEditor-ChfUOZec.js +0 -371
  265. package/dist/packem_shared/advisor-view-CGcfMiPq.js +0 -159
  266. package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +0 -108
  267. package/dist/packem_shared/app.d-CCmwDEVs.d.ts +0 -300
  268. package/dist/packem_shared/badge-B2PKA1-5.js +0 -49
  269. package/dist/packem_shared/bar-chart-CzJAgqkp.js +0 -3245
  270. package/dist/packem_shared/button-BhsN2uZH.js +0 -49
  271. package/dist/packem_shared/card-DURq3ElK.js +0 -175
  272. package/dist/packem_shared/cf-links-2cktDedA.js +0 -8
  273. package/dist/packem_shared/checkbox-UNkzAxl-.js +0 -63
  274. package/dist/packem_shared/data-grid-B5CaV3wS.js +0 -183
  275. package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +0 -280
  276. package/dist/packem_shared/empty-state-DY_oe0k6.js +0 -98
  277. package/dist/packem_shared/grid-features-CzUfqgsM.js +0 -840
  278. package/dist/packem_shared/input-XH4r1Pt1.js +0 -53
  279. package/dist/packem_shared/internal-rXJEAhXS.js +0 -68
  280. package/dist/packem_shared/label-D8ykjn5J.js +0 -46
  281. package/dist/packem_shared/live-status-FZ0psC1z.js +0 -44
  282. package/dist/packem_shared/reference-view-B4E49Lip.js +0 -2180
  283. package/dist/packem_shared/shard-history-DyebH1R5.js +0 -38
  284. package/dist/packem_shared/sparkline-10dG-_f0.js +0 -93
  285. package/dist/packem_shared/sql-editor-panel-BFRpzj6r.js +0 -2562
  286. package/dist/packem_shared/storage-tier-CL98eOvn.js +0 -85
  287. package/dist/packem_shared/studio-H9fuQgSj.js +0 -10303
  288. package/dist/packem_shared/table-_RzNvy3R.js +0 -246
  289. package/dist/packem_shared/table-list-sidebar-Bg7uzbvC.js +0 -832
  290. package/dist/packem_shared/textarea-D3gaCU_-.js +0 -46
  291. package/dist/packem_shared/use-live-admin-Dq6g3daN.js +0 -73
  292. package/dist/packem_shared/use-live-shard-seed-Cuk3dnH0.js +0 -76
  293. package/dist/packem_shared/useDebounced-Dxncpg6z.js +0 -32
  294. package/dist/packem_shared/utils-B05Dmz_H.js +0 -8
  295. package/dist/packem_shared/virtual-rect-CVMUskSm.js +0 -10
@@ -0,0 +1 @@
1
+ import{c as V}from"react/compiler-runtime";import{useLunora as kt}from"@lunora/react";import{useState as R,useRef as U,useEffect as de,useMemo as Ce,useCallback as wt}from"react";import{ConfirmButton as Nt}from"./ConfirmButton-CTL3f3kr.js";import{ShardInput as Jt}from"./ShardInput-BVn2iCU0.js";import{E as Gt}from"./empty-state-Cg7t_8qu.js";import{useT as X}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as W}from"./ADMIN_FUNCTIONS-BYNSbBVE.js";import{h as fe,f as oe,c as le,a as se,i as Ht}from"./internal-AtZ4bTal.js";import{useReactTable as Qt,getSortedRowModel as Ut,getCoreRowModel as Wt,flexRender as Zt}from"@tanstack/react-table";import{useVirtualizer as Yt}from"@tanstack/react-virtual";import{f as $t}from"./checkbox-StT4Gob6.js";import{c as Tt}from"./utils-bhneXptQ.js";import{l as Xt}from"./virtual-rect-1o1veP7R.js";import{_ as en,y as ht,v as tn}from"./data-grid-BMBKzMEJ.js";import{jsx as c,jsxs as k,Fragment as Je}from"react/jsx-runtime";import{u as nn,_ as rn,a as on,$ as ln}from"./table-list-sidebar-CMCcNALK.js";import{toFilterClauses as be,DataFilters as an}from"./DataFilters-Csb30F0C.js";import{M as zt}from"./modal-shell-CUwwWC2o.js";import{n as sn,l as dn}from"./grid-features-uZCUj955.js";import{K as Ke}from"./use-admin-query-Di3fLE8H.js";import Et from"./useDebounced-Ihdiid_k.js";import{r as cn,l as un}from"./shard-history-DMEW5VBE.js";const mn=/([a-z\d])([A-Z])/gu,gn=/[\s_-]+/u,bn=new Set(["access_token","api_key","apikey","card_number","client_secret","credit_card","cvv","passwd","password","private_key","pwd","refresh_token","secret","ssn","token"]),fn=r=>{const e=r.replaceAll(mn,"$1 $2").split(gn).map(n=>n.toLowerCase()).filter(n=>n.length>0),t=new Set(e);for(let n=0;n<e.length-1;n+=1){const s=e[n],o=e[n+1];s===void 0||o===void 0||(t.add(`${s}${o}`),t.add(`${s}_${o}`))}return[...t]},Rt="•••",pn=r=>{let e=2166136261;for(let t=0;t<r.length;t+=1)e^=r.codePointAt(t)??0,e=Math.imul(e,16777619);return(e>>>0).toString(16).padStart(8,"0")},At=(r,e)=>{try{return e==="redact"?null:e==="hash"?r==null?r:pn(typeof r=="string"?r:JSON.stringify(r)):Rt}catch{return Rt}},hn=(r,e)=>{const t=new Map;for(const n of r)n.table===e&&t.set(n.column,n.strategy);return t},xn=r=>{for(const e of fn(r))if(bn.has(e))return!0;return!1},vn=(r,e)=>{const t=e.filter(s=>!r.has(s)&&xn(s));if(t.length===0)return r;const n=new Map(r);for(const s of t)n.set(s,"redact");return n},yn=(r,e,t)=>{if(!t.enabled)return r;const n=t.columns.get(e);return n===void 0?r:At(r,n)},Dt=(r,e)=>!e.enabled||e.columns.size===0?r:r.map(t=>{const n={...t};for(const[s,o]of e.columns)s in n&&(n[s]=At(n[s],o));return n}),wn=()=>{const r=V(11);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const[t,n]=R(e);let s;r[1]===Symbol.for("react.memo_cache_sentinel")?(s=(m,p,h)=>{n(v=>({...v,[m]:{...v[m],[p]:h}}))},r[1]=s):s=r[1];const o=s;let a;r[2]===Symbol.for("react.memo_cache_sentinel")?(a=()=>{n({})},r[2]=a):a=r[2];const l=a;let i;r[3]!==t?(i=(m,p)=>{const h=t[m];return h!==void 0&&p in h?{value:h[p]}:void 0},r[3]=t,r[4]=i):i=r[4];const d=i;let u;r[5]!==t?(u=Object.values(t).reduce(Cn,0),r[5]=t,r[6]=u):u=r[6];const g=u;let b;return r[7]!==g||r[8]!==t||r[9]!==d?(b={clear:l,count:g,stage:o,staged:t,stagedValue:d},r[7]=g,r[8]=t,r[9]=d,r[10]=b):b=r[10],b},Nn=(r,e)=>{if(typeof e=="number"){const t=Number(r);return r.trim()===""||Number.isNaN(t)?r:t}if(typeof e=="boolean"){if(r==="true")return!0;if(r==="false")return!1}return r},Sn=r=>{const e=V(29),{changes:t,committing:n,onCommit:s,onDiscard:o}=r,a=X();let l;e[0]!==t.length||e[1]!==a?(l=a("{count} pending changes",{count:t.length}),e[0]=t.length,e[1]=a,e[2]=l):l=e[2];let i;e[3]!==l?(i=c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-warning","data-testid":"db-staged-count",children:l}),e[3]=l,e[4]=i):i=e[4];let d;e[5]!==n||e[6]!==a?(d=a(n?"Committing…":"Commit"),e[5]=n,e[6]=a,e[7]=d):d=e[7];let u;e[8]!==n||e[9]!==s||e[10]!==d?(u=c("button",{className:"ms-auto rounded-md bg-primary px-2.5 py-1 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-commit",disabled:n,onClick:s,type:"button",children:d}),e[8]=n,e[9]=s,e[10]=d,e[11]=u):u=e[11];let g;e[12]!==a?(g=a("Discard"),e[12]=a,e[13]=g):g=e[13];let b;e[14]!==n||e[15]!==o||e[16]!==g?(b=c("button",{className:"rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50","data-testid":"db-staged-discard",disabled:n,onClick:o,type:"button",children:g}),e[14]=n,e[15]=o,e[16]=g,e[17]=b):b=e[17];let m;e[18]!==i||e[19]!==u||e[20]!==b?(m=k("div",{className:"flex flex-wrap items-center gap-2",children:[i,u,b]}),e[18]=i,e[19]=u,e[20]=b,e[21]=m):m=e[21];let p;e[22]!==t?(p=t.map(kn),e[22]=t,e[23]=p):p=e[23];let h;e[24]!==p?(h=c("ul",{className:"flex flex-col gap-1","data-testid":"db-staged-list",children:p}),e[24]=p,e[25]=h):h=e[25];let v;return e[26]!==m||e[27]!==h?(v=k("div",{className:"flex flex-col gap-2 border border-warning/40 bg-warning/5 p-3","data-testid":"db-staged",children:[m,h]}),e[26]=m,e[27]=h,e[28]=v):v=e[28],v};function Cn(r,e){return r+Object.keys(e).length}function kn(r){return k("li",{className:"flex flex-wrap items-center gap-2 font-mono text-xs",children:[k("span",{className:"text-muted-foreground",children:[r.rowId,".",r.column]}),c("span",{className:"text-destructive line-through",children:fe(r.oldValue)}),c("span",{"aria-hidden":"true",className:"text-muted-foreground",children:"→"}),c("span",{className:"text-foreground",children:fe(r.newValue)})]},`${r.rowId}:${r.column}`)}const It=400,$n=36,Tn={flex:"1 1 0%",minHeight:0,overflow:"auto",position:"relative"},_n={width:"100%"},En={alignItems:"center",display:"flex",left:0,position:"absolute",top:0,width:"100%"},Rn={display:"flex",width:"100%"},Mt={flex:"0 0 8.5rem",padding:"0.375rem 0.75rem"},Dn="2.5rem",Vt={alignItems:"center",display:"flex",flex:"0 0 2.5rem",justifyContent:"center",left:0,padding:"0.375rem 0",position:"sticky",zIndex:2},_t=r=>({flex:"0 0 auto",overflow:"hidden",padding:"0.375rem 0.75rem",position:"relative",textOverflow:"ellipsis",whiteSpace:"nowrap",width:`${r.toString()}px`}),Lt=r=>({..._t(r),left:Dn,position:"sticky",zIndex:2}),Ft="rounded-md px-2 py-0.5 text-xs font-medium text-muted-foreground outline-none transition-colors hover:bg-accent hover:text-foreground focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",ae=r=>{for(const e of["id","__id__","_id"]){const t=r[e];if(typeof t=="string"||typeof t=="number")return String(t)}return null},Bt=(r,e)=>ae(r)??`row-${e.toString()}`,In=8,Mn=r=>{const e=V(16),{anchor:t,state:n}=r,s=X();let o;e[0]!==t.left||e[1]!==t.top?(o={left:t.left,position:"fixed",top:t.top,zIndex:50},e[0]=t.left,e[1]=t.top,e[2]=o):o=e[2];const a=o;let l;if(n==="loading"){let d;e[3]!==s?(d=s("Loading…"),e[3]=s,e[4]=d):d=e[4];let u;e[5]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[5]=d,e[6]=u):u=e[6],l=u}else if(n.row===null){let d;e[7]!==s?(d=s("No matching row."),e[7]=s,e[8]=d):d=e[8];let u;e[9]!==d?(u=c("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:d}),e[9]=d,e[10]=u):u=e[10],l=u}else{let d;if(e[11]!==n.row){const u=Object.entries(n.row).slice(0,In);d=c("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 px-3 py-2",children:u.map(Kn)}),e[11]=n.row,e[12]=d}else d=e[12];l=d}let i;return e[13]!==l||e[14]!==a?(i=c("div",{className:"pointer-events-none w-72 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground","data-testid":"db-ref-preview",role:"tooltip",style:a,children:l}),e[13]=l,e[14]=a,e[15]=i):i=e[15],i},Fn=r=>{const e=V(22),{column:t,id:n,onNavigate:s,onPreview:o,target:a}=r,[l,i]=R(null),[d,u]=R("idle");let g;e[0]!==n||e[1]!==s||e[2]!==a?(g=()=>{s(a,n)},e[0]=n,e[1]=s,e[2]=a,e[3]=g):g=e[3];const b=g;let m;e[4]!==n||e[5]!==o||e[6]!==d||e[7]!==a?(m=$=>{const y=$.currentTarget.getBoundingClientRect();i({left:y.left,top:y.bottom+4}),d==="idle"&&(u("loading"),oe((async()=>{try{u({row:await o(a,n)})}catch{u({row:null})}})()))},e[4]=n,e[5]=o,e[6]=d,e[7]=a,e[8]=m):m=e[8];const p=m;let h;e[9]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{i(null)},e[9]=h):h=e[9];const v=h,w=`db-ref-${t}`,f=`Open ${a} ${n}`;let x;e[10]!==n||e[11]!==b||e[12]!==p||e[13]!==w||e[14]!==f?(x=k("button",{"data-testid":w,onBlur:v,onClick:b,onFocus:p,onMouseEnter:p,onMouseLeave:v,title:f,type:"button",children:[n," ↗"]}),e[10]=n,e[11]=b,e[12]=p,e[13]=w,e[14]=f,e[15]=x):x=e[15];let N;e[16]!==l||e[17]!==d?(N=l!==null&&d!=="idle"&&c(Mn,{anchor:l,state:d}),e[16]=l,e[17]=d,e[18]=N):N=e[18];let _;return e[19]!==x||e[20]!==N?(_=k(Je,{children:[x,N]}),e[19]=x,e[20]=N,e[21]=_):_=e[21],_},On=r=>r==="asc"?" ▲":r==="desc"?" ▼":"",jn="absolute end-1 top-1/2 hidden -translate-y-1/2 items-center justify-center rounded text-muted-foreground outline-none group-hover/cell:flex hover:text-foreground focus-visible:flex",Ot=r=>{const e=V(8),{column:t,onExpand:n,value:s}=r;let o;e[0]!==t||e[1]!==n||e[2]!==s?(o=()=>{n(t,s)},e[0]=t,e[1]=n,e[2]=s,e[3]=o):o=e[3];const a=o,l=`db-expand-${t}`;let i;e[4]===Symbol.for("react.memo_cache_sentinel")?(i=c("svg",{"aria-hidden":"true",className:"size-3",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.8,viewBox:"0 0 24 24",children:c("path",{d:"M9 21H5a2 2 0 0 1-2-2v-4m18 0v4a2 2 0 0 1-2 2h-4M3 9V5a2 2 0 0 1 2-2h4m6 0h4a2 2 0 0 1 2 2v4"})}),e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l?(d=c("button",{"aria-label":"Expand cell",className:jn,"data-testid":l,onClick:a,type:"button",children:i}),e[5]=a,e[6]=l,e[7]=d):d=e[7],d},Pn=r=>{const e=V(14),{column:t,initial:n,onCancel:s,onCommit:o,recordId:a}=r,l=U(null);let i,d;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=()=>{l.current?.select()},d=[],e[0]=i,e[1]=d):(i=e[0],d=e[1]),de(i,d);let u;e[2]!==s||e[3]!==o?(u=w=>{w.key==="Enter"?(w.preventDefault(),o(w.currentTarget.value)):w.key==="Escape"&&(w.preventDefault(),s())},e[2]=s,e[3]=o,e[4]=u):u=e[4];const g=u;let b;e[5]!==o?(b=w=>{o(w.currentTarget.value)},e[5]=o,e[6]=b):b=e[6];const m=b,p=`db-cell-input-${a}-${t}`;let h;e[7]!==n?(h=fe(n),e[7]=n,e[8]=h):h=e[8];let v;return e[9]!==m||e[10]!==g||e[11]!==p||e[12]!==h?(v=c("input",{className:"w-full rounded border border-ring bg-background px-1 py-0.5 font-mono text-xs outline-none","data-testid":p,defaultValue:h,onBlur:m,onKeyDown:g,ref:l}),e[9]=m,e[10]=g,e[11]=p,e[12]=h,e[13]=v):v=e[13],v},zn=r=>{const e=V(63),{cell:t,edit:n,mask:s,refs:o}=r,a=t.column.id;let l,i,d,u;if(e[0]!==t||e[1]!==a||e[2]!==n||e[3]!==s||e[4]!==o.columns||e[5]!==o.onNavigate||e[6]!==o.onPreview){u=Symbol.for("react.early_return_sentinel");e:{i=t.getValue(),l=ae(t.row.original);const y=o.columns?.[a];if(s.enabled&&s.columns.has(a)){const S=`db-masked-${a}`,E=c(ht,{value:yn(i,a,s)});let D;e[11]!==S||e[12]!==E?(D=c("span",{className:"text-muted-foreground italic","data-testid":S,title:"Masked (preview)",children:E}),e[11]=S,e[12]=E,e[13]=D):D=e[13],u=D;break e}if(y!==void 0&&(typeof i=="string"||typeof i=="number")&&String(i)!==""){const S=String(i),E=`${y}:${String(i)}`;let D;e[14]!==a||e[15]!==o.onNavigate||e[16]!==o.onPreview||e[17]!==S||e[18]!==E||e[19]!==y?(D=c(Fn,{column:a,id:S,onNavigate:o.onNavigate,onPreview:o.onPreview,target:y},E),e[14]=a,e[15]=o.onNavigate,e[16]=o.onPreview,e[17]=S,e[18]=E,e[19]=y,e[20]=D):D=e[20],u=D;break e}if(l===null){let S;e[21]!==i?(S=c(ht,{value:i}),e[21]=i,e[22]=S):S=e[22];let E;e[23]!==a||e[24]!==n.onExpandCell||e[25]!==i?(E=c(Ot,{column:a,onExpand:n.onExpandCell,value:i}),e[23]=a,e[24]=n.onExpandCell,e[25]=i,e[26]=E):E=e[26];let D;e[27]!==S||e[28]!==E?(D=k(Je,{children:[S,E]}),e[27]=S,e[28]=E,e[29]=D):D=e[29],u=D;break e}d=n.stagedValue(l,a)}e[0]=t,e[1]=a,e[2]=n,e[3]=s,e[4]=o.columns,e[5]=o.onNavigate,e[6]=o.onPreview,e[7]=l,e[8]=i,e[9]=d,e[10]=u}else l=e[7],i=e[8],d=e[9],u=e[10];if(u!==Symbol.for("react.early_return_sentinel"))return u;const g=d,b=g===void 0?i:g.value;let m;e[30]!==a||e[31]!==n?(m=n.editable&&n.editableColumn(a),e[30]=a,e[31]=n,e[32]=m):m=e[32];const p=m;if(n.editingCell!==null&&n.editingCell.rowId===l&&n.editingCell.column===a){let y;e[33]!==a||e[34]!==n||e[35]!==l||e[36]!==i?(y=E=>{n.stage(l,a,Nn(E,i)),n.cancelEdit()},e[33]=a,e[34]=n,e[35]=l,e[36]=i,e[37]=y):y=e[37];let S;return e[38]!==a||e[39]!==b||e[40]!==n.cancelEdit||e[41]!==l||e[42]!==y?(S=c(Pn,{column:a,initial:b,onCancel:n.cancelEdit,onCommit:y,recordId:l}),e[38]=a,e[39]=b,e[40]=n.cancelEdit,e[41]=l,e[42]=y,e[43]=S):S=e[43],S}let h;g!==void 0?h="rounded bg-warning/15 px-1":p&&(h="cursor-text");let v;e[44]!==p||e[45]!==a||e[46]!==n||e[47]!==l?(v=p?()=>{n.startEdit(l,a)}:void 0,e[44]=p,e[45]=a,e[46]=n,e[47]=l,e[48]=v):v=e[48];const w=v,f=`db-cell-${l}-${a}`;let x;e[49]!==b?(x=c(ht,{value:b}),e[49]=b,e[50]=x):x=e[50];let N;e[51]!==h||e[52]!==w||e[53]!==f||e[54]!==x?(N=c("span",{className:h,"data-testid":f,onDoubleClick:w,children:x}),e[51]=h,e[52]=w,e[53]=f,e[54]=x,e[55]=N):N=e[55];let _;e[56]!==a||e[57]!==b||e[58]!==n.onExpandCell?(_=c(Ot,{column:a,onExpand:n.onExpandCell,value:b}),e[56]=a,e[57]=b,e[58]=n.onExpandCell,e[59]=_):_=e[59];let $;return e[60]!==N||e[61]!==_?($=k(Je,{children:[N,_]}),e[60]=N,e[61]=_,e[62]=$):$=e[62],$},An=({draggedRef:r,header:e,masked:t=!1,pinned:n=!1,table:s})=>{const o=()=>{r.current=e.column.id},a=i=>{i.preventDefault()},l=()=>{const i=r.current,d=e.column.id;if(r.current=null,i===null||i===d)return;const u=s.getState().columnOrder,g=(u.length>0?u:s.getAllLeafColumns().map(m=>m.id)).filter(m=>m!==i),b=g.indexOf(d);g.splice(b===-1?g.length:b,0,i),s.setColumnOrder(g)};return k("th",{className:Tt("text-start text-xs font-medium text-muted-foreground",n&&"border-e border-border bg-muted"),draggable:!0,onDragOver:a,onDragStart:o,onDrop:l,style:n?Lt(e.getSize()):_t(e.getSize()),children:[k("button",{className:"inline-flex max-w-full cursor-grab items-center gap-1 truncate outline-none hover:text-foreground","data-testid":`db-sort-${e.column.id}`,onClick:e.column.getToggleSortingHandler(),type:"button",children:[Zt(e.column.columnDef.header,e.getContext()),On(e.column.getIsSorted())]}),t&&c("span",{className:"ms-1 inline-flex items-center rounded-sm bg-warning/15 px-1 text-[0.625rem] font-medium uppercase text-warning","data-testid":`db-mask-chip-${e.column.id}`,title:"This column is masked by a mask() policy",children:"masked"}),c("span",{"aria-hidden":"true",className:"absolute inset-y-0 end-0 w-1 cursor-col-resize touch-none select-none hover:bg-ring/60 data-[resizing=true]:bg-ring","data-resizing":e.column.getIsResizing(),"data-testid":`db-resize-${e.column.id}`,onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler()})]})},Vn=r=>{const e=V(13),{table:t}=r,n=X();let s;e[0]!==t?(s=u=>{t.toggleAllRowsSelected(u)},e[0]=t,e[1]=s):s=e[1];const o=s;let a;e[2]!==n?(a=n("Select all rows"),e[2]=n,e[3]=a):a=e[3];let l;e[4]!==t?(l=t.getIsAllRowsSelected(),e[4]=t,e[5]=l):l=e[5];let i;e[6]!==t?(i=t.getIsSomeRowsSelected()&&!t.getIsAllRowsSelected(),e[6]=t,e[7]=i):i=e[7];let d;return e[8]!==o||e[9]!==a||e[10]!==l||e[11]!==i?(d=c("th",{className:"bg-muted",style:Vt,children:c($t,{"aria-label":a,checked:l,"data-testid":"db-select-all",indeterminate:i,onCheckedChange:o})}),e[8]=o,e[9]=a,e[10]=l,e[11]=i,e[12]=d):d=e[12],d},Ln=r=>{const e=V(17),{row:t}=r,n=X();let s;e[0]!==t.original?(s=ae(t.original),e[0]=t.original,e[1]=s):s=e[1];const o=s;let a;e[2]!==t?(a=p=>{t.toggleSelected(p)},e[2]=t,e[3]=a):a=e[3];const l=a;let i;e[4]!==n?(i=n("Select row"),e[4]=n,e[5]=i):i=e[5];let d;e[6]!==t?(d=t.getIsSelected(),e[6]=t,e[7]=d):d=e[7];let u;e[8]!==t.index||e[9]!==t.original?(u=Bt(t.original,t.index),e[8]=t.index,e[9]=t.original,e[10]=u):u=e[10];const g=`db-select-${u}`,b=o===null;let m;return e[11]!==l||e[12]!==i||e[13]!==d||e[14]!==g||e[15]!==b?(m=c("td",{className:"bg-background",style:Vt,children:c($t,{"aria-label":i,checked:d,"data-testid":g,disabled:b,onCheckedChange:l})}),e[11]=l,e[12]=i,e[13]=d,e[14]=g,e[15]=b,e[16]=m):m=e[16],m},Bn=r=>{const e=V(46),{edit:t,editable:n,mask:s,onDelete:o,onEdit:a,onInspect:l,refs:i,scrollRef:d,scrollToIndex:u,table:g,tableRows:b,tbodyStyle:m,virtualRows:p}=r,h=U(null),[v,w]=R(null);let f;e[0]!==g?(f=g.getVisibleLeafColumns(),e[0]=g,e[1]=f):f=e[1];const x=f.length;let N;e[2]!==v||e[3]!==x||e[4]!==t||e[5]!==g||e[6]!==b?(N=T=>{if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Enter"].includes(T.key))return;T.preventDefault();const I=v??{col:0,row:0};if(T.key==="Enter"){const ee=b[I.row],te=g.getVisibleLeafColumns()[I.col];if(ee!==void 0&&te!==void 0){const Q=ae(ee.original);Q!==null&&t.editableColumn(te.id)&&t.startEdit(Q,te.id)}w(I);return}let{col:P,row:A}=I;e:switch(T.key){case"ArrowDown":{A=Math.min(A+1,b.length-1);break e}case"ArrowRight":{P=Math.min(P+1,x-1);break e}case"ArrowUp":{A=Math.max(A-1,0);break e}default:P=Math.max(P-1,0)}w({col:P,row:A})},e[2]=v,e[3]=x,e[4]=t,e[5]=g,e[6]=b,e[7]=N):N=e[7];const _=N;let $,y;e[8]!==v||e[9]!==u?($=()=>{v!==null&&u(v.row)},y=[v,u],e[8]=v,e[9]=u,e[10]=$,e[11]=y):($=e[10],y=e[11]),de($,y);let S;e[12]!==v||e[13]!==t||e[14]!==n||e[15]!==s||e[16]!==o||e[17]!==a||e[18]!==l||e[19]!==i||e[20]!==b?(S=T=>{const I=b[T.index],{original:P}=I,A=ae(P),ee=Bt(P,T.index),te={...En,height:`${T.size.toString()}px`,transform:`translateY(${T.start.toString()}px)`};return k("tr",{className:"border-b border-border text-xs transition-colors hover:bg-muted/50","data-testid":"db-row",style:te,children:[c(Ln,{row:I}),I.getVisibleCells().map((Q,ce)=>{const ue=ce===0,pe=v!==null&&v.row===T.index&&v.col===ce?" ring-1 ring-ring ring-inset":"";return c("td",{className:Tt("group/cell truncate font-mono text-muted-foreground",ue&&"border-e border-border bg-background",pe),style:ue?Lt(Q.column.getSize()):_t(Q.column.getSize()),children:c(zn,{cell:Q,edit:t,mask:s,refs:i})},Q.id)}),k("td",{className:"flex items-center gap-1",style:Mt,children:[c("button",{className:Ft,"data-testid":`db-inspect-${ee}`,onClick:()=>{l(P)},type:"button",children:"Details"}),n&&k(Je,{children:[c("button",{className:Ft,"data-testid":`db-edit-${ee}`,disabled:A===null,onClick:()=>{a(A,P)},type:"button",children:"Edit"}),c(Nt,{confirmLabel:"Delete?",disabled:A===null,onConfirm:()=>{o(A)},testId:`db-delete-${ee}`,children:"Delete"})]})]})]},I.id)},e[12]=v,e[13]=t,e[14]=n,e[15]=s,e[16]=o,e[17]=a,e[18]=l,e[19]=i,e[20]=b,e[21]=S):S=e[21];const E=S;let D;e[22]!==g?(D=c(Vn,{table:g}),e[22]=g,e[23]=D):D=e[23];let L;e[24]!==s||e[25]!==g?(L=g.getFlatHeaders().map((T,I)=>c(An,{draggedRef:h,header:T,masked:s.columns.has(T.column.id),pinned:I===0,table:g},T.id)),e[24]=s,e[25]=g,e[26]=L):L=e[26];let q;e[27]===Symbol.for("react.memo_cache_sentinel")?(q=c("th",{"aria-label":"Row actions",style:Mt}),e[27]=q):q=e[27];let z;e[28]!==D||e[29]!==L?(z=c("thead",{className:"bg-muted/50",children:k("tr",{className:"border-b border-border",style:Rn,children:[D,L,q]})}),e[28]=D,e[29]=L,e[30]=z):z=e[30];let B;if(e[31]!==E||e[32]!==p){let T;e[34]!==E?(T=I=>E(I),e[34]=E,e[35]=T):T=e[35],B=p.map(T),e[31]=E,e[32]=p,e[33]=B}else B=e[33];let O;e[36]!==B||e[37]!==m?(O=c("tbody",{style:m,children:B}),e[36]=B,e[37]=m,e[38]=O):O=e[38];let j;e[39]!==O||e[40]!==z?(j=k("table",{className:"w-full text-xs","data-testid":"db-rows",style:_n,children:[z,O]}),e[39]=O,e[40]=z,e[41]=j):j=e[41];let K;return e[42]!==_||e[43]!==d||e[44]!==j?(K=c(en,{layout:"fill",children:c("div",{"data-testid":"db-scroll",onKeyDown:_,ref:d,role:"grid",style:Tn,tabIndex:0,children:j})}),e[42]=_,e[43]=d,e[44]=j,e[45]=K):K=e[45],K},qn=(r,e,t)=>{const n=r?.columns,s=r?.rows,o=r?.refs,a=Ce(()=>n===void 0?[]:n.map(x=>({accessorFn:N=>N[x],header:o?.[x]===void 0?x:`${x} →`,id:x})),[n,o]),l=Ce(()=>s??[],[s]),[i,d]=R({}),[u,g]=R({}),b=Qt({columnResizeMode:"onChange",columns:a,data:l,defaultColumn:{minSize:80,size:200},enableColumnResizing:!0,enableRowSelection:x=>ae(x.original)!==null,getCoreRowModel:Wt(),getRowId:(x,N)=>ae(x)??`row-${N.toString()}`,getSortedRowModel:Ut(),manualSorting:!0,onColumnVisibilityChange:g,onRowSelectionChange:d,onSortingChange:t,state:{columnVisibility:u,rowSelection:i,sorting:e}}),m=b.getRowModel().rows,p=U(null),h=Yt({count:m.length,estimateSize:()=>$n,getScrollElement:()=>p.current,initialRect:{height:It,width:0},observeElementRect:(x,N)=>Xt(x,N,It),overscan:8}),v=wt(x=>{h.scrollToIndex(x)},[h]),w=h.getVirtualItems(),f={display:"block",height:`${h.getTotalSize().toString()}px`,position:"relative"};return{scrollRef:p,scrollToIndex:v,table:b,tableRows:m,tbodyStyle:f,virtualRows:w}};function Kn(r){const[e,t]=r;return k("div",{className:"contents",children:[c("dt",{className:"truncate font-mono text-[11px] text-muted-foreground",children:e}),c("dd",{className:"truncate font-mono text-[11px] text-foreground",title:fe(t),children:fe(t)})]},e)}const St="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Jn=r=>{const e=V(22),{onCommit:t}=r,n=X(),[s,o]=R(""),a=U(null);let l,i;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=()=>{a.current?.focus()},i=[],e[0]=l,e[1]=i):(l=e[0],i=e[1]),de(l,i);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=x=>{o(x.target.value)},e[2]=d):d=e[2];const u=d;let g;e[3]!==s||e[4]!==t?(g=()=>{const x=s.trim();x!==""&&t(x)},e[3]=s,e[4]=t,e[5]=g):g=e[5];const b=g;let m;e[6]!==n?(m=n("Query name"),e[6]=n,e[7]=m):m=e[7];let p;e[8]!==n?(p=n("Query name"),e[8]=n,e[9]=p):p=e[9];let h;e[10]!==s||e[11]!==m||e[12]!==p?(h=c("input",{"aria-label":m,className:"h-7 rounded-md border border-border bg-background px-2 text-xs outline-none focus-visible:border-ring","data-testid":"db-save-query-name",onChange:u,placeholder:p,ref:a,value:s}),e[10]=s,e[11]=m,e[12]=p,e[13]=h):h=e[13];let v;e[14]!==n?(v=n("Save"),e[14]=n,e[15]=v):v=e[15];let w;e[16]!==b||e[17]!==v?(w=c("button",{className:St,"data-testid":"db-save-query-confirm",onClick:b,type:"button",children:v}),e[16]=b,e[17]=v,e[18]=w):w=e[18];let f;return e[19]!==h||e[20]!==w?(f=k("span",{className:"inline-flex items-center gap-1",children:[h,w]}),e[19]=h,e[20]=w,e[21]=f):f=e[21],f},Gn=r=>{const e=V(27),{onApply:t,onCopyLink:n,onDelete:s,onSave:o,saved:a}=r,l=X(),[i,d]=R(!1);let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=()=>{d(!0)},e[0]=u):u=e[0];const g=u;let b;e[1]!==o?(b=y=>{o(y),d(!1)},e[1]=o,e[2]=b):b=e[2];const m=b;let p;e[3]!==t||e[4]!==a?(p=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&t(S)},e[3]=t,e[4]=a,e[5]=p):p=e[5];const h=p;let v;e[6]!==s||e[7]!==a?(v=y=>{const S=a[Number(y.currentTarget.dataset.index)];S!==void 0&&s(S.name)},e[6]=s,e[7]=a,e[8]=v):v=e[8];const w=v;let f;e[9]!==l?(f=l("Copy link"),e[9]=l,e[10]=f):f=e[10];let x;e[11]!==n||e[12]!==f?(x=c("button",{className:St,"data-testid":"db-copy-link",onClick:n,type:"button",children:f}),e[11]=n,e[12]=f,e[13]=x):x=e[13];let N;e[14]!==m||e[15]!==i||e[16]!==l?(N=i?c(Jn,{onCommit:m}):c("button",{className:St,"data-testid":"db-save-query",onClick:g,type:"button",children:l("Save query")}),e[14]=m,e[15]=i,e[16]=l,e[17]=N):N=e[17];let _;e[18]!==h||e[19]!==w||e[20]!==a||e[21]!==l?(_=a.length>0&&k("div",{className:"flex flex-wrap items-center gap-1","data-testid":"db-saved-queries",children:[c("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:l("Saved")}),a.map((y,S)=>k("span",{className:"inline-flex items-center overflow-hidden rounded-md border border-border",children:[c("button",{className:"px-2 py-0.5 text-xs text-foreground transition-colors hover:bg-accent","data-index":S,"data-testid":`db-saved-query-${y.name}`,onClick:h,type:"button",children:y.name}),c("button",{"aria-label":l("Delete saved query {name}",{name:y.name}),className:"border-l border-border px-1 py-0.5 text-xs text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive","data-index":S,"data-testid":`db-saved-query-delete-${y.name}`,onClick:w,type:"button",children:"✕"})]},y.name))]}),e[18]=h,e[19]=w,e[20]=a,e[21]=l,e[22]=_):_=e[22];let $;return e[23]!==x||e[24]!==N||e[25]!==_?($=k("div",{className:"flex flex-wrap items-center gap-1.5","data-testid":"db-query-bar",children:[x,N,_]}),e[23]=x,e[24]=N,e[25]=_,e[26]=$):$=e[26],$},Hn="/__lunora/seed",xt=200,Qn=50,Un=(r,e)=>{const t=[];for(const n of r)n.pk!==!0&&n.ref!==void 0&&n.type==="id"&&(e[n.ref]??[]).length===0&&t.push(n.name);return t},Wn=async r=>{const e=await fetch(Hn,{body:JSON.stringify(r),headers:{"Content-Type":"application/json"},method:"POST"}),t=await e.json();return e.ok&&t.rows!==void 0?{kind:"ok",rows:t.rows}:{kind:"error",message:t.error??`seed request failed (${String(e.status)})`}},Zn="rounded-md border border-border px-3 py-1.5 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50",Yn="rounded-md bg-primary px-3 py-1.5 text-xs font-medium text-primary-foreground outline-none transition-colors hover:bg-primary/90 focus-visible:bg-primary/90 disabled:pointer-events-none disabled:opacity-50",Xn=({columns:r,fkPools:e,onClose:t,onInsertRows:n,table:s})=>{const o=X(),[a,l]=R(10),[i,d]=R(!1),[u,g]=R(void 0),[b,m]=R(void 0),p=f=>{const x=Number(f.target.value);!Number.isNaN(x)&&x>=1&&l(Math.min(x,xt))},h=async()=>{g(void 0),m(void 0),d(!0);try{const f=await Wn({count:a,existingIds:e,seed:Date.now(),table:s});if(f.kind==="error"){g(f.message);return}const{rows:x}=f;if(x.length===0){g(o("No rows generated — all columns were skipped."));return}const N=await n(x);if(N!==void 0){g(N);return}m(x.length);const _=Un(r,e);_.length>0&&g(o("Inserted {count} rows. Skipped FK columns: {cols}",{cols:_.join(", "),count:x.length.toString()}))}finally{d(!1)}},v=()=>{oe(h())},w=r.filter(f=>f.pk!==!0);return k(zt,{label:o("Generate dummy rows"),onClose:t,panelTestId:"gen-rows-panel",testId:"gen-rows-overlay",variant:"dialog",children:[k("div",{className:"flex items-start justify-between",children:[k("div",{className:"flex flex-col gap-0.5",children:[c("h3",{className:"text-base text-foreground","data-testid":"gen-rows-title",children:o("Generate dummy rows")}),c("p",{className:"text-xs text-muted-foreground","data-testid":"gen-rows-desc",children:o("Seed {table} with Faker-generated rows. Existing rows are not affected.",{table:s})})]}),c("button",{className:"text-xs text-muted-foreground hover:text-foreground","data-testid":"gen-rows-close",onClick:t,type:"button",children:o("Close")})]}),k("div",{className:"flex items-center gap-2",children:[c("label",{className:"text-xs font-medium text-foreground",htmlFor:"gen-rows-count",children:o("Row count")}),c("input",{className:"w-20 rounded-md border border-border bg-background px-2 py-1 text-xs outline-none focus-visible:border-ring","data-testid":"gen-rows-count",id:"gen-rows-count",max:xt,min:1,onChange:p,type:"number",value:a}),c("span",{className:"text-xs text-muted-foreground",children:o("(max {max})",{max:xt.toString()})})]}),w.length>0&&k("div",{className:"flex flex-col gap-1",children:[c("p",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:o("Columns to seed")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"gen-rows-columns",children:w.map(f=>{const x=f.ref!==void 0&&f.type==="id",N=x&&(e[f.ref??""]??[]).length===0,_=N?"rounded bg-destructive/10 px-1 text-destructive":"rounded bg-muted px-1 text-muted-foreground",$=N?`gen-rows-fk-empty-${f.name}`:`gen-rows-fk-ok-${f.name}`,y=N?o("FK: no rows in {ref} — will skip",{ref:f.ref??""}):o("→ {ref}",{ref:f.ref??""});return k("li",{className:"flex items-center gap-1.5 font-mono text-xs",children:[c("span",{className:"text-foreground",children:f.name}),k("span",{className:"text-muted-foreground",children:["(",f.type,")"]}),f.optional&&c("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:"optional"}),x&&c("span",{className:_,"data-testid":$,children:y})]},f.name)})})]}),u!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"gen-rows-error",role:"alert",children:u}),b!==void 0&&u===void 0&&c("p",{className:"text-xs text-success","data-testid":"gen-rows-success",children:o("Inserted {count} rows successfully.",{count:b.toString()})}),k("div",{className:"flex justify-end gap-2",children:[c("button",{className:Zn,"data-testid":"gen-rows-cancel",onClick:t,type:"button",children:o("Cancel")}),c("button",{className:Yn,"data-testid":"gen-rows-generate",disabled:i,onClick:v,type:"button",children:o(i?"Inserting…":"Generate & insert")})]})]})},vt=r=>{const e=r[0];return e===void 0?void 0:{column:e.id,direction:e.desc?"desc":"asc"}},qt=r=>r==null?"":typeof r=="object"?JSON.stringify(r):String(r),jt=r=>r.map(e=>({column:e.column,operator:e.operator,value:e.value===void 0?"":qt(e.value)})),Pt=r=>r===void 0?[]:[{desc:r.direction==="desc",id:r.column}],er=200,tr=20,nr=se(W.readTablePage),rr=se(W.facetColumn),yt=se(W.writeRow),or=se(W.deleteRows),lr=se(W.clearTable),ar={},Ct=new Set(["__doc__","__id__","_creationTime","_id","id"]),sr=r=>{const e=r.__doc__;if(typeof e=="string")try{const n=JSON.parse(e);if(n!==null&&typeof n=="object"&&!Array.isArray(n))return n}catch{}const t={};for(const[n,s]of Object.entries(r))Ct.has(n)||(t[n]=s);return t},ir=({initialFilters:r,initialOrderBy:e,initialSearch:t,initialShardKey:n,onSelectTable:s,onViewChange:o,pageSize:a,tableParam:l})=>{const i=kt(),[d,u]=R(a),[g,b]=R(n??""),m=l===void 0||l===""?null:l,[p,h]=R(0),[v,w]=R("table"),[f,x]=R(()=>Pt(e)),[N,_]=R(t??""),$=Et(N.trim(),300),y=Et(g.trim(),400),[S,E]=R(()=>jt(r??[])),D=U(S);D.current=S;const{clearFacets:L,facets:q,refetchFacets:z,toggleFacet:B}=nn(),[O,j]=R(null),[K,T]=R(null),I=wn(),[P,A]=R(null),[ee,te]=R(!1),Q=Ke(W.listTables,ar,{live:!0,shardKey:y}),ce=Q.data??null,ue=Q.error,pe=Ce(()=>({filters:be(S),limit:d,offset:p,orderBy:vt(f),search:$,skipCount:!0,table:m??""}),[S,d,p,f,$,m]),J=Ce(()=>({filters:be(S),limit:1,search:$,table:m??""}),[S,$,m]),Z=Ke(W.readTablePage,pe,{enabled:m!==null,keepPreviousData:!1,live:!0,shardKey:y}),G=Z.data??null,He=Z.error,{liveError:Qe}=Z,Ue=Ke(W.readTablePage,J,{enabled:m!==null,live:!0,shardKey:y});de(()=>{Q.data!==void 0&&cn(y)},[Q.data,y]);const We=wt(C=>{s?.(C)},[s]),Y=(C,F)=>{s?.(C,{search:F})},ke=async(C,F)=>{try{return(await i.query(nr,{filters:[],limit:tr,offset:0,search:F,table:C},le(y))).rows.find(M=>ae(M)===F)??null}catch{return null}},he=wt((C,F,M,H)=>re=>i.query(rr,{column:re,filters:be(M),search:H,table:F},le(C)),[i]),Ze=C=>{B(C,m===null?null:he(y,m,D.current,$))},$e=(C,F)=>{const M=qt(F);E(H=>[...H.filter(re=>re.column!==C),{column:C,operator:"eq",value:M}]),h(0)},Te=U(he),_e=U(z),xe=U(o);Te.current=he,_e.current=z,xe.current=o,de(()=>{m!==null&&_e.current(Te.current(y,m,S,$))},[y,m,S,$]);const me=U(l);de(()=>{m===null||xe.current===void 0||me.current!==l||xe.current({filters:be(S),orderBy:vt(f),search:$,shard:y})},[m,l,S,f,$,y]);const Ee=U(r),Re=U(e),ne=U(t),De=U(n);Ee.current=r,Re.current=e,ne.current=t,De.current=n,de(()=>{me.current!==l&&(me.current=l,queueMicrotask(()=>{const C=jt(Ee.current??[]);x(Pt(Re.current)),_(ne.current??""),E(C),D.current=C,b(De.current??""),L(),I.clear(),A(null),h(0)}))},[l]);const ge=C=>{m!==null&&h(Math.max(0,C))},Ye=C=>!Ct.has(C),Ie=(C,F)=>{A({column:F,rowId:C})},ie=()=>{A(null)},Me=async()=>{if(m!==null){T(null),te(!0);try{for(const[C,F]of Object.entries(I.staged))await i.query(yt,{doc:F,id:C,op:"patch",table:m},le(y));I.clear(),A(null),Z.refetch()}catch(C){T(C.message)}finally{te(!1)}}},Xe=()=>{I.clear(),A(null)},et=Ce(()=>{const C=new Map;for(const M of G?.rows??[]){const H=ae(M);H!==null&&C.set(H,M)}const F=[];for(const[M,H]of Object.entries(I.staged))for(const[re,Kt]of Object.entries(H))F.push({column:re,newValue:Kt,oldValue:C.get(M)?.[re],rowId:M});return F},[G,I.staged]),Fe=async(C,F,M)=>{if(m===null)return;T(null);let H;if(C!=="delete")try{H=M===void 0||M.trim()===""?{}:JSON.parse(M)}catch(re){T(`Invalid JSON: ${re.message}`);return}try{await i.query(yt,{doc:H,id:F??void 0,op:C,table:m},le(y)),j(null),Z.refetch()}catch(re){T(re.message)}},ve=async(C,F)=>{if(m!==null){T(null);try{for(let M=0;M<er&&(await i.query(C,F,le(y))).hasMore;M+=1);h(0),Z.refetch()}catch(M){T(M.message)}}},Oe=qn(G,f,C=>{x(C),h(0)}),tt={filters:be(S),orderBy:vt(f),search:$,shard:g,table:m??void 0},je=Ue.data?.total??(G===null?0:p+G.rows.length),nt=p>0,rt=G!==null&&p+G.rows.length<je,ot=G===null||G.rows.length===0?0:p+1,lt=G===null?0:p+G.rows.length,Pe=()=>{Q.refetch()},ze=()=>{w("table")},at=()=>{w("json")},ye=()=>{oe(ve(or,{filters:be(D.current),search:$,table:m}))},st=()=>{oe(ve(lr,{table:m}))},it=C=>{_(C.target.value),h(0)},dt=C=>{E(C),h(0)},Ae=()=>{T(null);const C={};for(const F of G?.columns??[])Ct.has(F)||(C[F]="");j({docText:JSON.stringify(C,null,2),id:""})},ct=C=>{j(F=>F===null?F:{docText:C,id:F.id})},ut=()=>{O!==null&&oe(Fe(O.id===""?"insert":"patch",O.id===""?null:O.id,O.docText))},mt=()=>{j(null),T(null)},Ve=()=>{ge(p-d)},we=()=>{ge(p+d)},Ne=C=>{ge(Math.max(0,(C-1)*d))},Le=C=>{u(C),h(0)},gt=(C,F)=>{T(null),j({docText:JSON.stringify(sr(F),null,2),id:C})},bt=C=>{oe(Fe("delete",C))},Be=async C=>{if(!(m===null||C.length===0)){T(null);try{for(const F of C)await i.query(yt,{id:F,op:"delete",table:m},le(y));Z.refetch()}catch(F){T(F.message)}}},ft=C=>{oe(Be(C))},pt=()=>{oe(Me())};return{addRow:Ae,bulkDelete:ye,cancelCellEdit:ie,cancelEdit:mt,changePageSize:Le,clearTable:st,columns:G?.columns??[],committing:ee,currentView:tt,discardStaged:Xe,editableColumn:Ye,editing:O,editingCell:P,facetFilter:$e,facets:q,filter:N,filters:S,goNext:we,goPrevious:Ve,hasNext:rt,hasPrevious:nt,jumpToPage:Ne,liveError:Qe,loadTables:Pe,navigateToRef:Y,onBulkDeleteSelected:ft,onCommitStaged:pt,onFilterChange:it,onFiltersChange:dt,onRowDelete:bt,onRowEdit:gt,page:G,previewRef:ke,pageError:He,pageSize:d,rangeEnd:lt,rangeStart:ot,saveEdit:ut,selectedTable:m,selectTable:We,setEditorDocumentText:ct,setShardKey:b,shardKey:g,showJson:at,showTable:ze,stage:I.stage,stagedChanges:et,stagedValue:I.stagedValue,startCellEdit:Ie,table:Oe,tables:ce,tablesError:ue,toggleFacet:Ze,total:je,viewMode:v,writeError:K}},dr=se(W.describeTable),cr=se(W.readTablePage),ur=se(W.writeRow),mr=r=>{const e=r._id??r.id??r.__id__??"";return typeof e=="string"?e:typeof e=="number"?String(e):""},gr=r=>{const e=kt(),[t,n]=R(!1),[s,o]=R(void 0),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R({}),[b,m]=R(!1),[p,h]=R(void 0),v=async(w,f)=>{n(!0),o(w),l(f),d(void 0),g({}),h(void 0),m(!0);try{const x=await e.query(dr,{table:w},le(f)),{columns:N}=x;d(N);const _={},$=N.filter(y=>y.ref!==void 0&&y.type==="id"&&y.pk!==!0);for(const y of $){if(y.ref===void 0)continue;const{ref:S}=y;if(_[S]===void 0)try{const E=await e.query(cr,{filters:[],limit:Qn,offset:0,search:"",table:S},le(f));_[S]=E.rows.map(D=>mr(D)).filter(Boolean)}catch{_[S]=[]}}g(_)}catch(x){h(x.message)}finally{m(!1)}};return{closeDialog:()=>{n(!1),o(void 0),l(void 0),d(void 0),g({}),h(void 0)},columnMeta:i,error:p,fkPools:u,insertBatch:async(w,f)=>{if(s===void 0||a===void 0)return"No table selected.";try{for(const x of w)await e.query(ur,{doc:x,op:"insert",table:s},le(a));f(),r();return}catch(x){return x.message}},loading:b,open:t,openDialog:(w,f)=>{oe(v(w,f))},shardKey:a,table:s}},br=[],fr=()=>{const r=V(1);let e;r[0]===Symbol.for("react.memo_cache_sentinel")?(e={},r[0]=e):e=r[0];const{data:t}=Ke(W.maskPolicies,e);return Array.isArray(t?.columns)?t.columns:br},pr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,hr=(r,e)=>typeof e=="number"&&pr.test(r),xr=r=>{const e=V(26),{column:t,onNavigate:n,target:s,value:o}=r;let a;e[0]!==n||e[1]!==s||e[2]!==o?(a=()=>{s!==void 0&&n(s,String(o))},e[0]=n,e[1]=s,e[2]=o,e[3]=a):a=e[3];const l=a;if(o==null){let u;return e[4]===Symbol.for("react.memo_cache_sentinel")?(u=c("span",{className:"italic text-muted-foreground",children:"null"}),e[4]=u):u=e[4],u}if(s!==void 0&&(typeof o=="string"||typeof o=="number")&&String(o)!==""){const u=`rd-ref-${t}`,g=`Open ${s} ${String(o)}`,b=String(o);let m;return e[5]!==l||e[6]!==u||e[7]!==g||e[8]!==b?(m=k("button",{"data-testid":u,onClick:l,title:g,type:"button",children:[b," ↗"]}),e[5]=l,e[6]=u,e[7]=g,e[8]=b,e[9]=m):m=e[9],m}if(hr(t,o)){const u=`rd-ts-${t}`;let g;e[10]!==o?(g=o.toString(),e[10]=o,e[11]=g):g=e[11];let b;e[12]!==o?(b=Ht(o),e[12]=o,e[13]=b):b=e[13];let m;return e[14]!==u||e[15]!==g||e[16]!==b?(m=c("span",{"data-testid":u,title:g,children:b}),e[14]=u,e[15]=g,e[16]=b,e[17]=m):m=e[17],m}if(typeof o=="object"){let u;e[18]!==o?(u=JSON.stringify(o,null,2),e[18]=o,e[19]=u):u=e[19];let g;return e[20]!==u?(g=c("pre",{className:"m-0 overflow-auto rounded-md bg-muted/50 p-2 text-xs",children:u}),e[20]=u,e[21]=g):g=e[21],g}let i;e[22]!==o?(i=fe(o),e[22]=o,e[23]=i):i=e[23];let d;return e[24]!==i?(d=c("span",{children:i}),e[24]=i,e[25]=d):d=e[25],d},vr=r=>{const e=V(21),{columns:t,onClose:n,onNavigate:s,refs:o,row:a}=r;let l;e[0]!==n||e[1]!==s?(l=(p,h)=>{s(p,h),n()},e[0]=n,e[1]=s,e[2]=l):l=e[2];const i=l;let d;e[3]===Symbol.for("react.memo_cache_sentinel")?(d=c("h3",{className:"m-0 text-base text-foreground",children:"Row detail"}),e[3]=d):d=e[3];let u;e[4]!==n?(u=k("div",{className:"mb-3 flex items-center justify-between",children:[d,c("button",{"data-testid":"rd-close",onClick:n,type:"button",children:"Close"})]}),e[4]=n,e[5]=u):u=e[5];let g;if(e[6]!==t||e[7]!==i||e[8]!==o||e[9]!==a){let p;e[11]!==i||e[12]!==o||e[13]!==a?(p=h=>k("div",{className:"border-t border-border py-2 first:border-t-0","data-testid":`rd-field-${h}`,children:[c("dt",{className:"mb-0.5 text-xs font-semibold text-muted-foreground",children:h}),c("dd",{className:"m-0",children:c(xr,{column:h,onNavigate:i,target:o?.[h],value:a[h]})})]},h),e[11]=i,e[12]=o,e[13]=a,e[14]=p):p=e[14],g=t.map(p),e[6]=t,e[7]=i,e[8]=o,e[9]=a,e[10]=g}else g=e[10];let b;e[15]!==g?(b=c("dl",{"data-testid":"rd-fields",children:g}),e[15]=g,e[16]=b):b=e[16];let m;return e[17]!==n||e[18]!==u||e[19]!==b?(m=k(zt,{label:"Row detail",onClose:n,panelTestId:"rd-panel",testId:"rd-overlay",variant:"drawer",children:[u,b]}),e[17]=n,e[18]=u,e[19]=b,e[20]=m):m=e[20],m},qe="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent aria-pressed:bg-accent aria-pressed:text-accent-foreground disabled:pointer-events-none disabled:opacity-50",Ge="w-full rounded-md border border-border bg-background px-2 py-1 font-mono text-xs outline-none focus-visible:border-ring",yr=/(?:_creationtime|(?:^|[a-z])(?:time|at))$/iu,wr=(r,e)=>typeof e=="boolean"?"boolean":typeof e=="number"?yr.test(r)?"date":"number":e!==null&&typeof e=="object"?"json":"text",Nr=r=>{try{const e=JSON.parse(r);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}catch{return null}},Sr=r=>{const e=new Date(r),t=n=>String(n).padStart(2,"0");return`${e.getFullYear().toString()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`},Cr=r=>{const e=V(8),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=s===!0,i=`db-field-${t}`;let d;return e[3]!==t||e[4]!==a||e[5]!==l||e[6]!==i?(d=c($t,{"aria-label":t,checked:l,"data-testid":i,onCheckedChange:a}),e[3]=t,e[4]=a,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},kr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=Number(u.target.value);u.target.value!==""&&!Number.isNaN(g)&&n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="number"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"number",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},$r=r=>{const e=V(9),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{const g=new Date(u.target.value).getTime();Number.isNaN(g)||n(t,g)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`;let i;e[3]!==s?(i=typeof s=="number"?Sr(s):"",e[3]=s,e[4]=i):i=e[4];let d;return e[5]!==a||e[6]!==l||e[7]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"datetime-local",value:i}),e[5]=a,e[6]=l,e[7]=i,e[8]=d):d=e[8],d},Tr=r=>{const e=V(7),{column:t,onChange:n,value:s}=r;let o;e[0]!==t||e[1]!==n?(o=u=>{n(t,u.target.value)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const a=o,l=`db-field-${t}`,i=typeof s=="string"?s:"";let d;return e[3]!==a||e[4]!==l||e[5]!==i?(d=c("input",{className:Ge,"data-testid":l,onChange:a,type:"text",value:i}),e[3]=a,e[4]=l,e[5]=i,e[6]=d):d=e[6],d},_r=r=>{const e=V(19),{column:t,onChange:n,value:s}=r,o=X();let a;e[0]!==s?(a=()=>JSON.stringify(s,null,2),e[0]=s,e[1]=a):a=e[1];const[l,i]=R(a),[d,u]=R(!1);let g;e[2]!==t||e[3]!==n?(g=x=>{const N=x.target.value;i(N);try{n(t,JSON.parse(N)),u(!1)}catch{u(!0)}},e[2]=t,e[3]=n,e[4]=g):g=e[4];const b=g,m=d&&"border-destructive";let p;e[5]!==m?(p=Tt(Ge,"min-h-16",m),e[5]=m,e[6]=p):p=e[6];const h=`db-field-${t}`;let v;e[7]!==b||e[8]!==p||e[9]!==h||e[10]!==l?(v=c("textarea",{className:p,"data-testid":h,onChange:b,value:l}),e[7]=b,e[8]=p,e[9]=h,e[10]=l,e[11]=v):v=e[11];let w;e[12]!==t||e[13]!==d||e[14]!==o?(w=d&&c("span",{className:"text-xs text-destructive","data-testid":`db-field-error-${t}`,children:o("Invalid JSON")}),e[12]=t,e[13]=d,e[14]=o,e[15]=w):w=e[15];let f;return e[16]!==v||e[17]!==w?(f=k("div",{className:"flex flex-col gap-1",children:[v,w]}),e[16]=v,e[17]=w,e[18]=f):f=e[18],f},Er=r=>{const e=V(43),{column:t,onChange:n,target:s,value:o}=r;let a;e[0]!==t||e[1]!==o?(a=wr(t,o),e[0]=t,e[1]=o,e[2]=a):a=e[2];const l=a,i=`db-field-${t}`;let d;e[3]!==t?(d=c("span",{className:"font-mono",children:t}),e[3]=t,e[4]=d):d=e[4];let u;e[5]!==s?(u=s!==void 0&&k("span",{className:"rounded bg-muted px-1 font-mono text-[10px] tracking-wide uppercase",children:["→ ",s]}),e[5]=s,e[6]=u):u=e[6];let g;e[7]!==d||e[8]!==u?(g=k("span",{className:"flex items-center gap-1.5 font-medium text-muted-foreground",children:[d,u]}),e[7]=d,e[8]=u,e[9]=g):g=e[9];let b;e[10]!==t||e[11]!==l||e[12]!==n||e[13]!==o?(b=l==="boolean"&&c(Cr,{column:t,onChange:n,value:o}),e[10]=t,e[11]=l,e[12]=n,e[13]=o,e[14]=b):b=e[14];let m;e[15]!==t||e[16]!==l||e[17]!==n||e[18]!==o?(m=l==="number"&&c(kr,{column:t,onChange:n,value:o}),e[15]=t,e[16]=l,e[17]=n,e[18]=o,e[19]=m):m=e[19];let p;e[20]!==t||e[21]!==l||e[22]!==n||e[23]!==o?(p=l==="date"&&c($r,{column:t,onChange:n,value:o}),e[20]=t,e[21]=l,e[22]=n,e[23]=o,e[24]=p):p=e[24];let h;e[25]!==t||e[26]!==l||e[27]!==n||e[28]!==o?(h=l==="json"&&c(_r,{column:t,onChange:n,value:o}),e[25]=t,e[26]=l,e[27]=n,e[28]=o,e[29]=h):h=e[29];let v;e[30]!==t||e[31]!==l||e[32]!==n||e[33]!==o?(v=l==="text"&&c(Tr,{column:t,onChange:n,value:o}),e[30]=t,e[31]=l,e[32]=n,e[33]=o,e[34]=v):v=e[34];let w;return e[35]!==v||e[36]!==i||e[37]!==g||e[38]!==b||e[39]!==m||e[40]!==p||e[41]!==h?(w=k("label",{className:"flex flex-col gap-1 text-xs",htmlFor:i,children:[g,b,m,p,h,v]}),e[35]=v,e[36]=i,e[37]=g,e[38]=b,e[39]=m,e[40]=p,e[41]=h,e[42]=w):w=e[42],w},Rr=r=>{const e=V(48),{documentText:t,onCancel:n,onDocumentTextChange:s,onSave:o,refs:a}=r,l=X();let i;e[0]!==t?(i=Nr(t),e[0]=t,e[1]=i):i=e[1];const d=i,[u,g]=R(!1),b=!u&&d!==null;let m;e[2]!==d||e[3]!==s?(m=(I,P)=>{s(JSON.stringify({...d,[I]:P},null,2))},e[2]=d,e[3]=s,e[4]=m):m=e[4];const p=m;let h;e[5]!==s?(h=I=>{s(I.target.value)},e[5]=s,e[6]=h):h=e[6];const v=h;let w;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=()=>{g(!1)},e[7]=w):w=e[7];const f=w;let x;e[8]===Symbol.for("react.memo_cache_sentinel")?(x=()=>{g(!0)},e[8]=x):x=e[8];const N=x,_=d===null;let $;e[9]!==l?($=l("Form"),e[9]=l,e[10]=$):$=e[10];let y;e[11]!==b||e[12]!==_||e[13]!==$?(y=c("button",{"aria-pressed":b,className:qe,"data-testid":"db-editor-form",disabled:_,onClick:f,type:"button",children:$}),e[11]=b,e[12]=_,e[13]=$,e[14]=y):y=e[14];const S=!b;let E;e[15]!==l?(E=l("JSON"),e[15]=l,e[16]=E):E=e[16];let D;e[17]!==E||e[18]!==S?(D=c("button",{"aria-pressed":S,className:qe,"data-testid":"db-editor-json",onClick:N,type:"button",children:E}),e[17]=E,e[18]=S,e[19]=D):D=e[19];let L;e[20]!==D||e[21]!==y?(L=k("div",{className:"flex items-center gap-1.5",children:[y,D]}),e[20]=D,e[21]=y,e[22]=L):L=e[22];let q;e[23]!==t||e[24]!==d||e[25]!==p||e[26]!==v||e[27]!==a||e[28]!==b||e[29]!==l?(q=b?c("div",{className:"flex flex-col gap-3","data-testid":"db-editor-fields",children:Object.entries(d).map(I=>{const[P,A]=I;return c(Er,{column:P,onChange:p,target:a?.[P],value:A},P)})}):c("textarea",{"aria-label":l("Row document JSON"),className:"min-h-28 w-full rounded-md border border-border bg-background px-2 py-1.5 font-mono text-xs outline-none focus-visible:border-ring","data-testid":"db-editor-doc",onChange:v,value:t}),e[23]=t,e[24]=d,e[25]=p,e[26]=v,e[27]=a,e[28]=b,e[29]=l,e[30]=q):q=e[30];let z;e[31]!==l?(z=l("Save"),e[31]=l,e[32]=z):z=e[32];let B;e[33]!==o||e[34]!==z?(B=c("button",{className:qe,"data-testid":"db-editor-save",onClick:o,type:"button",children:z}),e[33]=o,e[34]=z,e[35]=B):B=e[35];let O;e[36]!==l?(O=l("Cancel"),e[36]=l,e[37]=O):O=e[37];let j;e[38]!==n||e[39]!==O?(j=c("button",{className:qe,"data-testid":"db-editor-cancel",onClick:n,type:"button",children:O}),e[38]=n,e[39]=O,e[40]=j):j=e[40];let K;e[41]!==B||e[42]!==j?(K=k("div",{className:"flex items-center gap-1.5",children:[B,j]}),e[41]=B,e[42]=j,e[43]=K):K=e[43];let T;return e[44]!==L||e[45]!==q||e[46]!==K?(T=k("div",{className:"flex flex-col gap-2 border border-border bg-card p-3","data-testid":"db-editor",children:[L,q,K]}),e[44]=L,e[45]=q,e[46]=K,e[47]=T):T=e[47],T},Dr=50,Ir=r=>{const e=V(8),{active:t,onPick:n,shard:s}=r;let o;e[0]!==n||e[1]!==s?(o=()=>{n(s)},e[0]=n,e[1]=s,e[2]=o):o=e[2];const a=o,l=`w-full rounded px-2 py-0.5 text-left text-xs transition-colors hover:bg-accent ${t?"bg-accent font-medium":""}`,i=`shard-explorer-item-${s}`;let d;return e[3]!==a||e[4]!==s||e[5]!==l||e[6]!==i?(d=c("button",{className:l,"data-testid":i,onClick:a,type:"button",children:s}),e[3]=a,e[4]=s,e[5]=l,e[6]=i,e[7]=d):d=e[7],d},Mr=({onFetchTables:r,onSelect:e})=>{const t=X(),[n]=R(()=>un()),[s,o]=R(!1),[a,l]=R(void 0),[i,d]=R(void 0),[u,g]=R(!1),[b,m]=R(void 0),p=U(0),h=()=>{o(f=>!f)},v=async f=>{e(f),l(f),d(void 0),m(void 0),g(!0),p.current+=1;const x=p.current;try{const N=await r(f);p.current===x&&d(N?.slice(0,Dr))}catch(N){p.current===x&&m(N.message)}finally{p.current===x&&g(!1)}},w=f=>{oe(v(f))};return n.length===0?null:k("div",{"data-testid":"shard-explorer",children:[k("button",{"aria-controls":"shard-explorer-panel","aria-expanded":s,className:"inline-flex items-center gap-1 rounded-md border border-border px-2 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent","data-testid":"shard-explorer-toggle",onClick:h,type:"button",children:[t("Shards seen"),c("span",{"aria-hidden":"true",className:`ml-0.5 transition-transform ${s?"rotate-180":""}`,children:"▾"})]}),s&&k("div",{className:"mt-1 flex flex-col gap-1 rounded-md border border-border bg-popover p-2","data-testid":"shard-explorer-panel",id:"shard-explorer-panel",children:[c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-hint",children:t("Recently visited shards — click to switch")}),c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-list",children:n.map(f=>c("li",{children:c(Ir,{active:a===f,onPick:w,shard:f})},f))}),a!==void 0&&k("div",{className:"mt-1 border-t border-border pt-1","data-testid":"shard-explorer-summary",children:[c("p",{className:"mb-1 text-xs font-medium text-foreground","data-testid":"shard-explorer-summary-title",children:t("{shard} tables",{shard:a})}),u&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-loading",children:t("Loading…")}),b!==void 0&&c("p",{className:"text-xs text-destructive","data-testid":"shard-explorer-error",role:"alert",children:b}),!u&&b===void 0&&i?.length===0&&c("p",{className:"text-xs text-muted-foreground","data-testid":"shard-explorer-empty",children:t("No tables in this shard.")}),!u&&b===void 0&&i!==void 0&&i.length>0&&c("ul",{className:"flex flex-col gap-0.5","data-testid":"shard-explorer-tables",children:i.map(f=>k("li",{className:"flex items-center justify-between text-xs",children:[c("span",{"data-testid":`shard-explorer-table-${f.name}`,children:f.name}),c("span",{className:"text-muted-foreground","data-testid":`shard-explorer-rowcount-${f.name}`,children:f.rowCount})]},f.name))})]})]})]})},Fr=50,Or=[],Se="inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1 text-xs font-medium text-foreground outline-none transition-colors hover:bg-accent focus-visible:bg-accent disabled:pointer-events-none disabled:opacity-50 aria-pressed:bg-accent aria-pressed:text-accent-foreground",jr=se(W.listTables),Pr=r=>{const e=V(10),{onFetchShardTables:t,onShardChange:n,schemaSwitch:s,shardKey:o}=r;let a;e[0]!==n||e[1]!==o?(a=c(Jt,{onChange:n,testId:"db-shard-input",value:o}),e[0]=n,e[1]=o,e[2]=a):a=e[2];let l;e[3]!==t||e[4]!==n?(l=c(Mr,{onFetchTables:t,onSelect:n}),e[3]=t,e[4]=n,e[5]=l):l=e[5];let i;return e[6]!==s||e[7]!==a||e[8]!==l?(i=k("div",{className:"flex shrink-0 flex-col items-stretch gap-2 border-b border-border p-3",children:[s,a,l]}),e[6]=s,e[7]=a,e[8]=l,e[9]=i):i=e[9],i},zr=r=>{const e=V(60),{columns:t,editable:n,filter:s,filters:o,hasMaskedColumns:a,liveError:l,maskOn:i,onAddRow:d,onBulkDelete:u,onClearTable:g,onFilterChange:b,onFiltersChange:m,onGenerateRows:p,onShowJson:h,onShowTable:v,onToggleMask:w,total:f,viewMode:x}=r,N=X(),_=x==="table";let $;e[0]!==v||e[1]!==_?($=c("button",{"aria-pressed":_,className:Se,"data-testid":"db-view-table",onClick:v,type:"button",children:"Table"}),e[0]=v,e[1]=_,e[2]=$):$=e[2];const y=x==="json";let S;e[3]!==h||e[4]!==y?(S=c("button",{"aria-pressed":y,className:Se,"data-testid":"db-view-json",onClick:h,type:"button",children:"JSON"}),e[3]=h,e[4]=y,e[5]=S):S=e[5];let E;e[6]!==l||e[7]!==N?(E=l===void 0?N("Live — changes stream in automatically"):N("Live unavailable: {liveError}",{liveError:l}),e[6]=l,e[7]=N,e[8]=E):E=e[8];const D=`size-1.5 rounded-full ${l===void 0?"bg-success":"bg-muted-foreground/50"}`;let L;e[9]!==D?(L=c("span",{"aria-hidden":"true",className:D}),e[9]=D,e[10]=L):L=e[10];let q;e[11]!==l||e[12]!==N?(q=N(l===void 0?"Live":"Live unavailable"),e[11]=l,e[12]=N,e[13]=q):q=e[13];let z;e[14]!==E||e[15]!==L||e[16]!==q?(z=k("span",{className:"inline-flex items-center gap-1.5 px-1 text-xs font-medium text-muted-foreground","data-testid":"db-live-indicator",role:"status",title:E,children:[L,q]}),e[14]=E,e[15]=L,e[16]=q,e[17]=z):z=e[17];let B;e[18]!==a||e[19]!==i||e[20]!==w||e[21]!==N?(B=a&&c("button",{"aria-pressed":i,className:Se,"data-testid":"db-mask-toggle",onClick:w,type:"button",children:N("Mask sensitive columns")}),e[18]=a,e[19]=i,e[20]=w,e[21]=N,e[22]=B):B=e[22];let O;e[23]!==n||e[24]!==d?(O=n&&c("button",{className:Se,"data-testid":"db-add-row",onClick:d,type:"button",children:"Add row"}),e[23]=n,e[24]=d,e[25]=O):O=e[25];let j;e[26]!==n||e[27]!==p||e[28]!==N?(j=n&&c("button",{className:Se,"data-testid":"db-generate-rows",onClick:p,type:"button",children:N("Generate rows")}),e[26]=n,e[27]=p,e[28]=N,e[29]=j):j=e[29];let K;e[30]!==n||e[31]!==s||e[32]!==o||e[33]!==u||e[34]!==f?(K=n&&f>0&&(s!==""||o.length>0)&&c(Nt,{confirmLabel:`Delete ${f.toString()} matching?`,onConfirm:u,testId:"db-bulk-delete",children:`Delete ${f.toString()} matching`}),e[30]=n,e[31]=s,e[32]=o,e[33]=u,e[34]=f,e[35]=K):K=e[35];let T;e[36]!==n||e[37]!==s||e[38]!==o||e[39]!==g||e[40]!==f?(T=n&&f>0&&s===""&&o.length===0&&c(Nt,{confirmLabel:`Clear all ${f.toString()} rows?`,onConfirm:g,testId:"db-clear-table",children:`Clear table (${f.toString()})`}),e[36]=n,e[37]=s,e[38]=o,e[39]=g,e[40]=f,e[41]=T):T=e[41];let I;e[42]!==B||e[43]!==O||e[44]!==j||e[45]!==K||e[46]!==T||e[47]!==$||e[48]!==S||e[49]!==z?(I=k("div",{className:"flex flex-wrap items-center gap-1.5",children:[$,S,z,B,O,j,K,T]}),e[42]=B,e[43]=O,e[44]=j,e[45]=K,e[46]=T,e[47]=$,e[48]=S,e[49]=z,e[50]=I):I=e[50];let P;e[51]!==t||e[52]!==s||e[53]!==o||e[54]!==b||e[55]!==m?(P=c(an,{columns:t,filters:o,onFiltersChange:m,onSearchChange:b,search:s}),e[51]=t,e[52]=s,e[53]=o,e[54]=b,e[55]=m,e[56]=P):P=e[56];let A;return e[57]!==I||e[58]!==P?(A=k("div",{className:"flex flex-col gap-2","data-testid":"db-view-toggle",children:[I,P]}),e[57]=I,e[58]=P,e[59]=A):A=e[59],A},io=({editable:r=!1,globalTableNames:e,initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onNavigateToGlobal:a,onSelectTable:l,onViewChange:i,pageSize:d=Fr,queryBar:u,schemaSwitch:g,tableParam:b})=>{const{addRow:m,bulkDelete:p,cancelCellEdit:h,cancelEdit:v,changePageSize:w,clearTable:f,columns:x,committing:N,currentView:_,discardStaged:$,editableColumn:y,editing:S,editingCell:E,facetFilter:D,facets:L,filter:q,filters:z,goNext:B,goPrevious:O,hasNext:j,hasPrevious:K,jumpToPage:T,liveError:I,loadTables:P,navigateToRef:A,onBulkDeleteSelected:ee,onCommitStaged:te,onFilterChange:Q,onFiltersChange:ce,onRowDelete:ue,onRowEdit:pe,page:J,pageError:Z,previewRef:G,pageSize:He,rangeEnd:Qe,rangeStart:Ue,saveEdit:We,selectedTable:Y,selectTable:ke,setEditorDocumentText:he,setShardKey:Ze,shardKey:$e,showJson:Te,showTable:_e,stage:xe,stagedChanges:me,stagedValue:Ee,startCellEdit:Re,table:ne,tables:De,tablesError:ge,toggleFacet:Ye,total:Ie,viewMode:ie,writeError:Me}=ir({initialFilters:t,initialOrderBy:n,initialSearch:s,initialShardKey:o,onSelectTable:l,onViewChange:i,pageSize:d,tableParam:b}),Xe=kt(),et=async M=>await Xe.query(jr,{},le(M)),Fe=()=>{Y!==null&&ke(Y)},{closeDialog:ve,columnMeta:Oe,fkPools:tt,insertBatch:je,open:nt,openDialog:rt}=gr(Fe),ot=()=>{Y!==null&&rt(Y,$e)},lt=M=>je(M,ve),[Pe,ze]=R(null),at=()=>{ze(null)},[ye,st]=R(!1),it=()=>{st(M=>!M)},dt=fr(),[Ae,ct]=R(!0),ut=()=>{ct(M=>!M)},mt=hn(dt,Y??""),Ve=vn(mt,x),we={columns:Ve,enabled:Ae},[Ne,Le]=R(null),gt=(M,H)=>{Le({column:M,value:H})},bt=()=>{Le(null)},Be=(M,H)=>{if(a!==void 0&&e?.has(M)===!0){a(M,H);return}A(M,H)},ft=u?.onSaveQuery,pt=M=>{ft?.(M,_)},C={cancelEdit:h,editable:r,editableColumn:y,editingCell:E,onExpandCell:gt,stage:xe,stagedValue:Ee,startEdit:Re},F={columns:J?.refs,onNavigate:Be,onPreview:G};return k("div",{className:"flex h-full min-w-0","data-testid":"lunora-data-browser",children:[c(rn,{header:c(Pr,{onFetchShardTables:et,onShardChange:Ze,schemaSwitch:g,shardKey:$e}),onReload:P,onSelect:ke,prefix:"db",selected:Y,tables:De??Or}),k("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[ge!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-tables-error",role:"alert",children:ge}),J===null&&Z===null&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c("p",{className:"text-sm text-muted-foreground",children:"Select a table to browse its rows."})}),Z!==null&&c("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"db-page-error",role:"alert",children:Z}),J!==null&&k("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"db-page",children:[k("div",{className:"flex shrink-0 flex-col gap-2 border-b border-border px-4 py-3",children:[c(zr,{columns:x,editable:r,filter:q,filters:z,hasMaskedColumns:Ve.size>0,liveError:I,maskOn:Ae,onAddRow:m,onBulkDelete:p,onClearTable:f,onFilterChange:Q,onFiltersChange:ce,onGenerateRows:ot,onShowJson:Te,onShowTable:_e,onToggleMask:ut,total:Ie,viewMode:ie}),u!==void 0&&c(Gn,{onApply:u.onApplyQuery,onCopyLink:u.onCopyLink,onDelete:u.onDeleteQuery,onSave:pt,saved:u.saved}),ie==="table"&&J.rows.length>0&&c(sn,{columns:J.columns,editable:r,name:Y??"export",onBulkDelete:ee,onToggleTranspose:it,rows:J.rows,table:ne.table,transposed:ye}),r&&S!==null&&c(Rr,{documentText:S.docText,onCancel:v,onDocumentTextChange:he,onSave:We,refs:J.refs}),r&&me.length>0&&c(Sn,{changes:me,committing:N,onCommit:te,onDiscard:$}),Me!==null&&c("p",{className:"text-sm text-destructive","data-testid":"db-write-error",role:"alert",children:Me})]}),ie==="table"&&J.rows.length===0&&c("div",{className:"flex flex-1 items-center justify-center p-6",children:c(Gt,{description:"Rows you insert into this table will show up here.",icon:c("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:c("path",{d:"M4 5h16v14H4V5Zm0 5h16M10 10v9M4 14.5h16"})}),testId:"db-empty-rows",title:"This table is empty."})}),ie==="table"&&J.rows.length>0&&ye&&c(tn,{columns:J.columns,rows:Dt(J.rows,we)}),ie==="table"&&J.rows.length>0&&!ye&&c(Bn,{edit:C,editable:r,mask:we,onDelete:ue,onEdit:pe,onInspect:ze,refs:F,scrollRef:ne.scrollRef,scrollToIndex:ne.scrollToIndex,table:ne.table,tableRows:ne.tableRows,tbodyStyle:ne.tbodyStyle,virtualRows:ne.virtualRows}),ie==="json"&&c("pre",{className:"min-h-0 flex-1 overflow-auto border-t border-border bg-muted/30 p-3 text-xs","data-testid":"db-json",children:JSON.stringify(Dt(J.rows,we),null,2)}),c("div",{className:"flex shrink-0 items-center border-t border-border px-4 py-2",children:c(on,{hasNext:j,hasPrevious:K,onJumpToPage:T,onNext:B,onPageSizeChange:w,onPrevious:O,pageSize:He,prefix:"db",rangeEnd:Qe,rangeStart:Ue,total:Ie})})]})]}),J!==null&&c(ln,{columns:x,facets:L,onFacetFilter:D,onToggleFacet:Ye}),Pe!==null&&J!==null&&c(vr,{columns:J.columns,onClose:at,onNavigate:Be,refs:J.refs,row:Pe}),Ne!==null&&c(dn,{column:Ne.column,onClose:bt,value:Ne.value}),nt&&Y!==null&&Oe!==void 0&&c(Xn,{columns:Oe,fkPools:tt,onClose:ve,onInsertRows:lt,table:Y})]})};export{io as DataBrowser};
@@ -0,0 +1 @@
1
+ import{c as j}from"react/compiler-runtime";import{jsx as c,jsxs as y}from"react/jsx-runtime";const A=[{label:"=",value:"eq"},{label:"≠",value:"ne"},{label:"<",value:"lt"},{label:"≤",value:"lte"},{label:">",value:"gt"},{label:"≥",value:"gte"},{label:"contains",value:"contains"}],D=r=>{const e=r.trim(),n=Number(e);return e!==""&&Number.isFinite(n)&&String(n)===e?n:r},z=r=>r.filter(e=>e.column!=="").map(e=>({column:e.column,operator:e.operator,value:e.operator==="contains"?e.value:D(e.value)})),B=r=>{const e=j(40),{columns:n,filters:t,onFiltersChange:a,onSearchChange:S,search:k}=r;let x;e[0]!==n[0]||e[1]!==t||e[2]!==a?(x=()=>{a([...t,{column:n[0]??"",operator:"eq",value:""}])},e[0]=n[0],e[1]=t,e[2]=a,e[3]=x):x=e[3];const q=x;let C;e[4]!==t||e[5]!==a?(C=l=>{const o=Number(l.currentTarget.dataset.index);a(t.filter((i,u)=>u!==o))},e[4]=t,e[5]=a,e[6]=C):C=e[6];const v=C;let N;e[7]!==t||e[8]!==a?(N=l=>{const o=Number(l.currentTarget.dataset.index),i=l.currentTarget.value;a(t.map((u,g)=>g===o?{...u,column:i}:u))},e[7]=t,e[8]=a,e[9]=N):N=e[9];const p=N;let F;e[10]!==t||e[11]!==a?(F=l=>{const o=Number(l.currentTarget.dataset.index),i=l.currentTarget.value;a(t.map((u,g)=>g===o?{...u,operator:i}:u))},e[10]=t,e[11]=a,e[12]=F):F=e[12];const f=F;let T;e[13]!==t||e[14]!==a?(T=l=>{const o=Number(l.currentTarget.dataset.index),i=l.currentTarget.value;a(t.map((u,g)=>g===o?{...u,value:i}:u))},e[13]=t,e[14]=a,e[15]=T):T=e[15];const h=T;let d;e[16]!==S||e[17]!==k?(d=c("input",{"aria-label":"Search rows","data-testid":"db-filter",onChange:S,placeholder:"search table…",value:k}),e[16]=S,e[17]=k,e[18]=d):d=e[18];let s;e[19]!==q?(s=c("button",{"data-testid":"db-add-filter",onClick:q,type:"button",children:"Add filter"}),e[19]=q,e[20]=s):s=e[20];let m;e[21]!==d||e[22]!==s?(m=y("div",{className:"flex flex-wrap items-center gap-1.5",children:[d,s]}),e[21]=d,e[22]=s,e[23]=m):m=e[23];let b;if(e[24]!==p||e[25]!==f||e[26]!==h||e[27]!==n||e[28]!==t||e[29]!==v){let l;e[31]!==p||e[32]!==f||e[33]!==h||e[34]!==n||e[35]!==v?(l=(o,i)=>y("div",{className:"flex flex-wrap items-center gap-1.5","data-testid":"db-filter-row",children:[c("select",{"aria-label":"Filter column","data-index":i,"data-testid":"db-filter-column",onChange:p,value:o.column,children:n.map(R)}),c("select",{"aria-label":"Filter operator","data-index":i,"data-testid":"db-filter-operator",onChange:f,value:o.operator,children:A.map(E)}),c("input",{"aria-label":"Filter value","data-index":i,"data-testid":"db-filter-value",onChange:h,placeholder:"value",value:o.value}),c("button",{"aria-label":"Remove filter","data-index":i,"data-testid":"db-filter-remove",onClick:v,type:"button",children:"✕"})]},i),e[31]=p,e[32]=f,e[33]=h,e[34]=n,e[35]=v,e[36]=l):l=e[36],b=t.map(l),e[24]=p,e[25]=f,e[26]=h,e[27]=n,e[28]=t,e[29]=v,e[30]=b}else b=e[30];let w;return e[37]!==m||e[38]!==b?(w=y("div",{className:"flex flex-col gap-1.5","data-testid":"db-filters",children:[m,b]}),e[37]=m,e[38]=b,e[39]=w):w=e[39],w};function R(r){return c("option",{value:r,children:r},r)}function E(r){return c("option",{value:r.value,children:r.label},r.value)}export{B as DataFilters,z as toFilterClauses};
@@ -0,0 +1 @@
1
+ import{Component as i}from"react";import{jsx as e,Fragment as d,jsxs as l}from"react/jsx-runtime";const c={border:"1px solid var(--destructive)",color:"var(--destructive)",padding:12},h={overflow:"auto",whiteSpace:"pre-wrap"};class g extends i{static getDerivedStateFromError(r){return{error:r}}state={error:null};componentDidCatch(r,t){console.error("[lunora-studio] panel error",r,t.componentStack)}reset=()=>{this.setState({error:null})};render(){const{children:r,fallbackTitle:t,label:o,retryLabel:n}=this.props,{error:a}=this.state;if(a===null)return e(d,{children:r});const s=t??(o===void 0?"Something went wrong":`${o} failed`);return l("div",{"data-testid":"dash-error-boundary",role:"alert",style:c,children:[e("strong",{children:s}),e("pre",{"data-testid":"dash-error-message",style:h,children:a.message}),e("button",{"data-testid":"dash-error-retry",onClick:this.reset,type:"button",children:n??"Try again"})]})}}export{g as ErrorBoundary};
@@ -0,0 +1 @@
1
+ import{useLunora as le}from"@lunora/react";import{useState as x,useRef as S,useCallback as ae,useEffect as D}from"react";import{E as ne}from"./empty-state-Cg7t_8qu.js";import{n as oe,d as se,m as E,p as ie,f as de,u as ce}from"./table-DdJBrClo.js";import{T as G}from"./use-admin-query-Di3fLE8H.js";import{useAutoRefresh as ue}from"./DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as me}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{C as fe}from"./cf-links-gbDy51nR.js";import{u as be,_ as pe,a as he,$ as ge}from"./table-list-sidebar-CMCcNALK.js";import{_ as xe,y as ve}from"./data-grid-BMBKzMEJ.js";import{jsxs as d,jsx as r}from"react/jsx-runtime";const Ne=50,we=[],ye=[],ke=(t,p)=>{const m=t._id;return typeof m=="string"||typeof m=="number"?String(m):`row-${p.toString()}`},M=t=>t==null?"∅":t===""?"(empty)":typeof t=="object"?JSON.stringify(t):String(t),Ee=({initialTable:t,onSelectTable:p,pageSize:m=Ne,schemaSwitch:O}={})=>{const v=le(),f=me(),[a,J]=x(t??null),[o,h]=x(0),[c,z]=x(m),[u,T]=x([]),s=S(u);s.current=u;const{clearFacets:F,facets:A,refetchFacets:U,toggleFacet:q}=be(),g=G(["lunora-global-tables"],()=>v.listGlobalTables()),b=g.data??null,C=g.error,N=G(["lunora-global-page",a??"",o,c,JSON.stringify(u)],()=>v.readGlobalTablePage({filters:u,limit:c,offset:o,table:a??""}),{enabled:a!==null,keepPreviousData:!1}),l=N.data??null,w=N.error,_=(e,n)=>i=>v.facetGlobalColumn({column:i,filters:n,table:e}),L=(e,n)=>{U(_(e,n))};ue(()=>{g.refetch(),a!==null&&(N.refetch(),L(a,s.current))},!0);const y=S(void 0),k=ae(e=>{J(e),y.current=e,T([]),s.current=[],F(),h(0),p?.(e)},[F,p]),B=e=>{q(e,a===null?null:_(a,s.current))},P=e=>{T(e),s.current=e,h(0),a!==null&&L(a,e)},I=(e,n)=>{P([...s.current.filter(i=>i.column!==e),{column:e,value:n}])},W=e=>{const n=Number(e.currentTarget.dataset.index);P(s.current.filter((i,te)=>te!==n))},R=S(k);D(()=>{R.current=k}),D(()=>{if(t===void 0||t===""||y.current===t)return;y.current=t;const e=t;queueMicrotask(()=>{R.current(e)})},[t]);const $=e=>{a!==null&&h(Math.max(0,e))},j=l?.total??0,Z=o>0,H=l!==null&&o+l.rows.length<j,K=l===null||l.rows.length===0?0:o+1,Q=l===null?0:o+l.rows.length,V=()=>{g.refetch()},X=()=>{$(o-c)},Y=()=>{$(o+c)},ee=e=>{$(Math.max(0,(e-1)*c))},re=e=>{z(e),h(0)};return d("div",{className:"flex h-full min-w-0","data-testid":"lunora-global-data-browser",children:[r(pe,{header:d("div",{className:"flex shrink-0 flex-col items-stretch gap-2 border-b border-border p-3",children:[O,r("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"gdb-cf-link",href:fe,rel:"noreferrer",target:"_blank",children:f("Open in Cloudflare")})]}),onReload:V,onSelect:k,prefix:"gdb",selected:a,tables:b??we}),d("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[C!==null&&r("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"gdb-tables-error",role:"alert",children:C}),b!==null&&b.length===0&&r("div",{className:"flex flex-1 items-center justify-center p-6",children:r(ne,{description:f("Tables marked .global() (D1-backed, region-replicated) will appear here."),icon:d("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[r("circle",{cx:"12",cy:"12",r:"9"}),r("path",{d:"M3 12h18M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18Z"})]}),testId:"gdb-empty",title:f("No global tables.")})}),w!==null&&r("p",{className:"shrink-0 border-b border-border px-4 py-2 text-sm text-destructive","data-testid":"gdb-page-error",role:"alert",children:w}),b!==null&&b.length>0&&l===null&&w===null&&r("div",{className:"flex flex-1 items-center justify-center p-6",children:r("p",{className:"text-sm text-muted-foreground",children:f("Select a table to browse its rows.")})}),l!==null&&d("div",{className:"flex min-h-0 flex-1 flex-col","data-testid":"gdb-page",children:[u.length>0&&r("div",{className:"flex shrink-0 flex-wrap items-center gap-1.5 border-b border-border px-4 py-2 text-xs","data-testid":"gdb-filters",children:u.map((e,n)=>d("span",{className:"inline-flex items-center gap-1 rounded border border-border bg-muted px-1.5 py-0.5","data-testid":"gdb-filter-chip",children:[r("span",{className:"font-medium text-foreground",children:e.column}),r("span",{className:"text-muted-foreground",children:"="}),r("span",{className:"font-mono text-foreground",children:M(e.value)}),r("button",{"aria-label":f("Remove filter"),className:"ml-0.5 text-muted-foreground hover:text-foreground","data-index":n,"data-testid":"gdb-filter-remove",onClick:W,type:"button",children:"✕"})]},`${e.column}:${M(e.value)}`))}),r(xe,{layout:"fill",children:r("div",{className:"min-h-0 flex-1 overflow-auto",children:d(oe,{"data-testid":"gdb-rows",children:[r(se,{children:r(E,{children:l.columns.map(e=>r(ie,{children:e},e))})}),r(de,{children:l.rows.map((e,n)=>r(E,{"data-testid":"gdb-row",children:l.columns.map(i=>r(ce,{className:"max-w-xs truncate font-mono text-xs",children:r(ve,{value:e[i]})},i))},ke(e,n)))})]})})}),r("div",{className:"flex shrink-0 items-center border-t border-border px-4 py-2",children:r(he,{hasNext:H,hasPrevious:Z,onJumpToPage:ee,onNext:Y,onPageSizeChange:re,onPrevious:X,pageSize:c,prefix:"gdb",rangeEnd:Q,rangeStart:K,total:j})})]})]}),r(ge,{columns:l?.columns??ye,facets:A,onFacetFilter:I,onToggleFacet:B})]})};export{Ee as GlobalDataBrowser};
@@ -0,0 +1 @@
1
+ import"react/compiler-runtime";import"@tanstack/react-router";import"react";import"./badge-BbuuAio7.js";import"./card-CIDGUN6K.js";import"./empty-state-Cg7t_8qu.js";import"./use-admin-query-Di3fLE8H.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./ADMIN_FUNCTIONS-BYNSbBVE.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{H as b}from"./home-panel-B-8BCffw.js";import"react/jsx-runtime";export{b as HomePanel};
@@ -0,0 +1 @@
1
+ import{c as g}from"react/compiler-runtime";import{useLunora as y}from"@lunora/react";import{E as f}from"./empty-state-Cg7t_8qu.js";import{n as h}from"./skeleton-C1wQ9M5t.js";import{u as k,U as x}from"./reference-view-KvhektwF.js";import{useT as P}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{jsxs as S,jsx as p}from"react/jsx-runtime";const v=t=>(t.params??[]).find(e=>e.name==="args")??(t.params??[])[0],w=t=>t["x-tags"]?.[0]?.name??(t.name.includes(":")?t.name.slice(0,t.name.indexOf(":")):""),I=t=>{const e=v(t)?.schema;return{argsSchema:e,description:t.description,functionPath:t.name,httpPath:"/_lunora/rpc",key:t.name,kind:t["x-lunora-function-kind"],method:"POST",operationId:t.name,requestSchema:e,responses:[{description:t.result?.name,schema:t.result?.schema,status:"200"}],summary:t.summary??t.name,tags:[w(t)],title:t.summary??t.name}},C=t=>{const e=t??{},d=(e.methods??[]).map(a=>I(a)),o=new Map;for(const a of d){const m=a.tags[0]??"",r=o.get(m)??[];r.push(a),o.set(m,r)}return{groups:[...o.entries()].map(([a,m])=>({name:a,operations:m.toSorted((r,c)=>r.operationId.localeCompare(c.operationId))})).toSorted((a,m)=>a.name.localeCompare(m.name)),operationByKey:new Map(d.map(a=>[a.key,a])),title:e.info?.title??"API reference",version:e.info?.version}},O=t=>t.methods===void 0||t.methods.length===0,R=t=>{const e=t;return O(e)?{kind:"empty"}:{kind:"ready",spec:e}},T=t=>{const e=g(23),{spec:d}=t,o=P(),a=y();let m;e[0]!==a?(m=()=>a.fetchOpenRpc(),e[0]=a,e[1]=m):m=e[1];const r=k(d,m,R);let c;e[2]!==r.kind||e[3]!==r.spec?(c=r.kind==="ready"?C(r.spec):void 0,e[2]=r.kind,e[3]=r.spec,e[4]=c):c=e[4];const l=c;if(r.kind==="loading"){let n;return e[5]===Symbol.for("react.memo_cache_sentinel")?(n=S("div",{className:"flex flex-col gap-4","data-testid":"openrpc-reference-loading",children:[p(h,{className:"h-8 w-48"}),p(h,{className:"h-64 w-full"})]}),e[5]=n):n=e[5],n}if(r.kind==="error"){let n;e[6]!==r.message||e[7]!==o?(n=o("Couldn't load the OpenRPC spec: {message}",{message:r.message}),e[6]=r.message,e[7]=o,e[8]=n):n=e[8];let s;e[9]!==o?(s=o("API reference unavailable"),e[9]=o,e[10]=s):s=e[10];let i;return e[11]!==n||e[12]!==s?(i=p(f,{description:n,testId:"openrpc-reference-error",title:s}),e[11]=n,e[12]=s,e[13]=i):i=e[13],i}if(r.kind==="empty"||l===void 0){let n;e[14]!==o?(n=o("Run `lunora codegen --api-spec openrpc` and wire `_generated/openrpc.json` to the worker to render the OpenRPC reference here."),e[14]=o,e[15]=n):n=e[15];let s;e[16]!==o?(s=o("No OpenRPC spec configured"),e[16]=o,e[17]=s):s=e[17];let i;return e[18]!==n||e[19]!==s?(i=p(f,{description:n,testId:"openrpc-reference-empty",title:s}),e[18]=n,e[19]=s,e[20]=i):i=e[20],i}let u;return e[21]!==l?(u=p(x,{model:l}),e[21]=l,e[22]=u):u=e[22],u};export{T as default};
@@ -0,0 +1 @@
1
+ const o="lunora-studio-root";export{o as default};
@@ -0,0 +1 @@
1
+ import{c as M}from"react/compiler-runtime";import{useLunora as R}from"@lunora/react";import{useState as E,useEffect as q}from"react";import{ConfirmButton as K}from"./ConfirmButton-CTL3f3kr.js";import{c as P,u as V}from"./card-CIDGUN6K.js";import{E as W}from"./empty-state-Cg7t_8qu.js";import{n as Z,d as z,m as L,p as m,f as D,u as h}from"./table-DdJBrClo.js";import{T as G}from"./use-admin-query-Di3fLE8H.js";import{useAutoRefresh as H}from"./DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{useT as O}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{f as Q,i as U,e as X}from"./internal-AtZ4bTal.js";import{jsx as t,jsxs as v}from"react/jsx-runtime";const Y=s=>Number.isFinite(s)?U(s,"—"):"—",T=s=>s.toSorted((e,u)=>e.scheduledFor-u.scheduledFor),he=s=>{const e=M(33);let u;e[0]!==s?(u=s===void 0?{}:s,e[0]=s,e[1]=u):u=e[1];const{cancelJob:F,loadJobs:a}=u,i=R(),r=O(),d=a===void 0;let x;e[2]===Symbol.for("react.memo_cache_sentinel")?(x=["lunora-scheduled-jobs"],e[2]=x):x=e[2];let j;e[3]!==i||e[4]!==a?(j=async()=>{const o=await(a??(()=>i.listScheduledJobs()))();return T(o)},e[3]=i,e[4]=a,e[5]=j):j=e[5];const l=G(x,j),[B,_]=E(void 0),[I,J]=E(void 0);let N,g;e[6]!==i||e[7]!==d?(N=()=>{if(d)return i.subscribeScheduledJobs(o=>{J(void 0),_(T(o))})},g=[d,i],e[6]=i,e[7]=d,e[8]=N,e[9]=g):(N=e[8],g=e[9]),q(N,g);let $;e[10]!==l?($=()=>{l.refetch()},e[10]=l,e[11]=$):$=e[11],H($,!d);let k;e:{if(F!==void 0){k=F;break e}let o;e[12]!==i||e[13]!==a?(o=a===void 0?C=>i.cancelScheduledJob(C):void 0,e[12]=i,e[13]=a,e[14]=o):o=e[14],k=o}const c=k,n=B??l.data,y=I??l.error;let S;e[15]!==c||e[16]!==l||e[17]!==d?(S=async o=>{if(c!==void 0){J(void 0);try{await c(o),d||l.refetch()}catch(C){J(X(C))}}},e[15]=c,e[16]=l,e[17]=d,e[18]=S):S=e[18];const A=S;let f;e[19]!==y?(f=y!==null&&t("p",{className:"text-sm text-destructive","data-testid":"sj-error",role:"alert",children:y}),e[19]=y,e[20]=f):f=e[20];let p;e[21]!==n?.length||e[22]!==r?(p=n?.length===0&&t(W,{description:r("Jobs queued with runAfter / runAt will appear here."),icon:v("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("circle",{cx:"12",cy:"12",r:"9"}),t("path",{d:"M12 7.5V12l4 2"})]}),testId:"sj-empty",title:r("No scheduled jobs.")}),e[21]=n?.length,e[22]=r,e[23]=p):p=e[23];let b;e[24]!==A||e[25]!==c||e[26]!==n||e[27]!==r?(b=n!==void 0&&n.length>0&&t(P,{className:"overflow-hidden py-0",children:t(V,{className:"px-0",children:v(Z,{"data-testid":"sj-table",children:[t(z,{children:v(L,{children:[t(m,{children:r("function")}),t(m,{children:r("scheduled for")}),t(m,{children:r("pool")}),t(m,{children:r("attempts")}),t(m,{children:r("shard")}),t(m,{children:r("id")}),c!==void 0&&t(m,{"aria-label":r("Actions")})]})}),t(D,{children:n.map(o=>v(L,{"data-testid":`sj-row-${o.id}`,children:[t(h,{className:"font-mono text-xs",children:o.functionPath}),t(h,{className:"text-muted-foreground tabular-nums",children:Y(o.scheduledFor)}),t(h,{className:"font-mono text-xs",children:o.pool??""}),t(h,{className:"tabular-nums",children:o.attempts??0}),t(h,{children:o.shardKey??""}),t(h,{className:"font-mono text-xs",children:o.id}),c!==void 0&&t(h,{className:"text-right",children:t(K,{confirmLabel:r("Cancel job?"),onConfirm:()=>{Q(A(o.id))},testId:`sj-cancel-${o.id}`,children:r("Cancel")})})]},o.id))})]})})}),e[24]=A,e[25]=c,e[26]=n,e[27]=r,e[28]=b):b=e[28];let w;return e[29]!==p||e[30]!==b||e[31]!==f?(w=v("div",{className:"flex flex-col gap-3","data-testid":"lunora-scheduled-jobs",children:[f,p,b]}),e[29]=p,e[30]=b,e[31]=f,e[32]=w):w=e[32],w};export{he as ScheduledJobs};
@@ -0,0 +1 @@
1
+ import{c as $}from"react/compiler-runtime";import{useId as x,useState as I}from"react";import{useT as b}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{l as j}from"./shard-history-DMEW5VBE.js";import{u as k}from"./input-JHu63lTv.js";import{jsx as v,jsxs as y,Fragment as C}from"react/jsx-runtime";const A=i=>{const t=$(21),{id:c,onChange:h,testId:e,value:p}=i,a=b(),d=x(),[s]=I(F);let m;t[0]!==h?(m=S=>{h(S.target.value)},t[0]=h,t[1]=m):m=t[1];const f=m;let r;t[2]!==a?(r=a("Shard key"),t[2]=a,t[3]=r):r=t[3];const g=s.length>0?d:void 0;let o;t[4]!==a?(o=a("shard key (optional)"),t[4]=a,t[5]=o):o=t[5];let n;t[6]!==c||t[7]!==f||t[8]!==r||t[9]!==g||t[10]!==o||t[11]!==e||t[12]!==p?(n=v(k,{"aria-label":r,className:"h-8 w-48","data-testid":e,id:c,list:g,onChange:f,placeholder:o,value:p}),t[6]=c,t[7]=f,t[8]=r,t[9]=g,t[10]=o,t[11]=e,t[12]=p,t[13]=n):n=t[13];let l;t[14]!==d||t[15]!==s||t[16]!==e?(l=s.length>0&&v("datalist",{"data-testid":`${e}-recents`,id:d,children:s.map(w)}),t[14]=d,t[15]=s,t[16]=e,t[17]=l):l=t[17];let u;return t[18]!==n||t[19]!==l?(u=y(C,{children:[n,l]}),t[18]=n,t[19]=l,t[20]=u):u=t[20],u};function F(){return j()}function w(i){return v("option",{"aria-label":i,value:i},i)}export{A as ShardInput};
@@ -0,0 +1 @@
1
+ import"react/compiler-runtime";import"@tanstack/react-router";import"react";import{S as h}from"./studio-BHA7hnI3.js";import"./ErrorBoundary-DvzYskH7.js";import"./badge-BbuuAio7.js";import"./input-JHu63lTv.js";import"./skeleton-C1wQ9M5t.js";import"./home-panel-B-8BCffw.js";import"./DEFAULT_LOCALE-BZ4NojpD.js";import"./StudioI18nProvider-CZ5h4nrV.js";import"./data-view-params-C8T3bW1z.js";import"./internal-AtZ4bTal.js";import"./utils-bhneXptQ.js";import"./CommandPalette-CVIaY3j8.js";import"react/jsx-runtime";export{h as Studio};
@@ -0,0 +1 @@
1
+ import{c as _}from"react/compiler-runtime";import{LunoraClient as B}from"@lunora/client";import{LunoraProvider as W}from"@lunora/react";import{useState as j,useEffect as L}from"react";import{ErrorBoundary as z}from"./ErrorBoundary-DvzYskH7.js";import{b as K,f as Y,a as Z,m as q,S as G}from"./studio-BHA7hnI3.js";import H from"./useDebounced-Ihdiid_k.js";import{useT as R,createStudioI18n as J}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{StudioI18nProvider as U}from"./StudioI18nProvider-CZ5h4nrV.js";import{r as Q}from"./internal-AtZ4bTal.js";import D from"./STUDIO_ROOT_CLASS-C6MccdVk.js";import{a as M}from"./browser-storage-xjTyMKY0.js";import{c as F}from"./utils-bhneXptQ.js";import{u as V}from"./button-BkCrNcAs.js";import{u as X}from"./input-JHu63lTv.js";import{jsx as b,jsxs as P}from"react/jsx-runtime";const C="lunora-studio-admin-token",ee=()=>{try{return M("session")?.getItem(C)??""}catch{return""}},te=k=>{const e=M("session");if(e!==void 0)try{k===""?e.removeItem(C):e.setItem(C,k)}catch{}},oe="/_lunora/admin/ws-token",ne=k=>{const e=k;return typeof e?.token=="string"&&e.token.length>0&&typeof e.expiresAtMs=="number"},re=k=>{const{adminToken:e,baseUrl:c}=k,o=k.fetchImpl??fetch;let n=c;for(;n.endsWith("/");)n=n.slice(0,-1);const s=`${n}${oe}`;let t,r=!1,l;const m=async()=>{const f=await o(s,{headers:{authorization:`Bearer ${e}`},method:"POST"});if(f.status===404||f.status===405)return r=!0,e;if(!f.ok)throw new Error(`ws-token mint failed: ${String(f.status)}`);const a=await f.json().catch(()=>{});if(!ne(a))throw new Error("ws-token mint failed: malformed response body");return t=a,a.token};return{getToken:async()=>r?e:t!==void 0&&t.expiresAtMs-1e4>Date.now()?t.token:(l??=m().finally(()=>{l=void 0}),l),invalidate:()=>{t=void 0}}},le=k=>{const e=_(42),{onSubmit:c}=k,o=R(),[n,s]=j("");let t;e[0]!==n?(t=n.trim(),e[0]=n,e[1]=t):t=e[1];const r=t;let l;e[2]!==c||e[3]!==r?(l=y=>{y.preventDefault(),r!==""&&c(r)},e[2]=c,e[3]=r,e[4]=l):l=e[4];const m=l;let f;e[5]===Symbol.for("react.memo_cache_sentinel")?(f=b("div",{className:"h-10 w-10 text-foreground",children:b(Y,{})}),e[5]=f):f=e[5];let a;e[6]!==o?(a=o("Connect to Lunora Studio"),e[6]=o,e[7]=a):a=e[7];let v;e[8]!==a?(v=b("h1",{className:"text-base font-semibold text-foreground",children:a}),e[8]=a,e[9]=v):v=e[9];let g;e[10]!==o?(g=o("Enter your admin token to access the studio."),e[10]=o,e[11]=g):g=e[11];let u;e[12]!==g?(u=b("p",{className:"text-[13px] text-muted-foreground",children:g}),e[12]=g,e[13]=u):u=e[13];let d;e[14]!==v||e[15]!==u?(d=P("div",{className:"flex flex-col items-center gap-3 text-center",children:[f,P("div",{className:"flex flex-col gap-1",children:[v,u]})]}),e[14]=v,e[15]=u,e[16]=d):d=e[16];let h;e[17]!==o?(h=o("admin token"),e[17]=o,e[18]=h):h=e[18];let i;e[19]!==h?(i=b("label",{className:"text-xs font-medium text-foreground",htmlFor:"lunora-studio-login-token",children:h}),e[19]=h,e[20]=i):i=e[20];let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=y=>{s(y.target.value)},e[21]=p):p=e[21];let x;e[22]!==n?(x=b(X,{autoComplete:"off",autoFocus:!0,"data-testid":"lunora-studio-login-token",id:"lunora-studio-login-token",onChange:p,placeholder:"LUNORA_ADMIN_TOKEN",type:"password",value:n}),e[22]=n,e[23]=x):x=e[23];let S;e[24]!==o?(S=o("From your worker's LUNORA_ADMIN_TOKEN — your project's .dev.vars in dev, or a deployment secret in production."),e[24]=o,e[25]=S):S=e[25];let I;e[26]!==S?(I=b("p",{className:"text-[11px] text-muted-foreground",children:S}),e[26]=S,e[27]=I):I=e[27];let T;e[28]!==i||e[29]!==x||e[30]!==I?(T=P("div",{className:"flex flex-col gap-1.5",children:[i,x,I]}),e[28]=i,e[29]=x,e[30]=I,e[31]=T):T=e[31];const A=r==="";let w;e[32]!==o?(w=o("Connect"),e[32]=o,e[33]=w):w=e[33];let N;e[34]!==A||e[35]!==w?(N=b(V,{"data-testid":"lunora-studio-login-submit",disabled:A,type:"submit",children:w}),e[34]=A,e[35]=w,e[36]=N):N=e[36];let $;return e[37]!==m||e[38]!==T||e[39]!==N||e[40]!==d?($=P("form",{className:"flex w-full max-w-sm flex-col gap-5 rounded-xl border border-border bg-card p-7 shadow-lg","data-testid":"lunora-studio-login",onSubmit:m,children:[d,T,N]}),e[37]=m,e[38]=T,e[39]=N,e[40]=d,e[41]=$):$=e[41],$},ae=k=>{const e=_(10),{i18n:c,onSubmit:o}=k,{resolvedTheme:n}=K(),s=n==="dark"&&"dark";let t;e[0]!==s?(t=F(D,s,"flex h-dvh items-center justify-center bg-sidebar p-6 text-sm text-foreground"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==o?(r=b(le,{onSubmit:o}),e[2]=o,e[3]=r):r=e[3];let l;e[4]!==c||e[5]!==r?(l=b(U,{i18n:c,children:r}),e[4]=c,e[5]=r,e[6]=l):l=e[6];let m;return e[7]!==t||e[8]!==l?(m=b("div",{className:t,"data-testid":"lunora-studio-login-root",children:l}),e[7]=t,e[8]=l,e[9]=m):m=e[9],m},se=k=>{const e=_(23),{basePath:c,chrome:o,studio:n}=k,s=R();let t;e[0]!==s?(t=s("Studio failed"),e[0]=s,e[1]=t):t=e[1];let r;e[2]!==s?(r=s("Studio"),e[2]=s,e[3]=r):r=e[3];let l;e[4]!==s?(l=s("Try again"),e[4]=s,e[5]=l):l=e[5];const m=n?.dataEditable,f=n?.functions,a=n?.initialShardKey,v=n?.openApiSpec,g=n?.openRpcSpec,u=n?.runAsIdentity,d=n?.scheduledCancel,h=n?.scheduledLoad,i=n?.schemaEditable;let p;e[6]!==c||e[7]!==o||e[8]!==d||e[9]!==h||e[10]!==i||e[11]!==m||e[12]!==f||e[13]!==a||e[14]!==v||e[15]!==g||e[16]!==u?(p=b(G,{basePath:c,chrome:o,dataEditable:m,functions:f,initialShardKey:a,openApiSpec:v,openRpcSpec:g,runAsIdentity:u,scheduledCancel:d,scheduledLoad:h,schemaEditable:i}),e[6]=c,e[7]=o,e[8]=d,e[9]=h,e[10]=i,e[11]=m,e[12]=f,e[13]=a,e[14]=v,e[15]=g,e[16]=u,e[17]=p):p=e[17];let x;return e[18]!==t||e[19]!==p||e[20]!==r||e[21]!==l?(x=b(z,{fallbackTitle:t,label:r,retryLabel:l,children:p}),e[18]=t,e[19]=p,e[20]=r,e[21]=l,e[22]=x):x=e[22],x},ie=k=>{const e=_(20),{basePath:c,clearToken:o,client:n,i18n:s,onTokenChange:t,rulesInstalled:r,studio:l,token:m}=k,{resolvedTheme:f}=K();let a;e[0]!==o||e[1]!==t||e[2]!==r||e[3]!==m?(a={clearToken:o,onTokenChange:t,rulesInstalled:r,token:m},e[0]=o,e[1]=t,e[2]=r,e[3]=m,e[4]=a):a=e[4];const v=a,g=f==="dark"&&"dark";let u;e[5]!==g?(u=F(D,g,"flex h-dvh flex-col overflow-hidden bg-sidebar text-sm text-foreground"),e[5]=g,e[6]=u):u=e[6];let d;e[7]!==c||e[8]!==v||e[9]!==l?(d=b(q,{children:b(se,{basePath:c,chrome:v,studio:l})}),e[7]=c,e[8]=v,e[9]=l,e[10]=d):d=e[10];let h;e[11]!==s||e[12]!==d?(h=b(U,{i18n:s,children:d}),e[11]=s,e[12]=d,e[13]=h):h=e[13];let i;e[14]!==n||e[15]!==h?(i=b(W,{client:n,children:h}),e[14]=n,e[15]=h,e[16]=i):i=e[16];let p;return e[17]!==u||e[18]!==i?(p=b("div",{className:u,"data-testid":"lunora-studio-app",children:i}),e[17]=u,e[18]=i,e[19]=p):p=e[19],p},Ne=k=>{const e=_(25);let c;e[0]!==k?(c=k===void 0?{}:k,e[0]=k,e[1]=c):c=e[1];const{adminToken:o,basePath:n,baseUrl:s,client:t,rulesInstalled:r,studio:l,locale:m}=c;let f;e[2]!==o?(f=()=>o??ee(),e[2]=o,e[3]=f):f=e[3];const[a,v]=j(f);let g,u;e[4]!==a?(g=()=>{te(a)},u=[a],e[4]=a,e[5]=g,e[6]=u):(g=e[5],u=e[6]),L(g,u);const d=H(a,300);let h;e:{if(t!==void 0){h=t;break e}let y;if(e[7]!==s||e[8]!==d){const O=Q(s),E=d===""?void 0:re({adminToken:d,baseUrl:O});y=new B({url:O,...E===void 0?{}:{wsToken:E.getToken}}),E!==void 0&&(y.setAuthToken(d),y.onTokenExpired(E.invalidate)),e[7]=s,e[8]=d,e[9]=y}else y=e[9];h=y}const i=h;let p,x;e[10]!==i||e[11]!==t?(p=()=>()=>{t===void 0&&i.close()},x=[i,t],e[10]=i,e[11]=t,e[12]=p,e[13]=x):(p=e[12],x=e[13]),L(p,x);let S;e[14]===Symbol.for("react.memo_cache_sentinel")?(S=y=>{v(y.target.value)},e[14]=S):S=e[14];const I=S;let T;e[15]===Symbol.for("react.memo_cache_sentinel")?(T=()=>{v("")},e[15]=T):T=e[15];const A=T;let w;e[16]!==m?(w=J(m),e[16]=m,e[17]=w):w=e[17];const N=w;let $;return e[18]!==n||e[19]!==i||e[20]!==N||e[21]!==r||e[22]!==l||e[23]!==a?($=b(Z,{children:a===""?b(ae,{i18n:N,onSubmit:v}):b(ie,{basePath:n,clearToken:A,client:i,i18n:N,onTokenChange:I,rulesInstalled:r,studio:l,token:a})}),e[18]=n,e[19]=i,e[20]=N,e[21]=r,e[22]=l,e[23]=a,e[24]=$):$=e[24],$};export{Ne as StudioApp};
@@ -0,0 +1 @@
1
+ import{c as a}from"react/compiler-runtime";import{StudioI18nContext as l,studioI18n as m,createStudioI18n as u}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{jsx as v}from"react/jsx-runtime";const p=(i,o,t)=>i!==void 0?i:o===void 0&&t===void 0?m:u(o,t),S=i=>{const o=a(7),{catalogs:t,children:n,i18n:s,locale:d}=i;let r;o[0]!==t||o[1]!==s||o[2]!==d?(r=p(s,d,t),o[0]=t,o[1]=s,o[2]=d,o[3]=r):r=o[3];const c=r;let e;return o[4]!==n||o[5]!==c?(e=v(l,{value:c,children:n}),o[4]=n,o[5]=c,o[6]=e):e=o[6],e};export{S as StudioI18nProvider};
@@ -0,0 +1 @@
1
+ import{useState as b,useMemo as N}from"react";import{E as v}from"./error-alert-B59DnrDI.js";import{c as w,u as y}from"./card-CIDGUN6K.js";import{n as $,d as k,m as c,p as m,f as I,u as l}from"./table-DdJBrClo.js";import{useT as E}from"./DEFAULT_LOCALE-BZ4NojpD.js";import{c as A}from"./utils-bhneXptQ.js";import{jsxs as o,jsx as t}from"react/jsx-runtime";const R={ERROR:"error",INFO:"info",WARN:"warning"},q=e=>{const n=typeof e.metadata.table=="string"?e.metadata.table:void 0;return{description:`${e.detail} ${e.remediation}`,entity:n,issueType:e.title,key:e.cacheKey,level:R[e.level]}},T=["error","warning","info"],O={error:"bg-destructive",info:"bg-info",warning:"bg-warning"},S=(e,n)=>({error:e("Errors"),info:e("Info"),warning:e("Warnings")})[n],j=(e,n,s)=>({error:e("{count} errors",{count:s}),info:e("{count} suggestions",{count:s}),warning:e("{count} warnings",{count:s})})[n],C=(e,n)=>({error:e("No errors detected"),info:e("No suggestions"),warning:e("No warnings detected")})[n],B=({error:e=null,errorSource:n,rows:s,testId:a,toolbar:f})=>{const i=E(),[d,p]=b("error"),g=N(()=>{const r={error:0,info:0,warning:0};for(const x of s??[])r[x.level]+=1;return r},[s]),u=(s??[]).filter(r=>r.level===d),h=r=>{p(r.currentTarget.dataset.level)};return o("div",{className:"flex flex-col gap-3","data-testid":a,children:[t("div",{className:"flex border-b border-border",role:"tablist",children:T.map(r=>o("button",{"aria-selected":d===r,className:"flex min-w-32 flex-col gap-0.5 border-b-2 border-transparent px-4 py-2 text-start outline-none transition-colors hover:bg-muted/40 focus-visible:bg-muted/40 aria-selected:border-foreground","data-level":r,"data-testid":`${a}-tab-${r}`,onClick:h,role:"tab",type:"button",children:[o("span",{className:"flex items-center gap-2 text-sm font-medium text-foreground",children:[t("span",{"aria-hidden":"true",className:A("size-2 rounded-sm",O[r])}),S(i,r)]}),t("span",{className:"ps-4 text-xs text-muted-foreground",children:j(i,r,g[r])})]},r))}),f!==void 0&&t("div",{className:"flex flex-wrap items-center gap-2",children:f}),e!==null&&t(v,{error:n??e,testId:`${a}-error`}),t(w,{className:"overflow-hidden py-0",children:t(y,{className:"px-0",children:o($,{children:[t(k,{children:o(c,{children:[t(m,{children:i("Issue type")}),t(m,{children:i("Entity/item")}),t(m,{children:i("Description")})]})}),t(I,{children:u.length===0?t(c,{children:o(l,{className:"h-40 text-center align-middle text-muted-foreground",colSpan:3,"data-testid":`${a}-empty`,children:[t("span",{className:"block text-sm font-medium text-foreground",children:C(i,d)}),t("span",{className:"block text-sm",children:i("Nothing to report for this deployment.")})]})}):u.map(r=>o(c,{children:[t(l,{className:"font-medium text-foreground",children:r.issueType}),t(l,{className:"font-mono text-xs text-muted-foreground",children:r.entity??"—"}),o(l,{className:"text-muted-foreground",children:[t("span",{children:r.description}),r.action!==void 0&&t("span",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:r.action})]})]},r.key))})]})})})]})};export{B as A,q as O};
@@ -0,0 +1 @@
1
+ const u=e=>{let t=0,a=0,r=0,n=0,o=0,l=0,c=0;for(const{metrics:s}of e){if(s===null){o+=1;continue}n+=1,t+=s.requests,a+=s.errors,r+=s.databaseSize??0,s.cache!==null&&(l+=s.cache.hits,c+=s.cache.hits+s.cache.misses)}return{failed:o,hitRate:c===0?null:l/c,reachable:n,totalDatabaseSize:r,totalErrors:a,totalRequests:t}},h=(e,t)=>{const a=new Set,r=[];for(const n of["",e.trim(),...t])a.has(n)||(a.add(n),r.push(n));return r},i=(e,t)=>{if(e.length===0)return 0;if(e.sort((r,n)=>r-n),t<=0)return e[0]??0;if(t>=100)return e.at(-1)??0;const a=Math.ceil(t/100*e.length)-1;return e[a]??0},f=e=>{const t=e.functions;if(!t||t.length===0)return{p90:0,p95:0};const a=1e3,r=[];for(const n of t){if(n.calls<=0)continue;const o=n.totalDurationMs/n.calls,l=Math.min(n.calls,a);for(let c=0;c<l;c+=1)r.push(o)}return r.length===0?{p90:0,p95:0}:{p90:i([...r],90),p95:i([...r],95)}},p=(e,t,a="neutral")=>{const r=t-e,n=e===0?null:r/e*100;return{delta:r,direction:a,pct:n}},g=e=>e.map(t=>({...t,avgDurationMs:t.execCount>0?t.totalDurationMs/t.execCount:0}));export{u as aggregateMetrics,p as computeDelta,f as computeLatencyPercentiles,g as enrichQueryStats,i as percentile,h as shardsToAggregate};
@@ -0,0 +1 @@
1
+ import{c}from"react/compiler-runtime";import{cva as l}from"class-variance-authority";import{c as v}from"./utils-bhneXptQ.js";import{jsx as b,jsxs as u}from"react/jsx-runtime";const x=l("flex items-start gap-2 rounded-md border px-3 py-2 text-sm [&>svg]:mt-0.5 [&>svg]:size-4 [&>svg]:shrink-0",{defaultVariants:{variant:"default"},variants:{variant:{default:"border-border bg-muted/40 text-foreground",destructive:"border-destructive/40 bg-destructive/5 text-destructive",warning:"border-amber-500/40 bg-amber-500/5 text-amber-700 dark:text-amber-400"}}}),N=m=>{const t=c(10),{children:s,className:d,icon:i,testId:o,variant:n}=m;let e;t[0]!==d||t[1]!==n?(e=v(x({variant:n}),d),t[0]=d,t[1]=n,t[2]=e):e=t[2];let r;t[3]!==s?(r=b("div",{className:"min-w-0 flex-1",children:s}),t[3]=s,t[4]=r):r=t[4];let a;return t[5]!==i||t[6]!==e||t[7]!==r||t[8]!==o?(a=u("div",{className:e,"data-testid":o,role:"alert",children:[i,r]}),t[5]=i,t[6]=e,t[7]=r,t[8]=o,t[9]=a):a=t[9],a};export{N as A};
@@ -0,0 +1,254 @@
1
+ import { CronJobInfo, ScheduleRecord, LunoraClient } from '@lunora/client';
2
+ import { ReactElement } from 'react';
3
+ import { I18n } from '@lingui/core';
4
+ interface CronTriggersPanelProps {
5
+ /**
6
+ * Load the code-defined cron triggers. Defaults to `client.getCronJobs`,
7
+ * which hits the worker's admin-gated `/_lunora/admin/cron-jobs` endpoint —
8
+ * so the panel works out of the box under `&lt;LunoraProvider>`, provided the
9
+ * worker is built with a `cronJobs` map and `adminToken`. Override it to
10
+ * source triggers from elsewhere (e.g. tests).
11
+ */
12
+ readonly loadCronJobs?: () => Promise<CronJobInfo[]>;
13
+ /**
14
+ * Manually fire one cron job by name. Defaults to `client.runCronJob`, which
15
+ * hits the admin-gated `POST /_lunora/admin/cron-jobs/run` endpoint (the same
16
+ * dispatch the scheduled trigger runs). When a custom {@link CronTriggersPanelProps.loadCronJobs}
17
+ * is supplied without a `runCronJob`, the "Run now" control is hidden — useful
18
+ * for a read-only view.
19
+ */
20
+ readonly runCronJob?: (name: string) => Promise<{
21
+ name: string;
22
+ ran: boolean;
23
+ }>;
24
+ }
25
+ interface ScheduledJobsProps {
26
+ /**
27
+ * Cancel a pending job by id. Defaults to `client.cancelScheduledJob` when
28
+ * {@link ScheduledJobsProps.loadJobs} is also left to the client. When a
29
+ * custom `loadJobs` is supplied without a `cancelJob`, the cancel control is
30
+ * hidden — useful for a read-only view.
31
+ */
32
+ readonly cancelJob?: (id: string) => Promise<{
33
+ cancelled: boolean;
34
+ }>;
35
+ /**
36
+ * Load the pending scheduled jobs. Defaults to `client.listScheduledJobs`,
37
+ * which hits the worker's admin-gated `/_lunora/admin/scheduled` endpoint —
38
+ * so the panel works out of the box under `&lt;LunoraProvider>`, provided the
39
+ * worker is built with a `schedulerDO` namespace and `adminToken`. Override
40
+ * it to source jobs from elsewhere.
41
+ */
42
+ readonly loadJobs?: () => Promise<ScheduleRecord[]>;
43
+ }
44
+ /**
45
+ * View — and cancel — the functions queued via `runAfter` / `runAt` on the
46
+ * scheduler. Cron *triggers* are static wrangler config and don't appear here;
47
+ * this lists the dynamic, in-flight schedule only.
48
+ *
49
+ * Works out of the box under `&lt;LunoraProvider>` via the client's scheduler
50
+ * admin methods; pass {@link ScheduledJobsProps.loadJobs} /
51
+ * {@link ScheduledJobsProps.cancelJob} to override the transport.
52
+ */
53
+ declare const ScheduledJobs: ({ cancelJob, loadJobs }?: ScheduledJobsProps) => ReactElement;
54
+ interface SchedulePanelProps {
55
+ /** Override how the Cron triggers sub-view loads triggers; see {@link CronTriggersPanel}. */
56
+ readonly loadCronJobs?: CronTriggersPanelProps["loadCronJobs"];
57
+ /** Override how the Scheduled jobs sub-view cancels a job; see {@link ScheduledJobs}. */
58
+ readonly scheduledCancel?: ScheduledJobsProps["cancelJob"];
59
+ /** Override how the Scheduled jobs sub-view loads jobs; see {@link ScheduledJobs}. */
60
+ readonly scheduledLoad?: ScheduledJobsProps["loadJobs"];
61
+ }
62
+ /** Which client method a {@link FunctionDescriptor} is invoked through. */
63
+ type FunctionKind = "action" | "mutation" | "query";
64
+ /**
65
+ * One argument of a registered function, derived from its `v.*` validator by the
66
+ * worker's `/_lunora/admin/functions` endpoint. A compact signature shape.
67
+ */
68
+ interface FunctionArgumentDescriptor {
69
+ /** Element validator kind for an `array` arg (one level), e.g. `string`. */
70
+ element?: string;
71
+ /** The (optional-unwrapped) validator kind, e.g. `string`, `id`, `object`. */
72
+ kind: string;
73
+ /** The argument name. */
74
+ name: string;
75
+ /** True when the arg is wrapped in `v.optional(...)`. */
76
+ optional: boolean;
77
+ /** Target table for an `id` arg (`v.id("table")`). */
78
+ table?: string;
79
+ }
80
+ /**
81
+ * Runtime descriptor for a registered Lunora function. The function's `kind` is
82
+ * a compile-time-only phantom on `FunctionReference`, so the runner needs it
83
+ * spelled out here to know which client method to call. `args` carries the
84
+ * function's argument signature (absent on responses from an older worker).
85
+ */
86
+ interface FunctionDescriptor {
87
+ args?: FunctionArgumentDescriptor[];
88
+ kind: FunctionKind;
89
+ /** The `&lt;file>:&lt;function>` identifier, e.g. `messages:list`. */
90
+ path: string;
91
+ }
92
+ /** Outcome of a single `FunctionRunner` invocation. */
93
+ type RunStatus = "error" | "idle" | "running" | "success";
94
+ /** Identifier for each built-in studio tab. */
95
+ type StudioTab = "agents" | "analytics" | "api" | "audit" | "authAudit" | "authConfig" | "authSessions" | "containers" | "dashboards" | "data" | "deploymentHealth" | "drains" | "export" | "fanout" | "files" | "flags" | "functions" | "health" | "home" | "insights" | "issues" | "kv" | "logs" | "mail" | "metrics" | "migrations" | "notifications" | "organizations" | "payments" | "permissions" | "pitr" | "queues" | "realtime" | "rls" | "schedule" | "schema" | "security" | "settings" | "sql" | "storageRules" | "traces" | "users" | "vectors" | "workflows";
96
+ interface StudioProps {
97
+ /**
98
+ * URL path prefix the studio is mounted under, passed to the router as its
99
+ * `basepath`. Defaults to `/` (mounted at the origin root). The `@lunora/vite`
100
+ * dev route serves the studio under `/__lunora`, so it sets this — without
101
+ * it the router treats `/__lunora` as unknown and bounces to `/data`, escaping
102
+ * the mount.
103
+ */
104
+ readonly basePath?: string;
105
+ /**
106
+ * App-owned top-bar + sidebar-footer chrome (theme toggle, admin-token
107
+ * popover, rules banner). The batteries-included `StudioApp` supplies
108
+ * this; composing `&lt;Studio>` bare omits those affordances. See {@link StudioChrome}.
109
+ */
110
+ readonly chrome?: StudioChrome;
111
+ /**
112
+ * Make the data tab editable (insert/edit/delete rows). Off by default so
113
+ * the studio is read-only unless the host opts in; see {@link TableEditor}.
114
+ */
115
+ readonly dataEditable?: boolean;
116
+ /**
117
+ * Functions exposed in the runner tab. The runner tab only appears when at
118
+ * least one descriptor is supplied (a query/mutation/action's `kind` is
119
+ * compile-time-only, so it must be named here).
120
+ */
121
+ readonly functions?: FunctionDescriptor[];
122
+ /** Reuse an existing Lingui instance (wins over `locale`). */
123
+ readonly i18n?: I18n;
124
+ /** Shard key every shard-scoped panel targets on first load. */
125
+ readonly initialShardKey?: string;
126
+ /** Active locale for the studio's own UI strings. Defaults to `en`. */
127
+ readonly locale?: string;
128
+ /**
129
+ * Inline OpenAPI 3.1 document rendered by the API tab's reference sub-view.
130
+ * Thread the generated `_generated/openapi.json` here to render it
131
+ * without a round-trip. When omitted the reference fetches the worker's
132
+ * admin-gated `GET /_lunora/admin/openapi` endpoint via the client.
133
+ */
134
+ readonly openApiSpec?: unknown;
135
+ /**
136
+ * Inline OpenRPC 1.x document rendered by the API tab's reference sub-view
137
+ * when the OpenRPC format is selected. Thread the generated
138
+ * `_generated/openrpc.json` here to render it without a round-trip. When
139
+ * omitted the OpenRPC view fetches the worker's admin-gated
140
+ * `GET /_lunora/admin/openrpc` endpoint via the client.
141
+ */
142
+ readonly openRpcSpec?: unknown;
143
+ /**
144
+ * Allow the function runner to execute a function AS a chosen authenticated
145
+ * identity (the "Run as identity" tool), so an operator can test auth + RLS
146
+ * behavior. Security-sensitive: it forges identity on an admin-gated RPC, so
147
+ * the host MUST set this only on a trusted loopback-dev gate (the same gate
148
+ * as `dataEditable`) — never in a production/static deploy. Off by default;
149
+ * see {@link FunctionRunner}.
150
+ */
151
+ readonly runAsIdentity?: boolean;
152
+ /**
153
+ * Override how the schedule tab cancels a job. Defaults to the client's
154
+ * scheduler admin endpoint; see {@link SchedulePanel}.
155
+ */
156
+ readonly scheduledCancel?: SchedulePanelProps["scheduledCancel"];
157
+ /**
158
+ * Override how the schedule tab's Cron triggers sub-view loads triggers.
159
+ * Defaults to the client's `/_lunora/admin/cron-jobs` endpoint; see
160
+ * {@link SchedulePanel}.
161
+ */
162
+ readonly scheduledCron?: SchedulePanelProps["loadCronJobs"];
163
+ /**
164
+ * Override how the schedule tab loads jobs. Defaults to the client's
165
+ * scheduler admin endpoint, so the tab works without extra wiring.
166
+ */
167
+ readonly scheduledLoad?: SchedulePanelProps["scheduledLoad"];
168
+ /**
169
+ * Enable the visual schema editor overlay on the schema diagram (add table /
170
+ * column / index, written back to `lunora/schema.ts` + codegen). Off by default
171
+ * so the diagram stays read-only unless a host opts in. Like {@link
172
+ * StudioProps.dataEditable}, only the loopback-only dev hosts set this — the
173
+ * write path needs the project's filesystem + toolchain, so a static deploy
174
+ * leaves it off.
175
+ */
176
+ readonly schemaEditable?: boolean;
177
+ }
178
+ /**
179
+ * Top-bar + sidebar-footer chrome the `StudioApp` owns (theme + admin
180
+ * token state, the rules banner) but which renders *inside* the router-owned
181
+ * {@link StudioLayout} (the header and sidebar footer). The layout is a route
182
+ * component with no props, so it reads this from context rather than threading
183
+ * it through the router. Absent (composing `&lt;Studio>` bare) the layout simply
184
+ * omits those affordances.
185
+ */
186
+ interface StudioChrome {
187
+ readonly clearToken: () => void;
188
+ readonly onTokenChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
189
+ readonly rulesInstalled?: boolean;
190
+ readonly token: string;
191
+ }
192
+ /**
193
+ * The composable studio. {@link StudioShell} reads its strings from `useT`,
194
+ * which needs a `StudioI18nProvider` above it.
195
+ *
196
+ * When an `i18n` instance or a `locale` is supplied, this owns a provider so the
197
+ * studio localises itself standalone. When neither is given it renders the
198
+ * shell bare and inherits whatever provider is already in scope — the host app's
199
+ * (`StudioApp` owns one for the top bar too) or the shared default — instead
200
+ * of nesting a second, redundant provider.
201
+ */
202
+ declare const Studio: ({ basePath, chrome, dataEditable, functions, i18n, initialShardKey, locale, openApiSpec, openRpcSpec, runAsIdentity, schemaEditable, scheduledCancel, scheduledCron, scheduledLoad }: StudioProps) => ReactElement;
203
+ interface StudioAppProps {
204
+ /**
205
+ * Admin bearer token to send with every admin request. When omitted the app
206
+ * renders a small prompt so an operator can paste it at runtime — handy in
207
+ * dev where you don't want to bake the token into a bundle.
208
+ */
209
+ readonly adminToken?: string;
210
+ /**
211
+ * URL path prefix the studio is mounted under (router `basepath`). Defaults
212
+ * to `/`. The `@lunora/vite` dev route sets `/__lunora`. Forwarded to the
213
+ * composed {@link Studio}.
214
+ */
215
+ readonly basePath?: string;
216
+ /**
217
+ * Base URL of the Lunora worker the studio talks to. Defaults to the
218
+ * current origin, which is correct when the studio is served from the
219
+ * same worker (the `@lunora/vite` dev route) or proxied to it.
220
+ */
221
+ readonly baseUrl?: string;
222
+ /**
223
+ * Inject a pre-built client instead of constructing one from `baseUrl` +
224
+ * the admin token. Used by the dev mock harness (and embeddings that own
225
+ * the client) so the chrome renders against a supplied client; when set,
226
+ * `baseUrl`/`adminToken` are ignored and this client is never closed here.
227
+ */
228
+ readonly client?: LunoraClient;
229
+ /** UI language for the studio's own strings. Defaults to `en`. */
230
+ readonly locale?: string;
231
+ /**
232
+ * Whether the project's Lunora agent skills ("rules") are installed. When
233
+ * explicitly `false`, the studio shows a one-line banner pointing at
234
+ * `lunora rules install`. The loopback dev hosts inject this; a static deploy
235
+ * leaves it unset (no banner).
236
+ */
237
+ readonly rulesInstalled?: boolean;
238
+ /** Forwarded to the composed {@link Studio} (functions, initialShardKey, scheduled overrides). */
239
+ readonly studio?: Omit<StudioProps, "children" | "chrome" | "i18n" | "locale">;
240
+ }
241
+ /**
242
+ * A fully self-contained studio page: it constructs a {@link LunoraClient}
243
+ * pointed at the worker, wires it through a `&lt;LunoraProvider>`, manages the
244
+ * admin token + theme, and renders the composed {@link Studio} — handing it the
245
+ * top-bar/sidebar {@link StudioChrome} (theme toggle, admin-token popover, rules
246
+ * banner) so those affordances render inside the sidebar shell.
247
+ *
248
+ * Mount this directly (the standalone app and the `@lunora/vite` dev route both
249
+ * do) when you want the batteries-included page rather than composing panels
250
+ * yourself. For embedding into an existing admin UI, use the individual panels
251
+ * or `&lt;Studio>` under your own provider instead.
252
+ */
253
+ declare const StudioApp: ({ adminToken, basePath, baseUrl, client: injectedClient, rulesInstalled, studio, locale }?: StudioAppProps) => ReactElement;
254
+ export { FunctionDescriptor as F, RunStatus as R, StudioAppProps as S, FunctionKind as a, ScheduledJobs as b, ScheduledJobsProps as c, Studio as d, StudioApp as e, StudioProps as f, StudioTab as g };
@@ -0,0 +1 @@
1
+ import{mergeProps as i}from"@base-ui/react/merge-props";import{useRender as a}from"@base-ui/react/use-render";import{cva as o}from"class-variance-authority";import{c as s}from"./utils-bhneXptQ.js";const d=o("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-none border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive font-mono text-[11px] tracking-wide uppercase focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline",success:"bg-success/10 text-success font-mono text-[11px] tracking-wide uppercase [a]:hover:bg-success/15 dark:bg-success/15",warning:"bg-warning/10 text-warning font-mono text-[11px] tracking-wide uppercase [a]:hover:bg-warning/15 dark:bg-warning/15",info:"bg-info/10 text-info font-mono text-[11px] tracking-wide uppercase [a]:hover:bg-info/15 dark:bg-info/15"}},defaultVariants:{variant:"default"}});function f({className:r,variant:e="default",render:t,...n}){return a({defaultTagName:"span",props:i({className:s(d({variant:e}),r)},n),render:t,state:{slot:"badge",variant:e}})}export{f as g};