@lunora/studio 1.0.0-alpha.11 → 1.0.0-alpha.13

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 (35) hide show
  1. package/dist/index.d.ts +4 -3
  2. package/dist/index.js +24 -24
  3. package/dist/mount.d.ts +1 -1
  4. package/dist/mount.js +1 -1
  5. package/dist/packem_shared/{ADMIN_FUNCTIONS-DjXgvJb6.js → ADMIN_FUNCTIONS-CZJCZ4c7.js} +1 -0
  6. package/dist/packem_shared/{ApiDocsPanel-yVSGHK3H.js → ApiDocsPanel-yEz0fiof.js} +1 -1
  7. package/dist/packem_shared/{ApiTab-rwttyQ1-.js → ApiTab-DdubReQI.js} +1 -1
  8. package/dist/packem_shared/{AuditPanel-SRilxyg0.js → AuditPanel-CE5ofjCc.js} +1 -1
  9. package/dist/packem_shared/{DataBrowser-B4v_9GiU.js → DataBrowser-DpL8U-Nf.js} +1 -1
  10. package/dist/packem_shared/{ExportImportPanel-NtZVqbOj.js → ExportImportPanel-ChsSUCYZ.js} +1 -1
  11. package/dist/packem_shared/{FileBrowser-0pCpdKPE.js → FileBrowser-DsRBnVhZ.js} +1 -1
  12. package/dist/packem_shared/{FunctionRunner-7NH3KcTg.js → FunctionRunner-D4cZ6fuA.js} +1 -1
  13. package/dist/packem_shared/{FunctionStatsPanel-n-6FrbOH.js → FunctionStatsPanel-BVelWgNv.js} +1 -1
  14. package/dist/packem_shared/{HealthPanel-Dpr6KTmV.js → HealthPanel-CxUVKfvo.js} +1 -1
  15. package/dist/packem_shared/{HomePanel-CpFLsa64.js → HomePanel-tfqpZxuu.js} +1 -1
  16. package/dist/packem_shared/{InsightsPanel-BchgeeRx.js → InsightsPanel-DNg3K9XN.js} +1 -1
  17. package/dist/packem_shared/{LogsPanel-DsPnKZ95.js → LogsPanel-B4LoSRj0.js} +1 -1
  18. package/dist/packem_shared/{MailPanel-Bmg781UW.js → MailPanel-CcpdyWYs.js} +1 -1
  19. package/dist/packem_shared/{MetricsPanel-DaE8ZXrf.js → MetricsPanel-CxoyWbNb.js} +1 -1
  20. package/dist/packem_shared/{MigrationsPanel-CaUpce-G.js → MigrationsPanel-DGwJGWDA.js} +1 -1
  21. package/dist/packem_shared/{PitrPanel-LJGNP_IX.js → PitrPanel-CKUzyyHi.js} +1 -1
  22. package/dist/packem_shared/{SchemaViewer-Bam6ylvw.js → SchemaViewer-RclXFo9Q.js} +1 -1
  23. package/dist/packem_shared/{SecurityAdvisorPanel-PAx712Bd.js → SecurityAdvisorPanel-Dqql1Z5O.js} +1 -1
  24. package/dist/packem_shared/{SettingsPanel-C4tufQD5.js → SettingsPanel-D5iTY0YE.js} +1 -1
  25. package/dist/packem_shared/{SqlEditorPanel-D5wMIxcg.js → SqlEditorPanel-Dj-In-B3.js} +2 -2
  26. package/dist/packem_shared/Studio-VWvKNOw4.js +33 -0
  27. package/dist/packem_shared/{StudioApp-g8j3V6vA.js → StudioApp-BhQ6T2pn.js} +1 -1
  28. package/dist/packem_shared/{TableEditor-0TYRqi6t.js → TableEditor-BY8bTpCl.js} +2 -2
  29. package/dist/packem_shared/{app.d-Nbhpihxv.d.ts → app.d-BVJFkXyj.d.ts} +1 -1
  30. package/dist/packem_shared/{sql-editor-panel-Smfl_FDF.js → sql-editor-panel-CMdxstu5.js} +1 -1
  31. package/dist/packem_shared/{studio-DRWW__L9.js → studio-D8ry3tJR.js} +727 -535
  32. package/dist/packem_shared/{table-editor-CiyJi0Nm.js → table-editor-CWx68ZCg.js} +1 -1
  33. package/dist/standalone/studio.js +194 -194
  34. package/package.json +2 -2
  35. package/dist/packem_shared/Studio-BFg10lBc.js +0 -33
@@ -20,43 +20,43 @@ import { B as Button } from './button-BhsN2uZH.js';
20
20
  import { Dialog } from '@base-ui/react/dialog';
21
21
  import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
22
22
  import { S as Skeleton } from './reference-view-B4E49Lip.js';
23
- import { InsightsPanel } from './InsightsPanel-BchgeeRx.js';
23
+ import { InsightsPanel } from './InsightsPanel-DNg3K9XN.js';
24
24
  import { a as CardContent, C as Card, b as CardHeader, c as CardTitle, d as CardDescription } from './card-DURq3ElK.js';
25
25
  import { E as EmptyState } from './empty-state-DY_oe0k6.js';
26
26
  import { T as Table, a as TableHeader, b as TableRow, c as TableHead, d as TableBody, e as TableCell } from './table-_RzNvy3R.js';
27
27
  import { u as useAdminQuery, b as useClientQuery } from './use-admin-query-BkbdNFNz.js';
28
- import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-DjXgvJb6.js';
29
- import SecurityAdvisorPanel from './SecurityAdvisorPanel-PAx712Bd.js';
28
+ import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-CZJCZ4c7.js';
29
+ import SecurityAdvisorPanel from './SecurityAdvisorPanel-Dqql1Z5O.js';
30
30
  import { createAnalyticsSqlClient } from '@lunora/bindings/analytics';
31
31
  import { e as errorMessage, f as fireAndForget, h as formatCell, b as formatTimestamp, g as copyToClipboard, c as callOptions, a as adminRef } from './internal-rXJEAhXS.js';
32
- import ApiTab from './ApiTab-rwttyQ1-.js';
32
+ import ApiTab from './ApiTab-DdubReQI.js';
33
33
  import { useLunora } from '@lunora/react';
34
34
  import { useAutoRefresh } from './DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js';
35
35
  import useDebounced from './useDebounced-Dxncpg6z.js';
36
36
  import { L as Label } from './label-D8ykjn5J.js';
37
37
  import { M as ModalShell } from './grid-features-CzUfqgsM.js';
38
- import { v as validateDataViewSearch, T as TableEditor } from './table-editor-CiyJi0Nm.js';
39
- import { ExportImportPanel } from './ExportImportPanel-NtZVqbOj.js';
40
- import { MigrationsPanel } from './MigrationsPanel-CaUpce-G.js';
41
- import { PitrPanel } from './PitrPanel-LJGNP_IX.js';
42
- import { FunctionRunner } from './FunctionRunner-7NH3KcTg.js';
43
- import { FunctionStatsPanel } from './FunctionStatsPanel-n-6FrbOH.js';
44
- import { HomePanel } from './HomePanel-CpFLsa64.js';
45
- import { AuditPanel } from './AuditPanel-SRilxyg0.js';
38
+ import { v as validateDataViewSearch, T as TableEditor } from './table-editor-CWx68ZCg.js';
39
+ import { ExportImportPanel } from './ExportImportPanel-ChsSUCYZ.js';
40
+ import { MigrationsPanel } from './MigrationsPanel-DGwJGWDA.js';
41
+ import { PitrPanel } from './PitrPanel-CKUzyyHi.js';
42
+ import { T as Textarea } from './textarea-D3gaCU_-.js';
43
+ import { FunctionRunner } from './FunctionRunner-D4cZ6fuA.js';
44
+ import { FunctionStatsPanel } from './FunctionStatsPanel-BVelWgNv.js';
45
+ import { HomePanel } from './HomePanel-tfqpZxuu.js';
46
+ import { AuditPanel } from './AuditPanel-CE5ofjCc.js';
46
47
  import { C as CLOUDFLARE_OBSERVABILITY_URL } from './cf-links-2cktDedA.js';
47
- import { LogsPanel } from './LogsPanel-DsPnKZ95.js';
48
- import { MailPanel } from './MailPanel-Bmg781UW.js';
48
+ import { LogsPanel } from './LogsPanel-B4LoSRj0.js';
49
+ import { MailPanel } from './MailPanel-CcpdyWYs.js';
49
50
  import { ConfirmButton } from './ConfirmButton-C2eVi2Qv.js';
50
51
  import { ScheduledJobs } from './ScheduledJobs-BWNwIN3I.js';
51
52
  import { ShardInput } from './ShardInput-gx_DZXXn.js';
52
53
  import { L as LiveError } from './live-status-FZ0psC1z.js';
53
- import { T as Textarea } from './textarea-D3gaCU_-.js';
54
- import { u as usePersistedList, A as Alert, a as SqlResultChart, n as newId, S as SqlEditorPanel } from './sql-editor-panel-Smfl_FDF.js';
55
- import { HealthPanel } from './HealthPanel-Dpr6KTmV.js';
56
- import { MetricsPanel } from './MetricsPanel-DaE8ZXrf.js';
57
- import { SchemaViewer } from './SchemaViewer-Bam6ylvw.js';
58
- import { SettingsPanel } from './SettingsPanel-C4tufQD5.js';
59
- import { FileBrowser } from './FileBrowser-0pCpdKPE.js';
54
+ import { u as usePersistedList, A as Alert, a as SqlResultChart, n as newId, S as SqlEditorPanel } from './sql-editor-panel-CMdxstu5.js';
55
+ import { HealthPanel } from './HealthPanel-CxUVKfvo.js';
56
+ import { MetricsPanel } from './MetricsPanel-CxoyWbNb.js';
57
+ import { SchemaViewer } from './SchemaViewer-RclXFo9Q.js';
58
+ import { SettingsPanel } from './SettingsPanel-D5iTY0YE.js';
59
+ import { FileBrowser } from './FileBrowser-DsRBnVhZ.js';
60
60
  import { StudioI18nProvider } from './StudioI18nProvider-B-tDCZIi.js';
61
61
  import { CommandPalette, openCommandPalette } from './CommandPalette-BtgkBzZI.js';
62
62
 
@@ -4459,6 +4459,169 @@ const UsersPanel = ({
4459
4459
  }, void 0, true);
4460
4460
  };
4461
4461
 
4462
+ const parseContext = (raw) => {
4463
+ const trimmed = raw.trim();
4464
+ if (trimmed.length === 0) {
4465
+ return {
4466
+ context: void 0,
4467
+ error: null
4468
+ };
4469
+ }
4470
+ try {
4471
+ const parsed = JSON.parse(trimmed);
4472
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
4473
+ return {
4474
+ context: void 0,
4475
+ error: "Targeting context must be a JSON object."
4476
+ };
4477
+ }
4478
+ return {
4479
+ context: parsed,
4480
+ error: null
4481
+ };
4482
+ } catch {
4483
+ return {
4484
+ context: void 0,
4485
+ error: "Targeting context is not valid JSON."
4486
+ };
4487
+ }
4488
+ };
4489
+ const CONTEXT_PLACEHOLDER = '{ "targetingKey": "user-123", "plan": "premium" }';
4490
+ const formatValue$1 = (evaluation) => {
4491
+ if (evaluation.type === "object") {
4492
+ return JSON.stringify(evaluation.value);
4493
+ }
4494
+ return String(evaluation.value);
4495
+ };
4496
+ const FlagsPanel = ({
4497
+ initialShardKey = ""
4498
+ }) => {
4499
+ const t = useT();
4500
+ const [contextText, setContextText] = useState("");
4501
+ const {
4502
+ context,
4503
+ error: contextError
4504
+ } = parseContext(contextText);
4505
+ const args = useMemo(() => context === void 0 ? {} : {
4506
+ context
4507
+ }, [context]);
4508
+ const {
4509
+ data,
4510
+ error,
4511
+ liveError
4512
+ } = useAdminQuery(ADMIN_FUNCTIONS.listFlags, args, {
4513
+ live: true,
4514
+ shardKey: initialShardKey
4515
+ });
4516
+ const loaded = data !== void 0;
4517
+ const configured = data?.configured ?? false;
4518
+ const flags = useMemo(() => Array.isArray(data?.flags) ? [...data.flags].toSorted((a, b) => a.key.localeCompare(b.key)) : [], [data]);
4519
+ let body;
4520
+ if (loaded && !configured) {
4521
+ body = /* @__PURE__ */ jsxDEV(EmptyState, {
4522
+ description: t("No @lunora/flags provider is wired in this deployment. Add lunora/flags.ts with defineFlags({ provider }) to gate code paths on feature flags."),
4523
+ testId: "flags-unconfigured",
4524
+ title: t("No flags provider configured")
4525
+ }, void 0, false);
4526
+ } else if (loaded && flags.length === 0) {
4527
+ body = /* @__PURE__ */ jsxDEV(EmptyState, {
4528
+ description: t('A flags provider is configured, but no handler reads a flag yet. Call ctx.flags.boolean("key", false) in a query, mutation, or action.'),
4529
+ testId: "flags-empty",
4530
+ title: t("No flags read")
4531
+ }, void 0, false);
4532
+ } else {
4533
+ body = /* @__PURE__ */ jsxDEV(Card, {
4534
+ className: "overflow-hidden py-0",
4535
+ children: /* @__PURE__ */ jsxDEV(CardContent, {
4536
+ className: "px-0",
4537
+ children: /* @__PURE__ */ jsxDEV(Table, {
4538
+ "data-testid": "flags-table",
4539
+ children: [/* @__PURE__ */ jsxDEV(TableHeader, {
4540
+ children: /* @__PURE__ */ jsxDEV(TableRow, {
4541
+ children: [/* @__PURE__ */ jsxDEV(TableHead, {
4542
+ children: t("Key")
4543
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
4544
+ children: t("Type")
4545
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
4546
+ children: t("Value")
4547
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
4548
+ children: t("Reason")
4549
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
4550
+ children: t("Variant")
4551
+ }, void 0, false)]
4552
+ }, void 0, true)
4553
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableBody, {
4554
+ children: flags.map((flag) => /* @__PURE__ */ jsxDEV(TableRow, {
4555
+ "data-testid": `flags-row-${flag.key}`,
4556
+ children: [/* @__PURE__ */ jsxDEV(TableCell, {
4557
+ className: "font-mono text-xs",
4558
+ children: flag.key
4559
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
4560
+ className: "font-mono text-xs text-muted-foreground",
4561
+ children: flag.type
4562
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
4563
+ className: "font-mono text-xs",
4564
+ children: formatValue$1(flag)
4565
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
4566
+ children: flag.errorCode === void 0 ? /* @__PURE__ */ jsxDEV("span", {
4567
+ className: "font-mono text-xs text-muted-foreground",
4568
+ children: flag.reason ?? "—"
4569
+ }, void 0, false) : /* @__PURE__ */ jsxDEV(Badge, {
4570
+ "data-testid": `flags-error-${flag.key}`,
4571
+ variant: "destructive",
4572
+ children: flag.errorCode
4573
+ }, void 0, false)
4574
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
4575
+ className: "font-mono text-xs text-muted-foreground",
4576
+ children: flag.variant ?? "—"
4577
+ }, void 0, false)]
4578
+ }, flag.key, true))
4579
+ }, void 0, false)]
4580
+ }, void 0, true)
4581
+ }, void 0, false)
4582
+ }, void 0, false);
4583
+ }
4584
+ return /* @__PURE__ */ jsxDEV("div", {
4585
+ className: "flex flex-col gap-6",
4586
+ "data-testid": "lunora-flags-panel",
4587
+ children: [error !== null && /* @__PURE__ */ jsxDEV("p", {
4588
+ className: "text-sm text-destructive",
4589
+ "data-testid": "flags-error",
4590
+ role: "alert",
4591
+ children: error
4592
+ }, void 0, false), /* @__PURE__ */ jsxDEV("p", {
4593
+ className: "text-sm text-muted-foreground",
4594
+ children: t('Feature flags are read in code with ctx.flags.<type>("key", default). They evaluate through the OpenFeature provider configured in lunora/flags.ts; edit the targeting context below to see how each flag resolves for a given audience.')
4595
+ }, void 0, false), /* @__PURE__ */ jsxDEV("div", {
4596
+ className: "flex flex-col gap-2",
4597
+ children: [/* @__PURE__ */ jsxDEV(Label, {
4598
+ htmlFor: "flags-targeting-context",
4599
+ children: t("Targeting context (JSON)")
4600
+ }, void 0, false), /* @__PURE__ */ jsxDEV(Textarea, {
4601
+ className: "font-mono text-xs",
4602
+ "data-testid": "flags-context-input",
4603
+ id: "flags-targeting-context",
4604
+ onChange: (event) => {
4605
+ setContextText(event.target.value);
4606
+ },
4607
+ placeholder: CONTEXT_PLACEHOLDER,
4608
+ rows: 3,
4609
+ value: contextText
4610
+ }, void 0, false), contextError !== null && /* @__PURE__ */ jsxDEV("p", {
4611
+ className: "text-xs text-destructive",
4612
+ "data-testid": "flags-context-error",
4613
+ role: "alert",
4614
+ children: t(contextError)
4615
+ }, void 0, false), liveError !== void 0 && /* @__PURE__ */ jsxDEV("p", {
4616
+ className: "text-xs text-amber-600 dark:text-amber-500",
4617
+ "data-testid": "flags-live-error",
4618
+ role: "alert",
4619
+ children: t("Live updates unavailable; showing the last evaluation.")
4620
+ }, void 0, false)]
4621
+ }, void 0, true), body]
4622
+ }, void 0, true);
4623
+ };
4624
+
4462
4625
  const DestinationRow = (t0) => {
4463
4626
  const $ = c(23);
4464
4627
  const {
@@ -8559,6 +8722,7 @@ const WorkflowsPanel = () => {
8559
8722
 
8560
8723
  const STUDIO_FEATURES = adminRef(ADMIN_FUNCTIONS.studioFeatures);
8561
8724
  const DEFAULT_STUDIO_FEATURES = {
8725
+ flags: true,
8562
8726
  mail: true,
8563
8727
  payments: true,
8564
8728
  queues: true,
@@ -8574,6 +8738,7 @@ const coerceFeatures = (raw) => {
8574
8738
  const record = raw;
8575
8739
  const flag = (key) => typeof record[key] === "boolean" ? record[key] : true;
8576
8740
  return {
8741
+ flags: flag("flags"),
8577
8742
  mail: flag("mail"),
8578
8743
  payments: flag("payments"),
8579
8744
  queues: flag("queues"),
@@ -8642,6 +8807,9 @@ const TAB_ICONS = {
8642
8807
  files: /* @__PURE__ */ jsxDEV("path", {
8643
8808
  d: "M4 7a2 2 0 0 1 2-2h3l2 2.5h7a2 2 0 0 1 2 2V18a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V7Z"
8644
8809
  }, void 0, false),
8810
+ flags: /* @__PURE__ */ jsxDEV("path", {
8811
+ d: "M6 21V4m0 0h11l-2 3 2 3H6"
8812
+ }, void 0, false),
8645
8813
  functions: /* @__PURE__ */ jsxDEV("path", {
8646
8814
  d: "m9 8-4 4 4 4m6-8 4 4-4 4"
8647
8815
  }, void 0, false),
@@ -8738,13 +8906,14 @@ const NAV_GROUPS = [{
8738
8906
  tabs: ["security", "rls", "permissions", "insights"]
8739
8907
  }, {
8740
8908
  key: "operations",
8741
- tabs: ["schedule", "mail", "drains", "payments"]
8909
+ tabs: ["schedule", "mail", "drains", "payments", "flags"]
8742
8910
  }, {
8743
8911
  key: "settings",
8744
8912
  tabs: ["settings"]
8745
8913
  }];
8746
8914
  const TAB_FEATURE = {
8747
8915
  files: "storage",
8916
+ flags: "flags",
8748
8917
  mail: "mail",
8749
8918
  payments: "payments",
8750
8919
  queues: "queues",
@@ -8783,7 +8952,7 @@ const TabIcon = (t0) => {
8783
8952
  }
8784
8953
  return t2;
8785
8954
  };
8786
- const TABS = ["home", "data", "sql", "functions", "api", "workflows", "queues", "schema", "migrations", "vectors", "export", "pitr", "users", "organizations", "authSessions", "authConfig", "files", "storageRules", "dashboards", "metrics", "analytics", "health", "security", "rls", "permissions", "insights", "logs", "realtime", "mail", "payments", "audit", "schedule", "drains", "settings"];
8955
+ const TABS = ["home", "data", "sql", "functions", "api", "workflows", "queues", "schema", "migrations", "vectors", "export", "pitr", "users", "organizations", "authSessions", "authConfig", "files", "storageRules", "dashboards", "metrics", "analytics", "health", "security", "rls", "permissions", "insights", "logs", "realtime", "mail", "payments", "audit", "schedule", "drains", "flags", "settings"];
8787
8956
  const FULL_HEIGHT_TABS = /* @__PURE__ */ new Set(["api", "data", "sql"]);
8788
8957
  const tabFromPathname = (pathname) => {
8789
8958
  const slug = pathname.split("/").findLast(Boolean) ?? "";
@@ -9390,7 +9559,7 @@ const StudioSidebar = (t0) => {
9390
9559
  return t9;
9391
9560
  };
9392
9561
  const StudioLayout = () => {
9393
- const $ = c(270);
9562
+ const $ = c(276);
9394
9563
  const t = useT();
9395
9564
  const navigate = useNavigate();
9396
9565
  let t0;
@@ -9533,7 +9702,7 @@ const StudioLayout = () => {
9533
9702
  }
9534
9703
  let t15;
9535
9704
  if ($[31] !== t) {
9536
- t15 = t("Functions");
9705
+ t15 = t("Flags");
9537
9706
  $[31] = t;
9538
9707
  $[32] = t15;
9539
9708
  } else {
@@ -9541,7 +9710,7 @@ const StudioLayout = () => {
9541
9710
  }
9542
9711
  let t16;
9543
9712
  if ($[33] !== t) {
9544
- t16 = t("Health");
9713
+ t16 = t("Functions");
9545
9714
  $[33] = t;
9546
9715
  $[34] = t16;
9547
9716
  } else {
@@ -9549,7 +9718,7 @@ const StudioLayout = () => {
9549
9718
  }
9550
9719
  let t17;
9551
9720
  if ($[35] !== t) {
9552
- t17 = t("Home");
9721
+ t17 = t("Health");
9553
9722
  $[35] = t;
9554
9723
  $[36] = t17;
9555
9724
  } else {
@@ -9557,7 +9726,7 @@ const StudioLayout = () => {
9557
9726
  }
9558
9727
  let t18;
9559
9728
  if ($[37] !== t) {
9560
- t18 = t("Performance");
9729
+ t18 = t("Home");
9561
9730
  $[37] = t;
9562
9731
  $[38] = t18;
9563
9732
  } else {
@@ -9565,7 +9734,7 @@ const StudioLayout = () => {
9565
9734
  }
9566
9735
  let t19;
9567
9736
  if ($[39] !== t) {
9568
- t19 = t("Logs");
9737
+ t19 = t("Performance");
9569
9738
  $[39] = t;
9570
9739
  $[40] = t19;
9571
9740
  } else {
@@ -9573,7 +9742,7 @@ const StudioLayout = () => {
9573
9742
  }
9574
9743
  let t20;
9575
9744
  if ($[41] !== t) {
9576
- t20 = t("Metrics");
9745
+ t20 = t("Logs");
9577
9746
  $[41] = t;
9578
9747
  $[42] = t20;
9579
9748
  } else {
@@ -9581,7 +9750,7 @@ const StudioLayout = () => {
9581
9750
  }
9582
9751
  let t21;
9583
9752
  if ($[43] !== t) {
9584
- t21 = t("Migrations");
9753
+ t21 = t("Metrics");
9585
9754
  $[43] = t;
9586
9755
  $[44] = t21;
9587
9756
  } else {
@@ -9589,7 +9758,7 @@ const StudioLayout = () => {
9589
9758
  }
9590
9759
  let t22;
9591
9760
  if ($[45] !== t) {
9592
- t22 = t("Organizations");
9761
+ t22 = t("Migrations");
9593
9762
  $[45] = t;
9594
9763
  $[46] = t22;
9595
9764
  } else {
@@ -9597,7 +9766,7 @@ const StudioLayout = () => {
9597
9766
  }
9598
9767
  let t23;
9599
9768
  if ($[47] !== t) {
9600
- t23 = t("Time Travel");
9769
+ t23 = t("Organizations");
9601
9770
  $[47] = t;
9602
9771
  $[48] = t23;
9603
9772
  } else {
@@ -9605,7 +9774,7 @@ const StudioLayout = () => {
9605
9774
  }
9606
9775
  let t24;
9607
9776
  if ($[49] !== t) {
9608
- t24 = t("Mail");
9777
+ t24 = t("Time Travel");
9609
9778
  $[49] = t;
9610
9779
  $[50] = t24;
9611
9780
  } else {
@@ -9613,7 +9782,7 @@ const StudioLayout = () => {
9613
9782
  }
9614
9783
  let t25;
9615
9784
  if ($[51] !== t) {
9616
- t25 = t("Payments");
9785
+ t25 = t("Mail");
9617
9786
  $[51] = t;
9618
9787
  $[52] = t25;
9619
9788
  } else {
@@ -9621,7 +9790,7 @@ const StudioLayout = () => {
9621
9790
  }
9622
9791
  let t26;
9623
9792
  if ($[53] !== t) {
9624
- t26 = t("Permissions");
9793
+ t26 = t("Payments");
9625
9794
  $[53] = t;
9626
9795
  $[54] = t26;
9627
9796
  } else {
@@ -9629,7 +9798,7 @@ const StudioLayout = () => {
9629
9798
  }
9630
9799
  let t27;
9631
9800
  if ($[55] !== t) {
9632
- t27 = t("Queues");
9801
+ t27 = t("Permissions");
9633
9802
  $[55] = t;
9634
9803
  $[56] = t27;
9635
9804
  } else {
@@ -9637,7 +9806,7 @@ const StudioLayout = () => {
9637
9806
  }
9638
9807
  let t28;
9639
9808
  if ($[57] !== t) {
9640
- t28 = t("Realtime");
9809
+ t28 = t("Queues");
9641
9810
  $[57] = t;
9642
9811
  $[58] = t28;
9643
9812
  } else {
@@ -9645,7 +9814,7 @@ const StudioLayout = () => {
9645
9814
  }
9646
9815
  let t29;
9647
9816
  if ($[59] !== t) {
9648
- t29 = t("RLS Policies");
9817
+ t29 = t("Realtime");
9649
9818
  $[59] = t;
9650
9819
  $[60] = t29;
9651
9820
  } else {
@@ -9653,7 +9822,7 @@ const StudioLayout = () => {
9653
9822
  }
9654
9823
  let t30;
9655
9824
  if ($[61] !== t) {
9656
- t30 = t("Scheduled");
9825
+ t30 = t("RLS Policies");
9657
9826
  $[61] = t;
9658
9827
  $[62] = t30;
9659
9828
  } else {
@@ -9661,7 +9830,7 @@ const StudioLayout = () => {
9661
9830
  }
9662
9831
  let t31;
9663
9832
  if ($[63] !== t) {
9664
- t31 = t("Schema");
9833
+ t31 = t("Scheduled");
9665
9834
  $[63] = t;
9666
9835
  $[64] = t31;
9667
9836
  } else {
@@ -9669,7 +9838,7 @@ const StudioLayout = () => {
9669
9838
  }
9670
9839
  let t32;
9671
9840
  if ($[65] !== t) {
9672
- t32 = t("Security");
9841
+ t32 = t("Schema");
9673
9842
  $[65] = t;
9674
9843
  $[66] = t32;
9675
9844
  } else {
@@ -9677,7 +9846,7 @@ const StudioLayout = () => {
9677
9846
  }
9678
9847
  let t33;
9679
9848
  if ($[67] !== t) {
9680
- t33 = t("Settings");
9849
+ t33 = t("Security");
9681
9850
  $[67] = t;
9682
9851
  $[68] = t33;
9683
9852
  } else {
@@ -9685,7 +9854,7 @@ const StudioLayout = () => {
9685
9854
  }
9686
9855
  let t34;
9687
9856
  if ($[69] !== t) {
9688
- t34 = t("SQL editor");
9857
+ t34 = t("Settings");
9689
9858
  $[69] = t;
9690
9859
  $[70] = t34;
9691
9860
  } else {
@@ -9693,7 +9862,7 @@ const StudioLayout = () => {
9693
9862
  }
9694
9863
  let t35;
9695
9864
  if ($[71] !== t) {
9696
- t35 = t("Access Rules");
9865
+ t35 = t("SQL editor");
9697
9866
  $[71] = t;
9698
9867
  $[72] = t35;
9699
9868
  } else {
@@ -9701,7 +9870,7 @@ const StudioLayout = () => {
9701
9870
  }
9702
9871
  let t36;
9703
9872
  if ($[73] !== t) {
9704
- t36 = t("Users");
9873
+ t36 = t("Access Rules");
9705
9874
  $[73] = t;
9706
9875
  $[74] = t36;
9707
9876
  } else {
@@ -9709,7 +9878,7 @@ const StudioLayout = () => {
9709
9878
  }
9710
9879
  let t37;
9711
9880
  if ($[75] !== t) {
9712
- t37 = t("Vectors");
9881
+ t37 = t("Users");
9713
9882
  $[75] = t;
9714
9883
  $[76] = t37;
9715
9884
  } else {
@@ -9717,15 +9886,23 @@ const StudioLayout = () => {
9717
9886
  }
9718
9887
  let t38;
9719
9888
  if ($[77] !== t) {
9720
- t38 = t("Workflows");
9889
+ t38 = t("Vectors");
9721
9890
  $[77] = t;
9722
9891
  $[78] = t38;
9723
9892
  } else {
9724
9893
  t38 = $[78];
9725
9894
  }
9726
9895
  let t39;
9727
- if ($[79] !== t10 || $[80] !== t11 || $[81] !== t12 || $[82] !== t13 || $[83] !== t14 || $[84] !== t15 || $[85] !== t16 || $[86] !== t17 || $[87] !== t18 || $[88] !== t19 || $[89] !== t20 || $[90] !== t21 || $[91] !== t22 || $[92] !== t23 || $[93] !== t24 || $[94] !== t25 || $[95] !== t26 || $[96] !== t27 || $[97] !== t28 || $[98] !== t29 || $[99] !== t30 || $[100] !== t31 || $[101] !== t32 || $[102] !== t33 || $[103] !== t34 || $[104] !== t35 || $[105] !== t36 || $[106] !== t37 || $[107] !== t38 || $[108] !== t5 || $[109] !== t6 || $[110] !== t7 || $[111] !== t8 || $[112] !== t9) {
9728
- t39 = {
9896
+ if ($[79] !== t) {
9897
+ t39 = t("Workflows");
9898
+ $[79] = t;
9899
+ $[80] = t39;
9900
+ } else {
9901
+ t39 = $[80];
9902
+ }
9903
+ let t40;
9904
+ if ($[81] !== t10 || $[82] !== t11 || $[83] !== t12 || $[84] !== t13 || $[85] !== t14 || $[86] !== t15 || $[87] !== t16 || $[88] !== t17 || $[89] !== t18 || $[90] !== t19 || $[91] !== t20 || $[92] !== t21 || $[93] !== t22 || $[94] !== t23 || $[95] !== t24 || $[96] !== t25 || $[97] !== t26 || $[98] !== t27 || $[99] !== t28 || $[100] !== t29 || $[101] !== t30 || $[102] !== t31 || $[103] !== t32 || $[104] !== t33 || $[105] !== t34 || $[106] !== t35 || $[107] !== t36 || $[108] !== t37 || $[109] !== t38 || $[110] !== t39 || $[111] !== t5 || $[112] !== t6 || $[113] !== t7 || $[114] !== t8 || $[115] !== t9) {
9905
+ t40 = {
9729
9906
  analytics: t5,
9730
9907
  api: t6,
9731
9908
  audit: t7,
@@ -9736,70 +9913,72 @@ const StudioLayout = () => {
9736
9913
  drains: t12,
9737
9914
  export: t13,
9738
9915
  files: t14,
9739
- functions: t15,
9740
- health: t16,
9741
- home: t17,
9742
- insights: t18,
9743
- logs: t19,
9744
- metrics: t20,
9745
- migrations: t21,
9746
- organizations: t22,
9747
- pitr: t23,
9748
- mail: t24,
9749
- payments: t25,
9750
- permissions: t26,
9751
- queues: t27,
9752
- realtime: t28,
9753
- rls: t29,
9754
- schedule: t30,
9755
- schema: t31,
9756
- security: t32,
9757
- settings: t33,
9758
- sql: t34,
9759
- storageRules: t35,
9760
- users: t36,
9761
- vectors: t37,
9762
- workflows: t38
9916
+ flags: t15,
9917
+ functions: t16,
9918
+ health: t17,
9919
+ home: t18,
9920
+ insights: t19,
9921
+ logs: t20,
9922
+ metrics: t21,
9923
+ migrations: t22,
9924
+ organizations: t23,
9925
+ pitr: t24,
9926
+ mail: t25,
9927
+ payments: t26,
9928
+ permissions: t27,
9929
+ queues: t28,
9930
+ realtime: t29,
9931
+ rls: t30,
9932
+ schedule: t31,
9933
+ schema: t32,
9934
+ security: t33,
9935
+ settings: t34,
9936
+ sql: t35,
9937
+ storageRules: t36,
9938
+ users: t37,
9939
+ vectors: t38,
9940
+ workflows: t39
9763
9941
  };
9764
- $[79] = t10;
9765
- $[80] = t11;
9766
- $[81] = t12;
9767
- $[82] = t13;
9768
- $[83] = t14;
9769
- $[84] = t15;
9770
- $[85] = t16;
9771
- $[86] = t17;
9772
- $[87] = t18;
9773
- $[88] = t19;
9774
- $[89] = t20;
9775
- $[90] = t21;
9776
- $[91] = t22;
9777
- $[92] = t23;
9778
- $[93] = t24;
9779
- $[94] = t25;
9780
- $[95] = t26;
9781
- $[96] = t27;
9782
- $[97] = t28;
9783
- $[98] = t29;
9784
- $[99] = t30;
9785
- $[100] = t31;
9786
- $[101] = t32;
9787
- $[102] = t33;
9788
- $[103] = t34;
9789
- $[104] = t35;
9790
- $[105] = t36;
9791
- $[106] = t37;
9792
- $[107] = t38;
9793
- $[108] = t5;
9794
- $[109] = t6;
9795
- $[110] = t7;
9796
- $[111] = t8;
9797
- $[112] = t9;
9798
- $[113] = t39;
9799
- } else {
9800
- t39 = $[113];
9801
- }
9802
- const tabLabel = t39;
9942
+ $[81] = t10;
9943
+ $[82] = t11;
9944
+ $[83] = t12;
9945
+ $[84] = t13;
9946
+ $[85] = t14;
9947
+ $[86] = t15;
9948
+ $[87] = t16;
9949
+ $[88] = t17;
9950
+ $[89] = t18;
9951
+ $[90] = t19;
9952
+ $[91] = t20;
9953
+ $[92] = t21;
9954
+ $[93] = t22;
9955
+ $[94] = t23;
9956
+ $[95] = t24;
9957
+ $[96] = t25;
9958
+ $[97] = t26;
9959
+ $[98] = t27;
9960
+ $[99] = t28;
9961
+ $[100] = t29;
9962
+ $[101] = t30;
9963
+ $[102] = t31;
9964
+ $[103] = t32;
9965
+ $[104] = t33;
9966
+ $[105] = t34;
9967
+ $[106] = t35;
9968
+ $[107] = t36;
9969
+ $[108] = t37;
9970
+ $[109] = t38;
9971
+ $[110] = t39;
9972
+ $[111] = t5;
9973
+ $[112] = t6;
9974
+ $[113] = t7;
9975
+ $[114] = t8;
9976
+ $[115] = t9;
9977
+ $[116] = t40;
9978
+ } else {
9979
+ t40 = $[116];
9980
+ }
9981
+ const tabLabel = t40;
9803
9982
  const groupLabel = {
9804
9983
  advisors: t("Advisors"),
9805
9984
  auth: t("Auth"),
@@ -9811,386 +9990,396 @@ const StudioLayout = () => {
9811
9990
  settings: t("Settings"),
9812
9991
  storage: t("Storage")
9813
9992
  };
9814
- let t40;
9815
- if ($[114] !== t) {
9816
- t40 = t("Usage and latency from Analytics Engine — request volume, p50/p95, and hot shards.");
9817
- $[114] = t;
9818
- $[115] = t40;
9819
- } else {
9820
- t40 = $[115];
9821
- }
9822
9993
  let t41;
9823
- if ($[116] !== t) {
9824
- t41 = t("Interactive OpenAPI reference and copy-paste snippets for your functions.");
9825
- $[116] = t;
9826
- $[117] = t41;
9994
+ if ($[117] !== t) {
9995
+ t41 = t("Usage and latency from Analytics Engine request volume, p50/p95, and hot shards.");
9996
+ $[117] = t;
9997
+ $[118] = t41;
9827
9998
  } else {
9828
- t41 = $[117];
9999
+ t41 = $[118];
9829
10000
  }
9830
10001
  let t42;
9831
- if ($[118] !== t) {
9832
- t42 = t("A durable log of admin state-changing operations.");
9833
- $[118] = t;
9834
- $[119] = t42;
10002
+ if ($[119] !== t) {
10003
+ t42 = t("Interactive OpenAPI reference and copy-paste snippets for your functions.");
10004
+ $[119] = t;
10005
+ $[120] = t42;
9835
10006
  } else {
9836
- t42 = $[119];
10007
+ t42 = $[120];
9837
10008
  }
9838
10009
  let t43;
9839
- if ($[120] !== t) {
9840
- t43 = t("Enabled plugins and session config (read-only).");
9841
- $[120] = t;
9842
- $[121] = t43;
10010
+ if ($[121] !== t) {
10011
+ t43 = t("A durable log of admin state-changing operations.");
10012
+ $[121] = t;
10013
+ $[122] = t43;
9843
10014
  } else {
9844
- t43 = $[121];
10015
+ t43 = $[122];
9845
10016
  }
9846
10017
  let t44;
9847
- if ($[122] !== t) {
9848
- t44 = t("Browse and revoke active sessions across all users.");
9849
- $[122] = t;
9850
- $[123] = t44;
10018
+ if ($[123] !== t) {
10019
+ t44 = t("Enabled plugins and session config (read-only).");
10020
+ $[123] = t;
10021
+ $[124] = t44;
9851
10022
  } else {
9852
- t44 = $[123];
10023
+ t44 = $[124];
9853
10024
  }
9854
10025
  let t45;
9855
- if ($[124] !== t) {
9856
- t45 = t("Chart widgets backed by saved read-only SQL queries.");
9857
- $[124] = t;
9858
- $[125] = t45;
10026
+ if ($[125] !== t) {
10027
+ t45 = t("Browse and revoke active sessions across all users.");
10028
+ $[125] = t;
10029
+ $[126] = t45;
9859
10030
  } else {
9860
- t45 = $[125];
10031
+ t45 = $[126];
9861
10032
  }
9862
10033
  let t46;
9863
- if ($[126] !== t) {
9864
- t46 = t("Browse and edit rows across your shard and global tables.");
9865
- $[126] = t;
9866
- $[127] = t46;
10034
+ if ($[127] !== t) {
10035
+ t46 = t("Chart widgets backed by saved read-only SQL queries.");
10036
+ $[127] = t;
10037
+ $[128] = t46;
9867
10038
  } else {
9868
- t46 = $[127];
10039
+ t46 = $[128];
9869
10040
  }
9870
10041
  let t47;
9871
- if ($[128] !== t) {
9872
- t47 = t("Forward logs to Logpush, Tail Workers, or a webhook collector.");
9873
- $[128] = t;
9874
- $[129] = t47;
10042
+ if ($[129] !== t) {
10043
+ t47 = t("Browse and edit rows across your shard and global tables.");
10044
+ $[129] = t;
10045
+ $[130] = t47;
9875
10046
  } else {
9876
- t47 = $[129];
10047
+ t47 = $[130];
9877
10048
  }
9878
10049
  let t48;
9879
- if ($[130] !== t) {
9880
- t48 = t("Export a shard to NDJSON, or import rows from it.");
9881
- $[130] = t;
9882
- $[131] = t48;
10050
+ if ($[131] !== t) {
10051
+ t48 = t("Forward logs to Logpush, Tail Workers, or a webhook collector.");
10052
+ $[131] = t;
10053
+ $[132] = t48;
9883
10054
  } else {
9884
- t48 = $[131];
10055
+ t48 = $[132];
9885
10056
  }
9886
10057
  let t49;
9887
- if ($[132] !== t) {
9888
- t49 = t("Browse objects in your R2 storage buckets.");
9889
- $[132] = t;
9890
- $[133] = t49;
10058
+ if ($[133] !== t) {
10059
+ t49 = t("Export a shard to NDJSON, or import rows from it.");
10060
+ $[133] = t;
10061
+ $[134] = t49;
9891
10062
  } else {
9892
- t49 = $[133];
10063
+ t49 = $[134];
9893
10064
  }
9894
10065
  let t50;
9895
- if ($[134] !== t) {
9896
- t50 = t("Run registered queries, mutations, and actions.");
9897
- $[134] = t;
9898
- $[135] = t50;
10066
+ if ($[135] !== t) {
10067
+ t50 = t("Browse objects in your R2 storage buckets.");
10068
+ $[135] = t;
10069
+ $[136] = t50;
9899
10070
  } else {
9900
- t50 = $[135];
10071
+ t50 = $[136];
9901
10072
  }
9902
10073
  let t51;
9903
- if ($[136] !== t) {
9904
- t51 = t("At-a-glance connection, error, and shard signals.");
9905
- $[136] = t;
9906
- $[137] = t51;
10074
+ if ($[137] !== t) {
10075
+ t51 = t("Inspect feature flags and their live evaluation under a targeting context.");
10076
+ $[137] = t;
10077
+ $[138] = t51;
9907
10078
  } else {
9908
- t51 = $[137];
10079
+ t51 = $[138];
9909
10080
  }
9910
10081
  let t52;
9911
- if ($[138] !== t) {
9912
- t52 = t("Connection, health, and advisor summary for your deployment.");
9913
- $[138] = t;
9914
- $[139] = t52;
10082
+ if ($[139] !== t) {
10083
+ t52 = t("Run registered queries, mutations, and actions.");
10084
+ $[139] = t;
10085
+ $[140] = t52;
9915
10086
  } else {
9916
- t52 = $[139];
10087
+ t52 = $[140];
9917
10088
  }
9918
10089
  let t53;
9919
- if ($[140] !== t) {
9920
- t53 = t("Surface slow functions, error spikes, and cache problems.");
9921
- $[140] = t;
9922
- $[141] = t53;
10090
+ if ($[141] !== t) {
10091
+ t53 = t("At-a-glance connection, error, and shard signals.");
10092
+ $[141] = t;
10093
+ $[142] = t53;
9923
10094
  } else {
9924
- t53 = $[141];
10095
+ t53 = $[142];
9925
10096
  }
9926
10097
  let t54;
9927
- if ($[142] !== t) {
9928
- t54 = t("A live stream of recent function logs.");
9929
- $[142] = t;
9930
- $[143] = t54;
10098
+ if ($[143] !== t) {
10099
+ t54 = t("Connection, health, and advisor summary for your deployment.");
10100
+ $[143] = t;
10101
+ $[144] = t54;
9931
10102
  } else {
9932
- t54 = $[143];
10103
+ t54 = $[144];
9933
10104
  }
9934
10105
  let t55;
9935
- if ($[144] !== t) {
9936
- t55 = t("Per-shard health and aggregate metrics.");
9937
- $[144] = t;
9938
- $[145] = t55;
10106
+ if ($[145] !== t) {
10107
+ t55 = t("Surface slow functions, error spikes, and cache problems.");
10108
+ $[145] = t;
10109
+ $[146] = t55;
9939
10110
  } else {
9940
- t55 = $[145];
10111
+ t55 = $[146];
9941
10112
  }
9942
10113
  let t56;
9943
- if ($[146] !== t) {
9944
- t56 = t("Review migration status and run them.");
9945
- $[146] = t;
9946
- $[147] = t56;
10114
+ if ($[147] !== t) {
10115
+ t56 = t("A live stream of recent function logs.");
10116
+ $[147] = t;
10117
+ $[148] = t56;
9947
10118
  } else {
9948
- t56 = $[147];
10119
+ t56 = $[148];
9949
10120
  }
9950
10121
  let t57;
9951
- if ($[148] !== t) {
9952
- t57 = t("Browse and manage organizations, members, and invitations.");
9953
- $[148] = t;
9954
- $[149] = t57;
10122
+ if ($[149] !== t) {
10123
+ t57 = t("Per-shard health and aggregate metrics.");
10124
+ $[149] = t;
10125
+ $[150] = t57;
9955
10126
  } else {
9956
- t57 = $[149];
10127
+ t57 = $[150];
9957
10128
  }
9958
10129
  let t58;
9959
- if ($[150] !== t) {
9960
- t58 = t("Restore a shard to a point in the last 30 days.");
9961
- $[150] = t;
9962
- $[151] = t58;
10130
+ if ($[151] !== t) {
10131
+ t58 = t("Review migration status and run them.");
10132
+ $[151] = t;
10133
+ $[152] = t58;
9963
10134
  } else {
9964
- t58 = $[151];
10135
+ t58 = $[152];
9965
10136
  }
9966
10137
  let t59;
9967
- if ($[152] !== t) {
9968
- t59 = t("Email your app sent, captured in dev.");
9969
- $[152] = t;
9970
- $[153] = t59;
10138
+ if ($[153] !== t) {
10139
+ t59 = t("Browse and manage organizations, members, and invitations.");
10140
+ $[153] = t;
10141
+ $[154] = t59;
9971
10142
  } else {
9972
- t59 = $[153];
10143
+ t59 = $[154];
9973
10144
  }
9974
10145
  let t60;
9975
- if ($[154] !== t) {
9976
- t60 = t("Synced customers, subscriptions, and webhook events.");
9977
- $[154] = t;
9978
- $[155] = t60;
10146
+ if ($[155] !== t) {
10147
+ t60 = t("Restore a shard to a point in the last 30 days.");
10148
+ $[155] = t;
10149
+ $[156] = t60;
9979
10150
  } else {
9980
- t60 = $[155];
10151
+ t60 = $[156];
9981
10152
  }
9982
10153
  let t61;
9983
- if ($[156] !== t) {
9984
- t61 = t("Inspect access policies per table, and probe a function as any identity.");
9985
- $[156] = t;
9986
- $[157] = t61;
10154
+ if ($[157] !== t) {
10155
+ t61 = t("Email your app sent, captured in dev.");
10156
+ $[157] = t;
10157
+ $[158] = t61;
9987
10158
  } else {
9988
- t61 = $[157];
10159
+ t61 = $[158];
9989
10160
  }
9990
10161
  let t62;
9991
- if ($[158] !== t) {
9992
- t62 = t("Inspect declared Cloudflare Queues — their producer bindings, consumer mode, and dead-letter queue.");
9993
- $[158] = t;
9994
- $[159] = t62;
10162
+ if ($[159] !== t) {
10163
+ t62 = t("Synced customers, subscriptions, and webhook events.");
10164
+ $[159] = t;
10165
+ $[160] = t62;
9995
10166
  } else {
9996
- t62 = $[159];
10167
+ t62 = $[160];
9997
10168
  }
9998
10169
  let t63;
9999
- if ($[160] !== t) {
10000
- t63 = t("Active WebSocket subscriptions on this shard.");
10001
- $[160] = t;
10002
- $[161] = t63;
10170
+ if ($[161] !== t) {
10171
+ t63 = t("Inspect access policies per table, and probe a function as any identity.");
10172
+ $[161] = t;
10173
+ $[162] = t63;
10003
10174
  } else {
10004
- t63 = $[161];
10175
+ t63 = $[162];
10005
10176
  }
10006
10177
  let t64;
10007
- if ($[162] !== t) {
10008
- t64 = t("Inspect row-level-security policies and roles, per table.");
10009
- $[162] = t;
10010
- $[163] = t64;
10178
+ if ($[163] !== t) {
10179
+ t64 = t("Inspect declared Cloudflare Queues — their producer bindings, consumer mode, and dead-letter queue.");
10180
+ $[163] = t;
10181
+ $[164] = t64;
10011
10182
  } else {
10012
- t64 = $[163];
10183
+ t64 = $[164];
10013
10184
  }
10014
10185
  let t65;
10015
- if ($[164] !== t) {
10016
- t65 = t("Inspect and cancel scheduled jobs.");
10017
- $[164] = t;
10018
- $[165] = t65;
10186
+ if ($[165] !== t) {
10187
+ t65 = t("Active WebSocket subscriptions on this shard.");
10188
+ $[165] = t;
10189
+ $[166] = t65;
10019
10190
  } else {
10020
- t65 = $[165];
10191
+ t65 = $[166];
10021
10192
  }
10022
10193
  let t66;
10023
- if ($[166] !== t) {
10024
- t66 = t("Inspect each table and its columns.");
10025
- $[166] = t;
10026
- $[167] = t66;
10194
+ if ($[167] !== t) {
10195
+ t66 = t("Inspect row-level-security policies and roles, per table.");
10196
+ $[167] = t;
10197
+ $[168] = t66;
10027
10198
  } else {
10028
- t66 = $[167];
10199
+ t66 = $[168];
10029
10200
  }
10030
10201
  let t67;
10031
- if ($[168] !== t) {
10032
- t67 = t("Review admin gates, credentials, and log redaction.");
10033
- $[168] = t;
10034
- $[169] = t67;
10202
+ if ($[169] !== t) {
10203
+ t67 = t("Inspect and cancel scheduled jobs.");
10204
+ $[169] = t;
10205
+ $[170] = t67;
10035
10206
  } else {
10036
- t67 = $[169];
10207
+ t67 = $[170];
10037
10208
  }
10038
10209
  let t68;
10039
- if ($[170] !== t) {
10040
- t68 = t("Read-only deployment config vars, secrets, and bindings.");
10041
- $[170] = t;
10042
- $[171] = t68;
10210
+ if ($[171] !== t) {
10211
+ t68 = t("Inspect each table and its columns.");
10212
+ $[171] = t;
10213
+ $[172] = t68;
10043
10214
  } else {
10044
- t68 = $[171];
10215
+ t68 = $[172];
10045
10216
  }
10046
10217
  let t69;
10047
- if ($[172] !== t) {
10048
- t69 = t("Run read-only SQL against a shard.");
10049
- $[172] = t;
10050
- $[173] = t69;
10218
+ if ($[173] !== t) {
10219
+ t69 = t("Review admin gates, credentials, and log redaction.");
10220
+ $[173] = t;
10221
+ $[174] = t69;
10051
10222
  } else {
10052
- t69 = $[173];
10223
+ t69 = $[174];
10053
10224
  }
10054
10225
  let t70;
10055
- if ($[174] !== t) {
10056
- t70 = t("Inspect storage access rules per bucket, operation, and key prefix.");
10057
- $[174] = t;
10058
- $[175] = t70;
10226
+ if ($[175] !== t) {
10227
+ t70 = t("Read-only deployment configvars, secrets, and bindings.");
10228
+ $[175] = t;
10229
+ $[176] = t70;
10059
10230
  } else {
10060
- t70 = $[175];
10231
+ t70 = $[176];
10061
10232
  }
10062
10233
  let t71;
10063
- if ($[176] !== t) {
10064
- t71 = t("Manage auth users roles, bans, sessions, and identity.");
10065
- $[176] = t;
10066
- $[177] = t71;
10234
+ if ($[177] !== t) {
10235
+ t71 = t("Run read-only SQL against a shard.");
10236
+ $[177] = t;
10237
+ $[178] = t71;
10067
10238
  } else {
10068
- t71 = $[177];
10239
+ t71 = $[178];
10069
10240
  }
10070
10241
  let t72;
10071
- if ($[178] !== t) {
10072
- t72 = t("Browse Vectorize indexes and run similarity searches.");
10073
- $[178] = t;
10074
- $[179] = t72;
10242
+ if ($[179] !== t) {
10243
+ t72 = t("Inspect storage access rules — per bucket, operation, and key prefix.");
10244
+ $[179] = t;
10245
+ $[180] = t72;
10075
10246
  } else {
10076
- t72 = $[179];
10247
+ t72 = $[180];
10077
10248
  }
10078
10249
  let t73;
10079
- if ($[180] !== t) {
10080
- t73 = t("Inspect declared Cloudflare Workflows and their bindings.");
10081
- $[180] = t;
10082
- $[181] = t73;
10250
+ if ($[181] !== t) {
10251
+ t73 = t("Manage auth users roles, bans, sessions, and identity.");
10252
+ $[181] = t;
10253
+ $[182] = t73;
10083
10254
  } else {
10084
- t73 = $[181];
10255
+ t73 = $[182];
10085
10256
  }
10086
10257
  let t74;
10087
- if ($[182] !== t40 || $[183] !== t41 || $[184] !== t42 || $[185] !== t43 || $[186] !== t44 || $[187] !== t45 || $[188] !== t46 || $[189] !== t47 || $[190] !== t48 || $[191] !== t49 || $[192] !== t50 || $[193] !== t51 || $[194] !== t52 || $[195] !== t53 || $[196] !== t54 || $[197] !== t55 || $[198] !== t56 || $[199] !== t57 || $[200] !== t58 || $[201] !== t59 || $[202] !== t60 || $[203] !== t61 || $[204] !== t62 || $[205] !== t63 || $[206] !== t64 || $[207] !== t65 || $[208] !== t66 || $[209] !== t67 || $[210] !== t68 || $[211] !== t69 || $[212] !== t70 || $[213] !== t71 || $[214] !== t72 || $[215] !== t73) {
10088
- t74 = {
10089
- analytics: t40,
10090
- api: t41,
10091
- audit: t42,
10092
- authConfig: t43,
10093
- authSessions: t44,
10094
- dashboards: t45,
10095
- data: t46,
10096
- drains: t47,
10097
- export: t48,
10098
- files: t49,
10099
- functions: t50,
10100
- health: t51,
10101
- home: t52,
10102
- insights: t53,
10103
- logs: t54,
10104
- metrics: t55,
10105
- migrations: t56,
10106
- organizations: t57,
10107
- pitr: t58,
10108
- mail: t59,
10109
- payments: t60,
10110
- permissions: t61,
10111
- queues: t62,
10112
- realtime: t63,
10113
- rls: t64,
10114
- schedule: t65,
10115
- schema: t66,
10116
- security: t67,
10117
- settings: t68,
10118
- sql: t69,
10119
- storageRules: t70,
10120
- users: t71,
10121
- vectors: t72,
10122
- workflows: t73
10123
- };
10124
- $[182] = t40;
10125
- $[183] = t41;
10126
- $[184] = t42;
10127
- $[185] = t43;
10128
- $[186] = t44;
10129
- $[187] = t45;
10130
- $[188] = t46;
10131
- $[189] = t47;
10132
- $[190] = t48;
10133
- $[191] = t49;
10134
- $[192] = t50;
10135
- $[193] = t51;
10136
- $[194] = t52;
10137
- $[195] = t53;
10138
- $[196] = t54;
10139
- $[197] = t55;
10140
- $[198] = t56;
10141
- $[199] = t57;
10142
- $[200] = t58;
10143
- $[201] = t59;
10144
- $[202] = t60;
10145
- $[203] = t61;
10146
- $[204] = t62;
10147
- $[205] = t63;
10148
- $[206] = t64;
10149
- $[207] = t65;
10150
- $[208] = t66;
10151
- $[209] = t67;
10152
- $[210] = t68;
10153
- $[211] = t69;
10154
- $[212] = t70;
10155
- $[213] = t71;
10156
- $[214] = t72;
10157
- $[215] = t73;
10158
- $[216] = t74;
10159
- } else {
10160
- t74 = $[216];
10161
- }
10162
- const tabDescription = t74;
10258
+ if ($[183] !== t) {
10259
+ t74 = t("Browse Vectorize indexes and run similarity searches.");
10260
+ $[183] = t;
10261
+ $[184] = t74;
10262
+ } else {
10263
+ t74 = $[184];
10264
+ }
10163
10265
  let t75;
10164
- if ($[217] !== navigate) {
10165
- t75 = (event) => {
10266
+ if ($[185] !== t) {
10267
+ t75 = t("Inspect declared Cloudflare Workflows and their bindings.");
10268
+ $[185] = t;
10269
+ $[186] = t75;
10270
+ } else {
10271
+ t75 = $[186];
10272
+ }
10273
+ let t76;
10274
+ if ($[187] !== t41 || $[188] !== t42 || $[189] !== t43 || $[190] !== t44 || $[191] !== t45 || $[192] !== t46 || $[193] !== t47 || $[194] !== t48 || $[195] !== t49 || $[196] !== t50 || $[197] !== t51 || $[198] !== t52 || $[199] !== t53 || $[200] !== t54 || $[201] !== t55 || $[202] !== t56 || $[203] !== t57 || $[204] !== t58 || $[205] !== t59 || $[206] !== t60 || $[207] !== t61 || $[208] !== t62 || $[209] !== t63 || $[210] !== t64 || $[211] !== t65 || $[212] !== t66 || $[213] !== t67 || $[214] !== t68 || $[215] !== t69 || $[216] !== t70 || $[217] !== t71 || $[218] !== t72 || $[219] !== t73 || $[220] !== t74 || $[221] !== t75) {
10275
+ t76 = {
10276
+ analytics: t41,
10277
+ api: t42,
10278
+ audit: t43,
10279
+ authConfig: t44,
10280
+ authSessions: t45,
10281
+ dashboards: t46,
10282
+ data: t47,
10283
+ drains: t48,
10284
+ export: t49,
10285
+ files: t50,
10286
+ flags: t51,
10287
+ functions: t52,
10288
+ health: t53,
10289
+ home: t54,
10290
+ insights: t55,
10291
+ logs: t56,
10292
+ metrics: t57,
10293
+ migrations: t58,
10294
+ organizations: t59,
10295
+ pitr: t60,
10296
+ mail: t61,
10297
+ payments: t62,
10298
+ permissions: t63,
10299
+ queues: t64,
10300
+ realtime: t65,
10301
+ rls: t66,
10302
+ schedule: t67,
10303
+ schema: t68,
10304
+ security: t69,
10305
+ settings: t70,
10306
+ sql: t71,
10307
+ storageRules: t72,
10308
+ users: t73,
10309
+ vectors: t74,
10310
+ workflows: t75
10311
+ };
10312
+ $[187] = t41;
10313
+ $[188] = t42;
10314
+ $[189] = t43;
10315
+ $[190] = t44;
10316
+ $[191] = t45;
10317
+ $[192] = t46;
10318
+ $[193] = t47;
10319
+ $[194] = t48;
10320
+ $[195] = t49;
10321
+ $[196] = t50;
10322
+ $[197] = t51;
10323
+ $[198] = t52;
10324
+ $[199] = t53;
10325
+ $[200] = t54;
10326
+ $[201] = t55;
10327
+ $[202] = t56;
10328
+ $[203] = t57;
10329
+ $[204] = t58;
10330
+ $[205] = t59;
10331
+ $[206] = t60;
10332
+ $[207] = t61;
10333
+ $[208] = t62;
10334
+ $[209] = t63;
10335
+ $[210] = t64;
10336
+ $[211] = t65;
10337
+ $[212] = t66;
10338
+ $[213] = t67;
10339
+ $[214] = t68;
10340
+ $[215] = t69;
10341
+ $[216] = t70;
10342
+ $[217] = t71;
10343
+ $[218] = t72;
10344
+ $[219] = t73;
10345
+ $[220] = t74;
10346
+ $[221] = t75;
10347
+ $[222] = t76;
10348
+ } else {
10349
+ t76 = $[222];
10350
+ }
10351
+ const tabDescription = t76;
10352
+ let t77;
10353
+ if ($[223] !== navigate) {
10354
+ t77 = (event) => {
10166
10355
  fireAndForget(navigate({
10167
10356
  to: `/${event.currentTarget.dataset.tab ?? ""}`
10168
10357
  }));
10169
10358
  };
10170
- $[217] = navigate;
10171
- $[218] = t75;
10359
+ $[223] = navigate;
10360
+ $[224] = t77;
10172
10361
  } else {
10173
- t75 = $[218];
10362
+ t77 = $[224];
10174
10363
  }
10175
- const selectTab = t75;
10176
- let t76;
10177
- let t77;
10178
- if ($[219] !== current || $[220] !== tabLabel) {
10179
- t76 = () => {
10364
+ const selectTab = t77;
10365
+ let t78;
10366
+ let t79;
10367
+ if ($[225] !== current || $[226] !== tabLabel) {
10368
+ t78 = () => {
10180
10369
  if (typeof document !== "undefined") {
10181
10370
  document.title = `${tabLabel[current]} · lunora`;
10182
10371
  }
10183
10372
  };
10184
- t77 = [current, tabLabel];
10185
- $[219] = current;
10186
- $[220] = tabLabel;
10187
- $[221] = t76;
10188
- $[222] = t77;
10373
+ t79 = [current, tabLabel];
10374
+ $[225] = current;
10375
+ $[226] = tabLabel;
10376
+ $[227] = t78;
10377
+ $[228] = t79;
10189
10378
  } else {
10190
- t76 = $[221];
10191
- t77 = $[222];
10379
+ t78 = $[227];
10380
+ t79 = $[228];
10192
10381
  }
10193
- useEffect(t76, t77);
10382
+ useEffect(t78, t79);
10194
10383
  const activeGroup = visibleGroups.find((group_1) => group_1.tabs.includes(current)) ?? NAV_GROUPS[0];
10195
10384
  const commandItems = visibleGroups.flatMap((group_2) => group_2.tabs.map((tab_0) => ({
10196
10385
  group: groupLabel[group_2.key],
@@ -10199,48 +10388,48 @@ const StudioLayout = () => {
10199
10388
  })));
10200
10389
  const chrome = use(StudioChromeContext);
10201
10390
  const connected = chrome !== null && chrome.token !== "";
10202
- let t78;
10203
- if ($[223] !== commandItems) {
10204
- t78 = /* @__PURE__ */ jsxDEV(CommandPalette, {
10391
+ let t80;
10392
+ if ($[229] !== commandItems) {
10393
+ t80 = /* @__PURE__ */ jsxDEV(CommandPalette, {
10205
10394
  items: commandItems
10206
10395
  }, void 0, false);
10207
- $[223] = commandItems;
10208
- $[224] = t78;
10396
+ $[229] = commandItems;
10397
+ $[230] = t80;
10209
10398
  } else {
10210
- t78 = $[224];
10399
+ t80 = $[230];
10211
10400
  }
10212
- let t79;
10213
- if ($[225] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10214
- t79 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
10401
+ let t81;
10402
+ if ($[231] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10403
+ t81 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
10215
10404
  className: "-ms-1"
10216
10405
  }, void 0, false);
10217
- $[225] = t79;
10406
+ $[231] = t81;
10218
10407
  } else {
10219
- t79 = $[225];
10408
+ t81 = $[231];
10220
10409
  }
10221
- let t80;
10222
- if ($[226] !== t) {
10223
- t80 = t("Breadcrumb");
10224
- $[226] = t;
10225
- $[227] = t80;
10410
+ let t82;
10411
+ if ($[232] !== t) {
10412
+ t82 = t("Breadcrumb");
10413
+ $[232] = t;
10414
+ $[233] = t82;
10226
10415
  } else {
10227
- t80 = $[227];
10416
+ t82 = $[233];
10228
10417
  }
10229
- const t81 = groupLabel[activeGroup.key];
10230
- let t82;
10231
- if ($[228] !== t81) {
10232
- t82 = /* @__PURE__ */ jsxDEV("span", {
10418
+ const t83 = groupLabel[activeGroup.key];
10419
+ let t84;
10420
+ if ($[234] !== t83) {
10421
+ t84 = /* @__PURE__ */ jsxDEV("span", {
10233
10422
  className: "text-muted-foreground",
10234
- children: t81
10423
+ children: t83
10235
10424
  }, void 0, false);
10236
- $[228] = t81;
10237
- $[229] = t82;
10425
+ $[234] = t83;
10426
+ $[235] = t84;
10238
10427
  } else {
10239
- t82 = $[229];
10428
+ t84 = $[235];
10240
10429
  }
10241
- let t83;
10242
- if ($[230] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10243
- t83 = /* @__PURE__ */ jsxDEV("svg", {
10430
+ let t85;
10431
+ if ($[236] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10432
+ t85 = /* @__PURE__ */ jsxDEV("svg", {
10244
10433
  "aria-hidden": "true",
10245
10434
  className: "size-3.5 text-muted-foreground/60",
10246
10435
  fill: "none",
@@ -10253,39 +10442,39 @@ const StudioLayout = () => {
10253
10442
  strokeLinejoin: "round"
10254
10443
  }, void 0, false)
10255
10444
  }, void 0, false);
10256
- $[230] = t83;
10445
+ $[236] = t85;
10257
10446
  } else {
10258
- t83 = $[230];
10447
+ t85 = $[236];
10259
10448
  }
10260
- const t84 = tabLabel[current];
10261
- let t85;
10262
- if ($[231] !== t84) {
10263
- t85 = /* @__PURE__ */ jsxDEV("span", {
10449
+ const t86 = tabLabel[current];
10450
+ let t87;
10451
+ if ($[237] !== t86) {
10452
+ t87 = /* @__PURE__ */ jsxDEV("span", {
10264
10453
  className: "font-medium text-foreground",
10265
- children: t84
10454
+ children: t86
10266
10455
  }, void 0, false);
10267
- $[231] = t84;
10268
- $[232] = t85;
10456
+ $[237] = t86;
10457
+ $[238] = t87;
10269
10458
  } else {
10270
- t85 = $[232];
10459
+ t87 = $[238];
10271
10460
  }
10272
- let t86;
10273
- if ($[233] !== t80 || $[234] !== t82 || $[235] !== t85) {
10274
- t86 = /* @__PURE__ */ jsxDEV("nav", {
10275
- "aria-label": t80,
10461
+ let t88;
10462
+ if ($[239] !== t82 || $[240] !== t84 || $[241] !== t87) {
10463
+ t88 = /* @__PURE__ */ jsxDEV("nav", {
10464
+ "aria-label": t82,
10276
10465
  className: "flex items-center gap-1.5 text-[13px]",
10277
- children: [t82, t83, t85]
10466
+ children: [t84, t85, t87]
10278
10467
  }, void 0, true);
10279
- $[233] = t80;
10280
- $[234] = t82;
10281
- $[235] = t85;
10282
- $[236] = t86;
10468
+ $[239] = t82;
10469
+ $[240] = t84;
10470
+ $[241] = t87;
10471
+ $[242] = t88;
10283
10472
  } else {
10284
- t86 = $[236];
10473
+ t88 = $[242];
10285
10474
  }
10286
- let t87;
10287
- if ($[237] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10288
- t87 = /* @__PURE__ */ jsxDEV("svg", {
10475
+ let t89;
10476
+ if ($[243] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10477
+ t89 = /* @__PURE__ */ jsxDEV("svg", {
10289
10478
  "aria-hidden": "true",
10290
10479
  className: "size-3.5",
10291
10480
  fill: "none",
@@ -10301,164 +10490,164 @@ const StudioLayout = () => {
10301
10490
  strokeLinecap: "round"
10302
10491
  }, void 0, false)]
10303
10492
  }, void 0, true);
10304
- $[237] = t87;
10493
+ $[243] = t89;
10305
10494
  } else {
10306
- t87 = $[237];
10495
+ t89 = $[243];
10307
10496
  }
10308
- let t88;
10309
- if ($[238] !== t) {
10310
- t88 = t("Search…");
10311
- $[238] = t;
10312
- $[239] = t88;
10497
+ let t90;
10498
+ if ($[244] !== t) {
10499
+ t90 = t("Search…");
10500
+ $[244] = t;
10501
+ $[245] = t90;
10313
10502
  } else {
10314
- t88 = $[239];
10503
+ t90 = $[245];
10315
10504
  }
10316
- let t89;
10317
- if ($[240] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10318
- t89 = /* @__PURE__ */ jsxDEV("kbd", {
10505
+ let t91;
10506
+ if ($[246] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10507
+ t91 = /* @__PURE__ */ jsxDEV("kbd", {
10319
10508
  className: "ms-auto rounded border border-border bg-background px-1 font-sans text-[10px] text-muted-foreground",
10320
10509
  children: "⌘K"
10321
10510
  }, void 0, false);
10322
- $[240] = t89;
10511
+ $[246] = t91;
10323
10512
  } else {
10324
- t89 = $[240];
10513
+ t91 = $[246];
10325
10514
  }
10326
- let t90;
10327
- if ($[241] !== t88) {
10328
- t90 = /* @__PURE__ */ jsxDEV("button", {
10515
+ let t92;
10516
+ if ($[247] !== t90) {
10517
+ t92 = /* @__PURE__ */ jsxDEV("button", {
10329
10518
  className: "mx-auto hidden h-8 w-72 items-center gap-2 rounded-lg border border-border bg-muted/40 px-3 text-xs text-muted-foreground transition-colors hover:bg-muted md:flex",
10330
10519
  "data-testid": "dash-app-search",
10331
10520
  onClick: openCommandPalette,
10332
10521
  type: "button",
10333
- children: [t87, t88, t89]
10522
+ children: [t89, t90, t91]
10334
10523
  }, void 0, true);
10335
- $[241] = t88;
10336
- $[242] = t90;
10524
+ $[247] = t90;
10525
+ $[248] = t92;
10337
10526
  } else {
10338
- t90 = $[242];
10527
+ t92 = $[248];
10339
10528
  }
10340
- let t91;
10341
- if ($[243] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10342
- t91 = /* @__PURE__ */ jsxDEV("div", {
10529
+ let t93;
10530
+ if ($[249] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10531
+ t93 = /* @__PURE__ */ jsxDEV("div", {
10343
10532
  className: "ms-auto flex items-center gap-1.5 md:ms-0",
10344
10533
  children: /* @__PURE__ */ jsxDEV(ThemeToggle, {}, void 0, false)
10345
10534
  }, void 0, false);
10346
- $[243] = t91;
10535
+ $[249] = t93;
10347
10536
  } else {
10348
- t91 = $[243];
10537
+ t93 = $[249];
10349
10538
  }
10350
- let t92;
10351
- if ($[244] !== t86 || $[245] !== t90) {
10352
- t92 = /* @__PURE__ */ jsxDEV("header", {
10539
+ let t94;
10540
+ if ($[250] !== t88 || $[251] !== t92) {
10541
+ t94 = /* @__PURE__ */ jsxDEV("header", {
10353
10542
  className: "flex h-11 shrink-0 items-center gap-2 border-b border-border px-4",
10354
10543
  "data-testid": "dash-app-header",
10355
- children: [t79, t86, t90, t91]
10544
+ children: [t81, t88, t92, t93]
10356
10545
  }, void 0, true);
10357
- $[244] = t86;
10358
- $[245] = t90;
10359
- $[246] = t92;
10546
+ $[250] = t88;
10547
+ $[251] = t92;
10548
+ $[252] = t94;
10360
10549
  } else {
10361
- t92 = $[246];
10550
+ t94 = $[252];
10362
10551
  }
10363
- let t93;
10364
- if ($[247] !== chrome?.rulesInstalled) {
10365
- t93 = chrome?.rulesInstalled === false && /* @__PURE__ */ jsxDEV(RulesBanner, {}, void 0, false);
10366
- $[247] = chrome?.rulesInstalled;
10367
- $[248] = t93;
10368
- } else {
10369
- t93 = $[248];
10370
- }
10371
- const t94 = `dash-tab-${current}`;
10372
- const t95 = fullHeight ? "flex min-w-0 flex-1 flex-col overflow-hidden" : "min-w-0 flex-1 overflow-auto p-6";
10373
- const t96 = tabLabel[current];
10374
- let t97;
10375
- if ($[249] !== t || $[250] !== t96) {
10376
- t97 = t("{title} failed", {
10377
- title: t96
10378
- });
10379
- $[249] = t;
10380
- $[250] = t96;
10381
- $[251] = t97;
10552
+ let t95;
10553
+ if ($[253] !== chrome?.rulesInstalled) {
10554
+ t95 = chrome?.rulesInstalled === false && /* @__PURE__ */ jsxDEV(RulesBanner, {}, void 0, false);
10555
+ $[253] = chrome?.rulesInstalled;
10556
+ $[254] = t95;
10382
10557
  } else {
10383
- t97 = $[251];
10558
+ t95 = $[254];
10384
10559
  }
10560
+ const t96 = `dash-tab-${current}`;
10561
+ const t97 = fullHeight ? "flex min-w-0 flex-1 flex-col overflow-hidden" : "min-w-0 flex-1 overflow-auto p-6";
10385
10562
  const t98 = tabLabel[current];
10386
10563
  let t99;
10387
- if ($[252] !== t) {
10388
- t99 = t("Try again");
10389
- $[252] = t;
10390
- $[253] = t99;
10391
- } else {
10392
- t99 = $[253];
10393
- }
10394
- let t100;
10395
- if ($[254] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10396
- t100 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
10397
- $[254] = t100;
10564
+ if ($[255] !== t || $[256] !== t98) {
10565
+ t99 = t("{title} failed", {
10566
+ title: t98
10567
+ });
10568
+ $[255] = t;
10569
+ $[256] = t98;
10570
+ $[257] = t99;
10398
10571
  } else {
10399
- t100 = $[254];
10572
+ t99 = $[257];
10400
10573
  }
10574
+ const t100 = tabLabel[current];
10401
10575
  let t101;
10402
- if ($[255] !== current || $[256] !== t97 || $[257] !== t98 || $[258] !== t99) {
10403
- t101 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
10404
- fallbackTitle: t97,
10405
- label: t98,
10406
- retryLabel: t99,
10407
- children: t100
10408
- }, current, false);
10409
- $[255] = current;
10410
- $[256] = t97;
10411
- $[257] = t98;
10412
- $[258] = t99;
10576
+ if ($[258] !== t) {
10577
+ t101 = t("Try again");
10578
+ $[258] = t;
10413
10579
  $[259] = t101;
10414
10580
  } else {
10415
10581
  t101 = $[259];
10416
10582
  }
10417
10583
  let t102;
10418
- if ($[260] !== t101 || $[261] !== t95) {
10419
- t102 = /* @__PURE__ */ jsxDEV("div", {
10420
- className: t95,
10421
- children: t101
10422
- }, void 0, false);
10423
- $[260] = t101;
10424
- $[261] = t95;
10425
- $[262] = t102;
10584
+ if ($[260] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10585
+ t102 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
10586
+ $[260] = t102;
10426
10587
  } else {
10427
- t102 = $[262];
10588
+ t102 = $[260];
10428
10589
  }
10429
10590
  let t103;
10430
- if ($[263] !== t102 || $[264] !== t94) {
10431
- t103 = /* @__PURE__ */ jsxDEV("div", {
10432
- "aria-labelledby": t94,
10591
+ if ($[261] !== current || $[262] !== t100 || $[263] !== t101 || $[264] !== t99) {
10592
+ t103 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
10593
+ fallbackTitle: t99,
10594
+ label: t100,
10595
+ retryLabel: t101,
10596
+ children: t102
10597
+ }, current, false);
10598
+ $[261] = current;
10599
+ $[262] = t100;
10600
+ $[263] = t101;
10601
+ $[264] = t99;
10602
+ $[265] = t103;
10603
+ } else {
10604
+ t103 = $[265];
10605
+ }
10606
+ let t104;
10607
+ if ($[266] !== t103 || $[267] !== t97) {
10608
+ t104 = /* @__PURE__ */ jsxDEV("div", {
10609
+ className: t97,
10610
+ children: t103
10611
+ }, void 0, false);
10612
+ $[266] = t103;
10613
+ $[267] = t97;
10614
+ $[268] = t104;
10615
+ } else {
10616
+ t104 = $[268];
10617
+ }
10618
+ let t105;
10619
+ if ($[269] !== t104 || $[270] !== t96) {
10620
+ t105 = /* @__PURE__ */ jsxDEV("div", {
10621
+ "aria-labelledby": t96,
10433
10622
  className: "flex min-w-0 flex-1 flex-col overflow-hidden",
10434
10623
  "data-testid": "dash-panel",
10435
10624
  id: "dash-panel",
10436
10625
  role: "tabpanel",
10437
- children: t102
10626
+ children: t104
10438
10627
  }, void 0, false);
10439
- $[263] = t102;
10440
- $[264] = t94;
10441
- $[265] = t103;
10628
+ $[269] = t104;
10629
+ $[270] = t96;
10630
+ $[271] = t105;
10442
10631
  } else {
10443
- t103 = $[265];
10632
+ t105 = $[271];
10444
10633
  }
10445
- let t104;
10446
- if ($[266] !== t103 || $[267] !== t92 || $[268] !== t93) {
10447
- t104 = /* @__PURE__ */ jsxDEV(SidebarInset, {
10634
+ let t106;
10635
+ if ($[272] !== t105 || $[273] !== t94 || $[274] !== t95) {
10636
+ t106 = /* @__PURE__ */ jsxDEV(SidebarInset, {
10448
10637
  className: "overflow-hidden md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",
10449
- children: [t92, t93, t103]
10638
+ children: [t94, t95, t105]
10450
10639
  }, void 0, true);
10451
- $[266] = t103;
10452
- $[267] = t92;
10453
- $[268] = t93;
10454
- $[269] = t104;
10640
+ $[272] = t105;
10641
+ $[273] = t94;
10642
+ $[274] = t95;
10643
+ $[275] = t106;
10455
10644
  } else {
10456
- t104 = $[269];
10645
+ t106 = $[275];
10457
10646
  }
10458
10647
  return /* @__PURE__ */ jsxDEV(SidebarProvider, {
10459
10648
  className: "min-h-0 flex-1",
10460
10649
  "data-testid": "lunora-studio",
10461
- children: [t78, /* @__PURE__ */ jsxDEV(StudioSidebar, {
10650
+ children: [t80, /* @__PURE__ */ jsxDEV(StudioSidebar, {
10462
10651
  chrome,
10463
10652
  connected,
10464
10653
  current,
@@ -10467,7 +10656,7 @@ const StudioLayout = () => {
10467
10656
  selectTab,
10468
10657
  tabDescription,
10469
10658
  tabLabel
10470
- }, void 0, false), t104]
10659
+ }, void 0, false), t106]
10471
10660
  }, void 0, true);
10472
10661
  };
10473
10662
  const RoutePending = () => {
@@ -10594,6 +10783,9 @@ const buildRouter = ({
10594
10783
  initialShardKey
10595
10784
  }, void 0, false),
10596
10785
  files: /* @__PURE__ */ jsxDEV(FileBrowser, {}, void 0, false),
10786
+ flags: /* @__PURE__ */ jsxDEV(FlagsPanel, {
10787
+ initialShardKey
10788
+ }, void 0, false),
10597
10789
  functions: /* @__PURE__ */ jsxDEV("div", {
10598
10790
  className: "flex flex-col gap-8",
10599
10791
  children: [/* @__PURE__ */ jsxDEV(FunctionStatsPanel, {