@rebasepro/studio 0.0.1-canary.09e5ec5
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/LICENSE +114 -0
- package/README.md +159 -0
- package/dist/ApiExplorer-gMJt5JrS.js +1053 -0
- package/dist/ApiExplorer-gMJt5JrS.js.map +1 -0
- package/dist/AuthSimulationSelector-BF4rkRGp.js +118 -0
- package/dist/AuthSimulationSelector-BF4rkRGp.js.map +1 -0
- package/dist/BranchesView-DcHZtvXo.js +292 -0
- package/dist/BranchesView-DcHZtvXo.js.map +1 -0
- package/dist/CronJobsView-CijCToeK.js +456 -0
- package/dist/CronJobsView-CijCToeK.js.map +1 -0
- package/dist/JSEditor-D8nVp3Lp.js +1308 -0
- package/dist/JSEditor-D8nVp3Lp.js.map +1 -0
- package/dist/MonacoEditor-CMYEjiRf.js +161 -0
- package/dist/MonacoEditor-CMYEjiRf.js.map +1 -0
- package/dist/RLSEditor-DBH09u9v.js +1831 -0
- package/dist/RLSEditor-DBH09u9v.js.map +1 -0
- package/dist/SQLEditor-CkVx9vgr.js +1792 -0
- package/dist/SQLEditor-CkVx9vgr.js.map +1 -0
- package/dist/SchemaVisualizer-BgD5Zb77.js +1069 -0
- package/dist/SchemaVisualizer-BgD5Zb77.js.map +1 -0
- package/dist/StorageView-CTqGFhY9.js +907 -0
- package/dist/StorageView-CTqGFhY9.js.map +1 -0
- package/dist/common/src/collections/CollectionRegistry.d.ts +56 -0
- package/dist/common/src/collections/index.d.ts +1 -0
- package/dist/common/src/data/buildRebaseData.d.ts +14 -0
- package/dist/common/src/index.d.ts +3 -0
- package/dist/common/src/util/builders.d.ts +57 -0
- package/dist/common/src/util/callbacks.d.ts +6 -0
- package/dist/common/src/util/collections.d.ts +11 -0
- package/dist/common/src/util/common.d.ts +2 -0
- package/dist/common/src/util/conditions.d.ts +26 -0
- package/dist/common/src/util/entities.d.ts +58 -0
- package/dist/common/src/util/enums.d.ts +3 -0
- package/dist/common/src/util/index.d.ts +16 -0
- package/dist/common/src/util/navigation_from_path.d.ts +34 -0
- package/dist/common/src/util/navigation_utils.d.ts +20 -0
- package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
- package/dist/common/src/util/paths.d.ts +14 -0
- package/dist/common/src/util/permissions.d.ts +5 -0
- package/dist/common/src/util/references.d.ts +2 -0
- package/dist/common/src/util/relations.d.ts +22 -0
- package/dist/common/src/util/resolutions.d.ts +72 -0
- package/dist/common/src/util/storage.d.ts +24 -0
- package/dist/core/src/components/AIIcon.d.ts +16 -0
- package/dist/core/src/components/ConfirmationDialog.d.ts +9 -0
- package/dist/core/src/components/Debug/UIReferenceView.d.ts +1 -0
- package/dist/core/src/components/Debug/UIStyleGuide.d.ts +1 -0
- package/dist/core/src/components/ErrorTooltip.d.ts +2 -0
- package/dist/core/src/components/ErrorView.d.ts +21 -0
- package/dist/core/src/components/LanguageToggle.d.ts +1 -0
- package/dist/core/src/components/LoginView/LoginView.d.ts +68 -0
- package/dist/core/src/components/LoginView/index.d.ts +2 -0
- package/dist/core/src/components/NotFoundPage.d.ts +1 -0
- package/dist/core/src/components/RebaseAuth.d.ts +10 -0
- package/dist/core/src/components/RebaseLogo.d.ts +7 -0
- package/dist/core/src/components/UnsavedChangesDialog.d.ts +9 -0
- package/dist/core/src/components/UserDisplay.d.ts +7 -0
- package/dist/core/src/components/UserSelectPopover.d.ts +62 -0
- package/dist/core/src/components/UserSettingsView.d.ts +1 -0
- package/dist/core/src/components/common/index.d.ts +6 -0
- package/dist/core/src/components/common/table_height.d.ts +5 -0
- package/dist/core/src/components/common/types.d.ts +63 -0
- package/dist/core/src/components/common/useColumnsIds.d.ts +9 -0
- package/dist/core/src/components/common/useDataTableController.d.ts +45 -0
- package/dist/core/src/components/common/useDebouncedData.d.ts +9 -0
- package/dist/core/src/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/core/src/components/index.d.ts +16 -0
- package/dist/core/src/contexts/AdminModeController.d.ts +4 -0
- package/dist/core/src/contexts/AnalyticsContext.d.ts +3 -0
- package/dist/core/src/contexts/AuthControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/CustomizationControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/DataDriverContext.d.ts +3 -0
- package/dist/core/src/contexts/DatabaseAdminContext.d.ts +3 -0
- package/dist/core/src/contexts/DialogsProvider.d.ts +4 -0
- package/dist/core/src/contexts/EffectiveRoleController.d.ts +4 -0
- package/dist/core/src/contexts/InternalUserManagementContext.d.ts +3 -0
- package/dist/core/src/contexts/ModeController.d.ts +4 -0
- package/dist/core/src/contexts/RebaseClientInstanceContext.d.ts +6 -0
- package/dist/core/src/contexts/RebaseDataContext.d.ts +3 -0
- package/dist/core/src/contexts/SnackbarProvider.d.ts +2 -0
- package/dist/core/src/contexts/StorageSourceContext.d.ts +3 -0
- package/dist/core/src/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
- package/dist/core/src/contexts/index.d.ts +13 -0
- package/dist/core/src/core/PluginLifecycleManager.d.ts +17 -0
- package/dist/core/src/core/PluginProviderStack.d.ts +21 -0
- package/dist/core/src/core/Rebase.d.ts +14 -0
- package/dist/core/src/core/RebaseProps.d.ts +136 -0
- package/dist/core/src/core/RebaseRouter.d.ts +4 -0
- package/dist/core/src/core/RebaseRoutes.d.ts +17 -0
- package/dist/core/src/core/index.d.ts +4 -0
- package/dist/core/src/hooks/ApiConfigContext.d.ts +24 -0
- package/dist/core/src/hooks/data/delete.d.ts +31 -0
- package/dist/core/src/hooks/data/save.d.ts +34 -0
- package/dist/core/src/hooks/data/useCollectionFetch.d.ts +51 -0
- package/dist/core/src/hooks/data/useData.d.ts +13 -0
- package/dist/core/src/hooks/data/useDataOrder.d.ts +12 -0
- package/dist/core/src/hooks/data/useEntityFetch.d.ts +38 -0
- package/dist/core/src/hooks/data/useRelationSelector.d.ts +52 -0
- package/dist/core/src/hooks/data/useUserSelector.d.ts +31 -0
- package/dist/core/src/hooks/index.d.ts +37 -0
- package/dist/core/src/hooks/useAdminModeController.d.ts +19 -0
- package/dist/core/src/hooks/useAnalyticsController.d.ts +5 -0
- package/dist/core/src/hooks/useAuthController.d.ts +11 -0
- package/dist/core/src/hooks/useAuthSubscription.d.ts +2 -0
- package/dist/core/src/hooks/useBackendStorageSource.d.ts +30 -0
- package/dist/core/src/hooks/useBridgeRegistration.d.ts +18 -0
- package/dist/core/src/hooks/useBrowserTitleAndIcon.d.ts +6 -0
- package/dist/core/src/hooks/useBuildAdminModeController.d.ts +6 -0
- package/dist/core/src/hooks/useBuildEffectiveRoleController.d.ts +8 -0
- package/dist/core/src/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
- package/dist/core/src/hooks/useBuildModeController.d.ts +6 -0
- package/dist/core/src/hooks/useClipboard.d.ts +57 -0
- package/dist/core/src/hooks/useCollapsedGroups.d.ts +12 -0
- package/dist/core/src/hooks/useCustomizationController.d.ts +11 -0
- package/dist/core/src/hooks/useDialogsController.d.ts +11 -0
- package/dist/core/src/hooks/useEffectiveRoleController.d.ts +7 -0
- package/dist/core/src/hooks/useInternalUserManagementController.d.ts +12 -0
- package/dist/core/src/hooks/useLargeLayout.d.ts +1 -0
- package/dist/core/src/hooks/useModeController.d.ts +19 -0
- package/dist/core/src/hooks/usePermissions.d.ts +12 -0
- package/dist/core/src/hooks/useRebaseClient.d.ts +5 -0
- package/dist/core/src/hooks/useRebaseContext.d.ts +11 -0
- package/dist/core/src/hooks/useRebaseRegistry.d.ts +34 -0
- package/dist/core/src/hooks/useSlot.d.ts +18 -0
- package/dist/core/src/hooks/useSnackbarController.d.ts +20 -0
- package/dist/core/src/hooks/useStorageSource.d.ts +7 -0
- package/dist/core/src/hooks/useStudioBridge.d.ts +91 -0
- package/dist/core/src/hooks/useTranslation.d.ts +17 -0
- package/dist/core/src/hooks/useUnsavedChangesDialog.d.ts +12 -0
- package/dist/core/src/hooks/useUserConfigurationPersistence.d.ts +8 -0
- package/dist/core/src/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/core/src/i18n/RebaseI18nProvider.d.ts +33 -0
- package/dist/core/src/index.d.ts +15 -0
- package/dist/core/src/internal/common.d.ts +3 -0
- package/dist/core/src/internal/useRestoreScroll.d.ts +6 -0
- package/dist/core/src/locales/de.d.ts +2 -0
- package/dist/core/src/locales/en.d.ts +10 -0
- package/dist/core/src/locales/es.d.ts +10 -0
- package/dist/core/src/locales/fr.d.ts +2 -0
- package/dist/core/src/locales/hi.d.ts +2 -0
- package/dist/core/src/locales/it.d.ts +2 -0
- package/dist/core/src/locales/pt.d.ts +7 -0
- package/dist/core/src/util/constants.d.ts +1 -0
- package/dist/core/src/util/createFormexStub.d.ts +2 -0
- package/dist/core/src/util/entity_cache.d.ts +27 -0
- package/dist/core/src/util/enums.d.ts +5 -0
- package/dist/core/src/util/icon_list.d.ts +5 -0
- package/dist/core/src/util/icon_synonyms.d.ts +1 -0
- package/dist/core/src/util/icons.d.ts +20 -0
- package/dist/core/src/util/index.d.ts +10 -0
- package/dist/core/src/util/previews.d.ts +4 -0
- package/dist/core/src/util/useStorageUploadController.d.ts +38 -0
- package/dist/core/src/util/useTraceUpdate.d.ts +2 -0
- package/dist/formex/src/Field.d.ts +52 -0
- package/dist/formex/src/Formex.d.ts +7 -0
- package/dist/formex/src/index.d.ts +5 -0
- package/dist/formex/src/types.d.ts +40 -0
- package/dist/formex/src/useCreateFormex.d.ts +14 -0
- package/dist/formex/src/utils.d.ts +16 -0
- package/dist/index.es.js +726 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +9647 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/studio/src/components/ApiExplorer/ApiExplorer.d.ts +9 -0
- package/dist/studio/src/components/ApiExplorer/EndpointDetail.d.ts +9 -0
- package/dist/studio/src/components/ApiExplorer/TryItPanel.d.ts +15 -0
- package/dist/studio/src/components/ApiExplorer/parseSpec.d.ts +16 -0
- package/dist/studio/src/components/ApiExplorer/types.d.ts +90 -0
- package/dist/studio/src/components/AuthSimulationSelector.d.ts +11 -0
- package/dist/studio/src/components/Branches/BranchesView.d.ts +1 -0
- package/dist/studio/src/components/CronJobs/CronJobsView.d.ts +1 -0
- package/dist/studio/src/components/JSEditor/JSEditor.d.ts +1 -0
- package/dist/studio/src/components/JSEditor/JSEditorSidebar.d.ts +21 -0
- package/dist/studio/src/components/JSEditor/JSMonacoEditor.d.ts +18 -0
- package/dist/studio/src/components/RLSEditor/PolicyEditor.d.ts +9 -0
- package/dist/studio/src/components/RLSEditor/RLSEditor.d.ts +19 -0
- package/dist/studio/src/components/RLSEditor/index.d.ts +1 -0
- package/dist/studio/src/components/RebaseStudio.d.ts +2 -0
- package/dist/studio/src/components/SQLEditor/ExplainVisualizer.d.ts +24 -0
- package/dist/studio/src/components/SQLEditor/MonacoEditor.d.ts +17 -0
- package/dist/studio/src/components/SQLEditor/SQLEditor.d.ts +11 -0
- package/dist/studio/src/components/SQLEditor/SQLEditorSidebar.d.ts +21 -0
- package/dist/studio/src/components/SQLEditor/SchemaBrowser.d.ts +8 -0
- package/dist/studio/src/components/SchemaVisualizer/RelationEdge.d.ts +3 -0
- package/dist/studio/src/components/SchemaVisualizer/SchemaVisualizer.d.ts +2 -0
- package/dist/studio/src/components/SchemaVisualizer/TableNode.d.ts +3 -0
- package/dist/studio/src/components/SchemaVisualizer/index.d.ts +5 -0
- package/dist/studio/src/components/SchemaVisualizer/schema-visualizer.utils.d.ts +42 -0
- package/dist/studio/src/components/SchemaVisualizer/useSchemaGraph.d.ts +37 -0
- package/dist/studio/src/components/StorageView/StorageView.d.ts +1 -0
- package/dist/studio/src/components/StudioHomePage.d.ts +9 -0
- package/dist/studio/src/index.d.ts +4 -0
- package/dist/studio/src/utils/entities.d.ts +0 -0
- package/dist/studio/src/utils/pgColumnToProperty.d.ts +6 -0
- package/dist/studio/src/utils/sql_utils.d.ts +52 -0
- package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
- package/dist/types/src/controllers/auth.d.ts +119 -0
- package/dist/types/src/controllers/client.d.ts +170 -0
- package/dist/types/src/controllers/collection_registry.d.ts +45 -0
- package/dist/types/src/controllers/customization_controller.d.ts +60 -0
- package/dist/types/src/controllers/data.d.ts +168 -0
- package/dist/types/src/controllers/data_driver.d.ts +160 -0
- package/dist/types/src/controllers/database_admin.d.ts +11 -0
- package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
- package/dist/types/src/controllers/effective_role.d.ts +4 -0
- package/dist/types/src/controllers/email.d.ts +34 -0
- package/dist/types/src/controllers/index.d.ts +18 -0
- package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
- package/dist/types/src/controllers/navigation.d.ts +213 -0
- package/dist/types/src/controllers/registry.d.ts +54 -0
- package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
- package/dist/types/src/controllers/side_entity_controller.d.ts +90 -0
- package/dist/types/src/controllers/snackbar.d.ts +24 -0
- package/dist/types/src/controllers/storage.d.ts +171 -0
- package/dist/types/src/index.d.ts +4 -0
- package/dist/types/src/rebase_context.d.ts +105 -0
- package/dist/types/src/types/backend.d.ts +536 -0
- package/dist/types/src/types/builders.d.ts +15 -0
- package/dist/types/src/types/chips.d.ts +5 -0
- package/dist/types/src/types/collections.d.ts +856 -0
- package/dist/types/src/types/cron.d.ts +102 -0
- package/dist/types/src/types/data_source.d.ts +64 -0
- package/dist/types/src/types/entities.d.ts +145 -0
- package/dist/types/src/types/entity_actions.d.ts +98 -0
- package/dist/types/src/types/entity_callbacks.d.ts +173 -0
- package/dist/types/src/types/entity_link_builder.d.ts +7 -0
- package/dist/types/src/types/entity_overrides.d.ts +10 -0
- package/dist/types/src/types/entity_views.d.ts +61 -0
- package/dist/types/src/types/export_import.d.ts +21 -0
- package/dist/types/src/types/index.d.ts +23 -0
- package/dist/types/src/types/locales.d.ts +4 -0
- package/dist/types/src/types/modify_collections.d.ts +5 -0
- package/dist/types/src/types/plugins.d.ts +279 -0
- package/dist/types/src/types/properties.d.ts +1176 -0
- package/dist/types/src/types/property_config.d.ts +70 -0
- package/dist/types/src/types/relations.d.ts +336 -0
- package/dist/types/src/types/slots.d.ts +252 -0
- package/dist/types/src/types/translations.d.ts +870 -0
- package/dist/types/src/types/user_management_delegate.d.ts +121 -0
- package/dist/types/src/types/websockets.d.ts +78 -0
- package/dist/types/src/users/index.d.ts +2 -0
- package/dist/types/src/users/roles.d.ts +22 -0
- package/dist/types/src/users/user.d.ts +46 -0
- package/dist/ui/src/components/Alert.d.ts +12 -0
- package/dist/ui/src/components/Autocomplete.d.ts +21 -0
- package/dist/ui/src/components/Avatar.d.ts +11 -0
- package/dist/ui/src/components/Badge.d.ts +8 -0
- package/dist/ui/src/components/BooleanSwitch.d.ts +14 -0
- package/dist/ui/src/components/BooleanSwitchWithLabel.d.ts +17 -0
- package/dist/ui/src/components/Button.d.ts +14 -0
- package/dist/ui/src/components/Card.d.ts +9 -0
- package/dist/ui/src/components/CenteredView.d.ts +9 -0
- package/dist/ui/src/components/Checkbox.d.ts +13 -0
- package/dist/ui/src/components/Chip.d.ts +26 -0
- package/dist/ui/src/components/CircularProgress.d.ts +5 -0
- package/dist/ui/src/components/CircularProgressCenter.d.ts +11 -0
- package/dist/ui/src/components/Collapse.d.ts +9 -0
- package/dist/ui/src/components/ColorPicker.d.ts +30 -0
- package/dist/ui/src/components/Container.d.ts +8 -0
- package/dist/ui/src/components/DateTimeField.d.ts +24 -0
- package/dist/ui/src/components/DebouncedTextField.d.ts +2 -0
- package/dist/ui/src/components/Dialog.d.ts +39 -0
- package/dist/ui/src/components/DialogActions.d.ts +7 -0
- package/dist/ui/src/components/DialogContent.d.ts +7 -0
- package/dist/ui/src/components/DialogTitle.d.ts +10 -0
- package/dist/ui/src/components/ErrorBoundary.d.ts +11 -0
- package/dist/ui/src/components/ExpandablePanel.d.ts +12 -0
- package/dist/ui/src/components/FileUpload.d.ts +23 -0
- package/dist/ui/src/components/IconButton.d.ts +12 -0
- package/dist/ui/src/components/InfoLabel.d.ts +5 -0
- package/dist/ui/src/components/InputLabel.d.ts +11 -0
- package/dist/ui/src/components/Label.d.ts +7 -0
- package/dist/ui/src/components/LoadingButton.d.ts +7 -0
- package/dist/ui/src/components/Markdown.d.ts +10 -0
- package/dist/ui/src/components/Menu.d.ts +23 -0
- package/dist/ui/src/components/Menubar.d.ts +80 -0
- package/dist/ui/src/components/MultiSelect.d.ts +48 -0
- package/dist/ui/src/components/Paper.d.ts +6 -0
- package/dist/ui/src/components/Popover.d.ts +24 -0
- package/dist/ui/src/components/RadioGroup.d.ts +28 -0
- package/dist/ui/src/components/ResizablePanels.d.ts +18 -0
- package/dist/ui/src/components/SearchBar.d.ts +22 -0
- package/dist/ui/src/components/Select.d.ts +43 -0
- package/dist/ui/src/components/Separator.d.ts +5 -0
- package/dist/ui/src/components/Sheet.d.ts +22 -0
- package/dist/ui/src/components/Skeleton.d.ts +6 -0
- package/dist/ui/src/components/Slider.d.ts +21 -0
- package/dist/ui/src/components/Table.d.ts +34 -0
- package/dist/ui/src/components/Tabs.d.ts +19 -0
- package/dist/ui/src/components/TextField.d.ts +58 -0
- package/dist/ui/src/components/TextareaAutosize.d.ts +43 -0
- package/dist/ui/src/components/ToggleButtonGroup.d.ts +30 -0
- package/dist/ui/src/components/Tooltip.d.ts +19 -0
- package/dist/ui/src/components/Typography.d.ts +36 -0
- package/dist/ui/src/components/VirtualTable/VirtualTable.d.ts +11 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableCell.d.ts +21 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableProps.d.ts +243 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableRow.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/index.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/types.d.ts +38 -0
- package/dist/ui/src/components/common/SelectInputLabel.d.ts +5 -0
- package/dist/ui/src/components/index.d.ts +53 -0
- package/dist/ui/src/hooks/PortalContainerContext.d.ts +31 -0
- package/dist/ui/src/hooks/index.d.ts +6 -0
- package/dist/ui/src/hooks/useDebounceCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useDebounceValue.d.ts +1 -0
- package/dist/ui/src/hooks/useDebouncedCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useInjectStyles.d.ts +7 -0
- package/dist/ui/src/hooks/useOutsideAlerter.d.ts +5 -0
- package/dist/ui/src/icons/GitHubIcon.d.ts +2 -0
- package/dist/ui/src/icons/HandleIcon.d.ts +1 -0
- package/dist/ui/src/icons/Icon.d.ts +20 -0
- package/dist/ui/src/icons/cool_icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/index.d.ts +6 -0
- package/dist/ui/src/index.d.ts +5 -0
- package/dist/ui/src/styles.d.ts +12 -0
- package/dist/ui/src/util/chip_colors.d.ts +4 -0
- package/dist/ui/src/util/cls.d.ts +2 -0
- package/dist/ui/src/util/debounce.d.ts +10 -0
- package/dist/ui/src/util/hash.d.ts +1 -0
- package/dist/ui/src/util/index.d.ts +4 -0
- package/dist/ui/src/util/key_to_icon_component.d.ts +1 -0
- package/package.json +84 -0
- package/src/components/ApiExplorer/ApiExplorer.tsx +290 -0
- package/src/components/ApiExplorer/EndpointDetail.tsx +271 -0
- package/src/components/ApiExplorer/TryItPanel.tsx +510 -0
- package/src/components/ApiExplorer/parseSpec.ts +104 -0
- package/src/components/ApiExplorer/types.ts +84 -0
- package/src/components/AuthSimulationSelector.tsx +77 -0
- package/src/components/Branches/BranchesView.tsx +370 -0
- package/src/components/CronJobs/CronJobsView.tsx +346 -0
- package/src/components/JSEditor/JSEditor.tsx +1033 -0
- package/src/components/JSEditor/JSEditorSidebar.tsx +340 -0
- package/src/components/JSEditor/JSMonacoEditor.tsx +390 -0
- package/src/components/RLSEditor/PolicyEditor.tsx +444 -0
- package/src/components/RLSEditor/RLSEditor.tsx +692 -0
- package/src/components/RLSEditor/index.ts +1 -0
- package/src/components/RebaseStudio.tsx +121 -0
- package/src/components/SQLEditor/ExplainVisualizer.tsx +128 -0
- package/src/components/SQLEditor/MonacoEditor.tsx +203 -0
- package/src/components/SQLEditor/SQLEditor.tsx +1419 -0
- package/src/components/SQLEditor/SQLEditorSidebar.tsx +174 -0
- package/src/components/SQLEditor/SchemaBrowser.tsx +158 -0
- package/src/components/SchemaVisualizer/RelationEdge.tsx +102 -0
- package/src/components/SchemaVisualizer/SchemaVisualizer.tsx +665 -0
- package/src/components/SchemaVisualizer/TableNode.tsx +257 -0
- package/src/components/SchemaVisualizer/index.ts +5 -0
- package/src/components/SchemaVisualizer/schema-visualizer.utils.ts +140 -0
- package/src/components/SchemaVisualizer/useSchemaGraph.ts +397 -0
- package/src/components/StorageView/StorageView.tsx +1035 -0
- package/src/components/StudioHomePage.tsx +357 -0
- package/src/index.ts +31 -0
- package/src/utils/entities.ts +2 -0
- package/src/utils/pgColumnToProperty.test.ts +401 -0
- package/src/utils/pgColumnToProperty.ts +275 -0
- package/src/utils/sql_utils.test.ts +265 -0
- package/src/utils/sql_utils.ts +291 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RLSEditor-DBH09u9v.js","sources":["../src/components/RLSEditor/PolicyEditor.tsx","../src/components/RLSEditor/RLSEditor.tsx"],"sourcesContent":["\nimport React, { useState, useEffect } from \"react\";\nimport { Button, Paper, Typography, TextField, Select, SelectItem, MultiSelect, MultiSelectItem, cls, defaultBorderMixin, IconButton, Dialog, DialogTitle, DialogContent, DialogActions , iconSize } from \"@rebasepro/ui\";\nimport { HelpCircleIcon } from \"lucide-react\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { MonacoEditor } from \"../SQLEditor/MonacoEditor\";\nimport { PostgresPolicy } from \"./RLSEditor\";\n\nexport interface PolicyEditorProps {\n policy?: PostgresPolicy;\n schema: string;\n table: string;\n onSave: (policyData: Partial<PostgresPolicy>) => void;\n onCancel: () => void;\n}\n\ntype PolicyCommand = \"ALL\" | \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\";\nconst COMMAND_OPTIONS: PolicyCommand[] = [\"ALL\", \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\"];\nconst ROLE_OPTIONS = [\"public\", \"authenticated\", \"anon\", \"admin\"];\n\ninterface PolicyPreset {\n id: string;\n label: string;\n description: string;\n policyname: string;\n cmd: PolicyCommand;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n qual: string;\n with_check: string;\n}\n\nconst POLICY_PRESETS: PolicyPreset[] = [\n {\n id: \"public_read\",\n label: \"Enable read access to everyone\",\n description: \"Anyone can read data, regardless of authentication status.\",\n policyname: \"Enable read access for all users\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"public\"],\n qual: \"true\",\n with_check: \"\"\n },\n {\n id: \"auth_read\",\n label: \"Enable read access for authenticated users only\",\n description: \"Only logged-in users are allowed to read data.\",\n policyname: \"Enable read access for authenticated users\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"true\",\n with_check: \"\"\n },\n {\n id: \"auth_insert\",\n label: \"Enable insert for authenticated users only\",\n description: \"Only logged-in users are allowed to insert new data.\",\n policyname: \"Enable insert for authenticated users only\",\n cmd: \"INSERT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"\",\n with_check: \"true\"\n },\n {\n id: \"user_select_own\",\n label: \"Users can read their own rows\",\n description: \"Users can only read rows where the user_id matches their auth.uid()\",\n policyname: \"Users can select their own data\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"\"\n },\n {\n id: \"user_update_own\",\n label: \"Users can update their own rows\",\n description: \"Users can only update rows where the user_id matches their auth.uid()\",\n policyname: \"Users can update their own data\",\n cmd: \"UPDATE\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"auth.uid() = user_id\"\n },\n {\n id: \"user_delete_own\",\n label: \"Users can delete their own rows\",\n description: \"Users can only delete rows where the user_id matches their auth.uid()\",\n policyname: \"Users can delete their own data\",\n cmd: \"DELETE\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"\"\n }\n];\n\nexport const PolicyEditor = ({\n policy,\n schema,\n table,\n onSave,\n onCancel\n}: PolicyEditorProps) => {\n\n const { t } = useTranslation();\n const [name, setName] = useState(\"\");\n const [helpOpen, setHelpOpen] = useState(false);\n const [behavior, setBehavior] = useState<\"PERMISSIVE\" | \"RESTRICTIVE\">(\"PERMISSIVE\");\n const [command, setCommand] = useState<PolicyCommand>(\"ALL\");\n const [roles, setRoles] = useState<string[]>([\"public\"]);\n const [usingExpr, setUsingExpr] = useState<string>(\"\");\n const [checkExpr, setCheckExpr] = useState<string>(\"\");\n\n const [selectedPreset, setSelectedPreset] = useState<string>(\"\");\n\n useEffect(() => {\n if (policy) {\n setName(policy.policyname || \"\");\n setBehavior(policy.permissive || \"PERMISSIVE\");\n setCommand((policy.cmd as PolicyCommand) || \"ALL\");\n\n const initialRoles = policy.roles\n ? (Array.isArray(policy.roles) ? policy.roles : [policy.roles])\n : [\"public\"];\n setRoles(initialRoles as string[]);\n\n setUsingExpr(policy.qual || \"\");\n setCheckExpr(policy.with_check || \"\");\n } else {\n setName(\"\");\n setBehavior(\"PERMISSIVE\");\n setCommand(\"ALL\");\n setRoles([\"public\"]);\n setUsingExpr(\"\");\n setCheckExpr(\"\");\n setSelectedPreset(\"\");\n }\n }, [policy]);\n\n const handlePresetChange = (presetId: string) => {\n const preset = POLICY_PRESETS.find(p => p.id === presetId);\n if (!preset) return;\n\n setSelectedPreset(presetId);\n setName(preset.policyname);\n setBehavior(preset.permissive);\n setCommand(preset.cmd);\n setRoles(preset.roles);\n setUsingExpr(preset.qual);\n setCheckExpr(preset.with_check);\n };\n\n const showCheck = command === \"ALL\" || command === \"INSERT\" || command === \"UPDATE\";\n\n const handleSave = () => {\n onSave({\n policyname: name,\n permissive: behavior,\n cmd: command,\n roles: roles,\n qual: usingExpr,\n with_check: showCheck ? checkExpr : null\n });\n };\n\n return (\n <>\n <DialogTitle className=\"flex justify-between items-center w-full\" variant=\"h6\">\n <div>\n <div>{policy ? t(\"studio_policy_edit\") : t(\"studio_policy_create\")}</div>\n <div className=\"text-sm font-normal text-text-secondary dark:text-text-secondary-dark tracking-wide mt-1\">\n {t(\"studio_policy_defining_rules\")} <span className=\"font-mono text-primary bg-primary-bg dark:bg-primary-bg-dark px-1 py-0.5 rounded\">{schema}.{table}</span>\n </div>\n </div>\n <IconButton size=\"small\" onClick={() => setHelpOpen(true)}>\n <HelpCircleIcon size={iconSize.smallest}/>\n </IconButton>\n </DialogTitle>\n\n <DialogContent className=\"p-4 md:p-6 border-t dark:border-surface-950 bg-surface-50 dark:bg-surface-950\" includeMargin={false}>\n <div className=\"max-w-4xl mx-auto\">\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-900 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n\n {/* Presets - only for new policies */}\n {!policy && (\n <div className=\"flex flex-col gap-1.5 bg-primary/5 dark:bg-primary-bg-dark/20 p-3 sm:p-4 rounded-lg border border-primary/10 dark:border-primary/20\">\n <Typography variant=\"caption\" className=\"text-primary dark:text-primary-light uppercase tracking-wider\">{t(\"studio_policy_template\")}</Typography>\n <Select\n size=\"small\"\n value={selectedPreset}\n onValueChange={handlePresetChange}\n position=\"item-aligned\"\n placeholder={t(\"studio_policy_select_template\")}\n className=\"bg-white dark:bg-surface-950\"\n >\n {POLICY_PRESETS.map((preset) => (\n <SelectItem key={preset.id} value={preset.id}>\n <div className=\"flex flex-col text-left\">\n <span className=\"text-sm\">{preset.label}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{preset.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 sm:gap-6\">\n {/* Policy Name */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_name\")}</Typography>\n <TextField\n // @ts-ignore\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t(\"studio_policy_name_placeholder\")}\n className=\"w-full\"\n />\n </div>\n\n {/* Behavior */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_behavior\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">AS</code>\n </Typography>\n <Select\n value={behavior}\n onValueChange={(val) => setBehavior(val as \"PERMISSIVE\" | \"RESTRICTIVE\")}\n position=\"item-aligned\"\n >\n <SelectItem value=\"PERMISSIVE\">\n <div className=\"flex flex-col text-left\">\n <span className=\"\">{t(\"studio_policy_permissive\")}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{t(\"studio_policy_permissive_desc\")}</span>\n </div>\n </SelectItem>\n <SelectItem value=\"RESTRICTIVE\">\n <div className=\"flex flex-col text-left\">\n <span className=\"\">{t(\"studio_policy_restrictive\")}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{t(\"studio_policy_restrictive_desc\")}</span>\n </div>\n </SelectItem>\n </Select>\n </div>\n </div>\n\n {/* Command */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_command\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">FOR</code>\n </Typography>\n <div className=\"flex flex-wrap gap-1.5\">\n {COMMAND_OPTIONS.map(cmd => (\n <Button\n key={cmd}\n size=\"small\"\n variant={command === cmd ? \"filled\" : \"text\"}\n color=\"neutral\"\n onClick={() => setCommand(cmd)}\n className=\"min-w-[80px]\"\n >\n {cmd}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Roles */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_target_roles\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">TO</code>\n </Typography>\n <MultiSelect\n size=\"small\"\n value={roles}\n onValueChange={setRoles}\n placeholder={t(\"studio_policy_roles_placeholder\")}\n >\n {ROLE_OPTIONS.map(role => (\n <MultiSelectItem key={role} value={role}>\n {role}\n </MultiSelectItem>\n ))}\n </MultiSelect>\n </div>\n\n </Paper>\n\n <div className=\"mt-8 flex flex-col gap-4\">\n {/* USING Expression */}\n {command !== \"INSERT\" && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-col gap-0.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_using_expr\")}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary opacity-70\">{t(\"studio_policy_using_expr_desc\")}</Typography>\n </div>\n <div className={cls(\"h-32 border rounded-md overflow-hidden bg-white dark:bg-[#1e1e1e]\", defaultBorderMixin)}>\n <MonacoEditor\n value={usingExpr}\n onChange={(v) => setUsingExpr(v || \"\")}\n readOnly={false}\n autoFocus={true}\n />\n </div>\n </div>\n )}\n\n {/* WITH CHECK Expression */}\n {showCheck && (\n <div className=\"flex flex-col gap-1.5 mt-2\">\n <div className=\"flex flex-col gap-0.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_check_expr\")}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary opacity-70\">{t(\"studio_policy_check_expr_desc\")}</Typography>\n </div>\n <div className={cls(\"h-32 border rounded-md overflow-hidden bg-white dark:bg-[#1e1e1e]\", defaultBorderMixin)}>\n <MonacoEditor\n value={checkExpr}\n onChange={(v) => setCheckExpr(v || \"\")}\n readOnly={false}\n autoFocus={command === \"INSERT\"}\n />\n </div>\n </div>\n )}\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions>\n <Button size=\"small\" variant=\"text\" color=\"neutral\" onClick={onCancel}>\n {t(\"studio_policy_cancel\")}\n </Button>\n <Button size=\"small\" variant=\"filled\" color=\"primary\" onClick={handleSave} disabled={!name}>\n {t(\"studio_policy_save\")}\n </Button>\n </DialogActions>\n\n <Dialog open={helpOpen} onOpenChange={setHelpOpen} maxWidth=\"3xl\">\n <DialogContent className=\"p-4 sm:p-6 lg:p-8 flex flex-col gap-6\">\n <div>\n <Typography variant=\"h5\" className=\"mb-2\">{t(\"studio_policy_help_title\")}</Typography>\n <Typography className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_intro\")}\n </Typography>\n </div>\n\n <div className=\"flex flex-col gap-4\">\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step1_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step1_desc\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step2_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step2_desc\")}\n </Typography>\n <ul className=\"list-disc pl-5 space-y-1 text-sm text-text-secondary dark:text-text-secondary-dark\">\n <li><strong>public</strong>: {t(\"studio_policy_help_role_public\")}</li>\n <li><strong>authenticated</strong>: {t(\"studio_policy_help_role_authenticated\")}</li>\n <li><strong>anon</strong>: {t(\"studio_policy_help_role_anon\")}</li>\n </ul>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step3_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step3_desc\")}\n </Typography>\n <div className={cls(\"bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2\", defaultBorderMixin)}>\n Example: auth.uid() = user_id\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step3_example\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step4_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step4_desc\")}\n </Typography>\n <div className={cls(\"bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2\", defaultBorderMixin)}>\n Example: auth.uid() = user_id\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step4_example\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-2 bg-primary/5 dark:bg-primary-bg-dark/10\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_auth_vars_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_auth_vars_desc\")}\n </Typography>\n <ul className=\"list-disc pl-5 space-y-2 text-sm text-text-secondary dark:text-text-secondary-dark font-normal\">\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.uid()</code>\n <span className=\"block mt-0.5\">Returns the current user's ID as text. Example: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">auth.uid() = user_id</code></span>\n </li>\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.jwt()</code>\n <span className=\"block mt-0.5\">Returns the full JWT payload as JSONB so you can check custom claims. Example: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">auth.jwt() ->> 'email' = 'admin@example.com'</code></span>\n </li>\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.roles()</code>\n <span className=\"block mt-0.5\">Returns the user's role IDs as a comma-separated string. Best used with: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">string_to_array(auth.roles(), ',') @> ARRAY['admin']</code></span>\n </li>\n </ul>\n </Paper>\n </div>\n\n <div className={cls(\"mt-2 flex flex-col sm:flex-row justify-between items-start sm:items-center bg-primary/5 dark:bg-primary-bg-dark/10 p-4 rounded-xl border border-primary/10 dark:border-primary/20\", defaultBorderMixin)}>\n <Typography variant=\"body2\" className=\"text-primary dark:text-primary-light mb-4 sm:mb-0 max-w-md\">\n {t(\"studio_policy_help_docs_cta\")}\n </Typography>\n <Button\n component=\"a\"\n href=\"https://www.postgresql.org/docs/current/sql-createpolicy.html\"\n target=\"_blank\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n className=\"whitespace-nowrap flex-shrink-0\"\n >\n {t(\"studio_policy_help_read_docs\")}\n </Button>\n </div>\n </DialogContent>\n <DialogActions className=\"p-4 sm:px-6 sm:pb-6 pt-0 border-t-0\">\n <Button onClick={() => setHelpOpen(false)} variant=\"filled\" color=\"primary\">{t(\"studio_policy_help_got_it\")}</Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","\nimport { useStudioCollectionRegistry } from \"@rebasepro/core\";\nimport React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { Paper, Typography, CircularProgress, cls, Alert, defaultBorderMixin, Card, Chip, Button, Tooltip, ResizablePanels, IconButton, Tabs, Tab , iconSize } from \"@rebasepro/ui\";\nimport { ShieldIcon, RefreshCwIcon, AlertTriangleIcon, KeyIcon, Trash2Icon } from \"lucide-react\";\nimport { useRebaseContext, useSnackbarController, ErrorView, useTranslation } from \"@rebasepro/core\";\nimport { isPostgresCollection } from \"@rebasepro/types\";\nimport { PolicyEditor } from \"./PolicyEditor\";\n\nexport interface PostgresPolicy {\n policyname: string;\n tablename: string;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n cmd: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\";\n qual: string | null; // USING clause\n with_check: string | null; // WITH CHECK clause\n status?: \"live\" | \"code_only\" | \"both\";\n}\n\nexport interface TableRLSStatus {\n schemaName: string;\n tableName: string;\n rlsEnabled: boolean;\n policies: PostgresPolicy[];\n}\n\nexport const RLSEditor = ({ apiUrl = \"\" }: { apiUrl?: string }) => {\n const { databaseAdmin } = useRebaseContext();\n const snackbarController = useSnackbarController();\n const collectionRegistry = useStudioCollectionRegistry();\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [tables, setTables] = useState<TableRLSStatus[]>([]);\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState(0);\n\n const [editingPolicy, setEditingPolicy] = useState<PostgresPolicy | \"new\" | null>(null);\n\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_rls_editor_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 20;\n } catch (e) {\n return 20;\n }\n });\n\n const [expandedSchemas, setExpandedSchemas] = useState<Record<string, boolean>>({ public: true });\n\n // Sidebar tab: \"tables\" or \"info\"\n const [sidebarTab, setSidebarTab] = useState<\"tables\" | \"info\">(\"tables\");\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_rls_editor_sidebar_size\", sidebarSize.toString());\n } catch (e) { /* ignore */ }\n }, [sidebarSize]);\n\n const fetchRLSData = useCallback(async () => {\n if (!databaseAdmin?.executeSql) {\n setError(t(\"studio_sql_sql_not_supported\"));\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n // 1. Fetch tables and whether RLS is enabled\n const tablesSql = `\n SELECT \n schemaname, \n tablename, \n rowsecurity \n FROM pg_tables \n WHERE schemaname NOT IN ('information_schema', 'pg_catalog')\n ORDER BY schemaname, tablename;\n `;\n const tablesResult = await databaseAdmin!.executeSql!(tablesSql);\n\n // 2. Fetch all policies\n const policiesSql = `\n SELECT \n schemaname,\n tablename,\n policyname,\n permissive,\n roles,\n cmd,\n qual,\n with_check\n FROM pg_policies\n WHERE schemaname NOT IN ('information_schema', 'pg_catalog');\n `;\n const policiesResult = await databaseAdmin!.executeSql!(policiesSql);\n\n const extractRows = (result: unknown): Record<string, unknown>[] => {\n if (result && typeof result === \"object\" && \"rows\" in result && Array.isArray((result as { rows: Record<string, unknown>[] }).rows)) {\n return (result as { rows: Record<string, unknown>[] }).rows;\n }\n if (Array.isArray(result)) return result as Record<string, unknown>[];\n return [];\n };\n\n const tRows = extractRows(tablesResult);\n const pRows = extractRows(policiesResult);\n\n const tableMap: Record<string, TableRLSStatus> = {};\n\n tRows.forEach((tRow: Record<string, unknown>) => {\n const t = tRow as { schemaname?: string, SCHEMANAME?: string, tablename?: string, TABLENAME?: string, rowsecurity?: boolean, ROWSECURITY?: boolean };\n const schema = t.schemaname || t.SCHEMANAME || \"public\";\n const table = t.tablename || t.TABLENAME || \"\";\n const rlsEnabled = t.rowsecurity || t.ROWSECURITY || false;\n\n const key = `${schema}.${table}`;\n tableMap[key] = {\n schemaName: schema,\n tableName: table,\n rlsEnabled: rlsEnabled,\n policies: []\n };\n });\n\n pRows.forEach((pRow: Record<string, unknown>) => {\n const p = pRow as { schemaname?: string, SCHEMANAME?: string, tablename?: string, TABLENAME?: string, roles?: string | string[], ROLES?: string | string[], policyname?: string, POLICYNAME?: string, permissive?: \"PERMISSIVE\" | \"RESTRICTIVE\", PERMISSIVE?: \"PERMISSIVE\" | \"RESTRICTIVE\", cmd?: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\", CMD?: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\", qual?: string | null, QUAL?: string | null, with_check?: string | null, WITH_CHECK?: string | null };\n const schema = p.schemaname || p.SCHEMANAME || \"public\";\n const table = p.tablename || p.TABLENAME || \"\";\n const key = `${schema}.${table}`;\n\n if (tableMap[key]) {\n // Postgres roles come back as an array string like \"{public}\" or literal array\n let parsedRoles: string[] = [];\n const r = p.roles || p.ROLES;\n if (Array.isArray(r)) {\n parsedRoles = r;\n } else if (typeof r === \"string\") {\n parsedRoles = r.replace(/^{|}$/g, \"\").split(\",\").map(s => s.trim());\n }\n\n tableMap[key].policies.push({\n policyname: p.policyname || p.POLICYNAME || \"\",\n tablename: table,\n permissive: p.permissive || p.PERMISSIVE || \"PERMISSIVE\",\n roles: parsedRoles,\n cmd: p.cmd || p.CMD || \"ALL\",\n qual: p.qual || p.QUAL || null,\n with_check: p.with_check || p.WITH_CHECK || null\n });\n }\n });\n\n const sortedTables = Object.values(tableMap).sort((a, b) => a.tableName.localeCompare(b.tableName));\n setTables(sortedTables);\n\n if (sortedTables.length > 0 && !selectedTable) {\n setSelectedTable(`${sortedTables[0].schemaName}.${sortedTables[0].tableName}`);\n }\n\n } catch (e: unknown) {\n console.error(\"RLS fetch error:\", e);\n setError(\"Failed to fetch RLS policies: \" + (e instanceof Error ? e.message : String(e)));\n } finally {\n setIsLoading(false);\n }\n }, [databaseAdmin, selectedTable]);\n\n useEffect(() => {\n setEditingPolicy(null);\n }, [selectedTable]);\n\n useEffect(() => {\n fetchRLSData();\n }, [fetchRLSData]);\n\n const activeTableData = useMemo(() => {\n if (!selectedTable) return null;\n return tables.find(t => `${t.schemaName}.${t.tableName}` === selectedTable) || null;\n }, [selectedTable, tables]);\n\n const groupedTables = useMemo(() => {\n const groups: Record<string, TableRLSStatus[]> = {};\n tables.forEach(table => {\n if (!groups[table.schemaName]) {\n groups[table.schemaName] = [];\n }\n groups[table.schemaName].push(table);\n });\n return groups;\n }, [tables]);\n\n const activeCollection = useMemo(() => {\n if (!activeTableData) return null;\n return collectionRegistry.collections?.find((c: { id?: string, path?: string, table?: string, slug?: string, collectionId?: string }) =>\n c.id === activeTableData.tableName ||\n c.path === activeTableData.tableName ||\n c.table === activeTableData.tableName ||\n c.slug === activeTableData.tableName ||\n c.collectionId === activeTableData.tableName\n ) || null;\n }, [activeTableData, collectionRegistry.collections]);\n\n const mergedPolicies = useMemo(() => {\n if (!activeTableData) return [];\n\n const policiesMap: Record<string, PostgresPolicy> = {};\n\n // Load live policies\n (activeTableData.policies || []).forEach(p => {\n policiesMap[p.policyname] = { ...p,\nstatus: \"live\" };\n });\n\n // Merge code-based policies\n if (activeCollection && isPostgresCollection(activeCollection) && activeCollection.securityRules) {\n activeCollection.securityRules.forEach((rule: { name?: string, mode?: string, operation?: string, roles?: string[], using?: string, withCheck?: string }) => {\n const ruleName = rule.name;\n if (!ruleName) return;\n\n if (policiesMap[ruleName]) {\n // It exists in Postgres, but we have a code definition (potentially edited)\n policiesMap[ruleName] = {\n policyname: ruleName,\n tablename: activeTableData.tableName,\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null,\n status: \"both\"\n };\n } else {\n policiesMap[ruleName] = {\n policyname: ruleName,\n tablename: activeTableData.tableName,\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null,\n status: \"code_only\"\n };\n }\n });\n }\n\n return Object.values(policiesMap).sort((a, b) => a.policyname.localeCompare(b.policyname));\n }, [activeTableData, activeCollection]);\n\n // Stats for the info tab\n const rlsStats = useMemo(() => {\n const total = tables.length;\n const enabled = tables.filter(t => t.rlsEnabled).length;\n const withPolicies = tables.filter(t => t.policies.length > 0).length;\n const totalPolicies = tables.reduce((sum, t) => sum + t.policies.length, 0);\n return { total,\nenabled,\nwithPolicies,\ntotalPolicies };\n }, [tables]);\n\n const renderPolicyTag = (label: string, value: string) => {\n return (\n <div className=\"flex items-center gap-1.5 px-2 py-1 rounded-md bg-surface-100 dark:bg-surface-950 border border-surface-200 dark:border-surface-700/50\">\n <span className=\"text-[10px] uppercase text-text-secondary dark:text-text-secondary-dark font-medium tracking-wider\">\n {label}:\n </span>\n <span className=\"font-mono text-xs text-text-primary dark:text-text-primary-dark break-all\">\n {value}\n </span>\n </div>\n );\n };\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={220}\n firstPanel={\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <Tabs value={sidebarTab} onValueChange={(v) => setSidebarTab(v as \"tables\" | \"info\")} variant=\"boxy\" className=\"border-b border-surface-200 dark:border-surface-950\">\n <Tab value=\"tables\">Tables</Tab>\n <Tab value=\"info\">Info</Tab>\n </Tabs>\n\n <div className=\"flex-grow overflow-hidden relative\">\n {sidebarTab === \"tables\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n {t(\"studio_schema_tables\")}\n </Typography>\n <IconButton size=\"small\" onClick={fetchRLSData} title=\"Refresh\">\n <RefreshCwIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n <div className=\"flex-grow overflow-y-auto no-scrollbar p-1\">\n {isLoading && tables.length === 0 ? (\n <div className=\"flex justify-center p-4\"><CircularProgress size=\"small\"/></div>\n ) : Object.keys(groupedTables).length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark italic\">{t(\"studio_rls_no_tables\")}</Typography>\n </div>\n ) : (\n Object.entries(groupedTables).map(([schemaName, schemaTables]) => (\n <div key={schemaName} className=\"mb-2\">\n <div\n className=\"flex items-center p-1 cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-950 rounded transition-colors\"\n onClick={() => setExpandedSchemas(prev => ({ ...prev,\n[schemaName]: !prev[schemaName] }))}\n >\n <svg className={cls(\"w-3 h-3 mr-1 transition-transform\", expandedSchemas[schemaName] ? \"rotate-90\" : \"\")} fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/></svg>\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-xs truncate flex-grow\">{schemaName}</Typography>\n </div>\n\n {expandedSchemas[schemaName] && (\n <div className=\"ml-3 mt-1 space-y-0.5\">\n {schemaTables.map(table => {\n const key = `${table.schemaName}.${table.tableName}`;\n const isSelected = selectedTable === key;\n return (\n <div\n key={key}\n onClick={() => setSelectedTable(key)}\n className={cls(\n \"flex items-center p-1 cursor-pointer rounded transition-colors group relative\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-secondary dark:text-text-secondary-dark\"\n )}\n >\n <svg className=\"w-3.5 h-3.5 mr-1 shrink-0 text-text-disabled dark:text-text-disabled-dark\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/></svg>\n <Typography variant=\"body2\" className=\"text-xs truncate flex-1 min-w-0\">{table.tableName}</Typography>\n <div className=\"flex items-center gap-1.5 shrink-0 ml-2\">\n {table.rlsEnabled ? (\n <Tooltip title={t(\"studio_rls_enabled\")}>\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n </Tooltip>\n ) : (\n <Tooltip title={t(\"studio_rls_disabled\")}>\n <div className=\"w-1.5 h-1.5 rounded-full bg-orange-400 opacity-50\"/>\n </Tooltip>\n )}\n <span className=\"text-[10px] opacity-40 group-hover:opacity-100 min-w-[1.2rem] text-right font-medium\">\n {table.policies.length}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n\n {sidebarTab === \"info\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n Overview\n </Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-3 space-y-3 no-scrollbar\">\n <div className={cls(\"p-3 rounded-lg border bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-2 mb-2\">\n <ShieldIcon size={iconSize.smallest} className=\"text-primary\"/>\n <Typography variant=\"body2\" className=\"font-semibold text-[13px]\">RLS Studio</Typography>\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px] leading-relaxed block\">\n Manage Row Level Security policies for your PostgreSQL tables. Enable RLS and create fine-grained access policies.\n </Typography>\n </div>\n\n <div className=\"space-y-2\">\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Total tables</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.total}</Typography>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">RLS enabled</Typography>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.enabled}</Typography>\n </div>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Tables with policies</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.withPolicies}</Typography>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Total policies</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.totalPolicies}</Typography>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n }\n secondPanel={\n <div className=\"flex-grow flex flex-col min-w-0 h-full w-full bg-white dark:bg-surface-950\">\n {/* Toolbar Header matching SQL/JS Editor style */}\n <div className={cls(\"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950 min-h-[46px]\", defaultBorderMixin)}>\n <div className=\"flex items-center flex-grow overflow-hidden px-4\">\n <Typography variant=\"subtitle2\" className=\"font-mono text-text-secondary dark:text-text-secondary-dark truncate\">\n {activeTableData ? `${activeTableData.schemaName}.${activeTableData.tableName}` : t(\"studio_rls_select_table\")}\n </Typography>\n {activeTableData && (\n <div className=\"ml-3\">\n {activeTableData.rlsEnabled ? (\n <Chip size=\"smallest\" className=\"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400 border-green-200 dark:border-green-800\">{t(\"studio_rls_enabled\")}</Chip>\n ) : (\n <Chip size=\"smallest\" className=\"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400 border-yellow-200 dark:border-yellow-800\">{t(\"studio_rls_disabled\")}</Chip>\n )}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center justify-end gap-1.5\">\n {activeTableData && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={async () => {\n const table = activeTableData.tableName;\n const action = activeTableData.rlsEnabled ? \"DISABLE\" : \"ENABLE\";\n if (!confirm(`Are you sure you want to ${action.toLowerCase()} Row Level Security on \"${table}\"?`)) return;\n try {\n await databaseAdmin!.executeSql!(`ALTER TABLE \"${table}\" ${action} ROW LEVEL SECURITY`);\n snackbarController.open({ type: \"success\",\nmessage: `RLS ${action.toLowerCase()}d on ${table}` });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n {activeTableData.rlsEnabled ? t(\"studio_rls_disable_rls\") : t(\"studio_rls_enable_rls\")}\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"/>\n\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={fetchRLSData}\n startIcon={<RefreshCwIcon size={iconSize.smallest}/>}\n >\n Refresh\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"/>\n\n <Button\n size=\"small\"\n color=\"primary\"\n disabled={!activeCollection}\n onClick={() => setEditingPolicy(\"new\")}\n >\n {t(\"studio_rls_create_policy\")}\n </Button>\n </>\n )}\n </div>\n </div>\n\n {error ? (\n <div className=\"p-6 h-full flex items-center justify-center\">\n <ErrorView title={t(\"studio_rls_error\")} error={error} onRetry={fetchRLSData}/>\n </div>\n ) : !activeTableData ? (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled h-full\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-4 opacity-50\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\"/></svg>\n <Typography variant=\"body2\">{t(\"studio_rls_select_table\")}</Typography>\n </div>\n </div>\n ) : editingPolicy ? (\n <PolicyEditor\n policy={editingPolicy === \"new\" ? undefined : editingPolicy}\n schema={activeTableData.schemaName}\n table={activeTableData.tableName}\n onSave={async (newPolicy) => {\n if (!activeCollection) return;\n const rule: Record<string, unknown> = {\n name: newPolicy.policyname,\n operation: newPolicy.cmd?.toLowerCase(),\n mode: newPolicy.permissive?.toLowerCase(),\n using: newPolicy.qual || undefined,\n withCheck: newPolicy.with_check || undefined,\n roles: newPolicy.roles\n };\n\n const existingRules = (isPostgresCollection(activeCollection) ? activeCollection.securityRules : undefined) || [];\n let newRules;\n if (editingPolicy === \"new\") {\n newRules = [...existingRules, rule];\n } else {\n newRules = existingRules.map((r: { name?: string }) => r.name === editingPolicy.policyname ? rule : r);\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/schema-editor/collection/save`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n collectionId: (activeCollection as { id?: string, path?: string, alias?: string }).id || (activeCollection as { id?: string, path?: string, alias?: string }).path || (activeCollection as { id?: string, path?: string, alias?: string }).alias || activeTableData.tableName,\n collectionData: { securityRules: newRules }\n })\n });\n if (!response.ok) throw new Error(\"Failed to save policy\");\n\n snackbarController.open({ type: \"success\",\nmessage: \"Policy saved successfully\" });\n setEditingPolicy(null);\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n onCancel={() => setEditingPolicy(null)}\n />\n ) : (\n <div className=\"flex-grow flex flex-col overflow-hidden\">\n <div className=\"p-6 pt-4 flex-grow overflow-auto bg-surface-50 dark:bg-surface-900\">\n <div className=\"max-w-4xl mx-auto flex flex-col gap-6\">\n {activeTableData && !activeCollection && (\n <Alert\n color=\"warning\"\n >\n <Typography variant=\"body2\" className=\"mb-1\">\n Table not managed by Rebase\n </Typography>\n <Typography variant=\"caption\" className=\"opacity-80\">\n This table is not mapped to a Rebase Schema via code. To edit security policies visually, you must first import this table into a Schema configuration file.\n </Typography>\n </Alert>\n )}\n\n {activeTableData && !activeTableData.rlsEnabled && (\n <div className={cls(\"p-4 sm:p-5 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-900/50 rounded-lg flex flex-col sm:flex-row gap-4 items-start sm:items-center justify-between\", defaultBorderMixin)}>\n <div className=\"flex gap-3 items-start\">\n <div className=\"mt-1 bg-yellow-100 dark:bg-yellow-900/50 p-1.5 rounded-md shrink-0 flex items-center justify-center\">\n <AlertTriangleIcon size={iconSize.smallest}/>\n </div>\n <div>\n <Typography variant=\"subtitle2\" className=\"text-yellow-800 dark:text-yellow-500\">\n Row Level Security (RLS) is disabled\n </Typography>\n <Typography variant=\"body2\" className=\"text-yellow-700 dark:text-yellow-600/90 mt-1 max-w-2xl\">\n Your table is completely readable and writable by anyone with access privileges. Enable RLS to create policies that restrict access to specific rows.\n </Typography>\n </div>\n </div>\n <Button\n size=\"medium\"\n variant=\"filled\"\n color=\"neutral\"\n onClick={() => setEditingPolicy(\"new\")}\n className=\"shrink-0 whitespace-nowrap\"\n disabled={!activeCollection}\n >\n {t(\"studio_rls_create_policy\")}\n </Button>\n </div>\n )}\n\n {activeTableData && mergedPolicies && mergedPolicies.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n <Typography variant=\"subtitle2\" className=\"text-text-secondary dark:text-text-secondary-dark uppercase tracking-wider mb-1\">{t(\"studio_rls_policies\")}</Typography>\n {mergedPolicies.map(policy => (\n <Paper key={policy.policyname} className={cls(\"p-3 sm:px-4 sm:py-3 flex flex-col sm:flex-row sm:items-center justify-between gap-4 border rounded-lg\", defaultBorderMixin)}>\n <div className=\"flex flex-col gap-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-text-secondary dark:text-text-secondary-dark shrink-0\"/>\n <Typography variant=\"body2\" className=\"truncate\">{policy.policyname}</Typography>\n {policy.status === \"code_only\" && (\n <Tooltip title=\"This policy is defined in your code but hasn't been applied to the database yet.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-primary/10 text-primary border border-primary/20 shrink-0\">\n Unapplied\n </div>\n </Tooltip>\n )}\n {policy.status === \"live\" && (\n <Tooltip title=\"This policy is live in the database but missing from your codebase schema.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-orange-500/10 text-orange-600 border border-orange-500/20 shrink-0\">\n DB Only\n </div>\n </Tooltip>\n )}\n </div>\n <div className=\"flex flex-wrap gap-1.5 text-sm\">\n {renderPolicyTag(\"Action\", policy.cmd)}\n {renderPolicyTag(\"Roles\", Array.isArray(policy.roles) ? policy.roles.join(\", \") : policy.roles)}\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0 items-center\">\n {policy.status === \"live\" && activeCollection && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={async () => {\n const rule: Record<string, unknown> = {\n name: policy.policyname,\n operation: policy.cmd?.toLowerCase(),\n mode: policy.permissive?.toLowerCase(),\n using: policy.qual || undefined,\n withCheck: policy.with_check || undefined,\n roles: policy.roles\n };\n\n const existingRules = (isPostgresCollection(activeCollection) ? activeCollection.securityRules : undefined) || [];\n const newRules = [...existingRules, rule];\n\n try {\n const response = await fetch(`${apiUrl}/api/schema-editor/collection/save`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n collectionId: (activeCollection as { id?: string, path?: string, alias?: string }).id || (activeCollection as { id?: string, path?: string, alias?: string }).path || (activeCollection as { id?: string, path?: string, alias?: string }).alias || activeTableData!.tableName,\n collectionData: { securityRules: newRules }\n })\n });\n if (!response.ok) throw new Error(\"Failed to save policy\");\n\n snackbarController.open({ type: \"success\",\nmessage: \"Policy imported successfully\" });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n Import to codebase\n </Button>\n )}\n <Button size=\"small\" variant=\"text\" color=\"primary\" onClick={() => setEditingPolicy(policy)} disabled={!activeCollection}>\n {t(\"studio_rls_edit\")}\n </Button>\n {policy.status !== \"code_only\" && (\n <Tooltip title={t(\"studio_rls_delete\")} asChild={true}>\n <IconButton\n size=\"small\"\n onClick={async () => {\n const table = activeTableData!.tableName;\n if (!confirm(`Drop policy \"${policy.policyname}\" from table \"${table}\"?`)) return;\n try {\n await databaseAdmin!.executeSql!(`DROP POLICY \"${policy.policyname}\" ON \"${table}\"`);\n snackbarController.open({ type: \"success\",\nmessage: `Policy \"${policy.policyname}\" dropped` });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n )}\n </div>\n </Paper>\n ))}\n </div>\n )}\n\n </div>\n </div>\n </div>\n )}\n </div>\n }\n />\n </div>\n );\n};\n"],"names":["COMMAND_OPTIONS","ROLE_OPTIONS","POLICY_PRESETS","id","label","description","policyname","cmd","permissive","roles","qual","with_check","PolicyEditor","t0","$","_c","policy","schema","table","onSave","onCancel","t","useTranslation","name","setName","useState","helpOpen","setHelpOpen","behavior","setBehavior","command","setCommand","t1","Symbol","for","setRoles","usingExpr","setUsingExpr","checkExpr","setCheckExpr","selectedPreset","setSelectedPreset","t2","t3","initialRoles","Array","isArray","useEffect","t4","presetId","preset","find","p","handlePresetChange","showCheck","t5","handleSave","t6","t7","t8","t9","t10","t11","t12","iconSize","smallest","t13","t14","cls","defaultBorderMixin","t15","map","_temp","t16","t17","t18","e","target","value","t19","t20","t21","t22","t23","t24","t25","val","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","_temp2","t50","t51","t52","t53","v","t54","v_0","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","t65","t66","t67","t68","t69","t70","t71","t72","t73","t74","t75","t76","t77","t78","t79","t80","t81","t82","t83","t84","t85","t86","t87","t88","t89","t90","t91","t92","t93","t94","t95","t96","t97","t98","t99","t100","t101","t102","t103","t104","t105","t106","t107","t108","t109","t110","t111","t112","t113","t114","t115","t116","t117","t118","t119","t120","t121","t122","t123","t124","t125","t126","t127","t128","t129","t130","t131","t132","preset_0","role","RLSEditor","apiUrl","databaseAdmin","useRebaseContext","snackbarController","useSnackbarController","collectionRegistry","useStudioCollectionRegistry","isLoading","setIsLoading","error","setError","tables","setTables","selectedTable","setSelectedTable","activeTab","setActiveTab","editingPolicy","setEditingPolicy","sidebarSize","setSidebarSize","saved","localStorage","getItem","parseFloat","expandedSchemas","setExpandedSchemas","public","sidebarTab","setSidebarTab","setItem","toString","fetchRLSData","useCallback","executeSql","tablesSql","tablesResult","policiesSql","policiesResult","extractRows","result","rows","tRows","pRows","tableMap","forEach","tRow","schemaname","SCHEMANAME","tablename","TABLENAME","rlsEnabled","rowsecurity","ROWSECURITY","key","schemaName","tableName","policies","pRow","parsedRoles","r","ROLES","replace","split","s","trim","push","POLICYNAME","PERMISSIVE","CMD","QUAL","WITH_CHECK","sortedTables","Object","values","sort","a","b","localeCompare","length","console","Error","message","String","activeTableData","useMemo","groupedTables","groups","activeCollection","collections","c","path","slug","collectionId","mergedPolicies","policiesMap","status","isPostgresCollection","securityRules","rule","ruleName","mode","toUpperCase","operation","using","withCheck","rlsStats","total","enabled","filter","withPolicies","totalPolicies","reduce","sum","renderPolicyTag","keys","entries","schemaTables","prev","isSelected","action","confirm","toLowerCase","open","type","undefined","newPolicy","existingRules","newRules","response","fetch","method","headers","body","JSON","stringify","alias","collectionData","ok","join"],"mappings":"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"}
|