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

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