@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.
Files changed (361) hide show
  1. package/LICENSE +114 -0
  2. package/README.md +159 -0
  3. package/dist/ApiExplorer-gMJt5JrS.js +1053 -0
  4. package/dist/ApiExplorer-gMJt5JrS.js.map +1 -0
  5. package/dist/AuthSimulationSelector-BF4rkRGp.js +118 -0
  6. package/dist/AuthSimulationSelector-BF4rkRGp.js.map +1 -0
  7. package/dist/BranchesView-DcHZtvXo.js +292 -0
  8. package/dist/BranchesView-DcHZtvXo.js.map +1 -0
  9. package/dist/CronJobsView-CijCToeK.js +456 -0
  10. package/dist/CronJobsView-CijCToeK.js.map +1 -0
  11. package/dist/JSEditor-D8nVp3Lp.js +1308 -0
  12. package/dist/JSEditor-D8nVp3Lp.js.map +1 -0
  13. package/dist/MonacoEditor-CMYEjiRf.js +161 -0
  14. package/dist/MonacoEditor-CMYEjiRf.js.map +1 -0
  15. package/dist/RLSEditor-DBH09u9v.js +1831 -0
  16. package/dist/RLSEditor-DBH09u9v.js.map +1 -0
  17. package/dist/SQLEditor-CkVx9vgr.js +1792 -0
  18. package/dist/SQLEditor-CkVx9vgr.js.map +1 -0
  19. package/dist/SchemaVisualizer-BgD5Zb77.js +1069 -0
  20. package/dist/SchemaVisualizer-BgD5Zb77.js.map +1 -0
  21. package/dist/StorageView-CTqGFhY9.js +907 -0
  22. package/dist/StorageView-CTqGFhY9.js.map +1 -0
  23. package/dist/common/src/collections/CollectionRegistry.d.ts +56 -0
  24. package/dist/common/src/collections/index.d.ts +1 -0
  25. package/dist/common/src/data/buildRebaseData.d.ts +14 -0
  26. package/dist/common/src/index.d.ts +3 -0
  27. package/dist/common/src/util/builders.d.ts +57 -0
  28. package/dist/common/src/util/callbacks.d.ts +6 -0
  29. package/dist/common/src/util/collections.d.ts +11 -0
  30. package/dist/common/src/util/common.d.ts +2 -0
  31. package/dist/common/src/util/conditions.d.ts +26 -0
  32. package/dist/common/src/util/entities.d.ts +58 -0
  33. package/dist/common/src/util/enums.d.ts +3 -0
  34. package/dist/common/src/util/index.d.ts +16 -0
  35. package/dist/common/src/util/navigation_from_path.d.ts +34 -0
  36. package/dist/common/src/util/navigation_utils.d.ts +20 -0
  37. package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
  38. package/dist/common/src/util/paths.d.ts +14 -0
  39. package/dist/common/src/util/permissions.d.ts +5 -0
  40. package/dist/common/src/util/references.d.ts +2 -0
  41. package/dist/common/src/util/relations.d.ts +22 -0
  42. package/dist/common/src/util/resolutions.d.ts +72 -0
  43. package/dist/common/src/util/storage.d.ts +24 -0
  44. package/dist/core/src/components/AIIcon.d.ts +16 -0
  45. package/dist/core/src/components/ConfirmationDialog.d.ts +9 -0
  46. package/dist/core/src/components/Debug/UIReferenceView.d.ts +1 -0
  47. package/dist/core/src/components/Debug/UIStyleGuide.d.ts +1 -0
  48. package/dist/core/src/components/ErrorTooltip.d.ts +2 -0
  49. package/dist/core/src/components/ErrorView.d.ts +21 -0
  50. package/dist/core/src/components/LanguageToggle.d.ts +1 -0
  51. package/dist/core/src/components/LoginView/LoginView.d.ts +68 -0
  52. package/dist/core/src/components/LoginView/index.d.ts +2 -0
  53. package/dist/core/src/components/NotFoundPage.d.ts +1 -0
  54. package/dist/core/src/components/RebaseAuth.d.ts +10 -0
  55. package/dist/core/src/components/RebaseLogo.d.ts +7 -0
  56. package/dist/core/src/components/UnsavedChangesDialog.d.ts +9 -0
  57. package/dist/core/src/components/UserDisplay.d.ts +7 -0
  58. package/dist/core/src/components/UserSelectPopover.d.ts +62 -0
  59. package/dist/core/src/components/UserSettingsView.d.ts +1 -0
  60. package/dist/core/src/components/common/index.d.ts +6 -0
  61. package/dist/core/src/components/common/table_height.d.ts +5 -0
  62. package/dist/core/src/components/common/types.d.ts +63 -0
  63. package/dist/core/src/components/common/useColumnsIds.d.ts +9 -0
  64. package/dist/core/src/components/common/useDataTableController.d.ts +45 -0
  65. package/dist/core/src/components/common/useDebouncedData.d.ts +9 -0
  66. package/dist/core/src/components/common/useScrollRestoration.d.ts +14 -0
  67. package/dist/core/src/components/index.d.ts +16 -0
  68. package/dist/core/src/contexts/AdminModeController.d.ts +4 -0
  69. package/dist/core/src/contexts/AnalyticsContext.d.ts +3 -0
  70. package/dist/core/src/contexts/AuthControllerContext.d.ts +3 -0
  71. package/dist/core/src/contexts/CustomizationControllerContext.d.ts +3 -0
  72. package/dist/core/src/contexts/DataDriverContext.d.ts +3 -0
  73. package/dist/core/src/contexts/DatabaseAdminContext.d.ts +3 -0
  74. package/dist/core/src/contexts/DialogsProvider.d.ts +4 -0
  75. package/dist/core/src/contexts/EffectiveRoleController.d.ts +4 -0
  76. package/dist/core/src/contexts/InternalUserManagementContext.d.ts +3 -0
  77. package/dist/core/src/contexts/ModeController.d.ts +4 -0
  78. package/dist/core/src/contexts/RebaseClientInstanceContext.d.ts +6 -0
  79. package/dist/core/src/contexts/RebaseDataContext.d.ts +3 -0
  80. package/dist/core/src/contexts/SnackbarProvider.d.ts +2 -0
  81. package/dist/core/src/contexts/StorageSourceContext.d.ts +3 -0
  82. package/dist/core/src/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
  83. package/dist/core/src/contexts/index.d.ts +13 -0
  84. package/dist/core/src/core/PluginLifecycleManager.d.ts +17 -0
  85. package/dist/core/src/core/PluginProviderStack.d.ts +21 -0
  86. package/dist/core/src/core/Rebase.d.ts +14 -0
  87. package/dist/core/src/core/RebaseProps.d.ts +136 -0
  88. package/dist/core/src/core/RebaseRouter.d.ts +4 -0
  89. package/dist/core/src/core/RebaseRoutes.d.ts +17 -0
  90. package/dist/core/src/core/index.d.ts +4 -0
  91. package/dist/core/src/hooks/ApiConfigContext.d.ts +24 -0
  92. package/dist/core/src/hooks/data/delete.d.ts +31 -0
  93. package/dist/core/src/hooks/data/save.d.ts +34 -0
  94. package/dist/core/src/hooks/data/useCollectionFetch.d.ts +51 -0
  95. package/dist/core/src/hooks/data/useData.d.ts +13 -0
  96. package/dist/core/src/hooks/data/useDataOrder.d.ts +12 -0
  97. package/dist/core/src/hooks/data/useEntityFetch.d.ts +38 -0
  98. package/dist/core/src/hooks/data/useRelationSelector.d.ts +52 -0
  99. package/dist/core/src/hooks/data/useUserSelector.d.ts +31 -0
  100. package/dist/core/src/hooks/index.d.ts +37 -0
  101. package/dist/core/src/hooks/useAdminModeController.d.ts +19 -0
  102. package/dist/core/src/hooks/useAnalyticsController.d.ts +5 -0
  103. package/dist/core/src/hooks/useAuthController.d.ts +11 -0
  104. package/dist/core/src/hooks/useAuthSubscription.d.ts +2 -0
  105. package/dist/core/src/hooks/useBackendStorageSource.d.ts +30 -0
  106. package/dist/core/src/hooks/useBridgeRegistration.d.ts +18 -0
  107. package/dist/core/src/hooks/useBrowserTitleAndIcon.d.ts +6 -0
  108. package/dist/core/src/hooks/useBuildAdminModeController.d.ts +6 -0
  109. package/dist/core/src/hooks/useBuildEffectiveRoleController.d.ts +8 -0
  110. package/dist/core/src/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
  111. package/dist/core/src/hooks/useBuildModeController.d.ts +6 -0
  112. package/dist/core/src/hooks/useClipboard.d.ts +57 -0
  113. package/dist/core/src/hooks/useCollapsedGroups.d.ts +12 -0
  114. package/dist/core/src/hooks/useCustomizationController.d.ts +11 -0
  115. package/dist/core/src/hooks/useDialogsController.d.ts +11 -0
  116. package/dist/core/src/hooks/useEffectiveRoleController.d.ts +7 -0
  117. package/dist/core/src/hooks/useInternalUserManagementController.d.ts +12 -0
  118. package/dist/core/src/hooks/useLargeLayout.d.ts +1 -0
  119. package/dist/core/src/hooks/useModeController.d.ts +19 -0
  120. package/dist/core/src/hooks/usePermissions.d.ts +12 -0
  121. package/dist/core/src/hooks/useRebaseClient.d.ts +5 -0
  122. package/dist/core/src/hooks/useRebaseContext.d.ts +11 -0
  123. package/dist/core/src/hooks/useRebaseRegistry.d.ts +34 -0
  124. package/dist/core/src/hooks/useSlot.d.ts +18 -0
  125. package/dist/core/src/hooks/useSnackbarController.d.ts +20 -0
  126. package/dist/core/src/hooks/useStorageSource.d.ts +7 -0
  127. package/dist/core/src/hooks/useStudioBridge.d.ts +91 -0
  128. package/dist/core/src/hooks/useTranslation.d.ts +17 -0
  129. package/dist/core/src/hooks/useUnsavedChangesDialog.d.ts +12 -0
  130. package/dist/core/src/hooks/useUserConfigurationPersistence.d.ts +8 -0
  131. package/dist/core/src/hooks/useValidateAuthenticator.d.ts +21 -0
  132. package/dist/core/src/i18n/RebaseI18nProvider.d.ts +33 -0
  133. package/dist/core/src/index.d.ts +15 -0
  134. package/dist/core/src/internal/common.d.ts +3 -0
  135. package/dist/core/src/internal/useRestoreScroll.d.ts +6 -0
  136. package/dist/core/src/locales/de.d.ts +2 -0
  137. package/dist/core/src/locales/en.d.ts +10 -0
  138. package/dist/core/src/locales/es.d.ts +10 -0
  139. package/dist/core/src/locales/fr.d.ts +2 -0
  140. package/dist/core/src/locales/hi.d.ts +2 -0
  141. package/dist/core/src/locales/it.d.ts +2 -0
  142. package/dist/core/src/locales/pt.d.ts +7 -0
  143. package/dist/core/src/util/constants.d.ts +1 -0
  144. package/dist/core/src/util/createFormexStub.d.ts +2 -0
  145. package/dist/core/src/util/entity_cache.d.ts +27 -0
  146. package/dist/core/src/util/enums.d.ts +5 -0
  147. package/dist/core/src/util/icon_list.d.ts +5 -0
  148. package/dist/core/src/util/icon_synonyms.d.ts +1 -0
  149. package/dist/core/src/util/icons.d.ts +20 -0
  150. package/dist/core/src/util/index.d.ts +10 -0
  151. package/dist/core/src/util/previews.d.ts +4 -0
  152. package/dist/core/src/util/useStorageUploadController.d.ts +38 -0
  153. package/dist/core/src/util/useTraceUpdate.d.ts +2 -0
  154. package/dist/formex/src/Field.d.ts +52 -0
  155. package/dist/formex/src/Formex.d.ts +7 -0
  156. package/dist/formex/src/index.d.ts +5 -0
  157. package/dist/formex/src/types.d.ts +40 -0
  158. package/dist/formex/src/useCreateFormex.d.ts +14 -0
  159. package/dist/formex/src/utils.d.ts +16 -0
  160. package/dist/index.es.js +726 -0
  161. package/dist/index.es.js.map +1 -0
  162. package/dist/index.umd.js +9647 -0
  163. package/dist/index.umd.js.map +1 -0
  164. package/dist/studio/src/components/ApiExplorer/ApiExplorer.d.ts +9 -0
  165. package/dist/studio/src/components/ApiExplorer/EndpointDetail.d.ts +9 -0
  166. package/dist/studio/src/components/ApiExplorer/TryItPanel.d.ts +15 -0
  167. package/dist/studio/src/components/ApiExplorer/parseSpec.d.ts +16 -0
  168. package/dist/studio/src/components/ApiExplorer/types.d.ts +90 -0
  169. package/dist/studio/src/components/AuthSimulationSelector.d.ts +11 -0
  170. package/dist/studio/src/components/Branches/BranchesView.d.ts +1 -0
  171. package/dist/studio/src/components/CronJobs/CronJobsView.d.ts +1 -0
  172. package/dist/studio/src/components/JSEditor/JSEditor.d.ts +1 -0
  173. package/dist/studio/src/components/JSEditor/JSEditorSidebar.d.ts +21 -0
  174. package/dist/studio/src/components/JSEditor/JSMonacoEditor.d.ts +18 -0
  175. package/dist/studio/src/components/RLSEditor/PolicyEditor.d.ts +9 -0
  176. package/dist/studio/src/components/RLSEditor/RLSEditor.d.ts +19 -0
  177. package/dist/studio/src/components/RLSEditor/index.d.ts +1 -0
  178. package/dist/studio/src/components/RebaseStudio.d.ts +2 -0
  179. package/dist/studio/src/components/SQLEditor/ExplainVisualizer.d.ts +24 -0
  180. package/dist/studio/src/components/SQLEditor/MonacoEditor.d.ts +17 -0
  181. package/dist/studio/src/components/SQLEditor/SQLEditor.d.ts +11 -0
  182. package/dist/studio/src/components/SQLEditor/SQLEditorSidebar.d.ts +21 -0
  183. package/dist/studio/src/components/SQLEditor/SchemaBrowser.d.ts +8 -0
  184. package/dist/studio/src/components/SchemaVisualizer/RelationEdge.d.ts +3 -0
  185. package/dist/studio/src/components/SchemaVisualizer/SchemaVisualizer.d.ts +2 -0
  186. package/dist/studio/src/components/SchemaVisualizer/TableNode.d.ts +3 -0
  187. package/dist/studio/src/components/SchemaVisualizer/index.d.ts +5 -0
  188. package/dist/studio/src/components/SchemaVisualizer/schema-visualizer.utils.d.ts +42 -0
  189. package/dist/studio/src/components/SchemaVisualizer/useSchemaGraph.d.ts +37 -0
  190. package/dist/studio/src/components/StorageView/StorageView.d.ts +1 -0
  191. package/dist/studio/src/components/StudioHomePage.d.ts +9 -0
  192. package/dist/studio/src/index.d.ts +4 -0
  193. package/dist/studio/src/utils/entities.d.ts +0 -0
  194. package/dist/studio/src/utils/pgColumnToProperty.d.ts +6 -0
  195. package/dist/studio/src/utils/sql_utils.d.ts +52 -0
  196. package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
  197. package/dist/types/src/controllers/auth.d.ts +119 -0
  198. package/dist/types/src/controllers/client.d.ts +170 -0
  199. package/dist/types/src/controllers/collection_registry.d.ts +45 -0
  200. package/dist/types/src/controllers/customization_controller.d.ts +60 -0
  201. package/dist/types/src/controllers/data.d.ts +168 -0
  202. package/dist/types/src/controllers/data_driver.d.ts +160 -0
  203. package/dist/types/src/controllers/database_admin.d.ts +11 -0
  204. package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
  205. package/dist/types/src/controllers/effective_role.d.ts +4 -0
  206. package/dist/types/src/controllers/email.d.ts +34 -0
  207. package/dist/types/src/controllers/index.d.ts +18 -0
  208. package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
  209. package/dist/types/src/controllers/navigation.d.ts +213 -0
  210. package/dist/types/src/controllers/registry.d.ts +54 -0
  211. package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
  212. package/dist/types/src/controllers/side_entity_controller.d.ts +90 -0
  213. package/dist/types/src/controllers/snackbar.d.ts +24 -0
  214. package/dist/types/src/controllers/storage.d.ts +171 -0
  215. package/dist/types/src/index.d.ts +4 -0
  216. package/dist/types/src/rebase_context.d.ts +105 -0
  217. package/dist/types/src/types/backend.d.ts +536 -0
  218. package/dist/types/src/types/builders.d.ts +15 -0
  219. package/dist/types/src/types/chips.d.ts +5 -0
  220. package/dist/types/src/types/collections.d.ts +856 -0
  221. package/dist/types/src/types/cron.d.ts +102 -0
  222. package/dist/types/src/types/data_source.d.ts +64 -0
  223. package/dist/types/src/types/entities.d.ts +145 -0
  224. package/dist/types/src/types/entity_actions.d.ts +98 -0
  225. package/dist/types/src/types/entity_callbacks.d.ts +173 -0
  226. package/dist/types/src/types/entity_link_builder.d.ts +7 -0
  227. package/dist/types/src/types/entity_overrides.d.ts +10 -0
  228. package/dist/types/src/types/entity_views.d.ts +61 -0
  229. package/dist/types/src/types/export_import.d.ts +21 -0
  230. package/dist/types/src/types/index.d.ts +23 -0
  231. package/dist/types/src/types/locales.d.ts +4 -0
  232. package/dist/types/src/types/modify_collections.d.ts +5 -0
  233. package/dist/types/src/types/plugins.d.ts +279 -0
  234. package/dist/types/src/types/properties.d.ts +1176 -0
  235. package/dist/types/src/types/property_config.d.ts +70 -0
  236. package/dist/types/src/types/relations.d.ts +336 -0
  237. package/dist/types/src/types/slots.d.ts +252 -0
  238. package/dist/types/src/types/translations.d.ts +870 -0
  239. package/dist/types/src/types/user_management_delegate.d.ts +121 -0
  240. package/dist/types/src/types/websockets.d.ts +78 -0
  241. package/dist/types/src/users/index.d.ts +2 -0
  242. package/dist/types/src/users/roles.d.ts +22 -0
  243. package/dist/types/src/users/user.d.ts +46 -0
  244. package/dist/ui/src/components/Alert.d.ts +12 -0
  245. package/dist/ui/src/components/Autocomplete.d.ts +21 -0
  246. package/dist/ui/src/components/Avatar.d.ts +11 -0
  247. package/dist/ui/src/components/Badge.d.ts +8 -0
  248. package/dist/ui/src/components/BooleanSwitch.d.ts +14 -0
  249. package/dist/ui/src/components/BooleanSwitchWithLabel.d.ts +17 -0
  250. package/dist/ui/src/components/Button.d.ts +14 -0
  251. package/dist/ui/src/components/Card.d.ts +9 -0
  252. package/dist/ui/src/components/CenteredView.d.ts +9 -0
  253. package/dist/ui/src/components/Checkbox.d.ts +13 -0
  254. package/dist/ui/src/components/Chip.d.ts +26 -0
  255. package/dist/ui/src/components/CircularProgress.d.ts +5 -0
  256. package/dist/ui/src/components/CircularProgressCenter.d.ts +11 -0
  257. package/dist/ui/src/components/Collapse.d.ts +9 -0
  258. package/dist/ui/src/components/ColorPicker.d.ts +30 -0
  259. package/dist/ui/src/components/Container.d.ts +8 -0
  260. package/dist/ui/src/components/DateTimeField.d.ts +24 -0
  261. package/dist/ui/src/components/DebouncedTextField.d.ts +2 -0
  262. package/dist/ui/src/components/Dialog.d.ts +39 -0
  263. package/dist/ui/src/components/DialogActions.d.ts +7 -0
  264. package/dist/ui/src/components/DialogContent.d.ts +7 -0
  265. package/dist/ui/src/components/DialogTitle.d.ts +10 -0
  266. package/dist/ui/src/components/ErrorBoundary.d.ts +11 -0
  267. package/dist/ui/src/components/ExpandablePanel.d.ts +12 -0
  268. package/dist/ui/src/components/FileUpload.d.ts +23 -0
  269. package/dist/ui/src/components/IconButton.d.ts +12 -0
  270. package/dist/ui/src/components/InfoLabel.d.ts +5 -0
  271. package/dist/ui/src/components/InputLabel.d.ts +11 -0
  272. package/dist/ui/src/components/Label.d.ts +7 -0
  273. package/dist/ui/src/components/LoadingButton.d.ts +7 -0
  274. package/dist/ui/src/components/Markdown.d.ts +10 -0
  275. package/dist/ui/src/components/Menu.d.ts +23 -0
  276. package/dist/ui/src/components/Menubar.d.ts +80 -0
  277. package/dist/ui/src/components/MultiSelect.d.ts +48 -0
  278. package/dist/ui/src/components/Paper.d.ts +6 -0
  279. package/dist/ui/src/components/Popover.d.ts +24 -0
  280. package/dist/ui/src/components/RadioGroup.d.ts +28 -0
  281. package/dist/ui/src/components/ResizablePanels.d.ts +18 -0
  282. package/dist/ui/src/components/SearchBar.d.ts +22 -0
  283. package/dist/ui/src/components/Select.d.ts +43 -0
  284. package/dist/ui/src/components/Separator.d.ts +5 -0
  285. package/dist/ui/src/components/Sheet.d.ts +22 -0
  286. package/dist/ui/src/components/Skeleton.d.ts +6 -0
  287. package/dist/ui/src/components/Slider.d.ts +21 -0
  288. package/dist/ui/src/components/Table.d.ts +34 -0
  289. package/dist/ui/src/components/Tabs.d.ts +19 -0
  290. package/dist/ui/src/components/TextField.d.ts +58 -0
  291. package/dist/ui/src/components/TextareaAutosize.d.ts +43 -0
  292. package/dist/ui/src/components/ToggleButtonGroup.d.ts +30 -0
  293. package/dist/ui/src/components/Tooltip.d.ts +19 -0
  294. package/dist/ui/src/components/Typography.d.ts +36 -0
  295. package/dist/ui/src/components/VirtualTable/VirtualTable.d.ts +11 -0
  296. package/dist/ui/src/components/VirtualTable/VirtualTableCell.d.ts +21 -0
  297. package/dist/ui/src/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
  298. package/dist/ui/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
  299. package/dist/ui/src/components/VirtualTable/VirtualTableProps.d.ts +243 -0
  300. package/dist/ui/src/components/VirtualTable/VirtualTableRow.d.ts +3 -0
  301. package/dist/ui/src/components/VirtualTable/index.d.ts +3 -0
  302. package/dist/ui/src/components/VirtualTable/types.d.ts +38 -0
  303. package/dist/ui/src/components/common/SelectInputLabel.d.ts +5 -0
  304. package/dist/ui/src/components/index.d.ts +53 -0
  305. package/dist/ui/src/hooks/PortalContainerContext.d.ts +31 -0
  306. package/dist/ui/src/hooks/index.d.ts +6 -0
  307. package/dist/ui/src/hooks/useDebounceCallback.d.ts +1 -0
  308. package/dist/ui/src/hooks/useDebounceValue.d.ts +1 -0
  309. package/dist/ui/src/hooks/useDebouncedCallback.d.ts +1 -0
  310. package/dist/ui/src/hooks/useInjectStyles.d.ts +7 -0
  311. package/dist/ui/src/hooks/useOutsideAlerter.d.ts +5 -0
  312. package/dist/ui/src/icons/GitHubIcon.d.ts +2 -0
  313. package/dist/ui/src/icons/HandleIcon.d.ts +1 -0
  314. package/dist/ui/src/icons/Icon.d.ts +20 -0
  315. package/dist/ui/src/icons/cool_icon_keys.d.ts +1 -0
  316. package/dist/ui/src/icons/icon_keys.d.ts +1 -0
  317. package/dist/ui/src/icons/index.d.ts +6 -0
  318. package/dist/ui/src/index.d.ts +5 -0
  319. package/dist/ui/src/styles.d.ts +12 -0
  320. package/dist/ui/src/util/chip_colors.d.ts +4 -0
  321. package/dist/ui/src/util/cls.d.ts +2 -0
  322. package/dist/ui/src/util/debounce.d.ts +10 -0
  323. package/dist/ui/src/util/hash.d.ts +1 -0
  324. package/dist/ui/src/util/index.d.ts +4 -0
  325. package/dist/ui/src/util/key_to_icon_component.d.ts +1 -0
  326. package/package.json +84 -0
  327. package/src/components/ApiExplorer/ApiExplorer.tsx +290 -0
  328. package/src/components/ApiExplorer/EndpointDetail.tsx +271 -0
  329. package/src/components/ApiExplorer/TryItPanel.tsx +510 -0
  330. package/src/components/ApiExplorer/parseSpec.ts +104 -0
  331. package/src/components/ApiExplorer/types.ts +84 -0
  332. package/src/components/AuthSimulationSelector.tsx +77 -0
  333. package/src/components/Branches/BranchesView.tsx +370 -0
  334. package/src/components/CronJobs/CronJobsView.tsx +346 -0
  335. package/src/components/JSEditor/JSEditor.tsx +1033 -0
  336. package/src/components/JSEditor/JSEditorSidebar.tsx +340 -0
  337. package/src/components/JSEditor/JSMonacoEditor.tsx +390 -0
  338. package/src/components/RLSEditor/PolicyEditor.tsx +444 -0
  339. package/src/components/RLSEditor/RLSEditor.tsx +692 -0
  340. package/src/components/RLSEditor/index.ts +1 -0
  341. package/src/components/RebaseStudio.tsx +121 -0
  342. package/src/components/SQLEditor/ExplainVisualizer.tsx +128 -0
  343. package/src/components/SQLEditor/MonacoEditor.tsx +203 -0
  344. package/src/components/SQLEditor/SQLEditor.tsx +1419 -0
  345. package/src/components/SQLEditor/SQLEditorSidebar.tsx +174 -0
  346. package/src/components/SQLEditor/SchemaBrowser.tsx +158 -0
  347. package/src/components/SchemaVisualizer/RelationEdge.tsx +102 -0
  348. package/src/components/SchemaVisualizer/SchemaVisualizer.tsx +665 -0
  349. package/src/components/SchemaVisualizer/TableNode.tsx +257 -0
  350. package/src/components/SchemaVisualizer/index.ts +5 -0
  351. package/src/components/SchemaVisualizer/schema-visualizer.utils.ts +140 -0
  352. package/src/components/SchemaVisualizer/useSchemaGraph.ts +397 -0
  353. package/src/components/StorageView/StorageView.tsx +1035 -0
  354. package/src/components/StudioHomePage.tsx +357 -0
  355. package/src/index.ts +31 -0
  356. package/src/utils/entities.ts +2 -0
  357. package/src/utils/pgColumnToProperty.test.ts +401 -0
  358. package/src/utils/pgColumnToProperty.ts +275 -0
  359. package/src/utils/sql_utils.test.ts +265 -0
  360. package/src/utils/sql_utils.ts +291 -0
  361. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,77 @@
1
+ import React from "react";
2
+ import { Typography, cls, iconSize } from "@rebasepro/ui";
3
+ import { KeyRoundIcon } from "lucide-react";
4
+ import { UserSelectPopover, SelectableUser } from "@rebasepro/core";
5
+
6
+ export interface AuthSimulationSelectorProps {
7
+ authMode: "jwt" | "none";
8
+ setAuthMode: (mode: "jwt" | "none") => void;
9
+ selectedUser: SelectableUser | null;
10
+ setSelectedUser: (user: SelectableUser | null) => void;
11
+ users: SelectableUser[];
12
+ loading?: boolean;
13
+ currentUser: SelectableUser | null;
14
+ }
15
+
16
+ export function AuthSimulationSelector({
17
+ authMode,
18
+ setAuthMode,
19
+ selectedUser,
20
+ setSelectedUser,
21
+ users,
22
+ loading,
23
+ currentUser
24
+ }: AuthSimulationSelectorProps) {
25
+ return (
26
+ <div className="flex flex-wrap items-center gap-3">
27
+ <KeyRoundIcon size={iconSize.small} className="text-text-secondary dark:text-text-secondary-dark" />
28
+ <Typography
29
+ variant="caption"
30
+ className="text-text-secondary dark:text-text-secondary-dark text-xs font-medium"
31
+ >
32
+ Auth:
33
+ </Typography>
34
+ <button
35
+ onClick={() => setAuthMode("jwt")}
36
+ className={cls(
37
+ "px-3 py-1 text-xs rounded-full border transition-all",
38
+ authMode === "jwt"
39
+ ? "bg-primary/15 text-primary dark:text-primary-dark border-primary/30 font-medium"
40
+ : "border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-primary/30"
41
+ )}
42
+ >
43
+ JWT Token
44
+ </button>
45
+ <button
46
+ onClick={() => setAuthMode("none")}
47
+ className={cls(
48
+ "px-3 py-1 text-xs rounded-full border transition-all",
49
+ authMode === "none"
50
+ ? "bg-red-500/15 text-red-600 dark:text-red-400 border-red-500/30 font-medium"
51
+ : "border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-red-500/30"
52
+ )}
53
+ >
54
+ No Auth
55
+ </button>
56
+
57
+ {authMode === "jwt" && (
58
+ <>
59
+ <div className="w-px h-4 bg-surface-300 dark:bg-surface-600 mx-1" />
60
+ <Typography
61
+ variant="caption"
62
+ className="text-text-secondary dark:text-text-secondary-dark text-xs font-medium"
63
+ >
64
+ Run as:
65
+ </Typography>
66
+ <UserSelectPopover
67
+ selectedUser={selectedUser}
68
+ onUserSelected={setSelectedUser}
69
+ users={users}
70
+ loading={loading}
71
+ currentUser={currentUser}
72
+ />
73
+ </>
74
+ )}
75
+ </div>
76
+ );
77
+ }
@@ -0,0 +1,370 @@
1
+
2
+ import React, { useState, useEffect, useRef, useCallback } from "react";
3
+ import { Typography, cls, defaultBorderMixin, Button, Chip, CircularProgress, IconButton, Paper, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Select, SelectItem, Alert , iconSize } from "@rebasepro/ui";
4
+ import { GitBranchIcon, Trash2Icon, RefreshCwIcon, PlusIcon, CopyIcon } from "lucide-react";
5
+ import { useRebaseContext, useSnackbarController, ConfirmationDialog } from "@rebasepro/core";
6
+ import { isBranchAdmin } from "@rebasepro/types";
7
+ import type { BranchInfo } from "@rebasepro/types";
8
+
9
+ function formatSize(bytes: number | undefined): string {
10
+ if (bytes === undefined || bytes === null) return "—";
11
+ if (bytes < 1024) return `${bytes} B`;
12
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
13
+ if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
14
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
15
+ }
16
+
17
+ function formatRelative(date: Date | string | undefined): string {
18
+ if (!date) return "—";
19
+ const d = date instanceof Date ? date : new Date(date);
20
+ if (isNaN(d.getTime())) return "—";
21
+ const now = Date.now();
22
+ const diff = now - d.getTime();
23
+ if (diff < 60_000) return "just now";
24
+ if (diff < 3_600_000) { const m = Math.round(diff / 60_000); return `${m}m ago`; }
25
+ if (diff < 86_400_000) { const h = Math.round(diff / 3_600_000); return `${h}h ago`; }
26
+ if (diff < 604_800_000) { const d2 = Math.round(diff / 86_400_000); return `${d2}d ago`; }
27
+ return d.toLocaleDateString();
28
+ }
29
+
30
+ export function BranchesView() {
31
+ const { databaseAdmin } = useRebaseContext();
32
+ const snackbar = useSnackbarController();
33
+
34
+ const [branches, setBranches] = useState<BranchInfo[]>([]);
35
+ const [loading, setLoading] = useState(true);
36
+ const [selectedBranch, setSelectedBranch] = useState<string | null>(null);
37
+
38
+ // Create dialog
39
+ const [createOpen, setCreateOpen] = useState(false);
40
+ const [newBranchName, setNewBranchName] = useState("");
41
+ const [sourceBranch, setSourceBranch] = useState<string | undefined>(undefined);
42
+ const [creating, setCreating] = useState(false);
43
+
44
+ // Delete confirm
45
+ const [deleteTarget, setDeleteTarget] = useState<string | null>(null);
46
+ const [deleting, setDeleting] = useState(false);
47
+
48
+ // Refs
49
+ const snackbarRef = useRef(snackbar);
50
+ snackbarRef.current = snackbar;
51
+
52
+ const branchAdmin = isBranchAdmin(databaseAdmin) ? databaseAdmin : undefined;
53
+
54
+ const loadBranches = useCallback(async () => {
55
+ if (!branchAdmin) {
56
+ setLoading(false);
57
+ return;
58
+ }
59
+ try {
60
+ const result = await branchAdmin.listBranches();
61
+ setBranches(result);
62
+ } catch (e: unknown) {
63
+ snackbarRef.current.open({
64
+ type: "error",
65
+ message: e instanceof Error ? e.message : String(e)
66
+ });
67
+ } finally {
68
+ setLoading(false);
69
+ }
70
+ }, [branchAdmin]);
71
+
72
+ useEffect(() => {
73
+ loadBranches();
74
+ }, [loadBranches]);
75
+
76
+ const handleCreate = async () => {
77
+ if (!branchAdmin || !newBranchName.trim()) return;
78
+ setCreating(true);
79
+ try {
80
+ await branchAdmin.createBranch(newBranchName.trim(), sourceBranch ? { source: sourceBranch } : undefined);
81
+ snackbarRef.current.open({
82
+ type: "success",
83
+ message: `Branch "${newBranchName.trim()}" created successfully`
84
+ });
85
+ setCreateOpen(false);
86
+ setNewBranchName("");
87
+ setSourceBranch(undefined);
88
+ await loadBranches();
89
+ } catch (e: unknown) {
90
+ snackbarRef.current.open({
91
+ type: "error",
92
+ message: e instanceof Error ? e.message : String(e)
93
+ });
94
+ } finally {
95
+ setCreating(false);
96
+ }
97
+ };
98
+
99
+ const handleDelete = async () => {
100
+ if (!branchAdmin || !deleteTarget) return;
101
+ setDeleting(true);
102
+ try {
103
+ await branchAdmin.deleteBranch(deleteTarget);
104
+ snackbarRef.current.open({
105
+ type: "success",
106
+ message: `Branch "${deleteTarget}" deleted`
107
+ });
108
+ if (selectedBranch === deleteTarget) setSelectedBranch(null);
109
+ setDeleteTarget(null);
110
+ await loadBranches();
111
+ } catch (e: unknown) {
112
+ snackbarRef.current.open({
113
+ type: "error",
114
+ message: e instanceof Error ? e.message : String(e)
115
+ });
116
+ } finally {
117
+ setDeleting(false);
118
+ }
119
+ };
120
+
121
+ // Not supported
122
+ if (!branchAdmin) {
123
+ return (
124
+ <div className="flex flex-col items-center justify-center h-full gap-4 text-center p-8">
125
+ <GitBranchIcon size={iconSize.large} className="text-surface-300 dark:text-surface-600"/>
126
+ <Typography variant="h6" color="secondary">Database Branching Not Available</Typography>
127
+ <Typography variant="body2" color="disabled" className="max-w-md">
128
+ Branching requires a PostgreSQL backend with an admin connection configured.
129
+ Set <code className="text-xs bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded font-mono">adminConnectionString</code> in your server configuration.
130
+ </Typography>
131
+ </div>
132
+ );
133
+ }
134
+
135
+ if (loading) {
136
+ return (
137
+ <div className="flex items-center justify-center h-full">
138
+ <CircularProgress/>
139
+ </div>
140
+ );
141
+ }
142
+
143
+ const selected = branches.find(b => b.name === selectedBranch);
144
+
145
+ return (
146
+ <div className="flex h-full w-full overflow-hidden bg-white dark:bg-surface-950">
147
+ {/* ── Branch List ── */}
148
+ <div className={cls("flex flex-col w-[340px] min-w-[280px] border-r h-full", defaultBorderMixin)}>
149
+ <div className={cls("flex items-center justify-between px-4 py-2.5 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]", defaultBorderMixin)}>
150
+ <div className="flex items-center gap-2">
151
+ <GitBranchIcon size={iconSize.small} className="text-primary"/>
152
+ <Typography variant="subtitle2" className="font-semibold">Branches</Typography>
153
+ <Chip size="smallest" className="bg-surface-200 dark:bg-surface-700 text-surface-600 dark:text-surface-300">{branches.length}</Chip>
154
+ </div>
155
+ <div className="flex items-center gap-1">
156
+ <IconButton size="small" onClick={loadBranches} title="Refresh">
157
+ <RefreshCwIcon size={iconSize.smallest}/>
158
+ </IconButton>
159
+ <IconButton size="small" onClick={() => setCreateOpen(true)} title="Create branch" className="text-primary">
160
+ <PlusIcon size={iconSize.smallest}/>
161
+ </IconButton>
162
+ </div>
163
+ </div>
164
+ <div className="flex-1 overflow-y-auto p-2 space-y-1">
165
+ {branches.length === 0 ? (
166
+ <div className="flex flex-col items-center justify-center h-full gap-3 text-center px-4">
167
+ <CopyIcon size={iconSize.small} className="text-surface-300 dark:text-surface-600"/>
168
+ <Typography variant="body2" color="disabled" className="text-[13px]">
169
+ No branches yet. Create one to start working with an isolated database copy.
170
+ </Typography>
171
+ <Button
172
+ size="small"
173
+ variant="outlined"
174
+ onClick={() => setCreateOpen(true)}
175
+ startIcon={<PlusIcon size={iconSize.smallest}/>}
176
+ >
177
+ Create Branch
178
+ </Button>
179
+ </div>
180
+ ) : (
181
+ branches.map(branch => (
182
+ <div
183
+ key={branch.name}
184
+ onClick={() => setSelectedBranch(branch.name)}
185
+ className={cls(
186
+ "flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-all",
187
+ selectedBranch === branch.name
188
+ ? "bg-primary/10 dark:bg-primary/15 ring-1 ring-primary/30"
189
+ : "hover:bg-surface-100 dark:hover:bg-surface-950"
190
+ )}
191
+ >
192
+ <div className="w-2 h-2 rounded-full shrink-0 bg-emerald-500"/>
193
+ <div className="flex-1 min-w-0">
194
+ <Typography variant="body2" className="truncate font-medium text-[13px]">{branch.name}</Typography>
195
+ <Typography variant="caption" color="secondary" className="truncate text-[11px]">
196
+ from {branch.parentDatabase} · {formatRelative(branch.createdAt)}
197
+ </Typography>
198
+ </div>
199
+ {branch.sizeBytes !== undefined && (
200
+ <Typography variant="caption" color="disabled" className="font-mono text-[10px] shrink-0">
201
+ {formatSize(branch.sizeBytes)}
202
+ </Typography>
203
+ )}
204
+ </div>
205
+ ))
206
+ )}
207
+ </div>
208
+ </div>
209
+
210
+ {/* ── Detail Panel ── */}
211
+ <div className="flex-1 flex flex-col min-w-0 h-full overflow-hidden">
212
+ {!selected ? (
213
+ <div className="flex flex-col items-center justify-center h-full gap-3">
214
+ <GitBranchIcon size={iconSize.large} className="text-surface-200 dark:text-surface-700"/>
215
+ <Typography variant="body2" color="disabled">
216
+ {branches.length === 0 ? "Create a branch to get started" : "Select a branch to view details"}
217
+ </Typography>
218
+ </div>
219
+ ) : (
220
+ <>
221
+ {/* Header */}
222
+ <div className={cls("flex items-center justify-between px-5 py-3 border-b bg-white dark:bg-surface-950 min-h-[56px]", defaultBorderMixin)}>
223
+ <div className="flex items-center gap-3 min-w-0">
224
+ <div className="w-2.5 h-2.5 rounded-full bg-emerald-500"/>
225
+ <div className="min-w-0">
226
+ <Typography variant="subtitle1" className="font-semibold truncate">{selected.name}</Typography>
227
+ <Typography variant="caption" color="secondary" className="truncate">
228
+ Created from <span className="font-mono text-[11px]">{selected.parentDatabase}</span>
229
+ </Typography>
230
+ </div>
231
+ </div>
232
+ <div className="flex items-center gap-2 shrink-0">
233
+ <Button
234
+ size="small"
235
+ color="error"
236
+ variant="outlined"
237
+ onClick={() => setDeleteTarget(selected.name)}
238
+ startIcon={<Trash2Icon size={iconSize.smallest}/>}
239
+ >
240
+ Delete
241
+ </Button>
242
+ </div>
243
+ </div>
244
+
245
+ {/* Info Cards */}
246
+ <div className="px-5 py-4 bg-surface-50 dark:bg-surface-900/50">
247
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-3">
248
+ <StatCard label="Branch Name" value={selected.name} mono/>
249
+ <StatCard label="Source Database" value={selected.parentDatabase} mono/>
250
+ <StatCard label="Created" value={formatRelative(selected.createdAt)}/>
251
+ <StatCard label="Size" value={formatSize(selected.sizeBytes)}/>
252
+ </div>
253
+ </div>
254
+
255
+ {/* Usage Info */}
256
+ <div className="flex-1 overflow-y-auto px-5 py-4">
257
+ <Alert color="info">
258
+ <Typography variant="body2" className="text-[13px]">
259
+ <strong>How to use this branch:</strong> Switch your application&apos;s database connection to
260
+ <code className="mx-1 px-1.5 py-0.5 rounded bg-surface-100 dark:bg-surface-950 font-mono text-[12px]">{selected.name}</code>
261
+ to work with an isolated copy of your data. Changes made to this branch won&apos;t affect your main database.
262
+ </Typography>
263
+ </Alert>
264
+ <div className="mt-4 p-4 rounded-lg border bg-surface-50 dark:bg-surface-900 border-surface-200 dark:border-surface-700">
265
+ <Typography variant="caption" className="text-[10px] uppercase tracking-wider text-surface-400 mb-2 block font-medium">Connection Details</Typography>
266
+ <div className="space-y-2">
267
+ <div className="flex items-center gap-2">
268
+ <Typography variant="caption" color="secondary" className="w-24 shrink-0 text-[11px]">Database:</Typography>
269
+ <Typography variant="body2" className="font-mono text-[12px]">{selected.name}</Typography>
270
+ </div>
271
+ <div className="flex items-center gap-2">
272
+ <Typography variant="caption" color="secondary" className="w-24 shrink-0 text-[11px]">Branched from:</Typography>
273
+ <Typography variant="body2" className="font-mono text-[12px]">{selected.parentDatabase}</Typography>
274
+ </div>
275
+ <div className="flex items-center gap-2">
276
+ <Typography variant="caption" color="secondary" className="w-24 shrink-0 text-[11px]">Created at:</Typography>
277
+ <Typography variant="body2" className="font-mono text-[12px]">
278
+ {selected.createdAt instanceof Date
279
+ ? selected.createdAt.toLocaleString()
280
+ : new Date(selected.createdAt).toLocaleString()}
281
+ </Typography>
282
+ </div>
283
+ </div>
284
+ </div>
285
+ </div>
286
+ </>
287
+ )}
288
+ </div>
289
+
290
+ {/* ── Create Dialog ── */}
291
+ <Dialog open={createOpen} onOpenChange={setCreateOpen}>
292
+ <DialogTitle>Create New Branch</DialogTitle>
293
+ <DialogContent className="space-y-4 min-w-[400px]">
294
+ <Typography variant="body2" color="secondary" className="text-[13px]">
295
+ Create an isolated database copy. The branch will be a full clone of the source database at this point in time.
296
+ </Typography>
297
+ <div>
298
+ <TextField
299
+ label="Branch Name"
300
+ value={newBranchName}
301
+ onChange={(e) => setNewBranchName(e.target.value)}
302
+ placeholder="e.g. feature-auth, staging, preview-pr-42"
303
+ size="small"
304
+ autoFocus
305
+ />
306
+ </div>
307
+ {branches.length > 0 && (
308
+ <div>
309
+ <Select
310
+ label="Source Database"
311
+ value={sourceBranch ?? ""}
312
+ onValueChange={(v) => setSourceBranch(v || undefined)}
313
+ placeholder="Default (main database)"
314
+ size="small"
315
+ renderValue={(v) => v || "Default (main database)"}
316
+ >
317
+ <SelectItem value="">Default (main database)</SelectItem>
318
+ {branches.map(b => (
319
+ <SelectItem key={b.name} value={b.name}>{b.name}</SelectItem>
320
+ ))}
321
+ </Select>
322
+ </div>
323
+ )}
324
+ </DialogContent>
325
+ <DialogActions>
326
+ <Button variant="text" onClick={() => setCreateOpen(false)} disabled={creating}>
327
+ Cancel
328
+ </Button>
329
+ <Button
330
+ color="primary"
331
+ onClick={handleCreate}
332
+ disabled={!newBranchName.trim() || creating}
333
+ startIcon={creating ? <CircularProgress size="smallest"/> : <PlusIcon size={iconSize.smallest}/>}
334
+ >
335
+ {creating ? "Creating..." : "Create Branch"}
336
+ </Button>
337
+ </DialogActions>
338
+ </Dialog>
339
+
340
+ {/* ── Delete Confirm ── */}
341
+ <ConfirmationDialog
342
+ open={!!deleteTarget}
343
+ onAccept={handleDelete}
344
+ onCancel={() => setDeleteTarget(null)}
345
+ title="Delete Branch"
346
+ body={
347
+ <Typography variant="body2">
348
+ Are you sure you want to permanently delete the branch <strong>{deleteTarget}</strong>?
349
+ This action cannot be undone and all data in this branch will be lost.
350
+ </Typography>
351
+ }
352
+ loading={deleting}
353
+ />
354
+ </div>
355
+ );
356
+ }
357
+
358
+ function StatCard({ label, value, mono }: {
359
+ label: string; value: string; mono?: boolean;
360
+ }) {
361
+ return (
362
+ <div className={cls("px-3 py-2 rounded-lg border bg-white dark:bg-surface-900", defaultBorderMixin)}>
363
+ <Typography variant="caption" color="secondary" className="text-[10px] uppercase tracking-wider font-medium">{label}</Typography>
364
+ <Typography variant="body2" className={cls(
365
+ "mt-0.5 font-semibold text-[13px] truncate",
366
+ mono && "font-mono"
367
+ )}>{value}</Typography>
368
+ </div>
369
+ );
370
+ }