@lunora/studio 1.0.0-alpha.10 → 1.0.0-alpha.12

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 (38) hide show
  1. package/dist/index.d.ts +10 -6
  2. package/dist/index.js +26 -26
  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-D9Eh7j7E.js → AuditPanel-CE5ofjCc.js} +2 -2
  9. package/dist/packem_shared/{DataBrowser-CyckZRwj.js → DataBrowser-DpL8U-Nf.js} +97 -102
  10. package/dist/packem_shared/{ExportImportPanel-BGJqFK9X.js → ExportImportPanel-ChsSUCYZ.js} +2 -2
  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-CXynSuqT.js → FunctionStatsPanel-BVelWgNv.js} +2 -2
  14. package/dist/packem_shared/{GlobalDataBrowser-DAxzB-Br.js → GlobalDataBrowser-3X9uRfdO.js} +1 -1
  15. package/dist/packem_shared/{HealthPanel-CyLs7qZm.js → HealthPanel-CxUVKfvo.js} +2 -2
  16. package/dist/packem_shared/{HomePanel-BOkFRbuj.js → HomePanel-tfqpZxuu.js} +2 -2
  17. package/dist/packem_shared/{InsightsPanel-CvXMoZuv.js → InsightsPanel-DNg3K9XN.js} +2 -2
  18. package/dist/packem_shared/{LogsPanel-BrUstOk6.js → LogsPanel-B4LoSRj0.js} +2 -2
  19. package/dist/packem_shared/{MailPanel-GnnrNqL6.js → MailPanel-CcpdyWYs.js} +2 -2
  20. package/dist/packem_shared/{MetricsPanel-BN_uUU-_.js → MetricsPanel-CxoyWbNb.js} +2 -2
  21. package/dist/packem_shared/{MigrationsPanel-DaZuUHje.js → MigrationsPanel-DGwJGWDA.js} +2 -2
  22. package/dist/packem_shared/{PitrPanel-LJGNP_IX.js → PitrPanel-CKUzyyHi.js} +1 -1
  23. package/dist/packem_shared/{ScheduledJobs-UmVaMbJy.js → ScheduledJobs-BWNwIN3I.js} +1 -1
  24. package/dist/packem_shared/{SchemaViewer-Bam6ylvw.js → SchemaViewer-RclXFo9Q.js} +1 -1
  25. package/dist/packem_shared/{SecurityAdvisorPanel-DTmjUNqt.js → SecurityAdvisorPanel-Dqql1Z5O.js} +2 -2
  26. package/dist/packem_shared/{SettingsPanel-C2wDK-8F.js → SettingsPanel-D5iTY0YE.js} +2 -2
  27. package/dist/packem_shared/{SqlEditorPanel-D5wMIxcg.js → SqlEditorPanel-Dj-In-B3.js} +2 -2
  28. package/dist/packem_shared/Studio-VWvKNOw4.js +33 -0
  29. package/dist/packem_shared/{StudioApp-C7aaizqc.js → StudioApp-BhQ6T2pn.js} +1 -1
  30. package/dist/packem_shared/TableEditor-BY8bTpCl.js +11 -0
  31. package/dist/packem_shared/{app.d-Nbhpihxv.d.ts → app.d-BVJFkXyj.d.ts} +1 -1
  32. package/dist/packem_shared/{sql-editor-panel-Smfl_FDF.js → sql-editor-panel-CMdxstu5.js} +1 -1
  33. package/dist/packem_shared/{studio-9Mq0PdMi.js → studio-D8ry3tJR.js} +760 -548
  34. package/dist/packem_shared/{TableEditor-DzK3Z6rL.js → table-editor-CWx68ZCg.js} +41 -5
  35. package/dist/packem_shared/{use-admin-query-4JQW2rr1.js → use-admin-query-BkbdNFNz.js} +18 -1
  36. package/dist/standalone/studio.js +173 -173
  37. package/package.json +3 -3
  38. package/dist/packem_shared/Studio-DpgYe4qt.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-CvXMoZuv.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
- import { u as useAdminQuery, b as useClientQuery } from './use-admin-query-4JQW2rr1.js';
28
- import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-DjXgvJb6.js';
29
- import SecurityAdvisorPanel from './SecurityAdvisorPanel-DTmjUNqt.js';
27
+ import { u as useAdminQuery, b as useClientQuery } from './use-admin-query-BkbdNFNz.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 { TableEditor } from './TableEditor-DzK3Z6rL.js';
39
- import { ExportImportPanel } from './ExportImportPanel-BGJqFK9X.js';
40
- import { MigrationsPanel } from './MigrationsPanel-DaZuUHje.js';
41
- import { PitrPanel } from './PitrPanel-LJGNP_IX.js';
42
- import { FunctionRunner } from './FunctionRunner-7NH3KcTg.js';
43
- import { FunctionStatsPanel } from './FunctionStatsPanel-CXynSuqT.js';
44
- import { HomePanel } from './HomePanel-BOkFRbuj.js';
45
- import { AuditPanel } from './AuditPanel-D9Eh7j7E.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-BrUstOk6.js';
48
- import { MailPanel } from './MailPanel-GnnrNqL6.js';
48
+ import { LogsPanel } from './LogsPanel-B4LoSRj0.js';
49
+ import { MailPanel } from './MailPanel-CcpdyWYs.js';
49
50
  import { ConfirmButton } from './ConfirmButton-C2eVi2Qv.js';
50
- import { ScheduledJobs } from './ScheduledJobs-UmVaMbJy.js';
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-CyLs7qZm.js';
56
- import { MetricsPanel } from './MetricsPanel-BN_uUU-_.js';
57
- import { SchemaViewer } from './SchemaViewer-Bam6ylvw.js';
58
- import { SettingsPanel } from './SettingsPanel-C2wDK-8F.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 {
@@ -8040,10 +8203,6 @@ const WorkflowInstanceHistory = ({
8040
8203
  const [error, setError] = useState(null);
8041
8204
  const [notConfigured, setNotConfigured] = useState(false);
8042
8205
  const [busyId, setBusyId] = useState(null);
8043
- const listImpl = loadInstances ?? (async (arguments_) => {
8044
- const page = await client.listWorkflowInstances(arguments_);
8045
- return page.instances;
8046
- });
8047
8206
  const detailImpl = loadDetail ?? ((arguments_) => client.getWorkflowInstance(arguments_));
8048
8207
  const clientOwned = loadInstances === void 0;
8049
8208
  const clientAction = clientOwned ? (arguments_) => client.setWorkflowInstanceStatus(arguments_) : void 0;
@@ -8051,10 +8210,24 @@ const WorkflowInstanceHistory = ({
8051
8210
  const load = async () => {
8052
8211
  setError(null);
8053
8212
  setNotConfigured(false);
8213
+ const status = statusFilter === "" ? void 0 : statusFilter;
8054
8214
  try {
8055
- setInstances(await listImpl({
8215
+ if (loadInstances === void 0) {
8216
+ const page = await client.listWorkflowInstances({
8217
+ name: workflowName,
8218
+ status
8219
+ });
8220
+ if (page.configured === false) {
8221
+ setInstances(null);
8222
+ setNotConfigured(true);
8223
+ return;
8224
+ }
8225
+ setInstances(page.instances);
8226
+ return;
8227
+ }
8228
+ setInstances(await loadInstances({
8056
8229
  name: workflowName,
8057
- status: statusFilter === "" ? void 0 : statusFilter
8230
+ status
8058
8231
  }));
8059
8232
  } catch (error_) {
8060
8233
  setInstances(null);
@@ -8549,6 +8722,7 @@ const WorkflowsPanel = () => {
8549
8722
 
8550
8723
  const STUDIO_FEATURES = adminRef(ADMIN_FUNCTIONS.studioFeatures);
8551
8724
  const DEFAULT_STUDIO_FEATURES = {
8725
+ flags: true,
8552
8726
  mail: true,
8553
8727
  payments: true,
8554
8728
  queues: true,
@@ -8564,6 +8738,7 @@ const coerceFeatures = (raw) => {
8564
8738
  const record = raw;
8565
8739
  const flag = (key) => typeof record[key] === "boolean" ? record[key] : true;
8566
8740
  return {
8741
+ flags: flag("flags"),
8567
8742
  mail: flag("mail"),
8568
8743
  payments: flag("payments"),
8569
8744
  queues: flag("queues"),
@@ -8632,6 +8807,9 @@ const TAB_ICONS = {
8632
8807
  files: /* @__PURE__ */ jsxDEV("path", {
8633
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"
8634
8809
  }, void 0, false),
8810
+ flags: /* @__PURE__ */ jsxDEV("path", {
8811
+ d: "M6 21V4m0 0h11l-2 3 2 3H6"
8812
+ }, void 0, false),
8635
8813
  functions: /* @__PURE__ */ jsxDEV("path", {
8636
8814
  d: "m9 8-4 4 4 4m6-8 4 4-4 4"
8637
8815
  }, void 0, false),
@@ -8728,13 +8906,14 @@ const NAV_GROUPS = [{
8728
8906
  tabs: ["security", "rls", "permissions", "insights"]
8729
8907
  }, {
8730
8908
  key: "operations",
8731
- tabs: ["schedule", "mail", "drains", "payments"]
8909
+ tabs: ["schedule", "mail", "drains", "payments", "flags"]
8732
8910
  }, {
8733
8911
  key: "settings",
8734
8912
  tabs: ["settings"]
8735
8913
  }];
8736
8914
  const TAB_FEATURE = {
8737
8915
  files: "storage",
8916
+ flags: "flags",
8738
8917
  mail: "mail",
8739
8918
  payments: "payments",
8740
8919
  queues: "queues",
@@ -8773,7 +8952,7 @@ const TabIcon = (t0) => {
8773
8952
  }
8774
8953
  return t2;
8775
8954
  };
8776
- 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"];
8777
8956
  const FULL_HEIGHT_TABS = /* @__PURE__ */ new Set(["api", "data", "sql"]);
8778
8957
  const tabFromPathname = (pathname) => {
8779
8958
  const slug = pathname.split("/").findLast(Boolean) ?? "";
@@ -9380,7 +9559,7 @@ const StudioSidebar = (t0) => {
9380
9559
  return t9;
9381
9560
  };
9382
9561
  const StudioLayout = () => {
9383
- const $ = c(270);
9562
+ const $ = c(276);
9384
9563
  const t = useT();
9385
9564
  const navigate = useNavigate();
9386
9565
  let t0;
@@ -9523,7 +9702,7 @@ const StudioLayout = () => {
9523
9702
  }
9524
9703
  let t15;
9525
9704
  if ($[31] !== t) {
9526
- t15 = t("Functions");
9705
+ t15 = t("Flags");
9527
9706
  $[31] = t;
9528
9707
  $[32] = t15;
9529
9708
  } else {
@@ -9531,7 +9710,7 @@ const StudioLayout = () => {
9531
9710
  }
9532
9711
  let t16;
9533
9712
  if ($[33] !== t) {
9534
- t16 = t("Health");
9713
+ t16 = t("Functions");
9535
9714
  $[33] = t;
9536
9715
  $[34] = t16;
9537
9716
  } else {
@@ -9539,7 +9718,7 @@ const StudioLayout = () => {
9539
9718
  }
9540
9719
  let t17;
9541
9720
  if ($[35] !== t) {
9542
- t17 = t("Home");
9721
+ t17 = t("Health");
9543
9722
  $[35] = t;
9544
9723
  $[36] = t17;
9545
9724
  } else {
@@ -9547,7 +9726,7 @@ const StudioLayout = () => {
9547
9726
  }
9548
9727
  let t18;
9549
9728
  if ($[37] !== t) {
9550
- t18 = t("Performance");
9729
+ t18 = t("Home");
9551
9730
  $[37] = t;
9552
9731
  $[38] = t18;
9553
9732
  } else {
@@ -9555,7 +9734,7 @@ const StudioLayout = () => {
9555
9734
  }
9556
9735
  let t19;
9557
9736
  if ($[39] !== t) {
9558
- t19 = t("Logs");
9737
+ t19 = t("Performance");
9559
9738
  $[39] = t;
9560
9739
  $[40] = t19;
9561
9740
  } else {
@@ -9563,7 +9742,7 @@ const StudioLayout = () => {
9563
9742
  }
9564
9743
  let t20;
9565
9744
  if ($[41] !== t) {
9566
- t20 = t("Metrics");
9745
+ t20 = t("Logs");
9567
9746
  $[41] = t;
9568
9747
  $[42] = t20;
9569
9748
  } else {
@@ -9571,7 +9750,7 @@ const StudioLayout = () => {
9571
9750
  }
9572
9751
  let t21;
9573
9752
  if ($[43] !== t) {
9574
- t21 = t("Migrations");
9753
+ t21 = t("Metrics");
9575
9754
  $[43] = t;
9576
9755
  $[44] = t21;
9577
9756
  } else {
@@ -9579,7 +9758,7 @@ const StudioLayout = () => {
9579
9758
  }
9580
9759
  let t22;
9581
9760
  if ($[45] !== t) {
9582
- t22 = t("Organizations");
9761
+ t22 = t("Migrations");
9583
9762
  $[45] = t;
9584
9763
  $[46] = t22;
9585
9764
  } else {
@@ -9587,7 +9766,7 @@ const StudioLayout = () => {
9587
9766
  }
9588
9767
  let t23;
9589
9768
  if ($[47] !== t) {
9590
- t23 = t("Time Travel");
9769
+ t23 = t("Organizations");
9591
9770
  $[47] = t;
9592
9771
  $[48] = t23;
9593
9772
  } else {
@@ -9595,7 +9774,7 @@ const StudioLayout = () => {
9595
9774
  }
9596
9775
  let t24;
9597
9776
  if ($[49] !== t) {
9598
- t24 = t("Mail");
9777
+ t24 = t("Time Travel");
9599
9778
  $[49] = t;
9600
9779
  $[50] = t24;
9601
9780
  } else {
@@ -9603,7 +9782,7 @@ const StudioLayout = () => {
9603
9782
  }
9604
9783
  let t25;
9605
9784
  if ($[51] !== t) {
9606
- t25 = t("Payments");
9785
+ t25 = t("Mail");
9607
9786
  $[51] = t;
9608
9787
  $[52] = t25;
9609
9788
  } else {
@@ -9611,7 +9790,7 @@ const StudioLayout = () => {
9611
9790
  }
9612
9791
  let t26;
9613
9792
  if ($[53] !== t) {
9614
- t26 = t("Permissions");
9793
+ t26 = t("Payments");
9615
9794
  $[53] = t;
9616
9795
  $[54] = t26;
9617
9796
  } else {
@@ -9619,7 +9798,7 @@ const StudioLayout = () => {
9619
9798
  }
9620
9799
  let t27;
9621
9800
  if ($[55] !== t) {
9622
- t27 = t("Queues");
9801
+ t27 = t("Permissions");
9623
9802
  $[55] = t;
9624
9803
  $[56] = t27;
9625
9804
  } else {
@@ -9627,7 +9806,7 @@ const StudioLayout = () => {
9627
9806
  }
9628
9807
  let t28;
9629
9808
  if ($[57] !== t) {
9630
- t28 = t("Realtime");
9809
+ t28 = t("Queues");
9631
9810
  $[57] = t;
9632
9811
  $[58] = t28;
9633
9812
  } else {
@@ -9635,7 +9814,7 @@ const StudioLayout = () => {
9635
9814
  }
9636
9815
  let t29;
9637
9816
  if ($[59] !== t) {
9638
- t29 = t("RLS Policies");
9817
+ t29 = t("Realtime");
9639
9818
  $[59] = t;
9640
9819
  $[60] = t29;
9641
9820
  } else {
@@ -9643,7 +9822,7 @@ const StudioLayout = () => {
9643
9822
  }
9644
9823
  let t30;
9645
9824
  if ($[61] !== t) {
9646
- t30 = t("Scheduled");
9825
+ t30 = t("RLS Policies");
9647
9826
  $[61] = t;
9648
9827
  $[62] = t30;
9649
9828
  } else {
@@ -9651,7 +9830,7 @@ const StudioLayout = () => {
9651
9830
  }
9652
9831
  let t31;
9653
9832
  if ($[63] !== t) {
9654
- t31 = t("Schema");
9833
+ t31 = t("Scheduled");
9655
9834
  $[63] = t;
9656
9835
  $[64] = t31;
9657
9836
  } else {
@@ -9659,7 +9838,7 @@ const StudioLayout = () => {
9659
9838
  }
9660
9839
  let t32;
9661
9840
  if ($[65] !== t) {
9662
- t32 = t("Security");
9841
+ t32 = t("Schema");
9663
9842
  $[65] = t;
9664
9843
  $[66] = t32;
9665
9844
  } else {
@@ -9667,7 +9846,7 @@ const StudioLayout = () => {
9667
9846
  }
9668
9847
  let t33;
9669
9848
  if ($[67] !== t) {
9670
- t33 = t("Settings");
9849
+ t33 = t("Security");
9671
9850
  $[67] = t;
9672
9851
  $[68] = t33;
9673
9852
  } else {
@@ -9675,7 +9854,7 @@ const StudioLayout = () => {
9675
9854
  }
9676
9855
  let t34;
9677
9856
  if ($[69] !== t) {
9678
- t34 = t("SQL editor");
9857
+ t34 = t("Settings");
9679
9858
  $[69] = t;
9680
9859
  $[70] = t34;
9681
9860
  } else {
@@ -9683,7 +9862,7 @@ const StudioLayout = () => {
9683
9862
  }
9684
9863
  let t35;
9685
9864
  if ($[71] !== t) {
9686
- t35 = t("Access Rules");
9865
+ t35 = t("SQL editor");
9687
9866
  $[71] = t;
9688
9867
  $[72] = t35;
9689
9868
  } else {
@@ -9691,7 +9870,7 @@ const StudioLayout = () => {
9691
9870
  }
9692
9871
  let t36;
9693
9872
  if ($[73] !== t) {
9694
- t36 = t("Users");
9873
+ t36 = t("Access Rules");
9695
9874
  $[73] = t;
9696
9875
  $[74] = t36;
9697
9876
  } else {
@@ -9699,7 +9878,7 @@ const StudioLayout = () => {
9699
9878
  }
9700
9879
  let t37;
9701
9880
  if ($[75] !== t) {
9702
- t37 = t("Vectors");
9881
+ t37 = t("Users");
9703
9882
  $[75] = t;
9704
9883
  $[76] = t37;
9705
9884
  } else {
@@ -9707,15 +9886,23 @@ const StudioLayout = () => {
9707
9886
  }
9708
9887
  let t38;
9709
9888
  if ($[77] !== t) {
9710
- t38 = t("Workflows");
9889
+ t38 = t("Vectors");
9711
9890
  $[77] = t;
9712
9891
  $[78] = t38;
9713
9892
  } else {
9714
9893
  t38 = $[78];
9715
9894
  }
9716
9895
  let t39;
9717
- 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) {
9718
- 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 = {
9719
9906
  analytics: t5,
9720
9907
  api: t6,
9721
9908
  audit: t7,
@@ -9726,70 +9913,72 @@ const StudioLayout = () => {
9726
9913
  drains: t12,
9727
9914
  export: t13,
9728
9915
  files: t14,
9729
- functions: t15,
9730
- health: t16,
9731
- home: t17,
9732
- insights: t18,
9733
- logs: t19,
9734
- metrics: t20,
9735
- migrations: t21,
9736
- organizations: t22,
9737
- pitr: t23,
9738
- mail: t24,
9739
- payments: t25,
9740
- permissions: t26,
9741
- queues: t27,
9742
- realtime: t28,
9743
- rls: t29,
9744
- schedule: t30,
9745
- schema: t31,
9746
- security: t32,
9747
- settings: t33,
9748
- sql: t34,
9749
- storageRules: t35,
9750
- users: t36,
9751
- vectors: t37,
9752
- 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
9753
9941
  };
9754
- $[79] = t10;
9755
- $[80] = t11;
9756
- $[81] = t12;
9757
- $[82] = t13;
9758
- $[83] = t14;
9759
- $[84] = t15;
9760
- $[85] = t16;
9761
- $[86] = t17;
9762
- $[87] = t18;
9763
- $[88] = t19;
9764
- $[89] = t20;
9765
- $[90] = t21;
9766
- $[91] = t22;
9767
- $[92] = t23;
9768
- $[93] = t24;
9769
- $[94] = t25;
9770
- $[95] = t26;
9771
- $[96] = t27;
9772
- $[97] = t28;
9773
- $[98] = t29;
9774
- $[99] = t30;
9775
- $[100] = t31;
9776
- $[101] = t32;
9777
- $[102] = t33;
9778
- $[103] = t34;
9779
- $[104] = t35;
9780
- $[105] = t36;
9781
- $[106] = t37;
9782
- $[107] = t38;
9783
- $[108] = t5;
9784
- $[109] = t6;
9785
- $[110] = t7;
9786
- $[111] = t8;
9787
- $[112] = t9;
9788
- $[113] = t39;
9789
- } else {
9790
- t39 = $[113];
9791
- }
9792
- 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;
9793
9982
  const groupLabel = {
9794
9983
  advisors: t("Advisors"),
9795
9984
  auth: t("Auth"),
@@ -9801,386 +9990,396 @@ const StudioLayout = () => {
9801
9990
  settings: t("Settings"),
9802
9991
  storage: t("Storage")
9803
9992
  };
9804
- let t40;
9805
- if ($[114] !== t) {
9806
- t40 = t("Usage and latency from Analytics Engine — request volume, p50/p95, and hot shards.");
9807
- $[114] = t;
9808
- $[115] = t40;
9809
- } else {
9810
- t40 = $[115];
9811
- }
9812
9993
  let t41;
9813
- if ($[116] !== t) {
9814
- t41 = t("Interactive OpenAPI reference and copy-paste snippets for your functions.");
9815
- $[116] = t;
9816
- $[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;
9817
9998
  } else {
9818
- t41 = $[117];
9999
+ t41 = $[118];
9819
10000
  }
9820
10001
  let t42;
9821
- if ($[118] !== t) {
9822
- t42 = t("A durable log of admin state-changing operations.");
9823
- $[118] = t;
9824
- $[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;
9825
10006
  } else {
9826
- t42 = $[119];
10007
+ t42 = $[120];
9827
10008
  }
9828
10009
  let t43;
9829
- if ($[120] !== t) {
9830
- t43 = t("Enabled plugins and session config (read-only).");
9831
- $[120] = t;
9832
- $[121] = t43;
10010
+ if ($[121] !== t) {
10011
+ t43 = t("A durable log of admin state-changing operations.");
10012
+ $[121] = t;
10013
+ $[122] = t43;
9833
10014
  } else {
9834
- t43 = $[121];
10015
+ t43 = $[122];
9835
10016
  }
9836
10017
  let t44;
9837
- if ($[122] !== t) {
9838
- t44 = t("Browse and revoke active sessions across all users.");
9839
- $[122] = t;
9840
- $[123] = t44;
10018
+ if ($[123] !== t) {
10019
+ t44 = t("Enabled plugins and session config (read-only).");
10020
+ $[123] = t;
10021
+ $[124] = t44;
9841
10022
  } else {
9842
- t44 = $[123];
10023
+ t44 = $[124];
9843
10024
  }
9844
10025
  let t45;
9845
- if ($[124] !== t) {
9846
- t45 = t("Chart widgets backed by saved read-only SQL queries.");
9847
- $[124] = t;
9848
- $[125] = t45;
10026
+ if ($[125] !== t) {
10027
+ t45 = t("Browse and revoke active sessions across all users.");
10028
+ $[125] = t;
10029
+ $[126] = t45;
9849
10030
  } else {
9850
- t45 = $[125];
10031
+ t45 = $[126];
9851
10032
  }
9852
10033
  let t46;
9853
- if ($[126] !== t) {
9854
- t46 = t("Browse and edit rows across your shard and global tables.");
9855
- $[126] = t;
9856
- $[127] = t46;
10034
+ if ($[127] !== t) {
10035
+ t46 = t("Chart widgets backed by saved read-only SQL queries.");
10036
+ $[127] = t;
10037
+ $[128] = t46;
9857
10038
  } else {
9858
- t46 = $[127];
10039
+ t46 = $[128];
9859
10040
  }
9860
10041
  let t47;
9861
- if ($[128] !== t) {
9862
- t47 = t("Forward logs to Logpush, Tail Workers, or a webhook collector.");
9863
- $[128] = t;
9864
- $[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;
9865
10046
  } else {
9866
- t47 = $[129];
10047
+ t47 = $[130];
9867
10048
  }
9868
10049
  let t48;
9869
- if ($[130] !== t) {
9870
- t48 = t("Export a shard to NDJSON, or import rows from it.");
9871
- $[130] = t;
9872
- $[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;
9873
10054
  } else {
9874
- t48 = $[131];
10055
+ t48 = $[132];
9875
10056
  }
9876
10057
  let t49;
9877
- if ($[132] !== t) {
9878
- t49 = t("Browse objects in your R2 storage buckets.");
9879
- $[132] = t;
9880
- $[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;
9881
10062
  } else {
9882
- t49 = $[133];
10063
+ t49 = $[134];
9883
10064
  }
9884
10065
  let t50;
9885
- if ($[134] !== t) {
9886
- t50 = t("Run registered queries, mutations, and actions.");
9887
- $[134] = t;
9888
- $[135] = t50;
10066
+ if ($[135] !== t) {
10067
+ t50 = t("Browse objects in your R2 storage buckets.");
10068
+ $[135] = t;
10069
+ $[136] = t50;
9889
10070
  } else {
9890
- t50 = $[135];
10071
+ t50 = $[136];
9891
10072
  }
9892
10073
  let t51;
9893
- if ($[136] !== t) {
9894
- t51 = t("At-a-glance connection, error, and shard signals.");
9895
- $[136] = t;
9896
- $[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;
9897
10078
  } else {
9898
- t51 = $[137];
10079
+ t51 = $[138];
9899
10080
  }
9900
10081
  let t52;
9901
- if ($[138] !== t) {
9902
- t52 = t("Connection, health, and advisor summary for your deployment.");
9903
- $[138] = t;
9904
- $[139] = t52;
10082
+ if ($[139] !== t) {
10083
+ t52 = t("Run registered queries, mutations, and actions.");
10084
+ $[139] = t;
10085
+ $[140] = t52;
9905
10086
  } else {
9906
- t52 = $[139];
10087
+ t52 = $[140];
9907
10088
  }
9908
10089
  let t53;
9909
- if ($[140] !== t) {
9910
- t53 = t("Surface slow functions, error spikes, and cache problems.");
9911
- $[140] = t;
9912
- $[141] = t53;
10090
+ if ($[141] !== t) {
10091
+ t53 = t("At-a-glance connection, error, and shard signals.");
10092
+ $[141] = t;
10093
+ $[142] = t53;
9913
10094
  } else {
9914
- t53 = $[141];
10095
+ t53 = $[142];
9915
10096
  }
9916
10097
  let t54;
9917
- if ($[142] !== t) {
9918
- t54 = t("A live stream of recent function logs.");
9919
- $[142] = t;
9920
- $[143] = t54;
10098
+ if ($[143] !== t) {
10099
+ t54 = t("Connection, health, and advisor summary for your deployment.");
10100
+ $[143] = t;
10101
+ $[144] = t54;
9921
10102
  } else {
9922
- t54 = $[143];
10103
+ t54 = $[144];
9923
10104
  }
9924
10105
  let t55;
9925
- if ($[144] !== t) {
9926
- t55 = t("Per-shard health and aggregate metrics.");
9927
- $[144] = t;
9928
- $[145] = t55;
10106
+ if ($[145] !== t) {
10107
+ t55 = t("Surface slow functions, error spikes, and cache problems.");
10108
+ $[145] = t;
10109
+ $[146] = t55;
9929
10110
  } else {
9930
- t55 = $[145];
10111
+ t55 = $[146];
9931
10112
  }
9932
10113
  let t56;
9933
- if ($[146] !== t) {
9934
- t56 = t("Review migration status and run them.");
9935
- $[146] = t;
9936
- $[147] = t56;
10114
+ if ($[147] !== t) {
10115
+ t56 = t("A live stream of recent function logs.");
10116
+ $[147] = t;
10117
+ $[148] = t56;
9937
10118
  } else {
9938
- t56 = $[147];
10119
+ t56 = $[148];
9939
10120
  }
9940
10121
  let t57;
9941
- if ($[148] !== t) {
9942
- t57 = t("Browse and manage organizations, members, and invitations.");
9943
- $[148] = t;
9944
- $[149] = t57;
10122
+ if ($[149] !== t) {
10123
+ t57 = t("Per-shard health and aggregate metrics.");
10124
+ $[149] = t;
10125
+ $[150] = t57;
9945
10126
  } else {
9946
- t57 = $[149];
10127
+ t57 = $[150];
9947
10128
  }
9948
10129
  let t58;
9949
- if ($[150] !== t) {
9950
- t58 = t("Restore a shard to a point in the last 30 days.");
9951
- $[150] = t;
9952
- $[151] = t58;
10130
+ if ($[151] !== t) {
10131
+ t58 = t("Review migration status and run them.");
10132
+ $[151] = t;
10133
+ $[152] = t58;
9953
10134
  } else {
9954
- t58 = $[151];
10135
+ t58 = $[152];
9955
10136
  }
9956
10137
  let t59;
9957
- if ($[152] !== t) {
9958
- t59 = t("Email your app sent, captured in dev.");
9959
- $[152] = t;
9960
- $[153] = t59;
10138
+ if ($[153] !== t) {
10139
+ t59 = t("Browse and manage organizations, members, and invitations.");
10140
+ $[153] = t;
10141
+ $[154] = t59;
9961
10142
  } else {
9962
- t59 = $[153];
10143
+ t59 = $[154];
9963
10144
  }
9964
10145
  let t60;
9965
- if ($[154] !== t) {
9966
- t60 = t("Synced customers, subscriptions, and webhook events.");
9967
- $[154] = t;
9968
- $[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;
9969
10150
  } else {
9970
- t60 = $[155];
10151
+ t60 = $[156];
9971
10152
  }
9972
10153
  let t61;
9973
- if ($[156] !== t) {
9974
- t61 = t("Inspect access policies per table, and probe a function as any identity.");
9975
- $[156] = t;
9976
- $[157] = t61;
10154
+ if ($[157] !== t) {
10155
+ t61 = t("Email your app sent, captured in dev.");
10156
+ $[157] = t;
10157
+ $[158] = t61;
9977
10158
  } else {
9978
- t61 = $[157];
10159
+ t61 = $[158];
9979
10160
  }
9980
10161
  let t62;
9981
- if ($[158] !== t) {
9982
- t62 = t("Inspect declared Cloudflare Queues — their producer bindings, consumer mode, and dead-letter queue.");
9983
- $[158] = t;
9984
- $[159] = t62;
10162
+ if ($[159] !== t) {
10163
+ t62 = t("Synced customers, subscriptions, and webhook events.");
10164
+ $[159] = t;
10165
+ $[160] = t62;
9985
10166
  } else {
9986
- t62 = $[159];
10167
+ t62 = $[160];
9987
10168
  }
9988
10169
  let t63;
9989
- if ($[160] !== t) {
9990
- t63 = t("Active WebSocket subscriptions on this shard.");
9991
- $[160] = t;
9992
- $[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;
9993
10174
  } else {
9994
- t63 = $[161];
10175
+ t63 = $[162];
9995
10176
  }
9996
10177
  let t64;
9997
- if ($[162] !== t) {
9998
- t64 = t("Inspect row-level-security policies and roles, per table.");
9999
- $[162] = t;
10000
- $[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;
10001
10182
  } else {
10002
- t64 = $[163];
10183
+ t64 = $[164];
10003
10184
  }
10004
10185
  let t65;
10005
- if ($[164] !== t) {
10006
- t65 = t("Inspect and cancel scheduled jobs.");
10007
- $[164] = t;
10008
- $[165] = t65;
10186
+ if ($[165] !== t) {
10187
+ t65 = t("Active WebSocket subscriptions on this shard.");
10188
+ $[165] = t;
10189
+ $[166] = t65;
10009
10190
  } else {
10010
- t65 = $[165];
10191
+ t65 = $[166];
10011
10192
  }
10012
10193
  let t66;
10013
- if ($[166] !== t) {
10014
- t66 = t("Inspect each table and its columns.");
10015
- $[166] = t;
10016
- $[167] = t66;
10194
+ if ($[167] !== t) {
10195
+ t66 = t("Inspect row-level-security policies and roles, per table.");
10196
+ $[167] = t;
10197
+ $[168] = t66;
10017
10198
  } else {
10018
- t66 = $[167];
10199
+ t66 = $[168];
10019
10200
  }
10020
10201
  let t67;
10021
- if ($[168] !== t) {
10022
- t67 = t("Review admin gates, credentials, and log redaction.");
10023
- $[168] = t;
10024
- $[169] = t67;
10202
+ if ($[169] !== t) {
10203
+ t67 = t("Inspect and cancel scheduled jobs.");
10204
+ $[169] = t;
10205
+ $[170] = t67;
10025
10206
  } else {
10026
- t67 = $[169];
10207
+ t67 = $[170];
10027
10208
  }
10028
10209
  let t68;
10029
- if ($[170] !== t) {
10030
- t68 = t("Read-only deployment config vars, secrets, and bindings.");
10031
- $[170] = t;
10032
- $[171] = t68;
10210
+ if ($[171] !== t) {
10211
+ t68 = t("Inspect each table and its columns.");
10212
+ $[171] = t;
10213
+ $[172] = t68;
10033
10214
  } else {
10034
- t68 = $[171];
10215
+ t68 = $[172];
10035
10216
  }
10036
10217
  let t69;
10037
- if ($[172] !== t) {
10038
- t69 = t("Run read-only SQL against a shard.");
10039
- $[172] = t;
10040
- $[173] = t69;
10218
+ if ($[173] !== t) {
10219
+ t69 = t("Review admin gates, credentials, and log redaction.");
10220
+ $[173] = t;
10221
+ $[174] = t69;
10041
10222
  } else {
10042
- t69 = $[173];
10223
+ t69 = $[174];
10043
10224
  }
10044
10225
  let t70;
10045
- if ($[174] !== t) {
10046
- t70 = t("Inspect storage access rules per bucket, operation, and key prefix.");
10047
- $[174] = t;
10048
- $[175] = t70;
10226
+ if ($[175] !== t) {
10227
+ t70 = t("Read-only deployment configvars, secrets, and bindings.");
10228
+ $[175] = t;
10229
+ $[176] = t70;
10049
10230
  } else {
10050
- t70 = $[175];
10231
+ t70 = $[176];
10051
10232
  }
10052
10233
  let t71;
10053
- if ($[176] !== t) {
10054
- t71 = t("Manage auth users roles, bans, sessions, and identity.");
10055
- $[176] = t;
10056
- $[177] = t71;
10234
+ if ($[177] !== t) {
10235
+ t71 = t("Run read-only SQL against a shard.");
10236
+ $[177] = t;
10237
+ $[178] = t71;
10057
10238
  } else {
10058
- t71 = $[177];
10239
+ t71 = $[178];
10059
10240
  }
10060
10241
  let t72;
10061
- if ($[178] !== t) {
10062
- t72 = t("Browse Vectorize indexes and run similarity searches.");
10063
- $[178] = t;
10064
- $[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;
10065
10246
  } else {
10066
- t72 = $[179];
10247
+ t72 = $[180];
10067
10248
  }
10068
10249
  let t73;
10069
- if ($[180] !== t) {
10070
- t73 = t("Inspect declared Cloudflare Workflows and their bindings.");
10071
- $[180] = t;
10072
- $[181] = t73;
10250
+ if ($[181] !== t) {
10251
+ t73 = t("Manage auth users roles, bans, sessions, and identity.");
10252
+ $[181] = t;
10253
+ $[182] = t73;
10073
10254
  } else {
10074
- t73 = $[181];
10255
+ t73 = $[182];
10075
10256
  }
10076
10257
  let t74;
10077
- 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) {
10078
- t74 = {
10079
- analytics: t40,
10080
- api: t41,
10081
- audit: t42,
10082
- authConfig: t43,
10083
- authSessions: t44,
10084
- dashboards: t45,
10085
- data: t46,
10086
- drains: t47,
10087
- export: t48,
10088
- files: t49,
10089
- functions: t50,
10090
- health: t51,
10091
- home: t52,
10092
- insights: t53,
10093
- logs: t54,
10094
- metrics: t55,
10095
- migrations: t56,
10096
- organizations: t57,
10097
- pitr: t58,
10098
- mail: t59,
10099
- payments: t60,
10100
- permissions: t61,
10101
- queues: t62,
10102
- realtime: t63,
10103
- rls: t64,
10104
- schedule: t65,
10105
- schema: t66,
10106
- security: t67,
10107
- settings: t68,
10108
- sql: t69,
10109
- storageRules: t70,
10110
- users: t71,
10111
- vectors: t72,
10112
- workflows: t73
10113
- };
10114
- $[182] = t40;
10115
- $[183] = t41;
10116
- $[184] = t42;
10117
- $[185] = t43;
10118
- $[186] = t44;
10119
- $[187] = t45;
10120
- $[188] = t46;
10121
- $[189] = t47;
10122
- $[190] = t48;
10123
- $[191] = t49;
10124
- $[192] = t50;
10125
- $[193] = t51;
10126
- $[194] = t52;
10127
- $[195] = t53;
10128
- $[196] = t54;
10129
- $[197] = t55;
10130
- $[198] = t56;
10131
- $[199] = t57;
10132
- $[200] = t58;
10133
- $[201] = t59;
10134
- $[202] = t60;
10135
- $[203] = t61;
10136
- $[204] = t62;
10137
- $[205] = t63;
10138
- $[206] = t64;
10139
- $[207] = t65;
10140
- $[208] = t66;
10141
- $[209] = t67;
10142
- $[210] = t68;
10143
- $[211] = t69;
10144
- $[212] = t70;
10145
- $[213] = t71;
10146
- $[214] = t72;
10147
- $[215] = t73;
10148
- $[216] = t74;
10149
- } else {
10150
- t74 = $[216];
10151
- }
10152
- 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
+ }
10153
10265
  let t75;
10154
- if ($[217] !== navigate) {
10155
- 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) => {
10156
10355
  fireAndForget(navigate({
10157
10356
  to: `/${event.currentTarget.dataset.tab ?? ""}`
10158
10357
  }));
10159
10358
  };
10160
- $[217] = navigate;
10161
- $[218] = t75;
10359
+ $[223] = navigate;
10360
+ $[224] = t77;
10162
10361
  } else {
10163
- t75 = $[218];
10362
+ t77 = $[224];
10164
10363
  }
10165
- const selectTab = t75;
10166
- let t76;
10167
- let t77;
10168
- if ($[219] !== current || $[220] !== tabLabel) {
10169
- t76 = () => {
10364
+ const selectTab = t77;
10365
+ let t78;
10366
+ let t79;
10367
+ if ($[225] !== current || $[226] !== tabLabel) {
10368
+ t78 = () => {
10170
10369
  if (typeof document !== "undefined") {
10171
10370
  document.title = `${tabLabel[current]} · lunora`;
10172
10371
  }
10173
10372
  };
10174
- t77 = [current, tabLabel];
10175
- $[219] = current;
10176
- $[220] = tabLabel;
10177
- $[221] = t76;
10178
- $[222] = t77;
10373
+ t79 = [current, tabLabel];
10374
+ $[225] = current;
10375
+ $[226] = tabLabel;
10376
+ $[227] = t78;
10377
+ $[228] = t79;
10179
10378
  } else {
10180
- t76 = $[221];
10181
- t77 = $[222];
10379
+ t78 = $[227];
10380
+ t79 = $[228];
10182
10381
  }
10183
- useEffect(t76, t77);
10382
+ useEffect(t78, t79);
10184
10383
  const activeGroup = visibleGroups.find((group_1) => group_1.tabs.includes(current)) ?? NAV_GROUPS[0];
10185
10384
  const commandItems = visibleGroups.flatMap((group_2) => group_2.tabs.map((tab_0) => ({
10186
10385
  group: groupLabel[group_2.key],
@@ -10189,48 +10388,48 @@ const StudioLayout = () => {
10189
10388
  })));
10190
10389
  const chrome = use(StudioChromeContext);
10191
10390
  const connected = chrome !== null && chrome.token !== "";
10192
- let t78;
10193
- if ($[223] !== commandItems) {
10194
- t78 = /* @__PURE__ */ jsxDEV(CommandPalette, {
10391
+ let t80;
10392
+ if ($[229] !== commandItems) {
10393
+ t80 = /* @__PURE__ */ jsxDEV(CommandPalette, {
10195
10394
  items: commandItems
10196
10395
  }, void 0, false);
10197
- $[223] = commandItems;
10198
- $[224] = t78;
10396
+ $[229] = commandItems;
10397
+ $[230] = t80;
10199
10398
  } else {
10200
- t78 = $[224];
10399
+ t80 = $[230];
10201
10400
  }
10202
- let t79;
10203
- if ($[225] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10204
- t79 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
10401
+ let t81;
10402
+ if ($[231] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10403
+ t81 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
10205
10404
  className: "-ms-1"
10206
10405
  }, void 0, false);
10207
- $[225] = t79;
10406
+ $[231] = t81;
10208
10407
  } else {
10209
- t79 = $[225];
10408
+ t81 = $[231];
10210
10409
  }
10211
- let t80;
10212
- if ($[226] !== t) {
10213
- t80 = t("Breadcrumb");
10214
- $[226] = t;
10215
- $[227] = t80;
10410
+ let t82;
10411
+ if ($[232] !== t) {
10412
+ t82 = t("Breadcrumb");
10413
+ $[232] = t;
10414
+ $[233] = t82;
10216
10415
  } else {
10217
- t80 = $[227];
10416
+ t82 = $[233];
10218
10417
  }
10219
- const t81 = groupLabel[activeGroup.key];
10220
- let t82;
10221
- if ($[228] !== t81) {
10222
- t82 = /* @__PURE__ */ jsxDEV("span", {
10418
+ const t83 = groupLabel[activeGroup.key];
10419
+ let t84;
10420
+ if ($[234] !== t83) {
10421
+ t84 = /* @__PURE__ */ jsxDEV("span", {
10223
10422
  className: "text-muted-foreground",
10224
- children: t81
10423
+ children: t83
10225
10424
  }, void 0, false);
10226
- $[228] = t81;
10227
- $[229] = t82;
10425
+ $[234] = t83;
10426
+ $[235] = t84;
10228
10427
  } else {
10229
- t82 = $[229];
10428
+ t84 = $[235];
10230
10429
  }
10231
- let t83;
10232
- if ($[230] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10233
- t83 = /* @__PURE__ */ jsxDEV("svg", {
10430
+ let t85;
10431
+ if ($[236] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10432
+ t85 = /* @__PURE__ */ jsxDEV("svg", {
10234
10433
  "aria-hidden": "true",
10235
10434
  className: "size-3.5 text-muted-foreground/60",
10236
10435
  fill: "none",
@@ -10243,39 +10442,39 @@ const StudioLayout = () => {
10243
10442
  strokeLinejoin: "round"
10244
10443
  }, void 0, false)
10245
10444
  }, void 0, false);
10246
- $[230] = t83;
10445
+ $[236] = t85;
10247
10446
  } else {
10248
- t83 = $[230];
10447
+ t85 = $[236];
10249
10448
  }
10250
- const t84 = tabLabel[current];
10251
- let t85;
10252
- if ($[231] !== t84) {
10253
- t85 = /* @__PURE__ */ jsxDEV("span", {
10449
+ const t86 = tabLabel[current];
10450
+ let t87;
10451
+ if ($[237] !== t86) {
10452
+ t87 = /* @__PURE__ */ jsxDEV("span", {
10254
10453
  className: "font-medium text-foreground",
10255
- children: t84
10454
+ children: t86
10256
10455
  }, void 0, false);
10257
- $[231] = t84;
10258
- $[232] = t85;
10456
+ $[237] = t86;
10457
+ $[238] = t87;
10259
10458
  } else {
10260
- t85 = $[232];
10459
+ t87 = $[238];
10261
10460
  }
10262
- let t86;
10263
- if ($[233] !== t80 || $[234] !== t82 || $[235] !== t85) {
10264
- t86 = /* @__PURE__ */ jsxDEV("nav", {
10265
- "aria-label": t80,
10461
+ let t88;
10462
+ if ($[239] !== t82 || $[240] !== t84 || $[241] !== t87) {
10463
+ t88 = /* @__PURE__ */ jsxDEV("nav", {
10464
+ "aria-label": t82,
10266
10465
  className: "flex items-center gap-1.5 text-[13px]",
10267
- children: [t82, t83, t85]
10466
+ children: [t84, t85, t87]
10268
10467
  }, void 0, true);
10269
- $[233] = t80;
10270
- $[234] = t82;
10271
- $[235] = t85;
10272
- $[236] = t86;
10468
+ $[239] = t82;
10469
+ $[240] = t84;
10470
+ $[241] = t87;
10471
+ $[242] = t88;
10273
10472
  } else {
10274
- t86 = $[236];
10473
+ t88 = $[242];
10275
10474
  }
10276
- let t87;
10277
- if ($[237] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10278
- t87 = /* @__PURE__ */ jsxDEV("svg", {
10475
+ let t89;
10476
+ if ($[243] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10477
+ t89 = /* @__PURE__ */ jsxDEV("svg", {
10279
10478
  "aria-hidden": "true",
10280
10479
  className: "size-3.5",
10281
10480
  fill: "none",
@@ -10291,164 +10490,164 @@ const StudioLayout = () => {
10291
10490
  strokeLinecap: "round"
10292
10491
  }, void 0, false)]
10293
10492
  }, void 0, true);
10294
- $[237] = t87;
10493
+ $[243] = t89;
10295
10494
  } else {
10296
- t87 = $[237];
10495
+ t89 = $[243];
10297
10496
  }
10298
- let t88;
10299
- if ($[238] !== t) {
10300
- t88 = t("Search…");
10301
- $[238] = t;
10302
- $[239] = t88;
10497
+ let t90;
10498
+ if ($[244] !== t) {
10499
+ t90 = t("Search…");
10500
+ $[244] = t;
10501
+ $[245] = t90;
10303
10502
  } else {
10304
- t88 = $[239];
10503
+ t90 = $[245];
10305
10504
  }
10306
- let t89;
10307
- if ($[240] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10308
- t89 = /* @__PURE__ */ jsxDEV("kbd", {
10505
+ let t91;
10506
+ if ($[246] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10507
+ t91 = /* @__PURE__ */ jsxDEV("kbd", {
10309
10508
  className: "ms-auto rounded border border-border bg-background px-1 font-sans text-[10px] text-muted-foreground",
10310
10509
  children: "⌘K"
10311
10510
  }, void 0, false);
10312
- $[240] = t89;
10511
+ $[246] = t91;
10313
10512
  } else {
10314
- t89 = $[240];
10513
+ t91 = $[246];
10315
10514
  }
10316
- let t90;
10317
- if ($[241] !== t88) {
10318
- t90 = /* @__PURE__ */ jsxDEV("button", {
10515
+ let t92;
10516
+ if ($[247] !== t90) {
10517
+ t92 = /* @__PURE__ */ jsxDEV("button", {
10319
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",
10320
10519
  "data-testid": "dash-app-search",
10321
10520
  onClick: openCommandPalette,
10322
10521
  type: "button",
10323
- children: [t87, t88, t89]
10522
+ children: [t89, t90, t91]
10324
10523
  }, void 0, true);
10325
- $[241] = t88;
10326
- $[242] = t90;
10524
+ $[247] = t90;
10525
+ $[248] = t92;
10327
10526
  } else {
10328
- t90 = $[242];
10527
+ t92 = $[248];
10329
10528
  }
10330
- let t91;
10331
- if ($[243] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10332
- t91 = /* @__PURE__ */ jsxDEV("div", {
10529
+ let t93;
10530
+ if ($[249] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10531
+ t93 = /* @__PURE__ */ jsxDEV("div", {
10333
10532
  className: "ms-auto flex items-center gap-1.5 md:ms-0",
10334
10533
  children: /* @__PURE__ */ jsxDEV(ThemeToggle, {}, void 0, false)
10335
10534
  }, void 0, false);
10336
- $[243] = t91;
10535
+ $[249] = t93;
10337
10536
  } else {
10338
- t91 = $[243];
10537
+ t93 = $[249];
10339
10538
  }
10340
- let t92;
10341
- if ($[244] !== t86 || $[245] !== t90) {
10342
- t92 = /* @__PURE__ */ jsxDEV("header", {
10539
+ let t94;
10540
+ if ($[250] !== t88 || $[251] !== t92) {
10541
+ t94 = /* @__PURE__ */ jsxDEV("header", {
10343
10542
  className: "flex h-11 shrink-0 items-center gap-2 border-b border-border px-4",
10344
10543
  "data-testid": "dash-app-header",
10345
- children: [t79, t86, t90, t91]
10544
+ children: [t81, t88, t92, t93]
10346
10545
  }, void 0, true);
10347
- $[244] = t86;
10348
- $[245] = t90;
10349
- $[246] = t92;
10546
+ $[250] = t88;
10547
+ $[251] = t92;
10548
+ $[252] = t94;
10350
10549
  } else {
10351
- t92 = $[246];
10550
+ t94 = $[252];
10352
10551
  }
10353
- let t93;
10354
- if ($[247] !== chrome?.rulesInstalled) {
10355
- t93 = chrome?.rulesInstalled === false && /* @__PURE__ */ jsxDEV(RulesBanner, {}, void 0, false);
10356
- $[247] = chrome?.rulesInstalled;
10357
- $[248] = t93;
10358
- } else {
10359
- t93 = $[248];
10360
- }
10361
- const t94 = `dash-tab-${current}`;
10362
- const t95 = fullHeight ? "flex min-w-0 flex-1 flex-col overflow-hidden" : "min-w-0 flex-1 overflow-auto p-6";
10363
- const t96 = tabLabel[current];
10364
- let t97;
10365
- if ($[249] !== t || $[250] !== t96) {
10366
- t97 = t("{title} failed", {
10367
- title: t96
10368
- });
10369
- $[249] = t;
10370
- $[250] = t96;
10371
- $[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;
10372
10557
  } else {
10373
- t97 = $[251];
10558
+ t95 = $[254];
10374
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";
10375
10562
  const t98 = tabLabel[current];
10376
10563
  let t99;
10377
- if ($[252] !== t) {
10378
- t99 = t("Try again");
10379
- $[252] = t;
10380
- $[253] = t99;
10381
- } else {
10382
- t99 = $[253];
10383
- }
10384
- let t100;
10385
- if ($[254] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10386
- t100 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
10387
- $[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;
10388
10571
  } else {
10389
- t100 = $[254];
10572
+ t99 = $[257];
10390
10573
  }
10574
+ const t100 = tabLabel[current];
10391
10575
  let t101;
10392
- if ($[255] !== current || $[256] !== t97 || $[257] !== t98 || $[258] !== t99) {
10393
- t101 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
10394
- fallbackTitle: t97,
10395
- label: t98,
10396
- retryLabel: t99,
10397
- children: t100
10398
- }, current, false);
10399
- $[255] = current;
10400
- $[256] = t97;
10401
- $[257] = t98;
10402
- $[258] = t99;
10576
+ if ($[258] !== t) {
10577
+ t101 = t("Try again");
10578
+ $[258] = t;
10403
10579
  $[259] = t101;
10404
10580
  } else {
10405
10581
  t101 = $[259];
10406
10582
  }
10407
10583
  let t102;
10408
- if ($[260] !== t101 || $[261] !== t95) {
10409
- t102 = /* @__PURE__ */ jsxDEV("div", {
10410
- className: t95,
10411
- children: t101
10412
- }, void 0, false);
10413
- $[260] = t101;
10414
- $[261] = t95;
10415
- $[262] = t102;
10584
+ if ($[260] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
10585
+ t102 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
10586
+ $[260] = t102;
10416
10587
  } else {
10417
- t102 = $[262];
10588
+ t102 = $[260];
10418
10589
  }
10419
10590
  let t103;
10420
- if ($[263] !== t102 || $[264] !== t94) {
10421
- t103 = /* @__PURE__ */ jsxDEV("div", {
10422
- "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,
10423
10622
  className: "flex min-w-0 flex-1 flex-col overflow-hidden",
10424
10623
  "data-testid": "dash-panel",
10425
10624
  id: "dash-panel",
10426
10625
  role: "tabpanel",
10427
- children: t102
10626
+ children: t104
10428
10627
  }, void 0, false);
10429
- $[263] = t102;
10430
- $[264] = t94;
10431
- $[265] = t103;
10628
+ $[269] = t104;
10629
+ $[270] = t96;
10630
+ $[271] = t105;
10432
10631
  } else {
10433
- t103 = $[265];
10632
+ t105 = $[271];
10434
10633
  }
10435
- let t104;
10436
- if ($[266] !== t103 || $[267] !== t92 || $[268] !== t93) {
10437
- t104 = /* @__PURE__ */ jsxDEV(SidebarInset, {
10634
+ let t106;
10635
+ if ($[272] !== t105 || $[273] !== t94 || $[274] !== t95) {
10636
+ t106 = /* @__PURE__ */ jsxDEV(SidebarInset, {
10438
10637
  className: "overflow-hidden md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",
10439
- children: [t92, t93, t103]
10638
+ children: [t94, t95, t105]
10440
10639
  }, void 0, true);
10441
- $[266] = t103;
10442
- $[267] = t92;
10443
- $[268] = t93;
10444
- $[269] = t104;
10640
+ $[272] = t105;
10641
+ $[273] = t94;
10642
+ $[274] = t95;
10643
+ $[275] = t106;
10445
10644
  } else {
10446
- t104 = $[269];
10645
+ t106 = $[275];
10447
10646
  }
10448
10647
  return /* @__PURE__ */ jsxDEV(SidebarProvider, {
10449
10648
  className: "min-h-0 flex-1",
10450
10649
  "data-testid": "lunora-studio",
10451
- children: [t78, /* @__PURE__ */ jsxDEV(StudioSidebar, {
10650
+ children: [t80, /* @__PURE__ */ jsxDEV(StudioSidebar, {
10452
10651
  chrome,
10453
10652
  connected,
10454
10653
  current,
@@ -10457,7 +10656,7 @@ const StudioLayout = () => {
10457
10656
  selectTab,
10458
10657
  tabDescription,
10459
10658
  tabLabel
10460
- }, void 0, false), t104]
10659
+ }, void 0, false), t106]
10461
10660
  }, void 0, true);
10462
10661
  };
10463
10662
  const RoutePending = () => {
@@ -10584,6 +10783,9 @@ const buildRouter = ({
10584
10783
  initialShardKey
10585
10784
  }, void 0, false),
10586
10785
  files: /* @__PURE__ */ jsxDEV(FileBrowser, {}, void 0, false),
10786
+ flags: /* @__PURE__ */ jsxDEV(FlagsPanel, {
10787
+ initialShardKey
10788
+ }, void 0, false),
10587
10789
  functions: /* @__PURE__ */ jsxDEV("div", {
10588
10790
  className: "flex flex-col gap-8",
10589
10791
  children: [/* @__PURE__ */ jsxDEV(FunctionStatsPanel, {
@@ -10654,11 +10856,21 @@ const buildRouter = ({
10654
10856
  getParentRoute: () => rootRoute,
10655
10857
  path: "/"
10656
10858
  });
10657
- const tabRoutes = TABS.map((tab) => createRoute({
10658
- component: () => panels[tab],
10659
- getParentRoute: () => rootRoute,
10660
- path: `/${tab}`
10661
- }));
10859
+ const tabRoutes = TABS.map((tab) => {
10860
+ if (tab === "data") {
10861
+ return createRoute({
10862
+ component: () => panels[tab],
10863
+ getParentRoute: () => rootRoute,
10864
+ path: `/${tab}`,
10865
+ validateSearch: validateDataViewSearch
10866
+ });
10867
+ }
10868
+ return createRoute({
10869
+ component: () => panels[tab],
10870
+ getParentRoute: () => rootRoute,
10871
+ path: `/${tab}`
10872
+ });
10873
+ });
10662
10874
  const routeTree = rootRoute.addChildren([indexRoute, ...tabRoutes]);
10663
10875
  const history = "window" in globalThis ? createBrowserHistory() : createMemoryHistory({
10664
10876
  initialEntries: ["/home"]