@rebasepro/admin 0.9.0 → 0.9.1-canary.0de22e0

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 (264) hide show
  1. package/README.md +7 -7
  2. package/dist/{CollectionEditorDialog-B-7uW3iJ.js → CollectionEditorDialog-D7odTn0N.js} +150 -36
  3. package/dist/CollectionEditorDialog-D7odTn0N.js.map +1 -0
  4. package/dist/{PropertyEditView-7KMTcrqi.js → PropertyEditView-i51tFOfM.js} +6 -6
  5. package/dist/PropertyEditView-i51tFOfM.js.map +1 -0
  6. package/dist/{RouterCollectionsStudioView-epqIbZrJ.js → RouterCollectionsStudioView-B9AjTCjT.js} +5 -5
  7. package/dist/RouterCollectionsStudioView-B9AjTCjT.js.map +1 -0
  8. package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
  9. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +1 -1
  10. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +1 -1
  11. package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
  12. package/dist/collection_editor_ui.js +5 -5
  13. package/dist/collection_editor_ui.js.map +1 -1
  14. package/dist/components/CollectionTableBinding/CollectionTableBindingProps.d.ts +1 -1
  15. package/dist/components/CollectionTableBinding/internal/EntityTableCell.d.ts +1 -1
  16. package/dist/components/CollectionTableBinding/internal/popup_field/PopupFormField.d.ts +1 -1
  17. package/dist/components/CollectionTableBinding/table_bindings.d.ts +1 -1
  18. package/dist/components/CollectionViewBinding/hooks/useCollectionInlineEditor.d.ts +1 -1
  19. package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
  20. package/dist/components/RebaseLayout.d.ts +5 -4
  21. package/dist/components/RebaseShell.d.ts +1 -0
  22. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  23. package/dist/components/SelectableTable/SelectableTableContext.d.ts +1 -1
  24. package/dist/components/SidePanelProvider.d.ts +1 -1
  25. package/dist/components/field_configs.d.ts +17 -0
  26. package/dist/components/index.d.ts +1 -1
  27. package/dist/contexts/BreacrumbsContext.d.ts +1 -1
  28. package/dist/editor.js +1 -1
  29. package/dist/editor.js.map +1 -1
  30. package/dist/export-BM6HPujv.js +518 -0
  31. package/dist/export-BM6HPujv.js.map +1 -0
  32. package/dist/form/components/LocalChangesMenu.d.ts +1 -1
  33. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  34. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
  35. package/dist/{history-7X5bON_n.js → history-CtIPJxvQ.js} +6 -6
  36. package/dist/history-CtIPJxvQ.js.map +1 -0
  37. package/dist/hooks/useSelectionDialog.d.ts +1 -1
  38. package/dist/import-DzQnT03v.js +328 -0
  39. package/dist/import-DzQnT03v.js.map +1 -0
  40. package/dist/index.d.ts +1 -1
  41. package/dist/index.js +3300 -2
  42. package/dist/index.js.map +1 -0
  43. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  44. package/dist/preview/util.d.ts +1 -0
  45. package/dist/types/components/formex.d.ts +1 -1
  46. package/dist/util/view_mode.d.ts +54 -0
  47. package/dist/{src-sUZfe29F.js → util-XFwQ9FEc.js} +17554 -21391
  48. package/dist/util-XFwQ9FEc.js.map +1 -0
  49. package/package.json +12 -17
  50. package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
  51. package/src/collection_editor/api/generateCollectionApi.ts +4 -4
  52. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +1 -1
  53. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +1 -1
  54. package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -1
  55. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -1
  56. package/src/collection_editor/ui/EditorEntityAction.tsx +1 -1
  57. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
  58. package/src/collection_editor/ui/KanbanSetupAction.tsx +1 -1
  59. package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
  60. package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
  61. package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
  62. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +1 -1
  63. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +1 -1
  64. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
  65. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +3 -3
  66. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +2 -2
  67. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +2 -2
  68. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +139 -13
  69. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +1 -1
  70. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +1 -1
  71. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +1 -1
  72. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
  73. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +2 -2
  74. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
  75. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
  76. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
  77. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +2 -2
  78. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +2 -2
  79. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
  80. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +2 -2
  81. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +1 -1
  82. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
  83. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
  84. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +2 -2
  85. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
  86. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +1 -1
  87. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
  88. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
  89. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
  90. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
  91. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
  92. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +3 -3
  93. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  94. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
  95. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
  97. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +1 -1
  98. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
  99. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
  100. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
  101. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
  102. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
  103. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
  104. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
  105. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
  106. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
  107. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
  108. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
  109. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
  110. package/src/collection_editor/useSafeSnackbarController.ts +1 -1
  111. package/src/components/AdminModeSyncer.tsx +1 -1
  112. package/src/components/ArrayContainer.tsx +1 -1
  113. package/src/components/ClearFilterSortButton.tsx +1 -1
  114. package/src/components/CollectionPanel.tsx +1 -1
  115. package/src/components/CollectionTableBinding/CollectionRowActions.tsx +3 -3
  116. package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +3 -3
  117. package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +1 -1
  118. package/src/components/CollectionTableBinding/PropertyTableCell.tsx +1 -1
  119. package/src/components/CollectionTableBinding/column_utils.tsx +1 -1
  120. package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +2 -2
  121. package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +2 -2
  122. package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +2 -2
  123. package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +1 -1
  124. package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +1 -1
  125. package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +2 -2
  126. package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +1 -1
  127. package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +4 -4
  128. package/src/components/CollectionTableBinding/table_bindings.tsx +1 -1
  129. package/src/components/CollectionViewBinding/BoardCardBinding.tsx +2 -2
  130. package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +4 -4
  131. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +1 -1
  132. package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +3 -3
  133. package/src/components/CollectionViewBinding/CollectionViewActions.tsx +3 -3
  134. package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +77 -127
  135. package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +5 -9
  136. package/src/components/CollectionViewBinding/EntityCardBinding.tsx +3 -3
  137. package/src/components/CollectionViewBinding/FiltersDialog.tsx +19 -1
  138. package/src/components/CollectionViewBinding/SplitListView.tsx +114 -63
  139. package/src/components/CollectionViewBinding/ViewModeToggle.tsx +1 -1
  140. package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +2 -2
  141. package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +2 -2
  142. package/src/components/CollectionViewBinding/useBoardDataController.tsx +9 -3
  143. package/src/components/CollectionViewBinding/usePreviewSlots.ts +1 -1
  144. package/src/components/DefaultAppBar.tsx +3 -3
  145. package/src/components/DefaultDrawer.tsx +3 -3
  146. package/src/components/DeleteEntityDialog.tsx +1 -1
  147. package/src/components/DetailViewBinding.tsx +7 -5
  148. package/src/components/DrawerNavigationGroup.tsx +2 -2
  149. package/src/components/EditFormActions.tsx +6 -6
  150. package/src/components/EditViewBinding.tsx +9 -8
  151. package/src/components/EntityPreviewBinding.tsx +5 -4
  152. package/src/components/EntityViewBinding.tsx +2 -2
  153. package/src/components/HomePage/ContentHomePage.tsx +6 -5
  154. package/src/components/HomePage/FavouritesView.tsx +2 -2
  155. package/src/components/HomePage/NavigationCardBinding.tsx +3 -3
  156. package/src/components/HomePage/NavigationGroup.tsx +1 -1
  157. package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
  158. package/src/components/JsonPreviewBinding.tsx +1 -1
  159. package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +3 -3
  160. package/src/components/RebaseAuthGate.tsx +2 -2
  161. package/src/components/RebaseLayout.tsx +7 -13
  162. package/src/components/RebaseNavigation.tsx +18 -3
  163. package/src/components/RebaseRouteDefs.tsx +3 -3
  164. package/src/components/RebaseShell.tsx +2 -1
  165. package/src/components/ReferenceTable/SelectionTableBinding.tsx +7 -6
  166. package/src/components/ReferenceWidget.tsx +1 -1
  167. package/src/components/RelationSelector.tsx +1 -1
  168. package/src/components/SearchIconsView.tsx +2 -2
  169. package/src/components/SelectableTable/SelectableTable.tsx +2 -2
  170. package/src/components/SelectableTable/SelectableTableContext.tsx +1 -1
  171. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +1 -1
  172. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +1 -1
  173. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +1 -1
  174. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +2 -2
  175. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -1
  176. package/src/components/SideDialogs.tsx +1 -1
  177. package/src/components/SidePanelBinding.tsx +47 -9
  178. package/src/components/SidePanelProvider.tsx +15 -12
  179. package/src/components/UserSelector.tsx +1 -1
  180. package/src/components/admin/CreationResultDialog.tsx +6 -3
  181. package/src/components/app/Scaffold.tsx +6 -2
  182. package/src/components/common/default_entity_actions.tsx +123 -25
  183. package/src/components/field_configs.tsx +42 -25
  184. package/src/components/history/EntityHistoryEntry.tsx +1 -1
  185. package/src/components/history/EntityHistoryView.tsx +5 -5
  186. package/src/components/history/LastEditedByIndicator.tsx +2 -2
  187. package/src/components/index.ts +1 -1
  188. package/src/contexts/BreacrumbsContext.tsx +1 -1
  189. package/src/data_export/export/BasicExportAction.tsx +1 -1
  190. package/src/data_export/export/ExportCollectionAction.tsx +1 -1
  191. package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
  192. package/src/data_import/components/ImportFileUpload.tsx +1 -1
  193. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +3 -5
  194. package/src/data_import/components/ImportSaveInProgress.tsx +1 -1
  195. package/src/data_import/import/ImportCollectionAction.tsx +8 -8
  196. package/src/data_import/utils/data.ts +2 -2
  197. package/src/data_import/utils/get_properties_mapping.ts +1 -1
  198. package/src/editor/components/image-bubble.tsx +1 -1
  199. package/src/editor/components/table-bubble.tsx +1 -1
  200. package/src/editor/editor.tsx +1 -1
  201. package/src/editor/selectors/color-selector.tsx +1 -1
  202. package/src/editor/selectors/link-selector.tsx +1 -1
  203. package/src/editor/selectors/node-selector.tsx +2 -2
  204. package/src/editor/selectors/text-buttons.tsx +1 -1
  205. package/src/form/EntityForm.tsx +8 -5
  206. package/src/form/EntityFormActions.tsx +1 -1
  207. package/src/form/EntityFormBinding.tsx +7 -5
  208. package/src/form/PropertyFieldBinding.tsx +3 -3
  209. package/src/form/components/ErrorFocus.tsx +1 -1
  210. package/src/form/components/LocalChangesMenu.tsx +3 -3
  211. package/src/form/components/StorageItemPreview.tsx +1 -1
  212. package/src/form/components/StorageUploadProgress.tsx +3 -3
  213. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -2
  214. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -3
  215. package/src/form/field_bindings/BlockFieldBinding.tsx +4 -3
  216. package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -2
  217. package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -3
  218. package/src/form/field_bindings/MapFieldBinding.tsx +3 -2
  219. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +4 -3
  220. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -1
  221. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -2
  222. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -1
  223. package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -4
  224. package/src/form/field_bindings/RelationFieldBinding.tsx +3 -2
  225. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -2
  226. package/src/form/field_bindings/SelectFieldBinding.tsx +2 -1
  227. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +5 -4
  228. package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -1
  229. package/src/form/field_bindings/TextFieldBinding.tsx +2 -1
  230. package/src/form/field_bindings/UserSelectFieldBinding.tsx +2 -1
  231. package/src/form/field_bindings/VectorFieldBinding.tsx +2 -1
  232. package/src/form/form_utils.ts +1 -1
  233. package/src/hooks/navigation/useNavigationResolution.ts +19 -4
  234. package/src/hooks/useBuildSidePanel.tsx +10 -2
  235. package/src/hooks/useCMSContext.tsx +1 -1
  236. package/src/hooks/useHistory.ts +1 -1
  237. package/src/hooks/useResolvedNavigationFrom.tsx +4 -2
  238. package/src/hooks/useSelectionDialog.tsx +3 -3
  239. package/src/index.ts +3 -3
  240. package/src/preview/PropertyPreview.tsx +2 -2
  241. package/src/preview/components/DatePreview.tsx +1 -1
  242. package/src/preview/components/EnumValuesChip.tsx +1 -1
  243. package/src/preview/components/ImagePreview.tsx +2 -2
  244. package/src/preview/components/ReferencePreview.tsx +3 -3
  245. package/src/preview/components/RelationPreview.tsx +3 -3
  246. package/src/preview/components/StorageThumbnail.tsx +1 -1
  247. package/src/preview/components/UrlComponentPreview.tsx +2 -9
  248. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
  249. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -1
  250. package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
  251. package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
  252. package/src/preview/property_previews/NumberPropertyPreview.tsx +1 -1
  253. package/src/preview/util.ts +9 -0
  254. package/src/routes/CustomViewRoute.tsx +2 -1
  255. package/src/routes/RebaseRoute.tsx +21 -26
  256. package/src/types/components/formex.tsx +1 -1
  257. package/src/util/navigation_utils.ts +2 -5
  258. package/src/util/previews.ts +4 -2
  259. package/src/util/view_mode.ts +102 -0
  260. package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +0 -1
  261. package/dist/PropertyEditView-7KMTcrqi.js.map +0 -1
  262. package/dist/RouterCollectionsStudioView-epqIbZrJ.js.map +0 -1
  263. package/dist/history-7X5bON_n.js.map +0 -1
  264. package/dist/src-sUZfe29F.js.map +0 -1
@@ -1,12 +1,29 @@
1
- import { CopyIcon, iconSize, KeyRoundIcon, PencilIcon, Trash2Icon } from "@rebasepro/ui";
1
+ import {
2
+ Alert,
3
+ Button,
4
+ CopyIcon,
5
+ Dialog,
6
+ DialogActions,
7
+ DialogContent,
8
+ DialogTitle,
9
+ iconSize,
10
+ KeyRoundIcon,
11
+ Label,
12
+ LoadingButton,
13
+ PencilIcon,
14
+ RadioGroup,
15
+ RadioGroupItem,
16
+ TextField,
17
+ Trash2Icon,
18
+ Typography
19
+ } from "@rebasepro/ui";
2
20
  import type { EntityAction, User, UserCreationResult } from "@rebasepro/types";
3
21
  import {
4
- ConfirmationDialog,
5
22
  useAuthController,
6
23
  useRebaseClient,
7
24
  useSnackbarController,
8
25
  useTranslation
9
- } from "@rebasepro/core";
26
+ } from "@rebasepro/app";
10
27
  import { DeleteEntityDialog } from "../DeleteEntityDialog";
11
28
  import { addRecentId } from "../CollectionViewBinding/utils";
12
29
  import { navigateToEntity } from "../../util/navigation_utils";
@@ -193,9 +210,23 @@ export function ResetPasswordActionDialog({
193
210
  const { t } = useTranslation();
194
211
  const [loading, setLoading] = useState(false);
195
212
  const [creationResult, setCreationResult] = useState<UserCreationResult | null>(null);
213
+ const [mode, setMode] = useState<"email" | "manual">("email");
214
+ const [password, setPassword] = useState("");
215
+ const [confirmPassword, setConfirmPassword] = useState("");
216
+ const [error, setError] = useState<string | null>(null);
217
+
218
+ // Strength rules are enforced server side, and are overridable through auth
219
+ // hooks, so only the match is checked here; the server's message is surfaced.
220
+ const passwordsMatch = password === confirmPassword;
221
+ const canSubmit = mode === "email" || (password.length > 0 && passwordsMatch);
196
222
 
197
223
  const handleConfirm = async () => {
224
+ if (mode === "manual" && !passwordsMatch) {
225
+ setError(t("passwords_dont_match") || "Passwords don't match");
226
+ return;
227
+ }
198
228
  setLoading(true);
229
+ setError(null);
199
230
  try {
200
231
  const baseUrl = client?.baseUrl || "";
201
232
  const token = await getAuthToken?.();
@@ -204,28 +235,32 @@ export function ResetPasswordActionDialog({
204
235
  headers: {
205
236
  "Content-Type": "application/json",
206
237
  ...(token ? { "Authorization": `Bearer ${token}` } : {})
207
- }
238
+ },
239
+ body: JSON.stringify(mode === "manual" ? { password } : {})
208
240
  });
209
241
  if (!response.ok) {
210
- const error = await response.json().catch(() => ({}));
211
- throw new Error(error.message || "Failed to reset password");
242
+ const errorBody = await response.json().catch(() => ({}));
243
+ throw new Error(errorBody.error?.message || errorBody.message || "Failed to reset password");
212
244
  }
213
245
  const data = await response.json();
214
- setCreationResult({
215
- user,
216
- invitationSent: data.invitationSent ?? false,
217
- temporaryPassword: data.temporaryPassword
218
- });
219
246
  snackbarController.open({
220
247
  type: "success",
221
248
  message: t("reset_password_success") || "Password reset successfully"
222
249
  });
223
- } catch (error: unknown) {
224
- snackbarController.open({
225
- type: "error",
226
- message: error instanceof Error ? error.message : (t("error_resetting_password") || "Error resetting password")
227
- });
228
- onClose();
250
+ // Setting a password directly returns neither an invitation nor a
251
+ // temporary password, so there is no result to show.
252
+ if (data.invitationSent || data.temporaryPassword) {
253
+ setCreationResult({
254
+ user,
255
+ invitationSent: data.invitationSent ?? false,
256
+ temporaryPassword: data.temporaryPassword,
257
+ emailDeliveryFailed: data.emailDeliveryFailed ?? false
258
+ });
259
+ } else {
260
+ onClose();
261
+ }
262
+ } catch (e: unknown) {
263
+ setError(e instanceof Error ? e.message : (t("error_resetting_password") || "Error resetting password"));
229
264
  } finally {
230
265
  setLoading(false);
231
266
  }
@@ -244,14 +279,77 @@ export function ResetPasswordActionDialog({
244
279
  }
245
280
 
246
281
  return (
247
- <ConfirmationDialog
248
- open={open}
249
- loading={loading}
250
- onAccept={handleConfirm}
251
- onCancel={onClose}
252
- title={<>{t("reset_password") || "Reset Password"}</>}
253
- body={<>{t("reset_password_confirmation") || "Are you sure you want to reset this user's password?"}</>}
254
- />
282
+ <Dialog open={open} onOpenChange={(o) => !o ? onClose() : undefined} maxWidth="xl">
283
+ <DialogTitle variant="h5" gutterBottom={false}>
284
+ {t("reset_password") || "Reset Password"}
285
+ </DialogTitle>
286
+ <DialogContent>
287
+ <div className="flex flex-col gap-4 py-2">
288
+ <Typography variant="body2" color="secondary">
289
+ {user.email}
290
+ </Typography>
291
+
292
+ <RadioGroup value={mode} onValueChange={(v) => {
293
+ setMode(v as "email" | "manual");
294
+ setError(null);
295
+ }}>
296
+ <div className="flex items-center gap-2">
297
+ <RadioGroupItem value="email" id="reset-password-mode-email"/>
298
+ <Label htmlFor="reset-password-mode-email">
299
+ {t("reset_password_send_email") || "Send a password reset email"}
300
+ </Label>
301
+ </div>
302
+ <div className="flex items-center gap-2">
303
+ <RadioGroupItem value="manual" id="reset-password-mode-manual"/>
304
+ <Label htmlFor="reset-password-mode-manual">
305
+ {t("reset_password_set_manually") || "Set a password manually"}
306
+ </Label>
307
+ </div>
308
+ </RadioGroup>
309
+
310
+ {mode === "manual" && <>
311
+ <TextField
312
+ type="password"
313
+ value={password}
314
+ autoFocus
315
+ autoComplete="new-password"
316
+ label={t("new_password") || "New password"}
317
+ onChange={(e) => {
318
+ setPassword(e.target.value);
319
+ setError(null);
320
+ }}
321
+ />
322
+ <TextField
323
+ type="password"
324
+ value={confirmPassword}
325
+ autoComplete="new-password"
326
+ error={confirmPassword.length > 0 && !passwordsMatch}
327
+ label={t("confirm_password") || "Confirm password"}
328
+ onChange={(e) => {
329
+ setConfirmPassword(e.target.value);
330
+ setError(null);
331
+ }}
332
+ />
333
+ <Typography variant="caption" color="secondary">
334
+ {t("reset_password_set_manually_description") ||
335
+ "The password is updated immediately and no email is sent. Share it with the user securely."}
336
+ </Typography>
337
+ </>}
338
+
339
+ {error && <Alert color="error">
340
+ <Typography variant="body2">{error}</Typography>
341
+ </Alert>}
342
+ </div>
343
+ </DialogContent>
344
+ <DialogActions>
345
+ <Button variant="text" onClick={onClose} disabled={loading}>
346
+ {t("cancel")}
347
+ </Button>
348
+ <LoadingButton variant="filled" onClick={handleConfirm} loading={loading} disabled={!canSubmit}>
349
+ {t("reset_password") || "Reset Password"}
350
+ </LoadingButton>
351
+ </DialogActions>
352
+ </Dialog>
255
353
  );
256
354
  }
257
355
 
@@ -42,6 +42,23 @@ import { RelationFieldBinding } from "../form/field_bindings/RelationFieldBindin
42
42
  import { UserSelectFieldBinding } from "../form/field_bindings/UserSelectFieldBinding";
43
43
  import { mergeDeep } from "@rebasepro/utils";
44
44
 
45
+ /**
46
+ * Every `Field` below is a getter on purpose — do not inline it back to
47
+ * `Field: SomeBinding`.
48
+ *
49
+ * This module and the field bindings form an import cycle: we import the
50
+ * bindings, the container bindings (map, repeat, block, custom-shaped array)
51
+ * import `PropertyFieldBinding` to render their children, and that imports
52
+ * `getFieldConfig` from here. Enter the cycle at a binding rather than here and
53
+ * this object is built while that binding's module is still initialising.
54
+ *
55
+ * As a plain value the binding would be read at that moment. It happens to
56
+ * survive today only because every binding is declared `export function`, which
57
+ * hoists; rewriting a single one as `export const` would make the read a
58
+ * temporal dead zone ReferenceError at import time, surfacing as a blank screen
59
+ * far from its cause. The getter defers the read to first access, long after
60
+ * every module has initialised, so declaration style stops mattering.
61
+ */
45
62
  export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> = {
46
63
  text_field: {
47
64
  key: "text_field",
@@ -51,7 +68,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
51
68
  color: "#2d7ff9",
52
69
  property: {
53
70
  type: "string",
54
- ui: { Field: TextFieldBinding }
71
+ ui: { get Field() { return TextFieldBinding; } }
55
72
  }
56
73
  },
57
74
  multiline: {
@@ -63,7 +80,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<DefaultFieldConfig, PropertyConfig> =
63
80
  property: {
64
81
  type: "string",
65
82
  ui: { multiline: true,
66
- Field: TextFieldBinding }
83
+ get Field() { return TextFieldBinding; } }
67
84
  }
68
85
  },
69
86
  markdown: {
@@ -75,7 +92,7 @@ Field: TextFieldBinding }
75
92
  property: {
76
93
  type: "string",
77
94
  ui: { markdown: true,
78
- Field: MarkdownEditorFieldBinding }
95
+ get Field() { return MarkdownEditorFieldBinding; } }
79
96
  }
80
97
  },
81
98
  url: {
@@ -87,7 +104,7 @@ Field: MarkdownEditorFieldBinding }
87
104
  property: {
88
105
  type: "string",
89
106
  ui: { url: true,
90
- Field: TextFieldBinding }
107
+ get Field() { return TextFieldBinding; } }
91
108
  }
92
109
  },
93
110
  email: {
@@ -99,7 +116,7 @@ Field: TextFieldBinding }
99
116
  property: {
100
117
  type: "string",
101
118
  email: true,
102
- ui: { Field: TextFieldBinding }
119
+ ui: { get Field() { return TextFieldBinding; } }
103
120
  }
104
121
  },
105
122
  switch: {
@@ -110,7 +127,7 @@ Field: TextFieldBinding }
110
127
  color: "#20d9d2",
111
128
  property: {
112
129
  type: "boolean",
113
- ui: { Field: SwitchFieldBinding }
130
+ ui: { get Field() { return SwitchFieldBinding; } }
114
131
  }
115
132
  },
116
133
  select: {
@@ -122,7 +139,7 @@ Field: TextFieldBinding }
122
139
  property: {
123
140
  type: "string",
124
141
  enum: [],
125
- ui: { Field: SelectFieldBinding }
142
+ ui: { get Field() { return SelectFieldBinding; } }
126
143
  }
127
144
  },
128
145
  multi_select: {
@@ -137,17 +154,17 @@ Field: TextFieldBinding }
137
154
  type: "string",
138
155
  enum: []
139
156
  },
140
- ui: { Field: MultiSelectFieldBinding }
157
+ ui: { get Field() { return MultiSelectFieldBinding; } }
141
158
  }
142
159
  },
143
160
  user_select: {
144
161
  key: "user_select",
145
- name: "UserIcon select",
162
+ name: "User select",
146
163
  description: "Select a user from the user management system. Store the user ID.",
147
164
  Icon: UserIcon,
148
165
  property: {
149
166
  type: "string",
150
- ui: { Field: UserSelectFieldBinding }
167
+ ui: { get Field() { return UserSelectFieldBinding; } }
151
168
  }
152
169
  },
153
170
  number_input: {
@@ -158,7 +175,7 @@ Field: TextFieldBinding }
158
175
  color: "#bec920",
159
176
  property: {
160
177
  type: "number",
161
- ui: { Field: TextFieldBinding }
178
+ ui: { get Field() { return TextFieldBinding; } }
162
179
  }
163
180
  },
164
181
  number_select: {
@@ -170,7 +187,7 @@ Field: TextFieldBinding }
170
187
  property: {
171
188
  type: "number",
172
189
  enum: [],
173
- ui: { Field: SelectFieldBinding }
190
+ ui: { get Field() { return SelectFieldBinding; } }
174
191
  }
175
192
  },
176
193
  multi_number_select: {
@@ -185,7 +202,7 @@ Field: TextFieldBinding }
185
202
  type: "number",
186
203
  enum: []
187
204
  },
188
- ui: { Field: MultiSelectFieldBinding }
205
+ ui: { get Field() { return MultiSelectFieldBinding; } }
189
206
  }
190
207
  },
191
208
  file_upload: {
@@ -199,7 +216,7 @@ Field: TextFieldBinding }
199
216
  storage: {
200
217
  storagePath: "{path}"
201
218
  },
202
- ui: { Field: StorageUploadFieldBinding }
219
+ ui: { get Field() { return StorageUploadFieldBinding; } }
203
220
  }
204
221
  },
205
222
  multi_file_upload: {
@@ -216,7 +233,7 @@ Field: TextFieldBinding }
216
233
  storagePath: "{path}"
217
234
  }
218
235
  },
219
- ui: { Field: StorageUploadFieldBinding }
236
+ ui: { get Field() { return StorageUploadFieldBinding; } }
220
237
  }
221
238
  },
222
239
  reference: {
@@ -227,7 +244,7 @@ Field: TextFieldBinding }
227
244
  color: "#ff0042",
228
245
  property: {
229
246
  type: "reference",
230
- ui: { Field: ReferenceFieldBinding }
247
+ ui: { get Field() { return ReferenceFieldBinding; } }
231
248
  }
232
249
  },
233
250
  multi_references: {
@@ -241,7 +258,7 @@ Field: TextFieldBinding }
241
258
  of: {
242
259
  type: "reference"
243
260
  },
244
- ui: { Field: ArrayOfReferencesFieldBinding }
261
+ ui: { get Field() { return ArrayOfReferencesFieldBinding; } }
245
262
  }
246
263
  },
247
264
  relation: {
@@ -253,7 +270,7 @@ Field: TextFieldBinding }
253
270
  property: {
254
271
  relationName: "",
255
272
  type: "relation",
256
- ui: { Field: RelationFieldBinding }
273
+ ui: { get Field() { return RelationFieldBinding; } }
257
274
  }
258
275
  },
259
276
  date_time: {
@@ -264,7 +281,7 @@ Field: TextFieldBinding }
264
281
  color: "#8b46ff",
265
282
  property: {
266
283
  type: "date",
267
- ui: { Field: DateTimeFieldBinding }
284
+ ui: { get Field() { return DateTimeFieldBinding; } }
268
285
  }
269
286
  },
270
287
  group: {
@@ -276,7 +293,7 @@ Field: TextFieldBinding }
276
293
  property: {
277
294
  type: "map",
278
295
  properties: {},
279
- ui: { Field: MapFieldBinding }
296
+ ui: { get Field() { return MapFieldBinding; } }
280
297
  }
281
298
  },
282
299
  key_value: {
@@ -288,7 +305,7 @@ Field: TextFieldBinding }
288
305
  property: {
289
306
  type: "map",
290
307
  keyValue: true,
291
- ui: { Field: KeyValueFieldBinding }
308
+ ui: { get Field() { return KeyValueFieldBinding; } }
292
309
  }
293
310
  },
294
311
  repeat: {
@@ -302,7 +319,7 @@ Field: TextFieldBinding }
302
319
  of: {
303
320
  type: "string"
304
321
  },
305
- ui: { Field: RepeatFieldBinding }
322
+ ui: { get Field() { return RepeatFieldBinding; } }
306
323
  }
307
324
  },
308
325
  custom_array: {
@@ -313,7 +330,7 @@ Field: TextFieldBinding }
313
330
  color: "#ff9408",
314
331
  property: {
315
332
  type: "array",
316
- ui: { Field: ArrayCustomShapedFieldBinding }
333
+ ui: { get Field() { return ArrayCustomShapedFieldBinding; } }
317
334
  }
318
335
  },
319
336
  block: {
@@ -327,7 +344,7 @@ Field: TextFieldBinding }
327
344
  oneOf: {
328
345
  properties: {}
329
346
  },
330
- ui: { Field: BlockFieldBinding }
347
+ ui: { get Field() { return BlockFieldBinding; } }
331
348
  }
332
349
  },
333
350
  vector_input: {
@@ -339,7 +356,7 @@ Field: TextFieldBinding }
339
356
  property: {
340
357
  type: "vector",
341
358
  dimensions: 1536,
342
- ui: { Field: VectorFieldBinding }
359
+ ui: { get Field() { return VectorFieldBinding; } }
343
360
  }
344
361
  }
345
362
  };
@@ -7,7 +7,7 @@ import { PreviewSize } from "../../types/components/PropertyPreviewProps";
7
7
  import { getPropertyInPath } from "../../util/property_utils";
8
8
  import { PropertyPreview } from "../../preview/PropertyPreview";
9
9
  import { SkeletonPropertyComponent } from "../../preview/property_previews/SkeletonPropertyComponent";
10
- import { useAuthController } from "@rebasepro/core";
10
+ import { useAuthController } from "@rebasepro/app";
11
11
  import { UserChip } from "./UserChip";
12
12
  import { HistoryEntryData } from "../../hooks";
13
13
  import { getValueInPath } from "@rebasepro/utils";
@@ -4,10 +4,10 @@ import { useRef, useEffect } from "react";
4
4
  import { cls, IconButton, Label, Tooltip, Typography } from "@rebasepro/ui";
5
5
  import { ErrorBoundary, HistoryIcon } from "@rebasepro/ui";
6
6
  import { EntityHistoryEntry } from "./EntityHistoryEntry";
7
- import { useSnackbarController, useAuthController } from "@rebasepro/core";
8
- import { ConfirmationDialog } from "@rebasepro/core";
7
+ import { useSnackbarController, useAuthController } from "@rebasepro/app";
8
+ import { ConfirmationDialog } from "@rebasepro/app";
9
9
  import { useState } from "react";
10
- import { useHistory } from "../../index";
10
+ import { useHistory } from "../../hooks/useHistory";
11
11
 
12
12
  /**
13
13
  * Entity history tab view. Shows a paginated list of entity revisions
@@ -72,7 +72,7 @@ export function EntityHistoryView<M extends Record<string, unknown>>({
72
72
 
73
73
  if (!entity) {
74
74
  return <div className="flex items-center justify-center h-full">
75
- <Label>HistoryIcon is only available for existing entities</Label>
75
+ <Label>History is only available for existing entities</Label>
76
76
  </div>;
77
77
  }
78
78
 
@@ -117,7 +117,7 @@ export function EntityHistoryView<M extends Record<string, unknown>>({
117
117
  <div className="flex flex-col gap-2 max-w-6xl mx-auto w-full">
118
118
 
119
119
  <Typography variant={"h5"} className={"mt-24 ml-4"}>
120
- HistoryIcon
120
+ History
121
121
  </Typography>
122
122
 
123
123
  {isLoading && entries.length === 0 && (
@@ -1,8 +1,8 @@
1
1
  import type { CollectionConfig } from "@rebasepro/types";
2
2
  import React, { useEffect, useState, useCallback } from "react";
3
3
  ;
4
- import { useApiConfig } from "@rebasepro/core";
5
- import { useAuthController } from "@rebasepro/core";
4
+ import { useApiConfig } from "@rebasepro/app";
5
+ import { useAuthController } from "@rebasepro/app";
6
6
  import { HistoryEntryData } from "../../hooks";
7
7
 
8
8
  function getRelativeTimeString(date: Date): string {
@@ -46,7 +46,7 @@ export * from "./DrawerNavigationGroup";
46
46
  export * from "./SideDialogs";
47
47
 
48
48
  export * from "./app/useApp";
49
- export * from "./RebaseCMS";
49
+ export * from "./RebaseAdmin";
50
50
  export * from "./RebaseShell";
51
51
 
52
52
  // Composable shell layers — each independently usable
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useMemo, useState } from "react";
2
- import { BreadcrumbEntry, BreadcrumbsController } from "../hooks/useBreadcrumbsController";
2
+ import type { BreadcrumbEntry, BreadcrumbsController } from "@rebasepro/types";
3
3
 
4
4
  const DEFAULT_BREADCRUMBS_CONTROLLER: BreadcrumbsController = {
5
5
  breadcrumbs: [],
@@ -1,7 +1,7 @@
1
1
 
2
2
  import React, { useCallback } from "react";
3
3
 
4
- import { useTranslation } from "@rebasepro/core";
4
+ import { useTranslation } from "@rebasepro/app";
5
5
  import { Entity, Properties } from "@rebasepro/types";
6
6
  import {
7
7
  BooleanSwitchWithLabel,
@@ -6,7 +6,7 @@ import {
6
6
  useCustomizationController,
7
7
  useData,
8
8
  useTranslation
9
- } from "@rebasepro/core";
9
+ } from "@rebasepro/app";
10
10
  import { useCMSContext } from "../../hooks";
11
11
  import { CollectionActionsProps, Entity, CollectionConfig, ExportConfig, RebaseContext, User } from "@rebasepro/types";
12
12
  import { getDefaultValuesFor } from "@rebasepro/common";
@@ -16,7 +16,7 @@ import {
16
16
  TextField,
17
17
  Typography
18
18
  } from "@rebasepro/ui";
19
- import { getIn, setIn } from "@rebasepro/formex";
19
+ import { getIn, setIn } from "@rebasepro/forms";
20
20
  import { ImportConfig } from "../types";
21
21
 
22
22
  export interface DataPropertyMappingProps {
@@ -1,6 +1,6 @@
1
1
  import { FileUpload, UploadIcon } from "@rebasepro/ui";
2
2
  import { convertFileToJson } from "../utils/file_to_json";
3
- import { useSnackbarController } from "@rebasepro/core";
3
+ import { useSnackbarController } from "@rebasepro/app";
4
4
 
5
5
  export function ImportFileUpload({ onDataAdded }: {
6
6
  onDataAdded: (data: object[], propertiesOrder?: string[]) => void
@@ -1,10 +1,8 @@
1
1
  import React from "react";
2
- import { useCustomizationController } from "@rebasepro/core";
2
+ import { useCustomizationController } from "@rebasepro/app";
3
3
  import { Property } from "@rebasepro/types";
4
- import {
5
- getFieldConfig,
6
- PropertyConfigBadge
7
- } from "../../components";
4
+ import { getFieldConfig } from "../../components/field_configs";
5
+ import { PropertyConfigBadge } from "../../components/PropertyConfigBadge";
8
6
  import { ErrorBoundary, IconButton, PencilIcon, TextField } from "@rebasepro/ui";
9
7
 
10
8
  export function ImportNewPropertyFieldPreview({
@@ -1,4 +1,4 @@
1
- import { useData } from "@rebasepro/core";
1
+ import { useData } from "@rebasepro/app";
2
2
  import { Entity, CollectionConfig } from "@rebasepro/types";
3
3
  import { RebaseData } from "@rebasepro/types";
4
4
  import { Button, CenteredView, CircularProgress, Typography } from "@rebasepro/ui";
@@ -3,14 +3,12 @@ import {
3
3
  useAuthController,
4
4
  useCustomizationController,
5
5
  useSnackbarController
6
- } from "@rebasepro/core";
6
+ } from "@rebasepro/app";
7
7
  import { getPropertiesWithPropertiesOrder, getPropertyInPath } from "../../util";
8
8
  import { CollectionActionsProps, Properties, Property, User, CollectionConfig } from "@rebasepro/types";
9
- import {
10
- getFieldConfig,
11
- PropertyConfigBadge,
12
- useSelectionController
13
- } from "../../components";
9
+ import { getFieldConfig } from "../../components/field_configs";
10
+ import { PropertyConfigBadge } from "../../components/PropertyConfigBadge";
11
+ import { useSelectionController } from "../../components/CollectionViewBinding/useSelectionController";
14
12
  import { CollectionTableBinding } from "../../components/CollectionTableBinding/CollectionTableBinding";
15
13
  import { useCollectionRegistryController } from "../../hooks";
16
14
  import {
@@ -29,10 +27,12 @@ import {
29
27
  Typography,
30
28
  UploadIcon
31
29
  } from "@rebasepro/ui";
32
- import { buildEntityPropertiesFromData } from "@rebasepro/schema-inference";
30
+ import { buildEntityPropertiesFromData } from "@rebasepro/inference";
33
31
  import { useImportConfig } from "../hooks";
34
32
  import { convertDataToEntity, getInferenceType } from "../utils";
35
- import { DataNewPropertiesMapping, ImportFileUpload, ImportSaveInProgress } from "../components";
33
+ import { DataNewPropertiesMapping } from "../components/DataNewPropertiesMapping";
34
+ import { ImportFileUpload } from "../components/ImportFileUpload";
35
+ import { ImportSaveInProgress } from "../components/ImportSaveInProgress";
36
36
  import { ImportConfig } from "../types";
37
37
  import { slugify } from "@rebasepro/utils";
38
38
 
@@ -2,8 +2,8 @@ import { getPropertyInPath } from "../../util";
2
2
  import { AuthController, Entity, CollectionConfig, EntityReference, CollectionRegistryController, Properties, Property, Vector } from "@rebasepro/types";
3
3
  import { isPropertyBuilder } from "@rebasepro/common";
4
4
  import { unflattenObject } from "./file_to_json";
5
- import { getIn } from "@rebasepro/formex";
6
- import { inferTypeFromValue } from "@rebasepro/schema-inference";
5
+ import { getIn } from "@rebasepro/forms";
6
+ import { inferTypeFromValue } from "@rebasepro/inference";
7
7
  import { mergeDeep } from "@rebasepro/utils";
8
8
 
9
9
  export function convertDataToEntity(authController: AuthController,
@@ -1,7 +1,7 @@
1
1
  // import {
2
2
  // type,
3
3
  // getPropertyInPath
4
- // } from "@rebasepro/core";
4
+ // } from "@rebasepro/app";
5
5
  import { Properties, Property } from "@rebasepro/types";
6
6
  // import { typeMapping } from "@rebasepro/types";
7
7
  //
@@ -3,7 +3,7 @@ import { useProseMirrorContext } from "../hooks/useProseMirrorContext";
3
3
  import { autoUpdate, computePosition, flip, offset, shift, type VirtualElement, type Placement } from "@floating-ui/dom";
4
4
  import { NodeSelection } from "prosemirror-state";
5
5
  import { TextField, defaultBorderMixin, Typography, cls } from "@rebasepro/ui";
6
- import { useTranslation } from "@rebasepro/core";
6
+ import { useTranslation } from "@rebasepro/app";
7
7
 
8
8
  export interface ImageBubbleProps {
9
9
  options?: { placement?: Placement; offset?: number };
@@ -10,7 +10,7 @@ import {
10
10
  type Placement
11
11
  } from "@floating-ui/dom";
12
12
  import { IconButton, Tooltip, defaultBorderMixin, cls } from "@rebasepro/ui";
13
- import { useTranslation } from "@rebasepro/core";
13
+ import { useTranslation } from "@rebasepro/app";
14
14
  import {
15
15
  addColumnBefore,
16
16
  addColumnAfter,
@@ -2,7 +2,7 @@
2
2
  import React, { useEffect, useState, useRef, useMemo } from "react";
3
3
  import { EditorState, Selection } from "prosemirror-state";
4
4
  import { cls, defaultBorderMixin, Separator, TextareaAutosize, useInjectStyles } from "@rebasepro/ui";
5
- import { useTranslation } from "@rebasepro/core";
5
+ import { useTranslation } from "@rebasepro/app";
6
6
  import { EditorBubble, ImageBubble, SlashCommandMenu, TableBubble, type JSONContent } from "./components";
7
7
  import { NodeSelector } from "./selectors/node-selector";
8
8
  import { LinkSelector } from "./selectors/link-selector";
@@ -1,5 +1,5 @@
1
1
  import type { Dispatch, SetStateAction } from "react";
2
- import { EditorBubbleItem } from "../components";
2
+ import { EditorBubbleItem } from "../components/editor-bubble-item";
3
3
  import { Button, CheckIcon, ChevronDownIcon, Popover } from "@rebasepro/ui";
4
4
  import { useProseMirrorContext } from "../hooks/useProseMirrorContext";
5
5
  import { isMarkActive, getMarkAttributes, setMark, unsetMark } from "../utils/prosemirror-utils";