@lunora/studio 0.0.0 → 1.0.0-alpha.1

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 (81) hide show
  1. package/LICENSE.md +105 -0
  2. package/README.md +123 -9
  3. package/__assets__/package-og.svg +14 -0
  4. package/dist/index.d.ts +1402 -0
  5. package/dist/index.js +41 -0
  6. package/dist/mount.d.ts +21 -0
  7. package/dist/mount.js +26 -0
  8. package/dist/packem_shared/ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js +45 -0
  9. package/dist/packem_shared/ApiDocsPanel-DpRjJhG5.js +842 -0
  10. package/dist/packem_shared/ApiReferencePanel-DMIUp-kK.js +229 -0
  11. package/dist/packem_shared/ApiTab-DURGU15e.js +251 -0
  12. package/dist/packem_shared/AuditPanel-BC59Nhst.js +212 -0
  13. package/dist/packem_shared/CommandPalette-Dx_CoB9i.js +373 -0
  14. package/dist/packem_shared/ConfirmButton-WQVUoGFb.js +59 -0
  15. package/dist/packem_shared/ConnectionBadge-Bxagrip8.js +111 -0
  16. package/dist/packem_shared/DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js +50 -0
  17. package/dist/packem_shared/DEFAULT_INSIGHT_THRESHOLDS-DjF0h-gA.js +89 -0
  18. package/dist/packem_shared/DataBrowser-Coz6jJE6.js +4542 -0
  19. package/dist/packem_shared/DataFilters-FNquMaiu.js +249 -0
  20. package/dist/packem_shared/ErrorBoundary-BzAApI7J.js +66 -0
  21. package/dist/packem_shared/ExportImportPanel-WO34fJxy.js +193 -0
  22. package/dist/packem_shared/FileBrowser-Zcr-Qgxo.js +2932 -0
  23. package/dist/packem_shared/FunctionRunner-j0Rd5m9t.js +343 -0
  24. package/dist/packem_shared/FunctionStatsPanel-DboBl-XL.js +432 -0
  25. package/dist/packem_shared/GlobalDataBrowser-9MhPEfgN.js +318 -0
  26. package/dist/packem_shared/HealthPanel-DOIgbUtx.js +640 -0
  27. package/dist/packem_shared/HomePanel-bdOCNA-p.js +1273 -0
  28. package/dist/packem_shared/InsightsPanel-DaZPnSgt.js +423 -0
  29. package/dist/packem_shared/LogsPanel-CWdqAGpQ.js +839 -0
  30. package/dist/packem_shared/MailPanel-D_EGtDnS.js +447 -0
  31. package/dist/packem_shared/MetricsPanel-E4Gv6wTO.js +1625 -0
  32. package/dist/packem_shared/MigrationsPanel-DQdPY9io.js +246 -0
  33. package/dist/packem_shared/OpenRpcReferencePanel-j2p3HB0s.js +191 -0
  34. package/dist/packem_shared/PitrPanel-BbBkQR6t.js +252 -0
  35. package/dist/packem_shared/STUDIO_ROOT_CLASS-D12gX2dV.js +3 -0
  36. package/dist/packem_shared/ScheduledJobs-Ok1CYYwI.js +159 -0
  37. package/dist/packem_shared/SchemaViewer-D8XGnp-X.js +2512 -0
  38. package/dist/packem_shared/SecurityAdvisorPanel-Cdm2IxLW.js +79 -0
  39. package/dist/packem_shared/SettingsPanel-D3WF2mBU.js +176 -0
  40. package/dist/packem_shared/ShardInput-DNCsT1KW.js +107 -0
  41. package/dist/packem_shared/SqlEditorPanel-BuQ7f2Hs.js +13 -0
  42. package/dist/packem_shared/Studio-D36od9Oz.js +33 -0
  43. package/dist/packem_shared/StudioApp-dvywkJ8I.js +383 -0
  44. package/dist/packem_shared/StudioI18nProvider-Dcajsznk.js +48 -0
  45. package/dist/packem_shared/TableEditor-DIVDk3vT.js +371 -0
  46. package/dist/packem_shared/advisor-view-DBlzJi6C.js +159 -0
  47. package/dist/packem_shared/aggregateMetrics-D4nUHEKU.js +108 -0
  48. package/dist/packem_shared/app.d-CCmwDEVs.d.ts +300 -0
  49. package/dist/packem_shared/badge-B2PKA1-5.js +49 -0
  50. package/dist/packem_shared/bar-chart-CzJAgqkp.js +3245 -0
  51. package/dist/packem_shared/button-BhsN2uZH.js +49 -0
  52. package/dist/packem_shared/card-DURq3ElK.js +175 -0
  53. package/dist/packem_shared/cf-links-BZfRdxSE.js +8 -0
  54. package/dist/packem_shared/checkbox-UNkzAxl-.js +63 -0
  55. package/dist/packem_shared/createStudioI18n-CgvlmDkN.js +27 -0
  56. package/dist/packem_shared/data-grid-CCh2Couo.js +183 -0
  57. package/dist/packem_shared/dropdown-menu-WY4B_eJO.js +280 -0
  58. package/dist/packem_shared/empty-state-DY_oe0k6.js +98 -0
  59. package/dist/packem_shared/grid-features-DTjG6Sex.js +840 -0
  60. package/dist/packem_shared/input-XH4r1Pt1.js +53 -0
  61. package/dist/packem_shared/internal-BBZYexre.js +68 -0
  62. package/dist/packem_shared/label-D8ykjn5J.js +46 -0
  63. package/dist/packem_shared/live-status-bPff1O7Y.js +44 -0
  64. package/dist/packem_shared/reference-view-BCKIoai7.js +2180 -0
  65. package/dist/packem_shared/shard-history-DyebH1R5.js +38 -0
  66. package/dist/packem_shared/sparkline-10dG-_f0.js +93 -0
  67. package/dist/packem_shared/sql-editor-panel-CW2y2x9h.js +2562 -0
  68. package/dist/packem_shared/storage-tier-CL98eOvn.js +85 -0
  69. package/dist/packem_shared/studio-BDVd7rIV.js +10303 -0
  70. package/dist/packem_shared/table-_RzNvy3R.js +246 -0
  71. package/dist/packem_shared/table-list-sidebar-aZHLq70w.js +832 -0
  72. package/dist/packem_shared/textarea-D3gaCU_-.js +46 -0
  73. package/dist/packem_shared/use-live-admin-D1h1Fzsd.js +73 -0
  74. package/dist/packem_shared/use-live-shard-seed-B74RYcOy.js +76 -0
  75. package/dist/packem_shared/useDebounced-Dxncpg6z.js +32 -0
  76. package/dist/packem_shared/utils-B05Dmz_H.js +8 -0
  77. package/dist/packem_shared/virtual-rect-CVMUskSm.js +10 -0
  78. package/dist/standalone/studio.js +356 -0
  79. package/dist/styles.css +2 -0
  80. package/package.json +77 -17
  81. package/src/theme.css +59 -0
@@ -0,0 +1,79 @@
1
+ import { useLunora } from '@lunora/react';
2
+ import { useState, useEffect } from 'react';
3
+ import { useT } from './createStudioI18n-CgvlmDkN.js';
4
+ import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js';
5
+ import { f as fireAndForget, c as callOptions, e as errorMessage, a as adminRef } from './internal-BBZYexre.js';
6
+ import { A as AdvisorView } from './advisor-view-DBlzJi6C.js';
7
+ import { jsxDEV } from 'react/jsx-dev-runtime';
8
+
9
+ const GET_SECURITY_AUDIT = adminRef(ADMIN_FUNCTIONS.getSecurityAudit);
10
+ const findingTitle = (t, finding) => ({
11
+ "admin-token-weak": t("Weak admin token"),
12
+ "auth-secret-weak": t("Weak auth secret"),
13
+ "cookies-insecure": t("Session cookies are not Secure"),
14
+ "cors-wildcard-credentials": t("Wildcard CORS with credentials"),
15
+ "csrf-disabled": t("CSRF/origin guard is off"),
16
+ "dev-args-unredacted": t("Request log keeps un-redacted args"),
17
+ "security-headers-disabled": t("Security headers are off"),
18
+ "ws-gate-open": t("Live admin subscriptions are ungated")
19
+ })[finding.kind];
20
+ const findingEntity = (finding) => ({
21
+ "admin-token-weak": "LUNORA_ADMIN_TOKEN",
22
+ "auth-secret-weak": "AUTH_SECRET",
23
+ "cookies-insecure": "BETTER_AUTH_URL",
24
+ "cors-wildcard-credentials": "LUNORA_ALLOWED_ORIGINS",
25
+ "csrf-disabled": "LUNORA_SECURITY_CSRF",
26
+ "dev-args-unredacted": "request log",
27
+ "security-headers-disabled": "LUNORA_SECURITY_HEADERS",
28
+ "ws-gate-open": "LUNORA_WS_BEARER"
29
+ })[finding.kind];
30
+ const findingDetail = (t, finding) => ({
31
+ "admin-token-weak": t("Your admin token is {length} characters — use at least {min} for a brute-force-resistant secret.", {
32
+ length: finding.detail?.["length"],
33
+ min: finding.detail?.["min"]
34
+ }),
35
+ "auth-secret-weak": t("Your auth secret is {length} characters — use at least {min} (e.g. `openssl rand -hex 32`) to sign sessions safely.", {
36
+ length: finding.detail?.["length"],
37
+ min: finding.detail?.["min"]
38
+ }),
39
+ "cookies-insecure": t("BETTER_AUTH_URL is a plaintext http:// origin, so session cookies cannot be Secure and ride in cleartext. Serve auth over https:// in production."),
40
+ "cors-wildcard-credentials": t("LUNORA_ALLOWED_ORIGINS includes a wildcard while credentials are allowed — browsers reject this and it defeats the allowlist. Name explicit origins instead of *."),
41
+ "csrf-disabled": t("LUNORA_SECURITY_CSRF is off, so cross-origin state-changing cookie requests are not blocked. Re-enable it in production to keep mutations un-forgeable."),
42
+ "dev-args-unredacted": t("This worker reports a development environment, so the request log stores raw args and identity. Confirm it isn't a mislabeled production deploy."),
43
+ "security-headers-disabled": t("LUNORA_SECURITY_HEADERS is off, so HSTS, CSP, nosniff, and frame-options are not applied. Re-enable the baseline headers in production."),
44
+ "ws-gate-open": t("LUNORA_WS_BEARER is unset, so the WebSocket upgrade gate is open: live admin subscriptions need no credential. Set it to gate them like the HTTP admin RPCs.")
45
+ })[finding.kind];
46
+ const SecurityAdvisorPanel = () => {
47
+ const client = useLunora();
48
+ const t = useT();
49
+ const [findings, setFindings] = useState(null);
50
+ const [error, setError] = useState(null);
51
+ const refresh = async () => {
52
+ try {
53
+ const result = await client.query(GET_SECURITY_AUDIT, {}, callOptions(""));
54
+ setFindings(Array.isArray(result.findings) ? result.findings : []);
55
+ setError(null);
56
+ } catch (error_) {
57
+ setError(errorMessage(error_));
58
+ }
59
+ };
60
+ useEffect(() => {
61
+ fireAndForget(refresh());
62
+ }, [refresh]);
63
+ const rows = findings === null ? null : findings.map((finding) => {
64
+ return {
65
+ description: findingDetail(t, finding),
66
+ entity: findingEntity(finding),
67
+ issueType: findingTitle(t, finding),
68
+ key: finding.kind,
69
+ level: finding.level
70
+ };
71
+ });
72
+ return /* @__PURE__ */ jsxDEV(AdvisorView, {
73
+ error,
74
+ rows,
75
+ testId: "lunora-security-advisor"
76
+ }, void 0, false);
77
+ };
78
+
79
+ export { SecurityAdvisorPanel as default };
@@ -0,0 +1,176 @@
1
+ import { useLunora } from '@lunora/react';
2
+ import { useState, useCallback, useEffect, useMemo } from 'react';
3
+ import { B as Badge } from './badge-B2PKA1-5.js';
4
+ import { C as Card, a as CardContent } from './card-DURq3ElK.js';
5
+ import { T as Table, a as TableHeader, b as TableRow, c as TableHead, d as TableBody, e as TableCell } from './table-_RzNvy3R.js';
6
+ import { useT } from './createStudioI18n-CgvlmDkN.js';
7
+ import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js';
8
+ import { b as CLOUDFLARE_WORKERS_URL } from './cf-links-BZfRdxSE.js';
9
+ import { c as callOptions, e as errorMessage, f as fireAndForget, a as adminRef } from './internal-BBZYexre.js';
10
+ import { jsxDEV } from 'react/jsx-dev-runtime';
11
+
12
+ const GET_SETTINGS = adminRef(ADMIN_FUNCTIONS.getSettings);
13
+ const KIND_VARIANT = {
14
+ binding: "outline",
15
+ secret: "destructive",
16
+ var: "secondary"
17
+ };
18
+ const SettingsPanel = ({
19
+ initialShardKey
20
+ }) => {
21
+ const client = useLunora();
22
+ const t = useT();
23
+ const [result, setResult] = useState(null);
24
+ const [error, setError] = useState(null);
25
+ const [loading, setLoading] = useState(false);
26
+ const refresh = useCallback(async () => {
27
+ setLoading(true);
28
+ setError(null);
29
+ try {
30
+ const settings = await client.query(GET_SETTINGS, {}, callOptions(initialShardKey ?? ""));
31
+ setResult(settings);
32
+ } catch (error_) {
33
+ setResult(null);
34
+ setError(errorMessage(error_));
35
+ } finally {
36
+ setLoading(false);
37
+ }
38
+ }, [client, initialShardKey]);
39
+ useEffect(() => {
40
+ fireAndForget(refresh());
41
+ }, [refresh]);
42
+ const deployRows = useMemo(() => {
43
+ const deploy = result?.deploy;
44
+ if (deploy === void 0) {
45
+ return [];
46
+ }
47
+ const rows = [];
48
+ if (deploy.workerUrl !== void 0) {
49
+ rows.push({
50
+ label: t("URL"),
51
+ value: deploy.workerUrl
52
+ });
53
+ }
54
+ if (deploy.environment !== void 0) {
55
+ rows.push({
56
+ label: t("Environment"),
57
+ value: deploy.environment
58
+ });
59
+ }
60
+ if (deploy.deploymentId !== void 0) {
61
+ rows.push({
62
+ label: t("Deployment"),
63
+ value: deploy.deploymentId
64
+ });
65
+ }
66
+ if (deploy.versionTag !== void 0) {
67
+ rows.push({
68
+ label: t("Version"),
69
+ value: deploy.versionTag
70
+ });
71
+ }
72
+ return rows;
73
+ }, [result, t]);
74
+ const settings_0 = result?.settings ?? [];
75
+ return /* @__PURE__ */ jsxDEV("div", {
76
+ className: "flex flex-col gap-4",
77
+ "data-testid": "lunora-settings",
78
+ children: [/* @__PURE__ */ jsxDEV("div", {
79
+ className: "flex flex-wrap items-center gap-3",
80
+ children: /* @__PURE__ */ jsxDEV("a", {
81
+ className: "text-sm text-primary underline-offset-4 hover:underline",
82
+ "data-testid": "set-cf-link",
83
+ href: CLOUDFLARE_WORKERS_URL,
84
+ rel: "noreferrer",
85
+ target: "_blank",
86
+ children: t("Open in Cloudflare")
87
+ }, void 0, false)
88
+ }, void 0, false), /* @__PURE__ */ jsxDEV("p", {
89
+ className: "text-sm text-muted-foreground",
90
+ "data-testid": "set-readonly-note",
91
+ children: t("View-only — values are masked. Edit vars, secrets, and bindings in wrangler or the Cloudflare dashboard.")
92
+ }, void 0, false), error !== null && /* @__PURE__ */ jsxDEV("p", {
93
+ className: "text-sm text-destructive",
94
+ "data-testid": "set-error",
95
+ role: "alert",
96
+ children: error
97
+ }, void 0, false), deployRows.length > 0 && /* @__PURE__ */ jsxDEV(Card, {
98
+ className: "py-0",
99
+ "data-testid": "set-deploy",
100
+ children: [/* @__PURE__ */ jsxDEV("header", {
101
+ className: "border-b border-border px-4 py-3",
102
+ children: /* @__PURE__ */ jsxDEV("span", {
103
+ className: "font-mono text-[11px] tracking-wide text-muted-foreground uppercase",
104
+ children: t("Deployment")
105
+ }, void 0, false)
106
+ }, void 0, false), /* @__PURE__ */ jsxDEV(CardContent, {
107
+ className: "py-3",
108
+ children: /* @__PURE__ */ jsxDEV("dl", {
109
+ className: "grid grid-cols-[8rem_minmax(0,1fr)] gap-x-4 gap-y-1 text-sm",
110
+ children: deployRows.map((row) => /* @__PURE__ */ jsxDEV("div", {
111
+ className: "contents",
112
+ "data-testid": "set-deploy-row",
113
+ children: [/* @__PURE__ */ jsxDEV("dt", {
114
+ className: "text-muted-foreground",
115
+ children: row.label
116
+ }, void 0, false), /* @__PURE__ */ jsxDEV("dd", {
117
+ className: "truncate font-mono text-xs",
118
+ title: row.value,
119
+ children: row.value
120
+ }, void 0, false)]
121
+ }, row.label, true))
122
+ }, void 0, false)
123
+ }, void 0, false)]
124
+ }, void 0, true), /* @__PURE__ */ jsxDEV(Card, {
125
+ className: "py-0",
126
+ children: [/* @__PURE__ */ jsxDEV("header", {
127
+ className: "border-b border-border px-4 py-3",
128
+ children: /* @__PURE__ */ jsxDEV("span", {
129
+ className: "font-mono text-[11px] tracking-wide text-muted-foreground uppercase",
130
+ children: t("Environment & bindings")
131
+ }, void 0, false)
132
+ }, void 0, false), error === null && !loading && settings_0.length === 0 && /* @__PURE__ */ jsxDEV("p", {
133
+ className: "px-4 py-8 text-center text-sm text-muted-foreground",
134
+ "data-testid": "set-empty",
135
+ children: t("No environment variables or bindings.")
136
+ }, void 0, false), settings_0.length > 0 && /* @__PURE__ */ jsxDEV(CardContent, {
137
+ className: "px-0 py-0",
138
+ children: /* @__PURE__ */ jsxDEV(Table, {
139
+ "data-testid": "set-table",
140
+ children: [/* @__PURE__ */ jsxDEV(TableHeader, {
141
+ children: /* @__PURE__ */ jsxDEV(TableRow, {
142
+ children: [/* @__PURE__ */ jsxDEV(TableHead, {
143
+ children: t("name")
144
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
145
+ children: t("kind")
146
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
147
+ children: t("value")
148
+ }, void 0, false)]
149
+ }, void 0, true)
150
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableBody, {
151
+ children: settings_0.map((entry) => /* @__PURE__ */ jsxDEV(TableRow, {
152
+ "data-testid": "set-row",
153
+ children: [/* @__PURE__ */ jsxDEV(TableCell, {
154
+ className: "font-mono text-xs font-medium",
155
+ children: entry.name
156
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
157
+ children: /* @__PURE__ */ jsxDEV(Badge, {
158
+ variant: KIND_VARIANT[entry.kind],
159
+ children: entry.bindingType ?? entry.kind
160
+ }, void 0, false)
161
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
162
+ className: "max-w-[28ch] truncate font-mono text-xs text-muted-foreground",
163
+ children: entry.value ?? /* @__PURE__ */ jsxDEV("span", {
164
+ className: "text-muted-foreground",
165
+ children: "—"
166
+ }, void 0, false)
167
+ }, void 0, false)]
168
+ }, entry.name, true))
169
+ }, void 0, false)]
170
+ }, void 0, true)
171
+ }, void 0, false)]
172
+ }, void 0, true)]
173
+ }, void 0, true);
174
+ };
175
+
176
+ export { SettingsPanel };
@@ -0,0 +1,107 @@
1
+ import { c } from 'react/compiler-runtime';
2
+ import { useId, useState } from 'react';
3
+ import { useT } from './createStudioI18n-CgvlmDkN.js';
4
+ import { l as loadRecentShards } from './shard-history-DyebH1R5.js';
5
+ import { I as Input } from './input-XH4r1Pt1.js';
6
+ import { jsxDEV, Fragment } from 'react/jsx-dev-runtime';
7
+
8
+ const ShardInput = (t0) => {
9
+ const $ = c(21);
10
+ const {
11
+ id,
12
+ onChange,
13
+ testId,
14
+ value
15
+ } = t0;
16
+ const t = useT();
17
+ const listId = useId();
18
+ const [recents] = useState(_temp);
19
+ let t1;
20
+ if ($[0] !== onChange) {
21
+ t1 = (event) => {
22
+ onChange(event.target.value);
23
+ };
24
+ $[0] = onChange;
25
+ $[1] = t1;
26
+ } else {
27
+ t1 = $[1];
28
+ }
29
+ const onInputChange = t1;
30
+ let t2;
31
+ if ($[2] !== t) {
32
+ t2 = t("Shard key");
33
+ $[2] = t;
34
+ $[3] = t2;
35
+ } else {
36
+ t2 = $[3];
37
+ }
38
+ const t3 = recents.length > 0 ? listId : void 0;
39
+ let t4;
40
+ if ($[4] !== t) {
41
+ t4 = t("shard key (optional)");
42
+ $[4] = t;
43
+ $[5] = t4;
44
+ } else {
45
+ t4 = $[5];
46
+ }
47
+ let t5;
48
+ if ($[6] !== id || $[7] !== onInputChange || $[8] !== t2 || $[9] !== t3 || $[10] !== t4 || $[11] !== testId || $[12] !== value) {
49
+ t5 = /* @__PURE__ */ jsxDEV(Input, {
50
+ "aria-label": t2,
51
+ className: "h-8 w-48",
52
+ "data-testid": testId,
53
+ id,
54
+ list: t3,
55
+ onChange: onInputChange,
56
+ placeholder: t4,
57
+ value
58
+ }, void 0, false);
59
+ $[6] = id;
60
+ $[7] = onInputChange;
61
+ $[8] = t2;
62
+ $[9] = t3;
63
+ $[10] = t4;
64
+ $[11] = testId;
65
+ $[12] = value;
66
+ $[13] = t5;
67
+ } else {
68
+ t5 = $[13];
69
+ }
70
+ let t6;
71
+ if ($[14] !== listId || $[15] !== recents || $[16] !== testId) {
72
+ t6 = recents.length > 0 && /* @__PURE__ */ jsxDEV("datalist", {
73
+ "data-testid": `${testId}-recents`,
74
+ id: listId,
75
+ children: recents.map(_temp2)
76
+ }, void 0, false);
77
+ $[14] = listId;
78
+ $[15] = recents;
79
+ $[16] = testId;
80
+ $[17] = t6;
81
+ } else {
82
+ t6 = $[17];
83
+ }
84
+ let t7;
85
+ if ($[18] !== t5 || $[19] !== t6) {
86
+ t7 = /* @__PURE__ */ jsxDEV(Fragment, {
87
+ children: [t5, t6]
88
+ }, void 0, true);
89
+ $[18] = t5;
90
+ $[19] = t6;
91
+ $[20] = t7;
92
+ } else {
93
+ t7 = $[20];
94
+ }
95
+ return t7;
96
+ };
97
+ function _temp() {
98
+ return loadRecentShards();
99
+ }
100
+ function _temp2(shard) {
101
+ return /* @__PURE__ */ jsxDEV("option", {
102
+ "aria-label": shard,
103
+ value: shard
104
+ }, shard, false);
105
+ }
106
+
107
+ export { ShardInput };
@@ -0,0 +1,13 @@
1
+ import 'react/compiler-runtime';
2
+ import '@lunora/react';
3
+ import 'react';
4
+ export { S as SqlEditorPanel } from './sql-editor-panel-CW2y2x9h.js';
5
+ import './ShardInput-DNCsT1KW.js';
6
+ import './table-_RzNvy3R.js';
7
+ import './createStudioI18n-CgvlmDkN.js';
8
+ import './ADMIN_FUNCTION_PREFIX-DmBqMZ-z.js';
9
+ import './internal-BBZYexre.js';
10
+ import './shard-history-DyebH1R5.js';
11
+ import './data-grid-CCh2Couo.js';
12
+ import './grid-features-DTjG6Sex.js';
13
+ import 'react/jsx-dev-runtime';
@@ -0,0 +1,33 @@
1
+ import 'react/compiler-runtime';
2
+ import '@tanstack/react-router';
3
+ import 'react';
4
+ export { S as Studio } from './studio-BDVd7rIV.js';
5
+ import './ErrorBoundary-BzAApI7J.js';
6
+ import './badge-B2PKA1-5.js';
7
+ import './input-XH4r1Pt1.js';
8
+ import './reference-view-BCKIoai7.js';
9
+ import './InsightsPanel-DaZPnSgt.js';
10
+ import './SecurityAdvisorPanel-Cdm2IxLW.js';
11
+ import './ApiTab-DURGU15e.js';
12
+ import './TableEditor-DIVDk3vT.js';
13
+ import './ExportImportPanel-WO34fJxy.js';
14
+ import './MigrationsPanel-DQdPY9io.js';
15
+ import './PitrPanel-BbBkQR6t.js';
16
+ import './FunctionRunner-j0Rd5m9t.js';
17
+ import './FunctionStatsPanel-DboBl-XL.js';
18
+ import './HomePanel-bdOCNA-p.js';
19
+ import './AuditPanel-BC59Nhst.js';
20
+ import './LogsPanel-CWdqAGpQ.js';
21
+ import './MailPanel-D_EGtDnS.js';
22
+ import './HealthPanel-DOIgbUtx.js';
23
+ import './MetricsPanel-E4Gv6wTO.js';
24
+ import './SchemaViewer-D8XGnp-X.js';
25
+ import './SettingsPanel-D3WF2mBU.js';
26
+ import './sql-editor-panel-CW2y2x9h.js';
27
+ import './FileBrowser-Zcr-Qgxo.js';
28
+ import './createStudioI18n-CgvlmDkN.js';
29
+ import './StudioI18nProvider-Dcajsznk.js';
30
+ import './internal-BBZYexre.js';
31
+ import './utils-B05Dmz_H.js';
32
+ import './CommandPalette-Dx_CoB9i.js';
33
+ import 'react/jsx-dev-runtime';