@rebasepro/studio 0.0.1-canary.f81da60 → 0.1.0
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.
- package/dist/core/src/components/BootstrapAdminBanner.d.ts +4 -0
- package/dist/core/src/components/LoginView/LoginView.d.ts +22 -0
- package/dist/core/src/components/index.d.ts +1 -0
- package/dist/core/src/hooks/index.d.ts +1 -0
- package/dist/core/src/hooks/useCollapsedGroups.d.ts +16 -1
- package/dist/core/src/hooks/useResolvedComponent.d.ts +47 -0
- package/dist/index.es.js +73 -65
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +72 -64
- package/dist/index.umd.js.map +1 -1
- package/dist/types/src/controllers/auth.d.ts +8 -2
- package/dist/types/src/controllers/client.d.ts +13 -0
- package/dist/types/src/controllers/navigation.d.ts +18 -6
- package/dist/types/src/controllers/registry.d.ts +9 -1
- package/dist/types/src/controllers/side_entity_controller.d.ts +7 -0
- package/dist/types/src/rebase_context.d.ts +17 -0
- package/dist/types/src/types/collections.d.ts +20 -1
- package/dist/types/src/types/component_ref.d.ts +47 -0
- package/dist/types/src/types/entity_views.d.ts +2 -1
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/properties.d.ts +15 -3
- package/dist/types/src/types/translations.d.ts +2 -0
- package/dist/ui/src/components/SearchBar.d.ts +5 -1
- package/package.json +8 -8
- package/src/components/StudioHomePage.tsx +4 -1
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import { ReactNode } from "react";
|
|
2
|
+
/** Google Identity Services SDK — injected by the GIS <script> tag. */
|
|
3
|
+
declare global {
|
|
4
|
+
interface Window {
|
|
5
|
+
google?: {
|
|
6
|
+
accounts: {
|
|
7
|
+
oauth2: {
|
|
8
|
+
initCodeClient(config: {
|
|
9
|
+
client_id: string;
|
|
10
|
+
scope: string;
|
|
11
|
+
ux_mode: "popup" | "redirect";
|
|
12
|
+
callback: (response: {
|
|
13
|
+
code?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
}): {
|
|
17
|
+
requestCode(): void;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
2
24
|
import { AuthControllerExtended } from "@rebasepro/types";
|
|
3
25
|
/**
|
|
4
26
|
* Props for the generic LoginView.
|
|
@@ -3,10 +3,25 @@
|
|
|
3
3
|
* with localStorage persistence. Automatically cleans up stale group entries
|
|
4
4
|
* when groups are removed from the navigation.
|
|
5
5
|
*
|
|
6
|
+
* Groups that have never been toggled by the user fall back to
|
|
7
|
+
* `defaults[groupName]` (driven by `collapsedByDefault` in config).
|
|
8
|
+
*
|
|
6
9
|
* @param groupNames - Array of group names to track
|
|
7
10
|
* @param namespace - Namespace for localStorage key (e.g., "home", "drawer") to allow independent state
|
|
11
|
+
* @param defaults - Optional map of group name → collapsed boolean from config
|
|
8
12
|
*/
|
|
9
|
-
export declare function useCollapsedGroups(groupNames: string[], namespace?: string): {
|
|
13
|
+
export declare function useCollapsedGroups(groupNames: string[], namespace?: string, defaults?: Record<string, boolean>): {
|
|
10
14
|
isGroupCollapsed: (name: string) => boolean;
|
|
11
15
|
toggleGroupCollapsed: (name: string) => void;
|
|
12
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Build a defaults map from navigationGroupMappings for a given namespace.
|
|
19
|
+
* Returns a Record<groupName, collapsed> that can be passed to useCollapsedGroups.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildCollapsedDefaults(mappings: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
collapsedByDefault?: boolean | {
|
|
24
|
+
drawer?: boolean;
|
|
25
|
+
home?: boolean;
|
|
26
|
+
};
|
|
27
|
+
}> | undefined, namespace: "drawer" | "home"): Record<string, boolean>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ComponentRef } from "@rebasepro/types";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a `ComponentRef` into a renderable `React.ComponentType`.
|
|
5
|
+
*
|
|
6
|
+
* This hook handles all three forms of `ComponentRef`:
|
|
7
|
+
*
|
|
8
|
+
* 1. **`LazyComponentRef`** (produced by the Vite plugin from string paths):
|
|
9
|
+
* Wraps the lazy loader with `React.lazy()` for automatic code-splitting.
|
|
10
|
+
*
|
|
11
|
+
* 2. **`() => Promise<{ default: ComponentType }>`** (manual lazy import):
|
|
12
|
+
* Also wraps with `React.lazy()`. Distinguished from regular components
|
|
13
|
+
* by checking that the function has no parameters and is not a known
|
|
14
|
+
* React internal (no `$$typeof`).
|
|
15
|
+
*
|
|
16
|
+
* 3. **Direct `React.ComponentType`**:
|
|
17
|
+
* Returned as-is.
|
|
18
|
+
*
|
|
19
|
+
* If the ref is `undefined` or a raw string (which should never happen at
|
|
20
|
+
* runtime in the browser since the Vite plugin transforms strings), returns `undefined`.
|
|
21
|
+
*
|
|
22
|
+
* The returned component is stable across re-renders as long as the `ref`
|
|
23
|
+
* is referentially stable.
|
|
24
|
+
*
|
|
25
|
+
* **Usage:** Wrap the rendered component in `<Suspense>` to handle the
|
|
26
|
+
* loading state of lazy components.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* const ResolvedField = useResolvedComponent(property.ui?.Field);
|
|
31
|
+
* if (!ResolvedField) return null;
|
|
32
|
+
* return (
|
|
33
|
+
* <Suspense fallback={<CircularProgress />}>
|
|
34
|
+
* <ResolvedField {...fieldProps} />
|
|
35
|
+
* </Suspense>
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function useResolvedComponent<P = unknown>(ref: ComponentRef<P> | undefined): React.ComponentType<P> | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Pure function version of the resolver, for use outside React components.
|
|
42
|
+
* Same resolution logic as `useResolvedComponent`.
|
|
43
|
+
*
|
|
44
|
+
* Results are cached per reference identity — calling this multiple times
|
|
45
|
+
* with the same `ref` object returns the same `React.ComponentType`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveComponentRef<P = unknown>(ref: ComponentRef<P> | undefined): React.ComponentType<P> | undefined;
|
package/dist/index.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useRebaseContext, useStudioBreadcrumbs, useRestoreScroll, useSlot, IconForView, useRebaseRegistryDispatch } from "@rebasepro/core";
|
|
1
|
+
import { useRebaseContext, useStudioBreadcrumbs, useRestoreScroll, useSlot, IconForView, BootstrapAdminBanner, useRebaseRegistryDispatch } from "@rebasepro/core";
|
|
2
2
|
import { StudioBridgeContext, StudioBridgeProvider, useStudioBreadcrumbs as useStudioBreadcrumbs2, useStudioCollectionRegistry, useStudioNavigationState, useStudioSideEntityController, useStudioUrlController } from "@rebasepro/core";
|
|
3
3
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
4
4
|
import React, { useEffect, lazy, useMemo, useLayoutEffect, Suspense } from "react";
|
|
@@ -88,7 +88,7 @@ const SECTIONS = [{
|
|
|
88
88
|
}]
|
|
89
89
|
}];
|
|
90
90
|
function StudioHomePage(t0) {
|
|
91
|
-
const $ = c(
|
|
91
|
+
const $ = c(30);
|
|
92
92
|
const {
|
|
93
93
|
additionalActions,
|
|
94
94
|
additionalChildrenStart,
|
|
@@ -135,20 +135,27 @@ function StudioHomePage(t0) {
|
|
|
135
135
|
const sectionProps = t3;
|
|
136
136
|
const pluginActions = useSlot("home.actions", sectionProps);
|
|
137
137
|
let t4;
|
|
138
|
-
if ($[6]
|
|
139
|
-
t4 =
|
|
138
|
+
if ($[6] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
139
|
+
t4 = /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(BootstrapAdminBanner, {}) });
|
|
140
|
+
$[6] = t4;
|
|
141
|
+
} else {
|
|
142
|
+
t4 = $[6];
|
|
143
|
+
}
|
|
144
|
+
let t5;
|
|
145
|
+
if ($[7] !== additionalActions || $[8] !== pluginActions) {
|
|
146
|
+
t5 = (additionalActions || pluginActions) && /* @__PURE__ */ jsxs("div", { className: "w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4 justify-end", children: [
|
|
140
147
|
additionalActions,
|
|
141
148
|
pluginActions
|
|
142
149
|
] });
|
|
143
|
-
$[
|
|
144
|
-
$[
|
|
145
|
-
$[
|
|
150
|
+
$[7] = additionalActions;
|
|
151
|
+
$[8] = pluginActions;
|
|
152
|
+
$[9] = t5;
|
|
146
153
|
} else {
|
|
147
|
-
|
|
154
|
+
t5 = $[9];
|
|
148
155
|
}
|
|
149
|
-
let
|
|
150
|
-
if ($[
|
|
151
|
-
|
|
156
|
+
let t6;
|
|
157
|
+
if ($[10] !== context || $[11] !== navigate) {
|
|
158
|
+
t6 = SECTIONS.map((section) => /* @__PURE__ */ jsxs("section", { "aria-label": section.label, children: [
|
|
152
159
|
/* @__PURE__ */ jsx(Typography, { variant: "caption", component: "h2", color: "secondary", className: "py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400", children: section.label }),
|
|
153
160
|
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 mt-2", children: section.tools.map((tool) => /* @__PURE__ */ jsx(Card, { onClick: () => {
|
|
154
161
|
navigate(tool.path);
|
|
@@ -170,43 +177,43 @@ function StudioHomePage(t0) {
|
|
|
170
177
|
}, children: /* @__PURE__ */ jsx("div", { className: "p-2", children: /* @__PURE__ */ jsx(ArrowRightIcon, { className: "text-primary", size: iconSize.small }) }) })
|
|
171
178
|
] }) }, tool.path)) })
|
|
172
179
|
] }, section.label));
|
|
173
|
-
$[
|
|
174
|
-
$[
|
|
175
|
-
$[
|
|
176
|
-
} else {
|
|
177
|
-
t5 = $[11];
|
|
178
|
-
}
|
|
179
|
-
let t6;
|
|
180
|
-
if ($[12] !== t5) {
|
|
181
|
-
t6 = /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-8 pt-2", children: t5 });
|
|
182
|
-
$[12] = t5;
|
|
183
|
-
$[13] = t6;
|
|
180
|
+
$[10] = context;
|
|
181
|
+
$[11] = navigate;
|
|
182
|
+
$[12] = t6;
|
|
184
183
|
} else {
|
|
185
|
-
t6 = $[
|
|
184
|
+
t6 = $[12];
|
|
186
185
|
}
|
|
187
186
|
let t7;
|
|
188
|
-
if ($[
|
|
189
|
-
t7 = /* @__PURE__ */ jsx("div", { className: "flex
|
|
187
|
+
if ($[13] !== t6) {
|
|
188
|
+
t7 = /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-8 pt-2", children: t6 });
|
|
189
|
+
$[13] = t6;
|
|
190
190
|
$[14] = t7;
|
|
191
191
|
} else {
|
|
192
192
|
t7 = $[14];
|
|
193
193
|
}
|
|
194
194
|
let t8;
|
|
195
195
|
if ($[15] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
196
|
-
t8 = /* @__PURE__ */
|
|
196
|
+
t8 = /* @__PURE__ */ jsx("div", { className: "flex items-center mb-1", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", component: "h2", color: "secondary", className: "py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400", children: "Quick Start" }) });
|
|
197
|
+
$[15] = t8;
|
|
198
|
+
} else {
|
|
199
|
+
t8 = $[15];
|
|
200
|
+
}
|
|
201
|
+
let t9;
|
|
202
|
+
if ($[16] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
203
|
+
t9 = /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "secondary", className: "mb-4 max-w-2xl", children: [
|
|
197
204
|
"Generate a fully-typed SDK from your collections with",
|
|
198
205
|
" ",
|
|
199
206
|
/* @__PURE__ */ jsx("code", { className: "text-emerald-400 font-mono text-xs bg-emerald-400/10 px-1.5 py-0.5 rounded", children: "npx rebase generate-sdk" }),
|
|
200
207
|
" ",
|
|
201
208
|
"and start querying your data with full TypeScript autocompletion."
|
|
202
209
|
] });
|
|
203
|
-
$[
|
|
210
|
+
$[16] = t9;
|
|
204
211
|
} else {
|
|
205
|
-
|
|
212
|
+
t9 = $[16];
|
|
206
213
|
}
|
|
207
|
-
let
|
|
208
|
-
if ($[
|
|
209
|
-
|
|
214
|
+
let t10;
|
|
215
|
+
if ($[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
216
|
+
t10 = /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2.5 border-b border-surface-200/40 dark:border-surface-700/40 bg-surface-50 dark:bg-surface-900/80", children: [
|
|
210
217
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
211
218
|
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
|
|
212
219
|
/* @__PURE__ */ jsx("span", { className: "w-2.5 h-2.5 rounded-full bg-red-400/60" }),
|
|
@@ -217,61 +224,62 @@ function StudioHomePage(t0) {
|
|
|
217
224
|
] }),
|
|
218
225
|
/* @__PURE__ */ jsx("span", { className: "text-xs font-mono text-surface-400 dark:text-surface-500", children: "TypeScript" })
|
|
219
226
|
] });
|
|
220
|
-
$[
|
|
227
|
+
$[17] = t10;
|
|
221
228
|
} else {
|
|
222
|
-
|
|
229
|
+
t10 = $[17];
|
|
223
230
|
}
|
|
224
|
-
let
|
|
225
|
-
if ($[
|
|
226
|
-
|
|
227
|
-
t7,
|
|
231
|
+
let t11;
|
|
232
|
+
if ($[18] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
233
|
+
t11 = /* @__PURE__ */ jsxs("div", { className: "mt-10 mb-6", children: [
|
|
228
234
|
t8,
|
|
235
|
+
t9,
|
|
229
236
|
/* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-surface-200/40 dark:border-surface-700/40 bg-white dark:bg-surface-950 overflow-hidden", children: [
|
|
230
|
-
|
|
237
|
+
t10,
|
|
231
238
|
/* @__PURE__ */ jsx("div", { className: "px-5 py-4 overflow-x-auto text-[13px] leading-6 font-mono", children: /* @__PURE__ */ jsx(SyntaxHighlightedSnippet, {}) })
|
|
232
239
|
] })
|
|
233
240
|
] });
|
|
234
|
-
$[
|
|
241
|
+
$[18] = t11;
|
|
235
242
|
} else {
|
|
236
|
-
|
|
243
|
+
t11 = $[18];
|
|
237
244
|
}
|
|
238
|
-
let
|
|
239
|
-
if ($[
|
|
240
|
-
|
|
241
|
-
$[
|
|
242
|
-
$[
|
|
245
|
+
let t12;
|
|
246
|
+
if ($[19] !== sections) {
|
|
247
|
+
t12 = sections?.map(_temp);
|
|
248
|
+
$[19] = sections;
|
|
249
|
+
$[20] = t12;
|
|
243
250
|
} else {
|
|
244
|
-
|
|
251
|
+
t12 = $[20];
|
|
245
252
|
}
|
|
246
|
-
let
|
|
247
|
-
if ($[
|
|
248
|
-
|
|
253
|
+
let t13;
|
|
254
|
+
if ($[21] !== additionalChildrenEnd || $[22] !== additionalChildrenStart || $[23] !== t12 || $[24] !== t5 || $[25] !== t7) {
|
|
255
|
+
t13 = /* @__PURE__ */ jsxs(Container, { maxWidth: "6xl", children: [
|
|
249
256
|
t4,
|
|
257
|
+
t5,
|
|
250
258
|
additionalChildrenStart,
|
|
251
|
-
|
|
252
|
-
t10,
|
|
259
|
+
t7,
|
|
253
260
|
t11,
|
|
261
|
+
t12,
|
|
254
262
|
additionalChildrenEnd
|
|
255
263
|
] });
|
|
256
|
-
$[
|
|
257
|
-
$[
|
|
258
|
-
$[
|
|
259
|
-
$[
|
|
260
|
-
$[
|
|
261
|
-
$[
|
|
264
|
+
$[21] = additionalChildrenEnd;
|
|
265
|
+
$[22] = additionalChildrenStart;
|
|
266
|
+
$[23] = t12;
|
|
267
|
+
$[24] = t5;
|
|
268
|
+
$[25] = t7;
|
|
269
|
+
$[26] = t13;
|
|
262
270
|
} else {
|
|
263
|
-
|
|
271
|
+
t13 = $[26];
|
|
264
272
|
}
|
|
265
|
-
let
|
|
266
|
-
if ($[
|
|
267
|
-
|
|
268
|
-
$[
|
|
269
|
-
$[27] = t12;
|
|
273
|
+
let t14;
|
|
274
|
+
if ($[27] !== containerRef || $[28] !== t13) {
|
|
275
|
+
t14 = /* @__PURE__ */ jsx("div", { ref: containerRef, className: "py-2 overflow-auto h-full w-full", children: t13 });
|
|
276
|
+
$[27] = containerRef;
|
|
270
277
|
$[28] = t13;
|
|
278
|
+
$[29] = t14;
|
|
271
279
|
} else {
|
|
272
|
-
|
|
280
|
+
t14 = $[29];
|
|
273
281
|
}
|
|
274
|
-
return
|
|
282
|
+
return t14;
|
|
275
283
|
}
|
|
276
284
|
function _temp(s) {
|
|
277
285
|
return /* @__PURE__ */ jsxs("div", { className: "my-10", children: [
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/components/StudioHomePage.tsx","../src/components/RebaseStudio.tsx"],"sourcesContent":["import type { HomePageSection, PluginGenericProps } from \"@rebasepro/types\";\nimport React, { useEffect } from \"react\";\nimport { Card, cls, Container, Typography } from \"@rebasepro/ui\";\nimport { ArrowRightIcon } from \"lucide-react\";\nimport { iconSize } from \"@rebasepro/ui\";\nimport { IconForView, useRebaseContext, useRestoreScroll, useSlot } from \"@rebasepro/core\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useStudioBreadcrumbs } from \"@rebasepro/core\";\n\n/* ═══════════════════════════════════════════════════════════════\n Static studio tool definitions\n ═══════════════════════════════════════════════════════════════ */\n\ninterface StudioTool {\n path: string;\n name: string;\n description: string;\n icon: string;\n}\n\ninterface StudioSection {\n label: string;\n dotColor: string;\n iconColor: string;\n tools: StudioTool[];\n}\n\nconst SECTIONS: StudioSection[] = [\n {\n label: \"Database\",\n dotColor: \"bg-emerald-400\",\n iconColor: \"text-emerald-400\",\n tools: [\n { path: \"/schema\", name: \"Collections\", description: \"Define and manage your data model and collection schemas\", icon: \"LayoutList\" },\n { path: \"/schema-visualizer\", name: \"Schema Visualizer\", description: \"Interactive ERD showing tables, columns, and relationships\", icon: \"Network\" },\n { path: \"/sql\", name: \"SQL Console\", description: \"Execute raw SQL queries directly against your database\", icon: \"terminal\" },\n { path: \"/branches\", name: \"Branches\", description: \"Create and manage isolated database copies for development\", icon: \"GitBranch\" },\n { path: \"/rls\", name: \"RLS Policies\", description: \"Configure Row Level Security for fine-grained data access\", icon: \"ShieldCheck\" }\n ]\n },\n {\n label: \"Compute\",\n dotColor: \"bg-blue-400\",\n iconColor: \"text-blue-400\",\n tools: [\n { path: \"/js\", name: \"JS Console\", description: \"Run JavaScript with the Rebase SDK in a live sandbox\", icon: \"code\" },\n { path: \"/cron\", name: \"Cron Jobs\", description: \"Monitor and manage scheduled background tasks\", icon: \"Clock\" }\n ]\n },\n {\n label: \"API\",\n dotColor: \"bg-violet-400\",\n iconColor: \"text-violet-400\",\n tools: [\n { path: \"/api\", name: \"API Explorer\", description: \"Interactive API documentation with live request testing\", icon: \"BookOpen\" }\n ]\n },\n {\n label: \"Storage\",\n dotColor: \"bg-amber-400\",\n iconColor: \"text-amber-400\",\n tools: [\n { path: \"/storage\", name: \"Storage\", description: \"Browse, upload, and manage files in your storage bucket\", icon: \"HardDrive\" }\n ]\n },\n {\n label: \"Access Control\",\n dotColor: \"bg-rose-400\",\n iconColor: \"text-rose-400\",\n tools: [\n { path: \"/users\", name: \"Users\", description: \"Manage developers and assign roles in your workspace\", icon: \"group\" },\n { path: \"/roles\", name: \"Roles\", description: \"Create and configure fine-grained access permissions\", icon: \"ShieldEllipsis\" }\n ]\n }\n];\n\n/* ═══════════════════════════════════════════════════════════════ */\n\nexport function StudioHomePage({\n additionalActions,\n additionalChildrenStart,\n additionalChildrenEnd,\n sections,\n hiddenGroups\n}: {\n additionalActions?: React.ReactNode;\n additionalChildrenStart?: React.ReactNode;\n additionalChildrenEnd?: React.ReactNode;\n sections?: HomePageSection[];\n hiddenGroups?: string[];\n}) {\n const context = useRebaseContext();\n const breadcrumbs = useStudioBreadcrumbs();\n const navigate = useNavigate();\n\n useEffect(() => {\n breadcrumbs.set({ breadcrumbs: [] });\n }, [breadcrumbs.set]);\n\n const { containerRef } = useRestoreScroll();\n\n const sectionProps: PluginGenericProps = { context };\n\n const pluginActions = useSlot(\"home.actions\", sectionProps);\n\n return (\n <div ref={containerRef} className=\"py-2 overflow-auto h-full w-full\">\n <Container maxWidth=\"6xl\">\n\n {(additionalActions || pluginActions) && (\n <div className=\"w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4 justify-end\">\n {additionalActions}\n {pluginActions}\n </div>\n )}\n\n {additionalChildrenStart}\n\n {/* ── Tool sections ── */}\n <div className=\"flex flex-col gap-8 pt-2\">\n {SECTIONS.map((section) => (\n <section key={section.label} aria-label={section.label}>\n {/* Section header */}\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {section.label}\n </Typography>\n\n {/* Card grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 mt-2\">\n {section.tools.map((tool) => (\n <Card\n key={tool.path}\n onClick={() => {\n navigate(tool.path);\n context.analyticsController?.onAnalyticsEvent?.(\n \"home_navigate_to_view\",\n { path: tool.path }\n );\n }}\n className={cls(\n \"h-full px-4 py-2.5 cursor-pointer transition-all duration-200 ease-in-out\",\n \"hover:-translate-y-0.5 hover:shadow-md hover:shadow-primary/5\"\n )}\n >\n <div className=\"flex flex-col items-start h-full\">\n <div className=\"grow w-full\">\n {/* Icon */}\n <div className={cls(\"h-6 flex items-center\", section.iconColor)}>\n <IconForView\n collectionOrView={{ slug: tool.path,\nname: tool.name,\nicon: tool.icon }}\n size=\"small\"\n />\n </div>\n\n {/* Title */}\n <Typography\n gutterBottom\n variant=\"subtitle1\"\n className=\"mt-1 font-semibold\"\n component=\"h2\"\n >\n {tool.name}\n </Typography>\n\n {/* Description */}\n <Typography variant=\"caption\" color=\"secondary\" component=\"div\">\n {tool.description}\n </Typography>\n </div>\n\n {/* Arrow */}\n <div style={{ alignSelf: \"flex-end\" }}>\n <div className=\"p-2\">\n <ArrowRightIcon className=\"text-primary\" size={iconSize.small}/>\n </div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n </section>\n ))}\n </div>\n\n {/* ── SDK Quick Start ── */}\n <div className=\"mt-10 mb-6\">\n <div className=\"flex items-center mb-1\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n Quick Start\n </Typography>\n </div>\n\n <Typography variant=\"body2\" color=\"secondary\" className=\"mb-4 max-w-2xl\">\n Generate a fully-typed SDK from your collections with{\" \"}\n <code className=\"text-emerald-400 font-mono text-xs bg-emerald-400/10 px-1.5 py-0.5 rounded\">\n npx rebase generate-sdk\n </code>\n {\" \"}and start querying your data with full TypeScript autocompletion.\n </Typography>\n\n <div className=\"rounded-lg border border-surface-200/40 dark:border-surface-700/40 bg-white dark:bg-surface-950 overflow-hidden\">\n {/* Title bar */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-surface-200/40 dark:border-surface-700/40 bg-surface-50 dark:bg-surface-900/80\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex gap-1.5\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-red-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-amber-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-emerald-400/60\"/>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500 ml-1\">\n app.ts\n </span>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500\">\n TypeScript\n </span>\n </div>\n\n {/* Syntax-highlighted code */}\n <div className=\"px-5 py-4 overflow-x-auto text-[13px] leading-6 font-mono\">\n <SyntaxHighlightedSnippet/>\n </div>\n </div>\n </div>\n\n {/* ── Extra sections from props ── */}\n {sections?.map((s) => (\n <div key={s.key} className=\"my-10\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"p-4 py-2 rounded font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {s.title}\n </Typography>\n <div className=\"mt-4\">{s.children}</div>\n </div>\n ))}\n\n {additionalChildrenEnd}\n </Container>\n </div>\n );\n}\n\n/* ═══════════════════════════════════════════════════════════════\n Hand-crafted syntax-highlighted code snippet.\n Uses inline spans with Tailwind color classes to avoid\n pulling in a syntax highlighting library.\n ═══════════════════════════════════════════════════════════════ */\n\nfunction SyntaxHighlightedSnippet() {\n const kw = \"text-violet-600 dark:text-violet-400\"; // keywords\n const str = \"text-emerald-600 dark:text-emerald-400\"; // strings\n const typ = \"text-amber-600 dark:text-amber-300\"; // types\n const fn = \"text-blue-600 dark:text-blue-400\"; // functions\n const cm = \"text-surface-500 dark:text-surface-400 italic\"; // comments\n const op = \"text-surface-500 dark:text-surface-400\"; // operators / punctuation\n const tx = \"text-surface-950 dark:text-surface-200\"; // plain text\n\n return (\n <pre className=\"m-0 whitespace-pre\">\n <span className={kw}>import</span>\n <span className={tx}>{\" { \"}</span>\n <span className={fn}>createRebaseClient</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'@rebasepro/client'</span>\n <span className={op}>;</span>\n {\"\\n\"}\n\n <span className={kw}>import</span>\n <span className={tx}> </span>\n <span className={kw}>type</span>\n <span className={tx}>{\" { \"}</span>\n <span className={typ}>Database</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'./database.types'</span>\n <span className={op}>;</span>\n {\"\\n\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}> rebase </span>\n <span className={op}>= </span>\n <span className={fn}>createRebaseClient</span>\n <span className={op}>{\"<\"}</span>\n <span className={typ}>Database</span>\n <span className={op}>{\">(\"}</span>\n <span className={tx}>{\"{\"}</span>\n {\"\\n\"}\n <span className={tx}>{\" baseUrl\"}</span>\n <span className={op}>: </span>\n <span className={str}>'http://localhost:3001'</span>\n <span className={op}>,</span>\n {\"\\n\"}\n <span className={tx}>{\"}\"}</span>\n <span className={op}>);</span>\n {\"\\n\\n\"}\n\n <span className={cm}>{\"// Fully typed — autocompletion for tables and columns\"}</span>\n {\"\\n\"}\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>users</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={tx}>users</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n {\"\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>posts</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={fn}>collection</span>\n <span className={op}>(</span>\n <span className={str}>'posts'</span>\n <span className={op}>)</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n </pre>\n );\n}\n","import React, { lazy, Suspense, useLayoutEffect, useMemo } from \"react\";\nimport { useRebaseRegistryDispatch } from \"@rebasepro/core\";\nimport type { RebaseStudioConfig, AppView } from \"@rebasepro/types\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\n\n// Lazy-loaded studio tools — each fetched only when its route is visited.\n// This keeps Monaco, @xyflow/react, dagre, pgsql-ast-parser etc. out of the initial bundle.\nconst SQLEditor = lazy(() => import(\"./SQLEditor/SQLEditor\").then(m => ({ default: m.SQLEditor })));\nconst JSEditor = lazy(() => import(\"./JSEditor/JSEditor\").then(m => ({ default: m.JSEditor })));\nconst RLSEditor = lazy(() => import(\"./RLSEditor/RLSEditor\").then(m => ({ default: m.RLSEditor })));\nconst StorageView = lazy(() => import(\"./StorageView/StorageView\").then(m => ({ default: m.StorageView })));\nconst CronJobsView = lazy(() => import(\"./CronJobs/CronJobsView\").then(m => ({ default: m.CronJobsView })));\nconst SchemaVisualizer = lazy(() => import(\"./SchemaVisualizer/SchemaVisualizer\").then(m => ({ default: m.SchemaVisualizer })));\nconst BranchesView = lazy(() => import(\"./Branches/BranchesView\").then(m => ({ default: m.BranchesView })));\nconst ApiExplorer = lazy(() => import(\"./ApiExplorer/ApiExplorer\").then(m => ({ default: m.ApiExplorer })));\n\nimport { StudioHomePage } from \"./StudioHomePage\";\n\n/**\n * Declarative component to configure the Studio in Rebase.\n * Renders nothing — purely registers config into the RebaseRegistry.\n *\n * The \"schema\" tool (collection editor view) is now a built-in CMS feature.\n * When `<RebaseCMS collectionEditor={...}>` is used, the schema view is\n * automatically injected into Studio — no manual wiring needed.\n */\nconst DEFAULT_HOME_PAGE = <StudioHomePage/>;\n\nexport function RebaseStudio({ tools, homePage }: RebaseStudioConfig) {\n const dispatch = useRebaseRegistryDispatch();\n\n const resolvedHomePage = homePage ?? DEFAULT_HOME_PAGE;\n\n const devViews: AppView[] = useMemo(() => {\n const views: AppView[] = [];\n const activeTools = tools ?? [\"sql\", \"js\", \"rls\", \"storage\", \"cron\", \"schema-visualizer\", \"branches\", \"api\"];\n const suspense = (el: React.ReactNode) => <Suspense fallback={<CircularProgressCenter/>}>{el}</Suspense>;\n\n if (activeTools.includes(\"sql\")) {\n views.push({ slug: \"sql\",\nname: \"SQL Console\",\ngroup: \"Database\",\nicon: \"terminal\",\ndescription: \"Execute SQL queries\",\nview: suspense(<SQLEditor/>) });\n }\n if (activeTools.includes(\"js\")) {\n views.push({ slug: \"js\",\nname: \"JS Console\",\ngroup: \"Compute\",\nicon: \"code\",\ndescription: \"Execute JavaScript\",\nview: suspense(<JSEditor/>) });\n }\n if (activeTools.includes(\"rls\")) {\n views.push({ slug: \"rls\",\nname: \"RLS Policies\",\ngroup: \"Database\",\nicon: \"ShieldCheck\",\ndescription: \"Row Level Security\",\nview: suspense(<RLSEditor/>) });\n }\n if (activeTools.includes(\"storage\")) {\n views.push({ slug: \"storage\",\nname: \"Storage\",\ngroup: \"Storage\",\nicon: \"HardDrive\",\ndescription: \"Manage storage files\",\nview: suspense(<StorageView/>) });\n }\n if (activeTools.includes(\"cron\")) {\n views.push({ slug: \"cron\",\nname: \"Cron Jobs\",\ngroup: \"Compute\",\nicon: \"Clock\",\ndescription: \"Manage scheduled tasks\",\nview: suspense(<CronJobsView/>) });\n }\n if (activeTools.includes(\"schema-visualizer\")) {\n views.push({ slug: \"schema-visualizer\",\nname: \"Schema Visualizer\",\ngroup: \"Database\",\nicon: \"Network\",\ndescription: \"Interactive database ERD\",\nview: suspense(<SchemaVisualizer/>) });\n }\n if (activeTools.includes(\"branches\")) {\n views.push({ slug: \"branches\",\nname: \"Branches\",\ngroup: \"Database\",\nicon: \"GitBranch\",\ndescription: \"Create and manage database branches\",\nview: suspense(<BranchesView/>) });\n }\n if (activeTools.includes(\"api\")) {\n views.push({ slug: \"api\",\nname: \"API Explorer\",\ngroup: \"API\",\nicon: \"BookOpen\",\ndescription: \"Interactive API documentation and testing\",\nview: suspense(<ApiExplorer/>) });\n }\n // Note: \"schema\" tool is auto-injected by RebaseShell when collectionEditor is enabled.\n // It is NOT registered here anymore.\n return views;\n }, [tools]);\n\n // Use a ref for homePage so it never destabilizes the effect.\n // homePage is a React element — its identity doesn't matter for registration.\n const homePageRef = React.useRef(resolvedHomePage);\n homePageRef.current = resolvedHomePage;\n\n useLayoutEffect(() => {\n dispatch.registerStudio({ tools,\nhomePage: homePageRef.current,\ndevViews });\n return () => dispatch.unregisterStudio();\n }, [dispatch, tools, devViews]);\n\n return null;\n}\n"],"names":["SECTIONS","label","dotColor","iconColor","tools","path","name","description","icon","StudioHomePage","t0","$","_c","additionalActions","additionalChildrenStart","additionalChildrenEnd","sections","context","useRebaseContext","breadcrumbs","useStudioBreadcrumbs","navigate","useNavigate","t1","set","t2","useEffect","containerRef","useRestoreScroll","t3","sectionProps","pluginActions","useSlot","t4","t5","map","section","tool","analyticsController","onAnalyticsEvent","cls","slug","alignSelf","iconSize","small","t6","t7","Symbol","for","t8","t9","t10","t11","_temp","t12","t13","s","title","children","key","SyntaxHighlightedSnippet","kw","tx","fn","str","op","t14","t15","t16","t17","typ","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","cm","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","SQLEditor","lazy","then","m","default","JSEditor","RLSEditor","StorageView","CronJobsView","SchemaVisualizer","BranchesView","ApiExplorer","DEFAULT_HOME_PAGE","RebaseStudio","homePage","dispatch","useRebaseRegistryDispatch","resolvedHomePage","devViews","useMemo","views","activeTools","suspense","el","includes","push","group","view","homePageRef","React","useRef","current","useLayoutEffect","registerStudio","unregisterStudio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/components/StudioHomePage.tsx","../src/components/RebaseStudio.tsx"],"sourcesContent":["import type { HomePageSection, PluginGenericProps } from \"@rebasepro/types\";\nimport React, { useEffect } from \"react\";\nimport { Card, cls, Container, Typography } from \"@rebasepro/ui\";\nimport { ArrowRightIcon } from \"lucide-react\";\nimport { iconSize } from \"@rebasepro/ui\";\nimport { IconForView, useRebaseContext, useRestoreScroll, useSlot } from \"@rebasepro/core\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useStudioBreadcrumbs, BootstrapAdminBanner } from \"@rebasepro/core\";\n\n/* ═══════════════════════════════════════════════════════════════\n Static studio tool definitions\n ═══════════════════════════════════════════════════════════════ */\n\ninterface StudioTool {\n path: string;\n name: string;\n description: string;\n icon: string;\n}\n\ninterface StudioSection {\n label: string;\n dotColor: string;\n iconColor: string;\n tools: StudioTool[];\n}\n\nconst SECTIONS: StudioSection[] = [\n {\n label: \"Database\",\n dotColor: \"bg-emerald-400\",\n iconColor: \"text-emerald-400\",\n tools: [\n { path: \"/schema\", name: \"Collections\", description: \"Define and manage your data model and collection schemas\", icon: \"LayoutList\" },\n { path: \"/schema-visualizer\", name: \"Schema Visualizer\", description: \"Interactive ERD showing tables, columns, and relationships\", icon: \"Network\" },\n { path: \"/sql\", name: \"SQL Console\", description: \"Execute raw SQL queries directly against your database\", icon: \"terminal\" },\n { path: \"/branches\", name: \"Branches\", description: \"Create and manage isolated database copies for development\", icon: \"GitBranch\" },\n { path: \"/rls\", name: \"RLS Policies\", description: \"Configure Row Level Security for fine-grained data access\", icon: \"ShieldCheck\" }\n ]\n },\n {\n label: \"Compute\",\n dotColor: \"bg-blue-400\",\n iconColor: \"text-blue-400\",\n tools: [\n { path: \"/js\", name: \"JS Console\", description: \"Run JavaScript with the Rebase SDK in a live sandbox\", icon: \"code\" },\n { path: \"/cron\", name: \"Cron Jobs\", description: \"Monitor and manage scheduled background tasks\", icon: \"Clock\" }\n ]\n },\n {\n label: \"API\",\n dotColor: \"bg-violet-400\",\n iconColor: \"text-violet-400\",\n tools: [\n { path: \"/api\", name: \"API Explorer\", description: \"Interactive API documentation with live request testing\", icon: \"BookOpen\" }\n ]\n },\n {\n label: \"Storage\",\n dotColor: \"bg-amber-400\",\n iconColor: \"text-amber-400\",\n tools: [\n { path: \"/storage\", name: \"Storage\", description: \"Browse, upload, and manage files in your storage bucket\", icon: \"HardDrive\" }\n ]\n },\n {\n label: \"Access Control\",\n dotColor: \"bg-rose-400\",\n iconColor: \"text-rose-400\",\n tools: [\n { path: \"/users\", name: \"Users\", description: \"Manage developers and assign roles in your workspace\", icon: \"group\" },\n { path: \"/roles\", name: \"Roles\", description: \"Create and configure fine-grained access permissions\", icon: \"ShieldEllipsis\" }\n ]\n }\n];\n\n/* ═══════════════════════════════════════════════════════════════ */\n\nexport function StudioHomePage({\n additionalActions,\n additionalChildrenStart,\n additionalChildrenEnd,\n sections,\n hiddenGroups\n}: {\n additionalActions?: React.ReactNode;\n additionalChildrenStart?: React.ReactNode;\n additionalChildrenEnd?: React.ReactNode;\n sections?: HomePageSection[];\n hiddenGroups?: string[];\n}) {\n const context = useRebaseContext();\n const breadcrumbs = useStudioBreadcrumbs();\n const navigate = useNavigate();\n\n useEffect(() => {\n breadcrumbs.set({ breadcrumbs: [] });\n }, [breadcrumbs.set]);\n\n const { containerRef } = useRestoreScroll();\n\n const sectionProps: PluginGenericProps = { context };\n\n const pluginActions = useSlot(\"home.actions\", sectionProps);\n\n return (\n <div ref={containerRef} className=\"py-2 overflow-auto h-full w-full\">\n <Container maxWidth=\"6xl\">\n <div className=\"mb-4\">\n <BootstrapAdminBanner />\n </div>\n\n {(additionalActions || pluginActions) && (\n <div className=\"w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4 justify-end\">\n {additionalActions}\n {pluginActions}\n </div>\n )}\n\n {additionalChildrenStart}\n\n {/* ── Tool sections ── */}\n <div className=\"flex flex-col gap-8 pt-2\">\n {SECTIONS.map((section) => (\n <section key={section.label} aria-label={section.label}>\n {/* Section header */}\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {section.label}\n </Typography>\n\n {/* Card grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 mt-2\">\n {section.tools.map((tool) => (\n <Card\n key={tool.path}\n onClick={() => {\n navigate(tool.path);\n context.analyticsController?.onAnalyticsEvent?.(\n \"home_navigate_to_view\",\n { path: tool.path }\n );\n }}\n className={cls(\n \"h-full px-4 py-2.5 cursor-pointer transition-all duration-200 ease-in-out\",\n \"hover:-translate-y-0.5 hover:shadow-md hover:shadow-primary/5\"\n )}\n >\n <div className=\"flex flex-col items-start h-full\">\n <div className=\"grow w-full\">\n {/* Icon */}\n <div className={cls(\"h-6 flex items-center\", section.iconColor)}>\n <IconForView\n collectionOrView={{ slug: tool.path,\nname: tool.name,\nicon: tool.icon }}\n size=\"small\"\n />\n </div>\n\n {/* Title */}\n <Typography\n gutterBottom\n variant=\"subtitle1\"\n className=\"mt-1 font-semibold\"\n component=\"h2\"\n >\n {tool.name}\n </Typography>\n\n {/* Description */}\n <Typography variant=\"caption\" color=\"secondary\" component=\"div\">\n {tool.description}\n </Typography>\n </div>\n\n {/* Arrow */}\n <div style={{ alignSelf: \"flex-end\" }}>\n <div className=\"p-2\">\n <ArrowRightIcon className=\"text-primary\" size={iconSize.small}/>\n </div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n </section>\n ))}\n </div>\n\n {/* ── SDK Quick Start ── */}\n <div className=\"mt-10 mb-6\">\n <div className=\"flex items-center mb-1\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n Quick Start\n </Typography>\n </div>\n\n <Typography variant=\"body2\" color=\"secondary\" className=\"mb-4 max-w-2xl\">\n Generate a fully-typed SDK from your collections with{\" \"}\n <code className=\"text-emerald-400 font-mono text-xs bg-emerald-400/10 px-1.5 py-0.5 rounded\">\n npx rebase generate-sdk\n </code>\n {\" \"}and start querying your data with full TypeScript autocompletion.\n </Typography>\n\n <div className=\"rounded-lg border border-surface-200/40 dark:border-surface-700/40 bg-white dark:bg-surface-950 overflow-hidden\">\n {/* Title bar */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-surface-200/40 dark:border-surface-700/40 bg-surface-50 dark:bg-surface-900/80\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex gap-1.5\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-red-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-amber-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-emerald-400/60\"/>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500 ml-1\">\n app.ts\n </span>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500\">\n TypeScript\n </span>\n </div>\n\n {/* Syntax-highlighted code */}\n <div className=\"px-5 py-4 overflow-x-auto text-[13px] leading-6 font-mono\">\n <SyntaxHighlightedSnippet/>\n </div>\n </div>\n </div>\n\n {/* ── Extra sections from props ── */}\n {sections?.map((s) => (\n <div key={s.key} className=\"my-10\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"p-4 py-2 rounded font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {s.title}\n </Typography>\n <div className=\"mt-4\">{s.children}</div>\n </div>\n ))}\n\n {additionalChildrenEnd}\n </Container>\n </div>\n );\n}\n\n/* ═══════════════════════════════════════════════════════════════\n Hand-crafted syntax-highlighted code snippet.\n Uses inline spans with Tailwind color classes to avoid\n pulling in a syntax highlighting library.\n ═══════════════════════════════════════════════════════════════ */\n\nfunction SyntaxHighlightedSnippet() {\n const kw = \"text-violet-600 dark:text-violet-400\"; // keywords\n const str = \"text-emerald-600 dark:text-emerald-400\"; // strings\n const typ = \"text-amber-600 dark:text-amber-300\"; // types\n const fn = \"text-blue-600 dark:text-blue-400\"; // functions\n const cm = \"text-surface-500 dark:text-surface-400 italic\"; // comments\n const op = \"text-surface-500 dark:text-surface-400\"; // operators / punctuation\n const tx = \"text-surface-950 dark:text-surface-200\"; // plain text\n\n return (\n <pre className=\"m-0 whitespace-pre\">\n <span className={kw}>import</span>\n <span className={tx}>{\" { \"}</span>\n <span className={fn}>createRebaseClient</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'@rebasepro/client'</span>\n <span className={op}>;</span>\n {\"\\n\"}\n\n <span className={kw}>import</span>\n <span className={tx}> </span>\n <span className={kw}>type</span>\n <span className={tx}>{\" { \"}</span>\n <span className={typ}>Database</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'./database.types'</span>\n <span className={op}>;</span>\n {\"\\n\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}> rebase </span>\n <span className={op}>= </span>\n <span className={fn}>createRebaseClient</span>\n <span className={op}>{\"<\"}</span>\n <span className={typ}>Database</span>\n <span className={op}>{\">(\"}</span>\n <span className={tx}>{\"{\"}</span>\n {\"\\n\"}\n <span className={tx}>{\" baseUrl\"}</span>\n <span className={op}>: </span>\n <span className={str}>'http://localhost:3001'</span>\n <span className={op}>,</span>\n {\"\\n\"}\n <span className={tx}>{\"}\"}</span>\n <span className={op}>);</span>\n {\"\\n\\n\"}\n\n <span className={cm}>{\"// Fully typed — autocompletion for tables and columns\"}</span>\n {\"\\n\"}\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>users</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={tx}>users</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n {\"\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>posts</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={fn}>collection</span>\n <span className={op}>(</span>\n <span className={str}>'posts'</span>\n <span className={op}>)</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n </pre>\n );\n}\n","import React, { lazy, Suspense, useLayoutEffect, useMemo } from \"react\";\nimport { useRebaseRegistryDispatch } from \"@rebasepro/core\";\nimport type { RebaseStudioConfig, AppView } from \"@rebasepro/types\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\n\n// Lazy-loaded studio tools — each fetched only when its route is visited.\n// This keeps Monaco, @xyflow/react, dagre, pgsql-ast-parser etc. out of the initial bundle.\nconst SQLEditor = lazy(() => import(\"./SQLEditor/SQLEditor\").then(m => ({ default: m.SQLEditor })));\nconst JSEditor = lazy(() => import(\"./JSEditor/JSEditor\").then(m => ({ default: m.JSEditor })));\nconst RLSEditor = lazy(() => import(\"./RLSEditor/RLSEditor\").then(m => ({ default: m.RLSEditor })));\nconst StorageView = lazy(() => import(\"./StorageView/StorageView\").then(m => ({ default: m.StorageView })));\nconst CronJobsView = lazy(() => import(\"./CronJobs/CronJobsView\").then(m => ({ default: m.CronJobsView })));\nconst SchemaVisualizer = lazy(() => import(\"./SchemaVisualizer/SchemaVisualizer\").then(m => ({ default: m.SchemaVisualizer })));\nconst BranchesView = lazy(() => import(\"./Branches/BranchesView\").then(m => ({ default: m.BranchesView })));\nconst ApiExplorer = lazy(() => import(\"./ApiExplorer/ApiExplorer\").then(m => ({ default: m.ApiExplorer })));\n\nimport { StudioHomePage } from \"./StudioHomePage\";\n\n/**\n * Declarative component to configure the Studio in Rebase.\n * Renders nothing — purely registers config into the RebaseRegistry.\n *\n * The \"schema\" tool (collection editor view) is now a built-in CMS feature.\n * When `<RebaseCMS collectionEditor={...}>` is used, the schema view is\n * automatically injected into Studio — no manual wiring needed.\n */\nconst DEFAULT_HOME_PAGE = <StudioHomePage/>;\n\nexport function RebaseStudio({ tools, homePage }: RebaseStudioConfig) {\n const dispatch = useRebaseRegistryDispatch();\n\n const resolvedHomePage = homePage ?? DEFAULT_HOME_PAGE;\n\n const devViews: AppView[] = useMemo(() => {\n const views: AppView[] = [];\n const activeTools = tools ?? [\"sql\", \"js\", \"rls\", \"storage\", \"cron\", \"schema-visualizer\", \"branches\", \"api\"];\n const suspense = (el: React.ReactNode) => <Suspense fallback={<CircularProgressCenter/>}>{el}</Suspense>;\n\n if (activeTools.includes(\"sql\")) {\n views.push({ slug: \"sql\",\nname: \"SQL Console\",\ngroup: \"Database\",\nicon: \"terminal\",\ndescription: \"Execute SQL queries\",\nview: suspense(<SQLEditor/>) });\n }\n if (activeTools.includes(\"js\")) {\n views.push({ slug: \"js\",\nname: \"JS Console\",\ngroup: \"Compute\",\nicon: \"code\",\ndescription: \"Execute JavaScript\",\nview: suspense(<JSEditor/>) });\n }\n if (activeTools.includes(\"rls\")) {\n views.push({ slug: \"rls\",\nname: \"RLS Policies\",\ngroup: \"Database\",\nicon: \"ShieldCheck\",\ndescription: \"Row Level Security\",\nview: suspense(<RLSEditor/>) });\n }\n if (activeTools.includes(\"storage\")) {\n views.push({ slug: \"storage\",\nname: \"Storage\",\ngroup: \"Storage\",\nicon: \"HardDrive\",\ndescription: \"Manage storage files\",\nview: suspense(<StorageView/>) });\n }\n if (activeTools.includes(\"cron\")) {\n views.push({ slug: \"cron\",\nname: \"Cron Jobs\",\ngroup: \"Compute\",\nicon: \"Clock\",\ndescription: \"Manage scheduled tasks\",\nview: suspense(<CronJobsView/>) });\n }\n if (activeTools.includes(\"schema-visualizer\")) {\n views.push({ slug: \"schema-visualizer\",\nname: \"Schema Visualizer\",\ngroup: \"Database\",\nicon: \"Network\",\ndescription: \"Interactive database ERD\",\nview: suspense(<SchemaVisualizer/>) });\n }\n if (activeTools.includes(\"branches\")) {\n views.push({ slug: \"branches\",\nname: \"Branches\",\ngroup: \"Database\",\nicon: \"GitBranch\",\ndescription: \"Create and manage database branches\",\nview: suspense(<BranchesView/>) });\n }\n if (activeTools.includes(\"api\")) {\n views.push({ slug: \"api\",\nname: \"API Explorer\",\ngroup: \"API\",\nicon: \"BookOpen\",\ndescription: \"Interactive API documentation and testing\",\nview: suspense(<ApiExplorer/>) });\n }\n // Note: \"schema\" tool is auto-injected by RebaseShell when collectionEditor is enabled.\n // It is NOT registered here anymore.\n return views;\n }, [tools]);\n\n // Use a ref for homePage so it never destabilizes the effect.\n // homePage is a React element — its identity doesn't matter for registration.\n const homePageRef = React.useRef(resolvedHomePage);\n homePageRef.current = resolvedHomePage;\n\n useLayoutEffect(() => {\n dispatch.registerStudio({ tools,\nhomePage: homePageRef.current,\ndevViews });\n return () => dispatch.unregisterStudio();\n }, [dispatch, tools, devViews]);\n\n return null;\n}\n"],"names":["SECTIONS","label","dotColor","iconColor","tools","path","name","description","icon","StudioHomePage","t0","$","_c","additionalActions","additionalChildrenStart","additionalChildrenEnd","sections","context","useRebaseContext","breadcrumbs","useStudioBreadcrumbs","navigate","useNavigate","t1","set","t2","useEffect","containerRef","useRestoreScroll","t3","sectionProps","pluginActions","useSlot","t4","Symbol","for","t5","t6","map","section","tool","analyticsController","onAnalyticsEvent","cls","slug","alignSelf","iconSize","small","t7","t8","t9","t10","t11","t12","_temp","t13","t14","s","title","children","key","SyntaxHighlightedSnippet","kw","tx","fn","str","op","t15","t16","t17","typ","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","cm","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","SQLEditor","lazy","then","m","default","JSEditor","RLSEditor","StorageView","CronJobsView","SchemaVisualizer","BranchesView","ApiExplorer","DEFAULT_HOME_PAGE","RebaseStudio","homePage","dispatch","useRebaseRegistryDispatch","resolvedHomePage","devViews","useMemo","views","activeTools","suspense","el","includes","push","group","view","homePageRef","React","useRef","current","useLayoutEffect","registerStudio","unregisterStudio"],"mappings":"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"}
|