@rebasepro/studio 0.2.3 → 0.2.5
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/{ApiExplorer-BmcdhAX0.js → ApiExplorer-CGHEF1uL.js} +4 -4
- package/dist/ApiExplorer-CGHEF1uL.js.map +1 -0
- package/dist/{CronJobsView-CNfz0etw.js → CronJobsView-3PM_qR8v.js} +20 -3
- package/dist/CronJobsView-3PM_qR8v.js.map +1 -0
- package/dist/{JSEditor-Ch8z8lJ4.js → JSEditor-BCSoElPg.js} +26 -36
- package/dist/JSEditor-BCSoElPg.js.map +1 -0
- package/dist/LogsExplorer-_4sZadKn.js +162 -0
- package/dist/LogsExplorer-_4sZadKn.js.map +1 -0
- package/dist/{SQLEditor-BELYJQRP.js → SQLEditor-BC0IOUQu.js} +4 -4
- package/dist/SQLEditor-BC0IOUQu.js.map +1 -0
- package/dist/common/src/collections/default-collections.d.ts +9 -0
- package/dist/common/src/collections/index.d.ts +1 -0
- package/dist/common/src/util/permissions.d.ts +1 -0
- package/dist/core/src/components/LoginView/LoginView.d.ts +25 -1
- package/dist/core/src/components/common/types.d.ts +10 -7
- package/dist/core/src/components/common/useDebouncedData.d.ts +1 -1
- package/dist/core/src/core/RebaseProps.d.ts +13 -2
- package/dist/core/src/core/RebaseRouter.d.ts +1 -1
- package/dist/core/src/hooks/data/useCollectionFetch.d.ts +12 -1
- package/dist/core/src/hooks/index.d.ts +0 -1
- package/dist/core/src/util/entity_cache.d.ts +0 -5
- package/dist/core/src/util/index.d.ts +0 -2
- package/dist/core/src/util/useStorageUploadController.d.ts +2 -2
- package/dist/formex/src/utils.d.ts +2 -2
- package/dist/index.es.js +23 -5
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +228 -44
- package/dist/index.umd.js.map +1 -1
- package/dist/studio/src/components/ApiExplorer/parseSpec.d.ts +1 -1
- package/dist/studio/src/components/ApiExplorer/types.d.ts +3 -3
- package/dist/studio/src/components/LogsExplorer/LogsExplorer.d.ts +1 -0
- package/dist/types/src/controllers/auth.d.ts +4 -26
- package/dist/types/src/controllers/client.d.ts +25 -43
- package/dist/types/src/controllers/collection_registry.d.ts +1 -1
- package/dist/types/src/controllers/data.d.ts +4 -0
- package/dist/types/src/controllers/data_driver.d.ts +23 -0
- package/dist/types/src/controllers/registry.d.ts +5 -4
- package/dist/types/src/rebase_context.d.ts +1 -1
- package/dist/types/src/types/auth_adapter.d.ts +5 -60
- package/dist/types/src/types/backend.d.ts +2 -2
- package/dist/types/src/types/backend_hooks.d.ts +2 -17
- package/dist/types/src/types/collections.d.ts +0 -4
- package/dist/types/src/types/component_ref.d.ts +1 -1
- package/dist/types/src/types/cron.d.ts +1 -1
- package/dist/types/src/types/entity_views.d.ts +1 -0
- package/dist/types/src/types/export_import.d.ts +1 -1
- package/dist/types/src/types/formex.d.ts +2 -2
- package/dist/types/src/types/properties.d.ts +9 -7
- package/dist/types/src/types/translations.d.ts +28 -12
- package/dist/types/src/types/user_management_delegate.d.ts +22 -57
- package/dist/types/src/users/index.d.ts +0 -1
- package/dist/types/src/users/user.d.ts +0 -1
- package/dist/ui/src/components/Button.d.ts +2 -2
- package/dist/ui/src/components/ErrorBoundary.d.ts +25 -3
- package/dist/ui/src/components/VirtualTable/VirtualTable.d.ts +1 -1
- package/dist/ui/src/components/VirtualTable/VirtualTableCell.d.ts +6 -6
- package/dist/ui/src/components/VirtualTable/VirtualTableHeader.d.ts +8 -8
- package/dist/ui/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
- package/dist/ui/src/components/VirtualTable/VirtualTableProps.d.ts +11 -11
- package/dist/ui/src/components/VirtualTable/VirtualTableRow.d.ts +1 -1
- package/dist/ui/src/components/VirtualTable/types.d.ts +9 -9
- package/dist/ui/src/hooks/useDebounceCallback.d.ts +1 -1
- package/dist/ui/src/util/debounce.d.ts +1 -1
- package/package.json +8 -8
- package/src/components/ApiExplorer/ApiExplorer.tsx +2 -2
- package/src/components/ApiExplorer/EndpointDetail.tsx +1 -1
- package/src/components/ApiExplorer/TryItPanel.tsx +5 -5
- package/src/components/ApiExplorer/parseSpec.ts +3 -3
- package/src/components/ApiExplorer/types.ts +3 -3
- package/src/components/CronJobs/CronJobsView.tsx +27 -2
- package/src/components/JSEditor/JSEditor.tsx +21 -18
- package/src/components/JSEditor/JSMonacoEditor.tsx +6 -19
- package/src/components/LogsExplorer/LogsExplorer.tsx +224 -0
- package/src/components/RebaseStudio.tsx +10 -1
- package/src/components/SQLEditor/SQLEditor.tsx +28 -7
- package/src/components/StudioHomePage.tsx +2 -1
- package/src/utils/parseSpec.test.ts +274 -0
- package/src/utils/pgColumnToProperty.test.ts +1 -0
- package/src/utils/pgColumnToProperty.ts +35 -4
- package/dist/ApiExplorer-BmcdhAX0.js.map +0 -1
- package/dist/CronJobsView-CNfz0etw.js.map +0 -1
- package/dist/JSEditor-Ch8z8lJ4.js.map +0 -1
- package/dist/SQLEditor-BELYJQRP.js.map +0 -1
- package/dist/core/src/hooks/useValidateAuthenticator.d.ts +0 -21
- package/dist/core/src/util/icon_synonyms.d.ts +0 -1
- package/dist/core/src/util/useTraceUpdate.d.ts +0 -2
- package/dist/types/src/users/roles.d.ts +0 -22
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Locale, User, AuthController, AnalyticsEvent, DataDriver, StorageSource, UserConfigurationPersistence, DatabaseAdmin, RebaseData, RebaseClient, RebaseContext, UserManagementDelegate, EntityLinkBuilder, RebasePlugin, SlotContribution, PropertyConfig, EntityCustomView, EntityAction } from "@rebasepro/types";
|
|
2
|
+
import { Locale, User, AuthController, AnalyticsEvent, DataDriver, StorageSource, UserConfigurationPersistence, DatabaseAdmin, RebaseData, RebaseClient, RebaseContext, UserManagementDelegate, EntityLinkBuilder, RebasePlugin, SlotContribution, PropertyConfig, EntityCustomView, EntityAction, RebaseTranslations } from "@rebasepro/types";
|
|
3
|
+
/** DeepPartial helper — allows partial overrides at any nesting level */
|
|
4
|
+
type DeepPartial<T> = T extends object ? {
|
|
5
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
6
|
+
} : T;
|
|
3
7
|
/**
|
|
4
8
|
* Controller to simulate different roles when dev mode is active.
|
|
5
9
|
* @group Models
|
|
@@ -116,7 +120,7 @@ export type RebaseProps<USER extends User> = {
|
|
|
116
120
|
/**
|
|
117
121
|
* Entity Views
|
|
118
122
|
*/
|
|
119
|
-
entityViews?: EntityCustomView
|
|
123
|
+
entityViews?: EntityCustomView[];
|
|
120
124
|
/**
|
|
121
125
|
* Entity Actions
|
|
122
126
|
*/
|
|
@@ -133,4 +137,11 @@ export type RebaseProps<USER extends User> = {
|
|
|
133
137
|
* Controller to simulate different roles when dev mode is active.
|
|
134
138
|
*/
|
|
135
139
|
effectiveRoleController?: EffectiveRoleController;
|
|
140
|
+
/**
|
|
141
|
+
* Override or extend any Rebase UI string, keyed by locale.
|
|
142
|
+
*/
|
|
143
|
+
translations?: {
|
|
144
|
+
[locale: string]: DeepPartial<RebaseTranslations>;
|
|
145
|
+
};
|
|
136
146
|
};
|
|
147
|
+
export {};
|
|
@@ -16,6 +16,14 @@ export interface CollectionFetchProps<M extends Record<string, any>> {
|
|
|
16
16
|
* Number of entities to fetch
|
|
17
17
|
*/
|
|
18
18
|
itemCount?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Number of items to skip
|
|
21
|
+
*/
|
|
22
|
+
offset?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Page number (1-indexed), alternative to offset
|
|
25
|
+
*/
|
|
26
|
+
page?: number;
|
|
19
27
|
/**
|
|
20
28
|
* Filter the fetched data by the property
|
|
21
29
|
*/
|
|
@@ -37,6 +45,7 @@ export interface CollectionFetchResult<M extends Record<string, any>> {
|
|
|
37
45
|
dataLoading: boolean;
|
|
38
46
|
noMoreToLoad: boolean;
|
|
39
47
|
dataLoadingError?: Error;
|
|
48
|
+
totalCount?: number;
|
|
40
49
|
}
|
|
41
50
|
/**
|
|
42
51
|
* This hook is used to fetch collections using a given collection
|
|
@@ -45,7 +54,9 @@ export interface CollectionFetchResult<M extends Record<string, any>> {
|
|
|
45
54
|
* @param filterValues
|
|
46
55
|
* @param sortBy
|
|
47
56
|
* @param itemCount
|
|
57
|
+
* @param offset
|
|
58
|
+
* @param page
|
|
48
59
|
* @param searchString
|
|
49
60
|
* @group Hooks and utilities
|
|
50
61
|
*/
|
|
51
|
-
export declare function useCollectionFetch<M extends Record<string, any>, USER extends User>({ path, collection, filterValues, sortBy, itemCount, searchString }: CollectionFetchProps<M>): CollectionFetchResult<M>;
|
|
62
|
+
export declare function useCollectionFetch<M extends Record<string, any>, USER extends User>({ path, collection, filterValues, sortBy, itemCount, offset, page, searchString }: CollectionFetchProps<M>): CollectionFetchResult<M>;
|
|
@@ -26,7 +26,6 @@ export * from "./useSlot";
|
|
|
26
26
|
export * from "./useCustomizationController";
|
|
27
27
|
export * from "./useBuildLocalConfigurationPersistence";
|
|
28
28
|
export * from "./useBuildModeController";
|
|
29
|
-
export * from "./useValidateAuthenticator";
|
|
30
29
|
export * from "./useRebaseRegistry";
|
|
31
30
|
export * from "./useBackendStorageSource";
|
|
32
31
|
export * from "./usePermissions";
|
|
@@ -7,7 +7,6 @@ export declare function saveEntityToCache(path: string, data: object): void;
|
|
|
7
7
|
export declare function removeEntityFromMemoryCache(path: string): void;
|
|
8
8
|
export declare function saveEntityToMemoryCache(path: string, data: object): void;
|
|
9
9
|
export declare function getEntityFromMemoryCache(path: string): object | undefined;
|
|
10
|
-
export declare function hasEntityInCache(path: string): boolean;
|
|
11
10
|
/**
|
|
12
11
|
* Retrieves an entity from the in-memory cache or `sessionStorage`.
|
|
13
12
|
* If the entity is not in the cache but exists in `sessionStorage`, it loads it into the cache.
|
|
@@ -20,8 +19,4 @@ export declare function getEntityFromCache(path: string): object | undefined;
|
|
|
20
19
|
* @param path - The unique path/key for the entity to remove.
|
|
21
20
|
*/
|
|
22
21
|
export declare function removeEntityFromCache(path: string): void;
|
|
23
|
-
/**
|
|
24
|
-
* Clears the entire in-memory cache and removes all related entities from `sessionStorage`.
|
|
25
|
-
*/
|
|
26
|
-
export declare function clearEntityCache(): void;
|
|
27
22
|
export declare function flattenKeys(obj: Record<string, unknown> | unknown[], prefix?: string, result?: string[]): string[];
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
export * from "./icon_list";
|
|
2
|
-
export * from "./icon_synonyms";
|
|
3
2
|
export * from "./icons";
|
|
4
3
|
export * from "./createFormexStub";
|
|
5
4
|
export * from "./entity_cache";
|
|
6
5
|
export * from "./useStorageUploadController";
|
|
7
|
-
export * from "./useTraceUpdate";
|
|
8
6
|
export * from "./previews";
|
|
9
7
|
export * from "./enums";
|
|
10
8
|
export * from "./constants";
|
|
@@ -12,7 +12,7 @@ export interface StorageFieldItem {
|
|
|
12
12
|
storagePathOrDownloadUrl?: string;
|
|
13
13
|
file?: File;
|
|
14
14
|
fileName?: string;
|
|
15
|
-
metadata?:
|
|
15
|
+
metadata?: Record<string, unknown>;
|
|
16
16
|
size: StorageFieldSize;
|
|
17
17
|
}
|
|
18
18
|
export declare function useStorageUploadController<M extends Record<string, unknown>>({ entityId, entityValues, path, value, property, propertyKey, storageSource, disabled, onChange }: {
|
|
@@ -31,7 +31,7 @@ export declare function useStorageUploadController<M extends Record<string, unkn
|
|
|
31
31
|
storage: StorageConfig;
|
|
32
32
|
fileNameBuilder: (file: File) => Promise<string>;
|
|
33
33
|
storagePathBuilder: (file: File) => string;
|
|
34
|
-
onFileUploadComplete: (uploadedPath: string, entry: StorageFieldItem, metadata?:
|
|
34
|
+
onFileUploadComplete: (uploadedPath: string, entry: StorageFieldItem, metadata?: Record<string, unknown>, uploadedUrl?: string) => Promise<void>;
|
|
35
35
|
onFileUploadError: (entry: StorageFieldItem) => void;
|
|
36
36
|
onFilesAdded: (acceptedFiles: File[]) => Promise<void>;
|
|
37
37
|
multipleFilesSupported: boolean;
|
|
@@ -11,6 +11,6 @@ export declare const isNaN: (obj: unknown) => boolean;
|
|
|
11
11
|
/**
|
|
12
12
|
* Deeply get a value from an object via its path.
|
|
13
13
|
*/
|
|
14
|
-
export declare function getIn(obj:
|
|
15
|
-
export declare function setIn(obj:
|
|
14
|
+
export declare function getIn(obj: unknown, key: string | string[], def?: unknown, p?: number): unknown;
|
|
15
|
+
export declare function setIn(obj: unknown, path: string, value: unknown): unknown;
|
|
16
16
|
export declare function clone(value: unknown): unknown;
|
package/dist/index.es.js
CHANGED
|
@@ -34,6 +34,11 @@ const SECTIONS = [{
|
|
|
34
34
|
name: "RLS Policies",
|
|
35
35
|
description: "Configure Row Level Security for fine-grained data access",
|
|
36
36
|
icon: "ShieldCheck"
|
|
37
|
+
}, {
|
|
38
|
+
path: "/logs",
|
|
39
|
+
name: "Logs Explorer",
|
|
40
|
+
description: "Real-time system, query, and authentication logs",
|
|
41
|
+
icon: "Activity"
|
|
37
42
|
}]
|
|
38
43
|
}, {
|
|
39
44
|
label: "Compute",
|
|
@@ -590,10 +595,10 @@ function SyntaxHighlightedSnippet() {
|
|
|
590
595
|
}
|
|
591
596
|
return t49;
|
|
592
597
|
}
|
|
593
|
-
const SQLEditor = lazy(() => import("./SQLEditor-
|
|
598
|
+
const SQLEditor = lazy(() => import("./SQLEditor-BC0IOUQu.js").then((m) => ({
|
|
594
599
|
default: m.SQLEditor
|
|
595
600
|
})));
|
|
596
|
-
const JSEditor = lazy(() => import("./JSEditor-
|
|
601
|
+
const JSEditor = lazy(() => import("./JSEditor-BCSoElPg.js").then((m) => ({
|
|
597
602
|
default: m.JSEditor
|
|
598
603
|
})));
|
|
599
604
|
const RLSEditor = lazy(() => import("./RLSEditor-CHEExeSB.js").then((m) => ({
|
|
@@ -602,7 +607,7 @@ const RLSEditor = lazy(() => import("./RLSEditor-CHEExeSB.js").then((m) => ({
|
|
|
602
607
|
const StorageView = lazy(() => import("./StorageView-B7AsN2qX.js").then((m) => ({
|
|
603
608
|
default: m.StorageView
|
|
604
609
|
})));
|
|
605
|
-
const CronJobsView = lazy(() => import("./CronJobsView-
|
|
610
|
+
const CronJobsView = lazy(() => import("./CronJobsView-3PM_qR8v.js").then((m) => ({
|
|
606
611
|
default: m.CronJobsView
|
|
607
612
|
})));
|
|
608
613
|
const SchemaVisualizer = lazy(() => import("./SchemaVisualizer-BGpmzyXT.js").then((m) => ({
|
|
@@ -611,9 +616,12 @@ const SchemaVisualizer = lazy(() => import("./SchemaVisualizer-BGpmzyXT.js").the
|
|
|
611
616
|
const BranchesView = lazy(() => import("./BranchesView-BiTEwIhd.js").then((m) => ({
|
|
612
617
|
default: m.BranchesView
|
|
613
618
|
})));
|
|
614
|
-
const ApiExplorer = lazy(() => import("./ApiExplorer-
|
|
619
|
+
const ApiExplorer = lazy(() => import("./ApiExplorer-CGHEF1uL.js").then((m) => ({
|
|
615
620
|
default: m.ApiExplorer
|
|
616
621
|
})));
|
|
622
|
+
const LogsExplorer = lazy(() => import("./LogsExplorer-_4sZadKn.js").then((m) => ({
|
|
623
|
+
default: m.LogsExplorer
|
|
624
|
+
})));
|
|
617
625
|
const DEFAULT_HOME_PAGE = /* @__PURE__ */ jsx(StudioHomePage, {});
|
|
618
626
|
function RebaseStudio({
|
|
619
627
|
tools,
|
|
@@ -623,7 +631,7 @@ function RebaseStudio({
|
|
|
623
631
|
const resolvedHomePage = homePage ?? DEFAULT_HOME_PAGE;
|
|
624
632
|
const devViews = useMemo(() => {
|
|
625
633
|
const views = [];
|
|
626
|
-
const activeTools = tools ?? ["sql", "js", "rls", "storage", "cron", "schema-visualizer", "branches", "api"];
|
|
634
|
+
const activeTools = tools ?? ["sql", "js", "rls", "storage", "cron", "schema-visualizer", "branches", "api", "logs"];
|
|
627
635
|
const suspense = (el) => /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(CircularProgressCenter, {}), children: el });
|
|
628
636
|
if (activeTools.includes("sql")) {
|
|
629
637
|
views.push({
|
|
@@ -705,6 +713,16 @@ function RebaseStudio({
|
|
|
705
713
|
view: suspense(/* @__PURE__ */ jsx(ApiExplorer, {}))
|
|
706
714
|
});
|
|
707
715
|
}
|
|
716
|
+
if (activeTools.includes("logs")) {
|
|
717
|
+
views.push({
|
|
718
|
+
slug: "logs",
|
|
719
|
+
name: "Logs Explorer",
|
|
720
|
+
group: "Database",
|
|
721
|
+
icon: "Activity",
|
|
722
|
+
description: "Real-time system and query logs",
|
|
723
|
+
view: suspense(/* @__PURE__ */ jsx(LogsExplorer, {}))
|
|
724
|
+
});
|
|
725
|
+
}
|
|
708
726
|
return views;
|
|
709
727
|
}, [tools]);
|
|
710
728
|
const homePageRef = React.useRef(resolvedHomePage);
|
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, 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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"}
|
|
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, 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 { path: \"/logs\", name: \"Logs Explorer\", description: \"Real-time system, query, and authentication logs\", icon: \"Activity\" }\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 })));\nconst LogsExplorer = lazy(() => import(\"./LogsExplorer/LogsExplorer\").then(m => ({ default: m.LogsExplorer })));\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\", \"logs\"];\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 if (activeTools.includes(\"logs\")) {\n views.push({ slug: \"logs\",\nname: \"Logs Explorer\",\ngroup: \"Database\",\nicon: \"Activity\",\ndescription: \"Real-time system and query logs\",\nview: suspense(<LogsExplorer/>) });\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","LogsExplorer","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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"}
|