@lunora/studio 1.0.0-alpha.3 → 1.0.0-alpha.31

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 (176) hide show
  1. package/__assets__/package-og.svg +1 -1
  2. package/dist/index.d.ts +29 -18
  3. package/dist/index.js +29 -29
  4. package/dist/mount.d.ts +1 -1
  5. package/dist/mount.js +1 -1
  6. package/dist/{packem_shared/ApiTab-W3no0KOj.js → packem_chunks/ApiTab.js} +5 -5
  7. package/dist/{packem_shared/AuditPanel-Bq4o_IqT.js → packem_chunks/AuditPanel.js} +24 -36
  8. package/dist/{packem_shared/ExportImportPanel-dxY56TDF.js → packem_chunks/ExportImportPanel.js} +13 -9
  9. package/dist/{packem_shared/FileBrowser-Dhy4zES8.js → packem_chunks/FileBrowser.js} +15 -15
  10. package/dist/{packem_shared/FunctionRunner--fQJRPAD.js → packem_chunks/FunctionRunner.js} +10 -10
  11. package/dist/{packem_shared/FunctionStatsPanel-BjRUA_G3.js → packem_chunks/FunctionStatsPanel.js} +147 -204
  12. package/dist/{packem_shared/HealthPanel-PxclMWmA.js → packem_chunks/HealthPanel.js} +37 -29
  13. package/dist/{packem_shared/InsightsPanel-CWS_C-xW.js → packem_chunks/InsightsPanel.js} +107 -69
  14. package/dist/{packem_shared/LogsPanel-CTW8CFcM.js → packem_chunks/LogsPanel.js} +41 -53
  15. package/dist/{packem_shared/MailPanel-BwkvfIHF.js → packem_chunks/MailPanel.js} +37 -44
  16. package/dist/{packem_shared/MetricsPanel-BLuOhZQ4.js → packem_chunks/MetricsPanel.js} +41 -322
  17. package/dist/{packem_shared/MigrationsPanel-DT3lnwHF.js → packem_chunks/MigrationsPanel.js} +39 -46
  18. package/dist/{packem_shared/PitrPanel-CdErL7EJ.js → packem_chunks/PitrPanel.js} +9 -9
  19. package/dist/{packem_shared/SchemaViewer-LJDcmNIO.js → packem_chunks/SchemaViewer.js} +15 -15
  20. package/dist/{packem_shared/SecurityAdvisorPanel-C_ETsPih.js → packem_chunks/SecurityAdvisorPanel.js} +44 -31
  21. package/dist/packem_chunks/SettingsPanel.js +390 -0
  22. package/dist/{packem_shared/sql-editor-panel-BFRpzj6r.js → packem_chunks/SqlEditorPanel.js} +12 -252
  23. package/dist/{packem_shared/TableEditor-ChfUOZec.js → packem_chunks/TableEditor.js} +10 -68
  24. package/dist/packem_chunks/analytics-panel.js +261 -0
  25. package/dist/packem_chunks/auth-config-panel.js +179 -0
  26. package/dist/packem_chunks/auth-sessions-panel.js +175 -0
  27. package/dist/packem_chunks/containers-panel.js +247 -0
  28. package/dist/packem_chunks/dashboards-panel.js +779 -0
  29. package/dist/packem_chunks/fanout-panel.js +481 -0
  30. package/dist/packem_chunks/flags-panel.js +176 -0
  31. package/dist/packem_chunks/kv-browser.js +1896 -0
  32. package/dist/packem_chunks/log-drains-panel.js +273 -0
  33. package/dist/packem_chunks/organizations-panel.js +670 -0
  34. package/dist/packem_chunks/payments-panel.js +185 -0
  35. package/dist/packem_chunks/permissions-panel.js +804 -0
  36. package/dist/packem_chunks/queues-panel.js +147 -0
  37. package/dist/packem_chunks/rls-panel.js +313 -0
  38. package/dist/packem_chunks/schedule-panel.js +831 -0
  39. package/dist/packem_chunks/sparkline.js +79 -0
  40. package/dist/packem_chunks/storage-rules-panel.js +138 -0
  41. package/dist/packem_chunks/subscriptions-panel.js +236 -0
  42. package/dist/packem_chunks/users-panel.js +1265 -0
  43. package/dist/packem_chunks/vector-browser.js +281 -0
  44. package/dist/packem_chunks/workflows-panel.js +562 -0
  45. package/dist/packem_shared/{ADMIN_FUNCTIONS-DmBqMZ-z.js → ADMIN_FUNCTIONS-CdaxLGkE.js} +3 -0
  46. package/dist/packem_shared/{ApiDocsPanel-C5-yJ1p7.js → ApiDocsPanel-B6u_wnz-.js} +2 -2
  47. package/dist/packem_shared/{ApiReferencePanel-1vubqG5s.js → ApiReferencePanel-Drz4UO0a.js} +2 -1
  48. package/dist/packem_shared/{CommandPalette-BtgkBzZI.js → CommandPalette-B5BertvU.js} +1 -1
  49. package/dist/packem_shared/{DataBrowser-CtBe1So9.js → DataBrowser-ANTHLWWh.js} +198 -247
  50. package/dist/packem_shared/{GlobalDataBrowser-BTEmGrph.js → GlobalDataBrowser-CjgTG_wa.js} +37 -66
  51. package/dist/packem_shared/HomePanel-BRcQVDby.js +14 -0
  52. package/dist/packem_shared/{OpenRpcReferencePanel-vbcYbv3V.js → OpenRpcReferencePanel-CspFdbUT.js} +2 -1
  53. package/dist/packem_shared/{ScheduledJobs-CabfKbyM.js → ScheduledJobs-BEJXtsBn.js} +163 -60
  54. package/dist/packem_shared/Studio-B1V0GxTz.js +16 -0
  55. package/dist/packem_shared/{StudioApp-CHOZA-z-.js → StudioApp-CR0Tvy81.js} +277 -3
  56. package/dist/packem_shared/{advisor-view-CGcfMiPq.js → advisor-view-DzqyvUU3.js} +1 -1
  57. package/dist/packem_shared/{app.d-CCmwDEVs.d.ts → app.d-CNLRTrWw.d.ts} +1 -1
  58. package/dist/packem_shared/{bar-chart-CzJAgqkp.js → bar-chart-Bb__F5-u.js} +1 -1
  59. package/dist/packem_shared/browser-storage-d03UsV7v.js +249 -0
  60. package/dist/packem_shared/{cf-links-2cktDedA.js → cf-links-BZfRdxSE.js} +1 -1
  61. package/dist/packem_shared/{data-grid-B5CaV3wS.js → data-grid-Dsg6nRjo.js} +1 -1
  62. package/dist/packem_shared/data-view-params-Cd6yRVbv.js +96 -0
  63. package/dist/packem_shared/{grid-features-CzUfqgsM.js → grid-features-D7nNzBYm.js} +4 -99
  64. package/dist/packem_shared/{HomePanel-Cw16stjq.js → home-panel-CRIs6x2j.js} +835 -469
  65. package/dist/packem_shared/{internal-rXJEAhXS.js → internal-FcNZ3beb.js} +1 -1
  66. package/dist/packem_shared/modal-shell-hyaJvIJ6.js +100 -0
  67. package/dist/packem_shared/{reference-view-B4E49Lip.js → reference-view-Doy1XlQq.js} +4 -44
  68. package/dist/packem_shared/select-UkNYCT3s.js +273 -0
  69. package/dist/packem_shared/skeleton-CGhL0p20.js +45 -0
  70. package/dist/packem_shared/{sparkline-10dG-_f0.js → sparkline-KgMPHS4u.js} +1 -1
  71. package/dist/packem_shared/studio-CQ-rtNhn.js +4013 -0
  72. package/dist/packem_shared/{table-_RzNvy3R.js → table-DsCa9Qp9.js} +1 -1
  73. package/dist/packem_shared/{table-list-sidebar-Bg7uzbvC.js → table-list-sidebar-VMo0ftxD.js} +1 -1
  74. package/dist/packem_shared/use-admin-query-BViPA3US.js +105 -0
  75. package/dist/packem_shared/use-auth-capabilities-BHkoBnbZ.js +32 -0
  76. package/dist/standalone/chunk-2DS7JLWL.js +13 -0
  77. package/dist/standalone/chunk-2K47A3P6.js +1 -0
  78. package/dist/standalone/chunk-2NGUNNGW.js +1 -0
  79. package/dist/standalone/chunk-2PDQ4KZ6.js +1 -0
  80. package/dist/standalone/chunk-3BP4BTLR.js +4 -0
  81. package/dist/standalone/chunk-3OA7PECS.js +6 -0
  82. package/dist/standalone/chunk-45QK5ZPN.js +1 -0
  83. package/dist/standalone/chunk-4QHKBC77.js +1 -0
  84. package/dist/standalone/chunk-57LYXHXH.js +1 -0
  85. package/dist/standalone/chunk-5NSZVXCS.js +1 -0
  86. package/dist/standalone/chunk-5OIBXYZM.js +1 -0
  87. package/dist/standalone/chunk-63XKJQTQ.js +1 -0
  88. package/dist/standalone/chunk-6RC6L33K.js +4 -0
  89. package/dist/standalone/chunk-6VTGE3WJ.js +1 -0
  90. package/dist/standalone/chunk-7PBZKXYA.js +1 -0
  91. package/dist/standalone/chunk-7POIIWC5.js +3 -0
  92. package/dist/standalone/chunk-7RYIQKZA.js +1 -0
  93. package/dist/standalone/chunk-7TJJXVSE.js +1 -0
  94. package/dist/standalone/chunk-AB6QGMBF.js +1 -0
  95. package/dist/standalone/chunk-AHILM3ZP.js +1 -0
  96. package/dist/standalone/chunk-AQGOX5DK.js +1 -0
  97. package/dist/standalone/chunk-ASLGNHAX.js +1 -0
  98. package/dist/standalone/chunk-BHTPZS7L.js +4 -0
  99. package/dist/standalone/chunk-BJGBHGK3.js +1 -0
  100. package/dist/standalone/chunk-D6ORSB24.js +1 -0
  101. package/dist/standalone/chunk-DGWTR4G7.js +1 -0
  102. package/dist/standalone/chunk-DSX53PBM.js +1 -0
  103. package/dist/standalone/chunk-DV2MNASX.js +1 -0
  104. package/dist/standalone/chunk-DWDILV2E.js +1 -0
  105. package/dist/standalone/chunk-EGJX34WM.js +1 -0
  106. package/dist/standalone/chunk-FCR3HKFV.js +1 -0
  107. package/dist/standalone/chunk-FKO3HO6I.js +4 -0
  108. package/dist/standalone/chunk-FQKNJSRA.js +76 -0
  109. package/dist/standalone/chunk-G2TFEWEQ.js +4 -0
  110. package/dist/standalone/chunk-GTM65MVX.js +1 -0
  111. package/dist/standalone/chunk-GZXPPJVK.js +1 -0
  112. package/dist/standalone/chunk-HFBRE65A.js +1 -0
  113. package/dist/standalone/chunk-HG7Q5B3H.js +1 -0
  114. package/dist/standalone/chunk-HTQL7AXU.js +1 -0
  115. package/dist/standalone/chunk-HV7G6DFP.js +5 -0
  116. package/dist/standalone/chunk-ITLLHEVG.js +1 -0
  117. package/dist/standalone/chunk-J6J54MBP.js +1 -0
  118. package/dist/standalone/chunk-JSEXCW5Q.js +1 -0
  119. package/dist/standalone/chunk-KEGAWN6Y.js +1 -0
  120. package/dist/standalone/chunk-KG3QTFWE.js +1 -0
  121. package/dist/standalone/chunk-KGS7KM4A.js +2 -0
  122. package/dist/standalone/chunk-KNRVPCFX.js +1 -0
  123. package/dist/standalone/chunk-KODWGUAB.js +1 -0
  124. package/dist/standalone/chunk-KZ6INM5M.js +1 -0
  125. package/dist/standalone/chunk-LZWPCZLE.js +1 -0
  126. package/dist/standalone/chunk-N2QDG3MW.js +1 -0
  127. package/dist/standalone/chunk-N4JI6VQD.js +1 -0
  128. package/dist/standalone/chunk-NNISYDNI.js +1 -0
  129. package/dist/standalone/chunk-O4PXDNR3.js +1 -0
  130. package/dist/standalone/chunk-O77VNUFD.js +1 -0
  131. package/dist/standalone/chunk-OD2POGPJ.js +1 -0
  132. package/dist/standalone/chunk-OXCK3ZUG.js +1 -0
  133. package/dist/standalone/chunk-P7DSVO4U.js +1 -0
  134. package/dist/standalone/chunk-PKAM3N5C.js +1 -0
  135. package/dist/standalone/chunk-QGXGBHQO.js +1 -0
  136. package/dist/standalone/chunk-QHA3TAEJ.js +1 -0
  137. package/dist/standalone/chunk-QQWC62X7.js +1 -0
  138. package/dist/standalone/chunk-RMYA7NAH.js +1 -0
  139. package/dist/standalone/chunk-RRCPZMC2.js +22 -0
  140. package/dist/standalone/chunk-S53RUBW5.js +1 -0
  141. package/dist/standalone/chunk-SB4GT6PK.js +1 -0
  142. package/dist/standalone/chunk-SEU5V7I6.js +1 -0
  143. package/dist/standalone/chunk-SHIOUDOT.js +1 -0
  144. package/dist/standalone/chunk-SIDRSX7Y.js +1 -0
  145. package/dist/standalone/chunk-SVR644RF.js +1 -0
  146. package/dist/standalone/chunk-TAD43CG5.js +1 -0
  147. package/dist/standalone/chunk-TBMYIZIO.js +1 -0
  148. package/dist/standalone/chunk-TICVNLPM.js +1 -0
  149. package/dist/standalone/chunk-TQ36RWOP.js +1 -0
  150. package/dist/standalone/chunk-UGMRUEBU.js +1 -0
  151. package/dist/standalone/chunk-UII66UVF.js +1 -0
  152. package/dist/standalone/chunk-VJPQUBN6.js +8 -0
  153. package/dist/standalone/chunk-VLXV72QE.js +1 -0
  154. package/dist/standalone/chunk-VMJKJWG6.js +1 -0
  155. package/dist/standalone/chunk-VPDPN5RR.js +2 -0
  156. package/dist/standalone/chunk-VSEGZA3J.js +1 -0
  157. package/dist/standalone/chunk-VXBZQIGY.js +4 -0
  158. package/dist/standalone/chunk-W5LWN6IP.js +1 -0
  159. package/dist/standalone/chunk-W7PCVQTE.js +1 -0
  160. package/dist/standalone/chunk-W7SQVLBH.js +1 -0
  161. package/dist/standalone/chunk-XLILSHPE.js +1 -0
  162. package/dist/standalone/chunk-XURNGQSS.js +1 -0
  163. package/dist/standalone/chunk-YJGANMU7.js +18 -0
  164. package/dist/standalone/chunk-YQQJ4N6U.js +1 -0
  165. package/dist/standalone/chunk-ZH7UES4T.js +2 -0
  166. package/dist/standalone/chunk-ZPUO7FNI.js +1 -0
  167. package/dist/standalone/chunk-ZQCVDXDL.js +1 -0
  168. package/dist/standalone/studio.js +104 -246
  169. package/dist/styles.css +1 -1
  170. package/package.json +13 -12
  171. package/dist/packem_shared/SettingsPanel-C0uLRf5P.js +0 -176
  172. package/dist/packem_shared/SqlEditorPanel-CguV7otm.js +0 -13
  173. package/dist/packem_shared/Studio-DFWAlcuf.js +0 -33
  174. package/dist/packem_shared/studio-Bj8psK1c.js +0 -10303
  175. package/dist/packem_shared/use-live-admin-Dq6g3daN.js +0 -73
  176. package/dist/packem_shared/use-live-shard-seed-Cuk3dnH0.js +0 -76
@@ -1,108 +1,400 @@
1
1
  import { c } from 'react/compiler-runtime';
2
- import { useLunora } from '@lunora/react';
3
2
  import { useNavigate } from '@tanstack/react-router';
4
- import { useState, useEffect } from 'react';
5
- import { B as Bar, E as EvilBarChart } from './bar-chart-CzJAgqkp.js';
3
+ import { useState, useEffect, Suspense, lazy } from 'react';
6
4
  import { B as Badge } from './badge-B2PKA1-5.js';
7
- import { C as Card, a as CardContent } from './card-DURq3ElK.js';
5
+ import { a as CardContent, C as Card } from './card-DURq3ElK.js';
8
6
  import { E as EmptyState } from './empty-state-DY_oe0k6.js';
7
+ import { u as useAdminQuery } from './use-admin-query-BViPA3US.js';
9
8
  import { useT } from './DEFAULT_LOCALE-CiX4W7Kr.js';
10
- import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-DmBqMZ-z.js';
11
- import { d as formatBytes, f as fireAndForget, c as callOptions, a as adminRef } from './internal-rXJEAhXS.js';
9
+ import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-CdaxLGkE.js';
10
+ import { f as fireAndForget, c as callOptions, a as adminRef, h as formatBytes } from './internal-FcNZ3beb.js';
12
11
  import { c as cn } from './utils-B05Dmz_H.js';
13
12
  import { deriveInsights } from './DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js';
13
+ import { useLunora } from '@lunora/react';
14
14
  import { jsxDEV } from 'react/jsx-dev-runtime';
15
15
 
16
- const GET_METRICS = adminRef(ADMIN_FUNCTIONS.getMetrics);
17
- const GET_FUNCTION_STATS = adminRef(ADMIN_FUNCTIONS.getFunctionStats);
18
- const GET_SECURITY_AUDIT = adminRef(ADMIN_FUNCTIONS.getSecurityAudit);
19
- const GET_AUDIT_LOG = adminRef(ADMIN_FUNCTIONS.getAuditLog);
20
- const LIST_SUBSCRIPTIONS = adminRef(ADMIN_FUNCTIONS.listSubscriptions);
21
- const formatMs = (ms) => {
22
- if (ms < 1e3) {
23
- return `${String(Math.round(ms))}ms`;
24
- }
25
- const digits = ms >= 1e4 ? 0 : 1;
26
- return `${(ms / 1e3).toFixed(digits)}s`;
16
+ const STUDIO_FEATURES = adminRef(ADMIN_FUNCTIONS.studioFeatures);
17
+ const DEFAULT_STUDIO_FEATURES = {
18
+ analytics: true,
19
+ auth: true,
20
+ containers: true,
21
+ flags: true,
22
+ kv: true,
23
+ mail: true,
24
+ payments: true,
25
+ queues: true,
26
+ scheduler: true,
27
+ storage: true,
28
+ vectors: true,
29
+ workflows: true
27
30
  };
28
- const relativeTime = (ts, now) => {
29
- const seconds = Math.max(0, Math.round((now - ts) / 1e3));
30
- if (seconds < 60) {
31
- return `${String(seconds)}s ago`;
31
+ const coerceFeatures = (raw) => {
32
+ if (raw === null || typeof raw !== "object") {
33
+ return DEFAULT_STUDIO_FEATURES;
32
34
  }
33
- const minutes = Math.round(seconds / 60);
34
- if (minutes < 60) {
35
- return `${String(minutes)}m ago`;
35
+ const record = raw;
36
+ const flag = (key) => typeof record[key] === "boolean" ? record[key] : true;
37
+ return {
38
+ analytics: flag("analytics"),
39
+ auth: flag("auth"),
40
+ containers: flag("containers"),
41
+ flags: flag("flags"),
42
+ kv: flag("kv"),
43
+ mail: flag("mail"),
44
+ payments: flag("payments"),
45
+ queues: flag("queues"),
46
+ scheduler: flag("scheduler"),
47
+ storage: flag("storage"),
48
+ vectors: flag("vectors"),
49
+ workflows: flag("workflows")
50
+ };
51
+ };
52
+ const useStudioFeatures = () => {
53
+ const $ = c(3);
54
+ const client = useLunora();
55
+ const [features, setFeatures] = useState(DEFAULT_STUDIO_FEATURES);
56
+ let t0;
57
+ let t1;
58
+ if ($[0] !== client) {
59
+ t0 = () => {
60
+ fireAndForget((async () => {
61
+ try {
62
+ setFeatures(coerceFeatures(await client.query(STUDIO_FEATURES, {}, callOptions(""))));
63
+ } catch {
64
+ }
65
+ })());
66
+ };
67
+ t1 = [client];
68
+ $[0] = client;
69
+ $[1] = t0;
70
+ $[2] = t1;
71
+ } else {
72
+ t0 = $[1];
73
+ t1 = $[2];
36
74
  }
37
- const hours = Math.round(minutes / 60);
38
- return hours < 24 ? `${String(hours)}h ago` : `${String(Math.round(hours / 24))}d ago`;
75
+ useEffect(t0, t1);
76
+ return features;
39
77
  };
40
- const SPARKLINE_CONFIG = {
41
- value: {
42
- colors: {
43
- dark: ["var(--foreground)"],
44
- light: ["var(--foreground)"]
45
- },
46
- label: ""
78
+
79
+ const ChevronRight$1 = () => {
80
+ const $ = c(1);
81
+ let t0;
82
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
83
+ t0 = /* @__PURE__ */ jsxDEV("svg", {
84
+ "aria-hidden": "true",
85
+ className: "size-4 text-muted-foreground",
86
+ fill: "none",
87
+ stroke: "currentColor",
88
+ strokeWidth: 1.6,
89
+ viewBox: "0 0 24 24",
90
+ children: /* @__PURE__ */ jsxDEV("path", {
91
+ d: "m9 6 6 6-6 6",
92
+ strokeLinecap: "round",
93
+ strokeLinejoin: "round"
94
+ }, void 0, false)
95
+ }, void 0, false);
96
+ $[0] = t0;
97
+ } else {
98
+ t0 = $[0];
47
99
  }
100
+ return t0;
48
101
  };
49
- const Sparkline = (t0) => {
50
- const $ = c(6);
102
+ const BindingCard = (t0) => {
103
+ const $ = c(24);
51
104
  const {
52
- data
105
+ group
53
106
  } = t0;
107
+ const t = useT();
108
+ const navigate = useNavigate();
54
109
  let t1;
55
- let t2;
56
- if ($[0] !== data) {
57
- t2 = /* @__PURE__ */ Symbol.for("react.early_return_sentinel");
58
- bb0: {
59
- const bars = data.slice(-16);
60
- if (bars.length < 3) {
61
- t2 = null;
62
- break bb0;
63
- }
64
- t1 = bars.map(_temp);
65
- }
66
- $[0] = data;
67
- $[1] = t1;
68
- $[2] = t2;
110
+ if ($[0] !== group.tab || $[1] !== navigate) {
111
+ t1 = () => {
112
+ fireAndForget(navigate({
113
+ to: `/${group.tab}`
114
+ }));
115
+ };
116
+ $[0] = group.tab;
117
+ $[1] = navigate;
118
+ $[2] = t1;
69
119
  } else {
70
- t1 = $[1];
71
- t2 = $[2];
120
+ t1 = $[2];
72
121
  }
73
- if (t2 !== /* @__PURE__ */ Symbol.for("react.early_return_sentinel")) {
74
- return t2;
122
+ const onOpen = t1;
123
+ const count = group.bindings.length;
124
+ let t2;
125
+ if ($[3] !== group.label) {
126
+ t2 = /* @__PURE__ */ jsxDEV("span", {
127
+ className: "text-sm font-medium text-foreground",
128
+ children: group.label
129
+ }, void 0, false);
130
+ $[3] = group.label;
131
+ $[4] = t2;
132
+ } else {
133
+ t2 = $[4];
75
134
  }
76
- const rows = t1;
77
135
  let t3;
78
- if ($[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
79
- t3 = /* @__PURE__ */ jsxDEV(Bar, {
80
- dataKey: "value"
81
- }, void 0, false);
82
- $[3] = t3;
136
+ if ($[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
137
+ t3 = /* @__PURE__ */ jsxDEV(ChevronRight$1, {}, void 0, false);
138
+ $[5] = t3;
83
139
  } else {
84
- t3 = $[3];
140
+ t3 = $[5];
85
141
  }
86
142
  let t4;
87
- if ($[4] !== rows) {
143
+ if ($[6] !== t2) {
88
144
  t4 = /* @__PURE__ */ jsxDEV("div", {
89
- "aria-hidden": "true",
90
- className: "h-8 w-28",
91
- children: /* @__PURE__ */ jsxDEV(EvilBarChart, {
92
- animationType: "none",
93
- barCategoryGap: 1,
94
- className: "h-8 w-full",
95
- config: SPARKLINE_CONFIG,
96
- data: rows,
97
- children: t3
98
- }, void 0, false)
145
+ className: "flex items-center justify-between",
146
+ children: [t2, t3]
147
+ }, void 0, true);
148
+ $[6] = t2;
149
+ $[7] = t4;
150
+ } else {
151
+ t4 = $[7];
152
+ }
153
+ let t5;
154
+ if ($[8] !== count || $[9] !== t) {
155
+ t5 = count === 1 ? t("1 binding") : t("{count} bindings", {
156
+ count
157
+ });
158
+ $[8] = count;
159
+ $[9] = t;
160
+ $[10] = t5;
161
+ } else {
162
+ t5 = $[10];
163
+ }
164
+ let t6;
165
+ if ($[11] !== t5) {
166
+ t6 = /* @__PURE__ */ jsxDEV("span", {
167
+ className: "text-xs text-muted-foreground",
168
+ children: t5
99
169
  }, void 0, false);
100
- $[4] = rows;
101
- $[5] = t4;
170
+ $[11] = t5;
171
+ $[12] = t6;
102
172
  } else {
103
- t4 = $[5];
173
+ t6 = $[12];
174
+ }
175
+ let t7;
176
+ if ($[13] !== count || $[14] !== group.bindings) {
177
+ t7 = count > 0 && /* @__PURE__ */ jsxDEV("div", {
178
+ className: "flex flex-wrap gap-1.5",
179
+ children: group.bindings.map(_temp$1)
180
+ }, void 0, false);
181
+ $[13] = count;
182
+ $[14] = group.bindings;
183
+ $[15] = t7;
184
+ } else {
185
+ t7 = $[15];
186
+ }
187
+ let t8;
188
+ if ($[16] !== t4 || $[17] !== t6 || $[18] !== t7) {
189
+ t8 = /* @__PURE__ */ jsxDEV(CardContent, {
190
+ className: "flex flex-col gap-2 py-4",
191
+ children: [t4, t6, t7]
192
+ }, void 0, true);
193
+ $[16] = t4;
194
+ $[17] = t6;
195
+ $[18] = t7;
196
+ $[19] = t8;
197
+ } else {
198
+ t8 = $[19];
104
199
  }
105
- return t4;
200
+ let t9;
201
+ if ($[20] !== group.testId || $[21] !== onOpen || $[22] !== t8) {
202
+ t9 = /* @__PURE__ */ jsxDEV(Card, {
203
+ className: "cursor-pointer gap-0 py-0 transition-colors hover:bg-muted/40",
204
+ "data-testid": group.testId,
205
+ onClick: onOpen,
206
+ children: t8
207
+ }, void 0, false);
208
+ $[20] = group.testId;
209
+ $[21] = onOpen;
210
+ $[22] = t8;
211
+ $[23] = t9;
212
+ } else {
213
+ t9 = $[23];
214
+ }
215
+ return t9;
216
+ };
217
+ const TAB_ORDER = ["kv", "files", "vectors"];
218
+ const upsertCard = (current, card) => [...current.filter((group) => group.tab !== card.tab), card].toSorted((a, b) => TAB_ORDER.indexOf(a.tab) - TAB_ORDER.indexOf(b.tab));
219
+ const BindingsOverview = () => {
220
+ const $ = c(19);
221
+ const client = useLunora();
222
+ const features = useStudioFeatures();
223
+ const t = useT();
224
+ let t0;
225
+ if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
226
+ t0 = [];
227
+ $[0] = t0;
228
+ } else {
229
+ t0 = $[0];
230
+ }
231
+ const [groups, setGroups] = useState(t0);
232
+ let t1;
233
+ let t2;
234
+ if ($[1] !== client || $[2] !== features.kv || $[3] !== features.storage || $[4] !== features.vectors || $[5] !== t) {
235
+ t1 = () => {
236
+ const token = {
237
+ cancelled: false
238
+ };
239
+ const sources = [{
240
+ enabled: features.kv,
241
+ label: t("KV Namespaces"),
242
+ load: async () => {
243
+ const namespaces = await client.listKvNamespaces();
244
+ return namespaces.map(_temp2$1);
245
+ },
246
+ tab: "kv",
247
+ testId: "home-binding-kv"
248
+ }, {
249
+ enabled: features.storage,
250
+ label: t("R2 Buckets"),
251
+ load: () => client.listStorageBuckets(),
252
+ tab: "files",
253
+ testId: "home-binding-r2"
254
+ }, {
255
+ enabled: features.vectors,
256
+ label: t("Vectorize Indexes"),
257
+ load: async () => {
258
+ const indexes = await client.listVectorIndexes();
259
+ return indexes.map(_temp3$1);
260
+ },
261
+ tab: "vectors",
262
+ testId: "home-binding-vectors"
263
+ }];
264
+ for (const source of sources) {
265
+ if (!source.enabled) {
266
+ continue;
267
+ }
268
+ fireAndForget((async () => {
269
+ try {
270
+ const bindings = await source.load();
271
+ if (!token.cancelled) {
272
+ const card = {
273
+ bindings,
274
+ label: source.label,
275
+ tab: source.tab,
276
+ testId: source.testId
277
+ };
278
+ setGroups((current) => upsertCard(current, card));
279
+ }
280
+ } catch {
281
+ }
282
+ })());
283
+ }
284
+ return () => {
285
+ token.cancelled = true;
286
+ };
287
+ };
288
+ t2 = [client, features.kv, features.storage, features.vectors, t];
289
+ $[1] = client;
290
+ $[2] = features.kv;
291
+ $[3] = features.storage;
292
+ $[4] = features.vectors;
293
+ $[5] = t;
294
+ $[6] = t1;
295
+ $[7] = t2;
296
+ } else {
297
+ t1 = $[6];
298
+ t2 = $[7];
299
+ }
300
+ useEffect(t1, t2);
301
+ if (groups.length === 0) {
302
+ return null;
303
+ }
304
+ let t3;
305
+ if ($[8] !== t) {
306
+ t3 = t("Bindings");
307
+ $[8] = t;
308
+ $[9] = t3;
309
+ } else {
310
+ t3 = $[9];
311
+ }
312
+ let t4;
313
+ if ($[10] !== t3) {
314
+ t4 = /* @__PURE__ */ jsxDEV("h2", {
315
+ className: "text-sm font-semibold tracking-tight text-foreground",
316
+ children: t3
317
+ }, void 0, false);
318
+ $[10] = t3;
319
+ $[11] = t4;
320
+ } else {
321
+ t4 = $[11];
322
+ }
323
+ let t5;
324
+ if ($[12] !== groups) {
325
+ t5 = groups.map(_temp4);
326
+ $[12] = groups;
327
+ $[13] = t5;
328
+ } else {
329
+ t5 = $[13];
330
+ }
331
+ let t6;
332
+ if ($[14] !== t5) {
333
+ t6 = /* @__PURE__ */ jsxDEV("div", {
334
+ className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3",
335
+ children: t5
336
+ }, void 0, false);
337
+ $[14] = t5;
338
+ $[15] = t6;
339
+ } else {
340
+ t6 = $[15];
341
+ }
342
+ let t7;
343
+ if ($[16] !== t4 || $[17] !== t6) {
344
+ t7 = /* @__PURE__ */ jsxDEV("section", {
345
+ className: "flex flex-col gap-3",
346
+ "data-testid": "home-bindings",
347
+ children: [t4, t6]
348
+ }, void 0, true);
349
+ $[16] = t4;
350
+ $[17] = t6;
351
+ $[18] = t7;
352
+ } else {
353
+ t7 = $[18];
354
+ }
355
+ return t7;
356
+ };
357
+ function _temp$1(binding) {
358
+ return /* @__PURE__ */ jsxDEV(Badge, {
359
+ variant: "secondary",
360
+ children: binding
361
+ }, binding, false);
362
+ }
363
+ function _temp2$1(ns) {
364
+ return ns.binding;
365
+ }
366
+ function _temp3$1(index) {
367
+ return index.name;
368
+ }
369
+ function _temp4(group) {
370
+ return /* @__PURE__ */ jsxDEV(BindingCard, {
371
+ group
372
+ }, group.tab, false);
373
+ }
374
+
375
+ const Sparkline = /* @__PURE__ */ lazy(() => import('../packem_chunks/sparkline.js').then((m) => {
376
+ return {
377
+ default: m.Sparkline
378
+ };
379
+ }));
380
+ const formatMs = (ms) => {
381
+ if (ms < 1e3) {
382
+ return `${String(Math.round(ms))}ms`;
383
+ }
384
+ const digits = ms >= 1e4 ? 0 : 1;
385
+ return `${(ms / 1e3).toFixed(digits)}s`;
386
+ };
387
+ const relativeTime = (ts, now) => {
388
+ const seconds = Math.max(0, Math.round((now - ts) / 1e3));
389
+ if (seconds < 60) {
390
+ return `${String(seconds)}s ago`;
391
+ }
392
+ const minutes = Math.round(seconds / 60);
393
+ if (minutes < 60) {
394
+ return `${String(minutes)}m ago`;
395
+ }
396
+ const hours = Math.round(minutes / 60);
397
+ return hours < 24 ? `${String(hours)}h ago` : `${String(Math.round(hours / 24))}d ago`;
106
398
  };
107
399
  const bucketSeries = (history, field) => {
108
400
  if (history === void 0 || history.length === 0) {
@@ -188,8 +480,14 @@ const StatCard = (t0) => {
188
480
  }
189
481
  let t5;
190
482
  if ($[9] !== trend) {
191
- t5 = trend !== void 0 && /* @__PURE__ */ jsxDEV(Sparkline, {
192
- data: trend
483
+ t5 = trend !== void 0 && /* @__PURE__ */ jsxDEV(Suspense, {
484
+ fallback: /* @__PURE__ */ jsxDEV("div", {
485
+ "aria-hidden": "true",
486
+ className: "h-8 w-28"
487
+ }, void 0, false),
488
+ children: /* @__PURE__ */ jsxDEV(Sparkline, {
489
+ data: trend
490
+ }, void 0, false)
193
491
  }, void 0, false);
194
492
  $[9] = trend;
195
493
  $[10] = t5;
@@ -427,7 +725,7 @@ const TopFunctionsCard = (t0) => {
427
725
  const t = useT();
428
726
  let t1;
429
727
  if ($[0] !== functions || $[1] !== t) {
430
- const top = [...functions].toSorted(_temp2).slice(0, 5);
728
+ const top = [...functions].toSorted(_temp).slice(0, 5);
431
729
  let t2;
432
730
  if ($[3] !== t) {
433
731
  t2 = t("Top functions");
@@ -472,7 +770,7 @@ const TopFunctionsCard = (t0) => {
472
770
  className: "w-8 text-end",
473
771
  children: t("Err")
474
772
  }, void 0, false)]
475
- }, void 0, true), top.map(_temp3)]
773
+ }, void 0, true), top.map(_temp2)]
476
774
  }, void 0, true)]
477
775
  }, void 0, true);
478
776
  $[0] = functions;
@@ -682,389 +980,463 @@ const averageLatencyMs = (functions) => {
682
980
  return functions.reduce((sum, function_) => sum + function_.totalDurationMs, 0) / calls;
683
981
  };
684
982
  const HomePanel = (t0) => {
685
- const $ = c(132);
983
+ const $ = c(150);
686
984
  const {
687
985
  initialShardKey
688
986
  } = t0;
689
- const client = useLunora();
690
987
  const t = useT();
691
988
  const navigate = useNavigate();
692
- const [metrics, setMetrics] = useState(null);
989
+ const shard = initialShardKey ?? "";
693
990
  let t1;
694
991
  if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
695
- t1 = [];
992
+ t1 = {};
696
993
  $[0] = t1;
697
994
  } else {
698
995
  t1 = $[0];
699
996
  }
700
- const [functions, setFunctions] = useState(t1);
701
- const [performanceCount, setPerformanceCount] = useState(null);
702
- const [securityCount, setSecurityCount] = useState(null);
703
- const [subscriptions, setSubscriptions] = useState(null);
704
997
  let t2;
705
- if ($[1] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
706
- t2 = [];
707
- $[1] = t2;
998
+ if ($[1] !== shard) {
999
+ t2 = {
1000
+ shardKey: shard
1001
+ };
1002
+ $[1] = shard;
1003
+ $[2] = t2;
708
1004
  } else {
709
- t2 = $[1];
1005
+ t2 = $[2];
710
1006
  }
711
- const [activity, setActivity] = useState(t2);
1007
+ const metricsQuery = useAdminQuery(ADMIN_FUNCTIONS.getMetrics, t1, t2);
712
1008
  let t3;
1009
+ if ($[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1010
+ t3 = {};
1011
+ $[3] = t3;
1012
+ } else {
1013
+ t3 = $[3];
1014
+ }
713
1015
  let t4;
714
- if ($[2] !== client || $[3] !== initialShardKey) {
715
- t3 = () => {
716
- const shard = initialShardKey ?? "";
717
- const load = async () => {
718
- const [snapshot, stats, audit, subs, recent] = await Promise.allSettled([client.query(GET_METRICS, {}, callOptions(shard)), client.query(GET_FUNCTION_STATS, {}, callOptions(shard)), client.query(GET_SECURITY_AUDIT, {}, callOptions("")), client.query(LIST_SUBSCRIPTIONS, {}, callOptions(shard)), client.query(GET_AUDIT_LOG, {}, callOptions(shard))]);
719
- const snapshotValue = snapshot.status === "fulfilled" ? snapshot.value : null;
720
- const statFns = stats.status === "fulfilled" && Array.isArray(stats.value.functions) ? stats.value.functions : [];
721
- setMetrics(snapshotValue);
722
- setFunctions(statFns);
723
- setPerformanceCount(stats.status === "fulfilled" ? deriveInsights(snapshotValue, statFns).length : null);
724
- setSecurityCount(audit.status === "fulfilled" && Array.isArray(audit.value.findings) ? audit.value.findings.length : null);
725
- setSubscriptions(subs.status === "fulfilled" ? subs.value : null);
726
- setActivity(recent.status === "fulfilled" && Array.isArray(recent.value.entries) ? recent.value.entries : []);
727
- };
728
- fireAndForget(load());
1016
+ if ($[4] !== shard) {
1017
+ t4 = {
1018
+ shardKey: shard
729
1019
  };
730
- t4 = [client, initialShardKey];
731
- $[2] = client;
732
- $[3] = initialShardKey;
733
- $[4] = t3;
1020
+ $[4] = shard;
734
1021
  $[5] = t4;
735
1022
  } else {
736
- t3 = $[4];
737
1023
  t4 = $[5];
738
1024
  }
739
- useEffect(t3, t4);
1025
+ const statsQuery = useAdminQuery(ADMIN_FUNCTIONS.getFunctionStats, t3, t4);
740
1026
  let t5;
741
- if ($[6] !== navigate) {
742
- t5 = () => {
743
- fireAndForget(navigate({
744
- to: "/security"
745
- }));
1027
+ let t6;
1028
+ if ($[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1029
+ t5 = {};
1030
+ t6 = {
1031
+ shardKey: ""
746
1032
  };
747
- $[6] = navigate;
748
- $[7] = t5;
1033
+ $[6] = t5;
1034
+ $[7] = t6;
749
1035
  } else {
750
- t5 = $[7];
1036
+ t5 = $[6];
1037
+ t6 = $[7];
751
1038
  }
752
- const viewSecurity = t5;
753
- let t6;
754
- if ($[8] !== navigate) {
755
- t6 = () => {
756
- fireAndForget(navigate({
757
- to: "/insights"
758
- }));
1039
+ const auditQuery = useAdminQuery(ADMIN_FUNCTIONS.getSecurityAudit, t5, t6);
1040
+ let t7;
1041
+ if ($[8] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1042
+ t7 = {};
1043
+ $[8] = t7;
1044
+ } else {
1045
+ t7 = $[8];
1046
+ }
1047
+ let t8;
1048
+ if ($[9] !== shard) {
1049
+ t8 = {
1050
+ shardKey: shard
759
1051
  };
760
- $[8] = navigate;
761
- $[9] = t6;
1052
+ $[9] = shard;
1053
+ $[10] = t8;
762
1054
  } else {
763
- t6 = $[9];
1055
+ t8 = $[10];
764
1056
  }
765
- const viewPerformance = t6;
1057
+ const subscriptionsQuery = useAdminQuery(ADMIN_FUNCTIONS.listSubscriptions, t7, t8);
1058
+ let t9;
1059
+ if ($[11] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1060
+ t9 = {};
1061
+ $[11] = t9;
1062
+ } else {
1063
+ t9 = $[11];
1064
+ }
1065
+ let t10;
1066
+ if ($[12] !== shard) {
1067
+ t10 = {
1068
+ shardKey: shard
1069
+ };
1070
+ $[12] = shard;
1071
+ $[13] = t10;
1072
+ } else {
1073
+ t10 = $[13];
1074
+ }
1075
+ const auditLogQuery = useAdminQuery(ADMIN_FUNCTIONS.getAuditLog, t9, t10);
1076
+ const metrics = metricsQuery.data ?? null;
766
1077
  let T0;
1078
+ let activity;
767
1079
  let cacheHitRate;
768
- let t10;
1080
+ let functions;
1081
+ let performanceCount;
1082
+ let securityCount;
1083
+ let subscriptions;
769
1084
  let t11;
770
1085
  let t12;
771
1086
  let t13;
772
1087
  let t14;
773
1088
  let t15;
774
- let t7;
775
- let t8;
776
- let t9;
777
- if ($[10] !== functions || $[11] !== metrics?.cache || $[12] !== metrics?.errors || $[13] !== metrics?.history || $[14] !== metrics?.requests || $[15] !== t) {
1089
+ let t16;
1090
+ let t17;
1091
+ let t18;
1092
+ let t19;
1093
+ let viewPerformance;
1094
+ let viewSecurity;
1095
+ if ($[14] !== auditLogQuery.data || $[15] !== auditQuery.data || $[16] !== metrics || $[17] !== metricsQuery.data || $[18] !== navigate || $[19] !== statsQuery.data || $[20] !== subscriptionsQuery.data || $[21] !== t) {
1096
+ functions = Array.isArray(statsQuery.data?.functions) ? statsQuery.data.functions : [];
1097
+ subscriptions = subscriptionsQuery.data ?? null;
1098
+ let t202;
1099
+ if ($[40] !== auditLogQuery.data) {
1100
+ t202 = Array.isArray(auditLogQuery.data?.entries) ? auditLogQuery.data.entries : [];
1101
+ $[40] = auditLogQuery.data;
1102
+ $[41] = t202;
1103
+ } else {
1104
+ t202 = $[41];
1105
+ }
1106
+ activity = t202;
1107
+ performanceCount = metricsQuery.data === void 0 || statsQuery.data === void 0 ? null : deriveInsights(metrics, functions).length;
1108
+ securityCount = Array.isArray(auditQuery.data?.findings) ? auditQuery.data.findings.length : null;
1109
+ let t212;
1110
+ if ($[42] !== navigate) {
1111
+ t212 = () => {
1112
+ fireAndForget(navigate({
1113
+ to: "/security"
1114
+ }));
1115
+ };
1116
+ $[42] = navigate;
1117
+ $[43] = t212;
1118
+ } else {
1119
+ t212 = $[43];
1120
+ }
1121
+ viewSecurity = t212;
1122
+ let t222;
1123
+ if ($[44] !== navigate) {
1124
+ t222 = () => {
1125
+ fireAndForget(navigate({
1126
+ to: "/insights"
1127
+ }));
1128
+ };
1129
+ $[44] = navigate;
1130
+ $[45] = t222;
1131
+ } else {
1132
+ t222 = $[45];
1133
+ }
1134
+ viewPerformance = t222;
778
1135
  const requestSeries = bucketSeries(metrics?.history, "calls");
779
1136
  const errorSeries = bucketSeries(metrics?.history, "errors");
780
1137
  const avgLatency = averageLatencyMs(functions);
781
- let t162;
782
- if ($[27] !== functions) {
783
- t162 = Math.max(0, ...functions.map(_temp4));
784
- $[27] = functions;
785
- $[28] = t162;
786
- } else {
787
- t162 = $[28];
788
- }
789
- const maxLatency = t162;
1138
+ const maxLatency = Math.max(0, ...functions.map(_temp3));
790
1139
  const cache = metrics?.cache;
791
- let t172;
792
- if ($[29] !== cache) {
793
- t172 = cache != null && cache.hits + cache.misses > 0 ? Math.round(cache.hits / (cache.hits + cache.misses) * 100) : null;
794
- $[29] = cache;
795
- $[30] = t172;
1140
+ let t232;
1141
+ if ($[46] !== cache) {
1142
+ t232 = cache != null && cache.hits + cache.misses > 0 ? Math.round(cache.hits / (cache.hits + cache.misses) * 100) : null;
1143
+ $[46] = cache;
1144
+ $[47] = t232;
796
1145
  } else {
797
- t172 = $[30];
1146
+ t232 = $[47];
798
1147
  }
799
- cacheHitRate = t172;
800
- t14 = "flex flex-col gap-6";
801
- t15 = "lunora-home";
802
- t10 = "grid gap-3 sm:grid-cols-2 xl:grid-cols-4";
803
- t11 = "home-health";
804
- const t182 = seriesDelta(requestSeries);
805
- let t192;
806
- if ($[31] !== t) {
807
- t192 = t("Requests");
808
- $[31] = t;
809
- $[32] = t192;
1148
+ cacheHitRate = t232;
1149
+ t18 = "flex flex-col gap-6";
1150
+ t19 = "lunora-home";
1151
+ t14 = "grid gap-3 sm:grid-cols-2 xl:grid-cols-4";
1152
+ t15 = "home-health";
1153
+ const t242 = seriesDelta(requestSeries);
1154
+ let t252;
1155
+ if ($[48] !== t) {
1156
+ t252 = t("Requests");
1157
+ $[48] = t;
1158
+ $[49] = t252;
810
1159
  } else {
811
- t192 = $[32];
1160
+ t252 = $[49];
812
1161
  }
813
- const t202 = metrics?.requests ?? 0;
814
- let t212;
815
- if ($[33] !== t202) {
816
- t212 = t202.toLocaleString();
817
- $[33] = t202;
818
- $[34] = t212;
1162
+ const t262 = metrics?.requests ?? 0;
1163
+ let t272;
1164
+ if ($[50] !== t262) {
1165
+ t272 = t262.toLocaleString();
1166
+ $[50] = t262;
1167
+ $[51] = t272;
819
1168
  } else {
820
- t212 = $[34];
1169
+ t272 = $[51];
821
1170
  }
822
- if ($[35] !== requestSeries || $[36] !== t182 || $[37] !== t192 || $[38] !== t212) {
823
- t12 = /* @__PURE__ */ jsxDEV(StatCard, {
824
- delta: t182,
825
- label: t192,
1171
+ if ($[52] !== requestSeries || $[53] !== t242 || $[54] !== t252 || $[55] !== t272) {
1172
+ t16 = /* @__PURE__ */ jsxDEV(StatCard, {
1173
+ delta: t242,
1174
+ label: t252,
826
1175
  trend: requestSeries,
827
- value: t212
1176
+ value: t272
828
1177
  }, void 0, false);
829
- $[35] = requestSeries;
830
- $[36] = t182;
831
- $[37] = t192;
832
- $[38] = t212;
833
- $[39] = t12;
1178
+ $[52] = requestSeries;
1179
+ $[53] = t242;
1180
+ $[54] = t252;
1181
+ $[55] = t272;
1182
+ $[56] = t16;
834
1183
  } else {
835
- t12 = $[39];
1184
+ t16 = $[56];
836
1185
  }
837
- const t222 = seriesDelta(errorSeries, false);
838
- let t232;
839
- if ($[40] !== t) {
840
- t232 = t("Errors");
841
- $[40] = t;
842
- $[41] = t232;
1186
+ const t282 = seriesDelta(errorSeries, false);
1187
+ let t292;
1188
+ if ($[57] !== t) {
1189
+ t292 = t("Errors");
1190
+ $[57] = t;
1191
+ $[58] = t292;
843
1192
  } else {
844
- t232 = $[41];
1193
+ t292 = $[58];
845
1194
  }
846
- const t242 = metrics?.errors ?? 0;
847
- let t252;
848
- if ($[42] !== t242) {
849
- t252 = t242.toLocaleString();
850
- $[42] = t242;
851
- $[43] = t252;
1195
+ const t302 = metrics?.errors ?? 0;
1196
+ let t312;
1197
+ if ($[59] !== t302) {
1198
+ t312 = t302.toLocaleString();
1199
+ $[59] = t302;
1200
+ $[60] = t312;
852
1201
  } else {
853
- t252 = $[43];
1202
+ t312 = $[60];
854
1203
  }
855
- if ($[44] !== errorSeries || $[45] !== t222 || $[46] !== t232 || $[47] !== t252) {
856
- t13 = /* @__PURE__ */ jsxDEV(StatCard, {
857
- delta: t222,
858
- label: t232,
1204
+ if ($[61] !== errorSeries || $[62] !== t282 || $[63] !== t292 || $[64] !== t312) {
1205
+ t17 = /* @__PURE__ */ jsxDEV(StatCard, {
1206
+ delta: t282,
1207
+ label: t292,
859
1208
  trend: errorSeries,
860
- value: t252
1209
+ value: t312
861
1210
  }, void 0, false);
862
- $[44] = errorSeries;
863
- $[45] = t222;
864
- $[46] = t232;
865
- $[47] = t252;
866
- $[48] = t13;
1211
+ $[61] = errorSeries;
1212
+ $[62] = t282;
1213
+ $[63] = t292;
1214
+ $[64] = t312;
1215
+ $[65] = t17;
867
1216
  } else {
868
- t13 = $[48];
1217
+ t17 = $[65];
869
1218
  }
870
1219
  T0 = StatCard;
871
- if ($[49] !== maxLatency || $[50] !== t) {
872
- t7 = maxLatency > 0 ? `${t("max")} ${formatMs(maxLatency)}` : void 0;
873
- $[49] = maxLatency;
874
- $[50] = t;
875
- $[51] = t7;
1220
+ if ($[66] !== maxLatency || $[67] !== t) {
1221
+ t11 = maxLatency > 0 ? `${t("max")} ${formatMs(maxLatency)}` : void 0;
1222
+ $[66] = maxLatency;
1223
+ $[67] = t;
1224
+ $[68] = t11;
876
1225
  } else {
877
- t7 = $[51];
1226
+ t11 = $[68];
878
1227
  }
879
- if ($[52] !== t) {
880
- t8 = t("Avg latency");
881
- $[52] = t;
882
- $[53] = t8;
1228
+ if ($[69] !== t) {
1229
+ t12 = t("Avg latency");
1230
+ $[69] = t;
1231
+ $[70] = t12;
883
1232
  } else {
884
- t8 = $[53];
1233
+ t12 = $[70];
885
1234
  }
886
- t9 = avgLatency === null ? "—" : formatMs(avgLatency);
887
- $[10] = functions;
888
- $[11] = metrics?.cache;
889
- $[12] = metrics?.errors;
890
- $[13] = metrics?.history;
891
- $[14] = metrics?.requests;
892
- $[15] = t;
893
- $[16] = T0;
894
- $[17] = cacheHitRate;
895
- $[18] = t10;
896
- $[19] = t11;
897
- $[20] = t12;
898
- $[21] = t13;
899
- $[22] = t14;
900
- $[23] = t15;
901
- $[24] = t7;
902
- $[25] = t8;
903
- $[26] = t9;
904
- } else {
905
- T0 = $[16];
906
- cacheHitRate = $[17];
907
- t10 = $[18];
908
- t11 = $[19];
909
- t12 = $[20];
910
- t13 = $[21];
911
- t14 = $[22];
912
- t15 = $[23];
913
- t7 = $[24];
914
- t8 = $[25];
915
- t9 = $[26];
1235
+ t13 = avgLatency === null ? "—" : formatMs(avgLatency);
1236
+ $[14] = auditLogQuery.data;
1237
+ $[15] = auditQuery.data;
1238
+ $[16] = metrics;
1239
+ $[17] = metricsQuery.data;
1240
+ $[18] = navigate;
1241
+ $[19] = statsQuery.data;
1242
+ $[20] = subscriptionsQuery.data;
1243
+ $[21] = t;
1244
+ $[22] = T0;
1245
+ $[23] = activity;
1246
+ $[24] = cacheHitRate;
1247
+ $[25] = functions;
1248
+ $[26] = performanceCount;
1249
+ $[27] = securityCount;
1250
+ $[28] = subscriptions;
1251
+ $[29] = t11;
1252
+ $[30] = t12;
1253
+ $[31] = t13;
1254
+ $[32] = t14;
1255
+ $[33] = t15;
1256
+ $[34] = t16;
1257
+ $[35] = t17;
1258
+ $[36] = t18;
1259
+ $[37] = t19;
1260
+ $[38] = viewPerformance;
1261
+ $[39] = viewSecurity;
1262
+ } else {
1263
+ T0 = $[22];
1264
+ activity = $[23];
1265
+ cacheHitRate = $[24];
1266
+ functions = $[25];
1267
+ performanceCount = $[26];
1268
+ securityCount = $[27];
1269
+ subscriptions = $[28];
1270
+ t11 = $[29];
1271
+ t12 = $[30];
1272
+ t13 = $[31];
1273
+ t14 = $[32];
1274
+ t15 = $[33];
1275
+ t16 = $[34];
1276
+ t17 = $[35];
1277
+ t18 = $[36];
1278
+ t19 = $[37];
1279
+ viewPerformance = $[38];
1280
+ viewSecurity = $[39];
916
1281
  }
917
- let t16;
918
- if ($[54] !== T0 || $[55] !== t7 || $[56] !== t8 || $[57] !== t9) {
919
- t16 = /* @__PURE__ */ jsxDEV(T0, {
920
- footer: t7,
921
- label: t8,
922
- value: t9
1282
+ let t20;
1283
+ if ($[71] !== T0 || $[72] !== t11 || $[73] !== t12 || $[74] !== t13) {
1284
+ t20 = /* @__PURE__ */ jsxDEV(T0, {
1285
+ footer: t11,
1286
+ label: t12,
1287
+ value: t13
923
1288
  }, void 0, false);
924
- $[54] = T0;
925
- $[55] = t7;
926
- $[56] = t8;
927
- $[57] = t9;
928
- $[58] = t16;
1289
+ $[71] = T0;
1290
+ $[72] = t11;
1291
+ $[73] = t12;
1292
+ $[74] = t13;
1293
+ $[75] = t20;
929
1294
  } else {
930
- t16 = $[58];
1295
+ t20 = $[75];
931
1296
  }
932
- let t17;
933
- if ($[59] !== cacheHitRate || $[60] !== t) {
934
- t17 = cacheHitRate === null ? void 0 : `${String(cacheHitRate)}% ${t("cache hit")}`;
935
- $[59] = cacheHitRate;
936
- $[60] = t;
937
- $[61] = t17;
1297
+ let t21;
1298
+ if ($[76] !== cacheHitRate || $[77] !== t) {
1299
+ t21 = cacheHitRate === null ? void 0 : `${String(cacheHitRate)}% ${t("cache hit")}`;
1300
+ $[76] = cacheHitRate;
1301
+ $[77] = t;
1302
+ $[78] = t21;
938
1303
  } else {
939
- t17 = $[61];
1304
+ t21 = $[78];
940
1305
  }
941
- let t18;
942
- if ($[62] !== t) {
943
- t18 = t("Database size");
944
- $[62] = t;
945
- $[63] = t18;
1306
+ let t22;
1307
+ if ($[79] !== t) {
1308
+ t22 = t("Database size");
1309
+ $[79] = t;
1310
+ $[80] = t22;
946
1311
  } else {
947
- t18 = $[63];
1312
+ t22 = $[80];
948
1313
  }
949
- const t19 = metrics?.databaseSize ?? null;
950
- let t20;
951
- if ($[64] !== t19) {
952
- t20 = formatBytes(t19);
953
- $[64] = t19;
954
- $[65] = t20;
1314
+ const t23 = metrics?.databaseSize ?? null;
1315
+ let t24;
1316
+ if ($[81] !== t23) {
1317
+ t24 = formatBytes(t23);
1318
+ $[81] = t23;
1319
+ $[82] = t24;
955
1320
  } else {
956
- t20 = $[65];
1321
+ t24 = $[82];
957
1322
  }
958
- let t21;
959
- if ($[66] !== t17 || $[67] !== t18 || $[68] !== t20) {
960
- t21 = /* @__PURE__ */ jsxDEV(StatCard, {
961
- footer: t17,
962
- label: t18,
963
- value: t20
1323
+ let t25;
1324
+ if ($[83] !== t21 || $[84] !== t22 || $[85] !== t24) {
1325
+ t25 = /* @__PURE__ */ jsxDEV(StatCard, {
1326
+ footer: t21,
1327
+ label: t22,
1328
+ value: t24
964
1329
  }, void 0, false);
965
- $[66] = t17;
966
- $[67] = t18;
967
- $[68] = t20;
968
- $[69] = t21;
1330
+ $[83] = t21;
1331
+ $[84] = t22;
1332
+ $[85] = t24;
1333
+ $[86] = t25;
969
1334
  } else {
970
- t21 = $[69];
1335
+ t25 = $[86];
971
1336
  }
972
- let t22;
973
- if ($[70] !== t10 || $[71] !== t11 || $[72] !== t12 || $[73] !== t13 || $[74] !== t16 || $[75] !== t21) {
974
- t22 = /* @__PURE__ */ jsxDEV("div", {
975
- className: t10,
976
- "data-testid": t11,
977
- children: [t12, t13, t16, t21]
1337
+ let t26;
1338
+ if ($[87] !== t14 || $[88] !== t15 || $[89] !== t16 || $[90] !== t17 || $[91] !== t20 || $[92] !== t25) {
1339
+ t26 = /* @__PURE__ */ jsxDEV("div", {
1340
+ className: t14,
1341
+ "data-testid": t15,
1342
+ children: [t16, t17, t20, t25]
978
1343
  }, void 0, true);
979
- $[70] = t10;
980
- $[71] = t11;
981
- $[72] = t12;
982
- $[73] = t13;
983
- $[74] = t16;
984
- $[75] = t21;
985
- $[76] = t22;
986
- } else {
987
- t22 = $[76];
988
- }
989
- let t23;
990
- if ($[77] !== functions) {
991
- t23 = /* @__PURE__ */ jsxDEV("div", {
1344
+ $[87] = t14;
1345
+ $[88] = t15;
1346
+ $[89] = t16;
1347
+ $[90] = t17;
1348
+ $[91] = t20;
1349
+ $[92] = t25;
1350
+ $[93] = t26;
1351
+ } else {
1352
+ t26 = $[93];
1353
+ }
1354
+ let t27;
1355
+ if ($[94] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
1356
+ t27 = /* @__PURE__ */ jsxDEV(BindingsOverview, {}, void 0, false);
1357
+ $[94] = t27;
1358
+ } else {
1359
+ t27 = $[94];
1360
+ }
1361
+ let t28;
1362
+ if ($[95] !== functions) {
1363
+ t28 = /* @__PURE__ */ jsxDEV("div", {
992
1364
  className: "lg:col-span-2",
993
1365
  children: /* @__PURE__ */ jsxDEV(TopFunctionsCard, {
994
1366
  functions
995
1367
  }, void 0, false)
996
1368
  }, void 0, false);
997
- $[77] = functions;
998
- $[78] = t23;
1369
+ $[95] = functions;
1370
+ $[96] = t28;
999
1371
  } else {
1000
- t23 = $[78];
1372
+ t28 = $[96];
1001
1373
  }
1002
- let t24;
1003
- if ($[79] !== subscriptions) {
1004
- t24 = /* @__PURE__ */ jsxDEV(LiveConnectionsCard, {
1374
+ let t29;
1375
+ if ($[97] !== subscriptions) {
1376
+ t29 = /* @__PURE__ */ jsxDEV(LiveConnectionsCard, {
1005
1377
  subs: subscriptions
1006
1378
  }, void 0, false);
1007
- $[79] = subscriptions;
1008
- $[80] = t24;
1379
+ $[97] = subscriptions;
1380
+ $[98] = t29;
1009
1381
  } else {
1010
- t24 = $[80];
1382
+ t29 = $[98];
1011
1383
  }
1012
- let t25;
1013
- if ($[81] !== activity) {
1014
- t25 = /* @__PURE__ */ jsxDEV(RecentActivityCard, {
1384
+ let t30;
1385
+ if ($[99] !== activity) {
1386
+ t30 = /* @__PURE__ */ jsxDEV(RecentActivityCard, {
1015
1387
  entries: activity
1016
1388
  }, void 0, false);
1017
- $[81] = activity;
1018
- $[82] = t25;
1389
+ $[99] = activity;
1390
+ $[100] = t30;
1019
1391
  } else {
1020
- t25 = $[82];
1392
+ t30 = $[100];
1021
1393
  }
1022
- let t26;
1023
- if ($[83] !== t24 || $[84] !== t25) {
1024
- t26 = /* @__PURE__ */ jsxDEV("div", {
1394
+ let t31;
1395
+ if ($[101] !== t29 || $[102] !== t30) {
1396
+ t31 = /* @__PURE__ */ jsxDEV("div", {
1025
1397
  className: "flex flex-col gap-3",
1026
- children: [t24, t25]
1398
+ children: [t29, t30]
1027
1399
  }, void 0, true);
1028
- $[83] = t24;
1029
- $[84] = t25;
1030
- $[85] = t26;
1400
+ $[101] = t29;
1401
+ $[102] = t30;
1402
+ $[103] = t31;
1031
1403
  } else {
1032
- t26 = $[85];
1404
+ t31 = $[103];
1033
1405
  }
1034
- let t27;
1035
- if ($[86] !== t23 || $[87] !== t26) {
1036
- t27 = /* @__PURE__ */ jsxDEV("div", {
1406
+ let t32;
1407
+ if ($[104] !== t28 || $[105] !== t31) {
1408
+ t32 = /* @__PURE__ */ jsxDEV("div", {
1037
1409
  className: "grid gap-3 lg:grid-cols-3",
1038
- children: [t23, t26]
1410
+ children: [t28, t31]
1039
1411
  }, void 0, true);
1040
- $[86] = t23;
1041
- $[87] = t26;
1042
- $[88] = t27;
1412
+ $[104] = t28;
1413
+ $[105] = t31;
1414
+ $[106] = t32;
1043
1415
  } else {
1044
- t27 = $[88];
1416
+ t32 = $[106];
1045
1417
  }
1046
- let t28;
1047
- if ($[89] !== t) {
1048
- t28 = t("Advisors");
1049
- $[89] = t;
1050
- $[90] = t28;
1418
+ let t33;
1419
+ if ($[107] !== t) {
1420
+ t33 = t("Advisors");
1421
+ $[107] = t;
1422
+ $[108] = t33;
1051
1423
  } else {
1052
- t28 = $[90];
1424
+ t33 = $[108];
1053
1425
  }
1054
- let t29;
1055
- if ($[91] !== t28) {
1056
- t29 = /* @__PURE__ */ jsxDEV("h2", {
1426
+ let t34;
1427
+ if ($[109] !== t33) {
1428
+ t34 = /* @__PURE__ */ jsxDEV("h2", {
1057
1429
  className: "text-sm font-semibold tracking-tight text-foreground",
1058
- children: t28
1430
+ children: t33
1059
1431
  }, void 0, false);
1060
- $[91] = t28;
1061
- $[92] = t29;
1432
+ $[109] = t33;
1433
+ $[110] = t34;
1062
1434
  } else {
1063
- t29 = $[92];
1435
+ t34 = $[110];
1064
1436
  }
1065
- let t30;
1066
- if ($[93] !== performanceCount || $[94] !== securityCount || $[95] !== t || $[96] !== viewPerformance || $[97] !== viewSecurity) {
1067
- t30 = securityCount === 0 && performanceCount === 0 ? /* @__PURE__ */ jsxDEV(EmptyState, {
1437
+ let t35;
1438
+ if ($[111] !== performanceCount || $[112] !== securityCount || $[113] !== t || $[114] !== viewPerformance || $[115] !== viewSecurity) {
1439
+ t35 = securityCount === 0 && performanceCount === 0 ? /* @__PURE__ */ jsxDEV(EmptyState, {
1068
1440
  description: t("No security or performance issues detected."),
1069
1441
  icon: /* @__PURE__ */ jsxDEV("svg", {
1070
1442
  "aria-hidden": "true",
@@ -1096,159 +1468,153 @@ const HomePanel = (t0) => {
1096
1468
  title: t("Performance issues")
1097
1469
  }, void 0, false)]
1098
1470
  }, void 0, true);
1099
- $[93] = performanceCount;
1100
- $[94] = securityCount;
1101
- $[95] = t;
1102
- $[96] = viewPerformance;
1103
- $[97] = viewSecurity;
1104
- $[98] = t30;
1471
+ $[111] = performanceCount;
1472
+ $[112] = securityCount;
1473
+ $[113] = t;
1474
+ $[114] = viewPerformance;
1475
+ $[115] = viewSecurity;
1476
+ $[116] = t35;
1105
1477
  } else {
1106
- t30 = $[98];
1478
+ t35 = $[116];
1107
1479
  }
1108
- let t31;
1109
- if ($[99] !== t29 || $[100] !== t30) {
1110
- t31 = /* @__PURE__ */ jsxDEV("section", {
1480
+ let t36;
1481
+ if ($[117] !== t34 || $[118] !== t35) {
1482
+ t36 = /* @__PURE__ */ jsxDEV("section", {
1111
1483
  className: "flex flex-col gap-3",
1112
1484
  "data-testid": "home-advisors",
1113
- children: [t29, t30]
1485
+ children: [t34, t35]
1114
1486
  }, void 0, true);
1115
- $[99] = t29;
1116
- $[100] = t30;
1117
- $[101] = t31;
1487
+ $[117] = t34;
1488
+ $[118] = t35;
1489
+ $[119] = t36;
1118
1490
  } else {
1119
- t31 = $[101];
1491
+ t36 = $[119];
1120
1492
  }
1121
- let t32;
1122
- if ($[102] !== t) {
1123
- t32 = t("Get connected");
1124
- $[102] = t;
1125
- $[103] = t32;
1493
+ let t37;
1494
+ if ($[120] !== t) {
1495
+ t37 = t("Get connected");
1496
+ $[120] = t;
1497
+ $[121] = t37;
1126
1498
  } else {
1127
- t32 = $[103];
1499
+ t37 = $[121];
1128
1500
  }
1129
- let t33;
1130
- if ($[104] !== t32) {
1131
- t33 = /* @__PURE__ */ jsxDEV("h2", {
1501
+ let t38;
1502
+ if ($[122] !== t37) {
1503
+ t38 = /* @__PURE__ */ jsxDEV("h2", {
1132
1504
  className: "text-sm font-semibold tracking-tight text-foreground",
1133
- children: t32
1505
+ children: t37
1134
1506
  }, void 0, false);
1135
- $[104] = t32;
1136
- $[105] = t33;
1507
+ $[122] = t37;
1508
+ $[123] = t38;
1137
1509
  } else {
1138
- t33 = $[105];
1510
+ t38 = $[123];
1139
1511
  }
1140
- let t34;
1141
- if ($[106] !== t) {
1142
- t34 = t("Client SDK");
1143
- $[106] = t;
1144
- $[107] = t34;
1512
+ let t39;
1513
+ if ($[124] !== t) {
1514
+ t39 = t("Client SDK");
1515
+ $[124] = t;
1516
+ $[125] = t39;
1145
1517
  } else {
1146
- t34 = $[107];
1518
+ t39 = $[125];
1147
1519
  }
1148
- let t35;
1149
- if ($[108] !== t34) {
1150
- t35 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1520
+ let t40;
1521
+ if ($[126] !== t39) {
1522
+ t40 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1151
1523
  command: "npm i @lunora/client",
1152
- label: t34
1524
+ label: t39
1153
1525
  }, void 0, false);
1154
- $[108] = t34;
1155
- $[109] = t35;
1526
+ $[126] = t39;
1527
+ $[127] = t40;
1156
1528
  } else {
1157
- t35 = $[109];
1529
+ t40 = $[127];
1158
1530
  }
1159
- let t36;
1160
- if ($[110] !== t) {
1161
- t36 = t("React");
1162
- $[110] = t;
1163
- $[111] = t36;
1531
+ let t41;
1532
+ if ($[128] !== t) {
1533
+ t41 = t("React");
1534
+ $[128] = t;
1535
+ $[129] = t41;
1164
1536
  } else {
1165
- t36 = $[111];
1537
+ t41 = $[129];
1166
1538
  }
1167
- let t37;
1168
- if ($[112] !== t36) {
1169
- t37 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1539
+ let t42;
1540
+ if ($[130] !== t41) {
1541
+ t42 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1170
1542
  command: "npm i @lunora/react",
1171
- label: t36
1543
+ label: t41
1172
1544
  }, void 0, false);
1173
- $[112] = t36;
1174
- $[113] = t37;
1545
+ $[130] = t41;
1546
+ $[131] = t42;
1175
1547
  } else {
1176
- t37 = $[113];
1548
+ t42 = $[131];
1177
1549
  }
1178
- let t38;
1179
- if ($[114] !== t) {
1180
- t38 = t("CLI");
1181
- $[114] = t;
1182
- $[115] = t38;
1550
+ let t43;
1551
+ if ($[132] !== t) {
1552
+ t43 = t("CLI");
1553
+ $[132] = t;
1554
+ $[133] = t43;
1183
1555
  } else {
1184
- t38 = $[115];
1556
+ t43 = $[133];
1185
1557
  }
1186
- let t39;
1187
- if ($[116] !== t38) {
1188
- t39 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1558
+ let t44;
1559
+ if ($[134] !== t43) {
1560
+ t44 = /* @__PURE__ */ jsxDEV(ConnectCard, {
1189
1561
  command: "lunora dev",
1190
- label: t38
1562
+ label: t43
1191
1563
  }, void 0, false);
1192
- $[116] = t38;
1193
- $[117] = t39;
1564
+ $[134] = t43;
1565
+ $[135] = t44;
1194
1566
  } else {
1195
- t39 = $[117];
1567
+ t44 = $[135];
1196
1568
  }
1197
- let t40;
1198
- if ($[118] !== t35 || $[119] !== t37 || $[120] !== t39) {
1199
- t40 = /* @__PURE__ */ jsxDEV("div", {
1569
+ let t45;
1570
+ if ($[136] !== t40 || $[137] !== t42 || $[138] !== t44) {
1571
+ t45 = /* @__PURE__ */ jsxDEV("div", {
1200
1572
  className: "grid gap-3 sm:grid-cols-3",
1201
- children: [t35, t37, t39]
1573
+ children: [t40, t42, t44]
1202
1574
  }, void 0, true);
1203
- $[118] = t35;
1204
- $[119] = t37;
1205
- $[120] = t39;
1206
- $[121] = t40;
1575
+ $[136] = t40;
1576
+ $[137] = t42;
1577
+ $[138] = t44;
1578
+ $[139] = t45;
1207
1579
  } else {
1208
- t40 = $[121];
1580
+ t45 = $[139];
1209
1581
  }
1210
- let t41;
1211
- if ($[122] !== t33 || $[123] !== t40) {
1212
- t41 = /* @__PURE__ */ jsxDEV("section", {
1582
+ let t46;
1583
+ if ($[140] !== t38 || $[141] !== t45) {
1584
+ t46 = /* @__PURE__ */ jsxDEV("section", {
1213
1585
  className: "flex flex-col gap-3",
1214
1586
  "data-testid": "home-get-connected",
1215
- children: [t33, t40]
1587
+ children: [t38, t45]
1216
1588
  }, void 0, true);
1217
- $[122] = t33;
1218
- $[123] = t40;
1219
- $[124] = t41;
1220
- } else {
1221
- t41 = $[124];
1222
- }
1223
- let t42;
1224
- if ($[125] !== t14 || $[126] !== t15 || $[127] !== t22 || $[128] !== t27 || $[129] !== t31 || $[130] !== t41) {
1225
- t42 = /* @__PURE__ */ jsxDEV("div", {
1226
- className: t14,
1227
- "data-testid": t15,
1228
- children: [t22, t27, t31, t41]
1589
+ $[140] = t38;
1590
+ $[141] = t45;
1591
+ $[142] = t46;
1592
+ } else {
1593
+ t46 = $[142];
1594
+ }
1595
+ let t47;
1596
+ if ($[143] !== t18 || $[144] !== t19 || $[145] !== t26 || $[146] !== t32 || $[147] !== t36 || $[148] !== t46) {
1597
+ t47 = /* @__PURE__ */ jsxDEV("div", {
1598
+ className: t18,
1599
+ "data-testid": t19,
1600
+ children: [t26, t27, t32, t36, t46]
1229
1601
  }, void 0, true);
1230
- $[125] = t14;
1231
- $[126] = t15;
1232
- $[127] = t22;
1233
- $[128] = t27;
1234
- $[129] = t31;
1235
- $[130] = t41;
1236
- $[131] = t42;
1602
+ $[143] = t18;
1603
+ $[144] = t19;
1604
+ $[145] = t26;
1605
+ $[146] = t32;
1606
+ $[147] = t36;
1607
+ $[148] = t46;
1608
+ $[149] = t47;
1237
1609
  } else {
1238
- t42 = $[131];
1610
+ t47 = $[149];
1239
1611
  }
1240
- return t42;
1612
+ return t47;
1241
1613
  };
1242
- function _temp(value, index) {
1243
- return {
1244
- index,
1245
- value
1246
- };
1247
- }
1248
- function _temp2(a, b) {
1614
+ function _temp(a, b) {
1249
1615
  return b.calls - a.calls;
1250
1616
  }
1251
- function _temp3(function_) {
1617
+ function _temp2(function_) {
1252
1618
  return /* @__PURE__ */ jsxDEV("div", {
1253
1619
  className: "grid grid-cols-[1fr_auto_auto_auto] items-center gap-4 px-4 py-2 text-[13px]",
1254
1620
  children: [/* @__PURE__ */ jsxDEV("span", {
@@ -1266,8 +1632,8 @@ function _temp3(function_) {
1266
1632
  }, void 0, false)]
1267
1633
  }, function_.path, true);
1268
1634
  }
1269
- function _temp4(function_) {
1635
+ function _temp3(function_) {
1270
1636
  return function_.maxDurationMs;
1271
1637
  }
1272
1638
 
1273
- export { HomePanel };
1639
+ export { HomePanel as H, useStudioFeatures as u };