@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":"ApiExplorer-gMJt5JrS.js","sources":["../src/components/ApiExplorer/parseSpec.ts","../src/components/ApiExplorer/EndpointDetail.tsx","../src/components/ApiExplorer/TryItPanel.tsx","../src/components/ApiExplorer/ApiExplorer.tsx"],"sourcesContent":["import type { OpenApiSpec, ParsedEndpoint, EndpointGroup } from \"./types\";\n\n/**\n * Parse an OpenAPI 3.x spec into grouped, sorted endpoints for the sidebar.\n */\nexport function parseOpenApiSpec(spec: OpenApiSpec): {\n groups: EndpointGroup[];\n allEndpoints: ParsedEndpoint[];\n} {\n const allEndpoints: ParsedEndpoint[] = [];\n const tagMap = new Map<string, ParsedEndpoint[]>();\n\n // Build tag description lookup\n const tagDescriptions = new Map<string, string>();\n for (const t of spec.tags ?? []) {\n tagDescriptions.set(t.name, t.description ?? \"\");\n }\n\n for (const [path, methods] of Object.entries(spec.paths ?? {})) {\n for (const [method, op] of Object.entries(methods)) {\n if ([\"get\", \"post\", \"put\", \"patch\", \"delete\"].indexOf(method) === -1) continue;\n\n const tags = op.tags?.length ? op.tags : [\"Other\"];\n const shortPath = path.replace(/^\\/api\\/data/, \"\");\n\n const endpoint: ParsedEndpoint = {\n id: `${method}:${path}`,\n method,\n path,\n shortPath: shortPath || \"/\",\n summary: op.summary ?? \"\",\n description: op.description ?? \"\",\n tags,\n parameters: op.parameters ?? [],\n requestBody: op.requestBody,\n responses: op.responses ?? {},\n security: op.security,\n operationId: op.operationId\n };\n\n allEndpoints.push(endpoint);\n for (const tag of tags) {\n if (!tagMap.has(tag)) tagMap.set(tag, []);\n tagMap.get(tag)!.push(endpoint);\n }\n }\n }\n\n // Method sort order\n const ORDER: Record<string, number> = { get: 0,\npost: 1,\nput: 2,\npatch: 3,\ndelete: 4 };\n\n const groups: EndpointGroup[] = [];\n // Sort tags: use spec.tags order if available, else alphabetical\n const tagOrder = (spec.tags ?? []).map((t) => t.name);\n const sortedTags = [...tagMap.keys()].sort((a, b) => {\n const ai = tagOrder.indexOf(a);\n const bi = tagOrder.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n });\n\n for (const tag of sortedTags) {\n const endpoints = tagMap.get(tag)!;\n endpoints.sort((a, b) => {\n const pa = a.path.localeCompare(b.path);\n if (pa !== 0) return pa;\n return (ORDER[a.method] ?? 99) - (ORDER[b.method] ?? 99);\n });\n groups.push({\n tag,\n description: tagDescriptions.get(tag),\n endpoints\n });\n }\n\n return { groups,\nallEndpoints };\n}\n\n/**\n * Resolve a $ref string (e.g. \"#/components/schemas/Author\") to a schema name.\n */\nexport function resolveRefName(ref: string): string {\n const parts = ref.split(\"/\");\n return parts[parts.length - 1];\n}\n\n/**\n * Resolve a $ref to its actual schema from the spec.\n */\nexport function resolveRef(spec: OpenApiSpec, ref: string): any {\n const parts = ref.replace(\"#/\", \"\").split(\"/\");\n let current: any = spec;\n for (const part of parts) {\n current = current?.[part];\n }\n return current ?? {};\n}\n","import React from \"react\";\nimport { Typography, Chip, cls, defaultBorderMixin, iconSize } from \"@rebasepro/ui\";\nimport { SlidersHorizontalIcon, UploadIcon, ArrowRightFromLineIcon } from \"lucide-react\";\nimport type { ParsedEndpoint, OpenApiSpec, OpenApiSchema } from \"./types\";\nimport { resolveRef, resolveRefName } from \"./parseSpec\";\n\n/**\n * Renders the documentation view for a single API endpoint:\n * parameters, request body schema, response schemas.\n */\nexport function EndpointDetail({ endpoint, spec }: { endpoint: ParsedEndpoint; spec: OpenApiSpec }) {\n return (\n <div className=\"p-6 space-y-8 max-w-4xl\">\n {/* Summary / Description */}\n {(endpoint.summary || endpoint.description) && (\n <div>\n {endpoint.summary && (\n <Typography variant=\"h6\" className=\"font-semibold mb-1\">\n {endpoint.summary}\n </Typography>\n )}\n {endpoint.description && (\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {endpoint.description}\n </Typography>\n )}\n </div>\n )}\n\n {/* Parameters */}\n {endpoint.parameters.length > 0 && (\n <section>\n <SectionHeading icon={<SlidersHorizontalIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Parameters\"/>\n <div className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"bg-surface-100 dark:bg-surface-900 text-left\">\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Name\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n In\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Type\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Description\n </th>\n </tr>\n </thead>\n <tbody>\n {endpoint.parameters.map((p, i) => (\n <tr\n key={p.name + i}\n className={cls(\"border-t\", defaultBorderMixin)}\n >\n <td className=\"px-4 py-2.5\">\n <code className=\"text-xs font-mono font-semibold\">{p.name}</code>\n {p.required && <span className=\"text-red-500 ml-1 text-xs\">*</span>}\n </td>\n <td className=\"px-4 py-2.5\">\n <Chip\n size=\"smallest\"\n colorScheme={p.in === \"path\" ? \"orangeDarker\" : \"cyanDarker\"}\n >\n {p.in}\n </Chip>\n </td>\n <td className=\"px-4 py-2.5 text-xs font-mono text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(p.schema)}\n </td>\n <td className=\"px-4 py-2.5 text-xs text-text-secondary dark:text-text-secondary-dark\">\n {p.description ?? \"—\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n )}\n\n {/* Request Body */}\n {endpoint.requestBody && (\n <section>\n <SectionHeading icon={<UploadIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Request Body\"/>\n {Object.entries(endpoint.requestBody.content ?? {}).map(([contentType, media]) => (\n <div key={contentType}>\n <Chip size=\"smallest\" colorScheme=\"blueDarker\" className=\"mb-3\">\n {contentType}\n </Chip>\n {media.schema && <SchemaBlock schema={media.schema} spec={spec} depth={0}/>}\n </div>\n ))}\n </section>\n )}\n\n {/* Responses */}\n <section>\n <SectionHeading icon={<ArrowRightFromLineIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Responses\"/>\n <div className=\"space-y-3\">\n {Object.entries(endpoint.responses).map(([code, res]) => (\n <div\n key={code}\n className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}\n >\n <div\n className={cls(\n \"flex items-center gap-3 px-4 py-2.5\",\n \"bg-surface-50 dark:bg-surface-900/50\"\n )}\n >\n <StatusBadge code={code}/>\n <Typography\n variant=\"body2\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs\"\n >\n {res.description}\n </Typography>\n </div>\n {res.content &&\n Object.entries(res.content).map(\n ([ct, media]) =>\n media.schema && (\n <div\n key={ct}\n className={cls(\"px-4 py-3 border-t\", defaultBorderMixin)}\n >\n <SchemaBlock schema={media.schema} spec={spec} depth={0}/>\n </div>\n )\n )}\n </div>\n ))}\n </div>\n </section>\n </div>\n );\n}\n\n/* ── Schema Block ─────────────────────────────────────────────────── */\n\nfunction SchemaBlock({ schema, spec, depth }: { schema: OpenApiSchema; spec: OpenApiSpec; depth: number }) {\n // Resolve $ref\n if (schema.$ref) {\n const name = resolveRefName(schema.$ref);\n const resolved = resolveRef(spec, schema.$ref);\n return (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-primary dark:text-primary-dark font-mono text-xs mb-2 block\"\n >\n {name}\n </Typography>\n <SchemaBlock schema={resolved} spec={spec} depth={depth}/>\n </div>\n );\n }\n\n // Object with properties\n if (schema.properties) {\n const required = new Set(schema.required ?? []);\n return (\n <div\n className={cls(\n \"rounded-lg overflow-hidden\",\n depth > 0 && `border ml-4 mt-1 ${defaultBorderMixin}`\n )}\n >\n <table className=\"w-full text-xs\">\n <tbody>\n {Object.entries(schema.properties).map(([key, prop]) => (\n <tr\n key={key}\n className={cls(\"border-t first:border-t-0\", defaultBorderMixin)}\n >\n <td className=\"px-3 py-2 align-top w-36\">\n <code className=\"font-mono font-semibold text-text-primary dark:text-text-primary-dark\">\n {key}\n </code>\n {required.has(key) && <span className=\"text-red-500 ml-0.5\">*</span>}\n {prop.readOnly && (\n <span className=\"ml-1.5 text-[9px] text-text-secondary dark:text-text-secondary-dark italic\">\n read-only\n </span>\n )}\n </td>\n <td className=\"px-3 py-2 align-top w-28\">\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(prop)}\n </span>\n </td>\n <td className=\"px-3 py-2 align-top text-text-secondary dark:text-text-secondary-dark\">\n {prop.description ?? \"\"}\n {prop.enum && (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {prop.enum.map((v) => (\n <span\n key={String(v)}\n className=\"px-1.5 py-0.5 rounded bg-surface-200 dark:bg-surface-800 text-[10px] font-mono\"\n >\n {String(v)}\n </span>\n ))}\n </div>\n )}\n {prop.properties && <SchemaBlock schema={prop} spec={spec} depth={depth + 1}/>}\n {prop.$ref && <SchemaBlock schema={prop} spec={spec} depth={depth + 1}/>}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n }\n\n // Array\n if (schema.type === \"array\" && schema.items) {\n return (\n <div>\n <span className=\"font-mono text-xs text-text-secondary dark:text-text-secondary-dark\">Array of:</span>\n <SchemaBlock schema={schema.items} spec={spec} depth={depth + 1}/>\n </div>\n );\n }\n\n // Primitive\n return (\n <span className=\"font-mono text-xs text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(schema)}\n </span>\n );\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────── */\n\nfunction schemaTypeLabel(schema?: OpenApiSchema): string {\n if (!schema) return \"any\";\n if (schema.$ref) return resolveRefName(schema.$ref);\n if (schema.type === \"array\") return `${schemaTypeLabel(schema.items)}[]`;\n if (schema.format) return `${schema.type} (${schema.format})`;\n return schema.type ?? \"object\";\n}\n\nfunction SectionHeading({ icon, title }: { icon: React.ReactNode; title: string }) {\n return (\n <div className=\"flex items-center gap-2 mb-3\">\n {icon}\n <Typography variant=\"subtitle2\" className=\"font-semibold text-sm\">\n {title}\n </Typography>\n </div>\n );\n}\n\nfunction StatusBadge({ code }: { code: string }) {\n const n = parseInt(code, 10);\n const color =\n n < 300\n ? \"text-emerald-600 dark:text-emerald-400\"\n : n < 400\n ? \"text-blue-600 dark:text-blue-400\"\n : n < 500\n ? \"text-amber-600 dark:text-amber-400\"\n : \"text-red-600 dark:text-red-400\";\n\n return <span className={cls(\"text-xs font-bold font-mono\", color)}>{code}</span>;\n}\n","import React, { useState, useCallback, useMemo, useEffect } from \"react\";\nimport { Typography, Button, cls, defaultBorderMixin, iconSize } from \"@rebasepro/ui\";\nimport { LoaderIcon, SendIcon, PlusIcon, XIcon } from \"lucide-react\";\nimport { useRebaseContext, UserSelectPopover, SelectableUser } from \"@rebasepro/core\";\nimport { AuthSimulationSelector } from \"../AuthSimulationSelector\";\nimport type { ParsedEndpoint } from \"./types\";\nimport type { User } from \"@rebasepro/types\";\n\ninterface TryItPanelProps {\n endpoint: ParsedEndpoint;\n apiUrl: string;\n getAuthToken: () => Promise<string | null | undefined>;\n user: User | null;\n basePath?: string;\n}\n\n/**\n * Interactive \"Try It\" panel that lets the user execute API requests\n * using their current JWT token directly from the Studio.\n */\nexport function TryItPanel({ endpoint, apiUrl, getAuthToken, user, basePath = \"\" }: TryItPanelProps) {\n const storageKey = `rebase_apiexplorer_${endpoint.method}_${endpoint.path}`;\n\n const [pathParams, setPathParams] = useState<Record<string, string>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_path`); if (v) return JSON.parse(v); } catch {}\n return {};\n });\n const [queryParams, setQueryParams] = useState<Record<string, string>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_query`); if (v) return JSON.parse(v); } catch {}\n return {};\n });\n const [customHeaders, setCustomHeaders] = useState<Array<{ key: string; value: string }>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_headers`); if (v) return JSON.parse(v); } catch {}\n return [{ key: \"rebase-branch\", value: \"\" }];\n });\n const [body, setBody] = useState(() => {\n try { const v = localStorage.getItem(`${storageKey}_body`); if (v) return JSON.parse(v); } catch {}\n return buildBodyTemplate(endpoint);\n });\n const [response, setResponse] = useState<{ status: number; statusText: string; body: string; time: number } | null>(\n null\n );\n const [loading, setLoading] = useState(false);\n const [authMode, setAuthMode] = useState<\"jwt\" | \"none\">(\"jwt\");\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const rebaseContext = useRebaseContext();\n const userManagement = rebaseContext.userManagement;\n const currentUser = rebaseContext.authController?.user;\n\n const users = useMemo((): SelectableUser[] => {\n const managed = (userManagement?.users ?? []).map(u => ({\n uid: u.uid,\n displayName: u.displayName,\n email: u.email,\n photoURL: u.photoURL,\n roles: u.roles\n }));\n if (currentUser && !managed.some(u => u.uid === currentUser.uid)) {\n managed.unshift({\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n });\n }\n return managed;\n }, [userManagement?.users, currentUser]);\n\n const currentSelectableUser = useMemo((): SelectableUser | null => {\n if (!currentUser) return null;\n return {\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n };\n }, [currentUser]);\n\n const [selectedUser, setSelectedUser] = useState<SelectableUser | null>(null);\n\n useEffect(() => {\n localStorage.setItem(`${storageKey}_path`, JSON.stringify(pathParams));\n localStorage.setItem(`${storageKey}_query`, JSON.stringify(queryParams));\n localStorage.setItem(`${storageKey}_headers`, JSON.stringify(customHeaders));\n localStorage.setItem(`${storageKey}_body`, JSON.stringify(body));\n }, [storageKey, pathParams, queryParams, customHeaders, body]);\n\n // Build the final URL\n const resolvedUrl = useMemo(() => {\n const base = basePath.startsWith(\"/\") ? basePath : `/${basePath}`;\n const cleanBase = base === \"/\" ? \"\" : base;\n let url = `${apiUrl.replace(/\\/+$/, \"\")}${cleanBase}${endpoint.path}`;\n // Replace path params\n for (const [key, val] of Object.entries(pathParams)) {\n url = url.replace(`{${key}}`, encodeURIComponent(val));\n }\n // Append query params\n const qp = Object.entries(queryParams).filter(([, v]) => v.trim() !== \"\");\n if (qp.length > 0) {\n url += \"?\" + qp.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\");\n }\n return url;\n }, [apiUrl, basePath, endpoint.path, pathParams, queryParams]);\n\n const pathParamDefs = endpoint.parameters.filter((p) => p.in === \"path\");\n const queryParamDefs = endpoint.parameters.filter((p) => p.in === \"query\");\n const hasBody = [\"post\", \"put\", \"patch\"].includes(endpoint.method);\n\n const execute = useCallback(async () => {\n setValidationError(null);\n if (hasBody && body.trim()) {\n try {\n JSON.parse(body);\n } catch (err: any) {\n setValidationError(`Invalid JSON: ${err.message}`);\n return;\n }\n }\n\n setLoading(true);\n setResponse(null);\n const start = performance.now();\n\n try {\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n \n for (const h of customHeaders) {\n if (h.key.trim()) headers[h.key.trim()] = h.value;\n }\n\n if (authMode === \"jwt\") {\n const token = await getAuthToken();\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n if (selectedUser && selectedUser.uid !== currentUser?.uid) {\n headers[\"x-rebase-impersonate\"] = selectedUser.uid;\n }\n }\n\n const res = await fetch(resolvedUrl, {\n method: endpoint.method.toUpperCase(),\n headers,\n body: hasBody && body.trim() ? body : undefined\n });\n\n const elapsed = Math.round(performance.now() - start);\n let text: string;\n \n const rawText = await res.text();\n try {\n const json = JSON.parse(rawText);\n text = JSON.stringify(json, null, 2);\n } catch {\n text = rawText;\n }\n\n setResponse({ status: res.status,\nstatusText: res.statusText,\nbody: text,\ntime: elapsed });\n } catch (err: any) {\n setResponse({\n status: 0,\n statusText: \"Network Error\",\n body: err.message ?? \"Request failed\",\n time: Math.round(performance.now() - start)\n });\n } finally {\n setLoading(false);\n }\n }, [resolvedUrl, endpoint.method, hasBody, body, authMode, getAuthToken, customHeaders, selectedUser, currentUser?.uid]);\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"p-5 space-y-5 overflow-y-auto flex-1\">\n {/* Auth Mode */}\n <AuthSimulationSelector\n authMode={authMode}\n setAuthMode={setAuthMode}\n selectedUser={selectedUser}\n setSelectedUser={setSelectedUser}\n users={users}\n loading={userManagement?.loading}\n currentUser={currentSelectableUser}\n />\n\n {/* Path Params */}\n {pathParamDefs.length > 0 && (\n <ParamSection\n title=\"Path Parameters\"\n params={pathParamDefs}\n values={pathParams}\n onChange={(k, v) => setPathParams((prev) => ({ ...prev,\n[k]: v }))}\n />\n )}\n\n {/* Query Params */}\n {queryParamDefs.length > 0 && (\n <ParamSection\n title=\"Query Parameters\"\n params={queryParamDefs}\n values={queryParams}\n onChange={(k, v) => setQueryParams((prev) => ({ ...prev, [k]: v }))}\n />\n )}\n\n {/* Custom Headers */}\n <CustomKeyValueSection\n title=\"Custom Headers\"\n values={customHeaders}\n onChange={(i, k, v) => {\n const next = [...customHeaders];\n next[i] = { key: k, value: v };\n setCustomHeaders(next);\n }}\n onAdd={() => setCustomHeaders((prev) => [...prev, { key: \"\", value: \"\" }])}\n onRemove={(i) => {\n const next = [...customHeaders];\n next.splice(i, 1);\n setCustomHeaders(next);\n }}\n />\n\n {/* Request Body */}\n {hasBody && (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider mb-2 block\"\n >\n Request Body\n </Typography>\n <textarea\n value={body}\n onChange={(e) => { setBody(e.target.value); setValidationError(null); }}\n rows={10}\n spellCheck={false}\n className={cls(\n \"w-full font-mono text-xs p-3 rounded-lg resize-y\",\n \"bg-surface-50 dark:bg-surface-900\",\n validationError ? \"border-red-500 focus:ring-red-500/30\" : cls(\"border focus:ring-primary/30 dark:focus:ring-primary-dark/30\", defaultBorderMixin),\n \"text-text-primary dark:text-text-primary-dark\",\n \"focus:outline-none focus:ring-2\",\n \"transition-all\"\n )}\n />\n {validationError && (\n <Typography variant=\"caption\" className=\"text-red-500 mt-1 block text-xs\">\n {validationError}\n </Typography>\n )}\n </div>\n )}\n\n {/* URL Preview */}\n <div className=\"rounded-lg bg-surface-100 dark:bg-surface-900 p-3\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-[10px] uppercase tracking-wider block mb-1\"\n >\n Request URL\n </Typography>\n <code className=\"text-xs font-mono text-text-primary dark:text-text-primary-dark break-all\">\n {resolvedUrl}\n </code>\n </div>\n\n {/* Execute Button */}\n <Button variant=\"filled\" onClick={execute} disabled={loading} className=\"w-full\">\n {loading ? (\n <span className=\"flex items-center gap-2\">\n <LoaderIcon size={iconSize.small} className=\"animate-spin\" />\n Sending…\n </span>\n ) : (\n <span className=\"flex items-center gap-2\">\n <SendIcon size={iconSize.small} />\n Send Request\n </span>\n )}\n </Button>\n\n {/* Response */}\n {response && (\n <div className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}>\n <div\n className={cls(\n \"flex items-center justify-between px-4 py-2.5\",\n \"bg-surface-50 dark:bg-surface-900/50\"\n )}\n >\n <div className=\"flex items-center gap-3\">\n <ResponseBadge status={response.status}/>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs\"\n >\n {response.statusText}\n </Typography>\n </div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-mono\"\n >\n {response.time}ms\n </Typography>\n </div>\n <pre\n className={cls(\n \"p-4 text-xs font-mono overflow-auto max-h-96\",\n \"bg-surface-950 text-emerald-400\",\n \"dark:bg-surface-900 dark:text-emerald-400\"\n )}\n >\n {response.body}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Param Section ────────────────────────────────────────────────── */\n\nfunction ParamSection({\n title,\n params,\n values,\n onChange\n}: {\n title: string;\n params: ParsedEndpoint[\"parameters\"];\n values: Record<string, string>;\n onChange: (_key: string, _value: string) => void;\n}) {\n return (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider mb-2 block\"\n >\n {title}\n </Typography>\n <div className=\"space-y-2\">\n {params.map((p) => (\n <div key={p.name} className=\"flex items-center gap-3\">\n <label className=\"w-32 shrink-0\">\n <code className=\"text-xs font-mono font-semibold\">{p.name}</code>\n {p.required && <span className=\"text-red-500 ml-0.5 text-xs\">*</span>}\n </label>\n <input\n type=\"text\"\n placeholder={p.description ?? p.name}\n value={values[p.name] ?? \"\"}\n onChange={(e) => onChange(p.name, e.target.value)}\n className={cls(\n \"flex-1 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction CustomKeyValueSection({\n title,\n values,\n onChange,\n onAdd,\n onRemove\n}: {\n title: string;\n values: Array<{ key: string; value: string }>;\n onChange: (index: number, key: string, value: string) => void;\n onAdd: () => void;\n onRemove: (index: number) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider block\"\n >\n {title}\n </Typography>\n <button\n onClick={onAdd}\n className=\"text-xs text-primary dark:text-primary-dark hover:underline flex items-center gap-1 font-medium\"\n >\n <PlusIcon size={iconSize.small} className=\"mr-1\" /> Add Header\n </button>\n </div>\n <div className=\"space-y-2\">\n {values.map((v, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"Header name\"\n value={v.key}\n onChange={(e) => onChange(i, e.target.value, v.value)}\n className={cls(\n \"w-1/3 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n <input\n type=\"text\"\n placeholder=\"Value\"\n value={v.value}\n onChange={(e) => onChange(i, v.key, e.target.value)}\n className={cls(\n \"flex-1 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n <button\n onClick={() => onRemove(i)}\n className=\"p-1.5 text-text-secondary hover:text-red-500 rounded transition-colors flex items-center justify-center shrink-0\"\n title=\"Remove\"\n >\n <XIcon size={iconSize.small} />\n </button>\n </div>\n ))}\n {values.length === 0 && (\n <Typography variant=\"caption\" className=\"text-text-secondary/50 italic text-xs\">\n No custom headers added.\n </Typography>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────── */\n\nfunction ResponseBadge({ status }: { status: number }) {\n let colorClass = \"text-red-500\";\n if (status >= 200 && status < 300) colorClass = \"text-emerald-500\";\n else if (status >= 300 && status < 400) colorClass = \"text-blue-500\";\n else if (status >= 400 && status < 500) colorClass = \"text-amber-500\";\n\n return (\n <span className={cls(\"text-xs font-bold font-mono\", colorClass)}>\n {status || \"ERR\"}\n </span>\n );\n}\n\nfunction buildBodyTemplate(endpoint: ParsedEndpoint): string {\n if (!endpoint.requestBody?.content) return \"{\\n \\n}\";\n const json = endpoint.requestBody.content[\"application/json\"];\n if (!json?.schema?.properties) return \"{\\n \\n}\";\n\n const props = json.schema.properties;\n const lines: string[] = [\"{\"];\n const keys = Object.keys(props);\n keys.forEach((key, i) => {\n const prop = props[key];\n if (prop.readOnly) return;\n const comma = i < keys.length - 1 ? \",\" : \"\";\n const val = defaultValue(prop);\n lines.push(` \"${key}\": ${val}${comma}`);\n });\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\nfunction defaultValue(schema: any): string {\n if (schema.enum) return JSON.stringify(schema.enum[0]);\n switch (schema.type) {\n case \"string\":\n return schema.format === \"date-time\" ? `\"${new Date().toISOString()}\"` : '\"\"';\n case \"number\":\n case \"integer\":\n return \"0\";\n case \"boolean\":\n return \"false\";\n case \"array\":\n return \"[]\";\n default:\n return \"null\";\n }\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { useApiConfig, useAuthController } from \"@rebasepro/core\";\nimport {\n CircularProgress,\n Typography,\n Alert,\n cls,\n Button,\n Chip,\n defaultBorderMixin,\n SearchBar,\n iconSize\n} from \"@rebasepro/ui\";\nimport { BookOpenIcon, PlayIcon } from \"lucide-react\";\nimport { EndpointDetail } from \"./EndpointDetail\";\nimport { TryItPanel } from \"./TryItPanel\";\nimport type { OpenApiSpec, ParsedEndpoint } from \"./types\";\nimport { parseOpenApiSpec } from \"./parseSpec\";\n\n/**\n * Custom-built API Explorer for Rebase Studio.\n * No external dependencies — renders the OpenAPI spec natively\n * with deep integration into the Rebase auth system.\n */\nexport function ApiExplorer() {\n const apiConfig = useApiConfig();\n const authController = useAuthController();\n const apiUrl = apiConfig?.apiUrl;\n\n const [spec, setSpec] = useState<OpenApiSpec | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const [selectedEndpoint, setSelectedEndpoint] = useState<ParsedEndpoint | null>(null);\n const [sidebarFilter, setSidebarFilter] = useState(\"\");\n const [tryItOpen, setTryItOpen] = useState(false);\n\n // Fetch OpenAPI spec\n useEffect(() => {\n if (!apiUrl) return;\n let cancelled = false;\n const specUrl = `${apiUrl.replace(/\\/+$/, \"\")}/api/docs`;\n\n (async () => {\n try {\n const res = await fetch(specUrl);\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n const data = await res.json();\n if (!cancelled) {\n setSpec(data);\n setLoading(false);\n }\n } catch (err: any) {\n if (!cancelled) {\n setError(err.message ?? \"Failed to load API spec\");\n setLoading(false);\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [apiUrl]);\n\n // Parse spec into grouped endpoints\n const { groups, allEndpoints } = useMemo(() => {\n if (!spec) return { groups: [],\nallEndpoints: [] };\n return parseOpenApiSpec(spec);\n }, [spec]);\n\n // Filter\n const filteredGroups = useMemo(() => {\n if (!sidebarFilter.trim()) return groups;\n const q = sidebarFilter.toLowerCase();\n return groups\n .map((g) => ({\n ...g,\n endpoints: g.endpoints.filter(\n (e) =>\n e.path.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n e.method.toLowerCase().includes(q)\n )\n }))\n .filter((g) => g.endpoints.length > 0);\n }, [groups, sidebarFilter]);\n\n // Auto-select first endpoint\n useEffect(() => {\n if (!selectedEndpoint && allEndpoints.length > 0) {\n setSelectedEndpoint(allEndpoints[0]);\n }\n }, [allEndpoints, selectedEndpoint]);\n\n // ── States ───────────────────────────────────────────────────────\n if (!apiUrl) {\n return (\n <div className=\"flex items-center justify-center h-full w-full p-8\">\n <Alert color=\"warning\">\n <Typography variant=\"body2\">\n No API URL configured. Ensure your app provides an{\" \"}\n <code className=\"font-mono text-xs\">apiUrl</code>.\n </Typography>\n </Alert>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full w-full gap-4\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark animate-pulse\">\n Loading API specification…\n </Typography>\n </div>\n );\n }\n\n if (error || !spec) {\n return (\n <div className=\"flex items-center justify-center h-full w-full p-8\">\n <Alert color=\"error\">\n <Typography variant=\"body2\">{error ?? \"Unknown error\"}</Typography>\n </Alert>\n </div>\n );\n }\n\n const METHOD_COLORS: Record<string, string> = {\n get: \"text-blue-600 dark:text-blue-400\",\n post: \"text-emerald-600 dark:text-emerald-400\",\n put: \"text-amber-600 dark:text-amber-400\",\n patch: \"text-orange-600 dark:text-orange-400\",\n delete: \"text-red-600 dark:text-red-400\"\n };\n\n return (\n <div className=\"flex h-full w-full overflow-hidden\">\n {/* ── Sidebar ──────────────────────────────────────── */}\n <div\n className={cls(\n \"w-72 min-w-[272px] flex flex-col h-full overflow-hidden border-r\",\n defaultBorderMixin,\n \"bg-surface-50 dark:bg-surface-900\"\n )}\n >\n {/* Header */}\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <BookOpenIcon size={iconSize.medium} className=\"text-primary dark:text-primary-dark\" />\n <Typography variant=\"subtitle2\" className=\"font-semibold\">\n {spec.info?.title ?? \"API Reference\"}\n </Typography>\n </div>\n {spec.info?.version && (\n <Chip size=\"smallest\" colorScheme=\"cyanDarker\">\n v{spec.info.version}\n </Chip>\n )}\n {/* Search */}\n <div className=\"mb-2\">\n <SearchBar\n placeholder=\"Filter endpoints…\"\n size=\"small\"\n onTextSearch={(val) => setSidebarFilter(val || \"\")}\n />\n </div>\n\n {/* Auth status removed to avoid redundancy with the AuthSimulationSelector */}\n </div>\n\n {/* Endpoint list */}\n <div className=\"flex-1 overflow-y-auto px-2 pb-4\">\n {filteredGroups.map((group) => (\n <div key={group.tag} className=\"mb-3\">\n <Typography\n variant=\"caption\"\n className=\"px-2 py-1.5 text-text-secondary dark:text-text-secondary-dark uppercase tracking-wider font-semibold text-[10px]\"\n >\n {group.tag}\n </Typography>\n {group.endpoints.map((ep) => {\n const isSelected = selectedEndpoint?.id === ep.id;\n return (\n <button\n key={ep.id}\n onClick={() => {\n setSelectedEndpoint(ep);\n setTryItOpen(false);\n }}\n className={cls(\n \"w-full flex items-center justify-between gap-2 px-2.5 py-1.5 rounded-lg text-left text-sm transition-all\",\n \"hover:bg-surface-200 dark:hover:bg-surface-800\",\n isSelected\n ? \"bg-surface-200 dark:bg-surface-800 font-medium\"\n : \"text-text-primary dark:text-text-primary-dark\"\n )}\n >\n <span className=\"truncate text-[13px] opacity-90\">{ep.summary || ep.shortPath}</span>\n <span\n className={cls(\n \"text-[10px] font-bold uppercase shrink-0\",\n METHOD_COLORS[ep.method] ?? \"text-text-secondary\"\n )}\n >\n {ep.method}\n </span>\n </button>\n );\n })}\n </div>\n ))}\n {filteredGroups.length === 0 && (\n <Typography\n variant=\"body2\"\n className=\"text-center text-text-secondary dark:text-text-secondary-dark py-8\"\n >\n No endpoints match\n </Typography>\n )}\n </div>\n </div>\n\n {/* ── Main content ─────────────────────────────────── */}\n <div className=\"flex-1 flex flex-col h-full overflow-hidden\">\n {selectedEndpoint ? (\n <>\n {/* Top bar */}\n <div\n className={cls(\n \"flex items-center justify-between px-5 py-3 gap-4 shrink-0 border-b z-10\",\n defaultBorderMixin,\n \"bg-surface-50/80 dark:bg-surface-950/80 backdrop-blur-md sticky top-0\"\n )}\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <span\n className={cls(\n \"text-xs font-bold uppercase\",\n METHOD_COLORS[selectedEndpoint.method] ?? \"\"\n )}\n >\n {selectedEndpoint.method}\n </span>\n <code className=\"text-sm font-mono text-text-primary dark:text-text-primary-dark truncate\">\n {selectedEndpoint.path}\n </code>\n </div>\n <Button\n variant={tryItOpen ? \"filled\" : \"outlined\"}\n size=\"small\"\n onClick={() => setTryItOpen((v) => !v)}\n >\n <PlayIcon size={iconSize.small} className=\"mr-1\" />\n Try It\n </Button>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto\">\n {tryItOpen ? (\n <TryItPanel\n key={selectedEndpoint.operationId || selectedEndpoint.path}\n endpoint={selectedEndpoint}\n apiUrl={apiUrl}\n getAuthToken={apiConfig?.getAuthToken ?? authController.getAuthToken}\n user={authController.user}\n basePath={spec?.servers?.[0]?.url || \"\"}\n />\n ) : (\n <EndpointDetail endpoint={selectedEndpoint} spec={spec}/>\n )}\n </div>\n </>\n ) : (\n <div className=\"flex items-center justify-center h-full\">\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n Select an endpoint from the sidebar\n </Typography>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nApiExplorer.displayName = \"ApiExplorer\";\n\n"],"names":["parseOpenApiSpec","spec","allEndpoints","tagMap","Map","tagDescriptions","t","tags","set","name","description","path","methods","Object","entries","paths","method","op","indexOf","length","shortPath","replace","endpoint","id","summary","parameters","requestBody","responses","security","operationId","push","tag","has","get","ORDER","post","put","patch","delete","groups","tagOrder","map","sortedTags","keys","sort","a","b","ai","bi","localeCompare","endpoints","pa","resolveRefName","ref","parts","split","resolveRef","current","part","EndpointDetail","t0","$","_c","t1","t2","iconSize","small","cls","defaultBorderMixin","_temp","t3","content","t4","contentType","media","schema","Symbol","for","t5","t6","t7","code","res","t8","ct","media_0","p","i","required","in","schemaTypeLabel","SchemaBlock","depth","$ref","resolved","properties","Set","key","prop","readOnly","enum","_temp2","type","items","v","String","format","SectionHeading","icon","title","StatusBadge","n","parseInt","color","TryItPanel","apiUrl","getAuthToken","user","basePath","storageKey","pathParams","setPathParams","useState","localStorage","getItem","JSON","parse","queryParams","setQueryParams","customHeaders","setCustomHeaders","value","body","setBody","buildBodyTemplate","response","setResponse","loading","setLoading","authMode","setAuthMode","validationError","setValidationError","rebaseContext","useRebaseContext","userManagement","currentUser","authController","users","useMemo","managed","u","uid","displayName","email","photoURL","roles","some","unshift","currentSelectableUser","selectedUser","setSelectedUser","useEffect","setItem","stringify","resolvedUrl","base","startsWith","cleanBase","url","val","encodeURIComponent","qp","filter","trim","k","join","pathParamDefs","queryParamDefs","hasBody","includes","execute","useCallback","err","message","start","performance","now","headers","h","token","fetch","toUpperCase","undefined","elapsed","Math","round","text","rawText","json","status","statusText","time","prev","next","splice","e","target","ParamSection","params","values","onChange","CustomKeyValueSection","onAdd","onRemove","e_0","ResponseBadge","colorClass","props","lines","forEach","comma","defaultValue","Date","toISOString","ApiExplorer","apiConfig","useApiConfig","useAuthController","setSpec","error","setError","selectedEndpoint","setSelectedEndpoint","sidebarFilter","setSidebarFilter","tryItOpen","setTryItOpen","cancelled","specUrl","ok","Error","data","filteredGroups","q","toLowerCase","g","METHOD_COLORS","medium","info","version","group","ep","isSelected","servers"],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { c } from "react-compiler-runtime";
|
|
3
|
+
import { iconSize, cls, Typography } from "@rebasepro/ui";
|
|
4
|
+
import { KeyRoundIcon } from "lucide-react";
|
|
5
|
+
import { UserSelectPopover } from "@rebasepro/core";
|
|
6
|
+
function AuthSimulationSelector(t0) {
|
|
7
|
+
const $ = c(27);
|
|
8
|
+
const {
|
|
9
|
+
authMode,
|
|
10
|
+
setAuthMode,
|
|
11
|
+
selectedUser,
|
|
12
|
+
setSelectedUser,
|
|
13
|
+
users,
|
|
14
|
+
loading,
|
|
15
|
+
currentUser
|
|
16
|
+
} = t0;
|
|
17
|
+
let t1;
|
|
18
|
+
let t2;
|
|
19
|
+
if ($[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
|
|
20
|
+
t1 = /* @__PURE__ */ jsx(KeyRoundIcon, { size: iconSize.small, className: "text-text-secondary dark:text-text-secondary-dark" });
|
|
21
|
+
t2 = /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-text-secondary dark:text-text-secondary-dark text-xs font-medium", children: "Auth:" });
|
|
22
|
+
$[0] = t1;
|
|
23
|
+
$[1] = t2;
|
|
24
|
+
} else {
|
|
25
|
+
t1 = $[0];
|
|
26
|
+
t2 = $[1];
|
|
27
|
+
}
|
|
28
|
+
let t3;
|
|
29
|
+
if ($[2] !== setAuthMode) {
|
|
30
|
+
t3 = () => setAuthMode("jwt");
|
|
31
|
+
$[2] = setAuthMode;
|
|
32
|
+
$[3] = t3;
|
|
33
|
+
} else {
|
|
34
|
+
t3 = $[3];
|
|
35
|
+
}
|
|
36
|
+
const t4 = authMode === "jwt" ? "bg-primary/15 text-primary dark:text-primary-dark border-primary/30 font-medium" : "border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-primary/30";
|
|
37
|
+
let t5;
|
|
38
|
+
if ($[4] !== t4) {
|
|
39
|
+
t5 = cls("px-3 py-1 text-xs rounded-full border transition-all", t4);
|
|
40
|
+
$[4] = t4;
|
|
41
|
+
$[5] = t5;
|
|
42
|
+
} else {
|
|
43
|
+
t5 = $[5];
|
|
44
|
+
}
|
|
45
|
+
let t6;
|
|
46
|
+
if ($[6] !== t3 || $[7] !== t5) {
|
|
47
|
+
t6 = /* @__PURE__ */ jsx("button", { onClick: t3, className: t5, children: "JWT Token" });
|
|
48
|
+
$[6] = t3;
|
|
49
|
+
$[7] = t5;
|
|
50
|
+
$[8] = t6;
|
|
51
|
+
} else {
|
|
52
|
+
t6 = $[8];
|
|
53
|
+
}
|
|
54
|
+
let t7;
|
|
55
|
+
if ($[9] !== setAuthMode) {
|
|
56
|
+
t7 = () => setAuthMode("none");
|
|
57
|
+
$[9] = setAuthMode;
|
|
58
|
+
$[10] = t7;
|
|
59
|
+
} else {
|
|
60
|
+
t7 = $[10];
|
|
61
|
+
}
|
|
62
|
+
const t8 = authMode === "none" ? "bg-red-500/15 text-red-600 dark:text-red-400 border-red-500/30 font-medium" : "border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-red-500/30";
|
|
63
|
+
let t9;
|
|
64
|
+
if ($[11] !== t8) {
|
|
65
|
+
t9 = cls("px-3 py-1 text-xs rounded-full border transition-all", t8);
|
|
66
|
+
$[11] = t8;
|
|
67
|
+
$[12] = t9;
|
|
68
|
+
} else {
|
|
69
|
+
t9 = $[12];
|
|
70
|
+
}
|
|
71
|
+
let t10;
|
|
72
|
+
if ($[13] !== t7 || $[14] !== t9) {
|
|
73
|
+
t10 = /* @__PURE__ */ jsx("button", { onClick: t7, className: t9, children: "No Auth" });
|
|
74
|
+
$[13] = t7;
|
|
75
|
+
$[14] = t9;
|
|
76
|
+
$[15] = t10;
|
|
77
|
+
} else {
|
|
78
|
+
t10 = $[15];
|
|
79
|
+
}
|
|
80
|
+
let t11;
|
|
81
|
+
if ($[16] !== authMode || $[17] !== currentUser || $[18] !== loading || $[19] !== selectedUser || $[20] !== setSelectedUser || $[21] !== users) {
|
|
82
|
+
t11 = authMode === "jwt" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
83
|
+
/* @__PURE__ */ jsx("div", { className: "w-px h-4 bg-surface-300 dark:bg-surface-600 mx-1" }),
|
|
84
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-text-secondary dark:text-text-secondary-dark text-xs font-medium", children: "Run as:" }),
|
|
85
|
+
/* @__PURE__ */ jsx(UserSelectPopover, { selectedUser, onUserSelected: setSelectedUser, users, loading, currentUser })
|
|
86
|
+
] });
|
|
87
|
+
$[16] = authMode;
|
|
88
|
+
$[17] = currentUser;
|
|
89
|
+
$[18] = loading;
|
|
90
|
+
$[19] = selectedUser;
|
|
91
|
+
$[20] = setSelectedUser;
|
|
92
|
+
$[21] = users;
|
|
93
|
+
$[22] = t11;
|
|
94
|
+
} else {
|
|
95
|
+
t11 = $[22];
|
|
96
|
+
}
|
|
97
|
+
let t12;
|
|
98
|
+
if ($[23] !== t10 || $[24] !== t11 || $[25] !== t6) {
|
|
99
|
+
t12 = /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
|
|
100
|
+
t1,
|
|
101
|
+
t2,
|
|
102
|
+
t6,
|
|
103
|
+
t10,
|
|
104
|
+
t11
|
|
105
|
+
] });
|
|
106
|
+
$[23] = t10;
|
|
107
|
+
$[24] = t11;
|
|
108
|
+
$[25] = t6;
|
|
109
|
+
$[26] = t12;
|
|
110
|
+
} else {
|
|
111
|
+
t12 = $[26];
|
|
112
|
+
}
|
|
113
|
+
return t12;
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
AuthSimulationSelector as A
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=AuthSimulationSelector-BF4rkRGp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthSimulationSelector-BF4rkRGp.js","sources":["../src/components/AuthSimulationSelector.tsx"],"sourcesContent":["import React from \"react\";\nimport { Typography, cls, iconSize } from \"@rebasepro/ui\";\nimport { KeyRoundIcon } from \"lucide-react\";\nimport { UserSelectPopover, SelectableUser } from \"@rebasepro/core\";\n\nexport interface AuthSimulationSelectorProps {\n authMode: \"jwt\" | \"none\";\n setAuthMode: (mode: \"jwt\" | \"none\") => void;\n selectedUser: SelectableUser | null;\n setSelectedUser: (user: SelectableUser | null) => void;\n users: SelectableUser[];\n loading?: boolean;\n currentUser: SelectableUser | null;\n}\n\nexport function AuthSimulationSelector({\n authMode,\n setAuthMode,\n selectedUser,\n setSelectedUser,\n users,\n loading,\n currentUser\n}: AuthSimulationSelectorProps) {\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n <KeyRoundIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-medium\"\n >\n Auth:\n </Typography>\n <button\n onClick={() => setAuthMode(\"jwt\")}\n className={cls(\n \"px-3 py-1 text-xs rounded-full border transition-all\",\n authMode === \"jwt\"\n ? \"bg-primary/15 text-primary dark:text-primary-dark border-primary/30 font-medium\"\n : \"border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-primary/30\"\n )}\n >\n JWT Token\n </button>\n <button\n onClick={() => setAuthMode(\"none\")}\n className={cls(\n \"px-3 py-1 text-xs rounded-full border transition-all\",\n authMode === \"none\"\n ? \"bg-red-500/15 text-red-600 dark:text-red-400 border-red-500/30 font-medium\"\n : \"border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-red-500/30\"\n )}\n >\n No Auth\n </button>\n\n {authMode === \"jwt\" && (\n <>\n <div className=\"w-px h-4 bg-surface-300 dark:bg-surface-600 mx-1\" />\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-medium\"\n >\n Run as:\n </Typography>\n <UserSelectPopover\n selectedUser={selectedUser}\n onUserSelected={setSelectedUser}\n users={users}\n loading={loading}\n currentUser={currentUser}\n />\n </>\n )}\n </div>\n );\n}\n"],"names":["AuthSimulationSelector","t0","$","_c","authMode","setAuthMode","selectedUser","setSelectedUser","users","loading","currentUser","t1","t2","Symbol","for","iconSize","small","t3","t4","t5","cls","t6","t7","t8","t9","t10","t11","t12"],"mappings":"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"}
|